From 4f9d1d50cba0aafc5f0cb5458000b489276bbfa8 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 8 Feb 2026 14:38:43 +0000 Subject: [PATCH 1/2] feat: translate additional AgenticReadinessTab sections - Add roadmapConnection translation namespace (20+ keys) - Translate Quick Wins section (IMMEDIATE QUICK WINS) - Translate Wave 1-3 Foundation section - Translate "Click on reason to see affected queues" footer - Update RoadmapConnectionSection to use i18n keys - All calculations, metrics, and descriptions now bilingual https://claude.ai/code/session_01GNbnkFoESkRcnPr3bLCYDg --- .../components/tabs/AgenticReadinessTab.tsx | 36 +++++++++---------- frontend/locales/en.json | 20 +++++++++++ frontend/locales/es.json | 20 +++++++++++ 3 files changed, 58 insertions(+), 18 deletions(-) diff --git a/frontend/components/tabs/AgenticReadinessTab.tsx b/frontend/components/tabs/AgenticReadinessTab.tsx index 3305e84..c4fa5c7 100644 --- a/frontend/components/tabs/AgenticReadinessTab.tsx +++ b/frontend/components/tabs/AgenticReadinessTab.tsx @@ -2808,7 +2808,7 @@ function HumanOnlyByReasonSection({ drilldownData, redFlagConfigs, t }: { drilld {/* Footer */}
- Click en una razón para ver las colas afectadas. Priorizar acciones según volumen impactado. + {t('agenticReadiness.table.clickToExpandReason')}
); @@ -3501,7 +3501,7 @@ function SkillsToOptimizeSection({ drilldownData }: { drilldownData: DrilldownDa } // v3.6: Sección de conexión con Roadmap -function RoadmapConnectionSection({ drilldownData }: { drilldownData: DrilldownDataPoint[] }) { +function RoadmapConnectionSection({ drilldownData, t }: { drilldownData: DrilldownDataPoint[]; t: any }) { // Extraer todas las colas const allQueues = drilldownData.flatMap(skill => skill.originalQueues.map(q => ({ ...q, skillName: skill.skill })) @@ -3584,27 +3584,27 @@ function RoadmapConnectionSection({ drilldownData }: { drilldownData: DrilldownD
- QUICK WINS INMEDIATOS (sin Wave 1) + {t('agenticReadiness.roadmapConnection.quickWinsTitle')}

- {automateQueues.length} colas AUTOMATE con{' '} - {(automateVolume / 1000).toFixed(0)}K interacciones/mes + {t('agenticReadiness.roadmapConnection.automateQueues', { count: automateQueues.length })} {t('agenticReadiness.roadmapConnection.with')}{' '} + {(automateVolume / 1000).toFixed(0)}K {t('agenticReadiness.roadmapConnection.interactionsPerMonth')}

- Ahorro potencial: €{(annualSavingsAutomate / 1000000).toFixed(1)}M/año - (70% contención × €2.18/int) + {t('agenticReadiness.roadmapConnection.savingsPotential')} €{(annualSavingsAutomate / 1000000).toFixed(1)}M{t('agenticReadiness.roadmapConnection.perYear')} + (70% {t('agenticReadiness.roadmapConnection.containment')} × €2.18{t('agenticReadiness.roadmapConnection.perInt')})

{skillsWithAutomate.length > 0 && (

- Skills: {skillsWithAutomate.join(', ')} + {t('agenticReadiness.roadmapConnection.skills')} {skillsWithAutomate.join(', ')}

)}

- → Alineado con Wave 4 del Roadmap. Pueden implementarse en paralelo a Wave 1. + {t('agenticReadiness.roadmapConnection.alignedWithWave4')}

@@ -3616,35 +3616,35 @@ function RoadmapConnectionSection({ drilldownData }: { drilldownData: DrilldownD
🔧 - WAVE 1-3: FOUNDATION → ASSIST ({assistQueues.length} colas) + {t('agenticReadiness.roadmapConnection.wave13Title', { count: assistQueues.length })}

- {(assistVolume / 1000).toFixed(0)}K interacciones/mes en tier ASSIST + {(assistVolume / 1000).toFixed(0)}K {t('agenticReadiness.roadmapConnection.interactionsPerMonth')} {t('agenticReadiness.roadmapConnection.inTierAssist')}

{skillsNeedingWave1.length > 0 && (

- Foco Wave 1: Reducir transfer en{' '} + {t('agenticReadiness.roadmapConnection.focusWave1')} {t('agenticReadiness.roadmapConnection.reduceTransferIn')}{' '} {skillsNeedingWave1.map(s => s.skill).join(' & ')}{' '} ({Math.round(skillsNeedingWave1[0]?.humanPct || 0)}% HUMAN)

)}

- Potencial con Copilot:{' '} + {t('agenticReadiness.roadmapConnection.potentialWithCopilot')}{' '} €{potentialAnnualAssist >= 1000000 ? `${(potentialAnnualAssist / 1000000).toFixed(1)}M` : `${(potentialAnnualAssist / 1000).toFixed(0)}K` - }/año + }{t('agenticReadiness.roadmapConnection.perYear')} - (30% deflection × €0.83/int) + (30% {t('agenticReadiness.roadmapConnection.deflection')} × €0.83{t('agenticReadiness.roadmapConnection.perInt')})

- → Requiere Wave 1 (Foundation) para habilitar Copilot en Wave 3 + {t('agenticReadiness.roadmapConnection.requiresWave1')}

diff --git a/frontend/locales/en.json b/frontend/locales/en.json index 8b5367c..3215b52 100644 --- a/frontend/locales/en.json +++ b/frontend/locales/en.json @@ -1103,6 +1103,26 @@ "viewRoadmapTab": "View Roadmap tab for detailed plan", "viewRoadmapLink": "View Roadmap tab for detailed plan →" }, + "roadmapConnection": { + "quickWinsTitle": "IMMEDIATE QUICK WINS (without Wave 1)", + "automateQueues": "{{count}} AUTOMATE queues", + "with": "with", + "interactionsPerMonth": "interactions/month", + "savingsPotential": "Savings potential:", + "perYear": "/year", + "containment": "containment", + "perInt": "/int", + "skills": "Skills:", + "alignedWithWave4": "→ Aligned with Roadmap Wave 4. Can be implemented in parallel to Wave 1.", + "wave13Title": "WAVE 1-3: FOUNDATION → ASSIST ({{count}} queues)", + "inTierAssist": "in tier ASSIST", + "focusWave1": "Wave 1 Focus:", + "reduceTransferIn": "Reduce transfer in", + "potentialWithCopilot": "Potential with Copilot:", + "deflection": "deflection", + "requiresWave1": "→ Requires Wave 1 (Foundation) to enable Copilot in Wave 3", + "calculationNote": "Calculation: {{volume}} int × 12 months × {{rate}}% {{type}} × €{{cpi}}/int" + }, "factorsExtended": { "volumeMethodology": "Score = normalized log10(Volume). >5000 → 10, <100 → 2", "volumeBenchmark": "Positive ROI requires >500/month", diff --git a/frontend/locales/es.json b/frontend/locales/es.json index f5c4450..c43a44c 100644 --- a/frontend/locales/es.json +++ b/frontend/locales/es.json @@ -1134,6 +1134,26 @@ "viewRoadmapTab": "Ver pestaña Roadmap para plan detallado", "viewRoadmapLink": "Ver pestaña Roadmap para plan detallado →" }, + "roadmapConnection": { + "quickWinsTitle": "QUICK WINS INMEDIATOS (sin Wave 1)", + "automateQueues": "{{count}} colas AUTOMATE", + "with": "con", + "interactionsPerMonth": "interacciones/mes", + "savingsPotential": "Ahorro potencial:", + "perYear": "/año", + "containment": "contención", + "perInt": "/int", + "skills": "Skills:", + "alignedWithWave4": "→ Alineado con Wave 4 del Roadmap. Pueden implementarse en paralelo a Wave 1.", + "wave13Title": "WAVE 1-3: FOUNDATION → ASSIST ({{count}} colas)", + "inTierAssist": "en tier ASSIST", + "focusWave1": "Foco Wave 1:", + "reduceTransferIn": "Reducir transfer en", + "potentialWithCopilot": "Potencial con Copilot:", + "deflection": "deflection", + "requiresWave1": "→ Requiere Wave 1 (Foundation) para habilitar Copilot en Wave 3", + "calculationNote": "Cálculo: {{volume}} int × 12 meses × {{rate}}% {{type}} × €{{cpi}}/int" + }, "factorsExtended": { "volumeMethodology": "Score = log10(Volumen) normalizado. >5000 → 10, <100 → 2", "volumeBenchmark": "ROI positivo requiere >500/mes", From 0ac624908788bb1f361137454a16a47d8605aabe Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 8 Feb 2026 14:41:56 +0000 Subject: [PATCH 2/2] feat: translate final remaining Spanish text in AgenticReadinessTab MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Translate Quick Wins insights ("have >60% volume in T1+T2") - Translate attention alerts ("has X% in HUMAN → prioritize in Wave 1") - Translate balanced distribution message - Translate "have at least one tier AUTOMATE queue" - Translate "Show less" / "View all" buttons - Add t parameter to SkillsReadinessTable component - All AgenticReadinessTab text now 100% bilingual (en/es) https://claude.ai/code/session_01GNbnkFoESkRcnPr3bLCYDg --- .../components/tabs/AgenticReadinessTab.tsx | 20 +++++++++---------- frontend/locales/en.json | 9 ++++++++- frontend/locales/es.json | 9 ++++++++- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/frontend/components/tabs/AgenticReadinessTab.tsx b/frontend/components/tabs/AgenticReadinessTab.tsx index c4fa5c7..70bc8dd 100644 --- a/frontend/components/tabs/AgenticReadinessTab.tsx +++ b/frontend/components/tabs/AgenticReadinessTab.tsx @@ -1958,18 +1958,18 @@ function SkillClassificationSection({ drilldownData }: { drilldownData: Drilldow {quickWins.length > 0 && (

🎯 Quick Wins:{' '} - {quickWins.map(s => s.skill).join(' + ')} tienen >60% volumen en T1+T2 + {quickWins.map(s => s.skill).join(' + ')} {t('agenticReadiness.roadmapConnection.quickWinsHaveVolume')}

)} {alerts.length > 0 && (

⚠️ Atención:{' '} - {alerts.map(s => `${s.skill} tiene ${Math.round(s.tierPcts['HUMAN-ONLY'])}% en HUMAN`).join('; ')} → priorizar en Wave 1 + {alerts.map(s => `${s.skill} ${t('agenticReadiness.roadmapConnection.hasPercentInHuman', { pct: Math.round(s.tierPcts['HUMAN-ONLY']) })}`).join('; ')} {t('agenticReadiness.roadmapConnection.prioritizeInWave1')}

)} {quickWins.length === 0 && alerts.length === 0 && (

- Distribución equilibrada entre tiers. Revisar colas individuales para priorización. + {t('agenticReadiness.roadmapConnection.balancedDistribution')}

)} @@ -1979,7 +1979,7 @@ function SkillClassificationSection({ drilldownData }: { drilldownData: Drilldow } // Skills Heatmap/Table (fallback cuando no hay drilldownData) -function SkillsReadinessTable({ heatmapData }: { heatmapData: HeatmapDataPoint[] }) { +function SkillsReadinessTable({ heatmapData, t }: { heatmapData: HeatmapDataPoint[]; t: any }) { const sortedData = [...heatmapData].sort((a, b) => b.automation_readiness - a.automation_readiness); const formatVolume = (v: number) => v >= 1000 ? `${Math.round(v / 1000)}K` : v.toString(); @@ -2958,11 +2958,11 @@ function PriorityCandidatesSection({ drilldownData, redFlagConfigs, t }: { drill

- {candidateSkills.length} de {drilldownData.length} skills - tienen al menos una cola tier AUTOMATE + {candidateSkills.length} {t('agenticReadiness.filters.of')} {drilldownData.length} skills + {t('agenticReadiness.roadmapConnection.haveAtLeastOne')}

- Haz clic en un skill para ver las colas individuales con desglose de score + {t('agenticReadiness.table.clickToExpand')}

@@ -3486,11 +3486,11 @@ function SkillsToOptimizeSection({ drilldownData }: { drilldownData: DrilldownDa > {showAll ? ( <> - Mostrar menos + {t('agenticReadiness.roadmapConnection.showLess')} ) : ( <> - Ver todos ({skillsToOptimize.length}) + {t('agenticReadiness.roadmapConnection.viewAll', { count: skillsToOptimize.length })} )} @@ -3745,7 +3745,7 @@ export function AgenticReadinessTab({ data, onTabChange }: AgenticReadinessTabPr ) : ( /* Fallback a tabla por Línea de Negocio si no hay drilldown data */ - + )} {/* Link al Roadmap */} diff --git a/frontend/locales/en.json b/frontend/locales/en.json index 3215b52..8b9f7b7 100644 --- a/frontend/locales/en.json +++ b/frontend/locales/en.json @@ -1121,7 +1121,14 @@ "potentialWithCopilot": "Potential with Copilot:", "deflection": "deflection", "requiresWave1": "→ Requires Wave 1 (Foundation) to enable Copilot in Wave 3", - "calculationNote": "Calculation: {{volume}} int × 12 months × {{rate}}% {{type}} × €{{cpi}}/int" + "calculationNote": "Calculation: {{volume}} int × 12 months × {{rate}}% {{type}} × €{{cpi}}/int", + "quickWinsHaveVolume": "have >60% volume in T1+T2", + "hasPercentInHuman": "has {{pct}}% in HUMAN", + "prioritizeInWave1": "→ prioritize in Wave 1", + "balancedDistribution": "Balanced distribution across tiers. Review individual queues for prioritization.", + "haveAtLeastOne": "have at least one tier AUTOMATE queue", + "showLess": "Show less", + "viewAll": "View all ({{count}})" }, "factorsExtended": { "volumeMethodology": "Score = normalized log10(Volume). >5000 → 10, <100 → 2", diff --git a/frontend/locales/es.json b/frontend/locales/es.json index c43a44c..684dd5b 100644 --- a/frontend/locales/es.json +++ b/frontend/locales/es.json @@ -1152,7 +1152,14 @@ "potentialWithCopilot": "Potencial con Copilot:", "deflection": "deflection", "requiresWave1": "→ Requiere Wave 1 (Foundation) para habilitar Copilot en Wave 3", - "calculationNote": "Cálculo: {{volume}} int × 12 meses × {{rate}}% {{type}} × €{{cpi}}/int" + "calculationNote": "Cálculo: {{volume}} int × 12 meses × {{rate}}% {{type}} × €{{cpi}}/int", + "quickWinsHaveVolume": "tienen >60% volumen en T1+T2", + "hasPercentInHuman": "tiene {{pct}}% en HUMAN", + "prioritizeInWave1": "→ priorizar en Wave 1", + "balancedDistribution": "Distribución equilibrada entre tiers. Revisar colas individuales para priorización.", + "haveAtLeastOne": "tienen al menos una cola tier AUTOMATE", + "showLess": "Mostrar menos", + "viewAll": "Ver todos ({{count}})" }, "factorsExtended": { "volumeMethodology": "Score = log10(Volumen) normalizado. >5000 → 10, <100 → 2",