Saltar al contenido principal

Reserva de Stock y Gestión de Inventario

En BaseGes ERP, los pedidos de venta no solo formalizan un acuerdo comercial con el cliente, sino que interactúan directamente con el inventario para bloquear y reservar el stock físico disponible en el almacén o registrar previsiones de compra cuando no existen existencias suficientes.

Este mecanismo asegura que la mercancía comprometida en un pedido no sea vendida a otro cliente ni en el mostrador físico ni en otros canales de venta online.


1. Configuración de Empresa en el ERP​

El comportamiento de la reserva de existencias se rige por las políticas comerciales configuradas para cada empresa en el ERP:

  1. Control de Reserva de Stock Habilitado:
    • Si la empresa tiene activa la reserva en pedidos, cada línea que incluya un artículo físico ejecuta automáticamente el bloqueo de existencias.
    • Si la empresa no trabaja con reservas, los valores de reserva se mantienen en 0 y las existencias no se bloquean de forma previa a la entrega.
  2. Gestión Multialmacén vs. Global:
    • Por Almacén: La comprobación de disponibilidad y el bloqueo de unidades se aplican exclusivamente sobre el almacén indicado en el pedido (warehouseCode).
    • Global: La comprobación y reserva se aplican sobre el saldo global de existencias de la empresa, sin restringirse a un almacén particular.

2. Contadores de Stock en las Líneas del Pedido​

Al consultar el detalle de un pedido (GET /api/orders/{number}), cada línea de artículo expone contadores claros para conocer el estado logístico exacto de la mercancía:

Propiedad en la APIConceptoDescripción Funcional
quantityCantidad PedidaTotal de unidades solicitadas por el cliente.
stockReservedReserva ActualUnidades físicas en almacén bloqueadas inmediatamente para este pedido.
stockReservedFutureReserva FuturaUnidades que superan el stock disponible en almacén y quedan pendientes de recibir de compras o fábrica.
outstandingQuantityPendiente de ServirUnidades que aún no han sido entregadas al cliente. Al crearse el pedido coincide con quantity.
deliveredQuantityCantidad EntregadaUnidades que ya han sido expedidas mediante albaranes de venta.
invoiceQuantityCantidad FacturadaUnidades que ya han sido liquidadas en facturas de venta.

3. Algoritmo de Cálculo de la Reserva​

Al registrar un pedido con artículos físicos (POST /api/orders), la API evalúa la disponibilidad para cada línea de forma automática siguiendo estas reglas:

Reglas de Cálculo:​

StockDisponible = max(0, StockFisico - ReservasPrevias)
stockReserved = min(StockDisponible, quantity)
stockReservedFuture = quantity - stockReserved
outstandingQuantity = quantity

4. Casos Prácticos de Ejemplo​

Supongamos un artículo con existencias en el almacén principal:

Caso 1: Stock Totalmente Suficiente​

  • Stock Físico Disponible: 25 unidades.
  • El cliente pide: 10 unidades.
  • Resultado:
    • stockReserved = 10 (bloqueadas inmediatamente en almacén para este cliente).
    • stockReservedFuture = 0.
    • outstandingQuantity = 10 (pendientes de expedir).
    • Disponibles restantes para otros clientes: 15 unidades.

Caso 2: Rotura Parcial de Stock​

  • Stock Físico Disponible: 4 unidades.
  • El cliente pide: 10 unidades.
  • Resultado:
    • stockReserved = 4 (se reserva todo el stock físico existente en almacén).
    • stockReservedFuture = 6 (las 6 unidades restantes quedan en reserva futura).
    • outstandingQuantity = 10.
    • Efecto en Compras: El ERP detecta automáticamente las 6 unidades en reserva futura para sugerir la emisión de órdenes de compra a proveedores.

Caso 3: Sin Stock (Existencias Agotadas)​

  • Stock Físico Disponible: 0 unidades.
  • El cliente pide: 10 unidades.
  • Resultado:
    • stockReserved = 0.
    • stockReservedFuture = 10.
    • outstandingQuantity = 10.

5. Ciclo de Vida: Entrega y Cancelación​

[ Pedido Creado ]
│
├─── (Generación de Albarán) ───────► [ Salida Real de Almacén ]
│ - stockReserved disminuye
│ - outstandingQuantity disminuye
│ - deliveredQuantity aumenta
│
└─── (Cancelación del Pedido) ──────► [ Liberación Inmediata ]
- stockReserved se reintegra al disponible
- stockReservedFuture se anula

A. Generación de Albarán de Entrega​

Cuando el almacén prepara el envío y se expide el albarán correspondiente:

  1. Las unidades entregadas aumentan en deliveredQuantity.
  2. Las unidades pendientes disminuyen en outstandingQuantity.
  3. El stock reservado (stockReserved) se libera y se descuenta del stock físico real del almacén (salida efectiva de existencias).
  4. 👉 Consulta Documentos de Venta (Albaranes) para conocer el circuito de expedición y entrega.

B. Cancelación del Pedido (status = Canceled)​

Si un pedido se cancela (mediante PUT /api/orders/{number} o mediante PATCH /api/orders/{number} con status: 2):

  • Todas las unidades reservadas (stockReserved) se desbloquean de forma inmediata, volviendo a estar disponibles para cualquier otro cliente.
  • Las reservas futuras (stockReservedFuture) se dan de baja para evitar compras innecesarias.

6. Elementos Exentos de Reserva de Stock​

Las siguientes líneas no computan en el control de existencias:

  1. Líneas de Texto (Text): Comentarios descriptivos o condiciones técnicas.
  2. Artículos Genéricos (#GENERAL): Portes, desplazamientos, embalajes o servicios extraordinarios no inventariables.
  3. Mano de Obra y Servicios: Artículos clasificados en familias de servicios sin control de inventario.
  4. Partidas agrupadoras (Category): Títulos de capítulo o fase de obra.