feat: méthode TIM experte CPAM + moteur de règles étendu
CPAM — Méthode TIM (mémoire en défense) : - Réécriture CPAM_ARGUMENTATION avec raisonnement 5 passes TIM (contexte admin → motif réel → confrontation bio → hiérarchie → validation défensive) - _BIO_THRESHOLDS (19 entrées) + _build_bio_confrontation() pour confrontation biologie/diagnostic avec seuils chiffrés et verdicts - _format_response() dual format : nouveau TIM (moyens numérotés, tableau bio, codes non défendables, conclusion dispositive) + rétrocompat legacy - CPAM_ADVERSARIAL mis à jour pour vérifier honnêteté intellectuelle - Tests adaptés + 12 nouveaux tests (bio confrontation, format TIM) Moteur de règles : - Nouvelles règles YAML : demographic, diagnostic_conflicts, procedure_diagnosis, temporal, parcours - Bio extraction FAISS (synonymes vectoriels) - Veto engine enrichi (citations, Trackare skip, règles démographiques) - Decision engine : _apply_bio_rules_gen() + matchers analytiques Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,15 +1,10 @@
|
||||
version: 2
|
||||
|
||||
# Règles biologiques (contradiction bio ⇒ ruled_out)
|
||||
# + garde-fou "preuve manquante" (diag d'ionogramme sans valeur extraite ⇒ NEED_INFO)
|
||||
#
|
||||
# Objectif: éviter des FAIL "bêtes" quand la biologie contredit clairement un diagnostic,
|
||||
# et éviter des PASS "trop optimistes" quand on n'a même pas la valeur biologique.
|
||||
#
|
||||
# Hiérarchie des seuils:
|
||||
# - Priorité aux normes du document (ex: [N: 135-145])
|
||||
# - Sinon fallback config/reference_ranges.yaml
|
||||
# - Si âge inconnu/enfant: safe zones conservatrices (reference_ranges.yaml)
|
||||
# ------------------------------------------------
|
||||
# Ces règles permettent d'écarter un diagnostic (status: ruled_out)
|
||||
# si les preuves biologiques extraites le contredisent formellement.
|
||||
# Elles génèrent aussi des alertes VETO-17 si la preuve est manquante.
|
||||
|
||||
missing_evidence:
|
||||
enabled: true
|
||||
@@ -18,17 +13,78 @@ missing_evidence:
|
||||
score_penalty: 2
|
||||
|
||||
rules:
|
||||
# --- IONOGRAMME ---
|
||||
hyponatremia:
|
||||
enabled: true
|
||||
codes: ["E87.1"] # hyponatrémie
|
||||
codes: ["E87.1"]
|
||||
analyte: sodium
|
||||
threshold_type: low
|
||||
message: "natrémie normale"
|
||||
|
||||
hyperkalemia:
|
||||
enabled: true
|
||||
codes: ["E87.5"] # hyperkaliémie
|
||||
codes: ["E87.5"]
|
||||
analyte: potassium
|
||||
threshold_type: high
|
||||
message: "kaliémie normale"
|
||||
|
||||
hypokalemia:
|
||||
enabled: true
|
||||
codes: ["E87.6"] # hypokaliémie
|
||||
codes: ["E87.6"]
|
||||
analyte: potassium
|
||||
threshold_type: low
|
||||
message: "kaliémie normale"
|
||||
|
||||
# --- HÉMATOLOGIE ---
|
||||
anemia:
|
||||
enabled: true
|
||||
codes: ["D50", "D50.0", "D50.1", "D50.8", "D50.9", "D51", "D52", "D53", "D55", "D56", "D57", "D58", "D59", "D60", "D61", "D62", "D63", "D64"]
|
||||
analyte: hemoglobin
|
||||
threshold_type: low
|
||||
message: "taux d'hémoglobine normal"
|
||||
|
||||
thrombopenia:
|
||||
enabled: true
|
||||
codes: ["D69.4", "D69.5", "D69.6"]
|
||||
analyte: platelets
|
||||
threshold_type: low
|
||||
message: "taux de plaquettes normal"
|
||||
|
||||
# --- RÉNAL ---
|
||||
acute_kidney_injury:
|
||||
enabled: true
|
||||
codes: ["N17", "N17.0", "N17.1", "N17.2", "N17.8", "N17.9", "N19"]
|
||||
analyte: creatinine
|
||||
threshold_type: high
|
||||
message: "créatininémie normale"
|
||||
|
||||
# --- MÉTABOLISME ---
|
||||
hypoglycemia:
|
||||
enabled: true
|
||||
codes: ["E16.0", "E16.1", "E16.2"]
|
||||
analyte: glucose
|
||||
threshold_type: low
|
||||
message: "glycémie normale"
|
||||
|
||||
diabetes_uncontrolled:
|
||||
enabled: true
|
||||
codes: ["E10.1", "E11.1"] # Avec complications aiguës (acidocétose, etc.)
|
||||
analyte: hba1c
|
||||
threshold_type: high
|
||||
threshold_value: 9.0
|
||||
message: "HbA1c < 9% (diabète non considéré comme déséquilibré selon HbA1c)"
|
||||
|
||||
# --- THYROÏDE ---
|
||||
hypothyroidism:
|
||||
enabled: true
|
||||
codes: ["E02", "E03", "E03.0", "E03.1", "E03.2", "E03.8", "E03.9"]
|
||||
analyte: tsh
|
||||
threshold_type: high # TSH élevée = Hypo
|
||||
message: "TSH normale ou basse"
|
||||
|
||||
hyperthyroidism:
|
||||
enabled: true
|
||||
codes: ["E05", "E05.0", "E05.1", "E05.2", "E05.8", "E05.9"]
|
||||
analyte: tsh
|
||||
threshold_type: low # TSH basse = Hyper
|
||||
message: "TSH normale ou élevée"
|
||||
|
||||
Reference in New Issue
Block a user