-- Genera fichas simuladas del INSTRUMENTO 2 desde sesiones de unidad 3 del registro auxiliar.
-- Reglas:
-- 1. Solo toma sesiones cerradas de unidad_numero = 3 con docente y estudiantes evaluados.
-- 2. Crea solo una ficha por docente, usando la sesion mas reciente de unidad 3.
-- 3. Omite docentes que ya tienen cualquier monitoreo registrado en mon_monitoreo.
-- 4. Marca el monitoreo como DIAGNOSTICO y deja trazabilidad con AUTO_I2_U3_<id_auxiliar_sesion>.

START TRANSACTION;

DROP TEMPORARY TABLE IF EXISTS tmp_mon_i2_u3_base;
CREATE TEMPORARY TABLE tmp_mon_i2_u3_base ENGINE=InnoDB AS
SELECT
    CONCAT('AUTO_I2_U3_', s.id_auxiliar_sesion) AS seed_key,
    s.id_auxiliar_sesion,
    s.id_docente,
    s.id_anio_lectivo,
    s.id_periodo_academico,
    s.id_aula,
    a.id_nivel,
    a.id_grado,
    a.id_seccion,
    s.id_area,
    s.id_competencia,
    s.unidad_numero,
    COALESCE(NULLIF(TRIM(s.unidad_titulo), ''), CONCAT('Unidad ', s.unidad_numero)) AS unidad_titulo,
    s.sesion_numero,
    COALESCE(NULLIF(TRIM(s.sesion_titulo), ''), CONCAT('Sesion ', s.sesion_numero)) AS sesion_titulo,
    s.fecha,
    s.capacidades,
    s.desempenos_cneb,
    s.criterios_evaluacion,
    s.proposito,
    s.evidencia,
    s.instrumento,
    s.retroalimentacion_general,
    s.acciones_mejora,
    ac.nombre AS area_curricular,
    c.descripcion AS competencia_descripcion,
    p.numero_documento AS docente_dni,
    COALESCE(NULLIF(p.nombre_completo, ''), TRIM(CONCAT_WS(' ', p.apellido_paterno, p.apellido_materno, p.nombres))) AS docente_nombre,
    p.celular AS docente_celular,
    COALESCE((SELECT NULLIF(TRIM(ie.dre), '') FROM institucion_educativa ie WHERE ie.estado = 1 ORDER BY ie.id_institucion LIMIT 1), '2200 - DRE San Martin') AS dre,
    COALESCE((SELECT NULLIF(TRIM(ie.ugel), '') FROM institucion_educativa ie WHERE ie.estado = 1 ORDER BY ie.id_institucion LIMIT 1), '220003 - UGEL Huallaga') AS ugel,
    COALESCE((SELECT NULLIF(TRIM(ie.codigo_modular), '') FROM institucion_educativa ie WHERE ie.estado = 1 ORDER BY ie.id_institucion LIMIT 1), '0003') AS institucion_codigo,
    COALESCE((SELECT NULLIF(TRIM(ie.nombre), '') FROM institucion_educativa ie WHERE ie.estado = 1 ORDER BY ie.id_institucion LIMIT 1), '0003') AS institucion_nombre,
    COALESCE((SELECT NULLIF(TRIM(ie.director_nombre), '') FROM institucion_educativa ie WHERE ie.estado = 1 ORDER BY ie.id_institucion LIMIT 1), 'Director') AS monitor_nombre,
    COALESCE((SELECT NULLIF(TRIM(ie.director_dni), '') FROM institucion_educativa ie WHERE ie.estado = 1 ORDER BY ie.id_institucion LIMIT 1), '') AS monitor_dni,
    (SELECT COUNT(*) FROM matricula ma WHERE ma.id_aula = s.id_aula AND ma.id_estado_matricula = 1) AS estudiantes_matriculados,
    (SELECT COUNT(*) FROM eval_auxiliar_sesion_estudiante de WHERE de.id_auxiliar_sesion = s.id_auxiliar_sesion AND de.nivel_logro IN ('AD', 'A', 'B', 'C')) AS estudiantes_asistentes,
    (SELECT COUNT(*) FROM eval_auxiliar_sesion_estudiante de WHERE de.id_auxiliar_sesion = s.id_auxiliar_sesion AND NULLIF(TRIM(de.retroalimentacion), '') IS NOT NULL) AS retroalimentaciones_individuales,
    (SELECT COUNT(*) FROM eval_auxiliar_sesion_estudiante de WHERE de.id_auxiliar_sesion = s.id_auxiliar_sesion AND NULLIF(TRIM(de.accion_mejora), '') IS NOT NULL) AS acciones_individuales,
    (
        CASE WHEN NULLIF(TRIM(COALESCE(s.capacidades, '')), '') IS NOT NULL THEN 1 ELSE 0 END +
        CASE WHEN NULLIF(TRIM(COALESCE(s.desempenos_cneb, '')), '') IS NOT NULL THEN 1 ELSE 0 END +
        CASE WHEN NULLIF(TRIM(COALESCE(s.criterios_evaluacion, '')), '') IS NOT NULL THEN 1 ELSE 0 END +
        CASE WHEN NULLIF(TRIM(COALESCE(s.proposito, '')), '') IS NOT NULL THEN 1 ELSE 0 END
    ) AS planificacion_campos
