Skip to content

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)

  1. 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.
  2. 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.
  3. 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:

  1. Venta (Sale): Se crea normal, pero el ítem marca falta de stock.
  2. PendingFulfillment: ¡Tabla Clave! Se inserta una fila indicando "Faltan X unidades para el SaleItem Y". Esta tabla actúa como cola de espera.
  3. Compra (Purchase Order): Generas una PO al proveedor para reponer.
  4. 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; ```