🧱 SOL · Núcleo de Depósito — Recuento de Tablas y Columnas

Ú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).

Índice

1) wh_ambiente ambientes operativos

Catálogo de ambientes (p.ej. CUARENTENA, SECO, FRIO, PICKING, PISO). Se usa para clasificar posiciones.

ColumnaTipoNotas
idINT PKIdentificador.
codeVARCHAR(32) UNIQUECódigo estable (clave de negocio).
nombre, descripcionVARCHARNombre/descripcion visibles.
activoTINYINTHabilitado.
created_at, updated_at, deleted_atDATETIMEAuditoría.

2) wh_pallet_estado ciclo de vida

Catálogo de estados: RECIBIDO, CUARENTENA, POS_ENTERO, POS_PICKEADO, RESERVADO, REMANEJO, AVERIADO, EMBARCADO.

ColumnaTipoNotas
idINT PKIdentificador.
codeVARCHAR(32) UNIQUECódigo del estado.
nombreVARCHAR(100)Nombre visible.
ordenTINYINTOrden sugerido.
activoTINYINTHabilitado.

3) wh_deposito multidepósito

Depósitos físicos. code (p.ej. DEP1) es clave de negocio; se referencia desde posiciones y stocks.

ColumnaTipoNotas
idINT PKIdentificador.
codeVARCHAR(32) UNIQUECódigo del depósito.
nombre, descripcion, direccionVARCHARMetadatos.
activoTINYINTHabilitado.

4) wh_posicion posiciones 3D

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).

ColumnaTipoPropósito / Observaciones
idBIGINT PKIdentificador.
deposito_idINT FKFK a wh_deposito.
rack, columna, nivel, fondoINTCoordenadas físicas.
lado, orientacionENUMVista/cara y orientación.
ambiente_idINT FKFK a wh_ambiente (p.ej. CUARENTENA).
capacidad_palletsSMALLINTCapacidad nominal.
ocupado, pickedTINYINTFlags operativos para UI/reportes.
color_hex, titleUIPersonalización visual del layout.
code, code_full, pos_code, pos_code_fullVARCHARCódigos legibles (p.ej. DEP1-R01-C01-N01-F1).
Claves únicas: (deposito_id,rack,columna,nivel,fondo,lado) y (deposito_id,code,code_full,pos_code,pos_code_full).

5) wh_lote lotes por producto

Trazabilidad FEFO por producto y código de lote. Relación 1:N con pallets/ítems.

ColumnaTipoNotas
idBIGINT PKIdentificador.
producto_idBIGINT FKFK a para_productos.
codigoVARCHAR(64)Código de lote (UNIQUE por producto).
fecha_produccion, fecha_vencimientoDATEFechas relevantes.
observacionVARCHAR(255)Notas.

6) wh_pallet bloques físicos

Unidad física (pallet). Puede estar en tránsito (posicion_id = NULL), en CUARENTENA o posicionado. Indica si está pickeado o reservado.

ColumnaTipoPropósito
idBIGINT PKIdentificador.
codigoVARCHAR(64) UNIQUEEtiqueta única (EAN128/SSCC/QR).
deposito_id, posicion_idFKUbicación actual (depósito/posición).
estado_idFKFK a wh_pallet_estado.
pickeado, reservadoTINYINTIndicadores operativos.
peso_bruto_kg, volumen_m3DECIMALDatos logísticos.

7) wh_pallet_item contenido (SKU/lote)

Detalle del contenido del pallet por producto y lote. Soporta pallets mixtos.

ColumnaTipoPropósito
idBIGINT PKIdentificador.
pallet_id, producto_id, lote_idFKRelaciones clave.
uv_cajas, uc_unidadesINTUV (cajas) y UC (sueltas).
peso_bruto_kgDECIMALOpcional.
Índice único: (pallet_id, producto_id, lote_id).

8) wh_move movimientos

Registro de movimientos (IN | MOVE | OUT), a nivel pallet o parcial (producto/lote con deltas UV/UC).

ColumnaTipoNotas
idBIGINT PKIdentificador.
deposito_idINT FKÁmbito del movimiento.
tipoENUMIN (ingreso), MOVE (reubicación), OUT (despacho).
motivo, referenciaVARCHAREtiquetas libres (recepción, picking, ajuste, etc.).
pallet_id, producto_id, lote_idFKDetalle afectado (si es parcial).
from_pos_id, to_pos_idFKOrigen/destino (puede ser NULL).
delta_uv, delta_ucINTDeltas (+ entrada, − salida).
user_id, created_atINT/DATETIMEAuditoría mínima.

9) wh_stock resumen de stock

Resumen por posición + producto + lote (+ opcional pallet). Usa columnas generadas persistidas para índices sin funciones.

ColumnaTipoNotas
idBIGINT PKIdentificador.
deposito_id, posicion_id, producto_id, lote_id, pallet_idFKDimensiones del stock.
qty_uv, qty_ucINTCantidades en UV/UC.
pickeadoTINYINTMarca saldo pickeado.
posicion_id_norm, pallet_id_normGENERATED STOREDNormaliza NULL→0 para la UNIQUE key.
UNIQUE: (deposito_id,posicion_id_norm,producto_id,lote_id,pallet_id_norm).

Consultas útiles de verificación

-- 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).