FROM eval_auxiliar_sesion s
INNER JOIN aula a ON a.id_aula = s.id_aula
INNER JOIN docente d ON d.id_docente = s.id_docente
INNER JOIN persona p ON p.id_persona = d.id_persona
INNER JOIN area_curricular ac ON ac.id_area = s.id_area
INNER JOIN competencia c ON c.id_competencia = s.id_competencia
WHERE s.unidad_numero = 3
  AND s.estado = 'CERRADO'
  AND s.id_docente IS NOT NULL
  AND s.id_anio_lectivo = (
      SELECT al.id_anio_lectivo
      FROM anio_lectivo al
      WHERE al.estado = 1
      ORDER BY al.anio DESC, al.id_anio_lectivo DESC
      LIMIT 1
  )
  AND EXISTS (
      SELECT 1
      FROM eval_auxiliar_sesion_estudiante de
      WHERE de.id_auxiliar_sesion = s.id_auxiliar_sesion
        AND de.nivel_logro IN ('AD', 'A', 'B', 'C')
  )
  AND (
      NOT EXISTS (
          SELECT 1
          FROM mon_monitoreo mm
          WHERE mm.id_docente = s.id_docente
      )
      OR EXISTS (
          SELECT 1
          FROM mon_monitoreo mm
          WHERE mm.id_docente = s.id_docente
            AND mm.observaciones COLLATE utf8mb4_unicode_ci LIKE CONCAT(CONCAT('AUTO_I2_U3_', s.id_auxiliar_sesion) COLLATE utf8mb4_unicode_ci, '%')
      )
  )
  AND s.id_auxiliar_sesion = (
      SELECT sx.id_auxiliar_sesion
      FROM eval_auxiliar_sesion sx
      WHERE sx.id_docente = s.id_docente
        AND sx.unidad_numero = 3
        AND sx.estado = 'CERRADO'
        AND sx.id_anio_lectivo = s.id_anio_lectivo
        AND EXISTS (
            SELECT 1
            FROM eval_auxiliar_sesion_estudiante dx
            WHERE dx.id_auxiliar_sesion = sx.id_auxiliar_sesion
              AND dx.nivel_logro IN ('AD', 'A', 'B', 'C')
        )
      ORDER BY EXISTS (
                   SELECT 1
                   FROM mon_monitoreo mmx
                   WHERE mmx.id_docente = sx.id_docente
                     AND mmx.observaciones COLLATE utf8mb4_unicode_ci LIKE CONCAT(CONCAT('AUTO_I2_U3_', sx.id_auxiliar_sesion) COLLATE utf8mb4_unicode_ci, '%')
               ) DESC,
               sx.fecha DESC,
               (SELECT COUNT(*) FROM eval_auxiliar_sesion_estudiante dx WHERE dx.id_auxiliar_sesion = sx.id_auxiliar_sesion AND dx.nivel_logro IN ('AD', 'A', 'B', 'C')) DESC,
               sx.id_auxiliar_sesion DESC
      LIMIT 1
  );

