/* global React */ // Compromisos: listado + filtros + acciones (Admin / Súper Admin CGR) // HU.1.1, HU.1.2, HU.1.3, HU.1.4, HU.5.3 (buscador y filtros) const { useState: useStateC, useMemo: useMemoC } = React; // ---------------- KPI tira ---------------- function CompKpi({ icon, label, num, sub, tone }) { const I = window.Icons; return (
{React.createElement(I[icon], { size: 15 })}
{num}
{label}
{sub &&
{sub}
}
); } // ---------------- Chips de filtros rápidos ---------------- function ChipsRow({ items, value, onChange }) { return (
{items.map(it => ( ))}
); } // ---------------- Selector (popup mock) ---------------- function FilterDropdown({ icon, label, value, options, onChange }) { const I = window.Icons; const [open, setOpen] = useStateC(false); return (
{open && ( <>
setOpen(false)}>
{options.map(o => ( ))}
)}
); } // ---------------- Fila de la tabla ---------------- function CompRow({ c, onOpen }) { const I = window.Icons; const dCls = c.d < 0 ? 'is-overdue' : c.d <= 3 ? 'is-soon' : c.d <= 7 ? 'is-warnish' : ''; return ( onOpen(c.id)}>
{c.id} {c.idIntl}
{c.text}
{c.instituciones.length} inst. {c.vinc > 0 && {c.vinc} vinc.} {c.avances} avances
{c.mecanismo}
{c.ronda}
{c.eje}
{c.tipo} · {c.prioridad}
{c.instituciones.slice(0, 2).map(i => {i})} {c.instituciones.length > 2 && +{c.instituciones.length - 2}}
{c.plazo}
{c.d < 0 ? `D+${Math.abs(c.d)} (vencido)` : c.d === 0 ? 'Vence hoy' : `D-${c.d}`}
e.stopPropagation()}> ); } // ---------------- Pantalla principal ---------------- function CompromisosScreen({ onOpenDetalle, onOpenNueva }) { const I = window.Icons; const all = window.COMPROMISOS_FULL; const [q, setQ] = useStateC(''); const [mech, setMech] = useStateC('Todos'); const [estado, setEstado] = useStateC('Todos'); const [inst, setInst] = useStateC('Todas las 47'); const [eje, setEje] = useStateC('Todos los ejes'); const [ronda, setRonda] = useStateC('Todas'); const filtered = useMemoC(() => { return all.filter(c => { if (q && !(`${c.id} ${c.text} ${c.instituciones.join(' ')}`).toLowerCase().includes(q.toLowerCase())) return false; if (mech !== 'Todos' && c.mecanismo !== mech) return false; if (estado === 'Cumplidos' && c.estado !== 'ok') return false; if (estado === 'Parciales' && c.estado !== 'partial') return false; if (estado === 'No cumplidos' && c.estado !== 'bad') return false; if (estado === 'Vencidos sin avance' && c.d >= 0) return false; if (eje !== 'Todos los ejes' && c.eje !== eje) return false; return true; }); }, [all, q, mech, estado, inst, eje, ronda]); // KPIs derivados (simulando totales del sistema 527) const total = 527; const cumplidos = 184; const parciales = 248; const noCump = 78; const vencidos = 17; return (
{/* Header */}
CGR · Dirección de Análisis de Datos

Compromisos

Inventario consolidado de recomendaciones internacionales. Registra, clasifica, asigna y vincula compromisos de los tres mecanismos.

{/* KPI strip */}
{/* Search */}
setQ(e.target.value)} /> {q && } ⌘ K
{/* Chips: mecanismo */} {/* Chips: estado */} {/* Filtros secundarios */}
{}} options={['Todos', 'Normativa', 'Administrativa', 'Operativa']} />
{/* Resultados / Tabla */}

Resultados · vista detallada

Mostrando {filtered.length} de 527 · ordenados por proximidad de vencimiento
{filtered.map(c => )}
ID Recomendación Mecanismo Clasificación Instituciones Vence Estado
{filtered.length === 0 && (

Sin resultados con los filtros aplicados

Intenta con otras palabras clave o limpia los filtros.

)}
Página 1 de 44 · 12 por página
); } Object.assign(window, { CompromisosScreen });