feat: scoring DP déterministe + parser CPAM nouveau format + sections CRH
- Nouveau module dp_scoring.py : shortlist, scoring multi-critères, select_dp, LLM one-shot fallback avec garde-fous (négation, comorbidité, Z/R-codes) - Parser CPAM : auto-détection format legacy/ucr_extract, 6 nouveaux champs ControleCPAM (codes_etablissement, libelle, codes_retenus, ghm_ghs) - CRH parser : 3 nouvelles sections (diag_sortie, diag_principal, synthese) - Prompt DP_LLM_ONESHOT externalisé dans templates.py - Propagation dp_selection dans fusion.py - 808 tests passent (dont 21 nouveaux CPAM + 77 dp_scoring + 8 CRH) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -653,6 +653,38 @@ class TestBackwardCompatAntecedent:
|
||||
assert all(isinstance(c, Complication) for c in dossier.complications)
|
||||
|
||||
|
||||
class TestDPSelectionIntegration:
|
||||
"""Tests d'intégration du scoring DP dans le pipeline d'extraction."""
|
||||
|
||||
def test_crh_dp_selection_populated(self):
|
||||
"""Un CRH sans DP Trackare déclenche le scoring et peuple dp_selection."""
|
||||
parsed = {
|
||||
"type": "crh",
|
||||
"patient": {"sexe": "M"},
|
||||
"sejour": {},
|
||||
"diagnostics": [],
|
||||
}
|
||||
text = "Pancréatite aiguë biliaire.\nTTT de sortie :\nParacétamol\n\nDevenir : retour."
|
||||
dossier = extract_medical_info(parsed, text)
|
||||
assert dossier.diagnostic_principal is not None
|
||||
assert dossier.diagnostic_principal.cim10_suggestion == "K85.1"
|
||||
assert dossier.dp_selection is not None
|
||||
assert len(dossier.dp_selection.candidates) >= 1
|
||||
|
||||
def test_dp_selection_serialization(self):
|
||||
"""dp_selection est sérialisable en JSON via model_dump()."""
|
||||
from src.config import DPCandidate, DPSelection
|
||||
sel = DPSelection(
|
||||
verdict="confirmed",
|
||||
candidates=[DPCandidate(code="K85.1", label="Test", source_section="regex")],
|
||||
winner_reason="candidat unique",
|
||||
)
|
||||
data = sel.model_dump()
|
||||
assert data["verdict"] == "confirmed"
|
||||
assert len(data["candidates"]) == 1
|
||||
assert data["candidates"][0]["code"] == "K85.1"
|
||||
|
||||
|
||||
class TestSourceTrackingFields:
|
||||
"""Tests que les champs source_page/source_excerpt existent sur les modèles."""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user