DROP TEMPORARY TABLE IF EXISTS tmp_mon_i2_u3_candidates;
CREATE TEMPORARY TABLE tmp_mon_i2_u3_candidates ENGINE=InnoDB AS
SELECT
    b.*,
    CASE
        WHEN b.estudiantes_matriculados > 0 AND b.estudiantes_asistentes >= CEIL(b.estudiantes_matriculados * 0.90) THEN 4
        WHEN b.estudiantes_matriculados > 0 AND b.estudiantes_asistentes >= CEIL(b.estudiantes_matriculados * 0.75) THEN 3
        WHEN b.estudiantes_matriculados > 0 AND b.estudiantes_asistentes >= CEIL(b.estudiantes_matriculados * 0.50) THEN 2
        ELSE 1
    END AS d1_level,
    CASE
        WHEN b.planificacion_campos >= 4 THEN 4
        WHEN b.planificacion_campos = 3 THEN 3
        WHEN b.planificacion_campos = 2 THEN 2
        ELSE 1
    END AS d2_level,
    CASE
        WHEN b.retroalimentaciones_individuales > 0 AND b.acciones_individuales > 0 THEN 4
        WHEN b.retroalimentaciones_individuales > 0 OR b.acciones_individuales > 0 OR NULLIF(TRIM(COALESCE(b.retroalimentacion_general, '')), '') IS NOT NULL OR NULLIF(TRIM(COALESCE(b.acciones_mejora, '')), '') IS NOT NULL THEN 3
        WHEN b.estudiantes_asistentes > 0 THEN 2
        ELSE 1
    END AS d3_level,
    CASE
        WHEN b.estudiantes_matriculados > 0 AND b.estudiantes_asistentes >= CEIL(b.estudiantes_matriculados * 0.85) THEN 3
        WHEN b.estudiantes_asistentes > 0 THEN 2
        ELSE 1
    END AS d4_level,
    CASE
        WHEN b.estudiantes_asistentes > 0 THEN 3
        ELSE 1
    END AS d5_level
FROM tmp_mon_i2_u3_base b;

ALTER TABLE tmp_mon_i2_u3_candidates
    ADD COLUMN puntaje_total DECIMAL(8,2) NOT NULL DEFAULT 0,
    ADD COLUMN porcentaje_logro DECIMAL(6,2) NOT NULL DEFAULT 0,
    ADD COLUMN nivel_global VARCHAR(30) NULL;

UPDATE tmp_mon_i2_u3_candidates
SET
    puntaje_total = d1_level + d2_level + d3_level + d4_level + d5_level,
    porcentaje_logro = ROUND(((d1_level + d2_level + d3_level + d4_level + d5_level) / 20) * 100, 2),
    nivel_global = CASE
        WHEN ROUND(((d1_level + d2_level + d3_level + d4_level + d5_level) / 20) * 100, 2) >= 85 THEN 'Destacado'
        WHEN ROUND(((d1_level + d2_level + d3_level + d4_level + d5_level) / 20) * 100, 2) >= 70 THEN 'Logrado'
        WHEN ROUND(((d1_level + d2_level + d3_level + d4_level + d5_level) / 20) * 100, 2) >= 50 THEN 'En proceso'
        ELSE 'En inicio'
    END;

INSERT INTO mon_monitoreo (
    id_instrumento, id_docente, id_monitor_usuario, momento_monitoreo, dre, ugel,
    institucion_codigo, institucion_nombre, fecha, hora_inicio, hora_fin,
    id_nivel, id_grado, id_seccion, id_area, id_competencia, area_curricular,
    tema, actividad, competencia_descripcion, capacidad, desempeno, proposito_sesion,
    estudiantes_matriculados, estudiantes_asistentes,
    docente_celular, monitor_nombre, monitor_dni, estado,
    puntaje_total, puntaje_maximo, porcentaje_logro, nivel_global, fortalezas,
    aspectos_mejora, acciones_mejora, compromisos_docente, pasos_seguir,
    recomendaciones_directivas, fecha_seguimiento, observaciones
)
SELECT
    i.id_instrumento,
    c.id_docente,
    NULL,
    'DIAGNOSTICO',
    c.dre,
    c.ugel,
    c.institucion_codigo,
    c.institucion_nombre,
    c.fecha,
    '08:00:00',
    '08:45:00',
    c.id_nivel,
    c.id_grado,
    c.id_seccion,
    c.id_area,
    c.id_competencia,
    c.area_curricular,
    LEFT(CONCAT('Unidad ', c.unidad_numero, ': ', c.unidad_titulo, ' | Sesion ', c.sesion_numero, ': ', c.sesion_titulo), 260),
    c.sesion_titulo,
    c.competencia_descripcion,
    c.capacidades,
    c.desempenos_cneb,
    c.proposito,
    c.estudiantes_matriculados,
    c.estudiantes_asistentes,
    c.docente_celular,
    c.monitor_nombre,
    c.monitor_dni,
    'CERRADO',
    c.puntaje_total,
    20.00,
    c.porcentaje_logro,
    c.nivel_global,
    CONCAT('Ficha diagnostica simulada desde registro auxiliar. Se tomo la sesion de unidad 3: ', c.sesion_titulo, '. Competencia: ', c.competencia_descripcion, '.'),
    CONCAT('Revisar evidencias de la sesion y fortalecer los aspectos con nivel menor a Logrado. Estudiantes evaluados: ', c.estudiantes_asistentes, ' de ', c.estudiantes_matriculados, '.'),
    COALESCE(NULLIF(TRIM(c.acciones_mejora), ''), 'Programar retroalimentacion formativa y acompanamiento segun los resultados del registro auxiliar.'),
    'Participar en dialogo reflexivo y sostener el uso del registro auxiliar como evidencia de mejora.',
    'Realizar seguimiento en el siguiente monitoreo de proceso.',
    'Acompanamiento pedagogico focalizado en la competencia observada.',
    DATE_ADD(c.fecha, INTERVAL 30 DAY),
    CONCAT(c.seed_key, ' | Ficha simulada desde registro auxiliar, unidad 3, sesion auxiliar #', c.id_auxiliar_sesion, '.')
