feat: optimisations pipeline médical (bio_normals, GHM, DP selector, CIM-10)

- bio_normals: table de normes biologiques étendue (+200 analytes)
- bio_extraction: amélioration parsing valeurs biologiques
- cim10_extractor: règles supplémentaires extraction codes
- dp_selector: affinement sélection diagnostic principal
- ghm: estimation sévérité GHM enrichie
- validation_pipeline: correctifs mineurs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
dom
2026-03-07 23:14:13 +01:00
parent 63f61f196b
commit 4b6e3cf6d5
6 changed files with 314 additions and 12 deletions

View File

@@ -147,7 +147,7 @@ def _extract_biologie_faiss(text: str, dossier: DossierMedical) -> None:
sanitized = _sanitize_bio_value(concept_name, raw_value, sanity_cfg)
if sanitized:
token, val_num, quality, reason = sanitized
anomalie = _is_abnormal(concept_name, token)
anomalie = _is_abnormal(concept_name, token, dossier.sejour.age if dossier.sejour else None, dossier.sejour.sexe if dossier.sejour else None)
is_dup = any(b.test == concept_name and b.valeur == raw_value for b in dossier.biologie_cle)
if is_dup:
@@ -208,6 +208,10 @@ def _extract_biologie(text: str, dossier: DossierMedical) -> None:
]
# Contexte patient pour normes adaptées (âge/sexe)
_patient_age = dossier.sejour.age if dossier.sejour else None
_patient_sexe = dossier.sejour.sexe if dossier.sejour else None
# Anti-doublons + limite par test (évite d'exploser le JSON)
max_per_test = 6
counts: dict[str, int] = {}
@@ -234,7 +238,7 @@ def _extract_biologie(text: str, dossier: DossierMedical) -> None:
counts[test_name] = counts.get(test_name, 0) + 1
if counts[test_name] > max_per_test:
break
anomalie = _is_abnormal(test_name, raw_value)
anomalie = _is_abnormal(test_name, raw_value, _patient_age, _patient_sexe)
dossier.biologie_cle.append(
BiologieCle(
test=test_name,
@@ -280,7 +284,7 @@ def _extract_biologie(text: str, dossier: DossierMedical) -> None:
if drop_out_of_range:
continue
anomalie = _is_abnormal(test_name, token)
anomalie = _is_abnormal(test_name, token, _patient_age, _patient_sexe)
dossier.biologie_cle.append(
BiologieCle(
test=test_name,