{
  "helpCenter": {
    "title": "¿Cómo Podemos Ayudarte Hoy?",
    "subtitle": "Centro de Ayuda",
    "searchPlaceholder": "Buscar en la ayuda... (ej: ¿cómo importo datos?)",
    "description": "Encuentra respuestas rápidas, guías completas y contacto directo con nuestro equipo",
    "categoriesTitle": "Explora por Categoría",
    "categoriesSubtitle": "Encuentra lo que necesitas más rápido",
    "faqTitle": "Preguntas Frecuentes",
    "faqResultsCount_one": "{count} respuesta",
    "faqResultsCount_other": "{count} respuestas",
    "faqFound": "encontradas",
    "noResultsTitle": "No encontramos resultados para",
    "noResultsAction": "Contacta con soporte",
    "contactTitle": "¿No Encuentras lo Que Buscas?",
    "contactSubtitle": "Nuestro equipo está aquí para ayudarte",
    "contactHours": "Horario de Atención"
  },
  "docs": {
    "title": "Guías Completas Para Dominar Panadería IA",
    "subtitle": "Documentación",
    "description": "Tutoriales paso a paso, mejores prácticas y trucos para aprovechar al máximo la plataforma",
    "getStarted": "Comenzar",
    "backToHelp": "Centro de Ayuda",
    "sectionsTitle": "Secciones",
    "videoTutorialsTitle": "Tutoriales en Vídeo",
    "videoTutorialsSubtitle": "Aprende viendo (próximamente)",
    "additionalResourcesTitle": "Recursos Adicionales",
    "ctaTitle": "¿Listo Para Empezar?",
    "ctaSubtitle": "Regístrate en el programa piloto y obtén 3 meses gratis",
    "ctaButton": "Crear Cuenta Gratis",
    "articlesCount": "artículos",
    "readTime": "min",
    "quickLinks": "Enlaces Rápidos",
    "downloadPdf": "Descargar PDF",
    "contactSupport": "Contactar Soporte",
    "glossary": "Glosario de Términos",
    "troubleshooting": "Solución de Problemas",
    "bestPractices": "Mejores Prácticas"
  },
  "difficulty": {
    "beginner": "Principiante",
    "intermediate": "Intermedio",
    "advanced": "Avanzado"
  },
  "categories": {
    "gettingStarted": {
      "title": "Primeros Pasos",
      "description": "Configura tu cuenta y aprende los conceptos básicos"
    },
    "features": {
      "title": "Funcionalidades",
      "description": "Guías completas sobre todas las características"
    },
    "analytics": {
      "title": "Análisis y Predicciones",
      "description": "Interpreta datos e insights de IA"
    },
    "account": {
      "title": "Gestión de Cuenta",
      "description": "Administra tu perfil, equipo y configuración"
    },
    "billing": {
      "title": "Facturación y Planes",
      "description": "Información sobre precios, pagos y suscripciones"
    },
    "privacy": {
      "title": "Privacidad y Seguridad",
      "description": "RGPD, seguridad de datos y cumplimiento"
    }
  },
  "articles": {
    "gettingStarted": {
      "quickStart": {
        "title": "Guía de Inicio Rápido",
        "description": "Configura tu cuenta de BakeWise en 15-20 minutos con nuestro asistente guiado paso a paso",
        "readTime": "8",
        "content": {
          "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. 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. 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. 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. 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. 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": [
            "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": "Sube tu historial de ventas en Excel o CSV con validación automática y análisis IA",
        "readTime": "10",
        "content": {
          "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": [
            {
              "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."
            },
            {
              "format": "CSV (.csv)",
              "description": "Texto plano separado por comas. Exportable desde cualquier TPV o sistema de caja. Codificación UTF-8 recomendada."
            },
            {
              "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. 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. 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. 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. 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. 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: '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": "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": "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": "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 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"]
            },
            "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. 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. 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. 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": [
            "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": "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 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": [
            "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."
        }
      }
    },
    "features": {
      "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": "18",
        "content": {
          "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 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 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": "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": "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": "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": "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": "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": "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 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": "16",
        "content": {
          "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 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": "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": "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": "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. 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. 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 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 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": [
            "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": {
        "title": "Gestión de Inventario y Control de Stock",
        "description": "Control completo de ingredientes con FIFO, alertas de stock bajo y reducción de desperdicios",
        "readTime": "15",
        "content": {
          "intro": "El sistema de inventario gestiona TODOS tus materiales en una tabla unificada: ingredientes (harina, levadura, mantequilla) Y productos finales (baguettes, croissants). Incluye tracking de lotes, FIFO automático, alertas inteligentes, trazabilidad completa HACCP, valoración de stock y auditoría. Todo integrado con producción, ventas y compras.",
          "unifiedModel": {
            "title": "Modelo de Inventario Unificado",
            "description": "BakeWise usa UN SOLO catálogo para ingredientes y productos finales (no dos tablas separadas). Beneficios:",
            "benefits": [
              "Simplificación: Una sola UI para gestionar todo tu inventario (materias primas + productos terminados)",
              "Transformaciones: Puedes transformar ingredientes en productos (harina + agua → masa madre → baguette) dentro del mismo sistema",
              "Consistencia: Mismas reglas de stock, caducidad, FIFO aplican a todo",
              "Flexibilidad: Un ítem puede ser ingrediente para una receta y producto final vendible (ej: masa madre)"
            ],
            "structure": {
              "title": "Estructura de Datos",
              "fields": [
                {
                  "field": "product_type",
                  "values": "INGREDIENT (materia prima) o FINISHED_PRODUCT (producto final)",
                  "example": "Harina T-55 = INGREDIENT, Baguette = FINISHED_PRODUCT"
                },
                {
                  "field": "ingredient_category",
                  "values": "Para materias primas: FLOURS, DAIRY, YEAST, SUGARS, FATS, SALTS, ADDITIVES, PACKAGING, OTHER",
                  "example": "Harina T-55 → FLOURS, Mantequilla → DAIRY"
                },
                {
                  "field": "product_category",
                  "values": "Para productos finales: BREAD, PASTRIES, CAKES, SPECIALS, OTHER",
                  "example": "Baguette → BREAD, Croissant → PASTRIES"
                },
                {
                  "field": "unit_of_measure",
                  "values": "kg, g, L, ml, units (unidades), dozen (docena)",
                  "example": "Harina: kg, Baguettes: units, Leche: L"
                }
              ]
            }
          },
          "fifoImplementation": {
            "title": "Sistema FIFO (First-In-First-Out) Automático",
            "description": "El corazón del control de caducidades. FIFO garantiza que SIEMPRE se usan primero los lotes más antiguos (próximos a caducar).",
            "howItWorks": [
              {
                "step": "1. Almacenamiento por Lotes",
                "description": "Cada recepción de mercancía crea un Stock (lote) independiente con: batch_number (ej: INV-20260113-001), current_quantity (100 kg), expiration_date (2026-02-15), unit_cost (0.85€/kg), received_date (2026-01-13). Múltiples lotes del mismo ingrediente coexisten en el sistema con fechas de caducidad diferentes."
              },
              {
                "step": "2. Reserva FIFO Automática",
                "description": "Cuando producción necesita consumir ingrediente (ej: 50 kg de harina para 200 baguettes): Sistema ejecuta query SQL: SELECT * FROM stock WHERE ingredient_id = X AND is_available = true ORDER BY expiration_date ASC (más antiguo primero). Reserva lotes secuencialmente empezando por el que caduca antes. Ejemplo: Lote 1 (expira 2026-02-10): 30 kg disponibles → reserva 30 kg, Lote 2 (expira 2026-02-18): 70 kg disponibles → reserva 20 kg (restantes de los 50 kg necesarios). Total consumido: 30 kg del lote antiguo + 20 kg del siguiente lote."
              },
              {
                "step": "3. Consumo y Trazabilidad",
                "description": "El sistema consume stock reservado y registra: StockMovement con movement_type = PRODUCTION_USE, reference_number = BATCH-20260113-005 (batch de producción que consumió), consumed_items array con detalles de cada lote consumido (stock_id, quantity_consumed, batch_number, expiration_date). Progressive tracking: quantity_before, quantity_after por lote. Auditoría completa: quién, cuándo, por qué, desde qué lote."
              },
              {
                "step": "4. Actualización de Cantidades",
                "description": "Para cada lote consumido: current_quantity -= consumed_qty, reserved_quantity -= consumed_qty (libera reserva), available_quantity = current_quantity - reserved_quantity, Si current_quantity = 0 → is_available = false (lote agotado, pero mantiene historial). Sistema nunca borra stocks consumidos (trazabilidad HACCP)."
              }
            ],
            "lifoOption": {
              "title": "LIFO Opcional (Last-In-First-Out)",
              "description": "En casos especiales puedes usar LIFO (último en entrar, primero en salir): POST /consume-stock?fifo=false. Casos de uso: Ingredientes no perecederos donde quieres rotar antiguo (usar nuevo primero para mantener antiguo como buffer), Productos congelados con shelf life muy largo (años). Por defecto: FIFO=true (99% de los casos en panadería)."
            },
            "stateBasedExpiration": {
              "title": "Fechas de Caducidad State-Dependent",
              "description": "Innovación clave: productos transformados tienen DOS fechas de caducidad. Original: expiration_date (fecha del ingrediente base, ej: masa par-baked caduca 2026-03-01), Transformada: final_expiration_date (fecha del producto final tras horneado, ej: masa fully-baked caduca 2026-01-18). Sistema usa final_expiration_date si existe, sino expiration_date. Ejemplo real: Masa par-baked shelf life 45 días → Fully baked shelf life 3 días → FIFO usa fecha de 3 días para producto final."
            }
          },
          "features": [
            {
              "name": "Seguimiento en Tiempo Real con Múltiples Lotes",
              "description": "Visualización multi-lote en UI: Ingrediente: Harina T-55, Stock Total: 285 kg (suma de todos los lotes activos), Lote 1: 120 kg, expira 2026-02-10, Proveedor A, Lote 2: 95 kg, expira 2026-02-15, Proveedor A, Lote 3: 70 kg, expira 2026-02-20, Proveedor B. Color-coded por urgencia de caducidad: Rojo (expira hoy/mañana), Naranja (2-7 días), Amarillo (8-30 días), Verde (>30 días). Actualización automática: Tras producción batch completado → stock descuenta instantáneamente (WebSocket notify opcional), Tras recepción de mercancía → stock aumenta. Endpoint: GET /api/v1/tenants/{tenant_id}/inventory/stock?ingredient_id={id} → devuelve array de lotes con detalles completos."
            },
            {
              "name": "Alertas de Stock Bajo Multi-Nivel",
              "description": "Sistema de alertas con 2 umbrales configurables por ingrediente: Umbral 1: low_stock_threshold (alerta preventiva, ej: 80 kg). Genera alerta severity='medium', alert_type='low_stock', Acción sugerida: 'Revisar consumo, considerar pedido'. Umbral 2: reorder_point (alerta crítica, ej: 50 kg). Genera alerta severity='high', alert_type='reorder_needed', Acción sugerida: 'HACER PEDIDO URGENTE', Incluye: suggested_order_quantity (cantidad estándar de pedido), supplier_lead_time_days (tiempo de entrega del proveedor), hours_until_stockout (cuántas horas quedan al ritmo actual de consumo). Cálculo inteligente: Sistema analiza consumo últimos 7 días → daily_usage = avg(consumo_diario), days_of_stock = current_stock / daily_usage. Priorización: Alertas ordenadas por hours_until_stockout ASC (primero el más urgente). Notificaciones: Dashboard badge rojo con número de alertas críticas, Email/WhatsApp (si configurado) para alertas CRITICAL, Recomendación de orden de compra auto-generada. Endpoint: GET /api/v1/tenants/{tenant_id}/inventory/stock/low-stock → devuelve array de ingredientes críticos."
            },
            {
              "name": "Gestión Avanzada de Caducidades",
              "description": "Sistema multi-stage de alertas de caducidad: CRÍTICO (1-2 días antes): severity='critical', alert_type='urgent_expiry', Acción: 'Usar HOY o marcar como waste', Notificación inmediata. ALTO (3-7 días antes): severity='high', alert_type='expiring_soon', Acción: 'Priorizar uso en producciones', Dashboard alert. MEDIO (8-14 días antes): severity='medium', alert_type='expiring_warning', Acción: 'Planificar consumo', Solo en reportes. Configuración flexible: days_ahead parameter (default: 7, range: 1-365), Personalizable por ingrediente si necesario. Endpoint: GET /api/v1/tenants/{tenant_id}/inventory/stock/expiring?days_ahead=7. Gestión de expirados: Scheduler automático ejecuta diariamente (3 AM): Marca stocks con expiration_date < today como quality_status='expired', Cambia is_available=false (bloquea consumo), Crea alerta inventory.expired_products con lista completa, Genera reporte de waste por caducidad (kg + €). Workflow de waste: Operador revisa expirados en Dashboard → Waste Tracker, Confirma waste → Crea StockMovement type='WASTE' con waste_reason='expired', Stock movido a historial, Métrica de waste actualizada."
            },
            {
              "name": "Batch/Lot Management Completo",
              "description": "Cada lote (Stock) rastrea: Identificación: batch_number (ej: INV-20260113-001, auto-generado), lot_number (número de lote del proveedor, ej: LOT-2026-A123), supplier_batch_ref (referencia interna del proveedor). Fechas: received_date (cuándo llegó), expiration_date (caducidad original), best_before_date (consumir preferentemente antes de), original_expiration_date (fecha pre-transformación), transformation_date (cuándo se transformó, ej: par-baked → fully baked), final_expiration_date (caducidad post-transformación). Calidad: quality_status (good, damaged, expired, quarantined), Si 'quarantined' → bloqueado para uso hasta inspección/aprobación manager. Almacenaje: storage_location (zona de almacén, estante, ej: 'Zona Fría A, Estante 3'), requires_refrigeration (boolean), requires_freezing (boolean), storage_temperature_min/max (ej: 2-8°C para lácteos), storage_humidity_max (ej: 60% para harinas), shelf_life_days (vida útil en días desde received_date). Costos: unit_cost (€/unidad de medida), total_cost (unit_cost × current_quantity), Actualizado automáticamente al consumir stock. UI BatchModal: Lista de todos los lotes de un ingrediente, Cards colapsables (por UX, empiezan collapsed), Acciones por lote: Edit (cantidad, fecha caducidad, ubicación, calidad), Mark as Waste (convierte a WASTE movement), Delete (admin only, soft delete). Endpoint: GET /api/v1/tenants/{tenant_id}/inventory/stock?ingredient_id={id}."
            },
            {
              "name": "Transformaciones de Productos (Production Stages)",
              "description": "Sistema soporta transformar ingredientes a través de etapas de producción: Etapas disponibles: raw_ingredient (comprado del proveedor), prepared_dough (masa preparada pero no horneada), par_baked (pre-horneado), fully_baked (horneado completo), frozen_product (congelado intermedio). Workflow de transformación: Endpoint: POST /api/v1/tenants/{tenant_id}/inventory/transformations, Body: source_ingredient_id (ej: masa par-baked), target_ingredient_id (ej: baguette fully baked), source_quantity (100 unidades par-baked), target_quantity (90 unidades fully baked, 10% loss por merma), expiration_calculation_method: 'days_from_transformation', expiration_days_offset: 3 (baguette fully baked dura 3 días desde horneado). Sistema ejecuta: 1) Reserva source stock usando FIFO, 2) Consume source (crea PRODUCTION_USE movement), 3) Crea nuevo Stock para target con: current_quantity = 90, production_stage = fully_baked, original_expiration_date = fecha del lote par-baked, transformation_date = now(), final_expiration_date = now() + 3 días, 4) Registra Transformation record para trazabilidad. Beneficios: Trazabilidad completa de lote source → target, FIFO usa fecha correcta (3 días final, no 45 días original), Contabilidad precisa de mermas/loss en transformación, Auditoría HACCP (qué lote par-baked generó qué baguettes)."
            }
          ],
          "stockOperations": {
            "title": "Operaciones de Stock (Entradas, Salidas, Ajustes)",
            "movements": [
              {
                "type": "PURCHASE (Entrada por Compra)",
                "description": "Cuando recibes mercancía del proveedor: POST /api/v1/tenants/{tenant_id}/inventory/stock, Body: ingredient_id, current_quantity (ej: 150 kg), unit_cost (ej: 0.85€/kg), expiration_date (opcional, requerido para perecederos), batch_number (auto-generado si no se provee), supplier_id (opcional), production_stage (default: raw_ingredient), quality_status (default: good), storage_location, storage_temperature_min/max (para refrigerados), notes. Sistema ejecuta: Crea Stock record, Genera batch_number único (formato: INV-YYYYMMDD-NNN), Calcula total_cost = current_quantity × unit_cost, Crea StockMovement type='PURCHASE', movement_type='IN', Actualiza weighted_average_cost del ingrediente: WAC_nuevo = (qty_anterior × WAC_anterior + qty_nueva × cost_nuevo) / (qty_anterior + qty_nueva), Actualiza last_purchase_price, Actualiza total stock available. Tiempo: <200ms. UI: AddStockModal con campos dinámicos según tipo de ingrediente."
              },
              {
                "type": "PRODUCTION_USE (Salida por Producción)",
                "description": "Consumo automático cuando batch de producción se completa: Trigger: ProductionBatch status = COMPLETED, Sistema llama: POST /consume-stock?ingredient_id={id}&quantity=50&reference_number=BATCH-001&fifo=true. Sistema ejecuta: Reserva stock usando FIFO (query ORDER BY expiration_date ASC), Consume secuencialmente de lotes más antiguos, Crea StockMovement por cada lote consumido con: movement_type = PRODUCTION_USE, reference_number = BATCH-20260113-005, quantity_before/after por lote (progressive tracking), batch_info (de qué lotes se consumió, cuánto de cada uno), Devuelve: total_quantity_consumed, consumed_items array [{stock_id, quantity_consumed, batch_number, expiration_date}]. Ejemplo response: {'total_quantity_consumed': 50, 'consumed_items': [{'stock_id': '...', 'quantity_consumed': 30, 'batch_number': 'INV-001', 'expiration_date': '2026-02-10'}, {'stock_id': '...', 'quantity_consumed': 20, 'batch_number': 'INV-002', 'expiration_date': '2026-02-15'}]}. Trazabilidad completa: sabes exactamente qué batch de producción consumió qué lotes de ingredientes."
              },
              {
                "type": "WASTE (Salida por Desperdicio)",
                "description": "Registro de merma, caducidad, daño: UI: BatchModal → Select lote → 'Mark as Waste', Modal aparece: waste_quantity (cuánto se desperdicia, puede ser parcial o total del lote), waste_reason (expired, damaged, contaminated, overproduction, quality_issue, other), notes (descripción libre). POST /api/v1/tenants/{tenant_id}/inventory/stock/movements, Body: movement_type='WASTE', stock_id, quantity, waste_reason, notes. Sistema: Descuenta cantidad del lote, Crea StockMovement type='WASTE', Actualiza métricas de waste (kg, €, % del total), Si quantity = total del lote → is_available=false. Reportes: Dashboard → Waste Tracker → waste_by_reason (expired 60%, damaged 25%, overproduction 15%), waste_trend (últimos 30 días), waste_cost (€ perdidos). Objetivo típico: <5% waste rate (waste/total_purchases)."
              },
              {
                "type": "TRANSFER (Transferencia entre Ubicaciones)",
                "description": "Para multi-tenant (obrador + sucursales) o multi-location (almacén → producción): POST /api/v1/tenants/{tenant_id}/inventory/stock/movements, Body: movement_type='TRANSFER', stock_id, quantity, from_location (ej: 'Almacén Central'), to_location (ej: 'Sucursal Centro'), reference_number (ej: TRANSFER-001), notes. Sistema: Descuenta cantidad de from_location stock, Crea nuevo Stock en to_location con misma info (batch_number, expiration_date, unit_cost copiados), Crea 2 StockMovements: OUT en from_location, IN en to_location, Mantiene trazabilidad (mismo batch_number en ambas ubicaciones). Caso de uso: Obrador produce pan → transfiere a 3 sucursales para venta."
              },
              {
                "type": "ADJUSTMENT (Ajuste Manual)",
                "description": "Correcciones por inventario físico, errores de registro, pérdida no identificada: PUT /api/v1/tenants/{tenant_id}/inventory/stock/{stock_id}, Body: current_quantity (nueva cantidad real tras inventario físico), adjustment_reason (physical_inventory, data_error, loss_unidentified, found_extra), notes (explicación). Sistema: Calcula difference = new_quantity - old_quantity, Crea StockMovement type='ADJUSTMENT', movement_type='IN' si difference > 0, 'OUT' si < 0, quantity = abs(difference), Registra quantity_before, quantity_after, user_id (quién hizo ajuste), created_at (timestamp). Auditoría: Todos los ajustes se revisan en Dashboard → Stock History → Filtrar por ADJUSTMENT. Alertas: Si ajuste > 10% del stock → genera alert para manager review (posible error o theft)."
              }
            ]
          },
          "inventoryValuation": {
            "title": "Valoración de Inventario y Contabilidad",
            "methods": [
              {
                "method": "Weighted Average Cost (WAC) - Método Principal",
                "description": "BakeWise usa WAC (Costo Promedio Ponderado) por defecto. Fórmula: WAC = (Stock_Actual × WAC_Actual + Compra_Nueva × Costo_Nuevo) / (Stock_Actual + Compra_Nueva). Ejemplo: Tienes 100 kg harina @ 0.80€/kg (WAC actual), Compras 50 kg @ 1.00€/kg (compra nueva), Cálculo: WAC_nuevo = (100×0.80 + 50×1.00) / (100+50) = (80 + 50) / 150 = 0.867€/kg. Nuevo stock: 150 kg @ 0.867€/kg. Ventajas WAC: Simple y justo (promedia fluctuaciones de precio), Cumple con normativa contable española (PGC-PYMES), Actualización automática en cada compra. Campos en Ingredient: average_cost (WAC actual, usado para valoración), last_purchase_price (último precio pagado, referencia), standard_cost (coste estándar/presupuestado, opcional para variance analysis)."
              },
              {
                "method": "FIFO Costing (Opcional para Reportes)",
                "description": "Aunque valoración usa WAC, puedes generar reportes con FIFO costing para análisis: Costo FIFO = suma de (qty_consumida_lote_i × unit_cost_lote_i) por orden de consumo FIFO. Útil para: Comparar cost_real vs cost_standard, Identificar impacto de variaciones de precio proveedor, Auditorías que requieren método FIFO. Endpoint: GET /api/v1/tenants/{tenant_id}/inventory/analytics?valuation_method=FIFO (genera reporte con FIFO costing). No afecta contabilidad principal (WAC sigue siendo oficial)."
              }
            ],
            "metrics": [
              {
                "metric": "Valor Total de Inventario",
                "calculation": "Σ(current_quantity × average_cost) para todos los stocks activos (is_available=true)",
                "dashboard": "Dashboard → Inventory Summary → Total Stock Value: 12,450€"
              },
              {
                "metric": "Rotación de Inventario (Inventory Turnover)",
                "calculation": "Turnover = Cost_of_Goods_Sold (COGS) / Average_Inventory_Value. Ejemplo: COGS últimos 12 meses: 120,000€, Inventory promedio: 15,000€, Turnover = 120,000 / 15,000 = 8× al año (renuevas inventario 8 veces/año). Benchmark panadería: 12-20× (productos frescos rotan rápido)",
                "dashboard": "Dashboard → Analytics → Inventory Turnover: 8.2× (últimos 12 meses)"
              },
              {
                "metric": "Days of Inventory on Hand (DOH)",
                "calculation": "DOH = 365 / Turnover. Ejemplo: Turnover 8× → DOH = 365/8 = 45.6 días promedio. Interpretación: En promedio, un ingrediente permanece en inventario 45 días antes de usarse. Objetivo panadería: 15-30 días (frescos), 30-60 días (secos/no perecederos)",
                "dashboard": "Dashboard → Analytics → Days of Inventory: 45.6 días"
              },
              {
                "metric": "Waste Rate (Tasa de Desperdicio)",
                "calculation": "Waste_Rate = (Total_Waste_kg / Total_Purchases_kg) × 100. Ejemplo: Waste últimos 30 días: 50 kg, Purchases últimos 30 días: 1,200 kg, Waste_Rate = (50/1200) × 100 = 4.17%. Benchmark industria: <5% excelente, 5-10% aceptable, >10% problemático",
                "dashboard": "Dashboard → Waste Tracker → Waste Rate: 4.2% (último mes, -1.5% vs mes anterior)"
              },
              {
                "metric": "Waste Cost (Coste de Desperdicio)",
                "calculation": "Waste_Cost = Σ(waste_quantity × unit_cost) para todos WASTE movements. Incluye breakdown por waste_reason: expired: 120€ (60%), damaged: 50€ (25%), overproduction: 30€ (15%)",
                "dashboard": "Dashboard → Waste Tracker → Total Waste Cost: 200€ (último mes)"
              }
            ]
          },
          "complianceAndAudit": {
            "title": "Cumplimiento HACCP y Trazabilidad",
            "features": [
              {
                "feature": "Trazabilidad Forward & Backward",
                "description": "Forward Tracing (de ingrediente a producto final): Pregunta: '¿Dónde fue usado lote INV-001 de harina?' Query: SELECT * FROM stock_movements WHERE stock_id = INV-001 AND movement_type = PRODUCTION_USE. Resultado: Usado en BATCH-20260113-005 (200 baguettes), BATCH-20260113-012 (150 pan rústico). Conclusión: Si lote INV-001 tiene contaminación, sabes exactamente qué productos finales afectó. Backward Tracing (de producto final a ingredientes): Pregunta: '¿Qué lotes de ingredientes se usaron en BATCH-005?' Query: SELECT * FROM stock_movements WHERE reference_number = BATCH-005 AND movement_type = PRODUCTION_USE. Resultado: Harina lote INV-001 (30 kg), Harina lote INV-002 (20 kg), Levadura lote INV-015 (0.8 kg), Sal lote INV-020 (2 kg). Conclusión: Si cliente reporta problema con BATCH-005, rastrear ingredientes exactos usados. Endpoint: GET /api/v1/tenants/{tenant_id}/inventory/stock/movements?stock_id={id} o ?reference_number={batch}. Tiempo de query: <100ms (indexes optimizados)."
              },
              {
                "feature": "Auditoría Completa de Movimientos",
                "description": "Cada StockMovement registra 15+ campos de auditoría: movement_type (PURCHASE, PRODUCTION_USE, WASTE, TRANSFER, ADJUSTMENT), stock_id (qué lote afectado), ingredient_id (qué ingrediente), tenant_id (multi-tenant isolation), user_id (quién ejecutó movimiento), quantity (cuánto movido), movement_date (timestamp preciso con timezone), reference_number (link a orden de compra, batch de producción, etc.), notes (comentarios libres), quantity_before (cantidad antes del movimiento), quantity_after (cantidad después), batch_number (trazabilidad de lote), expiration_date (fecha caducidad del lote afectado), cost_per_unit (valoración en momento del movimiento), total_cost (quantity × cost_per_unit). Export: GET /api/v1/tenants/{tenant_id}/inventory/stock/movements?export=true&format=excel → descarga Excel con TODOS los movimientos filtrados. Filters disponibles: date_range (ej: últimos 90 días para auditoría trimestral), ingredient_id, movement_type, user_id (movimientos de un operador específico). Uso: Auditorías internas/externas, Investigaciones de discrepancias, Análisis de consumo histórico, Compliance HACCP/ISO 22000."
              },
              {
                "feature": "Food Safety Alerts & Compliance",
                "description": "Sistema de alertas específicas de seguridad alimentaria: Temperature Breach: Si temperature_log fuera de rango (storage_temperature_min/max) por >30 min → alerta 'food_safety.temperature_breach'. Data: sensor_id, location (ej: 'Cámara Fría 1'), temperature_actual, temperature_target, duration_minutes, affected_stocks (qué lotes estaban en esa ubicación). Acción: Inspeccionar productos afectados, potencial quarantine. Expired in Cold Chain: Productos refrigerados expirados → severity='critical' (mayor riesgo que secos). Cross-Contamination Risk: Si lote marcado 'allergen:gluten' se mueve a location usada para 'allergen:none' → alerta. Quarantine Management: Lotes con quality_status='quarantined' bloqueados para producción hasta: Manager ejecuta quality inspection, Aprueba (cambia a 'good') o Rechaza (marca como WASTE). Compliance Reports: GET /api/v1/tenants/{tenant_id}/inventory/food-safety/compliance?period=monthly. Genera reporte con: Temperature breach incidents, Expired items timeline, Quarantine actions log, HACCP checklist compliance %. Exportable para auditorías sanitarias."
              },
              {
                "feature": "Batch Recall Simulation",
                "description": "Próximamente: herramienta de simulación de retirada de lote. Input: batch_number (ej: INV-001 contaminado). Sistema calcula automáticamente: Qué productos finales usaron ese lote (forward tracing), Cuántas unidades vendidas de esos productos (link con Sales), A qué clientes (si B2B con customer tracking), Sugerencias de recall notice, Coste estimado de la retirada. Output: Reporte detallado para gestión de crisis. Objetivo: Respuesta <1 hora en caso de alerta sanitaria (vs días manualmente)."
              }
            ]
          },
          "uiComponents": {
            "title": "Interfaz de Usuario (Frontend)",
            "components": [
              {
                "component": "InventoryPage.tsx",
                "path": "/dashboard/inventory",
                "description": "Página principal de inventario. Vista de tabla: Columnas: Nombre, Categoría, Stock Actual, Unidad, Status (Low Stock, Expiring, OK, Overstock, Expired), Acciones. Filtros: Por categoría (FLOURS, DAIRY, BREAD, PASTRIES, etc.), Por status (low_stock, expiring, expired, all), Búsqueda por nombre (real-time). Status badges: Color-coded (rojo=crítico, naranja=warning, verde=OK), Iconos (⚠️ low stock, ⏰ expiring, ❌ expired, 📦 overstock), Click en badge → detalle modal. Acciones rápidas: + Add Stock (abre AddStockModal), View Batches (abre BatchModal con lotes del ingrediente), View History (abre StockHistoryModal con movimientos), Edit Ingredient (editar nombre, categoría, umbrales). Performance: Paginación 50 items/página, Lazy loading, Cache 2 min (staleTime: 120s). Endpoint: GET /api/v1/tenants/{tenant_id}/inventory/ingredients con stock aggregation."
              },
              {
                "component": "AddStockModal.tsx",
                "description": "Modal para añadir entrada de stock (compra, recepción). Form sections: Ingredient Selection: Dropdown con todos los ingredientes, Autocomplete con búsqueda, Muestra average_cost actual del ingrediente. Quantity & Cost: current_quantity (required, number), unit_cost (opcional, default a average_cost del ingrediente), total_cost (auto-calculado = qty × cost, read-only). Batch Information: batch_number (auto-generado formato INV-YYYYMMDD-NNN, editable), lot_number (número lote proveedor, opcional), supplier_id (dropdown de proveedores, opcional). Expiration & Storage: expiration_date (date picker, requerido si ingrediente es perecedero), best_before_date (opcional), production_stage (raw_ingredient default), quality_status (good default, opciones: good, damaged, quarantined), storage_location (text, ej: 'Almacén A, Estante 2'), requires_refrigeration (checkbox, auto-checked si ingrediente requiere), storage_temperature_min/max (si refrigerado, ej: 2-8°C). Notes: Textarea libre para observaciones. Validations: Quantity > 0, Unit cost >= 0, Expiration date > today (warning si no, permite override), Storage temp dentro de rango aceptable para ingrediente. Submit → POST /api/v1/tenants/{tenant_id}/inventory/stock → Success: Modal cierra, Lista se refresca, Toast notification 'Stock añadido: 150 kg Harina T-55'."
              },
              {
                "component": "BatchModal.tsx",
                "description": "Modal para gestionar lotes de un ingrediente. Layout: Header: Ingrediente: Harina T-55, Stock Total: 285 kg (suma de lotes), Botón 'Add New Batch'. Batch Cards: Array de cards, uno por lote, Collapsible (collapsed por default para UX limpia), Expand al click. Batch Card Content: Batch Number: INV-20260113-001 (bold), Quantity: 120 kg / 150 kg original (current / initial), Expiration: 2026-02-15 (32 días restantes) → color-coded, Supplier: Harinera La Espiga, Cost: 0.85€/kg (102€ total), Quality: good ✓ (badge verde), Location: Almacén A, Estante 2, Storage: Refrigeration not required (icon + text). Actions por batch: Edit: Abre EditBatchModal (cambiar quantity, expiration, location, quality), Mark as Waste: Abre WasteModal (ingresar waste_quantity, waste_reason), Delete: Admin only, confirmación modal, soft delete. Color coding expiration: Rojo: Expired o expira hoy/mañana, Naranja: 2-7 días, Amarillo: 8-30 días, Gris: >30 días. Sorting: Por expiration_date ASC (más urgente primero, FIFO order). Endpoint: GET /api/v1/tenants/{tenant_id}/inventory/stock?ingredient_id={id}."
              },
              {
                "component": "StockHistoryModal.tsx",
                "description": "Modal de historial de movimientos. Filters: Date range picker (default: últimos 30 días), Movement type multi-select (PURCHASE, PRODUCTION_USE, WASTE, TRANSFER, ADJUSTMENT, ALL), User filter (dropdown de usuarios, opcional). Table Columns: Date (timestamp), Type (badge color-coded: PURCHASE=green, PRODUCTION_USE=blue, WASTE=red, TRANSFER=orange, ADJUSTMENT=yellow), Quantity (con + o - prefix según IN/OUT), Batch Number, Reference (link a PO, production batch, etc.), User (quién ejecutó), Notes. Pagination: 20 movimientos/página. Export: Botón 'Export to Excel' → descarga historial filtrado. Drill-down: Click en Reference Number (ej: BATCH-005) → navega a batch detail page, Click en Batch Number (ej: INV-001) → abre BatchModal con ese lote específico. Endpoint: GET /api/v1/tenants/{tenant_id}/inventory/stock/movements?ingredient_id={id}&start_date=X&end_date=Y&movement_type=Z"
              },
              {
                "component": "WasteTrackerWidget.tsx",
                "path": "/dashboard (widget)",
                "description": "Widget de dashboard para monitorear desperdicio. Métricas principales: Total Waste (último mes): 50 kg, 200€, Waste Rate: 4.2% (verde si <5%, amarillo 5-10%, rojo >10%), Trend: ↓ -1.5% vs mes anterior (verde). Breakdown por waste_reason: Chart de dona (pie chart) con: Expired: 60% (30 kg), Damaged: 25% (12.5 kg), Overproduction: 10% (5 kg), Other: 5% (2.5 kg). Top 3 wasted ingredients: Harina T-55: 15 kg (30€), Mantequilla: 8 kg (80€, más costoso aunque menos kg), Leche: 12 L (18€). Actions: Click en ingredient → abre detail modal con waste history, Link 'See Full Report' → navega a /analytics/waste. Actualización: Polling cada 5 min (o WebSocket si disponible). Endpoint: GET /api/v1/tenants/{tenant_id}/inventory/analytics/waste?period=30d"
              }
            ]
          },
          "integrationPoints": {
            "title": "Integraciones con Otros Módulos",
            "integrations": [
              {
                "module": "Production Service",
                "description": "Bidireccional: Production → Inventory (consumo automático): Cuando ProductionBatch status = COMPLETED, Production Service llama InventoryClient.consume_stock(ingredient_ids, quantities, reference=batch_id, fifo=true), Inventory descuenta stock usando FIFO, devuelve consumed_items detail, Production registra qué lotes se usaron en batch metadata. Inventory → Production (alertas de disponibilidad): Antes de crear batch, Production consulta InventoryClient.check_availability(ingredient_requirements), Si algún ingrediente insuficiente → batch status = ON_HOLD, alerta al manager. Validation en tiempo real: UI de creación de batch muestra stock actual de ingredientes necesarios con color-coding (verde=OK, rojo=insuficiente)."
              },
              {
                "module": "Sales Service",
                "description": "Sales → Inventory (producto final sale): Cuando venta registrada, Sales puede decrementar stock de producto final (opcional, depende de configuración), Si enabled: SalesClient llama InventoryClient.consume_stock(product_id, quantity_sold, reference=sale_id), Útil para tracking de productos finales en inventario (no solo ingredientes). Inventory → Sales (datos para predicciones): Forecasting Service usa inventory levels para ajustar predicciones: Si stock alto de producto X → puede bajar producción sugerida, Si stock bajo → aumentar urgencia de producción."
              },
              {
                "module": "Procurement Service (Compras)",
                "description": "Inventory → Procurement (auto-generación de órdenes): Sistema detecta ingredient con stock < reorder_point, Genera PurchaseOrderSuggestion automática con: ingredient_id, suggested_quantity (= reorder_quantity configurado), supplier_id (proveedor principal del ingrediente), estimated_cost (= suggested_qty × last_purchase_price), urgency (= hours_until_stockout), Manager revisa sugerencias en Dashboard → Procurement → Suggested Orders, Click 'Create PO' → auto-llena formulario de orden de compra. Procurement → Inventory (recepción de mercancía): Cuando PurchaseOrder delivered, Procurement notifica Inventory, UI muestra 'Pending Receipt' para esa PO, Click → auto-llena AddStockModal con datos de la PO (ingredient, quantity, supplier, cost), Confirmar → crea stock entry linked a PO."
              },
              {
                "module": "Analytics Service",
                "description": "Inventory → Analytics (data streaming): Todos los movimientos de stock se publican como eventos a Analytics Service, Analytics agrega datos para: Consumo histórico por ingrediente (tendencias), Waste analytics (causas, costes, trends), Inventory turnover por categoría, Stock value fluctuations. Analytics → Inventory (recomendaciones): Analytics detecta patrones: 'Harina T-55: consumo aumentó 25% últimos 30 días → sugerir aumentar reorder_point de 50 kg a 65 kg', 'Mantequilla: waste por caducidad 15% último mes → sugerir reducir reorder_quantity o negociar compras más frecuentes con proveedor', Dashboard → Inventory → Optimization Recommendations muestra sugerencias AI-powered."
              }
            ]
          },
          "bestPractices": [
            {
              "practice": "Configurar Umbrales Realistas",
              "description": "Fórmula reorder_point: reorder_point = (daily_usage × supplier_lead_time_days) × safety_factor. Ejemplo: Harina T-55: daily_usage = 50 kg/día (promedio últimos 30 días), lead_time = 2 días (tu proveedor entrega en 2 días), safety_factor = 1.2 (20% buffer para variabilidad), reorder_point = 50 × 2 × 1.2 = 120 kg. Interpretación: Cuando stock baje de 120 kg, hacer pedido. Con consumo de 50 kg/día, tienes 2.4 días de stock (tiempo suficiente para recibir pedido en 2 días). Ajustar safety_factor: 1.1-1.2 (10-20%) para ingredientes estables y proveedores fiables, 1.3-1.5 (30-50%) para ingredientes volátiles o proveedores con lead time variable, 1.5-2.0 (50-100%) para ingredientes críticos sin sustituto."
            },
            {
              "practice": "Inventario Físico Regular",
              "description": "Frecuencia recomendada: Inventario completo: Trimestral (cada 3 meses) para todos los ingredientes, Inventario parcial (ABC analysis): Categoría A (alto valor, 20% ingredientes, 80% valor): Mensual, Categoría B (valor medio, 30% ingredientes, 15% valor): Bimestral, Categoría C (bajo valor, 50% ingredientes, 5% valor): Trimestral. Proceso: 1) Generar reporte de stock teórico: GET /inventory/stock/summary, 2) Contar físicamente (mejor fin de mes cuando stock es bajo), 3) Comparar stock_teorico vs stock_fisico, 4) Si discrepancia > 5%: Investigar (pérdida, theft, error de registro), Ajustar: PUT /stock/{id} con adjustment_reason='physical_inventory', 5) Analizar tendencias de discrepancias (si sistemáticas → problema de proceso). Beneficios: Detecta mermas ocultas (evaporación, derrames, robo), Corrige errores acumulados de registro, Mantiene confianza en datos del sistema, Cumple normativa contable (inventarios auditables)."
            },
            {
              "practice": "Rotación FIFO Disciplinada",
              "description": "Aunque sistema consume FIFO automáticamente en producción, el almacenaje físico debe facilitar FIFO: Organización de almacén: Lotes nuevos atrás, antiguos adelante (operadores toman de adelante naturalmente), Etiquetado claro: Fecha recepción + Fecha caducidad visible en todos los lotes, Zonas separadas por urgencia: Zona A (expira 0-7 días): Usar PRIMERO, prominente, Zona B (expira 8-30 días): Usar segundo, Zona C (>30 días): Stock de reserva. Auditoría física semanal: Revisar que lotes adelante son realmente los más antiguos (comparar etiquetas vs ubicación), Si encuentras lote antiguo atrás → mover a adelante. Capacitación personal: Entrenar equipo en FIFO importance, Consecuencias de no seguir FIFO (caducidades, waste, coste). Métricas de compliance: Waste_by_expiration: Si >60% del waste es por caducidad → posible problema de FIFO físico (vs otros waste reasons como damaged, overproduction)."
            },
            {
              "practice": "Monitoreo de Caducidades Proactivo",
              "description": "No esperar alertas del sistema, revisar proactivamente: Daily check (5 min cada mañana): Dashboard → Expiring Stock Widget → Items expiring next 3 days, Planificar uso inmediato (incluir en producción del día o día siguiente). Weekly review (15 min cada lunes): GET /stock/expiring?days_ahead=14 → items expiring próximas 2 semanas, Priorizar en plan de producción semanal, Considerar promociones (vender productos con ingredientes próximos a caducar a precio reducido para mover stock rápido). Monthly analysis (30 min fin de mes): Waste report → % waste por expired, Identificar ingredientes con alta tasa de caducidad (compras excesivas? shelf life corto?), Ajustar reorder_quantity o negociar compras más frecuentes/pequeñas con proveedor. Automation: Configurar notificaciones automáticas: Email diario con items expiring <3 days (criticales), Email semanal con items expiring <7 days (planificar)."
            },
            {
              "practice": "Optimización de Niveles de Stock",
              "description": "Revisar y ajustar trimestralmente: Analizar consumo real: GET /inventory/analytics?metric=consumption&period=90d → consumption_daily_avg por ingrediente, Comparar con reorder_point actual: Si consumo aumentó: Subir reorder_point (evitar roturas de stock), Si consumo bajó: Bajar reorder_point (reducir capital inmovilizado). Optimizar reorder_quantity: Economic Order Quantity (EOQ) formula: EOQ = √[(2 × annual_demand × order_cost) / holding_cost_per_unit], Ejemplo: Harina demand anual: 18,000 kg, Order cost (logística, admin): 25€/pedido, Holding cost (almacenaje, capital): 0.50€/kg/año, EOQ = √[(2×18000×25) / 0.50] = √1,800,000 = 1,342 kg por pedido. Balancear vs supplier constraints: Si EOQ sugiere 1,342 kg pero proveedor vende en sacos de 25 kg → redondear a 1,350 kg (54 sacos), Si proveedor ofrece descuento por volumen >2,000 kg → evaluar trade-off (ahorro compra vs coste almacenaje extra). Resultado: Minimize total cost = purchase cost + order cost + holding cost."
            }
          ],
          "troubleshooting": [
            {
              "problem": "Discrepancias persistentes entre stock teórico y físico",
              "solutions": [
                "Auditoría de movimientos: GET /stock/movements?ingredient_id=X&date_range=last_30d → revisar TODOS los movimientos, buscar: Movimientos sin reference_number (posibles errores manuales), Ajustes frecuentes del mismo user_id (posible error sistemático o fraude), Consumos que no matchean con production batches completados",
                "Verificar proceso de registro: ¿Personal registra TODAS las salidas (production, waste, transfers)?, ¿Hay consumos ad-hoc no registrados (chef toma ingredientes para pruebas)?, Implementar: Control de acceso físico a almacén (solo personal autorizado), Registro obligatorio de salidas (formulario, incluso para pequeñas cantidades)",
                "Investigar pérdidas naturales: Ingredientes con evaporación (líquidos en contenedores no herméticos), Merma por manipulación (bolsas rotas, derrames), Condensación/humedad (cambios de peso en harinas), Solución: Registrar allowance de merma normal (ej: 1-2% en harinas), Comparar discrepancia vs allowance",
                "Automatizar cuando sea posible: Si discrepancias en producción → integrar balanzas digitales con sistema (auto-registro de consumos), Si discrepancias en recepción → escaneo de códigos de barras al recibir (evita errores de entrada manual)"
              ]
            },
            {
              "problem": "Alertas de stock bajo muy frecuentes (rotura de stock continua)",
              "solutions": [
                "Recalcular reorder_point: Fórmula actual: reorder_point = daily_usage × lead_time × 1.2, Revisar daily_usage: GET /analytics?metric=consumption&period=30d → usar promedio más reciente (últimos 30 días, no 90+ días si consumo cambió), Revisar lead_time: ¿Proveedor entrega realmente en 2 días o suele tardar 3-4? Usar lead_time_real máximo observado, Aumentar safety_factor de 1.2 a 1.3-1.5 si: Proveedor poco fiable (retrasos frecuentes), Consumo muy variable (CV >0.5), Ingrediente crítico sin sustituto",
                "Optimizar reorder_quantity: Si haces pedidos pequeños → aumentar reorder_quantity para reducir frecuencia de pedidos, Negociar entregas más frecuentes con proveedor (semanal vs quincenal) → permite reducir reorder_point (menos stock de seguridad necesario)",
                "Automatizar pedidos: Configurar auto-purchase orders para ingredientes críticos estables, Cuando stock < reorder_point → sistema crea PO automáticamente, Proveedor recibe email con pedido, Confirma delivery date, Manager solo aprueba (no crea manualmente)",
                "Alertas tempranas: Configurar alert cuando stock = 1.5 × reorder_point (50% antes del punto crítico) → da más margen para actuar"
              ]
            },
            {
              "problem": "Waste alto por caducidades (>10% del total)",
              "solutions": [
                "Analizar causas raíz: GET /analytics/waste?waste_reason=expired&period=90d, Breakdown por ingrediente: ¿Pocos ingredientes causan mayoría del waste? (Pareto 80/20), Top offenders → investigar específicamente cada uno",
                "Soluciones por causa: Compras excesivas: Reducir reorder_quantity (comprar más frecuente, cantidades menores), Shelf life corto: Negociar con proveedor entregas más frecuentes (semanal vs quincenal), Productos de lento movimiento reducen frescura de rápidos, Consumo irregular (picos y valles): Usar forecasting para ajustar compras a demanda real, Evitar compras 'por si acaso' sin forecast que lo justifique, FIFO físico no respetado: Auditar almacén físico (lotes antiguos escondidos atrás?), Re-entrenar personal en FIFO importance",
                "Tácticas de reducción: Promociones pre-expiration: Productos que caducan en 3-5 días → vender con descuento (mejor margen reducido que waste 100%), Donar antes de caducar: Contactar bancos de alimentos (aceptan productos 1-2 días antes de expiration), Tax benefits + RSC + zero waste, Transformar productos: Ingredientes próximos a caducar → usar en productos con shelf life corto (pan del día, producción para consumo inmediato)",
                "Monitoreo continuo: Weekly waste review meeting (15 min), Meta: Reducir waste_rate 1% cada mes hasta alcanzar <5% objetivo"
              ]
            }
          ],
          "advancedFeatures": [
            {
              "feature": "AI-Powered Inventory Optimization (Roadmap)",
              "description": "Machine Learning analizará patrones históricos para: Predecir consumo futuro por ingrediente (más preciso que promedios simples), Recomendar ajustes dinámicos de reorder_point según estacionalidad (verano vs invierno, festivos), Detectar anomalías (consumo inusual → posible theft, error de registro, nuevo patrón de demanda), Sugerir consolidación de proveedores (ingredientes similares de proveedores diferentes → negociar mejor precio con uno solo)."
            },
            {
              "feature": "IoT Sensors Integration",
              "description": "Integración con sensores de almacén: Temperature & Humidity Sensors: Monitoreo 24/7 de cámaras frías, almacenes, Alertas automáticas si temperatura fuera de rango (food safety), Weight Sensors en estanterías: Tracking automático de stock level sin registro manual, Detección de discrepancias en tiempo real (stock_sensor vs stock_sistema), RFID Tags en lotes: Escaneo automático al mover lotes (recepción, uso, transferencia), Trazabilidad automática sin intervención humana. Status: En roadmap, pilotos con clientes enterprise."
            },
            {
              "feature": "Multi-Location Inventory (Enterprise)",
              "description": "Para empresas con obrador central + sucursales: Stock unificado a nivel tenant con location dimension, Transfers automáticos: Obrador produce → auto-transfer a sucursales según forecast por sucursal, Dashboard consolidado: Stock total cross-location, Stock por location (drill-down), Transfer optimization: Sistema sugiere qué sucursal necesita reposición urgente, cuánto transferir desde obrador/otras sucursales. Disponible en plan Enterprise."
            }
          ],
          "conclusion": "El sistema de inventario es la columna vertebral operativa de BakeWise. Invierte tiempo en: 1) Configuración inicial correcta (umbrales realistas de reorder_point basados en consumo real + lead time), 2) Disciplina de registro (TODAS las entradas y salidas, sin excepciones), 3) Inventario físico regular (trimestral mínimo, mensual ideal para ingredientes críticos), 4) Análisis continuo (revisar waste, discrepancias, niveles de stock semanalmente). Con inventario bien gestionado, lograrás: Waste <5% (vs 15-25% sin sistema), Roturas de stock <2% (vs 10-20% sin sistema), Capital inmovilizado -30% (stock óptimo, no excesivo ni insuficiente), Compliance HACCP 100% (trazabilidad completa para auditorías). El ROI típico del módulo de inventario es 300-500% en el primer año solo por reducción de waste."
        }
      },
      "posIntegration": {
        "title": "Punto de Venta (TPV) y Registro de Ventas",
        "description": "Registra ventas manualmente o sincroniza con tu TPV existente para predicciones más precisas",
        "readTime": "8",
        "content": {
          "intro": "El módulo POS te permite registrar ventas diarias, ya sea manualmente o integrando con tu TPV actual.",
          "manualEntry": {
            "title": "Registro Manual",
            "description": "Si no tienes TPV o prefieres control manual: Al final del día, introduce ventas por producto (ej: Baguette: 145 unidades, Croissant: 67 unidades). Opcionalmente precio total para tracking de ingresos. Tarda 2-3 minutos al día"
          },
          "integration": {
            "title": "Integración con TPV",
            "description": "Conecta tu TPV existente para sincronización automática. TPVs soportados: TPV genérico vía exportación Excel/CSV, API personalizada (contacta con soporte). Próximamente: integración directa con principales TPVs españoles"
          },
          "benefits": [
            {
              "benefit": "Predicciones Más Precisas",
              "description": "Cada venta registrada mejora las predicciones futuras. El sistema aprende patrones día a día"
            },
            {
              "benefit": "Análisis de Ventas",
              "description": "Ve tendencias de ventas: productos más/menos vendidos, ingresos diarios/semanales/mensuales, comparativas año anterior"
            },
            {
              "benefit": "Validación Automática",
              "description": "El sistema compara predicciones vs ventas reales cada noche. Si la precisión baja, ajusta modelos automáticamente"
            }
          ],
          "workflow": [
            {
              "step": "Registro de Venta",
              "description": "Manual o automático (TPV). Datos: producto, cantidad, fecha/hora, precio (opcional)"
            },
            {
              "step": "Validación Nocturna",
              "description": "5:30 AM: sistema compara predicción de ayer vs ventas reales. Calcula precisión (MAPE) por producto"
            },
            {
              "step": "Mejora Continua",
              "description": "Si MAPE > 30% en un producto por 7 días, sistema re-entrena modelo automáticamente"
            }
          ]
        }
      },
      "wasteTracking": {
        "title": "Seguimiento de Desperdicios y Sostenibilidad",
        "description": "Mide, analiza y reduce el desperdicio alimentario para cumplir objetivos de cero waste",
        "readTime": "7",
        "content": {
          "intro": "El seguimiento de desperdicios es clave para rentabilidad y sostenibilidad. El sistema mide exactamente qué se desperdicia, por qué, y sugiere acciones.",
          "types": [
            {
              "type": "Producción Excesiva",
              "description": "Productos que horneaste pero no vendiste. Se quedan al final del día. Causas: predicción muy alta, evento cancelado, mal tiempo inesperado"
            },
            {
              "type": "Ingredientes Caducados",
              "description": "Ingredientes que caducaron antes de usarse. Causas: compra excesiva, lote grande olvidado, FIFO no aplicado"
            },
            {
              "type": "Defectos de Calidad",
              "description": "Productos que no cumplen estándares y no se pueden vender. Causas: problemas en producción, equipo defectuoso"
            },
            {
              "type": "Merma de Producción",
              "description": "Diferencia entre ingredientes usados y producto final obtenido. Normal: 5-8%. Si es >10%, revisar proceso"
            }
          ],
          "tracking": [
            {
              "step": "1. Registro Diario",
              "description": "Al final del día, registra productos no vendidos. Sistema calcula costo de desperdicio automáticamente"
            },
            {
              "step": "2. Categorización",
              "description": "Indica razón: producción excesiva, defecto calidad, caducidad. Ayuda a identificar patrones"
            },
            {
              "step": "3. Análisis Mensual",
              "description": "Dashboard muestra: kg/€ desperdiados al mes, % del total producido, principales productos desperdiados, tendencias"
            }
          ],
          "reduction": [
            {
              "action": "Ajustar Predicciones",
              "description": "Si produces de más sistemáticamente, baja buffer de seguridad"
            },
            {
              "action": "Ofertas de Última Hora",
              "description": "Integra con apps tipo Too Good To Go para vender excedentes"
            },
            {
              "action": "Donaciones",
              "description": "Registra donaciones a bancos de alimentos (deducibles fiscalmente)"
            },
            {
              "action": "FIFO Estricto",
              "description": "Sistema asegura consumo de ingredientes antiguos primero"
            }
          ],
          "sustainability": {
            "title": "Objetivos de Sostenibilidad",
            "metrics": [
              "Reducción de desperdicio: objetivo 20-40% en 6 meses",
              "Certificación Zero Waste (posible con <5% desperdicio)",
              "Huella de carbono (calculada automáticamente)",
              "Cumplimiento ODS 12.3 (Objetivos de Desarrollo Sostenible ONU)"
            ]
          }
        }
      }
    },
    "analytics": {
      "dashboardOverview": {
        "title": "Panel de Control y KPIs Principales",
        "description": "Entiende todas las métricas clave del negocio de un vistazo en el dashboard principal",
        "readTime": "8",
        "content": {
          "intro": "El dashboard es tu centro de comando. En una sola pantalla ves el estado actual de tu panadería: ventas, producción, inventario, predicciones.",
          "sections": [
            {
              "section": "Resumen Hoy",
              "metrics": [
                "Predicción de ventas del día vs real (se actualiza en tiempo real)",
                "Producción planificada vs completada",
                "Ingresos del día (€)",
                "Alerta de ingredientes con stock bajo"
              ]
            },
            {
              "section": "Predicciones Próximos 7 Días",
              "metrics": [
                "Gráfico de demanda esperada",
                "Comparación vs semana pasada (%)",
                "Alertas de picos de demanda (festivos, eventos)",
                "Productos con mayor demanda prevista"
              ]
            },
            {
              "section": "Inventario",
              "metrics": [
                "Valor total de stock (€)",
                "Ingredientes en alerta (< punto de reorden)",
                "Ingredientes próximos a caducar (<7 días)",
                "Pedidos a proveedores pendientes"
              ]
            },
            {
              "section": "Rendimiento",
              "metrics": [
                "Precisión de predicciones últimos 7 días (MAPE %)",
                "Desperdicio del mes (kg y €)",
                "Margen de beneficio por producto",
                "Productos más/menos rentables"
              ]
            }
          ],
          "customization": "Puedes personalizar el dashboard: Añade/quita widgets, Cambia periodo de análisis (hoy, 7 días, 30 días), Filtra por producto o categoría, Exporta a PDF/Excel"
        }
      },
      "reports": {
        "title": "Informes y Reportes Personalizados",
        "description": "Genera informes detallados de ventas, producción, costos e inventario exportables a Excel/PDF",
        "readTime": "10",
        "content": {
          "intro": "Los informes te permiten analizar el negocio en profundidad y compartir datos con contables, inversores o equipo.",
          "types": [
            {
              "name": "Informe de Ventas",
              "description": "Análisis completo de ventas por periodo: Ventas totales (€ y unidades), Desglose por producto/categoría, Comparación vs periodo anterior (%), Top 10 productos más vendidos, Tendencias de ventas (crecimiento/caída)"
            },
            {
              "name": "Informe de Producción",
              "description": "Rendimiento de producción: Lotes producidos vs planificados, Yield real vs esperado (eficiencia), Tiempo de producción por lote, Defectos de calidad registrados, Utilización de equipos (%)"
            },
            {
              "name": "Informe de Inventario",
              "description": "Estado y movimientos de inventario: Valor de stock (€) por categoría, Rotación de inventario (veces/año), Movimientos de entrada/salida, Desperdicio por caducidad (kg y €), Compras vs consumo"
            },
            {
              "name": "Informe Financiero",
              "description": "Análisis de costos y márgenes: Costos de ingredientes por producto, Margen bruto por producto (%), Rentabilidad por categoría, Compras a proveedores (€), ROI de predicciones (ahorros vs desperdicio)"
            }
          ],
          "generation": [
            {
              "step": "1. Selecciona Tipo de Informe",
              "description": "Ve a Informes > Nuevo Informe. Elige tipo: Ventas, Producción, Inventario, Financiero"
            },
            {
              "step": "2. Configura Parámetros",
              "description": "Periodo (día, semana, mes, personalizado), Productos/categorías a incluir, Métricas específicas, Comparación (vs mes anterior, año anterior)"
            },
            {
              "step": "3. Vista Previa",
              "description": "El sistema genera vista previa en pantalla. Revisa que incluye lo que necesitas"
            },
            {
              "step": "4. Exporta",
              "description": "Descarga en Excel (.xlsx) para análisis avanzado, PDF para presentaciones/impresión, CSV para integración con contabilidad"
            }
          ],
          "automation": "Puedes programar informes automáticos: Frecuencia (diario, semanal, mensual), Envío por email automático, Destinatarios (tú, equipo, contable), Personaliza para cada destinatario"
        }
      },
      "aiInsights": {
        "title": "Insights de IA y Recomendaciones Automáticas",
        "description": "El sistema analiza tus datos y te da recomendaciones accionables para mejorar rentabilidad",
        "readTime": "12",
        "content": {
          "intro": "Los Insights de IA son recomendaciones automáticas que el sistema genera analizando tus datos. Van más allá de mostrar números: te dicen QUÉ hacer.",
          "categories": [
            {
              "category": "Optimización de Producción",
              "insights": [
                "Productos con sobreproducción sistemática: 'Reduces 15% baguettes, desperdicias 8% cada día'",
                "Oportunidades de producción: 'Podrías vender 20% más croissants los sábados, siempre te quedas sin stock'",
                "Eficiencia de lotes: 'Cambia lote de 40 a 50 tartas, mejoras eficiencia de horno 12%'",
                "Horarios óptimos: 'Hornea bollos a las 7 AM en vez de 6 AM, vendes más frescos'"
              ]
            },
            {
              "category": "Gestión de Inventario",
              "insights": [
                "Puntos de reorden: 'Harina: cambiar punto de reorden de 50kg a 75kg, evitas stockouts'",
                "Optimización de compras: 'Compra azúcar cada 15 días en vez de semanalmente, ahorras €40/mes en envíos'",
                "Cambio de proveedor: 'Proveedor B ofrece mantequilla 8% más barata con misma calidad'",
                "Stock muerto: 'Ingrediente X no usado en 60 días, considera eliminar del inventario'"
              ]
            },
            {
              "category": "Precios y Rentabilidad",
              "insights": [
                "Margen bajo: 'Croissant margen 22%, objetivo 35%. Sube precio €0.15 o reduce costo ingredientes'",
                "Precio óptimo: 'Podrías subir pan integral €0.20 sin afectar demanda (análisis de elasticidad)'",
                "Productos no rentables: 'Tarta de manzana margen negativo -5%, revisar receta o precio'",
                "Oportunidades de upselling: 'Clientes que compran café +80% compran croissant, sugiérelo activamente'"
              ]
            },
            {
              "category": "Reducción de Desperdicio",
              "insights": [
                "Patrones de desperdicio: 'Lunes desperdicias 15% más que otros días, ajusta predicción'",
                "Caducidades evitables: 'Levadura caduca cada mes, compra lotes más pequeños'",
                "Donaciones: 'Sobrante diario promedio: 12 unidades, suficiente para banco de alimentos (deducible)'",
                "Ofertas dinámicas: '2 horas antes de cerrar, baja precio 30% para vender excedentes'"
              ]
            }
          ],
          "howToUse": [
            {
              "step": "1. Revisa Insights Diarios",
              "description": "Cada mañana, el dashboard muestra 3-5 insights prioritarios. Ordenados por impacto económico (€/mes)"
            },
            {
              "step": "2. Marca como Implementado",
              "description": "Cuando actúas sobre un insight, márcalo. Sistema seguirá si funcionó y aprenderá"
            },
            {
              "step": "3. Mide Resultados",
              "description": "Después de 2-4 semanas, el sistema muestra impacto real: 'Insight: Reducir baguettes 10%. Resultado: desperdicio -25%, ventas -0%. Ahorro: €180/mes'"
            }
          ],
          "privacy": "Los insights son privados, solo tú los ves. Basados 100% en TUS datos, no en datos de otras panaderías."
        }
      },
      "performanceMetrics": {
        "title": "Métricas de Rendimiento y KPIs del Negocio",
        "description": "Indicadores clave de rendimiento para medir salud del negocio y tomar decisiones estratégicas",
        "readTime": "15",
        "content": {
          "intro": "Los KPIs (Key Performance Indicators) son métricas que miden la salud de tu negocio. El sistema calcula automáticamente los KPIs más importantes para panaderías.",
          "production": {
            "title": "KPIs de Producción",
            "metrics": [
              {
                "name": "Precisión de Predicción (MAPE)",
                "description": "Qué tan acertadas son las predicciones. Objetivo: <20% (80%+ precisión). Se muestra por producto y global",
                "formula": "MAPE = (|Real - Predicción| / Real) × 100%"
              },
              {
                "name": "Yield de Producción",
                "description": "Eficiencia de conversión ingredientes → producto final. Objetivo: >95%. Si <90%, revisar proceso",
                "formula": "Yield = (Producto Final / Ingredientes Usados) × 100%"
              },
              {
                "name": "Utilización de Capacidad",
                "description": "% de capacidad de horno/equipos usada. Objetivo: 75-85%. <60% infrautilizado, >90% cuello de botella",
                "formula": "Utilización = (Horas Usadas / Horas Disponibles) × 100%"
              },
              {
                "name": "Tiempo Medio de Producción",
                "description": "Tiempo promedio para completar un lote. Compara vs estándar de receta. Detecta ineficiencias",
                "formula": "Tiempo Medio = Σ(Tiempo por Lote) / Número de Lotes"
              }
            ]
          },
          "financial": {
            "title": "KPIs Financieros",
            "metrics": [
              {
                "name": "Margen Bruto",
                "description": "Rentabilidad después de costos de ingredientes. Objetivo: 60-70% para panadería artesanal",
                "formula": "Margen Bruto = ((Precio - Costo Ingredientes) / Precio) × 100%"
              },
              {
                "name": "Costo de Desperdicio",
                "description": "€ perdidos en productos/ingredientes desperdiados. Objetivo: <5% de ventas",
                "formula": "Costo Desperdicio = Σ(Unidades Desperdiadas × Costo Unitario)"
              },
              {
                "name": "Valor de Inventario",
                "description": "€ inmovilizados en stock. Objetivo: 7-15 días de ventas. >30 días = exceso de capital bloqueado",
                "formula": "Días de Inventario = (Valor Stock / Costo Ventas Diario)"
              },
              {
                "name": "ROI de Panadería IA",
                "description": "Retorno de inversión del sistema. Calcula ahorros vs costo de suscripción",
                "formula": "ROI = ((Ahorros Mensuales - €49) / €49) × 100%"
              }
            ]
          },
          "inventory": {
            "title": "KPIs de Inventario",
            "metrics": [
              {
                "name": "Rotación de Inventario",
                "description": "Cuántas veces renuevas stock al año. Objetivo: 12-24 (mensual/quincenal). >40 = poca eficiencia de compra",
                "formula": "Rotación = Costo Anual de Ventas / Valor Promedio de Inventario"
              },
              {
                "name": "Tasa de Caducidad",
                "description": "% de ingredientes que caducan antes de usarse. Objetivo: <2%",
                "formula": "Tasa Caducidad = (kg Caducados / kg Comprados) × 100%"
              },
              {
                "name": "Precisión de Inventario",
                "description": "Diferencia entre stock registrado vs físico. Objetivo: >98%",
                "formula": "Precisión = (1 - |Stock Físico - Stock Sistema| / Stock Físico) × 100%"
              }
            ]
          },
          "waste": {
            "title": "KPIs de Sostenibilidad",
            "metrics": [
              {
                "name": "Tasa de Desperdicio",
                "description": "% de producción que se desperdicia. Objetivo: <5%. Certificación Zero Waste: <3%",
                "formula": "Tasa Desperdicio = (Unidades Desperdiadas / Unidades Producidas) × 100%"
              },
              {
                "name": "Huella de Carbono",
                "description": "kg CO2 equivalente por kg de producto. El sistema calcula automáticamente según ingredientes y energía",
                "formula": "CO2 = Σ(kg Ingrediente × Factor Emisión) + Energía Usada × Factor"
              }
            ]
          },
          "howToTrack": "Dashboard > Métricas: Ve todos los KPIs actualizados en tiempo real. Configura alertas si un KPI sale de rango objetivo. Exporta histórico para ver evolución mensual"
        }
      }
    }
  },
  "faqs": [
    {
      "category": "general",
      "question": "¿Qué es Panadería IA y cómo funciona?",
      "answer": "Panadería IA es una plataforma de gestión inteligente para panaderías. Utiliza inteligencia artificial para predecir la demanda de tus productos, optimizar la producción, reducir desperdicios y aumentar la rentabilidad. Conectas tus datos de ventas históricas y el sistema aprende tus patrones para hacer predicciones precisas."
    },
    {
      "category": "general",
      "question": "¿Cuánto tiempo toma configurar el sistema?",
      "answer": "La configuración inicial toma entre 10-15 minutos. Necesitas: 1) Crear tu cuenta, 2) Subir tu catálogo de productos, 3) Importar historial de ventas (opcional pero recomendado), 4) Configurar preferencias básicas. El sistema empieza a generar predicciones desde el primer día, mejorando su precisión con el tiempo."
    },
    {
      "category": "general",
      "question": "¿Necesito conocimientos técnicos para usarlo?",
      "answer": "No. Panadería IA está diseñado para panaderos, no para ingenieros. La interfaz es intuitiva, con tutoriales paso a paso. Si sabes usar WhatsApp o un correo electrónico, puedes usar nuestra plataforma. Además, ofrecemos soporte 24/7 en español."
    },
    {
      "category": "general",
      "question": "¿Funciona para obradores centrales con múltiples puntos de venta?",
      "answer": "SÍ. Nuestro sistema está diseñado para adaptarse a ambos modelos: producción local (un solo punto) y obrador central con distribución a múltiples puntos de venta. Para obradores centrales, ofrecemos predicción de demanda agregada y granular por cada POS, gestión de distribución multi-ubicación, y un dashboard centralizado con visibilidad por punto de venta."
    },
    {
      "category": "pricing",
      "question": "¿Cuánto cuesta el programa piloto?",
      "answer": "El programa piloto es GRATIS durante los primeros 3 meses. Sin contratos de permanencia, cancela cuando quieras."
    },
    {
      "category": "pricing",
      "question": "¿Necesito tarjeta de crédito para empezar el piloto?",
      "answer": "SÍ, necesitas registrar una tarjeta, pero NO se te cobrará durante los 3 meses de prueba gratuita. Puedes cancelar antes de que termine el periodo gratuito sin ningún cargo."
    },
    {
      "category": "technical",
      "question": "¿Cómo importo mis datos históricos de ventas?",
      "answer": "Aceptamos varios formatos: Excel (.xlsx), CSV, o exportaciones directas de tu TPV si es compatible. Cuanto más historial proporciones (recomendamos mínimo 3 meses), más precisas serán las predicciones."
    },
    {
      "category": "technical",
      "question": "¿Qué pasa si mis predicciones no son precisas?",
      "answer": "El sistema mejora con el tiempo. Las primeras semanas puede tener un margen de error del 15-20%. Después del primer mes, esto baja al 10%. Con 3+ meses de datos, alcanzamos >90% de precisión. Puedes ajustar manualmente las predicciones y el sistema aprende de tus correcciones."
    },
    {
      "category": "privacy",
      "question": "¿Dónde se almacenan mis datos?",
      "answer": "TODOS tus datos se almacenan en servidores físicamente ubicados en España (Barcelona y Madrid), cumpliendo 100% con RGPD. Nunca compartimos, vendemos ni transferimos tus datos fuera de la UE."
    },
    {
      "category": "support",
      "question": "¿Qué tipo de soporte ofrecen?",
      "answer": "Soporte 24/7 en español por: Email (respuesta en <4h), Videollamada (con cita previa). Durante el piloto, también tienes acceso directo a los fundadores por WhatsApp."
    }
  ],
  "contact": {
    "email": {
      "title": "Email",
      "description": "Respuesta en menos de 4 horas",
      "action": "Enviar Email",
      "address": "soporte@panaderia-ia.com"
    },
    "documentation": {
      "title": "Documentación",
      "description": "Guías completas y tutoriales",
      "action": "Ver Docs"
    },
    "hours": {
      "email": "24/7 (respuesta en 4 horas en horario laboral)",
      "phone": "Lunes a Viernes 10:00 - 19:00 (solo clientes activos)"
    }
  },
  "resources": {
    "glossary": {
      "title": "Glosario de Términos",
      "description": "Definiciones de conceptos clave y terminología técnica",
      "action": "Ver Glosario"
    },
    "troubleshooting": {
      "title": "Solución de Problemas",
      "description": "Errores comunes y cómo resolverlos rápidamente",
      "action": "Ver Soluciones"
    },
    "bestPractices": {
      "title": "Mejores Prácticas",
      "description": "Tips y consejos de expertos para optimizar tu uso",
      "action": "Leer Tips"
    }
  }
}