Manual de usuario
Centro de ayuda/Manual de usuario/Inventario: consulta, ajustes, conteos y transferencias

Inventario: consulta, ajustes, conteos y transferencias

Última actualización 2026-10-13

Consulte stock en escritorio y móvil, registre ajustes directos, ejecute conteos cíclicos (incl. automáticos ABC) y transfiera entre almacenes.

El inventario usa un libro mayor solo de inserción (wms_inventory_ledger) como única fuente de verdad: cada movimiento escribe una línea con qty_change positivo/negativo; los saldos nunca se editan directamente. La proyección de saldos la mantiene el sistema y el libro prohíbe UPDATE/DELETE a nivel de base de datos.

Consultar inventario#

  • Escritorio WMS → Inventory: vista de detalle (filtros por SKU, ubicación, estado, lote, serie, canal…) y vista de resumen (cantidades por artículo + estado + tipo).
  • Página de inventario móvil: buscar por SKU o nombre; las tarjetas muestran SKU/nombre/ubicación/cantidad (solo lectura).
  • El inventario por lote se ordena por caducidad ascendente (FEFO). Las alertas de caducidad (expiry-alerts?days=90) listan stock available con caducidad dentro de hoy+días, con days_to_expiry.

Ajustes de inventario (modo directo)#

Los ajustes se registran directamente en el libro: no hay máquina de estados de «documento de ajuste» ni flujo de aprobación. La entrada actual es la API (POST /api/wms/inventory/adjust); aún no hay página de escritorio y se requiere el permiso wms.inventory_adjust.

  1. Obligatorio: warehouse_id, location_id, item_id, reason_code (texto libre como damage/lost/found; sin maestro de códigos).
  2. Cantidad, elija una: qty_after (ajustar a un valor objetivo) o qty_delta (incremento/decremento no nulo). Ambas o ninguna falla la validación; qty_after con delta cero devuelve {adjusted:false} sin escribir.
  3. El estado solo puede ser available / hold / damaged (por defecto available). Los ajustes negativos validan primero el disponible (WMS_STOCK_001 si falta); ubicaciones bloqueadas por conteo → LOCATION_LOCKED.
  4. Se escribe una línea con transaction_type=adjust, qty_change=delta (positivo = aumento, negativo = disminución) y reason_code obligatorio.

Conteos cíclicos#

  1. Cree la tarea (escritorio/API): scope cycle (conteo cíclico), full (auto-genera hasta 5000 líneas) o spot (muestreo); count_type blind u open (por defecto open). Se registra una instantánea system_qty; solaparse con un conteo sin terminar rechaza la creación (aquí actúa el bloqueo).
  2. Ejecute en el móvil: ingrese la cantidad contada por línea → enter-count envía una línea a la vez (las líneas contadas muestran sistema/contado/diferencia; reingresar marca recounted). La tarea pasa a in_progress.
  3. Apruebe en escritorio: approve pasa las líneas a approved o las devuelve a pending (limpiando contado y diferencia) para recontar.
  4. Contabilice: post solo procesa líneas approved (las de varianza cero se omiten). Sobrantes → adjust con reason_code=found, faltantes → lost (reference_type=count_task). Al terminar, la tarea se completa y los bloqueos se liberan.
  5. Conteos automáticos ABC: POST /api/wms/count-tasks/abc genera tareas cycle cuando vence el intervalo de la clase ABC. Por defecto A=7 días, B=30, C=90; configurable por almacén o por llamada. Lo dispara un cron o manualmente.

Transferencias entre almacenes#

Las transferencias son documentales (borrador → enviar → aprobar → expedir → recibir) y actualmente solo por API; aún no hay página de escritorio. Número: TRF-YYYYMMDD-XXXX. Se permite mover entre dos ubicaciones del mismo almacén.

  1. Crear → draft; submit → submitted.
  2. approve: approved valida el disponible de cada línea en origen (faltante → WMS_STOCK_001); rejected termina el flujo.
  3. ship → in_transit: revalida el disponible → escribe doble pierna (origen available −cant. / misma ubicación in_transit +cant.).
  4. receive → completed: origen in_transit −cant. / destino available +cant.; líneas a done. Cancelar solo desde draft/submitted/approved; in_transit solo se completa recibiendo.

Estados del inventario#

available → allocated al reservarse para picking/salida → shipped al expedir. Las retenciones van a hold, las roturas a damaged; tras expedir una transferencia, el origen queda in_transit. Los ajustes solo admiten available/hold/damaged.

Bloqueo por conteo: las ubicaciones cubiertas por un conteo sin terminar quedan bloqueadas; ajustes, movimientos y drops se rechazan con LOCATION_LOCKED. El bloqueo se libera al completar o cancelar.