feat: règles métier T2A Phase 1 — exclusions diagnostiques, sévérité CMA et alertes codage

Ajout des règles d'exclusion symptôme (R00-R99) vs diagnostic précis (Chapitres I-XIV),
détection heuristique de sévérité CMA sur 25 racines CIM-10, et affichage des alertes
de codage dans le viewer Flask. 153 tests, 0 régression.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
dom
2026-02-11 08:53:14 +01:00
parent 12f4479cd2
commit 9df4465fef
8 changed files with 911 additions and 42 deletions

View File

@@ -113,6 +113,12 @@ def extract_medical_info(
if use_rag:
_enrich_with_rag(dossier)
# Post-processing : exclusions symptôme vs diagnostic précis
_apply_exclusion_rules(dossier)
# Post-processing : enrichissement sévérité (CMA/CMS heuristique)
_apply_severity_rules(dossier)
return dossier
@@ -641,6 +647,34 @@ def _find_act_date(text: str, act_pattern: str) -> str | None:
return None
def _apply_exclusion_rules(dossier: DossierMedical) -> None:
"""Applique les règles d'exclusion symptôme vs diagnostic précis."""
try:
from .exclusion_rules import check_exclusions
result = check_exclusions(dossier.diagnostic_principal, dossier.diagnostics_associes)
dossier.diagnostics_associes = result.cleaned_das
dossier.alertes_codage.extend(result.warnings)
if result.excluded:
logger.info(
" Exclusions : %d DAS symptomatiques exclus",
len(result.excluded),
)
except Exception:
logger.warning("Erreur lors de l'application des règles d'exclusion", exc_info=True)
def _apply_severity_rules(dossier: DossierMedical) -> None:
"""Enrichit les diagnostics avec les informations de sévérité heuristique."""
try:
from .severity import enrich_dossier_severity
alertes = enrich_dossier_severity(
dossier.diagnostic_principal, dossier.diagnostics_associes,
)
dossier.alertes_codage.extend(alertes)
except Exception:
logger.warning("Erreur lors de l'évaluation de sévérité", exc_info=True)
def _lookup_cim10(text: str) -> str | None:
"""Cherche un code CIM-10 pour un texte donné.