diff --git a/frontend/components/tabs/AgenticReadinessTab.tsx b/frontend/components/tabs/AgenticReadinessTab.tsx
index 3305e84..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();
@@ -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')}
);
@@ -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 })}
>
)}
@@ -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')}
@@ -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 8b5367c..8b9f7b7 100644
--- a/frontend/locales/en.json
+++ b/frontend/locales/en.json
@@ -1103,6 +1103,33 @@
"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",
+ "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",
"volumeBenchmark": "Positive ROI requires >500/month",
diff --git a/frontend/locales/es.json b/frontend/locales/es.json
index f5c4450..684dd5b 100644
--- a/frontend/locales/es.json
+++ b/frontend/locales/es.json
@@ -1134,6 +1134,33 @@
"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",
+ "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",
"volumeBenchmark": "ROI positivo requiere >500/mes",