Suite de tests unitaires pour tous les modules pipeline qui ne dépendent
pas du VLM — utiles pour garantir la non-régression après refactor et
servir de spec vivante de chaque fonction.
Fichiers :
- tests/test_json_utils.py (20 tests) : parse_json_output + toutes les
stratégies de récupération (fences, virgules manquantes, boucles vides,
fermeture JSON, fallback _raw/_parse_error)
- tests/test_deskew.py (11 tests) : détection Hough + correction,
image synthétique + fixtures cache réel
- tests/test_checkboxes.py (17 tests) : parse_ghs_injustifie,
dark_ratio, inner_frac, et ground truth visuel sur 17 dossiers
(mapping hash→OGC résolu au runtime pour éviter les constantes fragiles)
- tests/test_validation.py (18 tests) : _check_cim10/ccam/ghm/ghs,
cross-checks GHM↔GHS, annotate sur JSON vide et complet,
preservation de l'input (copie défensive)
- tests/test_schema.py (8 tests) : clean_dossier retire les champs
debug, préserve les champs métier, compacte la validation, ne modifie
pas l'input
- tests/test_zones_config.py (8 tests) : load/save round-trip, merge
avec defaults, résilience JSON corrompu, get_zone
Total : 107 tests, 5.1 s d'exécution, tous passent. Aucune dépendance
GPU, s'exécutent en CI.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Ajoute une couche de validation post-extraction contre les référentiels
officiels de l'ATIH (Agence Technique de l'Information sur
l'Hospitalisation) pour 2018. Zéro tolérance sur les codes T2A : un
code invalide est flaggé, et une correction par plus proche voisin
(Levenshtein ≤ 1) est proposée.
Contenu :
- pipeline/referentials.py : API publique is_valid_{cim10,ccam,ghm,ghs},
get_cim10_libelle, nearest_cim10, ghm_to_ghs. CLI --build/--test/--stats.
- pipeline/validation.py : annote un JSON d'extraction avec un bloc
`_validation` par page (codes valides/invalides + suggestions + cross-
checks GHM↔GHS).
- referentials/sources/ : données brutes ATIH publiques (CIM-10 ClaML
2019 substitut, CCAM v5 2018, GHM v2018, tarifs fév. 2018).
- referentials/atih_2018.sqlite : base SQLite prête à l'emploi
(11 623 CIM-10 · 8 147 CCAM · 2 593 GHM · 5 329 couples GHM→GHS).
- tests/test_referentials.py : 11 tests unitaires (11/11 passent).
- annotate_validation.py : script qui annote tous les JSONs V2 en
place et produit validation_report.md.
Note CIM-10 : la version 2018 ATIH n'est publiée qu'en PDF, ClaML 2019
est utilisée en substitut (écart connu ≈ 60 codes / 11 600).
Gestion des suffixes PMSI : `*` (CMA exclue par le DP) et `+N`
(extension PMSI) sont strippés avant validation, le code racine seul
est comparé au référentiel.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>