-- QA manual Sprint 3: debe devolver cero en las comprobaciones de integridad.
SELECT COUNT(*) AS documentos_cruzados
FROM gene_documentos d
JOIN gene_casos c ON c.id=d.id_caso
JOIN storage_objetos o ON o.id=d.objeto_original_id
WHERE d.id_empresa<>c.id_empresa OR d.id_empresa<>o.id_empresa;

SELECT COUNT(*) AS vinculos_persona_cruzados
FROM gene_documento_personas dp
JOIN gene_documentos d ON d.id=dp.id_documento
JOIN gene_personas p ON p.id=dp.id_persona
WHERE dp.id_empresa<>d.id_empresa OR dp.id_empresa<>p.id_empresa OR d.id_caso<>p.id_caso;

SELECT COUNT(*) AS originales_sin_hash
FROM storage_objetos
WHERE eliminado_en IS NULL AND (sha256 IS NULL OR LENGTH(sha256)<>64);

SELECT COUNT(*) AS rutas_locales_inseguras
FROM storage_objetos
WHERE driver='local' AND (ruta LIKE '%..%' OR ruta LIKE '/%' OR ruta LIKE 'public/%');

SELECT estado,COUNT(*) total
FROM gene_documentos
GROUP BY estado
ORDER BY estado;
