XPert WMS · COMFAR · Documentación funcional

Reabastecimiento Automático por Stock Mínimo — Zona Picking

Cómo el sistema mantiene abastecido el sector de picking: detecta cuándo un producto baja del mínimo y genera automáticamente tareas de reabastecimiento desde almacenaje, con selección de lote por vencimiento (FEFO).

Almacén CENMRA Disparo: cron cada 30 min Tarea SAP: REPLENISH v1.0 · 2026-06-08
Índice

1 Qué resuelve

El sector de picking (de donde se arman los pedidos) debe tener siempre una cantidad mínima de cada producto. Cuando se consume y baja del mínimo, alguien tiene que traer más stock desde las estanterías de almacenaje. Antes esto era manual; ahora el sistema lo detecta y genera la tarea solo.

Zona PICKING

Donde el operario toma producto para preparar pedidos. 9 zonas en CENMRA: PK-OTCPK-OTX PIC-RXPIC-SUP PIC-FITOPIC-COSM PIC-CTRLPIC-DIS PIC-MM

Zona STORAGE

Estanterías de reserva donde vive el grueso del inventario (ej. CEN-PT, CEN-MP, CEN-IN). Es el origen del reabastecimiento.

2 Componentes

PiezaQué hace
CRUD Stock Mínimo
menú: Stock Mínimo Picking
Pantalla para definir, por producto y zona picking, el mínimo de unidades (y un objetivo opcional).
Tabla picking_min_levels Almacena la configuración: item + zona picking + mínimo.
Proceso automático
cron 30 min
Recorre los mínimos, compara contra el stock real de picking y genera tareas de reabastecimiento.
Tarea REPLENISH Orden de mover stock de un bin de STORAGE a un bin de PICKING. Aparece en Tareas de Almacén.
Ejecución por operario El operario completa la tarea y el sistema mueve el stock (y registra el movimiento).

3 Flujo completo paso a paso

1

Se configura el mínimo

Un supervisor define en el CRUD: “el producto 70422 en PIC-RX debe tener mínimo 640 unidades”. (La carga inicial de 49 productos ya se hizo desde el Excel.)

2

El cron se ejecuta (cada 30 min)

El proceso replenish_cron.php recorre todos los mínimos activos del almacén.

3

Mide el stock actual en picking

Suma el stock disponible (cantidad − reservado, estado AVAILABLE) del producto en su zona de picking. Si está por encima del mínimo → no hace nada.

4

Detecta faltante y busca origen (FEFO)

Si está por debajo, calcula cuánto falta y busca stock disponible en las zonas STORAGE, eligiendo primero el lote que vence antes (FEFO). Puede combinar varios bins/lotes para cubrir el faltante.

5

Genera la tarea REPLENISH y reserva el origen

Crea una tarea en Tareas de Almacén (origen = bin STORAGE, destino = bin de la zona picking, cantidad). Reserva ese stock en origen para que nadie más lo tome. No crea duplicados si ya hay una abierta.

6

El operario ejecuta

En Tareas: AsignarIniciarCompletar. Va físicamente, traslada el producto al sector picking y confirma.

7

El stock se mueve y se libera la reserva

Al completar, el sistema descuenta del bin STORAGE, suma al bin PICKING, libera la reserva y deja registrado el movimiento. El picking vuelve a estar por encima del mínimo. ✅

4 El CRUD de mínimos

Menú lateral → Stock Mínimo Picking (grupo Zonificación).

ColumnaSignificado
Código / ProductoArtículo SAP.
Zona pickingDónde debe mantenerse el stock (PK-OTC, PIC-RX, etc.).
MínimoUmbral. Por debajo de esto se dispara el reabastecimiento.
Stock pickingCantidad disponible ahora en esa zona. ámbar si está por debajo del mínimo.
ActivoSi está desactivado, el proceso lo ignora.
AccionesEditar / Eliminar. Botón + Nuevo mínimo para agregar.
Objetivo (opcional): si se carga, el sistema repone hasta esa cantidad. Si se deja vacío, repone hasta el mínimo.

5 Lógica de decisión

FEFO (First Expired, First Out)

El origen siempre se elige por vencimiento más próximo primero, para rotar el stock y evitar vencimientos.

Reserva del origen

Al crear la tarea, la cantidad queda reservada en el bin de origen: no se cuenta como disponible para ventas ni para otra tarea. Se libera al completar.

Sin duplicados

Si ya existe una tarea REPLENISH abierta (pendiente / asignada / en progreso) para ese producto y zona, no se crea otra.

Cobertura parcial

Si en STORAGE no hay suficiente para cubrir todo el faltante, se reabastece lo que haya disponible. Si no hay nada en STORAGE, no se genera tarea.

Resumen de una corrida

$ php replenish_cron.php 16 {"ts":"2026-06-08T23:24:22", "wh":16, "checked":49, // mínimos evaluados "created":4, // tareas REPLENISH generadas "skipped":0, // ya cubiertos o con tarea abierta "no_source":45,// sin stock en STORAGE para reponer "errors":0}

6 Estados de la tarea de reabastecimiento

EstadoSignificadoAcción
PENDINGGenerada por el sistema, sin operario.Asignar / Iniciar
ASSIGNEDAsignada a un operario.Iniciar
IN_PROGRESSEl operario está moviendo el producto.Completar
COMPLETEDStock movido a picking; reserva liberada.
Al completar se ejecuta el movimiento real: STORAGE → PICKING, se descuenta del origen, se suma al destino y queda registrado en el historial de movimientos.

7 Modelo de datos

Tabla picking_min_levels

CampoDescripción
item_idProducto.
zone_idZona de picking (tipo PICKING).
min_qtyMínimo en unidades.
target_qtyObjetivo a reponer (opcional; por defecto = mínimo).
is_activeActivo / inactivo.

La tarea se guarda en warehouse_tasks con task_type = 'REPLENISH', reference_type = 'PICKING_MIN', y los campos from_bin_id, to_bin_id, item_id, batch_id, quantity. El movimiento se registra en stock_movements.

8 Familias y carga inicial

La función aplica a productos cuya familia SAP determina su zona de picking. Carga inicial desde el archivo “Stock Mínimo Picking.xlsx” (49 productos):

Grupo SAPFamiliaZona pickingProductos
103NA-RXPIC-RX23
104NA-OTCPK-OTC5
105NA-OTXPK-OTX21

9 Pendientes y notas

7 productos del grupo 133 (NA-PARACANN) no se cargaron automáticamente porque no existe una zona de picking equivalente: 70287, 70333, 70581, 70583, 70585, 70934, 770585. Hay que definir su zona (ej. PIC-CTRL) y cargarlos desde el CRUD.
Código 770585 (PRODROM THC) parece tener un dígito de más — verificar contra SAP.
El proceso reabastece dentro del mismo almacén (CENMRA): de zonas STORAGE a zonas PICKING. No mueve stock entre almacenes ni toca SAP — opera sobre el inventario del WMS.