-- BI UBE v3.1
-- FUNCIONES UBE + TÓPICO + DERIVACIÓN PSICOLÓGICA EXTERNA
-- Ejecutar UNA SOLA VEZ sobre la BD de prueba.
-- Antes de producción, exporte la BD ya validada e impórtela en bi_ube.

SET NAMES utf8mb4;

-- 1) Rol base adicional para personal contratado exclusivamente por UBE.
-- Se conservan Tutor/Topico/Psicologia por compatibilidad con pruebas anteriores,
-- pero las NUEVAS asignaciones deben manejarse con funciones_ube_asignaciones.
ALTER TABLE usuarios
MODIFY COLUMN rol ENUM(
 'Administrador','Director','Consulta','Coordinador','Tutor','Docente',
 'PersonalUBE','Psicologia','Topico'
) NOT NULL DEFAULT 'Consulta';

-- 2) Funciones UBE asignadas por UBE/Administrador.
CREATE TABLE IF NOT EXISTS funciones_ube_asignaciones (
    id INT AUTO_INCREMENT PRIMARY KEY,
    usuario_id INT NOT NULL,
    funcion ENUM('TOPICO','PSICOLOGIA_UBE') NOT NULL,
    periodo VARCHAR(20) NULL,
    fecha_inicio DATE NOT NULL,
    fecha_fin DATE NULL,
    estado ENUM('ACTIVO','INACTIVO') NOT NULL DEFAULT 'ACTIVO',
    asignado_por INT NULL,
    observacion VARCHAR(500) NULL,
    fecha_registro DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_fua_usuario(usuario_id),
    INDEX idx_fua_funcion_estado(funcion,estado),
    INDEX idx_fua_periodo(periodo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 3) Atenciones internas de Tópico.
CREATE TABLE IF NOT EXISTS topico_atenciones (
    id INT AUTO_INCREMENT PRIMARY KEY,
    numero VARCHAR(30) NULL,
    fecha DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    usuario_responsable_id INT NOT NULL,
    estudiante_dni VARCHAR(20) NULL,
    estudiante_nombre VARCHAR(255) NOT NULL,
    programa_id INT NULL,
    programa_nombre VARCHAR(255) NULL,
    ciclo VARCHAR(20) NULL,
    periodo_id INT NULL,
    sexo VARCHAR(30) NULL,
    motivo VARCHAR(255) NOT NULL,
    signos_sintomas TEXT NULL,
    atencion_brindada TEXT NOT NULL,
    orientacion TEXT NULL,
    retorno_clases ENUM('SI','NO','NO_APLICA') NOT NULL DEFAULT 'NO_APLICA',
    requiere_seguimiento ENUM('SI','NO') NOT NULL DEFAULT 'NO',
    proxima_fecha DATE NULL,
    derivado ENUM('SI','NO') NOT NULL DEFAULT 'NO',
    destino_derivacion VARCHAR(255) NULL,
    observaciones TEXT NULL,
    estado ENUM('ATENDIDO','EN_SEGUIMIENTO','CERRADO') NOT NULL DEFAULT 'ATENDIDO',
    INDEX idx_topico_fecha(fecha),
    INDEX idx_topico_responsable(usuario_responsable_id),
    INDEX idx_topico_programa(programa_id),
    INDEX idx_topico_dni(estudiante_dni)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 4) Derivaciones psicológicas EXTERNAS.
CREATE TABLE IF NOT EXISTS derivaciones_psicologicas_externas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    numero VARCHAR(30) NULL,
    fecha_derivacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    estudiante_dni VARCHAR(20) NULL,
    estudiante_nombre VARCHAR(255) NOT NULL,
    programa_id INT NULL,
    programa_nombre VARCHAR(255) NULL,
    ciclo VARCHAR(20) NULL,
    periodo_id INT NULL,
    celular VARCHAR(30) NULL,
    correo VARCHAR(150) NULL,
    motivo_general VARCHAR(500) NOT NULL,
    indicadores_observados TEXT NULL,
    prioridad ENUM('BAJA','MEDIA','ALTA','URGENTE') NOT NULL DEFAULT 'MEDIA',
    institucion_destino VARCHAR(255) NULL,
    tipo_destino ENUM('CEM','ESTABLECIMIENTO_SALUD','CSMC','PROFESIONAL_EXTERNO','OTRO') NOT NULL DEFAULT 'CEM',
    derivado_por_usuario_id INT NOT NULL,
    origen ENUM('TUTORIA','TOPICO','UBE','OTRO') NOT NULL DEFAULT 'UBE',
    estado ENUM('PENDIENTE','DERIVADO','CITA_PROGRAMADA','ATENDIDO_EXTERNAMENTE','EN_SEGUIMIENTO','CERRADO') NOT NULL DEFAULT 'PENDIENTE',
    fecha_cita DATE NULL,
    fecha_atencion_externa DATE NULL,
    resultado_administrativo VARCHAR(500) NULL,
    observacion_seguimiento TEXT NULL,
    fecha_cierre DATETIME NULL,
    INDEX idx_dpe_fecha(fecha_derivacion),
    INDEX idx_dpe_estado(estado),
    INDEX idx_dpe_programa(programa_id),
    INDEX idx_dpe_dni(estudiante_dni)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
