Improve backend

This commit is contained in:
Urtzi Alfaro
2025-11-18 07:17:17 +01:00
parent d36f2ab9af
commit 5c45164c8e
61 changed files with 9846 additions and 495 deletions

View File

@@ -1,19 +1,20 @@
{
"hero": {
"pre_headline": "For Bakeries Losing €500-2,000/Month on Waste",
"pre_headline": "For Bakeries Losing Money on Waste",
"scarcity": "Only 12 spots left out of 20 • 3 months FREE",
"scarcity_badge": "🔥 Only 12 spots left out of 20 in pilot program",
"badge": "Advanced AI for Modern Bakeries",
"title_line1": "Increase Profits,",
"title_line2": "Reduce Waste",
"title_option_a_line1": "Save €500-2,000 Per Month",
"title_option_a_line2": "By Producing Exactly What You'll Sell",
"title_option_a_line1": "Produce Exactly What You'll Sell",
"title_option_a_line2": "and Save Thousands",
"title_option_b": "Stop Guessing How Much to Bake Every Day",
"subtitle": "AI that predicts demand using local data so you produce exactly what you'll sell. Reduce waste, improve margins, save time.",
"subtitle_option_a": "The first AI that knows your neighborhood: nearby schools, local weather, your competition, events. Automatic system every morning. Ready at 6 AM.",
"subtitle_option_a": "AI that knows your neighborhood. Predictions ready every morning at 6 AM.",
"subtitle_option_b": "AI that knows your area predicts sales with 92% accuracy. Wake up with your plan ready: what to make, what to order, when it arrives. Save €500-2,000/month on waste.",
"cta_primary": "Join Pilot Program",
"cta_secondary": "See How It Works (2 min)",
"cta_demo": "See Demo",
"social_proof": {
"bakeries": "20 bakeries already saving €1,500/month on average",
"accuracy": "92% accurate predictions (vs 60% generic systems)",

View File

@@ -97,6 +97,7 @@
},
"actions": {
"approve": "Approve",
"reject": "Reject",
"view_details": "View Details",
"modify": "Modify",
"dismiss": "Dismiss",

View File

@@ -16,7 +16,26 @@
"steps": {
"productType": "Product Type",
"basicInfo": "Basic Information",
"stockConfig": "Stock Configuration"
"stockConfig": "Stock Configuration",
"initialStock": "Initial Stock"
},
"initialStockDescription": "Add one or more lots to register the initial inventory",
"stockConfig": {
"product": "Product",
"totalQuantity": "Total Quantity",
"totalValue": "Total Value",
"lotsRegistered": "Lots Registered",
"lot": "Lot",
"remove": "Remove",
"quantity": "Quantity",
"unitCost": "Unit Cost ($)",
"lotNumber": "Lot Number",
"expirationDate": "Expiration Date",
"location": "Location",
"lotValue": "Lot value:",
"addInitialLot": "Add Initial Lot",
"addAnotherLot": "Add Another Lot",
"skipMessage": "You can skip this step if you prefer to add the initial stock later"
},
"typeDescriptions": {
"ingredient": "Raw materials and ingredients used in recipes",
@@ -499,6 +518,125 @@
}
}
},
"salesEntry": {
"title": "Sales Record",
"steps": {
"entryMethod": "Entry Method",
"entryMethodDescription": "Choose how to register sales",
"manualEntry": "Enter Data",
"manualEntryDescription": "Record sale details",
"fileUpload": "Upload File",
"fileUploadDescription": "Import sales from file",
"review": "Review",
"reviewDescription": "Confirm data before saving"
},
"entryMethod": {
"title": "How do you want to register sales?",
"subtitle": "Choose the method that best suits your needs",
"manual": {
"title": "Manual Entry",
"description": "Enter one or more sales individually",
"benefits": {
"1": "Ideal for daily totals",
"2": "Detailed control per sale",
"3": "Easy and fast"
}
},
"file": {
"title": "Upload File",
"description": "Import from Excel or CSV",
"recommended": "⭐ Recommended for historical data",
"benefits": {
"1": "Ideal for historical data",
"2": "Bulk upload (hundreds of records)",
"3": "Saves significant time"
}
}
},
"manualEntry": {
"title": "Record Manual Sale",
"subtitle": "Enter sale details",
"fields": {
"saleDate": "Sale Date",
"paymentMethod": "Payment Method",
"notes": "Notes (Optional)",
"notesPlaceholder": "Additional information about this sale..."
},
"products": {
"title": "Products Sold",
"addProduct": "+ Add Product",
"loading": "Loading products...",
"noFinishedProducts": "No finished products available",
"addToInventory": "Add products to inventory first",
"noProductsAdded": "No products added",
"clickToBegin": "Click 'Add Product' to begin",
"selectProduct": "Select product...",
"quantity": "Qty.",
"price": "Price",
"removeProduct": "Remove product",
"total": "Total:"
}
},
"fileUpload": {
"title": "Upload Sales File",
"subtitle": "Import your sales from Excel or CSV",
"downloadTemplate": "Download CSV Template",
"downloading": "Downloading...",
"dragDrop": {
"title": "Drag a file here",
"subtitle": "or click to select",
"button": "Select File",
"supportedFormats": "Supported formats: CSV, Excel (.xlsx, .xls)"
},
"validated": {
"title": "✓ File validated successfully",
"recordsFound": "Records found:",
"validRecords": "Valid records:",
"errors": "Errors:"
},
"validateButton": "Validate File",
"validating": "Validating...",
"importButton": "Import Data",
"importing": "Importing...",
"instructions": {
"title": "The file must contain the columns:",
"columns": "date, product, quantity, unit_price, payment_method"
}
},
"review": {
"title": "Review and Confirm",
"subtitle": "Verify that all information is correct",
"fields": {
"date": "Date:",
"paymentMethod": "Payment Method:",
"products": "Products",
"total": "Total:",
"notes": "Notes:"
},
"imported": {
"title": "✓ File imported successfully",
"recordsImported": "Records imported:",
"recordsFailed": "Records failed:"
}
},
"paymentMethods": {
"cash": "Cash",
"card": "Card",
"mobile": "Mobile Payment",
"transfer": "Transfer",
"other": "Other"
},
"messages": {
"errorObtainingTenantInfo": "Could not obtain tenant information",
"errorLoadingProducts": "Error loading products",
"salesEntryCreatedSuccessfully": "Sales entry created successfully",
"errorCreatingSalesEntry": "Error creating sales entry",
"errorValidatingFile": "Error validating file",
"errorImportingFile": "Error importing file",
"fileValidatedSuccessfully": "File validated successfully",
"fileImportedSuccessfully": "File imported successfully"
}
},
"tooltips": {
"averageCost": "Average cost per unit based on purchase history",
"standardCost": "Standard/expected cost per unit for costing calculations",

View File

@@ -1,19 +1,20 @@
{
"hero": {
"pre_headline": "Para Panaderías que Pierden €500-2,000/Mes en Desperdicios",
"pre_headline": "Para Panaderías que Pierden Dinero en Desperdicios",
"scarcity": "Solo 12 plazas restantes de 20 • 3 meses GRATIS",
"scarcity_badge": "🔥 Solo 12 plazas restantes de 20 en el programa piloto",
"badge": "IA Avanzada para Panaderías Modernas",
"title_line1": "Aumenta Ganancias,",
"title_line2": "Reduce Desperdicios",
"title_option_a_line1": "Ahorra €500-2,000 al Mes",
"title_option_a_line2": "Produciendo Exactamente Lo Que Venderás",
"title_option_a_line1": "Produce Exactamente Lo Que Venderás",
"title_option_a_line2": "y Ahorra Miles",
"title_option_b": "Deja de Adivinar Cuánto Hornear Cada Día",
"subtitle": "IA que predice demanda con datos de tu zona para que produzcas exactamente lo que vas a vender. Reduce desperdicios, mejora márgenes y ahorra tiempo.",
"subtitle_option_a": "La primera IA que conoce tu barrio: colegios cerca, clima local, tu competencia, eventos. Sistema automático cada mañana. Listo a las 6 AM.",
"subtitle_option_a": "IA que conoce tu barrio. Predicciones listas cada mañana a las 6 AM.",
"subtitle_option_b": "IA que conoce tu zona predice ventas con 92% de precisión. Despierta con tu plan listo: qué hacer, qué pedir, cuándo llegará. Ahorra €500-2,000/mes en desperdicios.",
"cta_primary": "Únete al Programa Piloto",
"cta_secondary": "Ver Cómo Funciona (2 min)",
"cta_demo": "Ver Demo",
"social_proof": {
"bakeries": "20 panaderías ya ahorran €1,500/mes de promedio",
"accuracy": "Predicciones 92% precisas (vs 60% sistemas genéricos)",

View File

@@ -97,6 +97,7 @@
},
"actions": {
"approve": "Aprobar",
"reject": "Rechazar",
"view_details": "Ver Detalles",
"modify": "Modificar",
"dismiss": "Descartar",

View File

@@ -6,7 +6,13 @@
"leaveEmptyForAutoGeneration": "Dejar vacío para auto-generar",
"readOnly": "Solo lectura - Auto-generado",
"willBeGeneratedAutomatically": "Se generará automáticamente",
"autoGeneratedOnSave": "Auto-generado al guardar"
"autoGeneratedOnSave": "Auto-generado al guardar",
"show": "Mostrar",
"hide": "Ocultar",
"next": "Siguiente",
"back": "Atrás",
"complete": "Completar",
"stepOf": "Paso {{current}} de {{total}}"
},
"inventory": {
"title": "Agregar Inventario",
@@ -16,7 +22,26 @@
"steps": {
"productType": "Tipo de Producto",
"basicInfo": "Información Básica",
"stockConfig": "Configuración de Stock"
"stockConfig": "Configuración de Stock",
"initialStock": "Stock Inicial"
},
"initialStockDescription": "Agrega uno o más lotes para registrar el inventario inicial",
"stockConfig": {
"product": "Producto",
"totalQuantity": "Cantidad Total",
"totalValue": "Valor Total",
"lotsRegistered": "Lotes Registrados",
"lot": "Lote",
"remove": "Eliminar",
"quantity": "Cantidad",
"unitCost": "Costo Unitario ($)",
"lotNumber": "Número de Lote",
"expirationDate": "Fecha de Expiración",
"location": "Ubicación",
"lotValue": "Valor del lote:",
"addInitialLot": "Agregar Lote Inicial",
"addAnotherLot": "Agregar Otro Lote",
"skipMessage": "Puedes saltar este paso si prefieres agregar el stock inicial más tarde"
},
"typeDescriptions": {
"ingredient": "Materias primas e ingredientes utilizados en recetas",
@@ -257,6 +282,20 @@
"subtitle": "Seleccione productos y cantidades",
"addItem": "Agregar Artículo",
"removeItem": "Eliminar artículo",
"customer": "Cliente",
"orderProducts": "Productos del Pedido",
"productNumber": "Producto #{{number}}",
"product": "Producto",
"productPlaceholder": "Seleccionar producto...",
"selectProduct": "Seleccionar producto...",
"quantity": "Cantidad",
"unitPrice": "Precio Unitario (€)",
"specialRequirements": "Requisitos Personalizados",
"specialRequirementsPlaceholder": "Instrucciones especiales...",
"customRequirements": "Requisitos Personalizados",
"customRequirementsPlaceholder": "Instrucciones especiales...",
"subtotal": "Subtotal",
"total": "Cantidad Total",
"fields": {
"product": "Producto",
"productPlaceholder": "Seleccionar producto...",
@@ -265,8 +304,7 @@
"customRequirements": "Requisitos Personalizados",
"customRequirementsPlaceholder": "Instrucciones especiales...",
"subtotal": "Subtotal"
},
"total": "Cantidad Total"
}
},
"deliveryPayment": {
"title": "Detalles de Entrega y Pago",
@@ -474,7 +512,7 @@
"description": "Crear una nueva receta o fórmula"
},
"equipment": {
"title": "Equipo",
"title": "Maquinaria",
"description": "Registrar equipo o maquinaria de panadería"
},
"quality-template": {
@@ -518,5 +556,516 @@
"parameters": "Parámetros de plantilla",
"thresholds": "Valores de umbral",
"scoringCriteria": "Criterios de puntuación personalizados"
},
"supplier": {
"title": "Agregar Proveedor",
"supplierDetails": "Detalles del Proveedor",
"subtitle": "Información esencial del proveedor",
"advancedOptionsTitle": "Opciones Avanzadas",
"advancedOptionsDescription": "Información adicional del proveedor y detalles comerciales",
"fields": {
"name": "Nombre del Proveedor",
"namePlaceholder": "Ej: Premium Flour Suppliers Ltd.",
"supplierCode": "Código de Proveedor",
"supplierCodePlaceholder": "SUP-001",
"supplierType": "Tipo de Proveedor",
"supplierTypeTooltip": "Categoría de productos/servicios que proporciona este proveedor",
"status": "Estado",
"paymentTerms": "Términos de Pago",
"currency": "Moneda",
"currencyPlaceholder": "EUR",
"leadTime": "Tiempo de Entrega Estándar (días)",
"leadTimeTooltip": "Tiempo típico de entrega desde el pedido hasta la entrega",
"contactPerson": "Persona de Contacto",
"contactPersonPlaceholder": "Nombre del contacto",
"email": "Correo Electrónico",
"emailPlaceholder": "contacto@proveedor.com",
"phone": "Teléfono",
"phonePlaceholder": "+1 234 567 8900",
"mobile": "Móvil",
"mobilePlaceholder": "+1 234 567 8900",
"taxId": "Identificación Fiscal",
"taxIdPlaceholder": "NIF/CIF",
"registrationNumber": "Número de Registro",
"registrationNumberPlaceholder": "Número de registro mercantil",
"website": "Sitio Web",
"websitePlaceholder": "https://www.proveedor.com",
"addressLine1": "Dirección - Línea 1",
"addressLine1Placeholder": "Dirección de calle",
"addressLine2": "Dirección - Línea 2",
"addressLine2Placeholder": "Suite, edificio, etc.",
"city": "Ciudad",
"cityPlaceholder": "Ciudad",
"state": "Estado/Provincia",
"statePlaceholder": "Estado",
"postalCode": "Código Postal",
"postalCodePlaceholder": "Código postal",
"country": "País",
"countryPlaceholder": "País",
"creditLimit": "Límite de Crédito",
"creditLimitPlaceholder": "10000.00",
"minOrderAmount": "Cantidad Mínima de Pedido",
"minOrderAmountPlaceholder": "100.00",
"deliveryArea": "Área de Entrega",
"deliveryAreaPlaceholder": "Ej: Área Metropolitana de Madrid",
"certifications": "Certificaciones",
"certificationsPlaceholder": "Ej: ISO 9001, HACCP, Orgánico (separado por comas)",
"specializations": "Especializaciones",
"specializationsPlaceholder": "Ej: Harinas orgánicas, Productos sin gluten (separado por comas)",
"notes": "Notas",
"notesPlaceholder": "Notas adicionales sobre este proveedor...",
"preferredSupplier": "Proveedor Preferido",
"autoApproveOrders": "Auto-aprobar Pedidos"
},
"supplierTypes": {
"ingredients": "Ingredientes",
"packaging": "Embalaje",
"equipment": "Equipo",
"services": "Servicios",
"utilities": "Servicios Públicos",
"multi": "Múltiple"
},
"statuses": {
"active": "Activo",
"inactive": "Inactivo",
"pending_approval": "Pendiente de Aprobación",
"suspended": "Suspendido",
"blacklisted": "En Lista Negra"
},
"paymentTerms": {
"cod": "Contra Reembolso",
"net_15": "Neto 15",
"net_30": "Neto 30",
"net_45": "Neto 45",
"net_60": "Neto 60",
"prepaid": "Prepago",
"credit_terms": "Términos de Crédito"
},
"steps": {
"supplierDetails": "Detalles del Proveedor",
"supplierDetailsDescription": "Información esencial del proveedor"
},
"messages": {
"errorObtainingTenantInfo": "No se pudo obtener información del tenant",
"supplierCreatedSuccessfully": "Proveedor creado exitosamente",
"errorCreatingSupplier": "Error al crear el proveedor"
}
},
"recipe": {
"title": "Agregar Receta",
"recipeDetails": "Detalles de la Receta",
"recipeDetailsDescription": "Información esencial sobre tu receta",
"ingredients": "Ingredientes",
"subtitle": "Información esencial sobre tu receta",
"advancedOptionsTitle": "Opciones Avanzadas",
"advancedOptionsDescription": "Campos opcionales para gestión detallada de recetas",
"fields": {
"name": "Nombre de la Receta",
"namePlaceholder": "Ej: Baguette Tradicional",
"category": "Categoría",
"finishedProduct": "Producto Terminado",
"finishedProductTooltip": "El producto final que produce esta receta. Debe crearse primero en el inventario.",
"selectProduct": "Seleccionar producto...",
"yieldQuantity": "Cantidad de Rendimiento",
"yieldUnit": "Unidad de Rendimiento",
"prepTime": "Tiempo de Preparación (minutos)",
"prepTimePlaceholder": "30",
"cookTime": "Tiempo de Cocción (minutos)",
"cookTimePlaceholder": "45",
"restTime": "Tiempo de Reposo (minutos)",
"restTimeTooltip": "Tiempo para levar, enfriar o reposar",
"restTimePlaceholder": "60",
"totalTime": "Tiempo Total (minutos)",
"totalTimePlaceholder": "135",
"instructions": "Instrucciones",
"instructionsPlaceholder": "Instrucciones de preparación paso a paso...",
"recipeCode": "Código/SKU de Receta",
"recipeCodePlaceholder": "RCP-001",
"version": "Versión",
"versionPlaceholder": "1.0",
"difficulty": "Nivel de Dificultad (1-5)",
"difficultyTooltip": "1 = Muy Fácil, 5 = Nivel Experto",
"servesCount": "Número de Porciones",
"servesCountPlaceholder": "12",
"batchSizeMultiplier": "Multiplicador de Tamaño de Lote",
"batchSizeMultiplierTooltip": "Factor de escalado predeterminado para producción en lote",
"batchSizeMultiplierPlaceholder": "1.0",
"minBatchSize": "Tamaño Mínimo de Lote",
"minBatchSizePlaceholder": "1",
"maxBatchSize": "Tamaño Máximo de Lote",
"maxBatchSizePlaceholder": "100",
"optimalTemp": "Temperatura Óptima de Producción (°C)",
"optimalTempPlaceholder": "22",
"optimalHumidity": "Humedad Óptima (%)",
"optimalHumidityPlaceholder": "65",
"targetMargin": "Margen Objetivo (%)",
"targetMarginPlaceholder": "50",
"description": "Descripción",
"descriptionPlaceholder": "Descripción detallada de la receta...",
"prepNotes": "Notas de Preparación",
"prepNotesPlaceholder": "Consejos y notas para la preparación...",
"storageInstructions": "Instrucciones de Almacenamiento",
"storageInstructionsPlaceholder": "Cómo almacenar el producto terminado...",
"allergens": "Alérgenos",
"allergensPlaceholder": "Ej: gluten, lácteos, huevos (separado por comas)",
"dietaryTags": "Etiquetas Dietéticas",
"dietaryTagsPlaceholder": "Ej: vegano, sin gluten, orgánico (separado por comas)",
"seasonalItem": "Artículo Estacional",
"signatureItem": "Artículo Insignia",
"seasonStartMonth": "Mes de Inicio de Temporada",
"seasonStartMonthPlaceholder": "Seleccionar mes...",
"seasonEndMonth": "Mes de Fin de Temporada",
"seasonEndMonthPlaceholder": "Seleccionar mes..."
},
"categories": {
"bread": "Pan",
"pastries": "Pastelería",
"cakes": "Pasteles",
"cookies": "Galletas",
"muffins": "Muffins",
"sandwiches": "Sándwiches",
"seasonal": "Estacional",
"other": "Otro"
},
"units": {
"units": "Unidades",
"pieces": "Piezas",
"kg": "Kilogramos (kg)",
"g": "Gramos (g)",
"l": "Litros (l)",
"ml": "Mililitros (ml)",
"cups": "Tazas",
"tablespoons": "Cucharadas",
"teaspoons": "Cucharaditas"
},
"ingredients": {
"title": "Ingredientes",
"noIngredientsAdded": "No se agregaron ingredientes",
"clickToBegin": "Haz clic en \"Agregar Ingrediente\" para comenzar",
"ingredient": "Ingrediente",
"ingredientPlaceholder": "Seleccionar...",
"quantity": "Cantidad",
"unit": "Unidad",
"notes": "Notas",
"notesPlaceholder": "Opcional",
"removeIngredient": "Eliminar ingrediente",
"addIngredient": "Agregar Ingrediente"
},
"qualityTemplates": {
"title": "Plantillas de Calidad (Opcional)",
"subtitle": "Selecciona plantillas de control de calidad para aplicar a esta receta",
"errorLoading": "Error al cargar plantillas de calidad",
"loading": "Cargando plantillas...",
"noTemplates": "No hay plantillas de calidad disponibles",
"createFromWizard": "Puedes crear plantillas desde el asistente principal",
"required": "Requerido",
"type": "Tipo:",
"everyXDays": "Cada X días",
"templatesSelected": "plantilla(s) seleccionada(s)"
},
"steps": {
"recipeDetails": "Detalles de la Receta",
"recipeDetailsDescription": "Nombre, categoría, rendimiento",
"ingredients": "Ingredientes",
"ingredientsDescription": "Selección y cantidades",
"qualityTemplates": "Plantillas de Calidad",
"qualityTemplatesDescription": "Controles de calidad aplicables"
},
"messages": {
"errorGettingTenant": "No se pudo obtener información del tenant",
"creatingRecipe": "Creando receta...",
"createRecipe": "Crear Receta",
"successCreate": "Receta creada exitosamente",
"errorCreate": "Error al crear la receta"
}
},
"customer": {
"title": "Agregar Cliente",
"customerDetails": "Detalles del Cliente",
"subtitle": "Información esencial del cliente",
"advancedOptionsTitle": "Opciones Avanzadas",
"advancedOptionsDescription": "Información adicional del cliente y términos comerciales",
"tooltips": {
"customerCode": "Identificador único para este cliente. Auto-generado pero editable."
},
"fields": {
"name": "Nombre del Cliente",
"namePlaceholder": "Ej: Restaurante El Molino",
"customerCode": "Código de Cliente",
"customerCodePlaceholder": "CUST-001",
"customerType": "Tipo de Cliente",
"email": "Correo Electrónico",
"emailPlaceholder": "contacto@empresa.com",
"phone": "Teléfono",
"phonePlaceholder": "+1 234 567 8900",
"country": "País",
"countryPlaceholder": "US",
"businessName": "Nombre Comercial",
"businessNamePlaceholder": "Nombre legal del negocio",
"addressLine1": "Dirección - Línea 1",
"addressLine1Placeholder": "Dirección de calle",
"addressLine2": "Dirección - Línea 2",
"addressLine2Placeholder": "Apartamento, suite, etc.",
"city": "Ciudad",
"cityPlaceholder": "Ciudad",
"state": "Estado/Provincia",
"statePlaceholder": "Estado",
"postalCode": "Código Postal",
"postalCodePlaceholder": "12345",
"taxId": "Identificación Fiscal",
"taxIdPlaceholder": "Número de identificación fiscal",
"businessLicense": "Licencia Comercial",
"businessLicensePlaceholder": "Número de licencia comercial",
"paymentTerms": "Términos de Pago",
"creditLimit": "Límite de Crédito (€)",
"creditLimitPlaceholder": "5000.00",
"discountPercentage": "Porcentaje de Descuento (%)",
"discountPercentagePlaceholder": "10",
"customerSegment": "Segmento de Cliente",
"priorityLevel": "Nivel de Prioridad",
"preferredDeliveryMethod": "Método de Entrega Preferido",
"specialInstructions": "Instrucciones Especiales",
"specialInstructionsPlaceholder": "Notas o instrucciones especiales para este cliente..."
},
"customerTypes": {
"individual": "Individual",
"business": "Empresa",
"central_bakery": "Panadería Central"
},
"paymentTerms": {
"immediate": "Inmediato",
"net_30": "Neto 30",
"net_60": "Neto 60"
},
"segments": {
"vip": "VIP",
"regular": "Regular",
"wholesale": "Mayorista"
},
"priorities": {
"high": "Alta",
"normal": "Normal",
"low": "Baja"
},
"deliveryMethods": {
"delivery": "Entrega a Domicilio",
"pickup": "Recogida",
"shipping": "Envío"
},
"steps": {
"customerDetails": "Detalles del Cliente",
"customerDetailsDescription": "Información de contacto y negocio"
},
"messages": {
"errorObtainingTenantInfo": "No se pudo obtener información del tenant",
"customerCreatedSuccessfully": "Cliente creado exitosamente",
"errorCreatingCustomer": "Error al crear el cliente"
}
},
"equipment": {
"title": "Agregar Maquinaria",
"equipmentDetails": "Detalles de la Maquinaria",
"subtitle": "Equipo de Panadería",
"fields": {
"type": "Tipo de Equipo",
"brand": "Marca/Modelo",
"brandPlaceholder": "Ej: Rational SCC 101",
"model": "Modelo",
"location": "Ubicación",
"locationPlaceholder": "Ej: Cocina principal",
"status": "Estado",
"purchaseDate": "Fecha de Compra"
},
"equipmentTypes": {
"oven": "Horno",
"mixer": "Amasadora",
"proofer": "Fermentadora",
"refrigerator": "Refrigerador",
"other": "Otro"
},
"steps": {
"equipmentDetails": "Detalles del Equipo",
"equipmentDetailsDescription": "Tipo, modelo, ubicación"
},
"messages": {
"errorGettingTenant": "No se pudo obtener información del tenant",
"noBrand": "Sin marca",
"successCreate": "Equipo creado exitosamente",
"errorCreate": "Error al crear el equipo"
}
},
"teamMember": {
"title": "Agregar Miembro del Equipo",
"memberDetails": "Miembro del Equipo",
"roleAndPermissions": "Rol y Permisos",
"specificPermissions": "Permisos Específicos",
"subtitle": "Miembro del Equipo",
"permissionsTitle": "Rol y Permisos",
"steps": {
"memberDetails": "Datos Personales",
"memberDetailsDescription": "Nombre, contacto, posición",
"roleAndPermissions": "Rol y Permisos",
"roleAndPermissionsDescription": "Accesos al sistema"
},
"fields": {
"fullName": "Nombre Completo",
"fullNamePlaceholder": "Ej: Juan García",
"email": "Correo Electrónico",
"emailPlaceholder": "juan@panaderia.com",
"phone": "Teléfono",
"phonePlaceholder": "+34 123 456 789",
"position": "Posición",
"employmentType": "Tipo de Empleo",
"systemRole": "Rol del Sistema",
"specificPermissions": "Permisos Específicos"
},
"positions": {
"baker": "Panadero",
"pastryChef": "Pastelero",
"manager": "Gerente",
"sales": "Ventas",
"delivery": "Repartidor"
},
"employmentTypes": {
"fullTime": "Tiempo Completo",
"partTime": "Medio Tiempo",
"contractor": "Contratista"
},
"roles": {
"admin": "Administrador",
"manager": "Gerente",
"staff": "Personal",
"viewOnly": "Solo Lectura"
},
"permissions": {
"canManageInventory": "Gestionar Inventario",
"canViewRecipes": "Ver Recetas",
"canCreateOrders": "Crear Pedidos",
"canViewFinancial": "Ver Datos Financieros"
},
"messages": {
"errorGettingTenant": "No se pudo obtener información del tenant",
"successCreate": "Miembro del equipo agregado exitosamente",
"errorCreate": "Error al crear el miembro del equipo"
}
},
"salesEntry": {
"title": "Registro de Ventas",
"steps": {
"entryMethod": "Método de Entrada",
"entryMethodDescription": "Elige cómo registrar las ventas",
"manualEntry": "Ingresar Datos",
"manualEntryDescription": "Registra los detalles de la venta",
"fileUpload": "Cargar Archivo",
"fileUploadDescription": "Importa ventas desde archivo",
"review": "Revisar",
"reviewDescription": "Confirma los datos antes de guardar"
},
"entryMethod": {
"title": "¿Cómo deseas registrar las ventas?",
"subtitle": "Elige el método que mejor se adapte a tus necesidades",
"manual": {
"title": "Entrada Manual",
"description": "Ingresa una o varias ventas de forma individual",
"benefits": {
"1": "Ideal para totales diarios",
"2": "Control detallado por venta",
"3": "Fácil y rápido"
}
},
"file": {
"title": "Cargar Archivo",
"description": "Importa desde Excel o CSV",
"recommended": "⭐ Recomendado para históricos",
"benefits": {
"1": "Ideal para datos históricos",
"2": "Carga masiva (cientos de registros)",
"3": "Ahorra tiempo significativo"
}
}
},
"manualEntry": {
"title": "Registrar Venta Manual",
"subtitle": "Ingresa los detalles de la venta",
"fields": {
"saleDate": "Fecha de Venta",
"paymentMethod": "Método de Pago",
"notes": "Notas (Opcional)",
"notesPlaceholder": "Información adicional sobre esta venta..."
},
"products": {
"title": "Productos Vendidos",
"addProduct": "+ Agregar Producto",
"loading": "Cargando productos...",
"noFinishedProducts": "No hay productos terminados disponibles",
"addToInventory": "Agrega productos al inventario primero",
"noProductsAdded": "No hay productos agregados",
"clickToBegin": "Haz clic en 'Agregar Producto' para comenzar",
"selectProduct": "Seleccionar producto...",
"quantity": "Cant.",
"price": "Precio",
"removeProduct": "Eliminar producto",
"total": "Total:"
}
},
"fileUpload": {
"title": "Cargar Archivo de Ventas",
"subtitle": "Importa tus ventas desde Excel o CSV",
"downloadTemplate": "Descargar Plantilla CSV",
"downloading": "Descargando...",
"dragDrop": {
"title": "Arrastra un archivo aquí",
"subtitle": "o haz clic para seleccionar",
"button": "Seleccionar Archivo",
"supportedFormats": "Formatos soportados: CSV, Excel (.xlsx, .xls)"
},
"validated": {
"title": "✓ Archivo validado correctamente",
"recordsFound": "Registros encontrados:",
"validRecords": "Registros válidos:",
"errors": "Errores:"
},
"validateButton": "Validar Archivo",
"validating": "Validando...",
"importButton": "Importar Datos",
"importing": "Importando...",
"instructions": {
"title": "El archivo debe contener las columnas:",
"columns": "fecha, producto, cantidad, precio_unitario, método_pago"
}
},
"review": {
"title": "Revisar y Confirmar",
"subtitle": "Verifica que toda la información sea correcta",
"fields": {
"date": "Fecha:",
"paymentMethod": "Método de Pago:",
"products": "Productos",
"total": "Total:",
"notes": "Notas:"
},
"imported": {
"title": "✓ Archivo importado correctamente",
"recordsImported": "Registros importados:",
"recordsFailed": "Registros fallidos:"
}
},
"paymentMethods": {
"cash": "Efectivo",
"card": "Tarjeta",
"mobile": "Pago Móvil",
"transfer": "Transferencia",
"other": "Otro"
},
"messages": {
"errorObtainingTenantInfo": "No se pudo obtener información del tenant",
"errorLoadingProducts": "Error al cargar productos",
"salesEntryCreatedSuccessfully": "Entrada de ventas creada exitosamente",
"errorCreatingSalesEntry": "Error al crear la entrada de ventas",
"errorValidatingFile": "Error al validar el archivo",
"errorImportingFile": "Error al importar el archivo",
"fileValidatedSuccessfully": "Archivo validado exitosamente",
"fileImportedSuccessfully": "Archivo importado exitosamente"
}
}
}

View File

@@ -1,12 +1,20 @@
{
"hero": {
"pre_headline": "Hondakinetan Dirua Galtzen Duten Okindegientzat",
"scarcity": "20tik 12 plaza bakarrik geratzen dira • 3 hilabete DOAN",
"scarcity_badge": "🔥 20tik 12 plaza bakarrik geratzen dira pilotu programan",
"badge": "AA Aurreratua Okindegi Modernoetarako",
"title_line1": "Utzi Galtzea €2,000 Hilean",
"title_line2": "Inork Erosten Ez Duen Ogian",
"subtitle": "IAk aurreikusten du zehatz-mehatz bihar zer salduko duzun. Ekoiztu justua. Murriztu hondakinak. Handitu irabaziak. <strong>3 hilabete doan lehenengo 20 okindegientzat</strong>.",
"title_line1": "Handitu Irabaziak,",
"title_line2": "Murriztu Hondakinak",
"title_option_a_line1": "Ekoiztu Zehazki Salduko Duzuna",
"title_option_a_line2": "eta Aurreztu Milaka",
"title_option_b": "Utzi Asmatu Egunero Zenbat Labean Sartu",
"subtitle": "IAk eskariaren aurreikuspena egiten du zure eremuaren datuekin, zehazki salduko duzuna ekoiztu dezazun. Murriztu hondakinak, hobetu marjinak, aurreztu denbora.",
"subtitle_option_a": "IAk zure auzoa ezagutzen du. Aurreikuspenak prest goiz bakoitzean 6:00etan.",
"subtitle_option_b": "Zure eremua ezagutzen duen IAk salmentak aurreikusten ditu %92ko zehaztasunarekin. Esnatu zure plana prestekin: zer egin, zer eskatu, noiz helduko den. Aurreztu €500-2,000/hilean hondakinetan.",
"cta_primary": "Eskatu Pilotuko Plaza",
"cta_secondary": "Ikusi Nola Lan Egiten Duen (2 min)",
"cta_demo": "Ikusi Demoa",
"trust": {
"no_cc": "3 hilabete doan",
"card": "Txartela beharrezkoa",

View File

@@ -97,6 +97,7 @@
},
"actions": {
"approve": "Onartu",
"reject": "Baztertu",
"view_details": "Xehetasunak Ikusi",
"modify": "Aldatu",
"dismiss": "Baztertu",

View File

@@ -16,7 +16,26 @@
"steps": {
"productType": "Produktu Mota",
"basicInfo": "Oinarrizko Informazioa",
"stockConfig": "Stock Konfigurazioa"
"stockConfig": "Stock Konfigurazioa",
"initialStock": "Hasierako Stock-a"
},
"initialStockDescription": "Gehitu lote bat edo gehiago hasierako inventarioa erregistratzeko",
"stockConfig": {
"product": "Produktua",
"totalQuantity": "Kantitate Osoa",
"totalValue": "Balio Osoa",
"lotsRegistered": "Erregistratutako Loteak",
"lot": "Lotea",
"remove": "Kendu",
"quantity": "Kantitatea",
"unitCost": "Unitate Kostua ($)",
"lotNumber": "Lote Zenbakia",
"expirationDate": "Iraungitze Data",
"location": "Kokapena",
"lotValue": "Lotearen balioa:",
"addInitialLot": "Gehitu Hasierako Lotea",
"addAnotherLot": "Gehitu Beste Lote Bat",
"skipMessage": "Urrats hau saltatu dezakezu hasierako stock-a geroago gehitzea nahiago baduzu"
},
"typeDescriptions": {
"ingredient": "Errezetetan erabiltzen diren lehengaiak eta osagaiak",
@@ -499,6 +518,125 @@
}
}
},
"salesEntry": {
"title": "Salmenta Erregistroa",
"steps": {
"entryMethod": "Sarrera Metodoa",
"entryMethodDescription": "Aukeratu salmentak erregistratzeko modua",
"manualEntry": "Datuak Sartu",
"manualEntryDescription": "Erregistratu salmenta xehetasunak",
"fileUpload": "Fitxategia Kargatu",
"fileUploadDescription": "Inportatu salmentak fitxategitik",
"review": "Berrikusi",
"reviewDescription": "Berretsi datuak gorde aurretik"
},
"entryMethod": {
"title": "Nola nahi dituzu salmentak erregistratu?",
"subtitle": "Aukeratu zure beharrei hobekien egokitzen zaion metodoa",
"manual": {
"title": "Eskuzko Sarrera",
"description": "Sartu salmenta bat edo gehiago banaka",
"benefits": {
"1": "Egokia eguneko totaletarako",
"2": "Kontrol zehatza salmenta bakoitzeko",
"3": "Erraza eta azkarra"
}
},
"file": {
"title": "Fitxategia Kargatu",
"description": "Inportatu Excel edo CSV-tik",
"recommended": "⭐ Gomendatua datu historikoentzat",
"benefits": {
"1": "Egokia datu historikoentzat",
"2": "Karga masiboa (ehunka erregistro)",
"3": "Denbora asko aurrezten du"
}
}
},
"manualEntry": {
"title": "Erregistratu Eskuzko Salmenta",
"subtitle": "Sartu salmenta xehetasunak",
"fields": {
"saleDate": "Salmenta Data",
"paymentMethod": "Ordainketa Metodoa",
"notes": "Oharrak (Aukerakoa)",
"notesPlaceholder": "Informazio gehigarria salmenta honi buruz..."
},
"products": {
"title": "Saldutako Produktuak",
"addProduct": "+ Gehitu Produktua",
"loading": "Produktuak kargatzen...",
"noFinishedProducts": "Ez dago produktu amaiturik eskuragarri",
"addToInventory": "Gehitu produktuak inventariora lehenik",
"noProductsAdded": "Ez da produkturik gehitu",
"clickToBegin": "Egin klik 'Gehitu Produktua'-n hasteko",
"selectProduct": "Hautatu produktua...",
"quantity": "Kant.",
"price": "Prezioa",
"removeProduct": "Kendu produktua",
"total": "Guztira:"
}
},
"fileUpload": {
"title": "Kargatu Salmenta Fitxategia",
"subtitle": "Inportatu zure salmentak Excel edo CSV-tik",
"downloadTemplate": "Deskargatu CSV Txantiloia",
"downloading": "Deskargatzen...",
"dragDrop": {
"title": "Arrastatu fitxategi bat hona",
"subtitle": "edo egin klik hautatzeko",
"button": "Hautatu Fitxategia",
"supportedFormats": "Onartutako formatuak: CSV, Excel (.xlsx, .xls)"
},
"validated": {
"title": "✓ Fitxategia ondo baliozkotuta",
"recordsFound": "Aurkitutako erregistroak:",
"validRecords": "Erregistro baliozkoak:",
"errors": "Erroreak:"
},
"validateButton": "Baliozkotu Fitxategia",
"validating": "Baliozkotzean...",
"importButton": "Inportatu Datuak",
"importing": "Inportatzen...",
"instructions": {
"title": "Fitxategiak zutabe hauek eduki behar ditu:",
"columns": "data, produktua, kantitatea, unitate_prezioa, ordainketa_metodoa"
}
},
"review": {
"title": "Berrikusi eta Berretsi",
"subtitle": "Egiaztatu informazio guztia zuzena dela",
"fields": {
"date": "Data:",
"paymentMethod": "Ordainketa Metodoa:",
"products": "Produktuak",
"total": "Guztira:",
"notes": "Oharrak:"
},
"imported": {
"title": "✓ Fitxategia ondo inportatu da",
"recordsImported": "Inportatutako erregistroak:",
"recordsFailed": "Huts egin duten erregistroak:"
}
},
"paymentMethods": {
"cash": "Dirua",
"card": "Txartela",
"mobile": "Mugikorreko Ordainketa",
"transfer": "Transferentzia",
"other": "Bestelakoa"
},
"messages": {
"errorObtainingTenantInfo": "Ezin izan da tenant informazioa lortu",
"errorLoadingProducts": "Errorea produktuak kargatzean",
"salesEntryCreatedSuccessfully": "Salmenta erregistroa ondo sortu da",
"errorCreatingSalesEntry": "Errorea salmenta erregistroa sortzean",
"errorValidatingFile": "Errorea fitxategia baliozkotzean",
"errorImportingFile": "Errorea fitxategia inportatzen",
"fileValidatedSuccessfully": "Fitxategia ondo baliozkotu da",
"fileImportedSuccessfully": "Fitxategia ondo inportatu da"
}
},
"tooltips": {
"averageCost": "Batez besteko kostua unitateko erosketa historikoan oinarrituta",
"standardCost": "Kostu estandarra/espero unitateko kostu kalkuluetarako",