Merge pull request #16 from sujucu70/claude/check-agent-readiness-status-Exnpc

fix: translate all remaining Spanish text in RoadmapTab
This commit is contained in:
sujucu70
2026-02-08 12:18:44 +01:00
committed by GitHub

View File

@@ -1156,7 +1156,7 @@ function WaveCard({
<p className="text-sm font-bold text-red-700">{formatCurrency(wave.inversionSetup)}</p>
</div>
<div className="p-2 bg-amber-50 rounded border border-amber-100">
<p className="text-[10px] text-amber-600 font-medium">Recurrente/año</p>
<p className="text-[10px] text-amber-600 font-medium">{t('roadmap.table.recurringPerYear')}</p>
<p className="text-sm font-bold text-amber-700">{formatCurrency(wave.costoRecurrenteAnual)}</p>
</div>
<div className="p-2 bg-emerald-50 rounded border border-emerald-100">
@@ -1182,7 +1182,7 @@ function WaveCard({
<div className="space-y-4 pt-2">
{/* Iniciativas */}
<div>
<p className="text-xs text-gray-500 font-medium mb-2">Iniciativas:</p>
<p className="text-xs text-gray-500 font-medium mb-2">{t('roadmap.table.initiativesLabel')}</p>
<div className="space-y-2">
{wave.iniciativas.map((init, idx) => (
<div key={idx} className="flex items-start gap-2 p-2 bg-gray-50 rounded text-xs">
@@ -1192,9 +1192,9 @@ function WaveCard({
<div className="flex-1">
<p className="font-medium text-gray-700">{init.nombre}</p>
<p className="text-gray-500">
Setup: {formatCurrency(init.setup)} | Rec: {formatCurrency(init.recurrente)}/mes
{t('roadmap.table.setup')} {formatCurrency(init.setup)} | {t('roadmap.table.rec')} {formatCurrency(init.recurrente)}{t('agenticReadiness.table.perMonth')}
</p>
<p className="text-blue-600 mt-1">KPI: {init.kpi}</p>
<p className="text-blue-600 mt-1">{t('roadmap.table.kpi')} {init.kpi}</p>
</div>
</div>
))}
@@ -1203,7 +1203,7 @@ function WaveCard({
{/* Criterios de éxito */}
<div>
<p className="text-xs text-gray-500 font-medium mb-2"> Criterios de éxito:</p>
<p className="text-xs text-gray-500 font-medium mb-2">{t('roadmap.table.successCriteriaLabel')}</p>
<ul className="space-y-1">
{wave.criteriosExito.map((criterio, idx) => (
<li key={idx} className="text-xs text-gray-600 flex items-start gap-2">
@@ -1218,14 +1218,14 @@ function WaveCard({
{wave.esCondicional && wave.condicion && (
<div className="p-2 bg-amber-50 rounded border border-amber-200">
<p className="text-xs text-amber-700">
<strong> Condición:</strong> {wave.condicion}
<strong>{t('roadmap.table.condition')}</strong> {wave.condicion}
</p>
</div>
)}
{/* Proveedor */}
<div className="text-xs text-gray-500">
<strong>Proveedor:</strong> {wave.proveedor}
<strong>{t('roadmap.table.provider')}</strong> {wave.proveedor}
</div>
</div>
)}
@@ -1310,12 +1310,12 @@ function ScenarioComparison({ escenarios }: { escenarios: EscenarioData[] }) {
</span>
{esc.esHabilitador && (
<span className="text-[10px] bg-blue-500 text-white px-2 py-0.5 rounded-full">
Habilitador
{t('roadmap.comparison.enabler')}
</span>
)}
{esc.esRecomendado && !esc.esHabilitador && esc.esRentable && (
<span className="text-[10px] bg-emerald-500 text-white px-2 py-0.5 rounded-full">
Recomendado
{t('roadmap.comparison.recommended')}
</span>
)}
</div>
@@ -1325,10 +1325,10 @@ function ScenarioComparison({ escenarios }: { escenarios: EscenarioData[] }) {
{formatCurrency(esc.inversionTotal)}
</td>
<td className="text-right py-3 px-4 text-amber-600">
{formatCurrency(esc.costoRecurrenteAnual)}/año
{formatCurrency(esc.costoRecurrenteAnual)}{t('agenticReadiness.table.perYear')}
</td>
<td className="text-right py-3 px-4">
<div className="text-emerald-600">{formatCurrency(esc.ahorroAnual)}/año</div>
<div className="text-emerald-600">{formatCurrency(esc.ahorroAnual)}{t('agenticReadiness.table.perYear')}</div>
{esc.esHabilitador && esc.potencialHabilitado > 0 && (
<div className="text-[10px] text-blue-600" title={t('roadmap.scenarios.unlocks', { waves: esc.wavesHabilitadas.join(', ') })}>
({t('roadmap.scenarios.enablesAmount', { amount: formatCurrency(esc.potencialHabilitado) })})
@@ -1336,18 +1336,18 @@ function ScenarioComparison({ escenarios }: { escenarios: EscenarioData[] }) {
)}
{!esc.esHabilitador && esc.ahorroAjustado !== esc.ahorroAnual && (
<div className="text-[10px] text-gray-500">
({formatCurrency(esc.ahorroAjustado)} ajust.)
({formatCurrency(esc.ahorroAjustado)} {t('roadmap.comparison.adjusted')})
</div>
)}
</td>
<td className="text-right py-3 px-4">
{esc.esHabilitador ? (
<span className="text-xs px-2 py-1 bg-blue-100 text-blue-700 rounded-full font-medium">
Prerrequisito
{t('roadmap.comparison.prerequisite')}
</span>
) : (
<span className={`font-bold ${esc.margenAnual <= 0 ? 'text-red-600' : 'text-blue-600'}`}>
{esc.margenAnual <= 0 ? '-' : ''}{formatCurrency(Math.abs(esc.margenAnual))}/año
{esc.margenAnual <= 0 ? '-' : ''}{formatCurrency(Math.abs(esc.margenAnual))}{t('agenticReadiness.table.perYear')}
</span>
)}
</td>
@@ -1372,8 +1372,8 @@ function ScenarioComparison({ escenarios }: { escenarios: EscenarioData[] }) {
<td className="text-right py-3 px-4">
{esc.esHabilitador ? (
<span className="text-xs px-2 py-1 bg-blue-100 text-blue-700 rounded-full font-medium"
title="El ROI se calcula sobre el roadmap completo">
Prerrequisito
title={t('roadmap.comparison.roiCalculatedOn')}>
{t('roadmap.comparison.prerequisite')}
</span>
) : (
<div className="flex flex-col items-end">
@@ -1408,13 +1408,11 @@ function ScenarioComparison({ escenarios }: { escenarios: EscenarioData[] }) {
{/* Nota sobre cálculos */}
<div className="px-4 py-2 bg-gray-50 border-t border-gray-200 text-[10px] text-gray-500">
<strong>Payback:</strong> Tiempo implementación + tiempo recuperación.
Wave 1: 6m, W2: 3m, W3: 3m, W4: 6m. Ahorro comienza al 50% de última wave.
{t('roadmap.comparison.paybackNote')}
<br />
<strong>ROI:</strong> (Ahorro 3a - Coste Total 3a) / Coste Total 3a × 100.
Ajustado aplica riesgo: W1-2: 75-90%, W3: 60%, W4: 50%.
{t('roadmap.comparison.roiNote')}
<br />
<strong>💡 Habilitador:</strong> Waves que desbloquean ROI de waves posteriores. Su payback se evalúa con el roadmap completo.
<strong>💡 {t('roadmap.comparison.enabler')}:</strong> {t('roadmap.comparison.enablerNote')}
</div>
{/* Recomendación destacada */}
@@ -1562,7 +1560,7 @@ function RoadmapTimeline({ waves }: { waves: WaveData[] }) {
{/* Wave metrics */}
<div className="grid grid-cols-2 gap-1 text-[10px]">
<div className="bg-white/60 rounded px-1.5 py-1">
<span className="text-gray-500">Setup:</span>
<span className="text-gray-500">{t('roadmap.timeline.setup')}</span>
<span className="font-semibold text-gray-700 ml-1">{formatCurrency(wave.inversionSetup)}</span>
</div>
<div className="bg-white/60 rounded px-1.5 py-1">
@@ -2012,7 +2010,7 @@ export function RoadmapTab({ data }: RoadmapTabProps) {
roi3AnosAjustado: calculateROI3Years(consInversion, consRec, consSavingsAjustado),
riesgo: 'bajo',
recomendacion: consEsHabilitador
? `✅ Recomendado como HABILITADOR. Desbloquea ${formatCurrency(consPotencialHabilitado)}/año en Wave 3-4. Objetivo: mover ${Math.ceil(wave1Queues.length * 0.3)} colas de Tier 4→3.`
? `✅ Recomendado como HABILITADOR. Desbloquea ${formatCurrency(consPotencialHabilitado)}{t('agenticReadiness.table.perYear')} en Wave 3-4. Objetivo: mover ${Math.ceil(wave1Queues.length * 0.3)} colas de Tier 4→3.`
: `✅ Recomendado. Validar modelo con riesgo bajo. Objetivo: mover ${Math.ceil(wave1Queues.length * 0.3)} colas de Tier 4→3.`,
esRecomendado: true,
esRentable: consMargen > 0,
@@ -2037,7 +2035,7 @@ export function RoadmapTab({ data }: RoadmapTabProps) {
roi3AnosAjustado: calculateROI3Years(modInversion, modRec, modSavingsAjustado),
riesgo: 'medio',
recomendacion: modEsHabilitador
? `Habilitador parcial. Desbloquea ${formatCurrency(modPotencialHabilitado)}/año en Wave 4. Decidir Go/No-Go en Q3 2026.`
? `Habilitador parcial. Desbloquea ${formatCurrency(modPotencialHabilitado)}{t('agenticReadiness.table.perYear')} en Wave 4. Decidir Go/No-Go en Q3 2026.`
: `Decidir Go/No-Go en Q3 2026 basado en resultados Wave 1-2. Requiere Score ≥5.5 en colas target.`,
esRecomendado: false,
esRentable: modMargen > 0,