-- QA de integridad, estados y aislamiento multiempresa del Sprint 13.
SELECT 'estados_activos' AS prueba, COUNT(*) AS total
FROM research_estados_busqueda WHERE activo=1;

SELECT 'matriz_tenant_huerfana' AS prueba, COUNT(*) AS total
FROM gene_busqueda_matriz_consultas m
LEFT JOIN org_empresas e ON e.id=m.id_empresa
LEFT JOIN gene_casos c ON c.id=m.id_caso AND c.id_empresa=m.id_empresa
LEFT JOIN gene_busqueda_planes p ON p.id=m.id_plan AND p.id_empresa=m.id_empresa AND p.id_caso=m.id_caso
LEFT JOIN gene_busqueda_plan_fuentes pf ON pf.id=m.id_plan_fuente AND pf.id_empresa=m.id_empresa AND pf.id_plan=m.id_plan AND pf.id_fuente=m.id_fuente
WHERE e.id IS NULL OR c.id IS NULL OR p.id IS NULL OR pf.id IS NULL;

SELECT 'matriz_ejecucion_cruzada' AS prueba, COUNT(*) AS total
FROM gene_busqueda_matriz_consultas m
JOIN gene_busqueda_ejecuciones x ON x.id=m.id_ejecucion
WHERE x.id_empresa<>m.id_empresa OR x.id_caso<>m.id_caso OR x.id_fuente<>m.id_fuente OR x.id_plan<>m.id_plan;

SELECT 'ejecucion_matriz_cruzada' AS prueba, COUNT(*) AS total
FROM gene_busqueda_ejecuciones x
JOIN gene_busqueda_matriz_consultas m ON m.id=x.id_matriz_consulta
WHERE x.id_empresa<>m.id_empresa OR x.id_caso<>m.id_caso OR x.id_fuente<>m.id_fuente OR x.id_plan<>m.id_plan;

SELECT 'descartes_cruzados' AS prueba, COUNT(*) AS total
FROM gene_busqueda_descartes d
JOIN gene_busqueda_ejecuciones x ON x.id=d.id_ejecucion
JOIN gene_busqueda_resultados r ON r.id=d.id_resultado AND r.id_ejecucion=x.id
WHERE d.id_empresa<>x.id_empresa OR d.id_caso<>x.id_caso OR d.id_fuente<>x.id_fuente OR r.id_empresa<>d.id_empresa;

SELECT 'descartes_sin_motivo' AS prueba, COUNT(*) AS total
FROM gene_busqueda_descartes
WHERE activo=1 AND (TRIM(motivo_detalle)='' OR firma_candidato NOT REGEXP '^[0-9a-f]{64}$');

SELECT 'matriz_hash_invalido' AS prueba, COUNT(*) AS total
FROM gene_busqueda_matriz_consultas
WHERE combinacion_hash NOT REGEXP '^[0-9a-f]{64}$' OR TRIM(consulta_exacta)='';

SELECT 'duplicados_matriz' AS prueba, COUNT(*) AS total
FROM (
  SELECT id_empresa,id_caso,id_plan,id_fuente,combinacion_hash,COUNT(*) AS n
  FROM gene_busqueda_matriz_consultas
  GROUP BY id_empresa,id_caso,id_plan,id_fuente,combinacion_hash
  HAVING COUNT(*)>1
) q;