FROM tmp_mon_i2_u3_candidates c
INNER JOIN mon_instrumento i ON i.codigo = 'DESEMPENO_AULA' AND i.activo = 1
WHERE NOT EXISTS (
    SELECT 1 FROM mon_monitoreo mm WHERE mm.id_docente = c.id_docente
);

DROP TEMPORARY TABLE IF EXISTS tmp_mon_i2_u3_monitoreos;
CREATE TEMPORARY TABLE tmp_mon_i2_u3_monitoreos ENGINE=InnoDB AS
SELECT c.*, mm.id_monitoreo
FROM tmp_mon_i2_u3_candidates c
INNER JOIN mon_monitoreo mm
    ON mm.id_docente = c.id_docente
   AND mm.observaciones COLLATE utf8mb4_unicode_ci LIKE CONCAT(c.seed_key COLLATE utf8mb4_unicode_ci, '%');

INSERT INTO mon_observacion_aula (
    id_monitoreo, id_docente, id_observador_usuario, momento_monitoreo,
    dre, ugel, institucion_codigo, institucion_nombre,
    observador_nombre, observador_dni,
    fecha, turno, hora_inicio, hora_fin, id_nivel, id_grado, id_seccion,
    id_area, id_competencia, areas_curriculares, docente_celular,
    titulo_sesion, logro_sesion, actividad, competencia_descripcion, capacidad,
    desempeno, proposito_sesion, estudiantes_matriculados, estudiantes_asistentes,
    resumen_observacion, necesidades_apoyo, acciones_seguimiento, estado
)
SELECT
    c.id_monitoreo,
    c.id_docente,
    NULL,
    'DIAGNOSTICO',
    c.dre,
    c.ugel,
    c.institucion_codigo,
    c.institucion_nombre,
    c.monitor_nombre,
    c.monitor_dni,
    c.fecha,
    'Manana',
    '08:00:00',
    '08:45:00',
    c.id_nivel,
    c.id_grado,
    c.id_seccion,
    c.id_area,
    c.id_competencia,
    c.area_curricular,
    c.docente_celular,
    c.sesion_titulo,
    c.proposito,
    c.sesion_titulo,
    c.competencia_descripcion,
    c.capacidades,
    c.desempenos_cneb,
    c.proposito,
    c.estudiantes_matriculados,
    c.estudiantes_asistentes,
    CONCAT('Observacion diagnostica simulada desde registro auxiliar U3. Fuente: sesion auxiliar #', c.id_auxiliar_sesion, '.'),
    CONCAT('Necesidad priorizada segun ficha simulada: fortalecer retroalimentacion, mediacion y seguimiento de estudiantes con dificultad.'),
    COALESCE(NULLIF(TRIM(c.acciones_mejora), ''), 'Programar acompanamiento y revisar avances en el monitoreo de proceso.'),
    'COMPLETO'
