import type { TarjetaKpi } from "@/lib/crm/tipos"; import { valorKpi } from "@/components/admin/formato"; import { claseVariacion, subirEsMejor } from "@/components/admin/graficas/paleta"; /** * Ficha de KPI. Rótulo, cifra y variación contra el periodo anterior. * * La dirección de mejora se resuelve por KPI, no por signo: en horas hasta la * primera respuesta bajar es mejor. Si `variacion` es null no se pinta flecha * —no hay base de comparación y no se inventa una. */ export function TarjetaKpiVista({ kpi, dias }: { kpi: TarjetaKpi; dias: number }) { const mejorArriba = subirEsMejor(kpi.clave, kpi.formato); const v = kpi.variacion; return (

{kpi.etiqueta}

{valorKpi(kpi.valor, kpi.formato)}

{v == null ? ( Sin base de comparación ) : ( <> {" "} {v > 0 ? "+" : ""} {v.toFixed(1)} pp vs. {dias} días previos {v > 0 ? "sube" : v < 0 ? "baja" : "sin cambio"} {Math.abs(v).toFixed(1)} puntos porcentuales contra los {dias} días previos, lo que{" "} {v === 0 ? "no cambia el indicador" : (v > 0) === mejorArriba ? "es una mejora" : "es un retroceso"}. )}
{kpi.nota ? (

{kpi.nota}

) : null}
); } export function FilaKpis({ kpis, dias }: { kpis: TarjetaKpi[]; dias: number }) { if (kpis.length === 0) { return (

Todavía no hay indicadores para este periodo. Amplía el rango a 90 días o espera los primeros envíos del sitio.

); } return (
{kpis.map((k) => ( ))}
); }