Ir al contenido

Ubicaciones Almacén

Gestiona ubicaciones físicas dentro de almacenes con estructura jerárquica (pasillo, estante, compartimento).

  1. Ve a la pestaña “Almacenes → Ubicaciones”.
  2. Clic en ”+ Nueva Ubicación”.
  3. Selecciona el almacén padre.
  4. Completa los campos obligatorios (ver tabla abajo).
  5. (Opcional) Define estructura jerárquica (pasillo, estante, compartimento).
  6. Clic en “Guardar” — ubicación creada.
CampoDescripciónEjemplo
AlmacénAlmacén padreAlmacén Central
NombreIdentificador descriptivoZona de Ropa
CódigoCódigo único de ubicaciónA1-E2-C3

Campos opcionales — Estructura jerárquica

Sección titulada «Campos opcionales — Estructura jerárquica»
CampoDescripciónEjemplo
PasilloIdentificador de pasilloA1
EstanteNúmero de estanteríaE2
CompartimentoCompartimento específicoC3
  • La ubicación aparece en la lista con su código único.
  • Puedes asignar productos a la ubicación.
  • El código se puede usar en transferencias de stock.
MensajeCausaSolución
”El almacén es requerido”No seleccionaste almacénElige un almacén de la lista
”El nombre es requerido”Campo vacíoIntroduce nombre descriptivo
”El código es requerido”Campo vacíoIntroduce código único
”Código duplicado”Ya existeUsa código diferente
🔧 Detalles Técnicos — Ubicaciones Almacén

Tablas involucradas:

TablaColumnas claveFK
warehouse_locationsid, warehouse_id, name, code, description, aisle, shelf, bin, is_activewarehouses

Tipo de dato:

interface LocationData {
id: string;
warehouse_id: string;
name: string;
code: string;
description?: string;
aisle?: string;
shelf?: string;
bin?: string;
is_active: boolean;
}

Componente:

  • Sub-módulo: /src/features/products/sub-modules/warehouse/
  • LocationManager.tsx — Gestión de ubicaciones
  • LocationSelector.tsx — Selector de ubicaciones en formularios

Queries de diagnóstico:

-- Ubicaciones de un almacén
SELECT id, name, code, aisle, shelf, bin
FROM warehouse_locations
WHERE warehouse_id = '<warehouse_id>'
AND is_active = true
ORDER BY code;
-- Productos por ubicación
SELECT wl.code as ubicacion, p.name, sm.quantity
FROM stock_movements sm
INNER JOIN warehouse_locations wl ON wl.id = sm.warehouse_location_to_id
INNER JOIN products p ON p.id = sm.product_id
WHERE wl.warehouse_id = '<warehouse_id>'
AND sm.movement_type = 'entrada';

Query keys:

  • Ubicación: /src/features/products/sub-modules/warehouse/api/query-keys.ts
  • warehouseLocationKeys.all
  • warehouseLocationKeys.byWarehouse(warehouseId)