Movimientos de inventario
Entendiendo las entradas, salidas y ajustes de tu stock
Última actualización: 19 de diciembre de 2024
Cada cambio en tu inventario se registra como un evento de inventario (inventory_events
) para proporcionar una trazabilidad completa. El sistema está diseñado para automatizar estos registros, pero también permite ajustes manuales.
¿Qué es un evento de inventario?
Cada evento de inventario guarda información clave para el análisis y la gestión:
- Producto afectado: El artículo que cambia de stock
- Fecha y hora: Momento exacto del movimiento
- Tipo de evento (
event_type
): La causa del movimiento (stock, compra, venta, ajuste) - Cambio de cantidad (
quantity_change
): Positivo para entradas, negativo para salidas - Precio unitario (
unit_price
): Coste asociado (importante para entradas) - Usuario: Quién realizó la acción (automático o manual)
- Referencia (
reference_type
,reference_id
): Enlace al origen (factura, venta, etc.)
Tipos de movimientos de inventario
1. Stock inicial (stock
)
- Origen: Creación de un nuevo producto mediante el formulario
- Funcionamiento: Al guardar un nuevo producto con su stock inicial, se crea un evento de tipo
stock
yreference_type: 'initial_stock'
- Cantidad: Siempre positiva
- Precio: El precio unitario definido en el formulario
2. Compra (compra
)
- Origen: Registro de una factura de proveedor con líneas de tipo "Compra"
- Funcionamiento: Se crea un evento de tipo
compra
yreference_type: 'purchase'
- Cantidad: Siempre positiva
- Precio: El precio unitario de la línea de factura, ajustado por el factor de conversión si es necesario
3. Venta (venta
)
- Origen: Registro de una venta desde el TPV virtual
- Funcionamiento: El sistema crea automáticamente un evento por cada ingrediente de las recetas vendidas:
- Consulta la receta: Revisa los ingredientes base necesarios
- Calcula consumo: Multiplica cantidad de ingrediente por platos vendidos, aplicando merma y rendimiento
- Genera eventos: Crea un evento
venta
conquantity_change
negativo por cada producto consumido
- Cantidad: Siempre negativa
- Precio: Se registra como 0, ya que el coste se calcula en la receta
4. Ajuste (adjustment
)
- Origen: Modificación manual del stock desde la tabla de inventario
- Funcionamiento: Al editar la cantidad de un producto, el sistema calcula la diferencia y crea un evento
adjustment
- Cantidad:
- Positiva: Si aumentas el stock (ej: corregir error, registrar entrada sin compra)
- Negativa: Si disminuyes el stock (ej: registrar mermas, consumo interno)
- Precio: El precio promedio actual del producto para valorar el ajuste
- Notas: Permite añadir una nota explicativa para el ajuste
Visualización de movimientos
Dashboard de stock
La sección de Control de Inventario incluye un widget de "Últimos Movimientos de Inventario" que muestra:
- Fecha: Día y hora del movimiento
- Producto: Nombre del artículo afectado
- Tipo de movimiento: stock, compra, venta, ajuste
- Cantidad: Cambio en el inventario
- Unidad: Unidad de medida del producto
- Precio unitario: Coste asociado
- Referencia: Origen del movimiento (compra, venta, etc.)
Historial por producto
Al editar un producto individualmente, se muestra un historial resumido:
- Fecha de creación: Cuándo se añadió el producto
- Fecha de actualización: Cuándo se registró el último movimiento
- Último movimiento: Cantidad y tipo del último cambio
Funcionamiento técnico
Cálculo de consumo en ventas (calculateSubrecipeConsumption
)
- Recursividad: Si una receta contiene subrecetas, la función calcula recursivamente el consumo de ingredientes base
- Merma y rendimiento: Aplica automáticamente los valores definidos en la receta
- Prevención de errores: Sistema de protección contra referencias circulares
Ajustes manuales (handleSaveEdit
)
- Diferencia de cantidad: Calcula automáticamente la diferencia con la cantidad original
- Evento de ajuste: Registra la diferencia como un evento
adjustment
- Precio promedio: Utiliza el precio promedio actual del producto para valorar el ajuste
Entradas por compras (guardar_factura_completa
)
- Factor de conversión: Aplica el factor para calcular la cantidad en unidad base
- Precio base: Ajusta el precio unitario según el factor de conversión
- Evento de compra: Registra la entrada en la unidad base del producto
Impacto en el sistema
Trazabilidad completa:
- Cada cambio en el inventario está registrado y justificado
- Permite auditorías y análisis detallados
Cálculo de costes preciso:
- Los precios de entrada se usan para calcular el precio promedio ponderado
- Este precio se utiliza para valorar el inventario y calcular costes de recetas
Inventario en tiempo real:
- Las salidas por venta son automáticas, manteniendo el stock actualizado
- Los ajustes permiten reflejar la realidad operativa (mermas, consumo interno)
💡 Consejo: Utiliza los ajustes manuales negativos para registrar mermas y consumo interno. Esto proporciona una visión más precisa de la rentabilidad y las pérdidas operativas.
✅ Resultado: La combinación de movimientos automáticos y ajustes manuales te permite mantener un control de inventario preciso, fiable y totalmente auditable, reflejando la realidad de tu operación en tiempo real.