feat: enrichissement CIM-10 sous-codes + normes biologiques dans prompt DAS

Piste 1 : ajout de cim10_supplements.json (40 sous-codes E10/E11/E13/F10)
fusionné au chargement par load_dict() — E11.9 et autres ne sont plus rejetés.

Piste 2 : export BIO_NORMALS depuis cim10_extractor, inclusion des plages
de référence [N: min-max] dans le contexte LLM et règle explicite dans le
prompt DAS pour éviter les hallucinations sur valeurs biologiques normales.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
dom
2026-02-12 23:46:42 +01:00
parent f44216b95b
commit e90450903e
7 changed files with 220 additions and 18 deletions

View File

@@ -126,6 +126,65 @@ class TestExtractDasLlm:
assert "Patient hypertendu diabétique" in prompt
class TestBioNormesInContext:
"""Tests pour l'inclusion des normes biologiques dans le contexte LLM."""
def test_format_contexte_includes_normes(self):
"""_format_contexte() affiche les normes [N: min-max] pour chaque résultat bio."""
from src.medical.rag_search import _format_contexte
contexte = {
"biologie_cle": [
("Créatinine", "76", False),
("CRP", "250", True),
("Lipasémie", "1200", True),
],
}
result = _format_contexte(contexte)
assert "[N: 50-120]" in result
assert "[N: 0-5]" in result
assert "[N: 0-60]" in result
# Créatinine normale → pas de marqueur ↑
assert "Créatinine 76 [N: 50-120]" in result
# CRP anormale → marqueur ↑
assert "CRP 250 [N: 0-5] (↑)" in result
def test_format_contexte_no_norme_for_unknown_test(self):
"""Les tests sans norme connue n'affichent pas de [N: ...]."""
from src.medical.rag_search import _format_contexte
contexte = {
"biologie_cle": [
("Test inconnu", "42", None),
],
}
result = _format_contexte(contexte)
assert "Test inconnu 42" in result
assert "[N:" not in result
def test_prompt_das_includes_bio_norms_rule(self):
"""Le prompt DAS contient la règle sur les normes biologiques."""
from src.medical.rag_search import _build_prompt_das_extraction
prompt = _build_prompt_das_extraction(
text="Patient avec créatinine normale",
contexte={"biologie_cle": [("Créatinine", "76", False)]},
existing_das=[],
dp_texte="Pancréatite aiguë",
)
assert "ATTENTION aux valeurs biologiques" in prompt
assert "[N: min-max]" in prompt
def test_bio_normals_exported(self):
"""BIO_NORMALS est bien exporté depuis cim10_extractor."""
from src.medical.cim10_extractor import BIO_NORMALS
assert "Créatinine" in BIO_NORMALS
assert BIO_NORMALS["Créatinine"] == (50, 120)
assert "CRP" in BIO_NORMALS
assert BIO_NORMALS["CRP"] == (0, 5)
class TestExtractDasLlmIntegration:
"""Tests d'intégration pour le pass LLM DAS dans cim10_extractor.py."""