diff --git a/frontend/components/tabs/AgenticReadinessTab.tsx b/frontend/components/tabs/AgenticReadinessTab.tsx index f502d87..910cad4 100644 --- a/frontend/components/tabs/AgenticReadinessTab.tsx +++ b/frontend/components/tabs/AgenticReadinessTab.tsx @@ -1862,7 +1862,7 @@ function SkillClassificationSection({ drilldownData }: { drilldownData: Drilldow {/* Header */}

- CLASIFICACIÓN POR SKILL + {t('agenticReadiness.sections.classificationBySkill')}

@@ -1872,18 +1872,18 @@ function SkillClassificationSection({ drilldownData }: { drilldownData: Drilldow - - - - + + + + - - - - + + + + @@ -2298,7 +2298,7 @@ function ExpandableSkillRow({ // ============================================ // Configuración de colores y estilos por tier -const TIER_SECTION_CONFIG: Record = { +}> => ({ 'AUTOMATE': { color: '#10b981', bgColor: '#d1fae5', @@ -2316,9 +2316,9 @@ const TIER_SECTION_CONFIG: Record>(new Set()); - const config = TIER_SECTION_CONFIG[tier]; + const config = getTierSectionConfig(t)[tier]; const IconComponent = config.icon; // Extraer todas las colas del tier específico, agrupadas por skill @@ -2418,7 +2420,7 @@ function TierQueueSection({
{totalQueues} -

colas en {skillsWithTierQueues.length} skills

+

{t('agenticReadiness.sections.queuesIn', { count: skillsWithTierQueues.length })}

@@ -2427,14 +2429,14 @@ function TierQueueSection({
- Volumen: {totalVolume.toLocaleString()} int/mes + {t('agenticReadiness.sections.volumeColon')} {totalVolume.toLocaleString()} {t('agenticReadiness.table.int')}/{t('agenticReadiness.table.perMonth').replace('/', '')} - Coste: {formatCurrency(totalCost)}/año + {t('agenticReadiness.sections.costColon')} {formatCurrency(totalCost)}{t('agenticReadiness.table.perYear')}
- Ahorro potencial: {formatCurrency(potentialSavings)}/año + {t('agenticReadiness.sections.potentialSavingsColon')} {formatCurrency(potentialSavings)}{t('agenticReadiness.table.perYear')}
@@ -2444,13 +2446,13 @@ function TierQueueSection({
- - - - - - - + + + + + + + @@ -2510,14 +2512,14 @@ function TierQueueSection({
SkillVolumenDistribución Colas por TierAcción{t('agenticReadiness.table.skill')}{t('agenticReadiness.table.volume')}{t('agenticReadiness.classification.distribution')}{t('agenticReadiness.classification.action')}
AUTOASISTAUGMHUMAN{t('agenticReadiness.classification.auto')}{t('agenticReadiness.classification.assist')}{t('agenticReadiness.classification.augm')}{t('agenticReadiness.classification.human')}
Business Unit (Skill)ColasVolumenAHT Prom.CV Prom.FCRAhorro Potencial{t('agenticReadiness.table.businessUnit')}{t('agenticReadiness.table.queues')}{t('agenticReadiness.table.volume')}{t('agenticReadiness.table.avgAht')}{t('agenticReadiness.table.avgCv')}{t('agenticReadiness.table.fcr')}{t('agenticReadiness.table.potentialSavings')}
- - - - - - - - + + + + + + + + @@ -2570,9 +2572,9 @@ function TierQueueSection({ } // Componente para colas HUMAN-ONLY agrupadas por razón/red flag -function HumanOnlyByReasonSection({ drilldownData, redFlagConfigs }: { drilldownData: DrilldownDataPoint[]; redFlagConfigs: RedFlagConfig[] }) { +function HumanOnlyByReasonSection({ drilldownData, redFlagConfigs, t }: { drilldownData: DrilldownDataPoint[]; redFlagConfigs: RedFlagConfig[]; t: any }) { const [expandedReasons, setExpandedReasons] = useState>(new Set()); - const config = TIER_SECTION_CONFIG['HUMAN-ONLY']; + const config = getTierSectionConfig(t)['HUMAN-ONLY']; // Extraer todas las colas HUMAN-ONLY const allHumanOnlyQueues = drilldownData.flatMap(skill => @@ -2665,7 +2667,7 @@ function HumanOnlyByReasonSection({ drilldownData, redFlagConfigs }: { drilldown
{totalQueues} -

colas agrupadas por {reasonGroups.length} razones

+

{t('agenticReadiness.summary.groupedBy', { count: reasonGroups.length })}

@@ -2673,10 +2675,10 @@ function HumanOnlyByReasonSection({ drilldownData, redFlagConfigs }: { drilldown {/* Resumen */}
- Volumen total: {totalVolume.toLocaleString()} int/mes + {t('agenticReadiness.humanOnlyReasons.volumeTotal')} {totalVolume.toLocaleString()} {t('agenticReadiness.table.int')}/{t('agenticReadiness.table.perMonth').replace('/', '')} - Estas colas requieren intervención antes de considerar automatización + {t('agenticReadiness.summary.requiresIntervention')}
@@ -2686,10 +2688,10 @@ function HumanOnlyByReasonSection({ drilldownData, redFlagConfigs }: { drilldown
- - - - + + + + @@ -2742,13 +2744,13 @@ function HumanOnlyByReasonSection({ drilldownData, redFlagConfigs }: { drilldown
Cola (ID)VolumenAHTCVTransferFCRScoreAhorro{t('agenticReadiness.table.queueId')}{t('agenticReadiness.table.volume')}{t('agenticReadiness.table.aht')}{t('agenticReadiness.table.cv')}{t('agenticReadiness.table.transfer')}{t('agenticReadiness.table.fcr')}{t('agenticReadiness.table.score')}{t('agenticReadiness.table.savingsPerMonth')}
Razón / Red FlagColasVolumenAcción Recomendada{t('agenticReadiness.table.reason')}{t('agenticReadiness.table.queues')}{t('agenticReadiness.table.volume')}{t('agenticReadiness.table.recommendedAction')}
- - - - - - - + + + + + + + @@ -2864,10 +2866,10 @@ function PriorityCandidatesSection({ drilldownData, redFlagConfigs, t }: { drill

- CLASIFICACIÓN POR TIER DE AUTOMATIZACIÓN + {t('agenticReadiness.sections.classificationByTier')}

- Skills con colas clasificadas como AUTOMATE (score ≥ 7.5, CV ≤ 75%, transfer ≤ 20%) + {t('agenticReadiness.classification.subtitle')}

@@ -3729,16 +3731,16 @@ export function AgenticReadinessTab({ data, onTabChange }: AgenticReadinessTabPr {data.drilldownData && data.drilldownData.length > 0 ? ( <> {/* TABLA 1: Colas AUTOMATE - Listas para automatización */} - + {/* TABLA 2: Colas ASSIST - Candidatas a Copilot */} - + {/* TABLA 3: Colas AUGMENT - Requieren optimización */} - + {/* TABLA 4: Colas HUMAN-ONLY - Agrupadas por razón/red flag */} - + ) : ( /* Fallback a tabla por Línea de Negocio si no hay drilldown data */ diff --git a/frontend/locales/en.json b/frontend/locales/en.json index c007f4b..7d6d5d3 100644 --- a/frontend/locales/en.json +++ b/frontend/locales/en.json @@ -1186,6 +1186,53 @@ "notRecommended": "Not recommended for automation at this time", "bronzeAnalysis": "Bronze analysis does not include Agentic Readiness Score" } + }, + "table": { + "queueId": "Queue (original_queue_id)", + "volume": "Volume", + "aht": "AHT", + "cv": "CV", + "transfer": "Transfer", + "fcr": "FCR", + "score": "Score", + "tier": "Tier", + "redFlags": "Red Flags", + "savingsPerMonth": "Savings/mo", + "total": "TOTAL", + "skill": "Skill", + "queues": "Queues", + "avgAht": "Avg AHT", + "avgCv": "Avg CV", + "potentialSavings": "Potential Savings", + "dominantTier": "Dominant Tier", + "perYear": "/year" + }, + "summary": { + "queuesAnalyzed": "queues analyzed", + "volumeInIndividualQueues": "of volume is in individual queues", + "balancedDistribution": "Balanced distribution across tiers. Review individual queues for prioritization.", + "clickToExpand": "Click on a skill to see individual queue details" + }, + "emptyStates": { + "noQueuesClassifiedAs": "No queues classified as {{tier}}", + "noQueuesMatchFilters": "No queues match the selected filters" + }, + "sections": { + "classificationBySkill": "CLASSIFICATION BY SKILL", + "classificationByTier": "CLASSIFICATION BY AUTOMATION TIER", + "queuesAutomate": "Queues AUTOMATE", + "readyForFullAutomation": "Ready for full automation with virtual agent (Score ≥7.5)", + "queuesAssist": "Queues ASSIST", + "candidatesForCopilot": "Candidates for Copilot - AI assists human agent (Score 5.5-7.5)", + "queuesAugment": "Queues AUGMENT", + "requireOptimization": "Require prior optimization: standardize processes, reduce variability (Score 3.5-5.5)", + "queuesHumanOnly": "Queues HUMAN-ONLY", + "notSuitableForAutomation": "Not suitable for automation: insufficient volume, low data quality, or extreme complexity", + "queuesIn": "queues in {{count}} skills", + "costPerYear": "/year", + "volumeColon": "Volume:", + "costColon": "Cost:", + "potentialSavingsColon": "Potential savings:" } }, "economicModel": { diff --git a/frontend/locales/es.json b/frontend/locales/es.json index ae4a811..c25908b 100644 --- a/frontend/locales/es.json +++ b/frontend/locales/es.json @@ -945,10 +945,17 @@ "strategicSkill": "Queue Skill (Estratégico)", "volume": "Volumen", "volumePerMonth": "int/mes", + "aht": "AHT", + "cv": "CV", + "fcr": "FCR", "ahtAvg": "AHT Prom.", "cvAvg": "CV Prom.", + "avgAht": "AHT Prom.", + "avgCv": "CV Prom.", "savingsPotential": "Ahorro Potencial", + "potentialSavings": "Ahorro Potencial", "dominantTier": "Tier Dom.", + "tier": "Tier", "transfer": "Transfer", "redFlags": "Red Flags", "savingsPerMonth": "Ahorro/mes", @@ -970,6 +977,9 @@ "tierAutoAssist": "(Tier AUTOMATE + ASSIST)", "interactions": "interacciones", "queuesAnalyzed": "colas analizadas", + "volumeInIndividualQueues": "del volumen está en colas individuales", + "balancedDistribution": "Distribución equilibrada entre tiers. Revisar colas individuales para priorización.", + "clickToExpand": "Click en un skill para ver el detalle de colas individuales", "interpretation": "Interpretación:", "interpretationText": "El {{pct}}% representa el volumen de interacciones automatizables (AUTOMATE + ASSIST). Solo el {{queuePct}}% de las colas ({{count}} de {{total}}) son AUTOMATE, pero concentran {{volumePct}}% del volumen total. Esto indica pocas colas de alto volumen automatizables - oportunidad concentrada en Quick Wins de alto impacto.", "inSkills": "en {{count}} skills", @@ -984,6 +994,27 @@ "activeFilters": "Filtros activos:", "of": "de" }, + "emptyStates": { + "noQueuesClassifiedAs": "No hay colas clasificadas como {{tier}}", + "noQueuesMatchFilters": "No hay colas que cumplan los filtros seleccionados" + }, + "sections": { + "classificationBySkill": "CLASIFICACIÓN POR SKILL", + "classificationByTier": "CLASIFICACIÓN POR TIER DE AUTOMATIZACIÓN", + "queuesAutomate": "Colas AUTOMATE", + "readyForFullAutomation": "Listas para automatización completa con agente virtual (Score ≥7.5)", + "queuesAssist": "Colas ASSIST", + "candidatesForCopilot": "Candidatas a Copilot - IA asiste al agente humano (Score 5.5-7.5)", + "queuesAugment": "Colas AUGMENT", + "requireOptimization": "Requieren optimización previa: estandarizar procesos, reducir variabilidad (Score 3.5-5.5)", + "queuesHumanOnly": "Colas HUMAN-ONLY", + "notSuitableForAutomation": "No aptas para automatización: volumen insuficiente, calidad de datos baja o complejidad extrema", + "queuesIn": "colas en {{count}} skills", + "costPerYear": "/año", + "volumeColon": "Volumen:", + "costColon": "Coste:", + "potentialSavingsColon": "Ahorro potencial:" + }, "opportunityMap": { "title": "Mapa de Oportunidades", "subtitle": "Tamaño = Volumen · Color = Tier · Posición = Score vs Ahorro TCO",
Cola (ID)SkillVolumenCV AHTTransferScoreRed Flags{t('agenticReadiness.table.queueId')}{t('agenticReadiness.table.skill')}{t('agenticReadiness.table.volume')}{t('agenticReadiness.table.cv')}{t('agenticReadiness.table.transfer')}{t('agenticReadiness.table.score')}{t('agenticReadiness.table.redFlags')}