-- ============================================================ -- Migración 004 – SYSTEM_MODULES dinámica -- Convierte el array hardcodeado en config.php a tabla de BD. -- FASE 2 del plan ERP multi-módulo. -- Segura para re-ejecutar (IF NOT EXISTS + INSERT IGNORE). -- ============================================================ CREATE TABLE IF NOT EXISTS system_modules ( slug VARCHAR(100) NOT NULL, name VARCHAR(150) NOT NULL, icon VARCHAR(80) NOT NULL DEFAULT 'fas fa-cube', category VARCHAR(50) NOT NULL DEFAULT 'sistema', route VARCHAR(300) DEFAULT NULL COMMENT 'URL principal del módulo (legacy o nueva)', is_active TINYINT(1) NOT NULL DEFAULT 1 COMMENT '0=desactivado, 1=activo', sort_order INT NOT NULL DEFAULT 99, oleada TINYINT NOT NULL DEFAULT 0 COMMENT '0=existente, 1=oleada1, 2=oleada2', description TEXT DEFAULT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (slug), INDEX idx_category (category), INDEX idx_is_active (is_active), INDEX idx_sort (sort_order) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ── Bot ────────────────────────────────────────────────────────────────────── INSERT IGNORE INTO system_modules (slug, name, icon, category, route, is_active, sort_order, oleada, description) VALUES ('whatsapp', 'WhatsApp Bot', 'fab fa-whatsapp', 'bot', '/index.php', 1, 1, 0, 'Bot, conversaciones, plantillas y menús de WhatsApp'); -- ── Laboratorio (Oleada 0) ─────────────────────────────────────────────────── INSERT IGNORE INTO system_modules (slug, name, icon, category, route, is_active, sort_order, oleada, description) VALUES ('lab_dashboard', 'Dashboard Lab', 'fas fa-tachometer-alt','lab', '/lab_dashboard.php', 1, 10, 0, 'Panel principal del módulo de laboratorio'), ('lab_domicilios', 'Domicilios', 'fas fa-house-medical', 'lab', '/lab_domicilios.php', 1, 20, 0, 'Agenda y gestión de servicios a domicilio'), ('lab_pacientes', 'Pacientes', 'fas fa-users', 'lab', '/lab_pacientes.php', 1, 21, 0, 'Fichas clínicas e historial de pacientes'), ('lab_enfermeras', 'Enfermeros', 'fas fa-user-nurse', 'lab', '/lab_enfermeras.php', 1, 22, 0, 'Gestión de personal clínico y enfermeros'), ('lab_ordenes', 'Órdenes Médicas', 'fas fa-file-medical', 'lab', '/lab_ordenes.php', 1, 23, 0, 'Gestión de órdenes médicas con PDF y autorización'), ('lab_formularios', 'Formularios', 'fas fa-wpforms', 'lab', '/lab_formularios.php', 1, 24, 0, 'Builder de formularios drag-drop con firma digital'); -- ── Reportes ───────────────────────────────────────────────────────────────── INSERT IGNORE INTO system_modules (slug, name, icon, category, route, is_active, sort_order, oleada, description) VALUES ('lab_reportes', 'Reportes', 'fas fa-chart-bar', 'reportes', '/lab_reportes.php', 1, 50, 0, 'Reportes de ingresos, rendimiento y pagos'); -- ── Sistema ─────────────────────────────────────────────────────────────────── INSERT IGNORE INTO system_modules (slug, name, icon, category, route, is_active, sort_order, oleada, description) VALUES ('usuarios', 'Usuarios & Roles', 'fas fa-users-cog', 'sistema', '/lab_usuarios.php', 1, 80, 0, 'Gestión de usuarios del sistema y roles'), ('lab_configuracion', 'Configuración Lab', 'fas fa-sliders-h', 'sistema', '/lab_configuracion.php',1, 81, 0, 'Tarifas, laboratorio y ajustes del sistema'), ('enfermero_portal', 'Portal Enfermero', 'fas fa-stethoscope', 'sistema', '/enfermero_portal.php', 1, 90, 0, 'Portal exclusivo para el personal de enfermería'); -- ── Oleada 1 — Turnero ─────────────────────────────────────────────────────── INSERT IGNORE INTO system_modules (slug, name, icon, category, route, is_active, sort_order, oleada, description) VALUES ('turnero', 'Turnero', 'fas fa-ticket-alt', 'turnero', '/erp.php?m=turnero&v=dashboard', 0, 40, 1, 'Sistema de turnos presenciales en recepción'); -- ── Oleada 2 — Pendientes ──────────────────────────────────────────────────── INSERT IGNORE INTO system_modules (slug, name, icon, category, route, is_active, sort_order, oleada, description) VALUES ('registro_exams', 'Registro Exámenes', 'fas fa-vials', 'clinico', '/erp.php?m=registro_exams&v=lista', 0, 60, 2, 'Registro de exámenes de laboratorio en sede'), ('facturacion', 'Facturación', 'fas fa-file-invoice', 'clinico', NULL, 0, 61, 2, 'Facturación electrónica DIAN'), ('inventario', 'Inventario', 'fas fa-boxes', 'clinico', NULL, 0, 62, 2, 'Reactivos, insumos y stock mínimo'), ('citas', 'Citas', 'fas fa-calendar-alt', 'clinico', NULL, 0, 63, 2, 'Agenda de citas con calendario visual'), ('resultados', 'Resultados', 'fas fa-file-waveform', 'clinico', NULL, 0, 64, 2, 'Entrega digital de resultados al paciente');