Última actualización: 2025-10-04 · Este documento resume el propósito de cada tabla y cada columna del núcleo de depósito (Paso 2 — Warehouse).
Catálogo de ambientes (p.ej. CUARENTENA, SECO, FRIO, PICKING, PISO). Se usa para clasificar posiciones.
| Columna | Tipo | Notas |
|---|---|---|
id | INT PK | Identificador. |
code | VARCHAR(32) UNIQUE | Código estable (clave de negocio). |
nombre, descripcion | VARCHAR | Nombre/descripcion visibles. |
activo | TINYINT | Habilitado. |
created_at, updated_at, deleted_at | DATETIME | Auditoría. |
Catálogo de estados: RECIBIDO, CUARENTENA, POS_ENTERO, POS_PICKEADO, RESERVADO, REMANEJO, AVERIADO, EMBARCADO.
| Columna | Tipo | Notas |
|---|---|---|
id | INT PK | Identificador. |
code | VARCHAR(32) UNIQUE | Código del estado. |
nombre | VARCHAR(100) | Nombre visible. |
orden | TINYINT | Orden sugerido. |
activo | TINYINT | Habilitado. |
Depósitos físicos. code (p.ej. DEP1) es clave de negocio; se referencia desde posiciones y stocks.
| Columna | Tipo | Notas |
|---|---|---|
id | INT PK | Identificador. |
code | VARCHAR(32) UNIQUE | Código del depósito. |
nombre, descripcion, direccion | VARCHAR | Metadatos. |
activo | TINYINT | Habilitado. |
Rejilla 3D del depósito: rack → columna → nivel → fondo, con lado (A/B) y orientación (N/S/E/W). Permite multi-ocupación (capacidad en pallets).
| Columna | Tipo | Propósito / Observaciones |
|---|---|---|
id | BIGINT PK | Identificador. |
deposito_id | INT FK | FK a wh_deposito. |
rack, columna, nivel, fondo | INT | Coordenadas físicas. |
lado, orientacion | ENUM | Vista/cara y orientación. |
ambiente_id | INT FK | FK a wh_ambiente (p.ej. CUARENTENA). |
capacidad_pallets | SMALLINT | Capacidad nominal. |
ocupado, picked | TINYINT | Flags operativos para UI/reportes. |
color_hex, title | UI | Personalización visual del layout. |
code, code_full, pos_code, pos_code_full | VARCHAR | Códigos legibles (p.ej. DEP1-R01-C01-N01-F1). |
(deposito_id,rack,columna,nivel,fondo,lado) y (deposito_id,code,code_full,pos_code,pos_code_full).Trazabilidad FEFO por producto y código de lote. Relación 1:N con pallets/ítems.
| Columna | Tipo | Notas |
|---|---|---|
id | BIGINT PK | Identificador. |
producto_id | BIGINT FK | FK a para_productos. |
codigo | VARCHAR(64) | Código de lote (UNIQUE por producto). |
fecha_produccion, fecha_vencimiento | DATE | Fechas relevantes. |
observacion | VARCHAR(255) | Notas. |
Unidad física (pallet). Puede estar en tránsito (posicion_id = NULL), en CUARENTENA o posicionado. Indica si está pickeado o reservado.
| Columna | Tipo | Propósito |
|---|---|---|
id | BIGINT PK | Identificador. |
codigo | VARCHAR(64) UNIQUE | Etiqueta única (EAN128/SSCC/QR). |
deposito_id, posicion_id | FK | Ubicación actual (depósito/posición). |
estado_id | FK | FK a wh_pallet_estado. |
pickeado, reservado | TINYINT | Indicadores operativos. |
peso_bruto_kg, volumen_m3 | DECIMAL | Datos logísticos. |
Detalle del contenido del pallet por producto y lote. Soporta pallets mixtos.
| Columna | Tipo | Propósito |
|---|---|---|
id | BIGINT PK | Identificador. |
pallet_id, producto_id, lote_id | FK | Relaciones clave. |
uv_cajas, uc_unidades | INT | UV (cajas) y UC (sueltas). |
peso_bruto_kg | DECIMAL | Opcional. |
Índice único: (pallet_id, producto_id, lote_id). | ||
Registro de movimientos (IN | MOVE | OUT), a nivel pallet o parcial (producto/lote con deltas UV/UC).
| Columna | Tipo | Notas |
|---|---|---|
id | BIGINT PK | Identificador. |
deposito_id | INT FK | Ámbito del movimiento. |
tipo | ENUM | IN (ingreso), MOVE (reubicación), OUT (despacho). |
motivo, referencia | VARCHAR | Etiquetas libres (recepción, picking, ajuste, etc.). |
pallet_id, producto_id, lote_id | FK | Detalle afectado (si es parcial). |
from_pos_id, to_pos_id | FK | Origen/destino (puede ser NULL). |
delta_uv, delta_uc | INT | Deltas (+ entrada, − salida). |
user_id, created_at | INT/DATETIME | Auditoría mínima. |
Resumen por posición + producto + lote (+ opcional pallet). Usa columnas generadas persistidas para índices sin funciones.
| Columna | Tipo | Notas |
|---|---|---|
id | BIGINT PK | Identificador. |
deposito_id, posicion_id, producto_id, lote_id, pallet_id | FK | Dimensiones del stock. |
qty_uv, qty_uc | INT | Cantidades en UV/UC. |
pickeado | TINYINT | Marca saldo pickeado. |
posicion_id_norm, pallet_id_norm | GENERATED STORED | Normaliza NULL→0 para la UNIQUE key. |
UNIQUE: (deposito_id,posicion_id_norm,producto_id,lote_id,pallet_id_norm). | ||
-- Posiciones existentes (DEP1)
SELECT id, deposito_id, rack, columna, nivel, fondo, lado, code_full, ambiente_id
FROM wh_posicion
WHERE deposito_id = (SELECT id FROM wh_deposito WHERE code='DEP1')
ORDER BY rack, columna, nivel, fondo;
-- Pallets en CUARENTENA actualmente (por posición)
SELECT p.codigo AS pallet, pe.code AS estado, pos.code_full AS posicion
FROM wh_pallet p
JOIN wh_pallet_estado pe ON pe.id = p.estado_id
LEFT JOIN wh_posicion pos ON pos.id = p.posicion_id
WHERE pe.code = 'CUARENTENA';
-- Últimos movimientos (pallet y posición)
SELECT m.id, m.tipo, m.motivo, m.pallet_id, m.producto_id, m.lote_id, m.from_pos_id, m.to_pos_id, m.delta_uv, m.delta_uc, m.created_at
FROM wh_move m
ORDER BY m.id DESC
LIMIT 50;
-- Stock por posición (DEP1)
SELECT s.deposito_id, s.posicion_id, s.producto_id, s.lote_id, s.pallet_id, s.qty_uv, s.qty_uc, s.pickeado
FROM wh_stock s
WHERE s.deposito_id = (SELECT id FROM wh_deposito WHERE code='DEP1')
ORDER BY s.updated_at DESC;
Siguiente sugerencia: triggers/handlers para mantener wh_stock a partir de wh_move y cambios en wh_pallet_item (Paso 3).