Final MVP valid

This commit is contained in:
Marcelo
2026-01-21 01:45:57 +00:00
parent c183dda383
commit 511d80b629
29 changed files with 4827 additions and 381 deletions

View File

@@ -9,12 +9,12 @@
"common.close": "Cerrar",
"common.save": "Guardar",
"common.copy": "Copiar",
"nav.overview": "Resumen",
"nav.machines": "Máquinas",
"nav.reports": "Reportes",
"nav.alerts": "Alertas",
"nav.financial": "Finanzas",
"nav.settings": "Configuración",
"nav.overview": "Resumen",
"nav.machines": "Máquinas",
"nav.reports": "Reportes",
"nav.alerts": "Alertas",
"nav.financial": "Finanzas",
"nav.settings": "Configuración",
"sidebar.productTitle": "MIS",
"sidebar.productSubtitle": "Control Tower",
"sidebar.userFallback": "Usuario",
@@ -170,11 +170,11 @@
"machine.detail.tooltip.deviation": "Desviación",
"machine.detail.kpi.updated": "Actualizado {time}",
"machine.detail.currentWorkOrder": "Orden de trabajo actual",
"machine.detail.recentEvents": "Eventos críticos",
"machine.detail.recentEvents": "Eventos críticos",
"machine.detail.noEvents": "Sin eventos aún.",
"machine.detail.cycleTarget": "Ciclo objetivo",
"machine.detail.mini.events": "Eventos detectados",
"machine.detail.mini.events.subtitle": "Eventos canónicos (todos)",
"machine.detail.mini.events.subtitle": "Eventos canónicos (todos)",
"machine.detail.mini.deviation": "Ciclo real vs estándar",
"machine.detail.mini.deviation.subtitle": "Desviación promedio",
"machine.detail.mini.impact": "Impacto en producción",
@@ -219,106 +219,106 @@
"reports.scrapTrend": "Tendencia de scrap",
"reports.topLossDrivers": "Principales causas de pérdida",
"reports.qualitySummary": "Resumen de calidad",
"reports.notes": "Notas para operaciones",
"alerts.title": "Alertas",
"alerts.subtitle": "Historial de alertas con filtros y detalle.",
"alerts.comingSoon": "La configuracion de alertas estara disponible pronto.",
"alerts.loading": "Cargando alertas...",
"alerts.error.loadPolicy": "No se pudo cargar la politica de alertas.",
"alerts.error.savePolicy": "No se pudo guardar la politica de alertas.",
"alerts.error.loadContacts": "No se pudieron cargar los contactos de alertas.",
"alerts.error.saveContacts": "No se pudo guardar el contacto de alertas.",
"alerts.error.deleteContact": "No se pudo eliminar el contacto de alertas.",
"alerts.error.createContact": "No se pudo crear el contacto de alertas.",
"alerts.policy.title": "Politica de alertas",
"alerts.policy.subtitle": "Configura escalamiento por rol, canal y duracion.",
"alerts.policy.save": "Guardar politica",
"alerts.policy.saving": "Guardando...",
"alerts.policy.defaults": "Escalamiento por defecto (por rol)",
"alerts.policy.enabled": "Habilitado",
"alerts.policy.afterMinutes": "Despues de minutos",
"alerts.policy.channels": "Canales",
"alerts.policy.repeatMinutes": "Repetir (min)",
"alerts.policy.readOnly": "Puedes ver la politica de alertas, pero solo propietarios pueden editar.",
"alerts.policy.defaultsHelp": "Los valores por defecto aplican cuando un evento se reinicia o no se personaliza.",
"alerts.policy.eventSelectLabel": "Tipo de evento",
"alerts.policy.eventSelectHelper": "Ajusta escalamiento para un solo tipo de evento.",
"alerts.policy.applyDefaults": "Aplicar por defecto",
"alerts.event.macrostop": "Macroparo",
"alerts.event.microstop": "Microparo",
"alerts.event.slow-cycle": "Ciclo lento",
"alerts.event.offline": "Fuera de linea",
"alerts.event.error": "Error",
"alerts.contacts.title": "Contactos de alertas",
"alerts.contacts.subtitle": "Destinatarios externos y alcance por rol.",
"alerts.contacts.name": "Nombre",
"alerts.contacts.roleScope": "Rol",
"alerts.contacts.email": "Correo",
"alerts.contacts.phone": "Telefono",
"alerts.contacts.eventTypes": "Tipos de evento (opcional)",
"alerts.contacts.eventTypesPlaceholder": "macroparo, microparo, fuera-de-linea",
"alerts.contacts.eventTypesHelper": "Deja vacío para recibir todos los tipos de evento.",
"alerts.contacts.add": "Agregar contacto",
"alerts.contacts.creating": "Agregando...",
"alerts.contacts.empty": "Sin contactos de alertas.",
"alerts.contacts.save": "Guardar",
"alerts.contacts.saving": "Guardando...",
"alerts.contacts.delete": "Eliminar",
"alerts.contacts.deleting": "Eliminando...",
"alerts.contacts.active": "Activo",
"alerts.contacts.linkedUser": "Usuario vinculado (editar en perfil)",
"alerts.contacts.role.custom": "Personalizado",
"alerts.contacts.role.member": "Miembro",
"alerts.contacts.role.admin": "Admin",
"alerts.contacts.role.owner": "Propietario",
"alerts.contacts.readOnly": "Puedes ver contactos, pero solo propietarios pueden agregar o editar.",
"alerts.inbox.title": "Bandeja de alertas",
"alerts.inbox.loading": "Cargando alertas...",
"alerts.inbox.loadingFilters": "Cargando filtros...",
"alerts.inbox.empty": "No se encontraron alertas.",
"alerts.inbox.error": "No se pudieron cargar las alertas.",
"alerts.inbox.range.24h": "Últimas 24 horas",
"alerts.inbox.range.7d": "Últimos 7 días",
"alerts.inbox.range.30d": "Últimos 30 días",
"alerts.inbox.range.custom": "Personalizado",
"alerts.inbox.filters.title": "Filtros",
"alerts.inbox.filters.range": "Rango",
"alerts.inbox.filters.start": "Inicio",
"alerts.inbox.filters.end": "Fin",
"alerts.inbox.filters.machine": "Máquina",
"alerts.inbox.filters.site": "Sitio",
"alerts.inbox.filters.shift": "Turno",
"alerts.inbox.filters.type": "Clasificación",
"alerts.inbox.filters.severity": "Severidad",
"alerts.inbox.filters.status": "Estado",
"alerts.inbox.filters.search": "Buscar",
"alerts.inbox.filters.searchPlaceholder": "Título, descripción, máquina...",
"alerts.inbox.filters.includeUpdates": "Incluir actualizaciones",
"alerts.inbox.filters.allMachines": "Todas las máquinas",
"alerts.inbox.filters.allSites": "Todos los sitios",
"alerts.inbox.filters.allShifts": "Todos los turnos",
"alerts.inbox.filters.allTypes": "Todas las clasificaciones",
"alerts.inbox.filters.allSeverities": "Todas las severidades",
"alerts.inbox.filters.allStatuses": "Todos los estados",
"alerts.inbox.table.time": "Hora",
"alerts.inbox.table.machine": "Máquina",
"alerts.inbox.table.site": "Sitio",
"alerts.inbox.table.shift": "Turno",
"alerts.inbox.table.type": "Tipo",
"alerts.inbox.table.severity": "Severidad",
"alerts.inbox.table.status": "Estado",
"alerts.inbox.table.duration": "Duración",
"alerts.inbox.table.title": "Título",
"alerts.inbox.table.unknown": "Sin dato",
"alerts.inbox.status.active": "Activa",
"alerts.inbox.status.resolved": "Resuelta",
"alerts.inbox.status.unknown": "Sin dato",
"alerts.inbox.duration.na": "n/d",
"alerts.inbox.duration.sec": "s",
"alerts.inbox.duration.min": " min",
"alerts.inbox.duration.hr": " h",
"alerts.inbox.meta.workOrder": "OT",
"alerts.inbox.meta.sku": "SKU",
"reports.notes": "Notas para operaciones",
"alerts.title": "Alertas",
"alerts.subtitle": "Historial de alertas con filtros y detalle.",
"alerts.comingSoon": "La configuracion de alertas estara disponible pronto.",
"alerts.loading": "Cargando alertas...",
"alerts.error.loadPolicy": "No se pudo cargar la politica de alertas.",
"alerts.error.savePolicy": "No se pudo guardar la politica de alertas.",
"alerts.error.loadContacts": "No se pudieron cargar los contactos de alertas.",
"alerts.error.saveContacts": "No se pudo guardar el contacto de alertas.",
"alerts.error.deleteContact": "No se pudo eliminar el contacto de alertas.",
"alerts.error.createContact": "No se pudo crear el contacto de alertas.",
"alerts.policy.title": "Politica de alertas",
"alerts.policy.subtitle": "Configura escalamiento por rol, canal y duracion.",
"alerts.policy.save": "Guardar politica",
"alerts.policy.saving": "Guardando...",
"alerts.policy.defaults": "Escalamiento por defecto (por rol)",
"alerts.policy.enabled": "Habilitado",
"alerts.policy.afterMinutes": "Despues de minutos",
"alerts.policy.channels": "Canales",
"alerts.policy.repeatMinutes": "Repetir (min)",
"alerts.policy.readOnly": "Puedes ver la politica de alertas, pero solo propietarios pueden editar.",
"alerts.policy.defaultsHelp": "Los valores por defecto aplican cuando un evento se reinicia o no se personaliza.",
"alerts.policy.eventSelectLabel": "Tipo de evento",
"alerts.policy.eventSelectHelper": "Ajusta escalamiento para un solo tipo de evento.",
"alerts.policy.applyDefaults": "Aplicar por defecto",
"alerts.event.macrostop": "Macroparo",
"alerts.event.microstop": "Microparo",
"alerts.event.slow-cycle": "Ciclo lento",
"alerts.event.offline": "Fuera de linea",
"alerts.event.error": "Error",
"alerts.contacts.title": "Contactos de alertas",
"alerts.contacts.subtitle": "Destinatarios externos y alcance por rol.",
"alerts.contacts.name": "Nombre",
"alerts.contacts.roleScope": "Rol",
"alerts.contacts.email": "Correo",
"alerts.contacts.phone": "Telefono",
"alerts.contacts.eventTypes": "Tipos de evento (opcional)",
"alerts.contacts.eventTypesPlaceholder": "macroparo, microparo, fuera-de-linea",
"alerts.contacts.eventTypesHelper": "Deja vacío para recibir todos los tipos de evento.",
"alerts.contacts.add": "Agregar contacto",
"alerts.contacts.creating": "Agregando...",
"alerts.contacts.empty": "Sin contactos de alertas.",
"alerts.contacts.save": "Guardar",
"alerts.contacts.saving": "Guardando...",
"alerts.contacts.delete": "Eliminar",
"alerts.contacts.deleting": "Eliminando...",
"alerts.contacts.active": "Activo",
"alerts.contacts.linkedUser": "Usuario vinculado (editar en perfil)",
"alerts.contacts.role.custom": "Personalizado",
"alerts.contacts.role.member": "Miembro",
"alerts.contacts.role.admin": "Admin",
"alerts.contacts.role.owner": "Propietario",
"alerts.contacts.readOnly": "Puedes ver contactos, pero solo propietarios pueden agregar o editar.",
"alerts.inbox.title": "Bandeja de alertas",
"alerts.inbox.loading": "Cargando alertas...",
"alerts.inbox.loadingFilters": "Cargando filtros...",
"alerts.inbox.empty": "No se encontraron alertas.",
"alerts.inbox.error": "No se pudieron cargar las alertas.",
"alerts.inbox.range.24h": "Últimas 24 horas",
"alerts.inbox.range.7d": "Últimos 7 días",
"alerts.inbox.range.30d": "Últimos 30 días",
"alerts.inbox.range.custom": "Personalizado",
"alerts.inbox.filters.title": "Filtros",
"alerts.inbox.filters.range": "Rango",
"alerts.inbox.filters.start": "Inicio",
"alerts.inbox.filters.end": "Fin",
"alerts.inbox.filters.machine": "Máquina",
"alerts.inbox.filters.site": "Sitio",
"alerts.inbox.filters.shift": "Turno",
"alerts.inbox.filters.type": "Clasificación",
"alerts.inbox.filters.severity": "Severidad",
"alerts.inbox.filters.status": "Estado",
"alerts.inbox.filters.search": "Buscar",
"alerts.inbox.filters.searchPlaceholder": "Título, descripción, máquina...",
"alerts.inbox.filters.includeUpdates": "Incluir actualizaciones",
"alerts.inbox.filters.allMachines": "Todas las máquinas",
"alerts.inbox.filters.allSites": "Todos los sitios",
"alerts.inbox.filters.allShifts": "Todos los turnos",
"alerts.inbox.filters.allTypes": "Todas las clasificaciones",
"alerts.inbox.filters.allSeverities": "Todas las severidades",
"alerts.inbox.filters.allStatuses": "Todos los estados",
"alerts.inbox.table.time": "Hora",
"alerts.inbox.table.machine": "Máquina",
"alerts.inbox.table.site": "Sitio",
"alerts.inbox.table.shift": "Turno",
"alerts.inbox.table.type": "Tipo",
"alerts.inbox.table.severity": "Severidad",
"alerts.inbox.table.status": "Estado",
"alerts.inbox.table.duration": "Duración",
"alerts.inbox.table.title": "Título",
"alerts.inbox.table.unknown": "Sin dato",
"alerts.inbox.status.active": "Activa",
"alerts.inbox.status.resolved": "Resuelta",
"alerts.inbox.status.unknown": "Sin dato",
"alerts.inbox.duration.na": "n/d",
"alerts.inbox.duration.sec": "s",
"alerts.inbox.duration.min": " min",
"alerts.inbox.duration.hr": " h",
"alerts.inbox.meta.workOrder": "OT",
"alerts.inbox.meta.sku": "SKU",
"reports.notes.suggested": "Acciones sugeridas",
"reports.notes.none": "Sin insights todavía. Genera reportes tras recolectar datos.",
"reports.noTrend": "Sin datos de tendencia.",
@@ -355,14 +355,14 @@
"reports.pdf.cycleDistribution": "Distribución de tiempos de ciclo",
"reports.pdf.notes": "Notas para operaciones",
"reports.pdf.none": "Ninguna",
"settings.title": "Configuración",
"settings.subtitle": "Configuración en vivo para turnos, alertas y valores predeterminados.",
"settings.tabs.general": "General",
"settings.tabs.shifts": "Turnos",
"settings.tabs.thresholds": "Umbrales",
"settings.tabs.alerts": "Alertas",
"settings.tabs.financial": "Finanzas",
"settings.tabs.team": "Equipo",
"settings.title": "Configuración",
"settings.subtitle": "Configuración en vivo para turnos, alertas y valores predeterminados.",
"settings.tabs.general": "General",
"settings.tabs.shifts": "Turnos",
"settings.tabs.thresholds": "Umbrales",
"settings.tabs.alerts": "Alertas",
"settings.tabs.financial": "Finanzas",
"settings.tabs.team": "Equipo",
"settings.loading": "Cargando configuración...",
"settings.loadingTeam": "Cargando equipo...",
"settings.refresh": "Actualizar",
@@ -442,68 +442,75 @@
"settings.role.admin": "Admin",
"settings.role.member": "Miembro",
"settings.role.inactive": "Inactivo",
"settings.integrations": "Integraciones",
"settings.integrations.webhook": "Webhook URL",
"settings.integrations.erp": "ERP Sync",
"settings.integrations.erpNotConfigured": "No configurado",
"financial.title": "Impacto financiero",
"financial.subtitle": "Convierte paros, ciclos lentos y scrap en dinero.",
"financial.ownerOnly": "El impacto financiero solo está disponible para propietarios.",
"financial.costsMoved": "Los costos ahora están en",
"financial.costsMovedLink": "Configuración -> Finanzas",
"financial.export.html": "HTML",
"financial.export.csv": "CSV",
"financial.totalLoss": "Pérdida total",
"financial.currencyLabel": "Moneda: {currency}",
"financial.noImpact": "Sin datos de impacto.",
"financial.chart.title": "Pérdida de dinero en el tiempo",
"financial.chart.subtitle": "Acumulado por tipo de evento",
"financial.range.day": "Día",
"financial.range.week": "Semana",
"financial.range.month": "Mes",
"financial.filters.title": "Filtros",
"financial.filters.machine": "Máquina",
"financial.filters.location": "Ubicación",
"financial.filters.sku": "SKU",
"financial.filters.currency": "Moneda",
"financial.filters.allMachines": "Todas las máquinas",
"financial.filters.allLocations": "Todas las ubicaciones",
"financial.filters.skuPlaceholder": "Filtrar por SKU",
"financial.filters.currencyPlaceholder": "MXN",
"financial.loadingMachines": "Cargando máquinas...",
"financial.config.title": "Parámetros de costo",
"financial.config.subtitle": "Los valores aplican a todas las máquinas salvo override.",
"financial.config.applyOrg": "Aplicar valores de organización a todas",
"financial.config.save": "Guardar",
"financial.config.saving": "Guardando...",
"financial.config.saved": "Guardado",
"financial.config.saveFailed": "No se pudo guardar",
"financial.config.orgDefaults": "Valores de organización",
"financial.config.locationOverrides": "Overrides por ubicación",
"financial.config.machineOverrides": "Overrides por máquina",
"financial.config.productOverrides": "Overrides por producto",
"financial.config.addLocation": "Agregar override de ubicación",
"financial.config.addMachine": "Agregar override de máquina",
"financial.config.addProduct": "Agregar override de producto",
"financial.config.noneLocation": "Sin overrides de ubicación.",
"financial.config.noneMachine": "Sin overrides de máquina.",
"financial.config.noneProduct": "Sin overrides de producto.",
"financial.config.location": "Ubicación",
"financial.config.selectLocation": "Selecciona ubicación",
"financial.config.machine": "Máquina",
"financial.config.selectMachine": "Selecciona máquina",
"financial.config.currency": "Moneda",
"financial.config.sku": "SKU",
"financial.config.rawMaterialUnit": "Materia prima / unidad",
"financial.config.ownerOnly": "Los costos financieros solo están disponibles para propietarios.",
"financial.config.loading": "Cargando finanzas...",
"financial.field.machineCostPerMin": "Costo máquina / min",
"financial.field.operatorCostPerMin": "Costo operador / min",
"financial.field.ratedRunningKw": "kW en operación",
"financial.field.idleKw": "kW en espera",
"financial.field.kwhRate": "Tarifa kWh",
"financial.field.energyMultiplier": "Multiplicador de energía",
"financial.field.energyCostPerMin": "Costo energía / min",
"financial.field.scrapCostPerUnit": "Costo scrap / unidad",
"financial.field.rawMaterialCostPerUnit": "Costo materia prima / unidad"
}
"settings.integrations": "Integraciones",
"settings.integrations.webhook": "Webhook URL",
"settings.integrations.erp": "ERP Sync",
"settings.integrations.erpNotConfigured": "No configurado",
"financial.title": "Impacto financiero",
"financial.subtitle": "Convierte paros, ciclos lentos y scrap en dinero.",
"financial.ownerOnly": "El impacto financiero solo está disponible para propietarios.",
"financial.costsMoved": "Los costos ahora están en",
"financial.costsMovedLink": "Configuración -> Finanzas",
"financial.export.html": "HTML",
"financial.export.csv": "CSV",
"financial.totalLoss": "Pérdida total",
"financial.currencyLabel": "Moneda: {currency}",
"financial.noImpact": "Sin datos de impacto.",
"financial.chart.title": "Pérdida de dinero en el tiempo",
"financial.chart.subtitle": "Acumulado por tipo de evento",
"financial.range.day": "Día",
"financial.range.week": "Semana",
"financial.range.month": "Mes",
"financial.filters.title": "Filtros",
"financial.filters.machine": "Máquina",
"financial.filters.location": "Ubicación",
"financial.filters.sku": "SKU",
"financial.filters.currency": "Moneda",
"financial.filters.allMachines": "Todas las máquinas",
"financial.filters.allLocations": "Todas las ubicaciones",
"financial.filters.skuPlaceholder": "Filtrar por SKU",
"financial.filters.currencyPlaceholder": "MXN",
"financial.loadingMachines": "Cargando máquinas...",
"financial.config.title": "Parámetros de costo",
"financial.config.subtitle": "Los valores aplican a todas las máquinas salvo override.",
"financial.config.applyOrg": "Aplicar valores de organización a todas",
"financial.config.save": "Guardar",
"financial.config.saving": "Guardando...",
"financial.config.saved": "Guardado",
"financial.config.saveFailed": "No se pudo guardar",
"financial.config.orgDefaults": "Valores de organización",
"financial.config.locationOverrides": "Overrides por ubicación",
"financial.config.machineOverrides": "Overrides por máquina",
"financial.config.productOverrides": "Overrides por producto",
"financial.config.addLocation": "Agregar override de ubicación",
"financial.config.addMachine": "Agregar override de máquina",
"financial.config.addProduct": "Agregar override de producto",
"financial.config.noneLocation": "Sin overrides de ubicación.",
"financial.config.noneMachine": "Sin overrides de máquina.",
"financial.config.noneProduct": "Sin overrides de producto.",
"financial.config.location": "Ubicación",
"financial.config.selectLocation": "Selecciona ubicación",
"financial.config.machine": "Máquina",
"financial.config.selectMachine": "Selecciona máquina",
"financial.config.currency": "Moneda",
"financial.config.sku": "SKU",
"financial.config.rawMaterialUnit": "Materia prima / unidad",
"financial.config.ownerOnly": "Los costos financieros solo están disponibles para propietarios.",
"financial.config.loading": "Cargando finanzas...",
"financial.field.machineCostPerMin": "Costo máquina / min",
"financial.field.operatorCostPerMin": "Costo operador / min",
"financial.field.ratedRunningKw": "kW en operación",
"financial.field.idleKw": "kW en espera",
"financial.field.kwhRate": "Tarifa kWh",
"financial.field.energyMultiplier": "Multiplicador de energía",
"financial.field.energyCostPerMin": "Costo energía / min",
"financial.field.scrapCostPerUnit": "Costo scrap / unidad",
"financial.field.rawMaterialCostPerUnit": "Costo materia prima / unidad",
"nav.downtime": "Downtime",
"settings.tabs.modules": "Módulos",
"settings.modules.title": "Módulos",
"settings.modules.subtitle": "Activa/desactiva módulos según cómo opera la planta.",
"settings.modules.screenless.title": "Modo sin pantalla",
"settings.modules.screenless.helper": "Oculta el módulo de Paros (Downtime) del menú (para plantas sin captura de razones en Node-RED).",
"settings.modules.note": "Este ajuste aplica a toda la organización."
}