Skip to content

feat(wms): vehículo = Warehouse(kind=vehicle) + maxCapacity + Capacity→kernel (Inc 2 flota)#413

Merged
vgpastor merged 4 commits into
mainfrom
feature/wms-vehicles-inc2
Jul 14, 2026
Merged

feat(wms): vehículo = Warehouse(kind=vehicle) + maxCapacity + Capacity→kernel (Inc 2 flota)#413
vgpastor merged 4 commits into
mainfrom
feature/wms-vehicles-inc2

Conversation

@vgpastor

Copy link
Copy Markdown
Contributor

Closes #412 · Incremento 2 del EPIC #409. El vehículo como almacén móvil con capacidad. Todo en el paquete (dominio + persistencia), sin HTTP/auth.

Qué incluye

  • Capacity promovido de logistics al kernel (lo comparten inventory y logistics sin dependencia cruzada). logistics/capacity.ts y transport-capacity-errors.ts quedan como re-exports purosTransportCapacity/window-overlap intactos, instanceof preservado (misma clase).
  • Warehouse gana kind (fixed|vehicle, default fixed) + maxCapacity: Capacity | null (carga útil/payload). Invariante buildMaxCapacity: solo un vehículo declara capacidad (fijo+capacidad → error); capacidad parcial (solo peso o solo volumen) permitida; vehículo sin declarar (null) ok. Mutador setMaxCapacity. Round-trip por snapshot.
  • Guard no-archivar-con-carga: WarehouseNotEmptyError + assertWarehouseCanBeArchived(stockItemCount) puro (el conteo lo aporta el host; el paquete da el guard).
  • Persistencia: wms_0002_vehicles.sql (runner del paquete; kind text CHECK + max_weight_kg/max_volume_m3 numeric, idempotente con guard pg_constraint) + schema + mapper round-trip + int-tests.

Verificación (local, por mí)

warehouse-core build + 186 tests · api build + clean typecheck 0 errores (el re-export de Capacity no rompe el host) · warehouse-postgres build + 32 int-tests (contra Postgres local) · prettier packages · api-client + web · frozen-lockfile — todo verde.

Spec §1 · runner de migraciones del paquete valida en el step CI Test.

vgpastor added 4 commits July 13, 2026 21:52
Mueve Capacity + CapacityProps y sus errores (CapacityMustHaveWeightOrVolumeError,
InvalidCapacityAmountError) al kernel, para que inventory y logistics lo compartan
sin dependencia cruzada. logistics/capacity.ts y transport-capacity-errors.ts pasan
a re-exportar desde el kernel, sin romper a sus consumidores.
Añade WarehouseKind y la carga útil máxima (maxCapacity: Capacity | null) al
agregado Warehouse. Invariantes: sólo un vehículo puede declarar maxCapacity (un
almacén fijo con capacidad es error); un vehículo puede tenerla sin declarar
(null); la capacidad puede ser parcial (sólo peso o sólo volumen). Mutador
setMaxCapacity y round-trip por snapshot.
Añade WarehouseNotEmptyError y la función pura assertWarehouseCanBeArchived, que
lanza si el almacén todavía tiene StockItems a bordo. El conteo lo aporta el host;
el paquete aporta la política, precondición del port de archivado.
Migración wms_0002_vehicles añade a wms.warehouses las columnas kind (CHECK
fixed|vehicle, default fixed) y max_weight_kg/max_volume_m3 (numeric null),
idempotente. Schema Drizzle, mappers y repo hacen round-trip de kind + maxCapacity
(numeric string ↔ number, CapacityProps null si ambas columnas nulas). Int-tests
del round-trip de vehículo (capacidad parcial/completa) y del almacén fijo.
@vercel

vercel Bot commented Jul 13, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
response-grid Skipped Skipped Jul 13, 2026 8:22pm

Request Review

@vgpastor
vgpastor merged commit c60c315 into main Jul 14, 2026
13 checks passed
@vgpastor
vgpastor deleted the feature/wms-vehicles-inc2 branch July 14, 2026 04:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Vehículos] Inc 2: vehículo = Warehouse(kind=vehicle) + maxCapacity + Capacity→kernel + wms_0002

1 participant