Ventas con Acopio y Back Order
Este módulo explica cómo el sistema gestiona las ventas que involucran acopio (almacenamiento temporal) y productos en back order (pendientes de stock).
Conceptos Clave
- Acopio: Cuando el cliente compra mercadería pero decide retirarla o recibirla en una fecha futura. El stock se reserva lógica y físicamente.
- Back Order: Cuando se permite vender productos que no tienen stock físico actual, generando una obligación de entrega futura.
Flujo de Trabajo (Workflow)
Creación de la Venta:
- Al ingresar una venta, el sistema verifica el stock disponible.
- Si hay stock suficiente, se puede marcar para "Entrega Inmediata" o "Acopio".
- Si NO hay stock suficiente, el sistema alertará y permitirá (si el usuario tiene permisos) generar una venta en Back Order.
Gestión de Acopios:
- Los productos acopiados permanecen en el inventario valorizado pero no están disponibles para otras ventas.
- Se genera un remito de acopio interno que reserva la mercadería.
- Entrega de Acopios: Cuando el cliente decide retirar, el usuario puede ir a Ventas > Pendientes de Entrega, buscar el producto y seleccionar "Entregar Acopio" desde el menú de acciones (`...`). Esto abre un panel lateral de confirmación, y al aceptar, descuenta el stock físico definitivamente del depósito y marca el Acopio como entregado.
Gestión de Back Order:
- Las ventas en back order quedan en estado "Pendiente de Stock".
- El módulo de "Compras" o "Producción" debe priorizar estos ítems.
- Una vez que ingresa la mercadería (Recepción), el sistema notifica que hay pedidos en back order esperando estos productos.
- Se asigna el stock entrante a las ventas más antiguas (FIFO) o según prioridad configurada.
Flujo Técnico (Tablas Impactadas)
Cuando vendes un producto sin stock (Back Order), ocurre lo siguiente internamente:
- Venta (Sale): Se crea normal, pero el ítem marca falta de stock.
- PendingFulfillment: ¡Tabla Clave! Se inserta una fila indicando "Faltan X unidades para el SaleItem Y". Esta tabla actúa como cola de espera.
- Compra (Purchase Order): Generas una PO al proveedor para reponer.
- Recepción (Purchase Inbound):
- Al recibir la mercadería, se llena `Stock` y `StockLot`.
- Cross-docking Engine: El sistema detecta automáticamente que hay un `PendingFulfillment` esperando.
- Se ejecuta `FulfillmentService`: Asigna el nuevo stock a la venta pendiente, borra el registro de `PendingFulfillment` y crea la `StockReservation` correspondiente.
Estados de la Venta
- Borrador: Venta en preparación.
- Confirmada: Venta cerrada, genera impacto en cuenta corriente.
- En Acopio: Mercadería pagada/confirmada pero en nuestros depósitos.
- Pendiente (BO): Falta stock para completar la entrega.
- Entregada: Mercadería en poder del cliente.
Diagrama de Flujo
```mermaid graph TD A[Inicio Venta] --> B{"Hay Stock?"}; B -- Si --> C[Seleccionar Entrega]; C -- Inmediata --> D[Descuenta Stock]; C -- Acopio --> E[Reserva en Depósito Acopio]; B -- No --> F{"Autoriza Back Order?"}; F -- Si --> G[Venta en Estado Pendiente BO]; F -- No --> H[Cancelar/Modificar Venta]; G --> I[Ingreso de Mercadería]; I --> J[Asignación a Back Order]; J --> D; E --> K[Solicitud de Retiro]; K --> D; ```