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:
- 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
0y las existencias no se bloquean de forma previa a la entrega.
- 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.
- Por Almacén: La comprobación de disponibilidad y el bloqueo de unidades se aplican exclusivamente sobre el almacén indicado en el pedido (
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 API | Concepto | Descripción Funcional |
|---|---|---|
quantity | Cantidad Pedida | Total de unidades solicitadas por el cliente. |
stockReserved | Reserva Actual | Unidades físicas en almacén bloqueadas inmediatamente para este pedido. |
stockReservedFuture | Reserva Futura | Unidades que superan el stock disponible en almacén y quedan pendientes de recibir de compras o fábrica. |
outstandingQuantity | Pendiente de Servir | Unidades que aún no han sido entregadas al cliente. Al crearse el pedido coincide con quantity. |
deliveredQuantity | Cantidad Entregada | Unidades que ya han sido expedidas mediante albaranes de venta. |
invoiceQuantity | Cantidad Facturada | Unidades 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:
25unidades. - El cliente pide:
10unidades. - Resultado:
stockReserved=10(bloqueadas inmediatamente en almacén para este cliente).stockReservedFuture=0.outstandingQuantity=10(pendientes de expedir).- Disponibles restantes para otros clientes:
15unidades.
Caso 2: Rotura Parcial de Stock
- Stock Físico Disponible:
4unidades. - El cliente pide:
10unidades. - 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
6unidades en reserva futura para sugerir la emisión de órdenes de compra a proveedores.
Caso 3: Sin Stock (Existencias Agotadas)
- Stock Físico Disponible:
0unidades. - El cliente pide:
10unidades. - 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:
- Las unidades entregadas aumentan en
deliveredQuantity. - Las unidades pendientes disminuyen en
outstandingQuantity. - El stock reservado (
stockReserved) se libera y se descuenta del stock físico real del almacén (salida efectiva de existencias). - 👉 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:
- Líneas de Texto (
Text): Comentarios descriptivos o condiciones técnicas. - Artículos Genéricos (
#GENERAL): Portes, desplazamientos, embalajes o servicios extraordinarios no inventariables. - Mano de Obra y Servicios: Artículos clasificados en familias de servicios sin control de inventario.
- Partidas agrupadoras (
Category): Títulos de capítulo o fase de obra.