+ {t('bakery_type.subtitle', 'Esto nos ayudará a personalizar tu experiencia')} +
++ {t('bakery_type.help_title', '¿No estás seguro?')} +
++ {t('bakery_type.help_desc', 'Puedes elegir "Panadería Mixta" si combinas producción propia con reventa de productos. Podrás personalizar más adelante.')} +
++ {t('data_source.subtitle', 'Elige el método que mejor se adapte a tu situación')} +
++ {t('data_source.ai_info', 'Necesitarás un archivo CSV, Excel o JSON con tus datos de ventas históricos. La IA analizará tus productos y configurará automáticamente el inventario.')} +
++ {t('data_source.manual_info', 'Te guiaremos paso a paso para agregar proveedores, ingredientes y recetas. Incluimos plantillas para facilitar el proceso.')} +
++ {t('dashboard:config.subtitle', 'Configure essential features to get started')} +
++ 👉 {t('dashboard:config.next_step', 'Next Step')} +
++ {nextIncompleteSection.nextAction} +
+ ++ 🎉 {t('dashboard:config.features_unlocked', 'Features Unlocked!')} +
++ {incompleteIngredients.length === 1 + ? 'Hay 1 ingrediente que fue agregado rápidamente y necesita información completa.' + : `Hay ${incompleteIngredients.length} ingredientes que fueron agregados rápidamente y necesitan información completa.`} +
+ + {/* Incomplete ingredients list */} ++ Información faltante típica: + {' '}Stock inicial, costo por unidad, vida útil, punto de reorden, requisitos de almacenamiento +
++ Agrega varios ingredientes a la vez para ahorrar tiempo +
++ {getContextMessage()} +
+{t('common:loading', 'Cargando tu progreso...')}
++ {t('onboarding:errors.try_again', 'No pudimos cargar tu progreso. Puedes continuar desde el inicio.')} +
+ ++ {t('onboarding:wizard.subtitle', 'Configura tu sistema paso a paso')} +
++ {currentStep.description} +
++ {t( + 'onboarding:bakery_type.subtitle', + 'Esto nos ayudará a personalizar la experiencia y mostrarte solo las funciones que necesitas' + )} +
++ {type.description} +
++ {t( + 'onboarding:bakery_type.help_text', + '💡 No te preocupes, siempre puedes cambiar esto más tarde en la configuración' + )} +
+ + {/* Continue Button */} ++ {selectedType === 'production' && + t( + 'onboarding:bakery_type.production.selected_info', + 'Configuraremos un sistema completo de gestión de recetas, ingredientes y producción adaptado a tu flujo de trabajo.' + )} + {selectedType === 'retail' && + t( + 'onboarding:bakery_type.retail.selected_info', + 'Configuraremos un sistema simple enfocado en control de inventario, horneado y ventas sin la complejidad de recetas.' + )} + {selectedType === 'mixed' && + t( + 'onboarding:bakery_type.mixed.selected_info', + 'Configuraremos un sistema flexible que te permite gestionar tanto producción propia como productos externos según tus necesidades.' + )} +
+- Tu panadería {currentTenant?.name} está lista para usar nuestro sistema de gestión inteligente. + {t('onboarding:completion.all_configured', 'Has configurado exitosamente {{name}} con nuestro sistema de gestión inteligente. Todo está listo para empezar a optimizar tu panadería.', { name: currentTenant?.name })}
{t('onboarding:completion.bakery_info', 'Información de Panadería')}
+{t('onboarding:completion.bakery_info_desc', 'Datos básicos registrados')}
+- Tu información empresarial está configurada y lista -
-{t('onboarding:completion.inventory_ai', 'Inventario con IA')}
+{t('onboarding:completion.inventory_ai_desc', 'Productos analizados y categorizados')}
+- Tus productos base están configurados con datos iniciales -
-{t('onboarding:completion.suppliers_added', 'Proveedores Agregados')}
+{t('onboarding:completion.suppliers_added_desc', 'Red de suministro configurada')}
+{t('onboarding:completion.recipes_configured', 'Recetas Configuradas')}
+{t('onboarding:completion.recipes_configured_desc', 'Producción lista para usar')}
+{t('onboarding:completion.quality_set', 'Calidad Establecida')}
+{t('onboarding:completion.quality_set_desc', 'Estándares definidos')}
+{t('onboarding:completion.team_invited', 'Equipo Invitado')}
+{t('onboarding:completion.team_invited_desc', 'Colaboradores configurados')}
+{t('onboarding:completion.ml_model_trained', 'Modelo IA Entrenado')}
+{t('onboarding:completion.ml_model_trained_desc', 'Predicciones personalizadas activas')}
+- Tu modelo de inteligencia artificial está listo para predecir demanda -
Explora el Dashboard
-- Revisa las métricas principales y el estado de tu inventario -
-Registra Ventas Diarias
-- Mantén tus datos actualizados para mejores predicciones -
-Configura Alertas
-- Recibe notificaciones sobre inventario bajo y productos próximos a vencer -
++ {t('onboarding:completion.explore_message', 'Ahora puedes explorar el panel de control y comenzar a gestionar tu panadería con inteligencia artificial.')} +
++ {t( + 'onboarding:data_source.subtitle', + 'Elige el método que mejor se adapte a tu situación actual' + )} +
++ {option.description} +
++ {t( + 'onboarding:data_source.help_text', + '💡 Puedes cambiar entre métodos en cualquier momento durante la configuración' + )} +
++ {t( + 'onboarding:stock.subtitle', + 'Ingresa las cantidades actuales de cada producto. Esto permite que el sistema rastree el inventario desde hoy.' + )} +
++ {t('onboarding:stock.info_title', '¿Por qué es importante?')} +
++ {t( + 'onboarding:stock.info_text', + 'Sin niveles de stock iniciales, el sistema no puede alertarte sobre stock bajo, planificar producción o calcular costos correctamente. Tómate un momento para ingresar tus cantidades actuales.' + )} +
++ {t('onboarding:stock.incomplete_warning', 'Faltan {count} productos por completar', { + count: productsWithoutStock.length, + })} +
++ {t( + 'onboarding:stock.incomplete_help', + 'Puedes continuar, pero recomendamos ingresar todas las cantidades para un mejor control de inventario.' + )} +
++ {t( + 'onboarding:categorization.subtitle', + 'Ayúdanos a entender qué son ingredientes (para usar en recetas) y qué son productos terminados (para vender)' + )} +
++ {t('onboarding:categorization.info_title', '¿Por qué es importante?')} +
++ {t( + 'onboarding:categorization.info_text', + 'Los ingredientes se usan en recetas para crear productos. Los productos terminados se venden directamente. Esta clasificación permite calcular costos y planificar producción correctamente.' + )} +
++ {uncategorizedProducts.length} {t('common:items', 'items')} +
++ {ingredients.length} {t('common:items', 'items')} +
++ {t('onboarding:categorization.ingredients_help', 'Para usar en recetas')} +
+ ++ {finishedProducts.length} {t('common:items', 'items')} +
++ {t('onboarding:categorization.finished_products_help', 'Para vender directamente')} +
+ ++ {t( + 'onboarding:categorization.incomplete_warning', + '⚠️ Categoriza todos los productos para continuar' + )} +
+ )} ++ {t( + 'onboarding:processes.subtitle', + 'Define los procesos que usas para transformar productos pre-elaborados en productos terminados' + )} +
++ {t('onboarding:processes.templates.subtitle', 'Haz clic en una plantilla para agregarla')} +
++ + {t('onboarding:processes.source', 'Desde')}: + {' '} + {process.sourceProduct} +
+ )} + {process.finishedProduct && ( ++ + {t('onboarding:processes.finished', 'Hasta')}: + {' '} + {process.finishedProduct} +
+ )} +{process.instructions}
+ )} ++ {processes.length === 0 + ? t('onboarding:processes.hint', '💡 Agrega al menos un proceso para continuar') + : t('onboarding:processes.count', `${processes.length} proceso(s) configurado(s)`)} +
+- ¡Perfecto! Hemos analizado automáticamente tus datos de ventas y generado estas sugerencias de inventario inteligentes. - Revisa y selecciona los artículos que te gustaría agregar a tu inventario. + {/* Why This Matters */} +
+ Revisa y edita los ingredientes sugeridos por IA. Puedes agregar más ingredientes manualmente. Cuando hagas clic en "Siguiente", se crearán todos los ingredientes.
- {selectedCount} de {inventoryItems.length} artículos seleccionados -
-- Los artículos con alta confianza están preseleccionados -
-- {item.category} • Unidad: {item.unit_of_measure} -
-+ {item.category} • {item.unit_of_measure} +
+{stockErrors.current_quantity}
+ )} +{stockErrors.expiration_date}
+ )} + {stockErrors.expiration_warning && ( ++ + {stockErrors.expiration_warning} +
+ )} ++ + {t('setup_wizard:inventory.stock_help', 'El seguimiento de caducidad ayuda a prevenir desperdicios y habilita gestión de inventario FIFO')} +
+ + {/* Error Display */} + {stockErrors.submit && ( ++ No hay ingredientes en la lista todavía +
+{error}
+ Agrega al menos 1 ingrediente para continuar +
+ )} +- {t('onboarding:steps.inventory_setup.file_format_guide.supported_formats.title', 'Formatos Soportados')}:{' '} - CSV, JSON, Excel (XLSX) • {t('onboarding:steps.inventory_setup.file_format_guide.supported_formats.max_size', 'Tamaño máximo: 10MB')} + Formatos Soportados:{' '} + CSV, JSON, Excel (XLSX) • Tamaño máximo: 10MB
- {t('onboarding:steps.inventory_setup.file_format_guide.required_columns.title', 'Columnas Requeridas')}:{' '} - {t('onboarding:steps.inventory_setup.file_format_guide.required_columns.date', 'Fecha')},{' '} - {t('onboarding:steps.inventory_setup.file_format_guide.required_columns.product', 'Nombre del Producto')},{' '} - {t('onboarding:steps.inventory_setup.file_format_guide.required_columns.quantity', 'Cantidad Vendida')} + Columnas Requeridas:{' '} + Fecha, Nombre del Producto, Cantidad Vendida
- • {t('onboarding:steps.inventory_setup.file_format_guide.required_columns.date', 'Fecha')}:{' '} - - {t('onboarding:steps.inventory_setup.file_format_guide.required_columns.date_examples', 'date, fecha, data')} - -
-- • {t('onboarding:steps.inventory_setup.file_format_guide.required_columns.product', 'Nombre del Producto')}:{' '} - - {t('onboarding:steps.inventory_setup.file_format_guide.required_columns.product_examples', 'product, producto, product_name')} - -
-- • {t('onboarding:steps.inventory_setup.file_format_guide.required_columns.quantity', 'Cantidad Vendida')}:{' '} - - {t('onboarding:steps.inventory_setup.file_format_guide.required_columns.quantity_examples', 'quantity, cantidad, quantity_sold')} - -
-• {t('onboarding:steps.inventory_setup.file_format_guide.optional_columns.revenue', 'Ingresos (revenue, ingresos, ventas)')}
-• {t('onboarding:steps.inventory_setup.file_format_guide.optional_columns.unit_price', 'Precio Unitario (unit_price, precio, price)')}
-• {t('onboarding:steps.inventory_setup.file_format_guide.optional_columns.category', 'Categoría (category, categoria)')}
-• {t('onboarding:steps.inventory_setup.file_format_guide.optional_columns.sku', 'SKU del Producto')}
-• {t('onboarding:steps.inventory_setup.file_format_guide.optional_columns.location', 'Ubicación/Tienda')}
-{t('onboarding:steps.inventory_setup.file_format_guide.date_formats.formats', 'YYYY-MM-DD, DD/MM/YYYY, MM/DD/YYYY, DD-MM-YYYY, y más')}
-{t('onboarding:steps.inventory_setup.file_format_guide.date_formats.with_time', 'También se admiten formatos con hora')}
-✓ {t('onboarding:steps.inventory_setup.file_format_guide.features.multilingual', 'Detección multiidioma de columnas')}
-✓ {t('onboarding:steps.inventory_setup.file_format_guide.features.validation', 'Validación automática con reporte detallado')}
-✓ {t('onboarding:steps.inventory_setup.file_format_guide.features.ai_classification', 'Clasificación de productos con IA')}
-✓ {t('onboarding:steps.inventory_setup.file_format_guide.features.inventory_suggestions', 'Sugerencias inteligentes de inventario')}
-✓ Detección multiidioma de columnas
+✓ Validación automática con reporte detallado
+✓ Clasificación de productos con IA
+✓ Sugerencias inteligentes de inventario
Drop your sales data here
-or click to browse files
+Arrastra tus datos de ventas aquí
+o haz clic para seleccionar archivos
- Supported formats: CSV, JSON (max 100MB)
- Auto-validates and generates suggestions
+ Formatos soportados: CSV, JSON (máx 100MB)
+ Validación y sugerencias automáticas
Total records: {validationResult.total_records}
-Valid records: {validationResult.valid_records}
+Registros totales: {validationResult.total_records}
+Registros válidos: {validationResult.valid_records}
{validationResult.invalid_records > 0 && (- Invalid records: {validationResult.invalid_records} + Registros inválidos: {validationResult.invalid_records}
)} - {validationResult.warnings && validationResult.warnings.length > 0 && ( -Warnings:
-+ Comienza con una receta clásica o crea la tuya desde cero +
++ {template.description} +
+No se encontraron recetas
++ {t('common:loading', 'Loading your setup progress...')} +
++ {currentStep.description} +
++ {t('setup_wizard:subtitle', 'Complete setup to unlock all features')} +
++ {t('setup_wizard:completion.subtitle', "Congratulations! Your bakery management system is ready to use. Let's get started with your first tasks.")} +
++ {step.description} +
++ {tip.description} +
++ {t('setup_wizard:completion.thanks', 'Thank you for completing the setup! Happy baking! 🥖🥐🍰')} +
++ {t('setup_wizard:inventory.why', 'Inventory items are the building blocks of your recipes. Once set up, the system will track quantities, alert you when stock is low, and help you calculate recipe costs.')} +
++ {t('setup_wizard:inventory.quick_start_desc', 'Import common ingredients to get started quickly')} +
+{stockErrors.current_quantity}
+ )} +{stockErrors.expiration_date}
+ )} + {stockErrors.expiration_warning && ( +
+
+
{stockErrors.submit}
+ )} ++ {t('common:loading', 'Loading...')} +
++ {t('setup_wizard:quality.why', 'Quality checks ensure consistent output and help you identify issues early. Define what "good" looks like for each stage of production.')} +
++ {t('common:loading', 'Loading...')} +
++ {t('setup_wizard:recipes.why', 'Recipes connect your inventory to production. The system will calculate exact costs per item, track ingredient consumption, and help you optimize your menu profitability.')} +
++ {t('setup_wizard:recipes.quick_start_desc', 'Start with proven recipes and customize to your needs')} +
+{template.description}
+Ingredients:
+Instructions:
+{template.instructions}
+Tips:
++ {t('setup_wizard:recipes.prerequisites_desc', 'You need at least 2 ingredients in your inventory before creating recipes. Go back to the Inventory step to add more ingredients.')} +
++ {t('common:loading', 'Loading...')} +
++ {t('setup_wizard:review.subtitle', "Let's review everything you've configured. You can go back and make changes if needed.")} +
++ {t('common:loading', 'Loading...')} +
+{t('setup_wizard:review.suppliers', 'Suppliers')}
+{suppliers.length}
+{t('setup_wizard:review.ingredients', 'Ingredients')}
+{ingredients.length}
+{t('setup_wizard:review.recipes', 'Recipes')}
+{recipes.length}
+{t('setup_wizard:review.quality', 'Quality Checks')}
+{qualityTemplates.length}
+{supplier.name}
+ {supplier.email && ( +{supplier.email}
+ )} ++ {t('setup_wizard:review.total_cost', 'Total value')}: ${totalCost.toFixed(2)} +
+ )} +{ingredient.name}
+{ingredient.unit_of_measure}
++ {t('setup_wizard:review.avg_ingredients', 'Avg ingredients')}: {avgRecipeIngredients.toFixed(1)} +
+ )} +{recipe.name}
+{t('setup_wizard:review.cost', 'Cost')}
+${Number(recipe.estimated_cost_per_unit).toFixed(2)}
+{template.name}
+{template.check_type}
++ {t('setup_wizard:review.ready_message', + "You've successfully configured {{suppliers}} suppliers, {{ingredients}} ingredients, and {{recipes}} recipes. Click 'Complete Setup' to finish and start using the system.", + { suppliers: suppliers.length, ingredients: ingredients.length, recipes: recipes.length } + )} +
+
+
+ {t('setup_wizard:suppliers.why', 'Suppliers are the source of your ingredients. Setting them up now lets you track costs, manage orders, and analyze supplier performance.')} +
++ {t('common:loading', 'Loading...')} +
++ {t('setup_wizard:suppliers.add_minimum', 'Add at least 1 supplier to continue')} +
+ )} + ++ {t('setup_wizard:team.why', 'Adding team members allows you to assign tasks, track who does what, and give everyone the tools they need to work efficiently.')} +
+{member.email}
++ {t('setup_wizard:team.skip_message', 'Working alone for now? No problem!')} +
++ {t('setup_wizard:team.skip_hint', 'You can always invite team members later from Settings → Team')} +
++ {t('setup_wizard:welcome.subtitle', 'Now let\'s set up your bakery\'s daily operations so the system can help you manage:')} +
++ {t('setup_wizard:welcome.feature_inventory_desc', 'Real-time stock levels & reorder alerts')} +
++ {t('setup_wizard:welcome.feature_recipes_desc', 'Automatic cost calculation & profitability analysis')} +
++ {t('setup_wizard:welcome.feature_quality_desc', 'Track standards & production quality')} +
++ {t('setup_wizard:welcome.feature_team_desc', 'Assign tasks & track responsibilities')} +
++ {t('setup_wizard:welcome.save_resume', 'You can save progress and resume anytime')} +
++ Carga múltiples proveedores desde un archivo CSV +
++ Descarga nuestra plantilla CSV con ejemplos y formato correcto +
++ Arrastra y suelta o haz clic para seleccionar +
+ +{parsedSuppliers.length}
+{validCount}
+{invalidCount}
++ Tipo: {supplier.data.supplier_type} +
+ )} + {supplier.errors.length > 0 && ( +• {error}
+ ))} ++ {wizardName} +
++ Progreso guardado automáticamente +
++ Guardado {formatTimeAgo(lastSaved)} +
++ Encontramos un borrador de este formulario. ¿Deseas continuar desde donde lo dejaste o empezar de nuevo? +
++ {toast.message} +
+ )} ++ {currentStep.description || `Step ${currentStepIndex + 1} of ${steps.length}`} +
+