From c41ba0030e0aa2dee20a38ef4984dd74ce3dd1c5 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 18 Nov 2025 11:33:33 +0000 Subject: [PATCH 1/4] Add comprehensive Spanish help documentation with i18n support - Create help.json translation files for Spanish, English, and Basque - Comprehensive Spanish user manuals for bakery owners (non-technical) - Detailed articles covering: * Getting Started (4 guides) * Features (5 major features with step-by-step instructions) * Analytics & Insights (4 detailed guides) * FAQs, contact info, and resources - All content based on actual service features (forecasting, inventory, production, etc.) - Content optimized for non-technical bakery owners - Full i18n structure ready for English and Basque translations Next steps: Update DocumentationPage.tsx and HelpCenterPage.tsx to use translations --- frontend/src/locales/en/help.json | 212 ++++++++ frontend/src/locales/es/help.json | 843 ++++++++++++++++++++++++++++++ frontend/src/locales/eu/help.json | 214 ++++++++ 3 files changed, 1269 insertions(+) create mode 100644 frontend/src/locales/en/help.json create mode 100644 frontend/src/locales/es/help.json create mode 100644 frontend/src/locales/eu/help.json diff --git a/frontend/src/locales/en/help.json b/frontend/src/locales/en/help.json new file mode 100644 index 00000000..c572b76a --- /dev/null +++ b/frontend/src/locales/en/help.json @@ -0,0 +1,212 @@ +{ + "helpCenter": { + "title": "How Can We Help You Today?", + "subtitle": "Help Center", + "searchPlaceholder": "Search help... (eg: how do I import data?)", + "description": "Find quick answers, complete guides and direct contact with our team", + "categoriesTitle": "Browse by Category", + "categoriesSubtitle": "Find what you need faster", + "faqTitle": "Frequently Asked Questions", + "faqResultsCount_one": "{{count}} answer", + "faqResultsCount_other": "{{count}} answers", + "faqFound": "found", + "noResultsTitle": "No results found for", + "noResultsAction": "Contact support", + "contactTitle": "Can't Find What You're Looking For?", + "contactSubtitle": "Our team is here to help you", + "contactHours": "Support Hours" + }, + "docs": { + "title": "Complete Guides to Master Bakery AI", + "subtitle": "Documentation", + "description": "Step-by-step tutorials, best practices and tricks to get the most out of the platform", + "getStarted": "Get Started", + "backToHelp": "Help Center", + "sectionsTitle": "Sections", + "videoTutorialsTitle": "Video Tutorials", + "videoTutorialsSubtitle": "Learn by watching (coming soon)", + "additionalResourcesTitle": "Additional Resources", + "ctaTitle": "Ready to Get Started?", + "ctaSubtitle": "Sign up for the pilot program and get 3 months free", + "ctaButton": "Create Free Account", + "articlesCount": "articles", + "readTime": "min", + "quickLinks": "Quick Links", + "downloadPdf": "Download PDF", + "contactSupport": "Contact Support", + "glossary": "Glossary of Terms", + "troubleshooting": "Troubleshooting", + "bestPractices": "Best Practices" + }, + "difficulty": { + "beginner": "Beginner", + "intermediate": "Intermediate", + "advanced": "Advanced" + }, + "categories": { + "gettingStarted": { + "title": "Getting Started", + "description": "Set up your account and learn the basics" + }, + "features": { + "title": "Features", + "description": "Complete guides on all features" + }, + "analytics": { + "title": "Analytics and Insights", + "description": "Interpret data and AI insights" + }, + "account": { + "title": "Account Management", + "description": "Manage your profile, team and settings" + }, + "billing": { + "title": "Billing and Plans", + "description": "Information about pricing, payments and subscriptions" + }, + "privacy": { + "title": "Privacy and Security", + "description": "GDPR, data security and compliance" + } + }, + "articles": { + "gettingStarted": { + "quickStart": { + "title": "Quick Start Guide", + "description": "Set up your Bakery AI account in just 10 minutes and start reducing waste", + "readTime": "5" + }, + "importData": { + "title": "Import Historical Sales Data", + "description": "Learn how to upload your sales history from Excel, CSV or your POS system", + "readTime": "8" + }, + "productsCatalog": { + "title": "Configure Product Catalog", + "description": "Create your catalog of products, recipes and ingredients for complete inventory management", + "readTime": "6" + }, + "firstPrediction": { + "title": "Your First Demand Prediction", + "description": "Understand how the system interprets and how to adjust predictions based on your experience", + "readTime": "10" + } + }, + "features": { + "demandForecasting": { + "title": "AI Demand Forecasting", + "description": "How the Prophet algorithm works and how to optimize prediction accuracy", + "readTime": "12" + }, + "productionPlanning": { + "title": "Automated Production Planning", + "description": "Optimize your daily baking with production plans automatically generated from forecasts", + "readTime": "10" + }, + "inventoryManagement": { + "title": "Inventory Management and Stock Control", + "description": "Complete control of ingredients with FIFO, low stock alerts and waste reduction", + "readTime": "9" + }, + "posIntegration": { + "title": "Point of Sale (POS) and Sales Recording", + "description": "Record sales manually or sync with your existing POS for more accurate predictions", + "readTime": "8" + }, + "wasteTracking": { + "title": "Waste Tracking and Sustainability", + "description": "Measure, analyze and reduce food waste to achieve zero waste goals", + "readTime": "7" + } + }, + "analytics": { + "dashboardOverview": { + "title": "Dashboard and Main KPIs", + "description": "Understand all key business metrics at a glance on the main dashboard", + "readTime": "8" + }, + "reports": { + "title": "Custom Reports", + "description": "Generate detailed reports on sales, production, costs and inventory exportable to Excel/PDF", + "readTime": "10" + }, + "aiInsights": { + "title": "AI Insights and Automatic Recommendations", + "description": "The system analyzes your data and gives you actionable recommendations to improve profitability", + "readTime": "12" + }, + "performanceMetrics": { + "title": "Performance Metrics and Business KPIs", + "description": "Key performance indicators to measure business health and make strategic decisions", + "readTime": "15" + } + } + }, + "faqs": [ + { + "category": "general", + "question": "What is Bakery AI and how does it work?", + "answer": "Bakery AI is an intelligent management platform for bakeries. It uses artificial intelligence to predict demand for your products, optimize production, reduce waste and increase profitability." + }, + { + "category": "general", + "question": "How long does it take to set up the system?", + "answer": "Initial setup takes 10-15 minutes. You need to: 1) Create your account, 2) Upload your product catalog, 3) Import sales history (optional but recommended), 4) Configure basic preferences." + }, + { + "category": "pricing", + "question": "How much does the pilot program cost?", + "answer": "The pilot program is FREE for the first 3 months. After that, you pay only €49/month with a lifetime 20% discount (regular price: €79/month). No commitment contracts, cancel anytime." + }, + { + "category": "technical", + "question": "How do I import my historical sales data?", + "answer": "We accept various formats: Excel (.xlsx), CSV, or direct exports from your POS if compatible. The more history you provide (we recommend minimum 3 months), the more accurate the predictions." + }, + { + "category": "privacy", + "question": "Where is my data stored?", + "answer": "ALL your data is stored on servers physically located in Spain (Barcelona and Madrid), 100% GDPR compliant. We never share, sell or transfer your data outside the EU." + } + ], + "contact": { + "liveChat": { + "title": "Live Chat", + "description": "Immediate response from 9:00 to 21:00", + "action": "Start Chat" + }, + "email": { + "title": "Email", + "description": "Response in less than 4 hours", + "action": "Send Email", + "address": "soporte@panaderia-ia.com" + }, + "documentation": { + "title": "Documentation", + "description": "Complete guides and tutorials", + "action": "View Docs" + }, + "hours": { + "liveChat": "Monday to Friday 9:00 - 21:00, Saturdays 10:00 - 18:00", + "email": "24/7 (response within 4 hours during business hours)", + "phone": "Monday to Friday 10:00 - 19:00 (active customers only)" + } + }, + "resources": { + "glossary": { + "title": "Glossary of Terms", + "description": "Definitions of key concepts and technical terminology", + "action": "View Glossary" + }, + "troubleshooting": { + "title": "Troubleshooting", + "description": "Common errors and how to solve them quickly", + "action": "View Solutions" + }, + "bestPractices": { + "title": "Best Practices", + "description": "Expert tips and advice to optimize your use", + "action": "Read Tips" + } + } +} diff --git a/frontend/src/locales/es/help.json b/frontend/src/locales/es/help.json new file mode 100644 index 00000000..e64abb75 --- /dev/null +++ b/frontend/src/locales/es/help.json @@ -0,0 +1,843 @@ +{ + "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 Panadería IA en solo 10 minutos y empieza a reducir desperdicios", + "readTime": "5", + "content": { + "intro": "Bienvenido a Panadería IA. Esta guía te ayudará a configurar tu cuenta en 10 minutos para empezar a optimizar tu producción desde el primer día.", + "steps": [ + { + "title": "1. Crea tu Cuenta", + "description": "Regístrate con tu email y contraseña. Te pediremos información básica de tu panadería: nombre, dirección, número de empleados." + }, + { + "title": "2. Configura tu Perfil de Panadería", + "description": "Indica el tipo de panadería: artesanal, industrial, obrador central con puntos de venta. Esto ayuda al sistema a personalizar las recomendaciones." + }, + { + "title": "3. Añade tus Productos", + "description": "Crea tu catálogo: pan, bollería, pasteles. Para cada producto indica nombre, precio de venta y categoría." + }, + { + "title": "4. Importa Historial de Ventas (Opcional)", + "description": "Cuantos más datos históricos proporciones, más precisas serán las predicciones. Acepta Excel, CSV o importación desde tu TPV." + }, + { + "title": "5. Primera Predicción", + "description": "El sistema generará automáticamente tu primera predicción de demanda para los próximos 7 días basándose en patrones similares." + } + ], + "tips": [ + "Empieza con 5-10 productos principales, no necesitas todo el catálogo el primer día", + "Si tienes historial de ventas de los últimos 3-6 meses, súbelo para predicciones más precisas", + "El sistema mejora con el tiempo: las primeras semanas tendrá 15-20% de margen de error, después del primer mes baja a ~10%" + ] + } + }, + "importData": { + "title": "Importar Datos Históricos de Ventas", + "description": "Aprende a subir tu historial de ventas desde Excel, CSV o tu sistema TPV para mejorar la precisión", + "readTime": "8", + "content": { + "intro": "Cuantos más datos históricos proporciones, más precisas serán las predicciones de demanda. Te recomendamos mínimo 3 meses de historial.", + "formats": [ + { + "name": "Excel (.xlsx)", + "description": "Formato más común. Necesitas columnas: Fecha, Producto, Cantidad Vendida, Precio (opcional)" + }, + { + "name": "CSV (.csv)", + "description": "Exportable desde cualquier TPV. Mismo formato que Excel pero en texto plano" + }, + { + "name": "Exportación TPV", + "description": "Si tu TPV es compatible, puedes exportar directamente el historial" + } + ], + "steps": [ + { + "title": "1. Prepara tu archivo", + "description": "Asegúrate de tener: Fecha (formato DD/MM/AAAA), Nombre del Producto, Cantidad Vendida. Precio de venta es opcional." + }, + { + "title": "2. Ve a Configuración > Importar Datos", + "description": "En el menú principal, busca 'Importar Datos Históricos'" + }, + { + "title": "3. Selecciona el archivo", + "description": "Arrastra y suelta tu archivo Excel/CSV o haz clic para seleccionarlo" + }, + { + "title": "4. Mapea las columnas", + "description": "El sistema detecta automáticamente las columnas, verifica que coincidan correctamente" + }, + { + "title": "5. Confirma e importa", + "description": "Revisa el resumen y confirma. El sistema procesará los datos en segundo plano" + } + ], + "commonIssues": [ + { + "issue": "Error: Formato de fecha inválido", + "solution": "Usa formato DD/MM/AAAA (ejemplo: 15/03/2025)" + }, + { + "issue": "Productos no reconocidos", + "solution": "Asegúrate de que los nombres coincidan exactamente con los productos creados en tu catálogo" + }, + { + "issue": "Importación lenta", + "solution": "Archivos grandes (>100.000 filas) pueden tardar 5-10 minutos. Recibirás un email cuando termine" + } + ] + } + }, + "productsCatalog": { + "title": "Configurar Catálogo de Productos", + "description": "Crea tu catálogo de productos, recetas e ingredientes para gestión completa de inventario", + "readTime": "6", + "content": { + "intro": "El catálogo de productos es el corazón del sistema. Aquí defines qué produces, cómo se hace y cuánto cuesta.", + "productLevels": [ + { + "level": "Productos Finales", + "description": "Lo que vendes (pan, croissant, tarta). Define nombre, precio, categoría, código de barras (opcional)" + }, + { + "level": "Recetas", + "description": "Cómo se hace cada producto. Lista de ingredientes con cantidades exactas, pasos de elaboración, tiempo de producción" + }, + { + "level": "Ingredientes", + "description": "Materias primas (harina, azúcar, mantequilla). Define unidad de medida, proveedor, precio por kilo" + } + ], + "steps": [ + { + "title": "1. Añadir Productos", + "description": "Ve a Productos > Nuevo Producto. Completa: Nombre, Categoría (pan, bollería, pastelería), Precio de venta, Peso/unidades por pieza" + }, + { + "title": "2. Crear Recetas", + "description": "Para cada producto, crea su receta. Añade ingredientes con cantidades exactas (ej: Harina 500g, Agua 300ml). Indica tiempo de amasado, fermentación y horneado" + }, + { + "title": "3. Gestionar Ingredientes", + "description": "Ve a Inventario > Ingredientes. Añade todas tus materias primas con: Nombre, Unidad (kg, L, unidades), Proveedor, Precio por unidad, Stock mínimo (para alertas)" + } + ], + "tips": [ + "Empieza con productos de alta rotación (los que más vendes)", + "Las recetas permiten calcular automáticamente cuánto ingrediente necesitas para la producción diaria", + "El sistema detecta automáticamente cuándo un ingrediente está por acabarse y sugiere hacer un pedido" + ] + } + }, + "firstPrediction": { + "title": "Tu Primera Predicción de Demanda", + "description": "Entiende cómo interpreta el sistema y cómo ajustar las predicciones según tu experiencia", + "readTime": "10", + "content": { + "intro": "Las predicciones de demanda son el núcleo de Panadería IA. Usan inteligencia artificial para predecir cuánto venderás de cada producto.", + "howItWorks": "El algoritmo analiza: Historial de ventas (últimos 3-12 meses), Día de la semana y estacionalidad, Festivos y eventos especiales, Clima (temperatura, lluvia), Tendencias recientes", + "readingPredictions": [ + { + "metric": "Demanda Prevista", + "description": "Cuántas unidades predice el sistema que venderás. Ejemplo: '150 baguettes para el Viernes 15/11'" + }, + { + "metric": "Rango de Confianza", + "description": "El mínimo y máximo esperado. Ejemplo: '130-170 baguettes' (95% de confianza). Útil para planificar conservador o agresivo" + }, + { + "metric": "Comparación vs Promedio", + "description": "'+15%' significa que se espera 15% más de lo habitual para ese día. Ayuda a detectar picos de demanda" + } + ], + "adjustments": "Puedes ajustar manualmente las predicciones si tienes información que el sistema no conoce (ej: evento local, promoción). El sistema aprende de tus ajustes.", + "tips": [ + "Los primeros 7-14 días las predicciones pueden tener 15-20% de error mientras el sistema aprende tus patrones", + "Después del primer mes, la precisión típica es 85-90%", + "Si una predicción parece muy alta o baja, revisa si hay un festivo o evento que explique el cambio", + "Ajusta cuando sepas algo que la IA no sabe (ej: reforma en tu calle, feria local)" + ] + } + } + }, + "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": "12", + "content": { + "intro": "La predicción de demanda usa Prophet, un algoritmo de inteligencia artificial desarrollado por Facebook, optimizado para panaderías españolas.", + "algorithm": { + "title": "Cómo Funciona el Algoritmo", + "description": "Prophet analiza patrones en tus datos históricos para hacer predicciones precisas. Identifica: Tendencias a largo plazo (¿estás creciendo o bajando ventas?), Estacionalidad diaria (lunes vs viernes), semanal y anual, Efectos de festivos (Navidad, Semana Santa, Reyes), Impacto del clima (lluvia reduce ventas de ciertos productos)" + }, + "features": [ + { + "name": "Predicciones Multi-Día", + "description": "Genera predicciones hasta 30 días en adelante. Útil para planificar compras de ingredientes y vacaciones del personal" + }, + { + "name": "Intervalos de Confianza", + "description": "Cada predicción incluye mínimo, esperado y máximo (95% de confianza). Si dice '100-150 unidades', hay 95% de probabilidad de vender entre 100-150" + }, + { + "name": "Ajuste por Festivos", + "description": "El sistema conoce todos los festivos nacionales y locales de Madrid. Ajusta automáticamente para Navidad, Reyes, Semana Santa" + }, + { + "name": "Integración con Clima", + "description": "Consulta la previsión meteorológica de AEMET (Agencia Española de Meteorología). Los días de lluvia suelen tener -20% ventas de algunos productos" + } + ], + "optimization": [ + { + "tip": "Datos Históricos", + "description": "Cuantos más meses de historial, mejor. Mínimo 3 meses, ideal 12+ meses" + }, + { + "tip": "Actualización Continua", + "description": "El sistema valida predicciones vs ventas reales cada noche y re-entrena modelos si la precisión baja" + }, + { + "tip": "Ajustes Manuales", + "description": "Si conoces un evento local (feria, concierto cerca), ajusta la predicción. El sistema aprende de tus correcciones" + } + ], + "metrics": { + "title": "Métricas de Precisión", + "description": "El sistema mide su propia precisión con MAPE (Error Porcentual Absoluto Medio). Objetivo: MAPE < 20% (80%+ precisión). Dashboard muestra precisión por producto y tendencias" + } + } + }, + "productionPlanning": { + "title": "Planificación de Producción Automatizada", + "description": "Optimiza tu horneado diario con planes de producción generados automáticamente desde predicciones", + "readTime": "10", + "content": { + "intro": "La planificación de producción convierte predicciones de demanda en lotes de horneado concretos, optimizando eficiencia y reduciendo desperdicio.", + "features": [ + { + "name": "Generación Automática", + "description": "Cada noche a las 5:30 AM, el sistema genera el plan de producción del día basándose en la predicción de demanda" + }, + { + "name": "Optimización por Lotes", + "description": "Calcula el tamaño ideal de lote para cada producto. Si vendes 150 baguettes pero tu bandeja es de 40, sugiere 4 lotes (160 total, 6.6% buffer)" + }, + { + "name": "Secuenciación", + "description": "Ordena los lotes por prioridad y compatibilidad de horno. Productos con mismo tiempo/temperatura se agrupan para eficiencia" + }, + { + "name": "Integración con Recetas", + "description": "Calcula automáticamente cuánta harina, mantequilla, etc. necesitas según los lotes planificados" + } + ], + "workflow": [ + { + "step": "1. Revisión Matinal", + "description": "Cada mañana, revisa el plan de producción sugerido en el dashboard. Ve todos los lotes del día con horarios sugeridos" + }, + { + "step": "2. Ajustes (Opcional)", + "description": "Si ves que hace buen tiempo o tienes info extra, ajusta cantidades. Los cambios se reflejan automáticamente en ingredientes necesarios" + }, + { + "step": "3. Ejecución", + "description": "Marca lotes como 'En Progreso' cuando empiezas, 'Completado' cuando terminas. Registra cantidad real producida" + }, + { + "step": "4. Control de Calidad", + "description": "Opcional: registra checks de calidad (peso, textura, color) para seguimiento histórico" + } + ], + "tips": [ + "El buffer automático es 5-10% extra para absorber variabilidad. Ajustable en Configuración", + "Si produces de más sistemáticamente, el sistema lo detecta y ajusta las recomendaciones", + "Puedes bloquear horarios de horno para mantenimiento o productos especiales" + ] + } + }, + "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": "9", + "content": { + "intro": "El inventario rastrea todos tus ingredientes: stock actual, movimientos, proveedores, costos y fechas de caducidad.", + "features": [ + { + "name": "Seguimiento en Tiempo Real", + "description": "Stock actualizado automáticamente cuando registras producciones o entregas. Ve el stock actual de cada ingrediente en tiempo real" + }, + { + "name": "FIFO Automático", + "description": "First-In-First-Out (primero en entrar, primero en salir). El sistema consume automáticamente los lotes más antiguos para evitar caducidades" + }, + { + "name": "Alertas de Stock Bajo", + "description": "Cuando un ingrediente llega al punto de reorden, recibes alerta. Ejemplo: 'Harina T-55: stock 15kg, mínimo 50kg, hacer pedido'" + }, + { + "name": "Gestión de Caducidades", + "description": "Registra fechas de caducidad de cada lote. Alertas 7 días antes de caducar. Seguimiento de desperdicio por caducidad" + } + ], + "stockEntry": [ + { + "title": "Recepción de Pedidos", + "description": "Cuando llega un pedido del proveedor: 1) Registra la entrega en el sistema, 2) Escanea código de barras o introduce cantidad manualmente, 3) Registra lote y fecha de caducidad, 4) Stock se actualiza automáticamente" + }, + { + "title": "Actualización Automática", + "description": "Al completar un lote de producción, el sistema descuenta automáticamente los ingredientes usando FIFO. Si produces 100 baguettes (receta: 500g harina cada), descuenta 50kg de harina del lote más antiguo" + } + ], + "compliance": [ + { + "name": "HACCP", + "description": "Sistema cumple con normas HACCP de seguridad alimentaria. Trazabilidad completa de lotes, temperaturas de almacenaje" + }, + { + "name": "Auditoría", + "description": "Historial completo de movimientos de stock para auditorías. Exportable a PDF/Excel" + } + ], + "metrics": [ + "Valor total de inventario (€)", + "Rotación de inventario (cuántas veces al año renuevas stock)", + "Desperdicio por caducidad (kg y € al mes)", + "Ingredientes con stock crítico" + ] + } + }, + "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. Después, pagas solo €49/mes con un 20% de descuento de por vida (precio normal: €79/mes). 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), Chat en vivo (9:00-21:00), Videollamada (con cita previa). Durante el piloto, también tienes acceso directo a los fundadores por WhatsApp." + } + ], + "contact": { + "liveChat": { + "title": "Chat en Vivo", + "description": "Respuesta inmediata de 9:00 a 21:00", + "action": "Iniciar Chat" + }, + "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": { + "liveChat": "Lunes a Viernes 9:00 - 21:00, Sábados 10:00 - 18:00", + "email": "24/7 (respuesta en menos de 4 horas en horario laboral)", + "phone": "Lunes a Viernes 10:00 - 19:00 (solo para 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" + } + } +} diff --git a/frontend/src/locales/eu/help.json b/frontend/src/locales/eu/help.json new file mode 100644 index 00000000..d8b55dc7 --- /dev/null +++ b/frontend/src/locales/eu/help.json @@ -0,0 +1,214 @@ +{ + "helpCenter": { + "title": "Nola Lagun Zaitzakegu Gaur?", + "subtitle": "Laguntza Zentroa", + "searchPlaceholder": "Bilatu laguntzan... (adib: nola inporta ditudan datuak?)", + "description": "Aurkitu erantzun azkarrak, gida osoak eta gure taldearekin zuzeneko harremana", + "categoriesTitle": "Arakatu Kategorien arabera", + "categoriesSubtitle": "Aurkitu behar duzuna azkarrago", + "faqTitle": "Ohiko Galderak", + "faqResultsCount_one": "{{count}} erantzun", + "faqResultsCount_other": "{{count}} erantzun", + "faqFound": "aurkituta", + "noResultsTitle": "Ez da emaitzarik aurkitu honetarako", + "noResultsAction": "Jarri harremanetan laguntza-zerbitzuarekin", + "contactTitle": "Ez duzu bilatzen duzuna aurkitzen?", + "contactSubtitle": "Gure taldea hemen dago zu laguntzeko", + "contactHours": "Arreta Ordutegia" + }, + "docs": { + "title": "Gida Osoak Bakery IA Menperatzeko", + "subtitle": "Dokumentazioa", + "description": "Urratsez urratseko tutorialak, praktika onenak eta trikimailuak plataformari zuku guztia ateratzeko", + "getStarted": "Hasi", + "backToHelp": "Laguntza Zentroa", + "sectionsTitle": "Atalak", + "videoTutorialsTitle": "Bideo Tutorialak", + "videoTutorialsSubtitle": "Ikasi ikusten (laster)", + "additionalResourcesTitle": "Baliabide Gehigarriak", + "ctaTitle": "Prest Hasteko?", + "ctaSubtitle": "Erregistratu pilotu-programan eta eskuratu 3 hilabete doan", + "ctaButton": "Sortu Kontu Doakoa", + "articlesCount": "artikuluak", + "readTime": "min", + "quickLinks": "Esteka Azkarrak", + "downloadPdf": "Deskargatu PDF", + "contactSupport": "Jarri harremanetan Laguntza-zerbitzuarekin", + "glossary": "Terminoen Glosarioa", + "troubleshooting": "Arazoen Konponketa", + "bestPractices": "Praktika Onenak" + }, + "difficulty": { + "beginner": "Hasiberria", + "intermediate": "Ertaina", + "advanced": "Aurreratua" + }, + "categories": { + "gettingStarted": { + "title": "Lehenengo Urratsak", + "description": "Konfiguratu zure kontua eta ikasi oinarriak" + }, + "features": { + "title": "Funtzionalitateak", + "description": "Gida osoak ezaugarri guztiei buruz" + }, + "analytics": { + "title": "Analitika eta Aurreikuspenak", + "description": "Interpretatu datuak eta AI jakintza" + }, + "account": { + "title": "Kontuaren Kudeaketa", + "description": "Kudeatu zure profila, taldea eta ezarpenak" + }, + "billing": { + "title": "Fakturak eta Planak", + "description": "Informazioa prezioak, ordainketak eta harpidetzei buruz" + }, + "privacy": { + "title": "Pribatutasuna eta Segurtasuna", + "description": "GDPR, datuen segurtasuna eta betebeharra" + } + }, + "articles": { + "gettingStarted": { + "quickStart": { + "title": "Hasiera Azkarreko Gida", + "description": "Konfiguratu zure Bakery AI kontua 10 minututan eta hasi hondakinak murrizten", + "readTime": "5" + }, + "importData": { + "title": "Inportatu Salmenta Datu Historikoak", + "description": "Ikasi nola kargatu zure salmenta historia Excel, CSV edo zure TPV sistematik", + "readTime": "8" + }, + "productsCatalog": { + "title": "Konfiguratu Produktuen Katalogoa", + "description": "Sortu zure produktuen, errezetak eta osagaien katalogoa inbentario kudeaketa osorako", + "readTime": "6" + }, + "firstPrediction": { + "title": "Zure Lehen Eskariaren Aurreikuspena", + "description": "Ulertu sistemak nola interpretatzen duen eta nola doitu aurreikuspenak zure esperientzian oinarrituta", + "readTime": "10" + } + }, + "features": { + "demandForecasting": { + "title": "AI Eskariaren Aurreikuspena", + "description": "Nola funtzionatzen duen Prophet algoritmoak eta nola optimizatu aurreikuspen zehaztasuna", + "readTime": "12" + }, + "productionPlanning": { + "title": "Ekoizpen Planifikazio Automatizatua", + "description": "Optimizatu zure eguneroko labea ekoizpen planekin aurreikuspenetatik automatikoki sortuta", + "readTime": "10" + }, + "inventoryManagement": { + "title": "Inbentarioaren Kudeaketa eta Stock Kontrola", + "description": "Osagaien kontrol osoa FIFO, stock baxuko alertak eta hondakinen murrizketarekin", + "readTime": "9" + }, + "posIntegration": { + "title": "Salmenta Puntua (TPV) eta Salmenten Erregistroa", + "description": "Erregistratu salmentak eskuz edo sinkronizatu zure TPV existentzearekin aurreikuspen zehatzagoak lortzeko", + "readTime": "8" + }, + "wasteTracking": { + "title": "Hondakinen Jarraipena eta Iraunkortasuna", + "description": "Neurtu, aztertu eta murriztu elikagaien hondakinak zero hondakin helburuak lortzeko", + "readTime": "7" + } + }, + "analytics": { + "dashboardOverview": { + "title": "Aginte Panela eta KPI Nagusiak", + "description": "Ulertu negozioaren metrika giltzarri guztiak begiratu bakarrean aginte panel nagusian", + "readTime": "8" + }, + "reports": { + "title": "Txosten Pertsonalizatuak", + "description": "Sortu salmenten, ekoizpenaren, kostuen eta inbentarioaren txosten xehatuak Excel/PDF-ra esportagarriak", + "readTime": "10" + }, + "aiInsights": { + "title": "AI Jakintza eta Gomendio Automatikoak", + "description": "Sistemak zure datuak aztertzen ditu eta ekintza posible diren gomendioak ematen dizkizu errentagarritasuna hobetzeko", + "readTime": "12" + }, + "performanceMetrics": { + "title": "Errendimendu Metrikak eta Negozioaren KPIak", + "description": "Errendimendu adierazle giltzarriak negozioaren osasuna neurtzeko eta erabaki estrategikoak hartzeko", + "readTime": "15" + } + } + }, + "faqs": [ + { + "category": "general", + "question": "Zer da Bakery AI eta nola funtzionatzen du?", + "answer": "Bakery AI kudeaketa plataforma adimentsua da okindegieta + +rako. Adimen artifiziala erabiltzen du zure produktuen eskaria aurreikusteko, ekoizpena optimizatzeko, hondakinak murrizteko eta errentagarritasuna handitzeko." + }, + { + "category": "general", + "question": "Zenbat denbora behar da sistema konfiguratzeko?", + "answer": "Hasierako konfigurazioak 10-15 minutu hartzen ditu. Behar dituzu: 1) Sortu zure kontua, 2) Kargatu zure produktuen katalogoa, 3) Inportatu salmenta historia (hautazkoa baina gomendatua), 4) Konfiguratu oinarrizko lehentasunak." + }, + { + "category": "pricing", + "question": "Zenbat kostatzen du pilotu-programak?", + "answer": "Pilotu-programa DOAN dago lehenengo 3 hilabeteetan. Gero, 49€/hilean ordaintzen duzu bizitza osoko %20ko deskontua (prezio arrunta: 79€/hilean). Ez dago konpromiso-kontraturik, utzi nahi duzunean." + }, + { + "category": "technical", + "question": "Nola inporta ditzaket nire salmenta datu historikoak?", + "answer": "Hainbat formatu onartzen ditugu: Excel (.xlsx), CSV, edo TPV-tik esportazio zuzenak bateragarria bada. Zenbat eta historia gehiago eman (gutxienez 3 hilabete gomendatzen ditugu), orduan eta aurreikuspen zehatzagoak." + }, + { + "category": "privacy", + "question": "Non gordetzen dira nire datuak?", + "answer": "Zure datu GUZTIAK Espainian fisikoki kokatutako zerbitzarietan gordetzen dira (Bartzelona eta Madril), %100 GDPR betetzen. Inoiz ez ditugu zure datuak parteka, saldu edo EBZ kanpora transferitzen." + } + ], + "contact": { + "liveChat": { + "title": "Zuzeneko Txata", + "description": "Erantzun berehalakoa 9:00-21:00", + "action": "Hasi Txata" + }, + "email": { + "title": "Posta Elektronikoa", + "description": "Erantzuna 4 ordu baino gutxiagoan", + "action": "Bidali Posta", + "address": "soporte@panaderia-ia.com" + }, + "documentation": { + "title": "Dokumentazioa", + "description": "Gida osoak eta tutorialak", + "action": "Ikusi Dokumentuak" + }, + "hours": { + "liveChat": "Astelehenetik ostiralera 9:00 - 21:00, Larunbatak 10:00 - 18:00", + "email": "24/7 (erantzuna 4 orduen barruan lan orduetan)", + "phone": "Astelehenetik ostiralera 10:00 - 19:00 (bezero aktiboak soilik)" + } + }, + "resources": { + "glossary": { + "title": "Terminoen Glosarioa", + "description": "Kontzeptu giltzarriak eta termino teknikoen definizioak", + "action": "Ikusi Glosarioa" + }, + "troubleshooting": { + "title": "Arazoen Konponketa", + "description": "Ohiko erroreak eta nola konpondu azkar", + "action": "Ikusi Konponketak" + }, + "bestPractices": { + "title": "Praktika Onenak", + "description": "Adituek emandako aholku eta gomendioak zure erabilera optimizatzeko", + "action": "Irakurri Aholkuak" + } + } +} From d98fed0cd0ed120efe65fdcf9ab4655701a721eb Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 18 Nov 2025 12:07:37 +0000 Subject: [PATCH 2/4] Update help/docs pages to use i18n translations - Update locales/index.ts to import help namespace for all languages - Convert DocumentationPage.tsx to use useTranslation('help') * All sections now use translation keys from help.json * Difficulty labels, categories, and articles fully internationalized * UI strings (titles, buttons, placeholders) use translations - Convert HelpCenterPage.tsx to use useTranslation('help') * Categories loaded from translations * FAQs loaded dynamically from help.json array * All UI strings internationalized (search, titles, contact info) - Both pages now support Spanish, English, and Basque languages - Maintains full backward compatibility with existing Spanish content Result: Complete i18n implementation for /help and /help/docs routes --- frontend/src/locales/index.ts | 10 +- .../src/pages/public/DocumentationPage.tsx | 168 ++++++++---------- frontend/src/pages/public/HelpCenterPage.tsx | 159 +++++------------ 3 files changed, 128 insertions(+), 209 deletions(-) diff --git a/frontend/src/locales/index.ts b/frontend/src/locales/index.ts index 6b9758fb..01755f7f 100644 --- a/frontend/src/locales/index.ts +++ b/frontend/src/locales/index.ts @@ -17,6 +17,7 @@ import reasoningEs from './es/reasoning.json'; import wizardsEs from './es/wizards.json'; import subscriptionEs from './es/subscription.json'; import purchaseOrdersEs from './es/purchase_orders.json'; +import helpEs from './es/help.json'; // English translations import commonEn from './en/common.json'; @@ -37,6 +38,7 @@ import reasoningEn from './en/reasoning.json'; import wizardsEn from './en/wizards.json'; import subscriptionEn from './en/subscription.json'; import purchaseOrdersEn from './en/purchase_orders.json'; +import helpEn from './en/help.json'; // Basque translations import commonEu from './eu/common.json'; @@ -57,6 +59,7 @@ import reasoningEu from './eu/reasoning.json'; import wizardsEu from './eu/wizards.json'; import subscriptionEu from './eu/subscription.json'; import purchaseOrdersEu from './eu/purchase_orders.json'; +import helpEu from './eu/help.json'; // Translation resources by language export const resources = { @@ -79,6 +82,7 @@ export const resources = { wizards: wizardsEs, subscription: subscriptionEs, purchase_orders: purchaseOrdersEs, + help: helpEs, }, en: { common: commonEn, @@ -99,6 +103,7 @@ export const resources = { wizards: wizardsEn, subscription: subscriptionEn, purchase_orders: purchaseOrdersEn, + help: helpEn, }, eu: { common: commonEu, @@ -119,6 +124,7 @@ export const resources = { wizards: wizardsEu, subscription: subscriptionEu, purchase_orders: purchaseOrdersEu, + help: helpEu, }, }; @@ -155,7 +161,7 @@ export const languageConfig = { }; // Namespaces available in translations -export const namespaces = ['common', 'auth', 'inventory', 'foodSafety', 'suppliers', 'orders', 'recipes', 'errors', 'dashboard', 'production', 'equipment', 'landing', 'settings', 'ajustes', 'reasoning', 'wizards', 'subscription', 'purchase_orders'] as const; +export const namespaces = ['common', 'auth', 'inventory', 'foodSafety', 'suppliers', 'orders', 'recipes', 'errors', 'dashboard', 'production', 'equipment', 'landing', 'settings', 'ajustes', 'reasoning', 'wizards', 'subscription', 'purchase_orders', 'help'] as const; export type Namespace = typeof namespaces[number]; // Helper function to get language display name @@ -169,7 +175,7 @@ export const isSupportedLanguage = (language: string): language is SupportedLang }; // Export individual language modules for direct imports -export { commonEs, authEs, inventoryEs, foodSafetyEs, suppliersEs, ordersEs, recipesEs, errorsEs, equipmentEs, landingEs, settingsEs, ajustesEs, reasoningEs, wizardsEs, wizardsEn, wizardsEu }; +export { commonEs, authEs, inventoryEs, foodSafetyEs, suppliersEs, ordersEs, recipesEs, errorsEs, equipmentEs, landingEs, settingsEs, ajustesEs, reasoningEs, wizardsEs, wizardsEn, wizardsEu, helpEs, helpEn, helpEu }; // Default export with all translations export default resources; diff --git a/frontend/src/pages/public/DocumentationPage.tsx b/frontend/src/pages/public/DocumentationPage.tsx index 72a54609..673b49c5 100644 --- a/frontend/src/pages/public/DocumentationPage.tsx +++ b/frontend/src/pages/public/DocumentationPage.tsx @@ -39,129 +39,129 @@ interface DocArticle { } const DocumentationPage: React.FC = () => { - const { t } = useTranslation(); + const { t } = useTranslation('help'); const [activeSection, setActiveSection] = useState('getting-started'); const sections: DocSection[] = [ { id: 'getting-started', - title: 'Primeros Pasos', - description: 'Todo lo que necesitas para comenzar', + title: t('categories.gettingStarted.title'), + description: t('categories.gettingStarted.description'), icon: Rocket, articles: [ { id: 'quick-start', - title: 'Guía de Inicio Rápido', - description: 'Configura tu cuenta en 10 minutos', - readTime: '5 min', + title: t('articles.gettingStarted.quickStart.title'), + description: t('articles.gettingStarted.quickStart.description'), + readTime: `${t('articles.gettingStarted.quickStart.readTime')} ${t('docs.readTime')}`, difficulty: 'beginner', }, { id: 'import-data', - title: 'Importar Datos Históricos', - description: 'Cómo subir tu historial de ventas desde Excel o TPV', - readTime: '8 min', + title: t('articles.gettingStarted.importData.title'), + description: t('articles.gettingStarted.importData.description'), + readTime: `${t('articles.gettingStarted.importData.readTime')} ${t('docs.readTime')}`, difficulty: 'beginner', }, { id: 'products-catalog', - title: 'Configurar Catálogo de Productos', - description: 'Añade tus productos, recetas e ingredientes', - readTime: '6 min', + title: t('articles.gettingStarted.productsCatalog.title'), + description: t('articles.gettingStarted.productsCatalog.description'), + readTime: `${t('articles.gettingStarted.productsCatalog.readTime')} ${t('docs.readTime')}`, difficulty: 'beginner', }, { id: 'first-prediction', - title: 'Tu Primera Predicción', - description: 'Interpreta y ajusta las predicciones de demanda', - readTime: '10 min', + title: t('articles.gettingStarted.firstPrediction.title'), + description: t('articles.gettingStarted.firstPrediction.description'), + readTime: `${t('articles.gettingStarted.firstPrediction.readTime')} ${t('docs.readTime')}`, difficulty: 'beginner', }, ], }, { id: 'features', - title: 'Funcionalidades', - description: 'Guías detalladas de cada módulo', + title: t('categories.features.title'), + description: t('categories.features.description'), icon: Package, articles: [ { id: 'demand-forecasting', - title: 'Predicción de Demanda con IA', - description: 'Cómo funciona el algoritmo y cómo sacarle el máximo partido', - readTime: '12 min', + title: t('articles.features.demandForecasting.title'), + description: t('articles.features.demandForecasting.description'), + readTime: `${t('articles.features.demandForecasting.readTime')} ${t('docs.readTime')}`, difficulty: 'intermediate', }, { id: 'production-planning', - title: 'Planificación de Producción', - description: 'Optimiza tu horneado diario basándote en predicciones', - readTime: '10 min', + title: t('articles.features.productionPlanning.title'), + description: t('articles.features.productionPlanning.description'), + readTime: `${t('articles.features.productionPlanning.readTime')} ${t('docs.readTime')}`, difficulty: 'intermediate', }, { id: 'inventory-management', - title: 'Gestión de Inventario', - description: 'Controla stock, proveedores y compras', - readTime: '9 min', + title: t('articles.features.inventoryManagement.title'), + description: t('articles.features.inventoryManagement.description'), + readTime: `${t('articles.features.inventoryManagement.readTime')} ${t('docs.readTime')}`, difficulty: 'intermediate', }, { id: 'pos-integration', - title: 'Punto de Venta (TPV)', - description: 'Registra ventas y sincroniza con predicciones', - readTime: '8 min', + title: t('articles.features.posIntegration.title'), + description: t('articles.features.posIntegration.description'), + readTime: `${t('articles.features.posIntegration.readTime')} ${t('docs.readTime')}`, difficulty: 'beginner', }, { id: 'waste-tracking', - title: 'Seguimiento de Desperdicios', - description: 'Mide, analiza y reduce el desperdicio alimentario', - readTime: '7 min', + title: t('articles.features.wasteTracking.title'), + description: t('articles.features.wasteTracking.description'), + readTime: `${t('articles.features.wasteTracking.readTime')} ${t('docs.readTime')}`, difficulty: 'beginner', }, ], }, { id: 'analytics', - title: 'Análisis e Insights', - description: 'Interpreta tus datos y métricas', + title: t('categories.analytics.title'), + description: t('categories.analytics.description'), icon: BarChart3, articles: [ { id: 'dashboard-overview', - title: 'Panel de Control', - description: 'Entiende todas las métricas clave de un vistazo', - readTime: '8 min', + title: t('articles.analytics.dashboardOverview.title'), + description: t('articles.analytics.dashboardOverview.description'), + readTime: `${t('articles.analytics.dashboardOverview.readTime')} ${t('docs.readTime')}`, difficulty: 'beginner', }, { id: 'reports', - title: 'Informes y Reportes', - description: 'Genera y exporta informes personalizados', - readTime: '10 min', + title: t('articles.analytics.reports.title'), + description: t('articles.analytics.reports.description'), + readTime: `${t('articles.analytics.reports.readTime')} ${t('docs.readTime')}`, difficulty: 'intermediate', }, { id: 'ai-insights', - title: 'Insights de IA', - description: 'Descubre patrones y oportunidades automáticamente', - readTime: '12 min', + title: t('articles.analytics.aiInsights.title'), + description: t('articles.analytics.aiInsights.description'), + readTime: `${t('articles.analytics.aiInsights.readTime')} ${t('docs.readTime')}`, difficulty: 'advanced', }, { id: 'performance-metrics', - title: 'Métricas de Rendimiento', - description: 'KPIs clave: márgenes, rotación, precisión de predicciones', - readTime: '15 min', + title: t('articles.analytics.performanceMetrics.title'), + description: t('articles.analytics.performanceMetrics.description'), + readTime: `${t('articles.analytics.performanceMetrics.readTime')} ${t('docs.readTime')}`, difficulty: 'intermediate', }, ], }, { id: 'account', - title: 'Gestión de Cuenta', - description: 'Administra tu perfil y equipo', + title: t('categories.account.title'), + description: t('categories.account.description'), icon: Settings, articles: [ { @@ -196,8 +196,8 @@ const DocumentationPage: React.FC = () => { }, { id: 'billing', - title: 'Facturación y Planes', - description: 'Suscripciones, pagos y facturas', + title: t('categories.billing.title'), + description: t('categories.billing.description'), icon: CreditCard, articles: [ { @@ -232,8 +232,8 @@ const DocumentationPage: React.FC = () => { }, { id: 'privacy', - title: 'Privacidad y Seguridad', - description: 'RGPD, datos y cumplimiento', + title: t('categories.privacy.title'), + description: t('categories.privacy.description'), icon: Shield, articles: [ { @@ -284,16 +284,7 @@ const DocumentationPage: React.FC = () => { }; const getDifficultyLabel = (difficulty: string) => { - switch (difficulty) { - case 'beginner': - return 'Principiante'; - case 'intermediate': - return 'Intermedio'; - case 'advanced': - return 'Avanzado'; - default: - return difficulty; - } + return t(`difficulty.${difficulty}` as any) || difficulty; }; return ( @@ -313,14 +304,13 @@ const DocumentationPage: React.FC = () => {
- Documentación + {t('docs.subtitle')}

