@globalemergency/warehouse-core
v0.1.1
Published
Núcleo reutilizable de gestión de almacén (dominio puro). Motor del WMS OpenDepot; consumido por ResponseGrid y por cualquier host. Sin NestJS, sin Drizzle, sin infraestructura.
Maintainers
Readme
@globalemergency/warehouse-core
Núcleo de dominio puro de un sistema de gestión de almacén (WMS): un motor reutilizable pensado para Protección Civil y ayuda humanitaria, válido para cualquier sector. Lo consumen la app OpenDepot y ResponseGrid.
Sin NestJS, sin Drizzle/pg, sin red ni disco: solo agregados, value objects y
servicios de dominio. La persistencia y el HTTP los pone cada host — ver
@globalemergency/warehouse-postgres.
Instalación
pnpm add @globalemergency/warehouse-corePrincipios
- Dominio puro. Nunca importa infraestructura ni
apps/*; los hosts importan de aquí, no al revés. - Agnóstico de tenencia. Opera contra un
ScopeIdopaco: el host traduce su identidad de tenant (organización, emergencia, centro…) a unScopeIden la frontera. El paquete no conoce auth ni permisos. - Módulos internos vía subpath exports; se dividirían en paquetes propios solo ante una necesidad real (OCP/DIP).
Módulos
| Import | Qué contiene |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| .../kernel | ScopeId, SupplyLine, Category/CategorySlug/CategoryRegistry, Capacity, DomainEvent |
| .../catalog | Supply (maestro de insumos), resolvers texto→id, alias/normalización y puertos |
| .../inventory | Warehouse/Zone/Bin, StockItem, StockMovement (kardex + actorId), FEFO, reservas, recuentos, caducidad, LoadTemplate + gapAnalysis, capacidad/manifiesto de vehículo |
| .../containers | Container (palet/caja/lote) y su holder polimórfico |
| .../logistics | TransportCapacity, Shipment (con vehicleId, modos excluyentes), matching |
Uso mínimo
import {
Warehouse,
WarehouseId,
} from '@globalemergency/warehouse-core/inventory';
import { ScopeId } from '@globalemergency/warehouse-core/kernel';
const scopeId = ScopeId.create(); // el host mapea su tenant a un ScopeId opaco
const warehouse = Warehouse.create({
id: WarehouseId.create(),
scopeId,
code: 'ALM-CENTRAL',
name: 'Almacén Central',
zones: [],
});
// Los agregados son inmutables y exponen snapshots para persistir:
const snapshot = warehouse.toSnapshot();Build
pnpm --filter @globalemergency/warehouse-core build # dual CJS + ESM
pnpm --filter @globalemergency/warehouse-core test # node --test sobre JS compiladoLicencia
AGPL-3.0-only. Las obras derivadas —incluidos los despliegues en red/SaaS
modificados— deben permanecer open source bajo la misma licencia. Ver
LICENSE.
