-- BI UBE v3.1 - Encuesta anual + seguimiento del segundo semestre
-- Ejecutar UNA SOLA VEZ.
-- NO elimina campañas, encuestas, matrículas, tutorías ni relaciones existentes.

SET NAMES utf8mb4;

-- 1. Nombres oficiales de los cuatro programas.
-- Se actualiza el mismo registro para conservar su ID y todas sus relaciones.
UPDATE programas_estudio
SET codigo='APSTI',
    nombre='Arquitectura de Plataformas y Servicios de Tecnologías de Información'
WHERE codigo='APSTI'
   OR nombre='APSTI'
   OR nombre='Administración de Sistemas de Información'
   OR nombre='Administracion de Sistemas de Informacion'
   OR nombre LIKE 'Arquitectura de Plataformas%';

UPDATE programas_estudio
SET nombre='Enfermería Técnica'
WHERE codigo IN ('ET','ENFERMERIA','ENFERMERÍA')
   OR nombre IN ('Enfermeria Tecnica','Enfermería Técnica');

UPDATE programas_estudio
SET nombre='Contabilidad'
WHERE codigo IN ('CONT','CONTABILIDAD')
   OR nombre='Contabilidad';

UPDATE programas_estudio
SET nombre='Producción Agropecuaria'
WHERE codigo IN ('PA','AGROPECUARIA','PRODUCCION')
   OR nombre IN ('Produccion Agropecuaria','Producción Agropecuaria');

-- 2. Configuración anual: la campaña base se aplica una vez al año;
-- el segundo semestre utiliza una actualización corta de datos variables.
CREATE TABLE IF NOT EXISTS encuesta_anual_config (
    id INT AUTO_INCREMENT PRIMARY KEY,
    anio YEAR NOT NULL,
    campana_base_id INT NOT NULL,
    campana_actualizacion_id INT NULL,
    periodo_base_id INT NOT NULL,
    periodo_seguimiento_id INT NULL,
    estado ENUM('ACTIVO','CERRADO') NOT NULL DEFAULT 'ACTIVO',
    usuario_id INT NULL,
    fecha_registro DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    fecha_actualizacion DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY uk_encuesta_anual_anio(anio),
    INDEX idx_eac_base(campana_base_id),
    INDEX idx_eac_act(campana_actualizacion_id),
    INDEX idx_eac_pbase(periodo_base_id),
    INDEX idx_eac_pseg(periodo_seguimiento_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 3. DNI en encuesta para campañas futuras. No afecta campañas históricas.
ALTER TABLE encuesta_ube ADD COLUMN IF NOT EXISTS dni VARCHAR(20) NULL AFTER numero_celular;
CREATE INDEX IF NOT EXISTS idx_encuesta_ube_dni ON encuesta_ube(dni);

SELECT id,codigo,nombre,estado
FROM programas_estudio
ORDER BY nombre;
