-- ============================================================ -- MIGRACIÓN DTIC MESA DE PARTE - VERSIÓN 2.0 -- ============================================================ USE `gestion_documentos`; -- 1. Crear tabla de Unidades DTIC CREATE TABLE IF NOT EXISTS `unidades_dtic` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `nombre` VARCHAR(100) NOT NULL, `siglas` VARCHAR(20) DEFAULT NULL, `icono` VARCHAR(50) DEFAULT 'fa-building', `responsable_id` INT UNSIGNED DEFAULT NULL, `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_unidad_nombre` (`nombre`), CONSTRAINT `fk_unidad_responsable` FOREIGN KEY (`responsable_id`) REFERENCES `usuarios` (`id`) ON DELETE SET NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 2. Insertar Unidades DTIC solicitadas INSERT IGNORE INTO `unidades_dtic` (`nombre`, `siglas`, `icono`) VALUES ('Programación', 'PROG', 'fa-code'), ('Administración', 'ADM', 'fa-file-invoice-dollar'), ('Personal', 'PERS', 'fa-users'), ('Adiestramiento', 'ADIE', 'fa-user-graduate'), ('Centro de Datos', 'DATA', 'fa-server'), ('Auditoría', 'AUDI', 'fa-magnifying-glass-chart'), ('Desarrollo', 'DES', 'fa-laptop-code'), ('Agraz', 'AGRAZ', 'fa-shield-halved'); -- 3. Actualizar tabla usuarios para incluir unidad_id ALTER TABLE `usuarios` ADD COLUMN IF NOT EXISTS `unidad_id` INT UNSIGNED DEFAULT NULL AFTER `rol_id`; ALTER TABLE `usuarios` ADD CONSTRAINT `fk_usuario_unidad` FOREIGN KEY (`unidad_id`) REFERENCES `unidades_dtic` (`id`) ON DELETE SET NULL; -- 4. Actualizar tabla oficios para flujo de Mesa de Parte ALTER TABLE `oficios` ADD COLUMN IF NOT EXISTS `unidad_destino_id` INT UNSIGNED DEFAULT NULL AFTER `destinatario`; ALTER TABLE `oficios` ADD CONSTRAINT `fk_oficio_unidad_destino` FOREIGN KEY (`unidad_destino_id`) REFERENCES `unidades_dtic` (`id`) ON DELETE SET NULL; -- 5. Expandir ENUM de estado en oficios (Asegurar que existan los nuevos estados) -- Nota: En MySQL no se puede usar ADD COLUMN IF NOT EXISTS para modificar un ENUM fácilmente de forma segura sin recrear o usar ALTER. -- Usaremos un ALTER directo asumiendo el esquema base. ALTER TABLE `oficios` MODIFY COLUMN `estado` ENUM('recibido','en_proceso','respondido','vencido','archivado','cumplido','verificado') NOT NULL DEFAULT 'recibido'; -- 6. Insertar Rol "Super Administrator" si no existe (con acceso total++) INSERT IGNORE INTO `roles` (`nombre`, `descripcion`, `permisos`) VALUES ('superadmin', 'Control absoluto del sistema y registros protegidos', '{"oficios":"CRUD","usuarios":"CRUD","reportes":true,"respaldo":true,"papelera_fisica":true,"config_alertas":true,"maestros":true}');