CHEFMANAGER 3.3.6 — INVENTARIO ALIMENTARIO POR LOTES Y VENCIMIENTOS

1. RECEPCIÓN
Toda compra nueva recibida exige por cada línea:
- Código/ID de lote.
- Fecha de vencimiento.
- Días de alerta.
La recepción de un lote ya vencido se rechaza.
Toda entrada manual positiva desde Ajustar existencia también exige lote y vencimiento. Las salidas manuales descuentan lotes utilizables sin consumir vencidos.

2. SEMÁFORO
- VERDE / fresh: fuera del margen de alerta.
- AMARILLO / warning: faltan <= días de alerta.
- ROJO / expired: fecha de vencimiento ya superada.
Los vencidos no forman parte del stock utilizable.

3. FEFO + PEPS
ChefManager prioriza la salida del lote con vencimiento más cercano (FEFO). Si dos lotes vencen el mismo día, prioriza el de ingreso más antiguo (PEPS/FIFO).
Los movimientos quedan asociados al lote y a la venta/transferencia que los originó.

4. BLOQUEO SANITARIO DE RECETAS
Antes de confirmar una comanda, ChefManager calcula los ingredientes requeridos por las recetas y valida el stock utilizable. Si existen lotes trazados y la única forma de cubrir la receta sería usar un lote vencido, el pedido no puede enviarse a Cocina.
Al cobrar la venta se vuelve a validar y se descuenta el lote correcto.

5. BAJA POR VENCIMIENTO
Un lote rojo muestra la acción "Dar de baja". La baja:
- deja el lote en cero y estado written_off;
- descuenta el stock físico agregado;
- registra una pérdida/merma con motivo expiry;
- calcula el costo estimado;
- crea trazabilidad en kardex y movimientos de lote;
- genera notificación a los responsables.

6. ALERTAS INTERNAS Y WHATSAPP
Las alertas internas funcionan sin servicios externos.
Para WhatsApp, configurar una integración activa con provider "whatsapp_business" en Integraciones y mantener activas:
- Notificaciones habilitadas.
- Alertas de vencimiento a responsables.
El reporte diario se envía a Local/Administrador/Gerente/Inventario que tengan teléfono registrado. Cocina recibe alerta interna, pero no información financiera.
La hora predeterminada es 07:00 y puede modificarse entre 0 y 23 desde la configuración de WhatsApp.

7. CRON RECOMENDADO
Opción A — worker general (recomendado si ya está instalado):
  php /RUTA/ChefManager/cron/worker.php
Ejecutarlo cada 5–15 minutos. El sistema actualiza estados y solo genera el resumen diario a partir de la hora configurada, con deduplicación por lote/día.

Opción B — tarea dedicada:
  php /RUTA/ChefManager/cron/inventory-expiry.php
Ejecutarla diariamente, por ejemplo a las 07:00.

8. TRANSFERENCIAS ENTRE SUCURSALES
Cuando existe trazabilidad por lotes, ChefManager mueve primero lotes utilizables FEFO y conserva lote, vencimiento y costo en la sucursal destino. Nunca transfiere lotes vencidos para completar una salida.

9. INVENTARIO LEGADO
Al actualizar una instalación anterior pueden existir cantidades sin lote. ChefManager las conserva como stock legado para evitar bloquear la operación durante la migración. Toda recepción nueva queda bajo control obligatorio de lotes y vencimientos.
