feat(ti/proyectos): KPIs por etapa+semáforo (completados/seguimiento/riesgo/retraso)
Reemplaza las 4 tarjetas KPI del dashboard de Proyectos TI por una
clasificación operativa basada en num_etapa × semaforo. La suma de
las 4 = total de proyectos filtrado.
Reglas (siempre sobre el subset filtrado por el usuario):
- COMPLETADOS = num_etapa == 8 (cualquier semáforo)
- EN SEGUIMIENTO = num_etapa ∈ [1..7] ∧ semáforo verde
- EN RIESGO = num_etapa ∈ [1..7] ∧ semáforo amarillo
- EN RETRASO = num_etapa ∈ [1..7] ∧ semáforo rojo
Cambios:
- Backend (
backend/routers/ti.py): agregacompletados,en_seguimiento,en_riesgo,en_retrasoal payload de/api/ti/proyectos/dashboard/stats. Los conteos respetan los filtros multi-select aplicados. - API typing (
portal_ti/lib/ti.api.ts): 4 campos nuevos enDashboardStatscon la regla documentada en comentario. - Page (
portal_ti/app/sistemas/proyectos/page.tsx):- Reemplaza las 4 KPI cards "En desarrollo / Mantenimiento / En riesgo / Avance honesto" por COMPLETADOS · EN SEGUIMIENTO · EN RIESGO · EN RETRASO con iconos y colores semáforo (CheckCircle2/success, Activity/success, AlertTriangle/warning, Clock/danger).
- Elimina la función huérfana
KpiAvanceHonesto(~47 líneas) y los importsWrenchyShieldAlertque ya no se usan. - Fix de tipos: consumidores del filtro semáforo en el chart de
tendencia normalizan el array (
map(s => s.trim().toLowerCase())-
includes) en lugar de.trim()sobrestring[]— corrige error de compilación en build de Docker.
-