FROM tmp_mon_i2_u3_monitoreos c
WHERE NOT EXISTS (
    SELECT 1 FROM mon_observacion_aula o WHERE o.id_monitoreo = c.id_monitoreo
);

DROP TEMPORARY TABLE IF EXISTS tmp_mon_i2_u3_observaciones;
CREATE TEMPORARY TABLE tmp_mon_i2_u3_observaciones ENGINE=InnoDB AS
SELECT c.*, o.id_observacion
FROM tmp_mon_i2_u3_monitoreos c
INNER JOIN mon_observacion_aula o ON o.id_monitoreo = c.id_monitoreo;

INSERT INTO mon_observacion_desempeno_valoracion (
    id_observacion, desempeno_codigo, nivel_logro, sustento_valoracion, recomendacion, actualizado_en
)
SELECT id_observacion, 'D1', d1_level,
       CONCAT('Registro auxiliar U3: ', estudiantes_asistentes, ' de ', estudiantes_matriculados, ' estudiantes cuentan con nivel de logro registrado.'),
       'Mantener estrategias de participacion activa y recuperar evidencias de estudiantes no evaluados.', NOW()
FROM tmp_mon_i2_u3_observaciones
UNION ALL
SELECT id_observacion, 'D2', d2_level,
       CONCAT('La sesion registra ', planificacion_campos, ' elementos pedagogicos entre capacidades, desempenos, criterios y proposito.'),
       'Profundizar actividades que demanden razonamiento, creatividad y pensamiento critico.', NOW()
FROM tmp_mon_i2_u3_observaciones
UNION ALL
SELECT id_observacion, 'D3', d3_level,
       CONCAT('Retroalimentaciones individuales: ', retroalimentaciones_individuales, '. Acciones de mejora individuales: ', acciones_individuales, '.'),
       'Asegurar retroalimentacion descriptiva y acciones de mejora para estudiantes con B o C.', NOW()
FROM tmp_mon_i2_u3_observaciones
UNION ALL
SELECT id_observacion, 'D4', d4_level,
       'Valoracion simulada a partir del desarrollo registrado de la sesion y participacion de estudiantes.',
       'Sostener trato respetuoso, escucha activa y cercania pedagogica durante la sesion.', NOW()
FROM tmp_mon_i2_u3_observaciones
UNION ALL
SELECT id_observacion, 'D5', d5_level,
       'Valoracion simulada considerando que la sesion fue cerrada en el registro auxiliar.',
       'Reforzar normas y mecanismos formativos para dar continuidad a la actividad de aprendizaje.', NOW()
FROM tmp_mon_i2_u3_observaciones
ON DUPLICATE KEY UPDATE
    nivel_logro = VALUES(nivel_logro),
    sustento_valoracion = VALUES(sustento_valoracion),
    recomendacion = VALUES(recomendacion),
    actualizado_en = NOW();

INSERT INTO mon_respuesta (
    id_monitoreo, id_indicador, respuesta, puntaje, marca_alerta, comentario, sustento_evidencia
)
SELECT x.id_monitoreo, ind.id_indicador, CAST(x.nivel_logro AS CHAR), x.nivel_logro,
       CASE WHEN x.nivel_logro <= 2 THEN 1 ELSE 0 END,
       x.comentario,
       x.evidencia
