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:
@@ -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é.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user