- Filtre DAS identique au DP (violation règle PMSI) dans extracteur et fusion - Correction automatique D55.9 → D64.9 pour "Anémie" non qualifiée (70 cas) - 17 codes ajoutés aux supplements (K59.0, Z93.1, H92.0, A87.0, D64.9, etc.) - 436 tests OK (+14 nouveaux) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
105 lines
3.6 KiB
Python
105 lines
3.6 KiB
Python
"""Tests pour la fusion des suppléments CIM-10 dans cim10_dict."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
from pathlib import Path
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
|
|
from src.medical.cim10_dict import load_dict, validate_code, reset_cache
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def _reset():
|
|
"""Reset le cache singleton avant/après chaque test."""
|
|
reset_cache()
|
|
yield
|
|
reset_cache()
|
|
|
|
|
|
class TestCim10Supplements:
|
|
"""Tests pour la fusion des sous-codes supplémentaires."""
|
|
|
|
def test_e11_9_valid(self):
|
|
"""E11.9 (diabète type 2 sans complication) est reconnu."""
|
|
is_valid, label = validate_code("E11.9")
|
|
assert is_valid
|
|
assert "diabète" in label.lower() or "type 2" in label.lower()
|
|
|
|
def test_e10_9_valid(self):
|
|
"""E10.9 (diabète type 1 sans complication) est reconnu."""
|
|
is_valid, label = validate_code("E10.9")
|
|
assert is_valid
|
|
assert "type 1" in label.lower()
|
|
|
|
def test_f10_2_valid(self):
|
|
"""F10.2 (alcool, syndrome de dépendance) est reconnu."""
|
|
is_valid, label = validate_code("F10.2")
|
|
assert is_valid
|
|
assert "alcool" in label.lower()
|
|
|
|
def test_e13_9_valid(self):
|
|
"""E13.9 (autres diabètes sans complication) est reconnu."""
|
|
is_valid, label = validate_code("E13.9")
|
|
assert is_valid
|
|
|
|
def test_main_dict_not_overwritten(self):
|
|
"""Les entrées du dict principal ne sont PAS écrasées par les suppléments."""
|
|
d = load_dict()
|
|
# E11 existe dans le dict principal avec un label issu de FAISS
|
|
assert "E11" in d
|
|
# Le label doit venir du dict principal, pas des suppléments
|
|
# (les suppléments ne contiennent que E11.0-E11.9, pas E11)
|
|
|
|
def test_supplements_file_missing(self, tmp_path):
|
|
"""load_dict() fonctionne normalement si le fichier suppléments n'existe pas."""
|
|
fake_supplements = tmp_path / "nonexistent.json"
|
|
with patch("src.medical.cim10_dict.CIM10_SUPPLEMENTS_PATH", fake_supplements):
|
|
d = load_dict()
|
|
assert len(d) > 0 # Le dict principal est chargé
|
|
|
|
def test_supplement_codes_count(self):
|
|
"""Les suppléments ajoutent les sous-codes attendus."""
|
|
d = load_dict()
|
|
# Vérifier que E11.0 à E11.9 existent tous
|
|
for i in range(10):
|
|
code = f"E11.{i}"
|
|
assert code in d, f"{code} manquant du dictionnaire"
|
|
|
|
def test_validate_code_normalized(self):
|
|
"""validate_code normalise le format (e119 → E11.9)."""
|
|
is_valid, label = validate_code("e119")
|
|
assert is_valid
|
|
assert label # Label non vide
|
|
|
|
# --- Nouveaux codes ajoutés (session 2026-02-13) ---
|
|
def test_k59_0_constipation(self):
|
|
"""K59.0 (constipation) est reconnu."""
|
|
is_valid, label = validate_code("K59.0")
|
|
assert is_valid
|
|
assert "constipation" in label.lower()
|
|
|
|
def test_z93_1_gastrostomie(self):
|
|
"""Z93.1 (gastrostomie) est reconnu."""
|
|
is_valid, label = validate_code("Z93.1")
|
|
assert is_valid
|
|
assert "gastrostomie" in label.lower()
|
|
|
|
def test_h92_0_otalgie(self):
|
|
"""H92.0 (otalgie) est reconnu."""
|
|
is_valid, label = validate_code("H92.0")
|
|
assert is_valid
|
|
|
|
def test_a87_0_meningite(self):
|
|
"""A87.0 (méningite à entérovirus) est reconnu."""
|
|
is_valid, label = validate_code("A87.0")
|
|
assert is_valid
|
|
|
|
def test_d64_9_anemie(self):
|
|
"""D64.9 (anémie sans précision) est reconnu."""
|
|
is_valid, label = validate_code("D64.9")
|
|
assert is_valid
|
|
assert "anémie" in label.lower()
|