FROM (
    SELECT id_monitoreo, 'D01' AS indicador_codigo, d1_level AS nivel_logro,
           CONCAT('Involucramiento simulado con ', estudiantes_asistentes, '/', estudiantes_matriculados, ' estudiantes evaluados.') AS comentario,
           CONCAT('Registro auxiliar U3, sesion #', id_auxiliar_sesion, ': ', sesion_titulo) AS evidencia
    FROM tmp_mon_i2_u3_observaciones
    UNION ALL
    SELECT id_monitoreo, 'D02', d2_level,
           CONCAT('Planificacion registrada con ', planificacion_campos, ' elementos pedagogicos.'),
           CONCAT('Capacidades: ', COALESCE(capacidades, 'Sin registro'), ' | Desempenos: ', COALESCE(desempenos_cneb, 'Sin registro'))
    FROM tmp_mon_i2_u3_observaciones
    UNION ALL
    SELECT id_monitoreo, 'D03', d3_level,
           CONCAT('Retroalimentaciones: ', retroalimentaciones_individuales, '; acciones individuales: ', acciones_individuales, '.'),
           CONCAT('Criterios: ', COALESCE(criterios_evaluacion, 'Sin registro'))
    FROM tmp_mon_i2_u3_observaciones
    UNION ALL
    SELECT id_monitoreo, 'D04', d4_level,
           'Ambiente de respeto y proximidad simulado desde el cierre regular de la sesion.',
           CONCAT('Sesion observada: ', sesion_titulo)
    FROM tmp_mon_i2_u3_observaciones
    UNION ALL
    SELECT id_monitoreo, 'D05', d5_level,
           'Regulacion del comportamiento simulada desde el registro cerrado de la sesion.',
           CONCAT('Unidad 3: ', unidad_titulo)
    FROM tmp_mon_i2_u3_observaciones
) x
INNER JOIN mon_indicador ind ON ind.codigo = x.indicador_codigo
INNER JOIN mon_dimension dim ON dim.id_dimension = ind.id_dimension
INNER JOIN mon_instrumento ins ON ins.id_instrumento = dim.id_instrumento
WHERE ins.codigo = 'DESEMPENO_AULA'
ON DUPLICATE KEY UPDATE
    respuesta = VALUES(respuesta),
    puntaje = VALUES(puntaje),
    marca_alerta = VALUES(marca_alerta),
    comentario = VALUES(comentario),
    sustento_evidencia = VALUES(sustento_evidencia);

DROP TEMPORARY TABLE IF EXISTS tmp_mon_i2_u3_aspectos;
CREATE TEMPORARY TABLE tmp_mon_i2_u3_aspectos ENGINE=InnoDB AS
SELECT desempeno_codigo, MIN(id_aspecto) AS id_aspecto
FROM mon_observacion_aspecto
WHERE activo = 1
GROUP BY desempeno_codigo;

INSERT INTO mon_observacion_evidencia (
    id_observacion, id_aspecto, evidencia, interpretacion, accion_sugerida, actualizado_en
)
SELECT ev.id_observacion, asp.id_aspecto, ev.evidencia, ev.interpretacion, ev.accion_sugerida, NOW()
FROM (
    SELECT id_observacion, 'D1' AS desempeno_codigo,
           CONCAT('Sesion auxiliar #', id_auxiliar_sesion, ': ', estudiantes_asistentes, ' estudiantes evaluados de ', estudiantes_matriculados, '.') AS evidencia,
           'Se interpreta como evidencia de participacion registrada en la unidad 3.' AS interpretacion,
           'Promover participacion sostenida y registro completo de estudiantes.' AS accion_sugerida
    FROM tmp_mon_i2_u3_observaciones
    UNION ALL
    SELECT id_observacion, 'D2',
           CONCAT('Competencia trabajada: ', competencia_descripcion),
           'La sesion presenta elementos de planificacion vinculados a la competencia.',
           'Incorporar preguntas retadoras y actividades de analisis.'
    FROM tmp_mon_i2_u3_observaciones
    UNION ALL
    SELECT id_observacion, 'D3',
           CONCAT('Criterios registrados: ', COALESCE(criterios_evaluacion, 'Sin registro')),
           'La retroalimentacion se valora desde los registros individuales y generales disponibles.',
           'Aumentar retroalimentacion descriptiva y acciones de mejora.'
    FROM tmp_mon_i2_u3_observaciones
    UNION ALL
    SELECT id_observacion, 'D4',
           CONCAT('Actividad observada: ', sesion_titulo),
           'Se registra como evidencia simulada del clima de aula durante la actividad.',
           'Mantener trato respetuoso y acompanamiento cercano.'
    FROM tmp_mon_i2_u3_observaciones
    UNION ALL
    SELECT id_observacion, 'D5',
           CONCAT('Unidad 3: ', unidad_titulo),
           'Se registra como evidencia simulada de continuidad y gestion de la sesion.',
           'Reforzar mecanismos formativos de regulacion.'
    FROM tmp_mon_i2_u3_observaciones
) ev
INNER JOIN tmp_mon_i2_u3_aspectos asp ON asp.desempeno_codigo = ev.desempeno_codigo
WHERE NOT EXISTS (
    SELECT 1
    FROM mon_observacion_evidencia ex
    WHERE ex.id_observacion = ev.id_observacion
      AND ex.id_aspecto = asp.id_aspecto
);

COMMIT;

SELECT COUNT(*) AS monitoreos_generados FROM tmp_mon_i2_u3_monitoreos;
