Actualizar Costos de Ingredientes
Aprende a modificar precios de ingredientes y entiende el impacto automático en todos tus productos.
💡 Impacto automático: Cuando actualizas el costo de un ingrediente, el sistema recalcula automáticamente TODOS los productos que lo usan. Esto garantiza que tus reportes financieros siempre reflejen costos reales.
¿Cuándo Actualizar Costos?
📈 Aumento de precios
Tu proveedor subió el precio de un ingrediente y necesitas reflejarlo en tus costos.
📉 Reducción de costos
Conseguiste un mejor precio o proveedor más económico y quieres actualizar.
🔄 Cambio de proveedor
Nuevo proveedor con precios diferentes requiere actualización masiva.
✏️ Corrección de error
Detectaste que ingresaste un costo incorrecto y necesitas corregirlo.
Paso 1: Acceder a la Lista de Ingredientes
- Inicia sesión como Administrador
- Selecciona la sucursal en el selector del header
- Ve a Ingredientes en el menú lateral
- Verás la lista completa de ingredientes de esa sucursal
Paso 2: Editar el Ingrediente
- Busca el ingrediente que quieres actualizar (puedes usar el buscador)
- Haz clic en el botón "Editar" (ícono de lápiz ✏️)
- Se abrirá un modal con todos los campos del ingrediente
Paso 3: Modificar el Costo por Unidad
En el modal de edición:
Campos editables:
- nameNombre del ingrediente (opcional cambiar)
- unitUnidad de medida: g, ml o unidad (opcional cambiar)
- costPerUnit← ESTE es el campo crítico que dispara el recálculo
- stockOnHandStock actual (ajuste manual si necesitas)
- lowStockThresholdUmbral mínimo para alertas (opcional cambiar)
⚠️ Importante: Modifica el costPerUnit con cuidado. Este cambio afectará el costo calculado de todos los productos que usan este ingrediente.
Ejemplo de Actualización
❌ Antes
✅ Después
⚡ Cambio detectado: $3.00 → $3.50 (+16.67%)
Paso 4: Guardar y Confirmar
- Revisa que el nuevo costo sea correcto
- Haz clic en "Guardar cambios"
- El sistema validará que el valor sea numérico y positivo
- Verás un mensaje de confirmación
Paso 5: Recálculo Automático (Hook)
Inmediatamente después de guardar, el sistema ejecuta:
Proceso automático en backend:
- Detección: Hook detecta que
costPerUnitfue modificadoif (this.isModified('costPerUnit')) { ... } - Búsqueda: Encuentra todos los productos que tienen este ingrediente en su receta
const products = await Product.find({ 'recipe.ingredientId': doc._id }); - Recálculo: Para cada producto, ejecuta
calculateCostFromRecipe()newCost = SUM(ingredient.costPerUnit × recipe.qty)
- Actualización: Guarda el nuevo
productCosten cada producto - Log: Registra en consola:
✅ Actualizados 23 productos que usan Mozzarella
Paso 6: Verificar el Impacto
Para ver qué productos fueron afectados:
- Ve a Productos en el menú lateral
- Busca productos que usan el ingrediente que modificaste
- Verás que el campo "Costo" se actualizó automáticamente
- Compara con el costo anterior para entender el impacto
📊 Ejemplo de impacto en productos:
Antes: $711 → Después: $711 + (150 × $0.50) = $786 (+$75)
Antes: $950 → Después: $950 + (200 × $0.50) = $1,050 (+$100)
Antes: $320 → Después: $320 + (80 × $0.50) = $360 (+$40)
Paso 7: Ajustar Precios de Venta (Opcional)
Después de actualizar costos, considera ajustar precios de venta para mantener márgenes:
Estrategia de ajuste de precios:
- Calcula el nuevo margen:
Margen anterior = (Precio - Costo anterior) / Precio × 100 Margen nuevo = (Precio - Costo nuevo) / Precio × 100
- Decide si ajustar:
- Si el margen bajó significativamente (>5%), considera subir precio
- Si el margen sigue siendo bueno, puedes mantener el precio
- Actualiza precios selectivamente:
- Productos premium: mantén margen alto
- Productos populares: reduce margen para competitividad
Ejemplo de ajuste de precio:
Auditoría del Cambio
Todos los cambios quedan registrados automáticamente:
- Stock Movement: Si modificaste el stock, se crea un registro con tipo
"adjustment" - Logs del servidor: El hook registra en consola cuántos productos fueron actualizados
- Timestamp: El campo
updatedAtdel ingrediente refleja cuándo fue modificado - Usuario responsable: El sistema sabe quién hizo el cambio (según la sesión activa)
¿Qué sigue?
Cálculo automático de costos →
Entiende cómo funciona el recálculo automático
Crear ingredientes →
Aprende a dar de alta nuevos ingredientes
✅ Ahora sabes:
- Cómo editar el costo de un ingrediente
- Que el cambio dispara recálculo automático en todos los productos
- Cómo verificar el impacto en cada producto
- Cuándo y cómo ajustar precios de venta para mantener márgenes
Solución de Problemas
Actualicé el costo pero los productos no se recalcularon
Posibles causas:
- El hook no está habilitado en el backend (verifica código en
ingredient/model.js) - Hubo un error en el backend (revisa logs del servidor)
- El ingrediente no está asignado a ninguna receta
- Modificaste otro campo pero no el
costPerUnit
Solución temporal: Edita cada producto manualmente y guarda de nuevo para forzar recálculo.
¿Puedo deshacer un cambio de costo?
No hay función de "deshacer" automática, pero puedes:
- Volver a editar el ingrediente y poner el costo anterior
- El hook se ejecutará de nuevo y volverá a recalcular todos los productos
- Si no recuerdas el costo anterior, revisa el historial de Stock Movements
¿Los cambios afectan órdenes pasadas?
NO. Las órdenes ya creadas conservan el productCost que tenían al momento de crearse. Solo se afectan:
- El costo actual de los productos (para nuevas ventas)
- Reportes futuros que usen estos productos
Esto garantiza que los reportes históricos sean precisos.
¿Cómo actualizo costos en todas las sucursales a la vez?
Los ingredientes son independientes por sucursal. Para actualizar en múltiples sucursales:
- Selecciona la primera sucursal
- Actualiza el ingrediente
- Cambia a la segunda sucursal
- Repite el proceso
Contacta a soporte si necesitas ayuda con actualizaciones masivas en múltiples sucursales.
¿Qué pasa si pongo un costo negativo o cero?
El sistema validará que el costo sea un número positivo:
- Costo negativo: Rechazado con error
- Costo cero: Aceptado (útil para ingredientes sin costo, como agua del grifo)
- El
productCostresultante puede ser $0 si todos los ingredientes tienen costo $0