Add subcription feature
This commit is contained in:
@@ -73,166 +73,439 @@
|
||||
"gettingStarted": {
|
||||
"quickStart": {
|
||||
"title": "Guía de Inicio Rápido",
|
||||
"description": "Configura tu cuenta de Panadería IA en solo 10 minutos y empieza a reducir desperdicios",
|
||||
"readTime": "5",
|
||||
"description": "Configura tu cuenta de BakeWise en 15-20 minutos con nuestro asistente guiado paso a paso",
|
||||
"readTime": "8",
|
||||
"content": {
|
||||
"intro": "Bienvenido a Panadería IA. Esta guía te ayudará a configurar tu cuenta en 10 minutos para empezar a optimizar tu producción desde el primer día.",
|
||||
"intro": "Bienvenido a BakeWise (Panadería IA). Nuestro asistente de configuración guiado te ayudará a poner en marcha el sistema en 15-20 minutos. El proceso incluye análisis automático de tus datos con IA para detectar productos y crear tu inventario inicial.",
|
||||
"steps": [
|
||||
{
|
||||
"title": "1. Crea tu Cuenta",
|
||||
"description": "Regístrate con tu email y contraseña. Te pediremos información básica de tu panadería: nombre, dirección, número de empleados."
|
||||
"title": "1. Registro de Usuario",
|
||||
"description": "Crea tu cuenta con email y contraseña. El sistema te enviará un email de verificación. Puedes registrarte también a través de una sesión demo para probar sin compromiso."
|
||||
},
|
||||
{
|
||||
"title": "2. Configura tu Perfil de Panadería",
|
||||
"description": "Indica el tipo de panadería: artesanal, industrial, obrador central con puntos de venta. Esto ayuda al sistema a personalizar las recomendaciones."
|
||||
"title": "2. Selección de Tipo de Negocio",
|
||||
"description": "Indica si eres: Panadería Tradicional (producción y venta en el mismo local), Obrador Central (produces para distribuir a otros puntos), Punto de Venta (recibes producto de un obrador central), o Modelo Mixto (producción propia + distribución). Esto personaliza el flujo de configuración."
|
||||
},
|
||||
{
|
||||
"title": "3. Añade tus Productos",
|
||||
"description": "Crea tu catálogo: pan, bollería, pasteles. Para cada producto indica nombre, precio de venta y categoría."
|
||||
"title": "3. Registro de tu Panadería",
|
||||
"description": "Completa la información: Nombre del negocio, Dirección completa (con autocompletado de Google Maps), Código postal y ciudad, Teléfono de contacto. El sistema detecta automáticamente tu ubicación y analiza el contexto de puntos de interés cercanos (escuelas, oficinas, estaciones) para mejorar las predicciones."
|
||||
},
|
||||
{
|
||||
"title": "4. Importa Historial de Ventas (Opcional)",
|
||||
"description": "Cuantos más datos históricos proporciones, más precisas serán las predicciones. Acepta Excel, CSV o importación desde tu TPV."
|
||||
"title": "4. Subir Datos de Ventas Históricos",
|
||||
"description": "Sube un archivo Excel o CSV con tu historial de ventas (mínimo 3 meses recomendado). El sistema incluye IA que analiza automáticamente el archivo para: Detectar productos únicos, Identificar categorías (pan, bollería, pastelería), Extraer patrones de ventas. El análisis tarda 30-60 segundos."
|
||||
},
|
||||
{
|
||||
"title": "5. Primera Predicción",
|
||||
"description": "El sistema generará automáticamente tu primera predicción de demanda para los próximos 7 días basándose en patrones similares."
|
||||
"title": "5. Revisar Inventario Detectado",
|
||||
"description": "La IA te muestra todos los productos detectados agrupados por categoría. Puedes: Aprobar productos tal cual, Editar nombres o categorías, Eliminar duplicados, Añadir productos manualmente. El sistema crea automáticamente el inventario completo."
|
||||
},
|
||||
{
|
||||
"title": "6. Configurar Stock Inicial (Opcional)",
|
||||
"description": "Para cada producto/ingrediente detectado, indica las cantidades actuales en stock. Esto es opcional pero recomendado para empezar con control de inventario desde el día 1."
|
||||
},
|
||||
{
|
||||
"title": "7. Configurar Proveedores (Opcional)",
|
||||
"description": "Añade tus proveedores principales: nombre, contacto, productos que suministran. Puedes saltarte este paso e ir directamente al entrenamiento del modelo IA."
|
||||
},
|
||||
{
|
||||
"title": "8. Entrenamiento del Modelo IA",
|
||||
"description": "El sistema entrena automáticamente tu modelo personalizado de predicción usando: Tus datos históricos de ventas, Contexto de ubicación (POIs detectados), Calendario de festivos español, Datos meteorológicos de AEMET. El entrenamiento tarda 2-5 minutos y muestra progreso en tiempo real vía WebSocket."
|
||||
},
|
||||
{
|
||||
"title": "9. ¡Listo para Usar!",
|
||||
"description": "Una vez completado el entrenamiento, accedes al dashboard principal donde verás: Predicciones de demanda para los próximos 7 días, Plan de producción sugerido para hoy, Alertas de stock bajo, Métricas clave del negocio."
|
||||
}
|
||||
],
|
||||
"tips": [
|
||||
"Empieza con 5-10 productos principales, no necesitas todo el catálogo el primer día",
|
||||
"Si tienes historial de ventas de los últimos 3-6 meses, súbelo para predicciones más precisas",
|
||||
"El sistema mejora con el tiempo: las primeras semanas tendrá 15-20% de margen de error, después del primer mes baja a ~10%"
|
||||
]
|
||||
"IMPORTANTE: Sube al menos 3-6 meses de historial de ventas para que la IA pueda detectar patrones estacionales",
|
||||
"El archivo de ventas debe tener columnas: Fecha, Producto, Cantidad. El sistema detecta automáticamente el formato",
|
||||
"El análisis con IA te ahorra horas de trabajo manual creando el catálogo e inventario automáticamente",
|
||||
"Puedes saltar pasos opcionales (stock inicial, proveedores) y configurarlos después desde el dashboard",
|
||||
"La precisión de predicciones mejora con el tiempo: primeras 2 semanas ~70-75%, después del primer mes ~80-85%",
|
||||
"Usuarios Enterprise pueden registrar múltiples sucursales (puntos de venta) tras crear el obrador central"
|
||||
],
|
||||
"conclusion": "El asistente guiado incluye validación en cada paso y guarda tu progreso automáticamente. Puedes pausar en cualquier momento y continuar después desde donde lo dejaste."
|
||||
}
|
||||
},
|
||||
"importData": {
|
||||
"title": "Importar Datos Históricos de Ventas",
|
||||
"description": "Aprende a subir tu historial de ventas desde Excel, CSV o tu sistema TPV para mejorar la precisión",
|
||||
"readTime": "8",
|
||||
"description": "Sube tu historial de ventas en Excel o CSV con validación automática y análisis IA",
|
||||
"readTime": "10",
|
||||
"content": {
|
||||
"intro": "Cuantos más datos históricos proporciones, más precisas serán las predicciones de demanda. Te recomendamos mínimo 3 meses de historial.",
|
||||
"formats": [
|
||||
"intro": "El sistema de importación incluye validación automática inteligente y análisis con IA. Cuantos más datos históricos proporciones (recomendamos 3-12 meses), más precisas serán las predicciones de demanda y el sistema podrá detectar patrones estacionales.",
|
||||
"supportedFormats": [
|
||||
{
|
||||
"name": "Excel (.xlsx)",
|
||||
"description": "Formato más común. Necesitas columnas: Fecha, Producto, Cantidad Vendida, Precio (opcional)"
|
||||
"format": "Excel (.xlsx, .xls)",
|
||||
"description": "Formato más común y recomendado. Soporta múltiples hojas (se usa la primera). Permite formato de fecha flexible."
|
||||
},
|
||||
{
|
||||
"name": "CSV (.csv)",
|
||||
"description": "Exportable desde cualquier TPV. Mismo formato que Excel pero en texto plano"
|
||||
"format": "CSV (.csv)",
|
||||
"description": "Texto plano separado por comas. Exportable desde cualquier TPV o sistema de caja. Codificación UTF-8 recomendada."
|
||||
},
|
||||
{
|
||||
"name": "Exportación TPV",
|
||||
"description": "Si tu TPV es compatible, puedes exportar directamente el historial"
|
||||
"format": "JSON",
|
||||
"description": "Para integraciones avanzadas. Formato estructurado para APIs o exportaciones programáticas."
|
||||
}
|
||||
],
|
||||
"requiredColumns": {
|
||||
"title": "Columnas Requeridas en tu Archivo",
|
||||
"columns": [
|
||||
{
|
||||
"name": "Fecha",
|
||||
"description": "Fecha de la venta. Formatos aceptados: DD/MM/AAAA, AAAA-MM-DD, DD-MM-AAAA. Ejemplo: 15/03/2024 o 2024-03-15",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"name": "Producto",
|
||||
"description": "Nombre del producto vendido. Puede ser cualquier texto. La IA detecta y agrupa productos similares automáticamente.",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"name": "Cantidad",
|
||||
"description": "Unidades vendidas. Número entero o decimal. Ejemplo: 12 (baguettes) o 2.5 (kg de pan integral)",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"name": "Precio (Opcional)",
|
||||
"description": "Precio de venta unitario o total. Útil para análisis de ingresos pero no obligatorio para predicciones.",
|
||||
"required": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"steps": [
|
||||
{
|
||||
"title": "1. Prepara tu archivo",
|
||||
"description": "Asegúrate de tener: Fecha (formato DD/MM/AAAA), Nombre del Producto, Cantidad Vendida. Precio de venta es opcional."
|
||||
"title": "1. Durante el Onboarding (Opción Recomendada)",
|
||||
"description": "El asistente de configuración inicial incluye un paso de 'Subir Datos de Ventas' donde puedes arrastrar y soltar tu archivo. El sistema: 1) Valida el formato automáticamente, 2) Extrae productos únicos, 3) Clasifica con IA en categorías (pan, bollería, pastelería), 4) Crea el inventario completo automáticamente. ¡Esto te ahorra horas de trabajo manual!"
|
||||
},
|
||||
{
|
||||
"title": "2. Ve a Configuración > Importar Datos",
|
||||
"description": "En el menú principal, busca 'Importar Datos Históricos'"
|
||||
"title": "2. Desde el Dashboard (Después del Onboarding)",
|
||||
"description": "Ve a Analítica > Ventas > Importar Datos. Selecciona el rango de fechas y sube tu archivo. El sistema detecta automáticamente productos nuevos y te pregunta si quieres añadirlos al catálogo."
|
||||
},
|
||||
{
|
||||
"title": "3. Selecciona el archivo",
|
||||
"description": "Arrastra y suelta tu archivo Excel/CSV o haz clic para seleccionarlo"
|
||||
"title": "3. Validación Automática",
|
||||
"description": "El sistema valida en tiempo real: Formato de archivo correcto (Excel/CSV), Formato de fechas válido, Columnas requeridas presentes, Datos numéricos en campos de cantidad. Si hay errores, muestra exactamente qué fila y qué problema."
|
||||
},
|
||||
{
|
||||
"title": "4. Mapea las columnas",
|
||||
"description": "El sistema detecta automáticamente las columnas, verifica que coincidan correctamente"
|
||||
"title": "4. Análisis con IA (Durante Onboarding)",
|
||||
"description": "La IA analiza tu archivo y: Detecta productos únicos (agrupa variaciones como 'Baguette', 'baguette', 'BAGUETTE'), Clasifica automáticamente en categorías basándose en nombres comunes de panadería, Identifica si son productos finales o ingredientes, Sugiere unidades de medida apropiadas. Esto tarda 30-60 segundos."
|
||||
},
|
||||
{
|
||||
"title": "5. Confirma e importa",
|
||||
"description": "Revisa el resumen y confirma. El sistema procesará los datos en segundo plano"
|
||||
"title": "5. Revisión y Confirmación",
|
||||
"description": "El sistema muestra: Total de filas procesadas, Productos únicos detectados, Agrupados por categoría (pan: 12 productos, bollería: 8, etc.). Puedes editar, eliminar o añadir productos antes de confirmar."
|
||||
},
|
||||
{
|
||||
"title": "6. Importación Final",
|
||||
"description": "Al confirmar, el sistema: Crea/actualiza productos en el inventario, Importa todas las ventas históricas a la base de datos, Asocia ventas con productos del catálogo, Prepara datos para entrenamiento del modelo IA. Archivos grandes (>50.000 filas) se procesan en segundo plano."
|
||||
}
|
||||
],
|
||||
"tips": [
|
||||
"IMPORTANTE: Durante el onboarding, la importación de datos crea automáticamente tu catálogo e inventario completo con IA",
|
||||
"Si importas después del onboarding, asegúrate de que los nombres de productos coincidan exactamente con los del catálogo",
|
||||
"Formatos de fecha flexibles: el sistema detecta automáticamente DD/MM/AAAA, AAAA-MM-DD, DD-MM-AAAA",
|
||||
"Puedes importar múltiples veces. El sistema detecta duplicados por fecha + producto y te pregunta si quieres sobrescribir",
|
||||
"Archivos >100.000 filas: se procesan en segundo plano, recibirás notificación cuando termine (5-10 min típicamente)",
|
||||
"Codificación CSV: usa UTF-8 para evitar problemas con acentos y caracteres españoles (ñ, á, é, etc.)"
|
||||
],
|
||||
"commonIssues": [
|
||||
{
|
||||
"issue": "Error: Formato de fecha inválido",
|
||||
"solution": "Usa formato DD/MM/AAAA (ejemplo: 15/03/2025)"
|
||||
"issue": "Error: 'Columna Fecha no encontrada'",
|
||||
"solution": "Asegúrate de que tu archivo tiene una columna llamada 'Fecha', 'Date', 'Día' o similar. El sistema detecta variaciones comunes pero la columna debe existir."
|
||||
},
|
||||
{
|
||||
"issue": "Productos no reconocidos",
|
||||
"solution": "Asegúrate de que los nombres coincidan exactamente con los productos creados en tu catálogo"
|
||||
"issue": "Error: 'Formato de fecha inválido en fila X'",
|
||||
"solution": "Usa formato DD/MM/AAAA (15/03/2024) o AAAA-MM-DD (2024-03-15). En Excel, formatea la columna como 'Fecha' o 'Texto' (no 'General')."
|
||||
},
|
||||
{
|
||||
"issue": "Importación lenta",
|
||||
"solution": "Archivos grandes (>100.000 filas) pueden tardar 5-10 minutos. Recibirás un email cuando termine"
|
||||
"issue": "Productos duplicados después de importar",
|
||||
"solution": "Normaliza nombres antes de importar: 'Baguette', 'baguette', 'BAGUETTE' se detectan como iguales durante onboarding, pero no en importaciones posteriores."
|
||||
},
|
||||
{
|
||||
"issue": "El archivo se sube pero no muestra progreso",
|
||||
"solution": "Archivos >10 MB pueden tardar. Espera 30-60 segundos. Si no avanza, verifica que el archivo no esté corrupto (abrelo primero en Excel/LibreOffice)."
|
||||
},
|
||||
{
|
||||
"issue": "Importación completa pero faltan productos en catálogo",
|
||||
"solution": "En importaciones posteriores al onboarding, productos nuevos requieren confirmación manual. Revisa la notificación 'X productos nuevos detectados' y apruébalos."
|
||||
}
|
||||
]
|
||||
],
|
||||
"advancedFeatures": [
|
||||
{
|
||||
"feature": "Mapeo de Columnas Flexible",
|
||||
"description": "El sistema detecta automáticamente columnas aunque tengan nombres diferentes: 'Fecha', 'Date', 'Día'; 'Producto', 'Product', 'Item', 'Artículo'; 'Cantidad', 'Qty', 'Unidades', 'Vendido'."
|
||||
},
|
||||
{
|
||||
"feature": "Detección de Duplicados",
|
||||
"description": "Si importas datos que ya existen (mismo producto + fecha), el sistema te pregunta: Sobrescribir valores existentes, Saltar duplicados, o Cancelar importación."
|
||||
},
|
||||
{
|
||||
"feature": "Validación Pre-Import",
|
||||
"description": "Antes de importar, puedes validar el archivo. El sistema muestra: Filas válidas vs inválidas, Lista de errores específicos por fila, Productos únicos detectados. No se guarda nada hasta que confirmes."
|
||||
}
|
||||
],
|
||||
"conclusion": "La importación durante el onboarding es mágica: subes un archivo y obtienes catálogo completo + inventario + clasificación IA en menos de 2 minutos. Importaciones posteriores son más manuales pero igualmente validadas automáticamente."
|
||||
}
|
||||
},
|
||||
"productsCatalog": {
|
||||
"title": "Configurar Catálogo de Productos",
|
||||
"description": "Crea tu catálogo de productos, recetas e ingredientes para gestión completa de inventario",
|
||||
"readTime": "6",
|
||||
"description": "Gestiona productos finales, ingredientes y recetas con creación automática vía IA o manual",
|
||||
"readTime": "12",
|
||||
"content": {
|
||||
"intro": "El catálogo de productos es el corazón del sistema. Aquí defines qué produces, cómo se hace y cuánto cuesta.",
|
||||
"productLevels": [
|
||||
{
|
||||
"level": "Productos Finales",
|
||||
"description": "Lo que vendes (pan, croissant, tarta). Define nombre, precio, categoría, código de barras (opcional)"
|
||||
"intro": "El catálogo de productos es el núcleo del sistema. BakeWise ofrece DOS formas de crearlo: AUTOMÁTICA (durante onboarding con IA) o MANUAL (paso a paso desde el dashboard). El inventario unifica productos finales e ingredientes en una sola vista jerárquica.",
|
||||
"twoApproaches": {
|
||||
"title": "Dos Formas de Crear tu Catálogo",
|
||||
"automatic": {
|
||||
"name": "AUTOMÁTICA - Durante Onboarding (Recomendado)",
|
||||
"description": "Subes archivo de ventas → IA detecta productos → Clasifica categorías → Crea inventario completo. Tarda 2-3 minutos y te ahorra horas de trabajo manual. Ver tutorial 'Importar Datos Históricos'.",
|
||||
"pros": ["Rapidísimo (2-3 min total)", "IA clasifica automáticamente", "Detecta duplicados", "Identifica productos vs ingredientes"]
|
||||
},
|
||||
{
|
||||
"level": "Recetas",
|
||||
"description": "Cómo se hace cada producto. Lista de ingredientes con cantidades exactas, pasos de elaboración, tiempo de producción"
|
||||
},
|
||||
{
|
||||
"level": "Ingredientes",
|
||||
"description": "Materias primas (harina, azúcar, mantequilla). Define unidad de medida, proveedor, precio por kilo"
|
||||
"manual": {
|
||||
"name": "MANUAL - Desde Dashboard",
|
||||
"description": "Añades productos/ingredientes uno por uno desde Mi Panadería > Inventario. Útil para: Añadir nuevos productos después del onboarding, Corregir clasificaciones de IA, Catálogos pequeños (<20 productos).",
|
||||
"pros": ["Control total sobre categorización", "Útil para añadir productos nuevos", "No requiere archivo de ventas"]
|
||||
}
|
||||
],
|
||||
},
|
||||
"inventoryStructure": {
|
||||
"title": "Estructura del Inventario (Unificado)",
|
||||
"description": "BakeWise usa un inventario UNIFICADO que incluye tanto productos finales como ingredientes en la misma tabla. Cada ítem tiene:",
|
||||
"fields": [
|
||||
{
|
||||
"field": "Tipo de Producto",
|
||||
"values": "Producto Final (lo que vendes) o Ingrediente (materia prima)",
|
||||
"example": "Baguette = Producto Final, Harina T-55 = Ingrediente"
|
||||
},
|
||||
{
|
||||
"field": "Categoría",
|
||||
"values": "Pan, Bollería, Pastelería, Especiales, Otros (para productos finales). Harinas, Lácteos, Levaduras, etc. (para ingredientes)",
|
||||
"example": "Croissant → Bollería, Mantequilla → Lácteos"
|
||||
},
|
||||
{
|
||||
"field": "Unidad de Medida",
|
||||
"values": "unidades, kg, g, L, ml, docena",
|
||||
"example": "Baguette = unidades, Harina = kg, Leche = L"
|
||||
},
|
||||
{
|
||||
"field": "Stock Actual",
|
||||
"values": "Cantidad disponible ahora (se actualiza automáticamente con entradas/salidas)",
|
||||
"example": "Baguettes: 45 unidades, Harina: 120 kg"
|
||||
},
|
||||
{
|
||||
"field": "Punto de Reorden",
|
||||
"values": "Stock mínimo que dispara alerta de compra",
|
||||
"example": "Harina: 50 kg (si baja de 50, alerta automática)"
|
||||
},
|
||||
{
|
||||
"field": "Proveedor Principal",
|
||||
"values": "Quién te suministra (solo para ingredientes)",
|
||||
"example": "Harina T-55 → Harinera La Espiga S.A."
|
||||
},
|
||||
{
|
||||
"field": "Precio",
|
||||
"values": "Coste unitario (ingredientes) o precio de venta (productos finales)",
|
||||
"example": "Harina: 0.85€/kg, Baguette: 1.20€/unidad"
|
||||
}
|
||||
]
|
||||
},
|
||||
"steps": [
|
||||
{
|
||||
"title": "1. Añadir Productos",
|
||||
"description": "Ve a Productos > Nuevo Producto. Completa: Nombre, Categoría (pan, bollería, pastelería), Precio de venta, Peso/unidades por pieza"
|
||||
"title": "1. Acceder al Inventario Unificado",
|
||||
"description": "Ve a Mi Panadería > Inventario en el menú lateral. Aquí ves TODOS los ítems: productos finales e ingredientes juntos. Usa las pestañas 'Productos Finales' e 'Ingredientes' para filtrar, o la vista 'Todos' para verlo completo."
|
||||
},
|
||||
{
|
||||
"title": "2. Crear Recetas",
|
||||
"description": "Para cada producto, crea su receta. Añade ingredientes con cantidades exactas (ej: Harina 500g, Agua 300ml). Indica tiempo de amasado, fermentación y horneado"
|
||||
"title": "2. Añadir Producto Final (Manual)",
|
||||
"description": "Click en '+ Nuevo Producto' → Selecciona tipo 'Producto Final' → Completa: Nombre (ej: Croissant de Mantequilla), Categoría (Bollería), Unidad (unidades), Precio de venta (ej: 1.50€), Stock inicial (opcional), Código de barras/SKU (opcional). El sistema crea el producto y lo añade al inventario."
|
||||
},
|
||||
{
|
||||
"title": "3. Gestionar Ingredientes",
|
||||
"description": "Ve a Inventario > Ingredientes. Añade todas tus materias primas con: Nombre, Unidad (kg, L, unidades), Proveedor, Precio por unidad, Stock mínimo (para alertas)"
|
||||
"title": "3. Añadir Ingrediente (Manual)",
|
||||
"description": "Click en '+ Nuevo Ingrediente' → Completa: Nombre (ej: Harina de Fuerza T-65), Categoría (Harinas), Unidad (kg), Proveedor (selecciona de lista o añade nuevo), Precio por unidad (ej: 0.92€/kg), Stock inicial (ej: 150 kg), Punto de reorden (ej: 50 kg). Cuando stock baje de 50 kg, recibirás alerta automática."
|
||||
},
|
||||
{
|
||||
"title": "4. Crear Recetas (Producción)",
|
||||
"description": "Ve a Mi Panadería > Recetas → '+ Nueva Receta' → Selecciona producto final (ej: Croissant) → Añade ingredientes con cantidades: Harina T-65: 500g, Mantequilla: 250g, Leche: 150ml, etc. → Indica rendimiento (cuántas unidades salen), tiempo de producción, pasos. Las recetas permiten: Calcular coste de producción automáticamente, Saber cuánto ingrediente necesitas para X unidades, Planificar compras basándose en producción prevista."
|
||||
},
|
||||
{
|
||||
"title": "5. Gestionar Proveedores",
|
||||
"description": "Ve a Mi Panadería > Proveedores → '+ Nuevo Proveedor' → Completa: Nombre empresa, Contacto (email, teléfono), Dirección, Productos que suministra, Días de entrega, Monto mínimo de pedido. Luego asigna proveedores a ingredientes para: Generar órdenes de compra automáticas, Comparar precios entre proveedores, Rastrear rendimiento (entregas a tiempo, calidad)."
|
||||
},
|
||||
{
|
||||
"title": "6. Configurar Alertas de Stock",
|
||||
"description": "Para cada ingrediente, define 'Punto de Reorden'. Cuando stock actual < punto de reorden, recibes: Alerta en dashboard (ícono rojo), Notificación por email/WhatsApp (si configurado), Sugerencia automática de orden de compra. Ejemplo: Harina con punto de reorden 50 kg → al llegar a 49 kg, alerta 'Hacer pedido de harina'."
|
||||
}
|
||||
],
|
||||
"recipes": {
|
||||
"title": "Sistema de Recetas (Opcional pero Recomendado)",
|
||||
"description": "Las recetas conectan productos finales con ingredientes. Beneficios clave:",
|
||||
"benefits": [
|
||||
"Cálculo automático de coste de producción por producto",
|
||||
"Planificación de compras: 'Para producir 200 baguettes necesito 100 kg harina'",
|
||||
"Consumo automático de stock al registrar producciones (FIFO)",
|
||||
"Análisis de rentabilidad: margen = precio venta - coste ingredientes",
|
||||
"Escalado de lotes: receta para 10 unidades → sistema calcula para 100"
|
||||
],
|
||||
"recipeFields": [
|
||||
"Producto final que produce",
|
||||
"Lista de ingredientes con cantidades exactas",
|
||||
"Rendimiento (cuántas unidades salen de esta receta)",
|
||||
"Tiempo de producción (preparación + horneado + enfriado)",
|
||||
"Pasos/instrucciones (opcional, para capacitación de equipo)",
|
||||
"Temperatura y equipo necesario (horno, batidora, etc.)"
|
||||
]
|
||||
},
|
||||
"tips": [
|
||||
"Empieza con productos de alta rotación (los que más vendes)",
|
||||
"Las recetas permiten calcular automáticamente cuánto ingrediente necesitas para la producción diaria",
|
||||
"El sistema detecta automáticamente cuándo un ingrediente está por acabarse y sugiere hacer un pedido"
|
||||
]
|
||||
"CLAVE: Durante onboarding, usa importación IA para crear catálogo en 2 minutos. Luego refina manualmente si es necesario",
|
||||
"Estructura jerárquica: Categorías > Productos/Ingredientes. Usa categorías consistentes para mejores reportes",
|
||||
"Punto de reorden = (Consumo diario promedio × Días de entrega del proveedor) + Margen de seguridad 20%",
|
||||
"Recetas son OPCIONALES para predicciones, pero ESENCIALES para: planificación de compras, control de costes, producción automatizada",
|
||||
"El sistema soporta recetas multi-nivel: Croissant usa Masa Madre, y Masa Madre tiene su propia receta de ingredientes",
|
||||
"Puedes importar catálogo desde Excel: Plantilla disponible en Inventario > Importar > Descargar Plantilla"
|
||||
],
|
||||
"advancedFeatures": [
|
||||
{
|
||||
"feature": "Gestión de Lotes y Caducidades",
|
||||
"description": "Para ingredientes perecederos, registra lote y fecha de caducidad en cada entrada. Sistema usa FIFO automático (First-In-First-Out) y alerta 7 días antes de caducar."
|
||||
},
|
||||
{
|
||||
"feature": "Códigos de Barras / SKU",
|
||||
"description": "Asigna códigos de barras a productos/ingredientes. Útil para: Escaneo rápido en recepción de pedidos, Integración con TPV, Trazabilidad HACCP."
|
||||
},
|
||||
{
|
||||
"feature": "Variantes de Producto",
|
||||
"description": "Crea variantes (ej: Baguette Normal, Baguette Integral, Baguette Sin Sal) que comparten receta base pero con diferencias. Sistema predice demanda por variante."
|
||||
},
|
||||
{
|
||||
"feature": "Imágenes de Productos",
|
||||
"description": "Sube fotos de productos finales. Útil para: Capacitación de equipo (cómo debe verse), Control de calidad visual, Catálogo para clientes."
|
||||
}
|
||||
],
|
||||
"conclusion": "La forma más eficiente es: 1) Usar IA durante onboarding para crear inventario base (2 min), 2) Añadir recetas manualmente para productos principales (15-30 min), 3) Ir añadiendo nuevos productos/ingredientes según necesites. El inventario unificado simplifica la gestión vs. tener productos e ingredientes separados."
|
||||
}
|
||||
},
|
||||
"firstPrediction": {
|
||||
"title": "Tu Primera Predicción de Demanda",
|
||||
"description": "Entiende cómo interpreta el sistema y cómo ajustar las predicciones según tu experiencia",
|
||||
"readTime": "10",
|
||||
"description": "Cómo funciona el sistema de predicción con Prophet, qué métricas ver y cómo interpretar resultados",
|
||||
"readTime": "12",
|
||||
"content": {
|
||||
"intro": "Las predicciones de demanda son el núcleo de Panadería IA. Usan inteligencia artificial para predecir cuánto venderás de cada producto.",
|
||||
"howItWorks": "El algoritmo analiza: Historial de ventas (últimos 3-12 meses), Día de la semana y estacionalidad, Festivos y eventos especiales, Clima (temperatura, lluvia), Tendencias recientes",
|
||||
"readingPredictions": [
|
||||
{
|
||||
"metric": "Demanda Prevista",
|
||||
"description": "Cuántas unidades predice el sistema que venderás. Ejemplo: '150 baguettes para el Viernes 15/11'"
|
||||
},
|
||||
{
|
||||
"metric": "Rango de Confianza",
|
||||
"description": "El mínimo y máximo esperado. Ejemplo: '130-170 baguettes' (95% de confianza). Útil para planificar conservador o agresivo"
|
||||
},
|
||||
{
|
||||
"metric": "Comparación vs Promedio",
|
||||
"description": "'+15%' significa que se espera 15% más de lo habitual para ese día. Ayuda a detectar picos de demanda"
|
||||
}
|
||||
],
|
||||
"adjustments": "Puedes ajustar manualmente las predicciones si tienes información que el sistema no conoce (ej: evento local, promoción). El sistema aprende de tus ajustes.",
|
||||
"intro": "Las predicciones de demanda son el corazón de BakeWise. Utilizan Prophet (algoritmo de Facebook optimizado para series temporales) más datos contextuales de España (festivos, clima AEMET, puntos de interés cercanos) para predecir cuánto venderás de cada producto en los próximos 7-30 días.",
|
||||
"whenFirstPrediction": {
|
||||
"title": "¿Cuándo se Genera la Primera Predicción?",
|
||||
"description": "Tu primera predicción se genera AUTOMÁTICAMENTE al completar el paso 'Entrenamiento del Modelo IA' durante el onboarding. Este proceso:",
|
||||
"steps": [
|
||||
"Toma tus datos históricos de ventas (mínimo 3 meses)",
|
||||
"Detecta patrones: tendencia general, estacionalidad semanal/anual, efectos de festivos",
|
||||
"Integra contexto de ubicación (POIs: escuelas, oficinas, estaciones cerca)",
|
||||
"Consulta calendario de festivos español (nacionales y locales de Madrid)",
|
||||
"Entrena modelo personalizado por producto (2-5 minutos vía WebSocket)",
|
||||
"Genera predicciones para los próximos 7 días automáticamente"
|
||||
],
|
||||
"timing": "Después del onboarding, el sistema genera predicciones DIARIAMENTE a las 5:30 AM de forma automática. No necesitas hacer nada manual."
|
||||
},
|
||||
"howProphetWorks": {
|
||||
"title": "Cómo Funciona Prophet (Simplificado)",
|
||||
"description": "Prophet descompone tus ventas históricas en componentes:",
|
||||
"components": [
|
||||
{
|
||||
"component": "Tendencia (Trend)",
|
||||
"description": "¿Están subiendo o bajando las ventas con el tiempo? Ej: crecimiento 5% mensual desde apertura",
|
||||
"example": "Si vendes más cada mes, Prophet detecta esa curva ascendente"
|
||||
},
|
||||
{
|
||||
"component": "Estacionalidad Semanal",
|
||||
"description": "Patrones que se repiten cada semana. Ej: Sábados vendes 50% más que Lunes",
|
||||
"example": "Lun: 80 baguettes, Sáb: 120 baguettes (patrón detectado automáticamente)"
|
||||
},
|
||||
{
|
||||
"component": "Estacionalidad Anual",
|
||||
"description": "Patrones anuales. Ej: Diciembre (Navidad) vendes 200% más roscones",
|
||||
"example": "Requiere mínimo 12 meses de datos para detectar"
|
||||
},
|
||||
{
|
||||
"component": "Efectos de Festivos",
|
||||
"description": "Impacto de festivos españoles: Reyes, Semana Santa, Navidad, etc. Prophet sabe que 6 de Enero (Reyes) dispara ventas de roscón",
|
||||
"example": "Sistema incluye calendario completo de festivos nacionales y Madrid"
|
||||
},
|
||||
{
|
||||
"component": "Regresores Externos (BakeWise)",
|
||||
"description": "Variables adicionales que BakeWise añade: Clima (temperatura, lluvia de AEMET), Tráfico (datos de Madrid), POIs (cuántas escuelas/oficinas hay cerca)",
|
||||
"example": "Días de lluvia → -15% ventas de ciertos productos (detectado automáticamente)"
|
||||
}
|
||||
]
|
||||
},
|
||||
"readingPredictions": {
|
||||
"title": "Cómo Leer tus Predicciones (Dashboard)",
|
||||
"description": "Ve a Analítica > Predicciones. Para cada producto verás:",
|
||||
"metrics": [
|
||||
{
|
||||
"metric": "yhat (Predicción Central)",
|
||||
"description": "Valor más probable de ventas. Esto es lo que el sistema 'espera' que vendas.",
|
||||
"example": "Baguette - Viernes 17/01: yhat = 145 unidades",
|
||||
"interpretation": "Planifica producir ~145 baguettes para ese día"
|
||||
},
|
||||
{
|
||||
"metric": "yhat_lower (Mínimo Esperado)",
|
||||
"description": "Límite inferior del intervalo de confianza al 95%. Hay 95% probabilidad de vender MÁS que esto.",
|
||||
"example": "yhat_lower = 125 unidades",
|
||||
"interpretation": "Escenario conservador: produce mínimo 125 para cubrir demanda base"
|
||||
},
|
||||
{
|
||||
"metric": "yhat_upper (Máximo Esperado)",
|
||||
"description": "Límite superior del intervalo de confianza al 95%. Hay 95% probabilidad de vender MENOS que esto.",
|
||||
"example": "yhat_upper = 165 unidades",
|
||||
"interpretation": "Escenario optimista: si produces 165, probablemente te sobre algo"
|
||||
},
|
||||
{
|
||||
"metric": "Comparación vs Promedio",
|
||||
"description": "Porcentaje vs. promedio histórico de ese día de la semana.",
|
||||
"example": "+12% vs promedio Viernes",
|
||||
"interpretation": "Se espera un Viernes mejor de lo habitual (quizás festivo cercano)"
|
||||
},
|
||||
{
|
||||
"metric": "Precisión Histórica (MAPE)",
|
||||
"description": "Qué tan acertadas han sido predicciones pasadas para este producto. MAPE = Mean Absolute Percentage Error.",
|
||||
"example": "MAPE = 15% significa que el error promedio es 15%",
|
||||
"interpretation": "MAPE <20% = bueno, <15% = excelente, >25% = revisar datos o modelo"
|
||||
}
|
||||
]
|
||||
},
|
||||
"visualizations": {
|
||||
"title": "Gráficos Disponibles",
|
||||
"charts": [
|
||||
"Gráfico de Línea: predicción (yhat) + intervalo de confianza (zona sombreada)",
|
||||
"Comparativa vs Real: línea azul = predicción, puntos naranjas = ventas reales (para validar precisión)",
|
||||
"Componentes de Prophet: gráfico de tendencia, estacionalidad semanal, efectos festivos por separado",
|
||||
"Heatmap Semanal: qué días/horas vendes más (si tienes datos horarios)"
|
||||
]
|
||||
},
|
||||
"adjustingPredictions": {
|
||||
"title": "Ajustar Predicciones Manualmente",
|
||||
"description": "Si conoces información que Prophet no tiene (evento local, promoción, obra en la calle), puedes ajustar:",
|
||||
"howTo": [
|
||||
"Ve a predicción de producto específico → Click en día futuro",
|
||||
"Selecciona 'Ajustar Manualmente'",
|
||||
"Indica nuevo valor (ej: aumentar 20% por feria local)",
|
||||
"Añade nota explicativa (ej: 'Feria del barrio este fin de semana')",
|
||||
"Sistema guarda ajuste y APRENDE: si feria se repite cada año, Prophet lo detectará"
|
||||
],
|
||||
"learningNote": "El sistema valida predicciones vs ventas reales cada noche. Si tus ajustes manuales mejoran precisión, Prophet ajusta automáticamente sus parámetros."
|
||||
},
|
||||
"tips": [
|
||||
"Los primeros 7-14 días las predicciones pueden tener 15-20% de error mientras el sistema aprende tus patrones",
|
||||
"Después del primer mes, la precisión típica es 85-90%",
|
||||
"Si una predicción parece muy alta o baja, revisa si hay un festivo o evento que explique el cambio",
|
||||
"Ajusta cuando sepas algo que la IA no sabe (ej: reforma en tu calle, feria local)"
|
||||
]
|
||||
"PRIMERA SEMANA: Predicciones pueden tener 15-20% error (MAPE). Es normal, el modelo está aprendiendo",
|
||||
"PRIMER MES: Precisión mejora a ~10-15% MAPE conforme valida predicciones vs ventas reales diarias",
|
||||
"DESPUÉS DE 3 MESES: Precisión estabiliza en 8-12% MAPE (85-90% precisión) para productos con datos suficientes",
|
||||
"Productos con POCA rotación (vendes <5 unidades/día) tendrán mayor error que productos de ALTA rotación",
|
||||
"Si MAPE >25% después de 1 mes: revisa datos (¿duplicados? ¿productos mal nombrados?) o contacta soporte",
|
||||
"Intervalo de confianza AMPLIO (yhat_upper - yhat_lower > 50% del yhat) = alta incertidumbre, necesitas más datos",
|
||||
"Festivos ATÍPICOS (no oficiales): añádelos manualmente en Configuración > Festivos Personalizados para mejor precisión"
|
||||
],
|
||||
"automaticRetraining": {
|
||||
"title": "Reentrenamiento Automático del Modelo",
|
||||
"description": "BakeWise re-entrena modelos automáticamente cuando:",
|
||||
"triggers": [
|
||||
"MAPE sube >30% por 7 días consecutivos (señal de cambio de patrón)",
|
||||
"Cada 30 días (actualización programada para incorporar datos nuevos)",
|
||||
"Después de importar lote grande de datos históricos nuevos",
|
||||
"Cuando añades nuevos festivos personalizados o cambias ubicación"
|
||||
],
|
||||
"process": "Reentrenamiento tarda 2-5 minutos, se hace en segundo plano (5:30 AM típicamente). Recibes notificación cuando termina con nuevo MAPE."
|
||||
},
|
||||
"conclusion": "Tu primera predicción aparece automáticamente tras el onboarding. Usa yhat como guía principal, yhat_lower/upper para planificar escenarios. La precisión mejora dramáticamente en las primeras 2-4 semanas conforme el modelo valida y aprende de tus ventas reales. No te preocupes si los primeros días el error es alto, es completamente normal."
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -240,98 +513,414 @@
|
||||
"demandForecasting": {
|
||||
"title": "Predicción de Demanda con IA",
|
||||
"description": "Cómo funciona el algoritmo Prophet y cómo optimizar la precisión de las predicciones",
|
||||
"readTime": "12",
|
||||
"readTime": "18",
|
||||
"content": {
|
||||
"intro": "La predicción de demanda usa Prophet, un algoritmo de inteligencia artificial desarrollado por Facebook, optimizado para panaderías españolas.",
|
||||
"intro": "La predicción de demanda usa Prophet, un algoritmo de inteligencia artificial desarrollado por Facebook (Meta), específicamente optimizado para series temporales con patrones estacionales fuertes. BakeWise lo ha adaptado para panaderías españolas integrando datos externos (clima AEMET, POIs, calendario escolar) y reglas de negocio específicas del sector.",
|
||||
"algorithm": {
|
||||
"title": "Cómo Funciona el Algoritmo",
|
||||
"description": "Prophet analiza patrones en tus datos históricos para hacer predicciones precisas. Identifica: Tendencias a largo plazo (¿estás creciendo o bajando ventas?), Estacionalidad diaria (lunes vs viernes), semanal y anual, Efectos de festivos (Navidad, Semana Santa, Reyes), Impacto del clima (lluvia reduce ventas de ciertos productos)"
|
||||
"title": "Cómo Funciona el Algoritmo Prophet",
|
||||
"description": "Prophet descompone las ventas en componentes matemáticos independientes que se suman para generar la predicción final:",
|
||||
"components": [
|
||||
{
|
||||
"component": "Tendencia (Trend)",
|
||||
"description": "Crecimiento o decrecimiento a largo plazo de tus ventas. ¿Estás ganando o perdiendo clientes? Prophet detecta cambios de tendencia (changepoints) automáticamente."
|
||||
},
|
||||
{
|
||||
"component": "Estacionalidad Semanal (Weekly Seasonality)",
|
||||
"description": "Patrón que se repite cada semana. Ejemplo: lunes 20% menos ventas, viernes-sábado +30%. Prophet aprende cuánto vende cada producto cada día de la semana."
|
||||
},
|
||||
{
|
||||
"component": "Estacionalidad Anual (Yearly Seasonality)",
|
||||
"description": "Patrones que se repiten cada año: verano +15% (turismo), enero -10% (post-Navidad), septiembre +20% (vuelta al cole). Requiere al menos 1 año de datos históricos."
|
||||
},
|
||||
{
|
||||
"component": "Efectos de Festivos (Holidays)",
|
||||
"description": "Impacto de días especiales: Navidad +50%, Reyes +35%, Semana Santa +25%, festivos locales. El sistema incluye calendario completo español + autonómico + local (si detecta tu ciudad)."
|
||||
},
|
||||
{
|
||||
"component": "Regresores Externos (External Regressors)",
|
||||
"description": "Variables externas que afectan ventas: Clima (temperatura, lluvia, viento), POIs cercanos (metro, colegios, oficinas), Tráfico (solo Madrid), Calendario escolar (vacaciones). Con estos datos, el modelo pasa de 10 features básicas a 60+ features mejoradas."
|
||||
}
|
||||
],
|
||||
"formula": "yhat = tendencia + estacionalidad_semanal + estacionalidad_anual + festivos + regresores_externos + ruido"
|
||||
},
|
||||
"technicalDetails": {
|
||||
"title": "Detalles Técnicos del Sistema",
|
||||
"implementation": [
|
||||
{
|
||||
"aspect": "Automatización Diaria",
|
||||
"description": "Cada día a las 5:30 AM (hora servidor UTC+1), el sistema ejecuta automáticamente: 1) Fetch de nuevas ventas del día anterior, 2) Actualización de datos externos (clima AEMET, tráfico Madrid), 3) Generación de predicciones para próximos 7-30 días, 4) Cálculo de métricas de precisión (MAPE, RMSE, MAE), 5) Notificación si precisión baja del umbral aceptable. Proceso completo: 3-5 minutos para todo el catálogo."
|
||||
},
|
||||
{
|
||||
"aspect": "Tiempos de Respuesta",
|
||||
"description": "Predicción individual: 500-1000ms (incluye fetch de datos externos + inferencia). Predicción multi-día: ~200ms por día adicional. Batch completo (todos los productos × 7 días): 2-3 minutos. Cache en Redis con TTL de 24 horas: después de primera consulta, respuesta <50ms."
|
||||
},
|
||||
{
|
||||
"aspect": "Intervalos de Confianza",
|
||||
"description": "Prophet genera 3 valores para cada predicción: yhat_lower (límite inferior, percentil 2.5%), yhat (valor esperado, mediana), yhat_upper (límite superior, percentil 97.5%). Ejemplo: Baguettes mañana → yhat_lower: 95, yhat: 120, yhat_upper: 145. Interpretación: 95% de probabilidad de vender entre 95-145 unidades, valor más probable 120. En la UI (ForecastTable/DemandChart) se muestra como rango con banda sombreada."
|
||||
},
|
||||
{
|
||||
"aspect": "Optimización y Hiperparámetros",
|
||||
"description": "El modelo base usa: changepoint_prior_scale=0.05 (flexibilidad para detectar cambios de tendencia), seasonality_prior_scale=10 (peso alto a estacionalidad, crítico en panaderías), seasonality_mode='multiplicative' (estacionalidad proporcional a nivel de ventas), interval_width=0.95 (intervalos de confianza 95%). Estos valores se ajustan automáticamente durante reentrenamiento si MAPE no mejora."
|
||||
}
|
||||
]
|
||||
},
|
||||
"features": [
|
||||
{
|
||||
"name": "Predicciones Multi-Día",
|
||||
"description": "Genera predicciones hasta 30 días en adelante. Útil para planificar compras de ingredientes y vacaciones del personal"
|
||||
"name": "Predicciones Multi-Día y Multi-Producto",
|
||||
"description": "Genera predicciones hasta 30 días en adelante para todo tu catálogo. Útil para: Planificar compras de ingredientes con lead time largo, Organizar vacaciones del personal, Anticipar picos de demanda (eventos, festivos). Puedes consultar predicciones por: Producto individual, Categoría completa (todo el pan, toda la bollería), Día específico o rango de fechas. Endpoint: GET /api/v1/forecasting/tenants/{tenant_id}/predictions?product_id=X&start_date=Y&end_date=Z"
|
||||
},
|
||||
{
|
||||
"name": "Intervalos de Confianza",
|
||||
"description": "Cada predicción incluye mínimo, esperado y máximo (95% de confianza). Si dice '100-150 unidades', hay 95% de probabilidad de vender entre 100-150"
|
||||
"name": "Integración con Clima AEMET",
|
||||
"description": "El sistema se conecta diariamente a la API de AEMET (Agencia Española de Meteorología) para obtener: Temperatura máxima/mínima, Probabilidad de precipitación, Velocidad del viento, Nivel de nubosidad. Impacto observado (reglas de negocio): Lluvia > 70% probabilidad → -30% ventas productos 'paseo' (croissants, napolitanas), Temperatura < 10°C → +15% pan tradicional, +20% productos de chocolate, Temperatura > 30°C → -10% bollería pesada, +25% productos ligeros. El sistema aprende qué productos TU vendes más/menos con cada patrón climático."
|
||||
},
|
||||
{
|
||||
"name": "Ajuste por Festivos",
|
||||
"description": "El sistema conoce todos los festivos nacionales y locales de Madrid. Ajusta automáticamente para Navidad, Reyes, Semana Santa"
|
||||
"name": "Detección de Puntos de Interés (POI)",
|
||||
"description": "Durante onboarding, el sistema detecta automáticamente POIs en radio de 500m alrededor de tu panadería usando Nominatim (OpenStreetMap): Estaciones de metro/tren (tráfico peatonal alto), Colegios/institutos (pico matutino + merienda, vacaciones -40%), Oficinas/polígonos industriales (almuerzo corporativo), Hospitales (24/7 estable), Zonas turísticas (verano +50%, invierno -20%). Estos POIs se convierten en features para el modelo: 'cerca_colegio' → ajuste +20% septiembre-junio, -40% julio-agosto."
|
||||
},
|
||||
{
|
||||
"name": "Integración con Clima",
|
||||
"description": "Consulta la previsión meteorológica de AEMET (Agencia Española de Meteorología). Los días de lluvia suelen tener -20% ventas de algunos productos"
|
||||
"name": "Calendario de Festivos Multi-Nivel",
|
||||
"description": "El sistema incluye 3 capas de festivos: Nacional (15 festivos: Año Nuevo, Reyes, Semana Santa, Navidad...), Autonómico (2-4 festivos según comunidad), Local (1-2 festivos patronales de tu ciudad). Detecta automáticamente tu ubicación durante onboarding para aplicar el calendario correcto. Ajustes típicos: Festivo nacional → -50% (cerrado o media jornada), Día previo a festivo → +35% (compras anticipadas), Navidad (24-25 dic) → +80% productos especiales (roscón, turrones)."
|
||||
},
|
||||
{
|
||||
"name": "Ajustes Manuales con Aprendizaje",
|
||||
"description": "Si conoces eventos locales que el sistema no sabe (feria del pueblo, concierto cercano, obras en la calle), puedes ajustar manualmente la predicción en la UI (ForecastTable → columna Acciones → 'Ajustar'). El sistema registra tu ajuste y la venta real resultante. En próximos eventos similares, usa estos ajustes para mejorar. Ejemplo: Ajustaste +50% por feria local → resultado real fue +55% → próximo año, el sistema ya sugiere +50% automáticamente para esas fechas."
|
||||
}
|
||||
],
|
||||
"uiComponents": {
|
||||
"title": "Interfaz de Usuario (Frontend)",
|
||||
"components": [
|
||||
{
|
||||
"component": "ForecastTable (Tabla de Predicciones)",
|
||||
"path": "/dashboard/forecasting",
|
||||
"description": "Tabla principal con todas las predicciones. Columnas: Producto, Fecha, Predicción (yhat), Min-Max (yhat_lower - yhat_upper), Precisión (MAPE %), Última Actualización. Features: Filtro por producto/categoría, Ordenar por cualquier columna, Búsqueda en tiempo real, Acciones rápidas (Ajustar, Ver Histórico, Ver Detalles). Paginación: 20 filas por página, lazy loading para catálogos grandes (500+ productos)."
|
||||
},
|
||||
{
|
||||
"component": "DemandChart (Gráfico de Demanda)",
|
||||
"path": "/dashboard/forecasting/chart",
|
||||
"description": "Visualización con Chart.js. Muestra: Línea azul = predicción (yhat), Banda azul sombreada = intervalo de confianza (yhat_lower a yhat_upper), Puntos verdes = ventas reales históricas, Líneas verticales rojas = festivos. Interactivo: Hover muestra detalles, Click en punto abre modal con breakdown de componentes Prophet, Zoom temporal (7 días, 14 días, 30 días, 3 meses). Exportable a PNG/PDF."
|
||||
},
|
||||
{
|
||||
"component": "Metrics Dashboard (Panel de Métricas)",
|
||||
"path": "/dashboard/forecasting/metrics",
|
||||
"description": "KPIs de precisión del sistema: MAPE global (todos los productos), MAPE por categoría (Pan: 12%, Bollería: 18%, Pastelería: 22%), MAPE por producto (top 10 mejores y peores), Trend de precisión (últimos 30 días). Color-coded: Verde <15% (excelente), Amarillo 15-25% (bueno), Rojo >25% (necesita atención)."
|
||||
}
|
||||
]
|
||||
},
|
||||
"optimization": [
|
||||
{
|
||||
"tip": "Datos Históricos",
|
||||
"description": "Cuantos más meses de historial, mejor. Mínimo 3 meses, ideal 12+ meses"
|
||||
"tip": "Cantidad de Datos Históricos",
|
||||
"description": "Mínimo absoluto: 3 meses (detecta estacionalidad semanal). Recomendado: 6-12 meses (detecta estacionalidad anual + festivos). Ideal: 18-24 meses (aprende eventos atípicos, crisis, cambios de tendencia). Con 3 meses: MAPE inicial ~25-30%. Con 12 meses: MAPE inicial ~15-20%. Mejora continua: cada mes que pasa, el modelo re-entrena con más datos y mejora ~1-2% MAPE."
|
||||
},
|
||||
{
|
||||
"tip": "Actualización Continua",
|
||||
"description": "El sistema valida predicciones vs ventas reales cada noche y re-entrena modelos si la precisión baja"
|
||||
"tip": "Re-entrenamiento Automático",
|
||||
"description": "El sistema valida predicciones vs ventas reales cada noche. Si detecta degradación de precisión, activa re-entrenamiento automático. Triggers de re-entrenamiento: MAPE > 30% durante 7 días consecutivos (precisión inaceptable), Modelo antiguo > 30 días sin re-entrenar (datos obsoletos), Cambio estructural detectado (nueva tendencia, nuevo producto), Usuario solicita manualmente (Dashboard → Configuración → 'Forzar Re-entrenamiento'). Proceso de re-entrenamiento: 5-10 minutos, sin downtime (modelo antiguo sigue sirviendo durante entrenamiento), notificación por email cuando completa."
|
||||
},
|
||||
{
|
||||
"tip": "Ajustes Manuales",
|
||||
"description": "Si conoces un evento local (feria, concierto cerca), ajusta la predicción. El sistema aprende de tus correcciones"
|
||||
"tip": "Ajuste de Hiperparámetros por Producto",
|
||||
"description": "Productos con alta variabilidad (pastelería especial, productos estacionales) usan changepoint_prior_scale=0.08 (más flexible). Productos estables (baguette, pan de molde) usan changepoint_prior_scale=0.03 (menos flexible, menos ruido). El sistema clasifica automáticamente cada producto analizando su coeficiente de variación (CV = desviación estándar / media). CV < 0.3 → estable, CV > 0.5 → altamente variable."
|
||||
},
|
||||
{
|
||||
"tip": "Corrección de Outliers y Datos Anómalos",
|
||||
"description": "El sistema detecta y filtra outliers antes de entrenar: Ventas = 0 en día laboral sin motivo (error de registro) → descartado. Ventas > 3× desviación estándar (pico anómalo: evento único, boda grande) → limitado a percentil 95. Días con festivo no registrado → marcado manualmente y re-etiquetado. Puedes revisar y validar outliers en: Dashboard → Forecasting → Data Quality → Outliers Detectados."
|
||||
}
|
||||
],
|
||||
"metrics": {
|
||||
"title": "Métricas de Precisión",
|
||||
"description": "El sistema mide su propia precisión con MAPE (Error Porcentual Absoluto Medio). Objetivo: MAPE < 20% (80%+ precisión). Dashboard muestra precisión por producto y tendencias"
|
||||
}
|
||||
"title": "Métricas de Precisión y Validación",
|
||||
"description": "El sistema usa 3 métricas estándar de ML para medir precisión de predicciones:",
|
||||
"metricsDetail": [
|
||||
{
|
||||
"metric": "MAPE (Mean Absolute Percentage Error)",
|
||||
"formula": "MAPE = (1/n) × Σ|Real - Predicción| / Real × 100",
|
||||
"interpretation": "Error porcentual promedio. Métrica principal usada en el sistema. Umbrales: <10% = Excelente (oro), 10-15% = Muy Bueno (verde), 15-25% = Aceptable (amarillo), 25-35% = Mejorable (naranja), >35% = Insuficiente (rojo, requiere intervención). Ejemplo: MAPE 12% → en promedio, predicción difiere ±12% del valor real."
|
||||
},
|
||||
{
|
||||
"metric": "RMSE (Root Mean Squared Error)",
|
||||
"formula": "RMSE = √[(1/n) × Σ(Real - Predicción)²]",
|
||||
"interpretation": "Error promedio en unidades absolutas. Penaliza errores grandes más que MAPE. Ejemplo: RMSE = 15 unidades → en promedio, la predicción difiere ±15 unidades del valor real. Útil para entender magnitud del error en tu contexto específico."
|
||||
},
|
||||
{
|
||||
"metric": "MAE (Mean Absolute Error)",
|
||||
"formula": "MAE = (1/n) × Σ|Real - Predicción|",
|
||||
"interpretation": "Error absoluto promedio, similar a RMSE pero sin penalización extra a errores grandes. Más robusto a outliers. Útil para comparar precisión entre productos con volúmenes muy diferentes."
|
||||
}
|
||||
],
|
||||
"dashboardLocation": "Ve a Dashboard → Forecasting → Metrics para ver: MAPE por producto (tabla sorteable), MAPE por categoría (gráfico de barras), Evolución temporal de MAPE (gráfico de línea últimos 30 días), Distribución de errores (histograma: ¿errores simétricos o sesgados?), Productos con peor precisión (top 10 que necesitan atención)."
|
||||
},
|
||||
"troubleshooting": [
|
||||
{
|
||||
"problem": "MAPE > 35% (predicciones muy imprecisas)",
|
||||
"solutions": [
|
||||
"Revisa calidad de datos: ¿hay ventas registradas correctamente cada día? ¿outliers sin marcar?",
|
||||
"Verifica que tienes al menos 3 meses de historial. Con menos, la precisión será mala",
|
||||
"Comprueba si hubo cambios de negocio recientes (nuevo producto, renovación de local, cambio de horario) que el modelo no sabe",
|
||||
"Fuerza re-entrenamiento manual en Dashboard → Forecasting → Configuración",
|
||||
"Si el problema persiste 14+ días, contacta soporte con detalles del producto afectado"
|
||||
]
|
||||
},
|
||||
{
|
||||
"problem": "Predicciones sistemáticamente altas (sobrestima ventas)",
|
||||
"solutions": [
|
||||
"Revisa si hay tendencia decreciente en tus ventas que el modelo no ha capturado todavía (tarda ~2 semanas en detectar nuevas tendencias)",
|
||||
"Verifica si cambió algo en tu negocio: competencia nueva, obras en la calle, cambio de proveedor que afecta calidad",
|
||||
"Ajusta manualmente a la baja durante 1-2 semanas. El sistema aprenderá y corregirá automáticamente",
|
||||
"Revisa configuración de buffer en Producción → Configuración (podría estar añadiendo % extra innecesario)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"problem": "Predicciones no reflejan festivos correctamente",
|
||||
"solutions": [
|
||||
"Verifica que tu ubicación está correcta (Dashboard → Mi Panadería → Datos del Negocio). Si está mal, festivos locales no se aplican",
|
||||
"Revisa calendario de festivos personalizados (Dashboard → Configuración → Festivos). Añade patronales locales si faltan",
|
||||
"Algunos festivos dependen del año (Semana Santa cambia fechas). El sistema actualiza calendario automáticamente cada enero, pero confirma que está actualizado"
|
||||
]
|
||||
}
|
||||
],
|
||||
"advancedFeatures": [
|
||||
{
|
||||
"feature": "Predicciones Condicionales (Escenarios What-If)",
|
||||
"description": "Próximamente: podrás simular escenarios hipotéticos. '¿Qué pasa si llueve mañana?' '¿Y si bajo el precio 10%?' '¿Y si hago promoción en Instagram?' El sistema generará predicciones alternativas para cada escenario."
|
||||
},
|
||||
{
|
||||
"feature": "Aprendizaje Federado Multi-Tenant (Roadmap)",
|
||||
"description": "Futuro: el sistema aprenderá de patrones agregados de todas las panaderías (anónimamente, GDPR-compliant). Si 100 panaderías en Madrid venden +30% los viernes lluviosos de octubre, tu modelo también aprenderá ese patrón incluso sin tener muchos datos propios de esa condición."
|
||||
}
|
||||
],
|
||||
"tips": [
|
||||
"CLAVE: La precisión mejora exponencialmente con el tiempo. Primeras 2 semanas: ~65-70% precisión. Primer mes: ~75-80%. Después de 3 meses: ~85-90%. Después de 1 año: ~90-95% (mejor que humanos en promedio).",
|
||||
"No persigas 100% precisión: es imposible. Las ventas tienen componente aleatorio inevitable (cliente cancela pedido grande, evento imprevisto). MAPE 10-15% es excelente en la industria.",
|
||||
"Usa predicciones como GUÍA, no como LEY absoluta. Combina IA + tu experiencia para mejores resultados. Si intuyes que mañana venderás más, ajusta al alza.",
|
||||
"Re-entrenamiento automático suele ejecutar de madrugada (3-4 AM) para no interferir con operaciones. Recibirás email cuando complete.",
|
||||
"Intervalos de confianza (yhat_lower - yhat_upper) son tu amigo: si el rango es muy amplio (ej: 50-200), significa alta incertidumbre. Produce para el yhat (valor esperado) pero ten ingredientes extra por si acaso.",
|
||||
"Para productos nuevos sin historial, el sistema usa predicciones de productos similares (misma categoría, similar precio) como punto de partida. Precisión inicial será baja (~30-40% MAPE) pero mejora rápidamente tras 2-3 semanas de ventas reales."
|
||||
],
|
||||
"conclusion": "El sistema de predicción de demanda es el corazón de BakeWise. Todas las demás funcionalidades (producción, inventario, compras) dependen de predicciones precisas. Invierte tiempo en: 1) Subir máximo historial posible (12+ meses ideal), 2) Registrar ventas diariamente sin fallos, 3) Marcar eventos/festivos especiales, 4) Revisar métricas semanalmente y actuar si MAPE sube. Con datos limpios y consistentes, el sistema alcanza 85-92% precisión en 90 días, reduciendo desperdicio 40-60% y aumentando ventas 15-25% (menos roturas de stock)."
|
||||
}
|
||||
},
|
||||
"productionPlanning": {
|
||||
"title": "Planificación de Producción Automatizada",
|
||||
"description": "Optimiza tu horneado diario con planes de producción generados automáticamente desde predicciones",
|
||||
"readTime": "10",
|
||||
"readTime": "16",
|
||||
"content": {
|
||||
"intro": "La planificación de producción convierte predicciones de demanda en lotes de horneado concretos, optimizando eficiencia y reduciendo desperdicio.",
|
||||
"intro": "La planificación de producción convierte predicciones de demanda en lotes de horneado concretos (batches), optimizando eficiencia operativa, reduciendo desperdicio y maximizando utilización de equipos. El sistema integra forecasting, recetas, inventario y capacidad de equipos en un solo flujo automatizado.",
|
||||
"architecture": {
|
||||
"title": "Arquitectura del Sistema",
|
||||
"description": "El sistema usa arquitectura event-driven (orientada a eventos) con coordinación entre microservicios:",
|
||||
"flow": [
|
||||
{
|
||||
"step": "1. Servicio Orquestador (Orchestrator)",
|
||||
"description": "Coordina todo el flujo. Cada día (o bajo demanda), solicita predicciones al Forecasting Service y dispara generación de planes de producción. Actúa como cerebro central del sistema."
|
||||
},
|
||||
{
|
||||
"step": "2. Servicio de Forecasting",
|
||||
"description": "Genera predicciones de demanda con Prophet. Devuelve array con: product_id, predicted_demand, confidence_score, historical_average, weather_impact. El Orchestrator pasa estos datos al Production Service."
|
||||
},
|
||||
{
|
||||
"step": "3. Servicio de Producción (Production Service)",
|
||||
"description": "Recibe forecast → Consulta inventario actual → Calcula production_needed = max(0, predicted_demand - current_stock) → Genera ProductionSchedule + ProductionBatch para cada producto. Endpoint clave: POST /api/v1/tenants/{tenant_id}/production/operations/generate-schedule"
|
||||
},
|
||||
{
|
||||
"step": "4. Integración con Inventario y Recetas",
|
||||
"description": "Production Service consulta RecipesServiceClient (ingredientes necesarios) e InventoryClient (disponibilidad actual) antes de crear lotes. Valida que hay suficientes ingredientes o emite alertas de stock bajo."
|
||||
}
|
||||
]
|
||||
},
|
||||
"technicalDetails": {
|
||||
"title": "Detalles Técnicos de Implementación",
|
||||
"components": [
|
||||
{
|
||||
"component": "ProductionBatch (Lote de Producción)",
|
||||
"description": "Unidad básica de producción. Cada batch representa una hornada/lote concreto. Estructura: batch_number (formato BATCH-YYYYMMDD-NNN, ej: BATCH-20260113-001), product_id, recipe_id, planned_quantity (unidades a producir), planned_start_time / planned_end_time, planned_duration_minutes (calculado automáticamente), priority (LOW, MEDIUM, HIGH, URGENT), current_process_stage (MIXING, PROOFING, SHAPING, BAKING, COOLING, PACKAGING, FINISHING), status (PENDING, IN_PROGRESS, COMPLETED, ON_HOLD, QUALITY_CHECK, FAILED, CANCELLED). Tracking real: actual_start_time, actual_end_time, actual_quantity, actual_duration_minutes, actual_cost. Métricas de calidad: quality_score (0-100), yield_percentage (actual/planned × 100), waste_quantity, defect_quantity, waste_defect_type (burnt, misshapen, underproofed, temperature_issues)."
|
||||
},
|
||||
{
|
||||
"component": "ProductionSchedule (Plan Diario)",
|
||||
"description": "Contenedor de todos los batches del día. Estructura: schedule_date (fecha objetivo), shift_start / shift_end (horario laboral), capacity_utilization (% de equipos ocupados), batches_planned (cantidad de lotes), status (DRAFT, FINALIZED, IN_PROGRESS, COMPLETED). Puedes tener múltiples schedules (turnos mañana/tarde/noche). Endpoint para crear: POST /api/v1/tenants/{tenant_id}/production/schedules"
|
||||
},
|
||||
{
|
||||
"component": "ProductionCapacity (Capacidad de Recursos)",
|
||||
"description": "Tracking de disponibilidad de equipos y personal por día. Campos: resource_type ('equipment' o 'staff'), resource_id (UUID del horno, amasadora, equipo), capacity_date, total_capacity_units (capacidad máxima en horas), reserved_capacity_units (horas ya asignadas a batches), remaining_capacity_units (total - reserved), utilization_percentage ((reserved/total) × 100). Ejemplo: Horno Principal → total: 14 horas (06:00-20:00), reserved: 10.5 horas (3 batches), remaining: 3.5 horas, utilization: 75%."
|
||||
},
|
||||
{
|
||||
"component": "ProcessStage (Etapas de Proceso)",
|
||||
"description": "Cada batch progresa por etapas secuenciales: MIXING (amasado), PROOFING (fermentación), SHAPING (formado), BAKING (horneado), COOLING (enfriado), PACKAGING (empaquetado), FINISHING (acabado final). Cada etapa puede tener quality checks heredados de la receta. Transición a siguiente etapa requiere completar checks obligatorios. Historial guardado en process_stage_history (JSON) con timestamps."
|
||||
}
|
||||
]
|
||||
},
|
||||
"features": [
|
||||
{
|
||||
"name": "Generación Automática",
|
||||
"description": "Cada noche a las 5:30 AM, el sistema genera el plan de producción del día basándose en la predicción de demanda"
|
||||
"name": "Generación Automática desde Forecast",
|
||||
"description": "El Orchestrator Service dispara generación automática (configuración típica: diaria a las 5:30 AM, sincronizado con forecast). Flujo completo: 1) Orchestrator solicita forecast para próximos 7 días, 2) Production Service recibe array de predicciones, 3) Para cada producto: calcula production_needed = predicted_demand - current_stock, 4) Si production_needed > 0, crea ProductionBatch con: planned_quantity = production_needed, planned_start_time = basado en horario operativo (ej: 06:00 AM), planned_end_time = start + duración calculada de receta, priority = basado en urgencia de forecast (HIGH si demand > stock×2, MEDIUM normal), recipe_id = receta asociada al producto, 5) Valida disponibilidad de ingredientes via InventoryClient, 6) Crea quality checks heredando configuración de la receta, 7) Devuelve schedule_id, batches_created, warnings (si falta stock). Tiempo de generación: 2-3 minutos para catálogo completo (100+ productos). Output: lista de batches en estado PENDING listos para ejecutar."
|
||||
},
|
||||
{
|
||||
"name": "Optimización por Lotes",
|
||||
"description": "Calcula el tamaño ideal de lote para cada producto. Si vendes 150 baguettes pero tu bandeja es de 40, sugiere 4 lotes (160 total, 6.6% buffer)"
|
||||
"name": "Creación Manual de Batches",
|
||||
"description": "Además de generación automática, puedes crear batches manualmente en UI. Casos de uso: Pedido especial de cliente (boda, evento corporativo), Reposición urgente de producto, Prueba de receta nueva, Producción extra por promoción. Formulario de creación incluye: Selector de producto, Selector de receta (auto-carga ingredientes), Cantidad planificada, Fecha y hora de inicio/fin, Duración estimada (auto-calcula si defines inicio/fin), Prioridad (LOW/MEDIUM/HIGH/URGENT), Flags especiales (is_rush_order, is_special_recipe), Asignación de recursos (equipos, personal, estación), Notas de producción (texto libre). Validaciones: Verifica disponibilidad de ingredientes antes de crear, Alerta si capacidad de equipos excedida en ese horario, Confirma que receta existe y está activa. Endpoint: POST /api/v1/tenants/{tenant_id}/production/batches"
|
||||
},
|
||||
{
|
||||
"name": "Secuenciación",
|
||||
"description": "Ordena los lotes por prioridad y compatibilidad de horno. Productos con mismo tiempo/temperatura se agrupan para eficiencia"
|
||||
"name": "Optimización por Capacidad de Equipos",
|
||||
"description": "El sistema rastrea capacidad de cada equipo (hornos, amasadoras, batidoras) por día. Configuración típica: Horno Principal: capacity = 4 bandejas, disponible 06:00-20:00 (14 horas), Horno Secundario: capacity = 2 bandejas, disponible 08:00-18:00 (10 horas), Amasadora Industrial: capacity = 6 lotes/hora, disponible 05:00-15:00 (10 horas). Cuando asignas batch a equipo: Sistema calcula reserved_capacity_units += planned_duration_minutes/60, Actualiza remaining_capacity_units = total - reserved, Calcula utilization_percentage = (reserved/total) × 100, Si utilization > 90%, emite alerta 'capacity_overload'. Dashboard muestra: Timeline visual con slots de tiempo, Barras de utilización por equipo (verde <70%, amarillo 70-90%, rojo >90%), Conflictos de horario (2 batches usando mismo equipo simultáneamente), Sugerencias de optimización (mover batch a otro horario/equipo). Endpoint clave: GET /api/v1/tenants/{tenant_id}/production/schedules?date=YYYY-MM-DD → incluye capacity_utilization por recurso."
|
||||
},
|
||||
{
|
||||
"name": "Integración con Recetas",
|
||||
"description": "Calcula automáticamente cuánta harina, mantequilla, etc. necesitas según los lotes planificados"
|
||||
"name": "Secuenciación y Priorización Inteligente",
|
||||
"description": "El sistema ordena batches por múltiples factores: 1) Priority explícito (URGENT > HIGH > MEDIUM > LOW), 2) Rush order flag (is_rush_order=true sube a URGENT automáticamente), 3) Forecast urgency (si predicted_demand > current_stock × 2 → urgente), 4) Order deadline (si linked a customer order con fecha entrega cercana), 5) Equipment availability (agrupa batches compatibles con mismo equipo). Lógica de agrupación: Productos con misma temperatura/tiempo de horneado se agrupan para minimizar cambios de configuración de horno. Ejemplo: Baguettes (230°C, 25 min) + Pan Rústico (230°C, 30 min) se hornean consecutivamente. Baguettes → Croissants (180°C, 18 min) requiere cambio de temperatura → menos eficiente. Dashboard muestra: Lista ordenada de batches con color-coded priority, Sugerencias de reordenamiento para optimizar equipos, Tiempo total estimado de producción (suma de duraciones), Critical path: secuencia mínima para cumplir todos los deadlines."
|
||||
},
|
||||
{
|
||||
"name": "Integración Profunda con Recetas",
|
||||
"description": "Cada batch está vinculado a una receta que define: Ingredientes y cantidades (para 1 unidad o 1 lote base), Tiempo de preparación por etapa (mixing: 15 min, proofing: 60 min, baking: 25 min, etc.), Temperatura y equipo requerido (Horno a 230°C, Amasadora espiral), Quality checks por etapa (pesar masa post-mixing, temperatura post-baking), Rendimiento esperado (yield: 95% typical, 5% waste normal). Al crear batch: Sistema llama RecipesServiceClient.calculate_ingredients_for_quantity(recipe_id, planned_quantity) → devuelve ingredient_requirements array, Ejemplo: Batch de 200 baguettes → Harina: 100 kg, Agua: 65 L, Sal: 2 kg, Levadura: 0.8 kg. Sistema valida disponibilidad: InventoryClient.check_availability(ingredient_requirements) → devuelve is_available, missing_items. Si hay ingredientes insuficientes: Crea alerta de stock bajo, Sugiere ajustar planned_quantity a lo disponible, Bloquea batch (status = ON_HOLD) hasta reposición. Cálculo de coste: actual_cost = Σ(ingredient_quantity × ingredient_unit_cost) + labor_cost + energy_cost. Durante producción: Cuando batch = COMPLETED, sistema auto-consume ingredientes del inventario (FIFO), actualiza stock de producto final (+actual_quantity)."
|
||||
},
|
||||
{
|
||||
"name": "Tracking en Tiempo Real y Alertas",
|
||||
"description": "El Production Scheduler ejecuta cada 5 minutos (APScheduler con leader election para deploys distribuidos). Checks automáticos: 1) Production Delays: Identifica batches donde actual_end_time > planned_end_time. Calcula delay_minutes. Emite alerta si delay > 15 minutos. Muestra batches afectados downstream. 2) Equipment Maintenance Due: Rastrea uso acumulado de equipos (horas de operación). Alerta cuando equipment_maintenance_due_date < today. Muestra days_overdue. 3) Batch Start Delays: Detecta batches en PENDING donde current_time > planned_start_time + 15 min. Previene efecto dominó de retrasos. 4) Quality Check Pending: Batches en QUALITY_CHECK > 30 minutos emiten alerta para manager. Deduplicación: Cache en memoria con TTL 1 hora para evitar spam de alertas. Endpoint alertas: GET /api/v1/tenants/{tenant_id}/production/alerts?active=true. Dashboard Live: Actualización cada 30s (polling), Muestra batches IN_PROGRESS con progreso real-time, Color-coded status (verde on-time, amarillo delayed <30min, rojo delayed >30min), Badges para rush orders y quality checks pendientes."
|
||||
},
|
||||
{
|
||||
"name": "Control de Calidad Stage-Gated",
|
||||
"description": "Sistema de calidad multi-etapa heredado de recetas. Estructura: QualityTemplate (definido en receta): Especifica process_stage donde aplica check (MIXING, BAKING, COOLING, PACKAGING), check_type (weight, temperature, visual, texture, color, moisture, dimension), target_value y tolerance_percentage (ej: peso target 250g ±5%), required (obligatorio) vs optional, blocking_on_failure (bloquea progreso si falla). Al crear batch: Sistema copia quality templates de la receta a pending_quality_checks JSON del batch. Durante producción: Cuando batch entra en etapa con checks pendientes, UI muestra QualityCheckModal, Operador ingresa measured_value (ej: peso real 248g), Sistema calcula: deviation = |measured - target| / target × 100, pass_fail = deviation <= tolerance_percentage, quality_score = 100 - deviation (max 100), Si pass_fail = false y blocking_on_failure = true: Batch status = QUALITY_CHECK (bloqueado), Manager notificado para review, Puede aprobar excepción o rechazar batch (status = FAILED), Si todos los checks pasan: Batch progresa a siguiente etapa automáticamente, Check movido de pending a completed_quality_checks JSON. Trazabilidad: Cada check registra: operator_name, timestamp, measured_value, pass_fail, notes. Reportes históricos en Dashboard → Quality → Trends: Quality score promedio por producto (últimos 30 días), Defect rate (% batches con checks fallidos), Pass rate por tipo de check. Endpoint: POST /api/v1/tenants/{tenant_id}/production/batches/{batch_id}/quality-checks"
|
||||
}
|
||||
],
|
||||
"iotIntegration": {
|
||||
"title": "Integración IoT con Equipos Inteligentes",
|
||||
"description": "BakeWise soporta conexión directa con hornos industriales modernos para automatización completa. Conectores disponibles:",
|
||||
"connectors": [
|
||||
{
|
||||
"brand": "Rational iCombi",
|
||||
"description": "Integración con plataforma ConnectedCooking. Datos en tiempo real: Temperatura actual del horno (°C), Estado operativo (heating, cooking, cooling, idle), Ciclo de cocción activo (número de ciclo, tiempo restante), Consumo energético (kWh). Automatización: Sistema inicia ciclo de horneado automáticamente cuando batch pasa a BAKING stage, Horno reporta completion → batch auto-update a COOLING stage, Alertas de temperatura fuera de rango (target 230°C, actual 215°C → alerta)."
|
||||
},
|
||||
{
|
||||
"brand": "Wachtel Ovens",
|
||||
"description": "Integración con sistema REMOTE monitoring. Funcionalidades: Monitoreo de múltiples cámaras independientes, Control de vapor y ventilación, Programas de horneado pre-configurados (baguette, croissant, rústico), Logs de operación detallados para auditoría. BakeWise sincroniza programas de horneado con recetas, auto-selecciona programa correcto por producto."
|
||||
},
|
||||
{
|
||||
"brand": "Generic REST API",
|
||||
"description": "Conector genérico configurable para cualquier equipo con API REST. Configuración: Base URL del equipo, Authentication (API key, OAuth2, Basic Auth), Endpoints personalizados (start_cycle, get_status, get_temperature), Mapping de campos (tu campo 'temp' → campo API 'current_temperature'). Permite integrar equipos legacy o marcas no soportadas nativamente. Polling interval: 30 segundos (configurable)."
|
||||
}
|
||||
],
|
||||
"benefits": [
|
||||
"Auto-update de batch status sin intervención manual (actual_start_time, actual_end_time automáticos)",
|
||||
"Detección temprana de problemas (temperatura baja, fallo de equipo) antes de arruinar lote completo",
|
||||
"Trazabilidad completa: qué horno, a qué temperatura, cuánto tiempo exactamente para cada batch",
|
||||
"Optimización energética: reportes de consumo kWh por producto, identifica hornos menos eficientes",
|
||||
"Mantenimiento predictivo: detecta degradación de performance de equipos antes de fallo total"
|
||||
]
|
||||
},
|
||||
"workflow": [
|
||||
{
|
||||
"step": "1. Revisión Matinal",
|
||||
"description": "Cada mañana, revisa el plan de producción sugerido en el dashboard. Ve todos los lotes del día con horarios sugeridos"
|
||||
"step": "1. Generación del Plan (Automática o Manual)",
|
||||
"description": "AUTOMÁTICA: Orchestrator dispara generate-schedule → Production Service crea batches desde forecast. Revisa en Dashboard → Production → Daily Schedule. Ve lista de batches planificados con horarios, cantidades, equipos asignados. MANUAL: Click '+ Create Batch' → Selecciona producto, receta, cantidad → Asigna horario y equipos → Valida ingredientes → Confirma. Batch aparece en schedule con status PENDING."
|
||||
},
|
||||
{
|
||||
"step": "2. Ajustes (Opcional)",
|
||||
"description": "Si ves que hace buen tiempo o tienes info extra, ajusta cantidades. Los cambios se reflejan automáticamente en ingredientes necesarios"
|
||||
"step": "2. Revisión y Ajustes Matinales",
|
||||
"description": "Cada mañana antes de iniciar producción (recomendado 30 min antes de shift): Revisa plan en ProductionSchedule (vista Timeline o Calendar), Verifica capacity utilization (barra verde = OK, amarilla/roja = sobrecargado), Ajusta cantidades si tienes info extra (clima, evento local, pedido urgente): Click en batch → 'Edit' → Modifica planned_quantity, Sistema recalcula ingredient_requirements automáticamente, Valida disponibilidad de ingredientes actualizada, Reordena batches (drag-and-drop) si necesario para optimizar secuencia, Finaliza schedule: Click 'Finalize' → status cambia de DRAFT a FINALIZED (ya no editable sin permisos admin). Tiempo típico: 5-10 minutos de revisión."
|
||||
},
|
||||
{
|
||||
"step": "3. Ejecución",
|
||||
"description": "Marca lotes como 'En Progreso' cuando empiezas, 'Completado' cuando terminas. Registra cantidad real producida"
|
||||
"step": "3. Ejecución de Producción (Tracking por Etapas)",
|
||||
"description": "Operador selecciona primer batch del día, Click 'Start Batch' → status cambia a IN_PROGRESS, Sistema registra actual_start_time automáticamente, Si IoT conectado: horno arranca ciclo automáticamente. Progresión por etapas: MIXING stage: Operador amasa ingredientes, Si hay quality check: QualityCheckModal aparece → pesar masa, ingresar peso real, Confirmar → avanza a PROOFING. PROOFING stage: Masa reposa (timer en UI), Auto-avanza a SHAPING tras tiempo configurado en receta. SHAPING stage: Operador forma piezas, Marca cantidad de piezas shaped (puede ser < planned si masa no rindió). BAKING stage: Batch asignado a horno, Si IoT: auto-start, Si manual: operador marca inicio, Horno reporta temperatura, tiempo restante en live view, Al completar: auto-avanza a COOLING. COOLING stage: Timer de enfriado (configurable por producto), Quality check: medir temperatura interna, Check visual. PACKAGING stage: Empaquetar productos finales, Registrar actual_quantity (cantidad final lista para venta), Puede ser < planned_quantity si hubo defectos/waste. FINISHING stage: Últimos detalles (etiquetado, almacenamiento), Click 'Complete Batch' → status = COMPLETED, Sistema registra actual_end_time, actual_quantity, yield_percentage. Automáticamente: Inventory actualizado (+actual_quantity producto final, -ingredientes consumidos FIFO), Batch agregado a historial de producción."
|
||||
},
|
||||
{
|
||||
"step": "4. Control de Calidad",
|
||||
"description": "Opcional: registra checks de calidad (peso, textura, color) para seguimiento histórico"
|
||||
"step": "4. Control de Calidad y Resolución de Issues",
|
||||
"description": "Durante producción, si quality check falla: Batch bloqueado en status QUALITY_CHECK, Alerta enviada a manager (email + dashboard notification), Manager revisa: Ve measured_value vs target_value, Lee operator notes, Inspecciona batch físicamente si necesario. Decisión: APROBAR: Click 'Approve Exception' → Batch continúa con flag 'quality_exception', RECHAZAR: Click 'Reject Batch' → status = FAILED, Se registra defect_quantity y waste_defect_type, Batch eliminado del schedule activo, Ingredientes no se consumen de inventario (ya que no produjo output válido). Si hay retrasos (batch delayed): Sistema emite alert production_delay_detected, Manager puede: Reasignar recursos (equipo/personal adicional), Extender shift_end_time, Posponer batches no-urgentes, Alertar a ventas si habrá roturas de stock. Troubleshooting equipment: Si horno falla: IoT detecta error_code, Sistema marca batches afectados como ON_HOLD, Maintenance alert creada con days_overdue, Manager reasigna batches a horno alternativo."
|
||||
},
|
||||
{
|
||||
"step": "5. Análisis Post-Producción",
|
||||
"description": "Al final del día, revisa métricas en Dashboard → Production → Analytics: On-Time Completion Rate: % batches completados dentro de planned_end_time (objetivo >90%), Yield Performance: Promedio yield_percentage (actual/planned), objetivo 95%+, Quality Score Trends: Promedio quality_score por producto, identifica productos problemáticos, Waste & Defect Tracker: Cantidad y tipo de defectos (burnt 10%, underproofed 5%, misshapen 3%), Capacity Utilization: % equipos utilizados, identifica sub-utilización o cuellos de botella, Cost Analysis: actual_cost por batch, compara con coste esperado, identifica desviaciones. Exportable a Excel/PDF para reportes gerenciales. Insights automáticos (AI-powered): 'Producto X tiene yield 10% menor que promedio → revisar receta o capacitación', 'Horno 2 tiene 15% más defectos burnt → calibrar temperatura', 'Batches de tarde tienen 20% más delays → considerar ajustar shift_start_time'."
|
||||
}
|
||||
],
|
||||
"uiComponents": {
|
||||
"title": "Componentes de Interfaz (Frontend)",
|
||||
"components": [
|
||||
{
|
||||
"component": "ProductionSchedule.tsx",
|
||||
"path": "/dashboard/production/schedule",
|
||||
"description": "Vista principal de planificación. Modos: Timeline (horizontal time-based), Calendar (día por día), Capacity (utilización de equipos). Features: Drag-and-drop para reordenar batches, Color-coded por status (PENDING=gris, IN_PROGRESS=azul, COMPLETED=verde, ON_HOLD=naranja, FAILED=rojo), Filtros por status, producto, categoría, prioridad, Equipment capacity bars (verde/amarillo/rojo según utilización), Click en batch abre detalle modal con full info + edit."
|
||||
},
|
||||
{
|
||||
"component": "CreateProductionBatchModal.tsx",
|
||||
"description": "Modal para crear batch manualmente. Secciones: Product Information (producto, receta con auto-load de detalles), Production Schedule (start/end time, duration auto-calc, quantity), Resource Allocation (equipment multi-select, staff IDs, station), Order Context (order_id si es para pedido, forecast_id si auto-generado, flags: rush_order, special_recipe), Production Notes (texto libre para instrucciones especiales). Validations: End > Start time, Quantity > 0, Duration > 0, Ingredient availability check pre-save. API: POST /api/v1/tenants/{tenant_id}/production/batches"
|
||||
},
|
||||
{
|
||||
"component": "ProcessStageTracker.tsx",
|
||||
"description": "Visual tracker de progreso del batch por etapas. Diseño: Stepper horizontal con 7 stages (MIXING → PROOFING → SHAPING → BAKING → COOLING → PACKAGING → FINISHING), Stage actual highlighted en azul, completados en verde, pendientes en gris, Si hay quality check pendiente en stage: ícono badge rojo con número de checks. Click en stage: Muestra detalles (start_time, duration, operator, quality_score si aplicable), Si stage actual: botones 'Complete Stage' o 'Quality Check'."
|
||||
},
|
||||
{
|
||||
"component": "QualityCheckModal.tsx",
|
||||
"description": "Modal para ingresar resultados de quality checks. Campos dinámicos según check_type: WEIGHT: Input para peso medido (g/kg), target weight visible, tolerance %, TEMPERATURE: Input para temperatura (°C), target temp, tolerance, VISUAL: Radio buttons (Pass/Fail), text area para notas, TEXTURE: Scale 1-5, text area descripción, COLOR: Color picker + reference image. Auto-calcula: deviation %, quality_score, pass_fail boolean. Si fail + blocking: Alerta 'This check is blocking, batch will be put ON HOLD pending manager review'. Submit → API: POST /batches/{batch_id}/quality-checks → actualiza pending_quality_checks."
|
||||
},
|
||||
{
|
||||
"component": "LiveBatchTrackerWidget.tsx",
|
||||
"path": "/dashboard (widget)",
|
||||
"description": "Widget en dashboard mostrando batches activos en tiempo real. Lista compacta: Product name, current_process_stage, time_remaining (ETA to completion), progress bar visual (% stages completados), Status badge (IN_PROGRESS verde, QUALITY_CHECK amarillo, delayed rojo). Actualización: Polling cada 30s. Click en batch: Navega a batch detail page. Muestra max 5 batches, link 'View All' para página completa."
|
||||
}
|
||||
]
|
||||
},
|
||||
"optimizationTips": [
|
||||
{
|
||||
"tip": "Batch Sizing Strategy",
|
||||
"description": "Tamaño de lote óptimo depende de: Equipment capacity (no exceder capacidad de bandeja/horno), Demand forecast (producir lo necesario +5-10% buffer, no mucho más para evitar waste), Recipe scalability (algunas recetas no escalan linealmente: masa madre funciona mejor en lotes 50-100 kg, no 10 kg ni 500 kg). Recomendación: Si predicted_demand = 150 baguettes y bandeja = 40, opciones: Opción A: 4 lotes de 40 = 160 total (6.6% buffer, OK), Opción B: 3 lotes de 50 = 150 total (0% buffer, RISKY si hay defectos), Opción C: 2 lotes de 80 (si bandeja lo permite) = 160 total (menos cambios de horno, más eficiente). Sistema no optimiza automáticamente (futuro roadmap), tú decides basándote en experiencia."
|
||||
},
|
||||
{
|
||||
"tip": "Equipment Utilization Optimization",
|
||||
"description": "Objetivo: 70-85% utilization (no 100%, necesitas slack para urgencias). Estrategias: Agrupar productos compatibles (misma temperatura): Baguettes 230°C + Pan Rústico 230°C consecutivos (sin cambio configuración), Evitar alternar caliente-frío-caliente: Pan 230°C → Croissant 180°C → Pan 230°C (desperdicia energía calentando/enfriando), Usar hornos secundarios para productos menores: Horno principal para pan (alto volumen), horno secundario para especiales/pruebas, Mantenimiento preventivo en low-demand days: Si martes históricamente -20% ventas, programa limpieza profunda de equipos ese día."
|
||||
},
|
||||
{
|
||||
"tip": "Buffer Management",
|
||||
"description": "El sistema NO calcula buffer matemático 5-10% automáticamente (por diseño, te da control). Debes aplicar buffer manualmente: En batch creation, ajusta planned_quantity = predicted_demand × 1.05 (5% buffer) o × 1.10 (10%). Cuándo usar buffer alto (10%): Productos con alta variabilidad de yield (pastelería delicada), Días de alta incertidumbre (festivos, clima extremo), Productos con largo lead time de reposición (si se rompe stock, no hay tiempo de hacer más). Cuándo usar buffer bajo (5% o 0%): Productos muy perecederos (mejor quedarse corto que tirar mucho), Productos con yield muy estable (pan básico, >95% yield), Días con forecast alta confidence (>90%). Tracking: Dashboard → Production → Yield Performance muestra tu yield real promedio. Si sistemáticamente produces 102% (2% más de lo planificado), puedes reducir buffer."
|
||||
},
|
||||
{
|
||||
"tip": "Process Stage Duration Optimization",
|
||||
"description": "Recetas definen duración por etapa, pero hay optimización posible: PROOFING: Varía con temperatura ambiente. Verano (25°C): -15% tiempo, Invierno (15°C): +20% tiempo. Sistema no ajusta automáticamente, pero puedes: Crear recipe_variants (recipe_summer, recipe_winter), Ajustar planned_duration_minutes manualmente en batch al crearlo. COOLING: Acortar usando racks de enfriamiento forzado, Permite pasar a PACKAGING más rápido, Aumenta throughput. BAKING: No acortar (afecta calidad), pero puedes: Optimizar carga del horno (llenar todas las bandejas disponibles), Usar funciones avanzadas de horno (convección, vapor) para cocción más uniforme y rápida."
|
||||
}
|
||||
],
|
||||
"troubleshooting": [
|
||||
{
|
||||
"problem": "Batches sistemáticamente delayed (>30 min retraso)",
|
||||
"solutions": [
|
||||
"Revisa planned_duration_minutes en recetas: ¿es realista? Compara con actual_duration_minutes histórico (Dashboard → Production → Batch History)",
|
||||
"Identifica cuellos de botella: ¿siempre se atrasa en misma etapa? (ej: PROOFING tarda más de lo planificado → ajusta tiempo en receta)",
|
||||
"Verifica capacity: ¿hay conflictos de equipos? (2 batches usando mismo horno simultáneamente → sistema alertará pero no bloqueará)",
|
||||
"Considera añadir personal/equipos: Si utilization consistentemente >90%, necesitas más capacidad física",
|
||||
"Reordena batches: Productos urgentes (rush_order) deben ir primero en schedule"
|
||||
]
|
||||
},
|
||||
{
|
||||
"problem": "Yield bajo (<90%, mucho waste o defects)",
|
||||
"solutions": [
|
||||
"Analiza defect_type en Dashboard → Waste Tracker: Si burnt/overcooked: Calibrar temperatura de horno (puede estar descalibrado +10-15°C), Si underproofed: Aumentar tiempo de PROOFING en receta, verificar temperatura ambiente, Si misshapen: Revisar SHAPING stage, capacitar equipo, mejorar técnica",
|
||||
"Revisa quality checks históricos: ¿en qué stage fallan más? Identifica etapa problemática",
|
||||
"Compara yield entre diferentes hornos/equipos: Si Horno 1 yield 95% vs Horno 2 yield 85% → problema de equipo, no de proceso",
|
||||
"Ingredientes: Verifica calidad de ingredientes (harina vieja, levadura débil → bajo yield)",
|
||||
"Sobrecarga de operador: ¿personal manejando demasiados batches simultáneos? → Reduce batches concurrentes"
|
||||
]
|
||||
},
|
||||
{
|
||||
"problem": "Ingredientes insuficientes para producción planificada",
|
||||
"solutions": [
|
||||
"Alert ingredient_shortage aparece al generar schedule. Opciones: Ajustar planned_quantity de batches a lo disponible (sistema sugiere max_producible con stock actual), Postponer batches no-urgentes (LOW priority) para mañana, Crear orden de compra urgente (Dashboard → Procurement → Create Order) y poner batches ON_HOLD hasta recibir ingredientes",
|
||||
"Prevención: Configura reorder_point en inventario para cada ingrediente crítico. Fórmula: reorder_point = (consumo_diario_promedio × supplier_lead_time_days) × 1.2 (20% margen). Ejemplo: Harina consume 50 kg/día, proveedor entrega en 2 días → reorder_point = 50×2×1.2 = 120 kg. Alert cuando stock < 120 kg",
|
||||
"Usa Production → Ingredient Requirements report: Proyección de consumo próximos 7 días basada en batches planificados. Compara con inventory actual → identifica faltantes antes de que ocurran"
|
||||
]
|
||||
}
|
||||
],
|
||||
"advancedFeatures": [
|
||||
{
|
||||
"feature": "Multi-Shift Planning",
|
||||
"description": "Si operas múltiples turnos (mañana/tarde/noche), crea ProductionSchedule separado por shift: Shift Mañana: 06:00-14:00 (pan fresco para desayuno/almuerzo), Shift Tarde: 14:00-22:00 (reposición + bollería para día siguiente), Shift Noche: 22:00-06:00 (pre-producción, fermentaciones largas). Cada schedule tiene su capacity_utilization y staff_assigned independiente. Beneficios: Claridad de qué equipo hace qué, Optimización de personal (chef experto en turno crítico), Planificación de mantenimiento (limpiar equipos entre shifts)."
|
||||
},
|
||||
{
|
||||
"feature": "Batch Templates (Próximamente)",
|
||||
"description": "Roadmap: Crear templates de batches recurrentes. Ejemplo: Template 'Lunes Estándar' con 10 batches predefinidos (baguettes ×200, croissants ×80, etc.). Un click → crea todos los batches del template. Ahorra tiempo de configuración semanal."
|
||||
},
|
||||
{
|
||||
"feature": "Predictive Maintenance (Roadmap ML)",
|
||||
"description": "Futuro: ML analiza historical equipment performance. Predice: 'Horno 1 tiene 85% probabilidad de fallar en próximos 7 días basado en degradación de performance'. Alerta proactiva antes de fallo → programa mantenimiento preventivo → evita downtime en medio de producción."
|
||||
}
|
||||
],
|
||||
"tips": [
|
||||
"El buffer automático es 5-10% extra para absorber variabilidad. Ajustable en Configuración",
|
||||
"Si produces de más sistemáticamente, el sistema lo detecta y ajusta las recomendaciones",
|
||||
"Puedes bloquear horarios de horno para mantenimiento o productos especiales"
|
||||
]
|
||||
"CLAVE: Revisa el plan 30 min antes de iniciar producción cada día. Ajustes de último minuto son normales (clima, pedidos urgentes, staff ausente).",
|
||||
"Prioriza finalizar batches IN_PROGRESS antes de iniciar nuevos. Tener muchos batches parcialmente completados reduce eficiencia.",
|
||||
"Usa priority flags consistentemente: URGENT solo para verdaderas urgencias (rotura de stock inminente, pedido cliente con deadline hoy). Abusar de URGENT diluye su efecto.",
|
||||
"Quality checks son inversión, no overhead. Catch defectos en MIXING stage (coste: 5 min + ingredientes) vs descubrir en PACKAGING (coste: 2 horas + todos los ingredientes + energía de horneado).",
|
||||
"IoT integration paga su ROI en 6-12 meses típicamente: Ahorro de labor (no registrar manualmente), reducción de defectos (alertas tempranas), optimización energética (reportes consumo).",
|
||||
"Si produces <50 batches/semana: planificación manual es suficiente. Si produces >200 batches/semana: automatización es esencial para no perder tiempo en logística.",
|
||||
"El sistema aprende de tus ajustes: Si consistentemente editas planned_quantity al alza +10%, futuras generaciones automáticas aplicarán ese patrón."
|
||||
],
|
||||
"conclusion": "La planificación de producción automatizada es el puente entre predicciones (qué vender) y realidad operativa (qué hornear, cuándo, cómo). Invierte en: 1) Recetas precisas (tiempos, ingredientes, quality checks bien definidos), 2) Capacidad de equipos actualizada (actualiza si compras horno nuevo, aumentas turnos), 3) Tracking disciplinado (marcar estados de batches consistentemente, registrar quality checks sin fallar), 4) Análisis semanal de métricas (yield, on-time completion, defects) para mejora continua. Con estos 4 pilares, reducirás waste 30-50%, aumentarás throughput 20-35% (mismo personal/equipos producen más), mejorarás calidad consistente (less variability = happier customers)."
|
||||
}
|
||||
},
|
||||
"inventoryManagement": {
|
||||
|
||||
Reference in New Issue
Block a user