/* global React */ // Module configurations per role + Home screen + Stub screen. // ---------------- MODULE DEFINITIONS ---------------- // Each module: id, icon (Lucide name), nav (sidebar label), title (card), // desc (one-line), badge (optional), variant (card size), inHome (show on home). const MODULE_DEFS = { inicio: { id: 'inicio', icon: 'Home', nav: 'Inicio', title: 'Inicio', desc: 'Hub principal del sistema.', inHome: false, }, tablero: { id: 'tablero', icon: 'LayoutDashboard', nav: 'Tablero de Control', title: 'Tablero de Control', desc: 'Visualiza el estado de cumplimiento país en tiempo real.', variant: 'feature', }, compromisos: { id: 'compromisos', icon: 'ListChecks', nav: 'Compromisos', title: 'Compromisos', desc: 'Consulta, busca y gestiona las recomendaciones internacionales.', }, cargar_avance: { id: 'cargar_avance', icon: 'Upload', nav: 'Cargar Avance', title: 'Cargar Avance', desc: 'Reporta el progreso de los compromisos asignados a tu institución.', }, mis_compromisos: { id: 'mis_compromisos', icon: 'ListChecks', nav: 'Mis Compromisos', title: 'Mis Compromisos Asignados', desc: 'Recomendaciones bajo responsabilidad de tu institución.', }, nueva_recomendacion: { id: 'nueva_recomendacion', icon: 'PlusCircle', nav: 'Nueva Recomendación', title: 'Nueva Recomendación', desc: 'Registra una nueva recomendación o compromiso internacional.', }, mensajeria: { id: 'mensajeria', icon: 'MessageSquare', nav: 'Mensajería', title: 'Mensajería', desc: 'Comunícate con la CGR y las instituciones reportantes.', }, alertas: { id: 'alertas', icon: 'Bell', nav: 'Alertas y Plazos', title: 'Alertas y Plazos', desc: 'Revisa los compromisos próximos a vencer y notificaciones D-7, D-3, D-1.', }, reportes: { id: 'reportes', icon: 'FileBarChart', nav: 'Reportes', title: 'Reportes', desc: 'Genera y exporta reportes consolidados en formato Excel y PDF.', }, reportes_aprobados: { id: 'reportes_aprobados', icon: 'FileText', nav: 'Reportes Aprobados', title: 'Reportes Aprobados', desc: 'Documentos consolidados listos para envío a organismos internacionales.', variant: 'feature', }, usuarios: { id: 'usuarios', icon: 'Users', nav: 'Usuarios', title: 'Usuarios', desc: 'Administra cuentas y roles de acceso al sistema.', }, instituciones: { id: 'instituciones', icon: 'Building2', nav: 'Instituciones', title: 'Instituciones', desc: 'Catálogo de instituciones reportantes habilitadas en la plataforma.', }, portal: { id: 'portal', icon: 'Globe', nav: 'Portal Público', title: 'Portal Público', desc: 'Accede a la vista ciudadana del cumplimiento del país.', variant: 'accent', }, }; // ---------------- ROLE → MODULES ---------------- function modulesForRole(roleId) { // helper to attach a badge override const m = (id, extras = {}) => ({ ...MODULE_DEFS[id], ...extras }); if (roleId === 'institucion') { return [ m('inicio'), m('mis_compromisos', { badge: { count: 23, tone: 'info' } }), m('cargar_avance'), m('mensajeria', { badge: { count: 2, tone: 'danger' } }), m('alertas', { badge: { count: 3, tone: 'danger' } }), ]; } if (roleId === 'cancilleria') { return [ m('inicio'), m('reportes_aprobados', { badge: { count: 12, tone: 'info' } }), m('mensajeria'), ]; } // Admin / Super Admin return [ m('inicio'), m('tablero'), m('compromisos', { badge: { count: 527, tone: 'info' } }), m('nueva_recomendacion'), m('mensajeria', { badge: { count: 3, tone: 'danger' } }), m('alertas', { badge: { count: 5, tone: 'danger' } }), m('reportes'), m('usuarios'), m('instituciones'), m('portal'), ]; } // Which modules appear as cards on Home (excludes 'inicio') function homeModulesForRole(roleId) { const all = modulesForRole(roleId).filter(m => m.id !== 'inicio'); return all; } Object.assign(window, { MODULE_DEFS, modulesForRole, homeModulesForRole });