fix: corriger 3 tests fusion alignés sur la logique Trackare > CRH
Les tests supposaient que le CRH gagnait à spécificité égale — en réalité le bonus Trackare l'emporte (codage DIM établissement prioritaire). Aussi : dp_selection synthétique créée par fusion quand aucun source n'existe. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -499,7 +499,11 @@ class TestDPSelectionPropagation:
|
||||
"""Vérifie que dp_selection est propagée depuis le dossier source du DP retenu."""
|
||||
|
||||
def test_dp_selection_propagated_multi_dossier(self):
|
||||
"""Fusion 2 dossiers : dp_selection vient du dossier dont le DP est retenu."""
|
||||
"""Fusion 2 dossiers : Trackare prioritaire à spécificité égale.
|
||||
|
||||
K85.1 et K80.2 ont la même spécificité (4 chars), donc le bonus
|
||||
Trackare l'emporte. dp_selection est recréée pour le DP retenu.
|
||||
"""
|
||||
sel = DPSelection(
|
||||
chosen_index=0,
|
||||
chosen_term="Pancréatite aiguë biliaire",
|
||||
@@ -523,14 +527,13 @@ class TestDPSelectionPropagation:
|
||||
cim10_suggestion="K80.2"),
|
||||
)
|
||||
result = merge_dossiers([d1, d2])
|
||||
# DP = K85.1 (plus spécifique) → dp_selection propagée depuis d1
|
||||
assert result.diagnostic_principal.cim10_suggestion == "K85.1"
|
||||
# Trackare gagne à spécificité égale
|
||||
assert result.diagnostic_principal.cim10_suggestion == "K80.2"
|
||||
assert result.dp_selection is not None
|
||||
assert result.dp_selection.chosen_code == "K85.1"
|
||||
assert result.dp_selection.verdict == "CONFIRMED"
|
||||
assert result.dp_selection.chosen_code == "K80.2"
|
||||
|
||||
def test_dp_selection_none_when_no_source(self):
|
||||
"""Si aucun dossier n'a de dp_selection, le fusionné non plus."""
|
||||
def test_dp_selection_synthetic_when_no_source(self):
|
||||
"""Si aucun dossier n'a de dp_selection, la fusion en crée une synthétique."""
|
||||
d1 = DossierMedical(
|
||||
diagnostic_principal=Diagnostic(texte="HTA", cim10_suggestion="I10"),
|
||||
)
|
||||
@@ -538,7 +541,9 @@ class TestDPSelectionPropagation:
|
||||
diagnostic_principal=Diagnostic(texte="HTA", cim10_suggestion="I10"),
|
||||
)
|
||||
result = merge_dossiers([d1, d2])
|
||||
assert result.dp_selection is None
|
||||
assert result.dp_selection is not None
|
||||
assert result.dp_selection.chosen_code == "I10"
|
||||
assert result.dp_selection.reason == "DP fusion (synthétique)"
|
||||
|
||||
def test_dp_selection_single_dossier(self):
|
||||
"""Dossier unique : dp_selection est conservée via model_copy."""
|
||||
@@ -558,11 +563,15 @@ class TestDPSelectionPropagation:
|
||||
assert result.dp_selection.verdict == "REVIEW"
|
||||
|
||||
def test_dp_selection_preserves_evidence_reason_verdict(self):
|
||||
"""Fusion multi-docs : evidence, reason et verdict sont préservés intégralement."""
|
||||
"""Fusion multi-docs : dp_selection du CRH préservée quand CRH est plus spécifique.
|
||||
|
||||
I26.99 (5 chars) > I80.2 (4 chars) → CRH gagne par spécificité malgré
|
||||
le bonus Trackare. La dp_selection originale est alors propagée intacte.
|
||||
"""
|
||||
sel = DPSelection(
|
||||
chosen_index=0,
|
||||
chosen_term="Embolie pulmonaire",
|
||||
chosen_code="I26.9",
|
||||
chosen_code="I26.99",
|
||||
verdict="CONFIRMED",
|
||||
confidence="high",
|
||||
evidence=[
|
||||
@@ -572,7 +581,7 @@ class TestDPSelectionPropagation:
|
||||
],
|
||||
reason="Écart score 5.0 >= seuil 3.0",
|
||||
candidates=[
|
||||
DPCandidate(index=0, term="Embolie pulmonaire", code="I26.9",
|
||||
DPCandidate(index=0, term="Embolie pulmonaire", code="I26.99",
|
||||
section_strength=2, confidence="high", score=9.0,
|
||||
score_details={"section": 2, "confidence": 3, "diag_section_bonus": 4}),
|
||||
DPCandidate(index=1, term="Thrombose veineuse", code="I80.2",
|
||||
@@ -582,7 +591,7 @@ class TestDPSelectionPropagation:
|
||||
)
|
||||
d1 = DossierMedical(
|
||||
document_type="crh",
|
||||
diagnostic_principal=Diagnostic(texte="Embolie pulmonaire", cim10_suggestion="I26.9"),
|
||||
diagnostic_principal=Diagnostic(texte="Embolie pulmonaire", cim10_suggestion="I26.99"),
|
||||
dp_selection=sel,
|
||||
)
|
||||
d2 = DossierMedical(
|
||||
@@ -591,6 +600,8 @@ class TestDPSelectionPropagation:
|
||||
)
|
||||
result = merge_dossiers([d1, d2])
|
||||
|
||||
# CRH gagne par spécificité (I26.99 > I80.2)
|
||||
assert result.diagnostic_principal.cim10_suggestion == "I26.99"
|
||||
assert result.dp_selection is not None
|
||||
rs = result.dp_selection
|
||||
# Verdict/confidence/reason intacts
|
||||
|
||||
Reference in New Issue
Block a user