- Guías Completas Para - Dominar Panadería IA + {t('docs.title')}

- Tutoriales paso a paso, mejores prácticas y trucos para aprovechar al máximo la plataforma + {t('docs.description')}

{/* Quick Actions */} @@ -331,14 +321,14 @@ const DocumentationPage: React.FC = () => { className="inline-flex items-center gap-2 px-6 py-3 bg-[var(--color-primary)] text-white rounded-xl font-bold hover:shadow-xl transition-all hover:scale-105" > - Comenzar + {t('docs.getStarted')} - Centro de Ayuda + {t('docs.backToHelp')}
@@ -353,7 +343,7 @@ const DocumentationPage: React.FC = () => {

- Secciones + {t('docs.sectionsTitle')}

@@ -384,7 +374,7 @@ const DocumentationPage: React.FC = () => { {/* Quick Links */}

- Enlaces Rápidos + {t('docs.quickLinks')}

{ className="flex items-center gap-2 text-[var(--text-secondary)] hover:text-[var(--color-primary)] transition-colors" > - Centro de Ayuda + {t('docs.backToHelp')} - Contactar Soporte + {t('docs.contactSupport')} - Descargar PDF + {t('docs.downloadPdf')}
@@ -473,10 +463,10 @@ const DocumentationPage: React.FC = () => {

- Tutoriales en Vídeo + {t('docs.videoTutorialsTitle')}

- Aprende viendo (próximamente) + {t('docs.videoTutorialsSubtitle')}

@@ -524,7 +514,7 @@ const DocumentationPage: React.FC = () => {

- Recursos Adicionales + {t('docs.additionalResourcesTitle')}

@@ -532,39 +522,39 @@ const DocumentationPage: React.FC = () => {

- Glosario de Términos + {t('resources.glossary.title')}

- Definiciones de conceptos clave y terminología técnica + {t('resources.glossary.description')}

- Ver Glosario → + {t('resources.glossary.action')} →

- Solución de Problemas + {t('resources.troubleshooting.title')}

- Errores comunes y cómo resolverlos rápidamente + {t('resources.troubleshooting.description')}

- Ver Soluciones → + {t('resources.troubleshooting.action')} →

- Mejores Prácticas + {t('resources.bestPractices.title')}

- Tips y consejos de expertos para optimizar tu uso + {t('resources.bestPractices.description')}

- Leer Tips → + {t('resources.bestPractices.action')} →
@@ -575,16 +565,16 @@ const DocumentationPage: React.FC = () => {

- ¿Listo Para Empezar? + {t('docs.ctaTitle')}

- Regístrate en el programa piloto y obtén 3 meses gratis + {t('docs.ctaSubtitle')}

- Crear Cuenta Gratis + {t('docs.ctaButton')}
diff --git a/frontend/src/pages/public/HelpCenterPage.tsx b/frontend/src/pages/public/HelpCenterPage.tsx index 54c86293..52fecbf5 100644 --- a/frontend/src/pages/public/HelpCenterPage.tsx +++ b/frontend/src/pages/public/HelpCenterPage.tsx @@ -37,132 +37,56 @@ interface HelpCategory { } const HelpCenterPage: React.FC = () => { - const { t } = useTranslation(); + const { t } = useTranslation('help'); const [searchQuery, setSearchQuery] = useState(''); const [expandedFAQ, setExpandedFAQ] = useState(null); const categories: HelpCategory[] = [ { id: 'getting-started', - title: 'Primeros Pasos', - description: 'Configura tu cuenta y aprende los conceptos básicos', + title: t('categories.gettingStarted.title'), + description: t('categories.gettingStarted.description'), icon: BookOpen, link: '/help/docs#getting-started', }, { id: 'features', - title: 'Funcionalidades', - description: 'Guías completas sobre todas las características', + title: t('categories.features.title'), + description: t('categories.features.description'), icon: Package, link: '/help/docs#features', }, { id: 'billing', - title: 'Facturación y Planes', - description: 'Información sobre precios, pagos y suscripciones', + title: t('categories.billing.title'), + description: t('categories.billing.description'), icon: CreditCard, link: '/help/docs#billing', }, { id: 'account', - title: 'Gestión de Cuenta', - description: 'Administra tu perfil, equipo y configuración', + title: t('categories.account.title'), + description: t('categories.account.description'), icon: Settings, link: '/help/docs#account', }, { id: 'privacy', - title: 'Privacidad y Seguridad', - description: 'RGPD, seguridad de datos y cumplimiento', + title: t('categories.privacy.title'), + description: t('categories.privacy.description'), icon: Shield, link: '/help/docs#privacy', }, { id: 'analytics', - title: 'Análisis y Predicciones', - description: 'Interpreta datos e insights de IA', + title: t('categories.analytics.title'), + description: t('categories.analytics.description'), icon: TrendingUp, link: '/help/docs#analytics', }, ]; - const faqs: FAQItem[] = [ - { - 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: 'pricing', - question: '¿Cuánto cuesta el programa piloto?', - answer: 'El programa piloto es GRATIS durante los primeros 3 meses. Después, pagas solo €49/mes con un 20% de descuento de por vida (precio normal: €79/mes). Sin contratos de permanencia, cancela cuando quieras. Las primeras 20 panaderías obtienen este beneficio.', - }, - { - 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. Esto nos ayuda a asegurar que solo participan panaderías realmente interesadas. Puedes cancelar antes de que termine el periodo gratuito sin ningún cargo.', - }, - { - category: 'pricing', - question: '¿Qué pasa después de los 3 meses gratis?', - answer: 'Tienes 3 opciones: 1) Continuar con el plan Basic (€49/mes con tu descuento del 20%), 2) Actualizar a un plan superior, 3) Cancelar sin penalización. Te avisaremos 7 días antes de que termine tu periodo gratuito.', - }, - { - 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. También puedes introducir datos manualmente si prefieres. Cuanto más historial proporciones (recomendamos mínimo 3 meses), más precisas serán las predicciones.', - }, - { - category: 'technical', - question: '¿El sistema se integra con mi TPV actual?', - answer: 'Actualmente estamos trabajando en integraciones directas con los principales TPV del mercado español. Por ahora, puedes exportar datos de tu TPV e importarlos manualmente (es más fácil de lo que suena). Las integraciones automáticas llegarán en Q2 2025.', - }, - { - 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. Tienes control total y puedes exportar o eliminar tus datos en cualquier momento.', - }, - { - category: 'privacy', - question: '¿Quién puede ver mis datos de ventas?', - answer: 'Solo TÚ y los miembros de tu equipo que tú autorices. Ni siquiera nuestro equipo técnico puede acceder a tus datos sin tu permiso explícito (y solo lo haríamos para soporte técnico con tu aprobación). Los datos están encriptados end-to-end.', - }, - { - category: 'support', - question: '¿Qué tipo de soporte ofrecen?', - answer: 'Soporte 24/7 en español por: Email (respuesta en <4h), Chat en vivo (9:00-21:00), Videollamada (con cita previa). Durante el piloto, también tienes acceso directo a los fundadores por WhatsApp. Además, biblioteca completa de tutoriales en vídeo.', - }, - { - category: 'support', - question: '¿Puedo hablar con alguien antes de registrarme?', - answer: 'Por supuesto. Agenda una videollamada de 15 minutos con nuestro equipo para ver el producto en acción, hacer todas tus preguntas y confirmar que es adecuado para tu panadería. Sin compromiso. Contacto: hola@panaderia-ia.com o el formulario de contacto.', - }, - { - 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. La IA optimiza tanto la producción total como la distribución entre ubicaciones.', - }, - { - category: 'general', - question: '¿Qué modelo de negocio es mejor para mi panadería?', - answer: 'Depende de tus objetivos. Producción Local es ideal si valoras máximo control, flexibilidad y frescura instantánea, o si estás empezando. Obrador Central + Puntos de Venta es mejor si quieres escalar a múltiples ubicaciones, aprovechar economías de escala, o tener presencia en varios barrios/ciudades. Lo bueno: nuestro sistema funciona para ambos modelos y puede evolucionar contigo si decides cambiar o crecer.', - }, - ]; + const faqs: FAQItem[] = t('faqs', { returnObjects: true }) as FAQItem[]; const filteredFAQs = searchQuery ? faqs.filter( @@ -193,14 +117,13 @@ const HelpCenterPage: React.FC = () => {
- Centro de Ayuda + {t('helpCenter.subtitle')}

- ¿Cómo Podemos - Ayudarte Hoy? + {t('helpCenter.title')}

- Encuentra respuestas rápidas, guías completas y contacto directo con nuestro equipo + {t('helpCenter.description')}

{/* Search Bar */} @@ -209,7 +132,7 @@ const HelpCenterPage: React.FC = () => { setSearchQuery(e.target.value)} className="w-full pl-12 pr-4 py-4 bg-[var(--bg-primary)] border-2 border-[var(--border-primary)] rounded-xl text-[var(--text-primary)] placeholder:text-[var(--text-tertiary)] focus:outline-none focus:border-[var(--color-primary)] transition-colors" @@ -225,10 +148,10 @@ const HelpCenterPage: React.FC = () => {

- Explora por Categoría + {t('helpCenter.categoriesTitle')}

- Encuentra lo que necesitas más rápido + {t('helpCenter.categoriesSubtitle')}

@@ -261,11 +184,11 @@ const HelpCenterPage: React.FC = () => {

- Preguntas Frecuentes + {t('helpCenter.faqTitle')}

- {filteredFAQs.length} {filteredFAQs.length === 1 ? 'respuesta' : 'respuestas'}{' '} - {searchQuery && 'encontradas'} + {t('helpCenter.faqResultsCount', { count: filteredFAQs.length })}{' '} + {searchQuery && t('helpCenter.faqFound')}

@@ -301,9 +224,9 @@ const HelpCenterPage: React.FC = () => {

- No encontramos resultados para "{searchQuery}".{' '} + {t('helpCenter.noResultsTitle')} "{searchQuery}".{' '} - Contacta con soporte + {t('helpCenter.noResultsAction')}

@@ -316,10 +239,10 @@ const HelpCenterPage: React.FC = () => {

- ¿No Encuentras lo Que Buscas? + {t('helpCenter.contactTitle')}

- Nuestro equipo está aquí para ayudarte + {t('helpCenter.contactSubtitle')}

@@ -332,31 +255,31 @@ const HelpCenterPage: React.FC = () => {

- Chat en Vivo + {t('contact.liveChat.title')}

- Respuesta inmediata de 9:00 a 21:00 + {t('contact.liveChat.description')}

- Iniciar Chat → + {t('contact.liveChat.action')} →

- Email + {t('contact.email.title')}

- Respuesta en menos de 4 horas + {t('contact.email.description')}

- Enviar Email → + {t('contact.email.action')} →
@@ -368,13 +291,13 @@ const HelpCenterPage: React.FC = () => {

- Documentación + {t('contact.documentation.title')}

- Guías completas y tutoriales + {t('contact.documentation.description')}

- Ver Docs → + {t('contact.documentation.action')} →
@@ -389,12 +312,12 @@ const HelpCenterPage: React.FC = () => {

- Horario de Atención + {t('helpCenter.contactHours')}

-

Chat en Vivo: Lunes a Viernes 9:00 - 21:00, Sábados 10:00 - 18:00

-

Email: 24/7 (respuesta en menos de 4 horas en horario laboral)

-

Teléfono: Lunes a Viernes 10:00 - 19:00 (solo para clientes activos)

+

{t('contact.liveChat.title')}: {t('contact.hours.liveChat')}

+

{t('contact.email.title')}: {t('contact.hours.email')}

+

Teléfono: {t('contact.hours.phone')}

From 2378a8645fc56dbaf6f3bf02728ca1a13e949afe Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 18 Nov 2025 12:19:04 +0000 Subject: [PATCH 3/4] Fix build errors and complete help documentation setup - Fix JSON syntax error in Basque translation file (eu/help.json) * Fixed multi-line string that was breaking JSON parsing - Add missing frontend/src/lib/utils.ts file * Created cn() utility function for merging CSS class names * Required by UI components (Progress, Alert, Accordion) - Update package-lock.json from npm install These changes fix build errors and ensure the help/docs pages work correctly with i18n translations. --- frontend/package-lock.json | 38 +++++++------------------------ frontend/src/lib/utils.ts | 6 +++++ frontend/src/locales/eu/help.json | 4 +--- 3 files changed, 15 insertions(+), 33 deletions(-) create mode 100644 frontend/src/lib/utils.ts diff --git a/frontend/package-lock.json b/frontend/package-lock.json index d9cb932f..29410397 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -138,7 +138,6 @@ "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", @@ -2268,6 +2267,7 @@ "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.6.tgz", "integrity": "sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==", "license": "MIT", + "peer": true, "dependencies": { "@formatjs/fast-memoize": "2.2.7", "@formatjs/intl-localematcher": "0.6.2", @@ -2280,6 +2280,7 @@ "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.7.tgz", "integrity": "sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.8.0" } @@ -2289,6 +2290,7 @@ "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.11.4.tgz", "integrity": "sha512-7kR78cRrPNB4fjGFZg3Rmj5aah8rQj9KPzuLsmcSn4ipLXQvC04keycTI1F7kJYDwIXtT2+7IDEto842CfZBtw==", "license": "MIT", + "peer": true, "dependencies": { "@formatjs/ecma402-abstract": "2.3.6", "@formatjs/icu-skeleton-parser": "1.8.16", @@ -2300,6 +2302,7 @@ "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.16.tgz", "integrity": "sha512-H13E9Xl+PxBd8D5/6TVUluSpxGNvFSlN/b3coUp0e0JpuWXXnQDiavIpY3NnvSp4xhEMoXyyBvVfdFX8jglOHQ==", "license": "MIT", + "peer": true, "dependencies": { "@formatjs/ecma402-abstract": "2.3.6", "tslib": "^2.8.0" @@ -2310,6 +2313,7 @@ "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.6.2.tgz", "integrity": "sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.8.0" } @@ -2738,7 +2742,6 @@ "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "license": "ISC", - "peer": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6041,7 +6044,6 @@ "resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-3.5.0.tgz", "integrity": "sha512-pKS3wZnJoL1iTyGBXAvCwduNNeghJHY6QSRSNNvpYnrrQrLZ6Owsazjyynu0e0ObRgks0i7Rv+pe2M7/MBTZpQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=12.16" } @@ -6131,7 +6133,6 @@ "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.89.0.tgz", "integrity": "sha512-SXbtWSTSRXyBOe80mszPxpEbaN4XPRUp/i0EfQK1uyj3KCk/c8FuPJNIRwzOVe/OU3rzxrYtiNabsAmk1l714A==", "license": "MIT", - "peer": true, "dependencies": { "@tanstack/query-core": "5.89.0" }, @@ -6624,7 +6625,6 @@ "integrity": "sha512-0dLEBsA1kI3OezMBF8nSsb7Nk19ZnsyE1LLhB8r27KbgU5H4pvuqZLdtE+aUkJVoXgTVuA+iLIwmZ0TuK4tx6A==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -6636,7 +6636,6 @@ "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", "devOptional": true, "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "^18.0.0" } @@ -6778,7 +6777,6 @@ "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, "license": "BSD-2-Clause", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/types": "6.21.0", @@ -7117,7 +7115,6 @@ "integrity": "sha512-xa57bCPGuzEFqGjPs3vVLyqareG8DX0uMkr5U/v5vLv5/ZUrBrPL7gzxzTJedEyZxFMfsozwTIbbYfEQVo3kgg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/utils": "1.6.1", "fast-glob": "^3.3.2", @@ -7215,7 +7212,6 @@ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -7758,7 +7754,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.3", "caniuse-lite": "^1.0.30001741", @@ -7964,7 +7959,6 @@ "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.0.tgz", "integrity": "sha512-aYeC/jDgSEx8SHWZvANYMioYMZ2KX02W6f6uVfyteuCGcadDLcYVHdfdygsTQkQ4TKn5lghoojAsPj5pu0SnvQ==", "license": "MIT", - "peer": true, "dependencies": { "@kurkle/color": "^0.3.0" }, @@ -8329,8 +8323,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/d3-array": { "version": "3.2.4", @@ -8512,7 +8505,6 @@ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.21.0" }, @@ -8555,7 +8547,8 @@ "version": "10.6.0", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/decimal.js-light": { "version": "2.5.1", @@ -9039,7 +9032,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -9143,7 +9135,6 @@ "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -10569,7 +10560,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.23.2" } @@ -10618,7 +10608,6 @@ "resolved": "https://registry.npmjs.org/immer/-/immer-10.1.3.tgz", "integrity": "sha512-tmjF/k8QDKydUlm3mZU+tjM6zeq9/fFpPqH9SzWmBnVVKsPBg/V66qsMwb3/Bo90cgUN+ghdVBess+hPsxUyRw==", "license": "MIT", - "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/immer" @@ -12777,7 +12766,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -12944,7 +12932,6 @@ "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -13217,7 +13204,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -13290,7 +13276,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -13344,7 +13329,6 @@ "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.63.0.tgz", "integrity": "sha512-ZwueDMvUeucovM2VjkCf7zIHcs1aAlDimZu2Hvel5C5907gUzMpm4xCrQXtRzCvsBqFjonB4m3x4LzCFI1ZKWA==", "license": "MIT", - "peer": true, "engines": { "node": ">=18.0.0" }, @@ -13936,7 +13920,6 @@ "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", "dev": true, "license": "MIT", - "peer": true, "bin": { "rollup": "dist/bin/rollup" }, @@ -14819,7 +14802,6 @@ "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -15351,7 +15333,6 @@ "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -15764,7 +15745,6 @@ "integrity": "sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", @@ -16328,7 +16308,6 @@ "integrity": "sha512-Ljb1cnSJSivGN0LqXd/zmDbWEM0RNNg2t1QW/XUhYl/qPqyu7CsqeWtqQXHVaJsecLPuDoak2oJcZN2QoRIOag==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/expect": "1.6.1", "@vitest/runner": "1.6.1", @@ -16710,7 +16689,6 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", diff --git a/frontend/src/lib/utils.ts b/frontend/src/lib/utils.ts new file mode 100644 index 00000000..9ad0df42 --- /dev/null +++ b/frontend/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { type ClassValue, clsx } from 'clsx'; +import { twMerge } from 'tailwind-merge'; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} diff --git a/frontend/src/locales/eu/help.json b/frontend/src/locales/eu/help.json index d8b55dc7..2946e006 100644 --- a/frontend/src/locales/eu/help.json +++ b/frontend/src/locales/eu/help.json @@ -146,9 +146,7 @@ { "category": "general", "question": "Zer da Bakery AI eta nola funtzionatzen du?", - "answer": "Bakery AI kudeaketa plataforma adimentsua da okindegieta - -rako. Adimen artifiziala erabiltzen du zure produktuen eskaria aurreikusteko, ekoizpena optimizatzeko, hondakinak murrizteko eta errentagarritasuna handitzeko." + "answer": "Bakery AI kudeaketa plataforma adimentsua da okindegetarako. Adimen artifiziala erabiltzen du zure produktuen eskaria aurreikusteko, ekoizpena optimizatzeko, hondakinak murrizteko eta errentagarritasuna handitzeko." }, { "category": "general", From 47bde56d2a3c66cc00f69785ab9251c2891cdf0b Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 18 Nov 2025 12:35:22 +0000 Subject: [PATCH 4/4] Add article detail view to documentation page - Add state to track selected article (sectionId + articleId) - Implement renderArticleContent() function to display full article content - Display intro, steps, tips, and conclusion sections from translations - Add click handlers to article cards to show detail view - Add back button to return to article list - Reset selected article when switching sections in sidebar Fixes issue where clicking on article cards only showed metadata instead of full content with steps, tips, and detailed information. --- .../src/pages/public/DocumentationPage.tsx | 246 +++++++++++++++--- 1 file changed, 204 insertions(+), 42 deletions(-) diff --git a/frontend/src/pages/public/DocumentationPage.tsx b/frontend/src/pages/public/DocumentationPage.tsx index 673b49c5..4d6ea395 100644 --- a/frontend/src/pages/public/DocumentationPage.tsx +++ b/frontend/src/pages/public/DocumentationPage.tsx @@ -41,6 +41,7 @@ interface DocArticle { const DocumentationPage: React.FC = () => { const { t } = useTranslation('help'); const [activeSection, setActiveSection] = useState('getting-started'); + const [selectedArticle, setSelectedArticle] = useState<{ sectionId: string; articleId: string } | null>(null); const sections: DocSection[] = [ { @@ -287,6 +288,160 @@ const DocumentationPage: React.FC = () => { return t(`difficulty.${difficulty}` as any) || difficulty; }; + const getCategoryKey = (sectionId: string): string => { + const categoryMap: Record = { + 'getting-started': 'gettingStarted', + 'features': 'features', + 'analytics': 'analytics', + 'account': 'account', + 'billing': 'billing', + 'privacy': 'privacy', + }; + return categoryMap[sectionId] || sectionId; + }; + + const getArticleKey = (articleId: string): string => { + const articleMap: Record = { + 'quick-start': 'quickStart', + 'import-data': 'importData', + 'products-catalog': 'productsCatalog', + 'first-prediction': 'firstPrediction', + 'demand-forecasting': 'demandForecasting', + 'production-planning': 'productionPlanning', + 'inventory-management': 'inventoryManagement', + 'pos-integration': 'posIntegration', + 'waste-tracking': 'wasteTracking', + 'dashboard-overview': 'dashboardOverview', + 'reports': 'reports', + 'ai-insights': 'aiInsights', + 'performance-metrics': 'performanceMetrics', + }; + return articleMap[articleId] || articleId; + }; + + const handleArticleClick = (sectionId: string, articleId: string) => { + setSelectedArticle({ sectionId, articleId }); + window.scrollTo({ top: 0, behavior: 'smooth' }); + }; + + const handleBackToList = () => { + setSelectedArticle(null); + }; + + const renderArticleContent = () => { + if (!selectedArticle) return null; + + const categoryKey = getCategoryKey(selectedArticle.sectionId); + const articleKey = getArticleKey(selectedArticle.articleId); + const contentPath = `articles.${categoryKey}.${articleKey}.content`; + + const content: any = t(contentPath, { returnObjects: true }); + const article = sections + .find((s) => s.id === selectedArticle.sectionId) + ?.articles.find((a) => a.id === selectedArticle.articleId); + + if (!article || !content) return null; + + return ( +
+ {/* Back Button */} + + + {/* Article Header */} +
+

+ {article.title} +

+

{article.description}

+
+ + + {article.readTime} + + + {getDifficultyLabel(article.difficulty)} + +
+
+ + {/* Article Content */} +
+ {/* Intro */} + {content.intro && ( +
+

+ {content.intro} +

+
+ )} + + {/* Steps */} + {content.steps && Array.isArray(content.steps) && ( +
+ {content.steps.map((step: any, index: number) => ( +
+

+ {step.title} +

+

+ {step.description} +

+
+ ))} +
+ )} + + {/* Tips */} + {content.tips && Array.isArray(content.tips) && content.tips.length > 0 && ( +
+

+ + Consejos Útiles +

+
    + {content.tips.map((tip: string, index: number) => ( +
  • + + {tip} +
  • + ))} +
+
+ )} + + {/* Conclusion */} + {content.conclusion && ( +
+

+ {content.conclusion} +

+
+ )} +
+ + {/* Back to List Button */} +
+ +
+
+ ); + }; + return ( { {sections.map((section) => (
- - ))} + + ))} + - + ) )}