Files
t2a_v2/tests/conftest.py
dom ce7a9650af 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>
2026-03-04 11:57:07 +01:00

99 lines
2.9 KiB
Python

"""Fixtures partagées pour les tests T2A."""
from __future__ import annotations
import pytest
from src.config import (
ActeCCAM,
Antecedent,
BiologieCle,
Complication,
ControleCPAM,
Diagnostic,
DossierMedical,
Imagerie,
Sejour,
Traitement,
)
@pytest.fixture
def dossier_minimal() -> DossierMedical:
"""Dossier médical minimal : DP seul, pas de DAS/bio/imagerie."""
return DossierMedical(
source_file="test_minimal.pdf",
document_type="crh",
sejour=Sejour(sexe="M", age=65, duree_sejour=5),
diagnostic_principal=Diagnostic(
texte="Cholécystite aiguë",
cim10_suggestion="K81.0",
),
)
@pytest.fixture
def dossier_complet() -> DossierMedical:
"""Dossier médical enrichi : DP + DAS + bio + imagerie + traitements."""
return DossierMedical(
source_file="test_complet.pdf",
document_type="crh",
sejour=Sejour(sexe="M", age=65, duree_sejour=5, imc=31.2),
diagnostic_principal=Diagnostic(
texte="Cholécystite aiguë",
cim10_suggestion="K81.0",
),
diagnostics_associes=[
Diagnostic(texte="Iléus réflexe", cim10_suggestion="K56.0"),
],
actes_ccam=[
ActeCCAM(texte="Cholécystectomie", code_ccam_suggestion="HMFC004"),
],
biologie_cle=[
BiologieCle(test="CRP", valeur="180", anomalie=True),
BiologieCle(test="Créatinine", valeur="450", anomalie=True),
],
imagerie=[
Imagerie(type="Scanner abdominal", conclusion="Lithiase cholédocienne confirmée"),
],
traitements_sortie=[
Traitement(medicament="Augmentin IV", posologie="3g/j"),
Traitement(medicament="Morphine SC"),
],
antecedents=[
Antecedent(texte="HTA"),
Antecedent(texte="Diabète type 2"),
],
)
@pytest.fixture
def dossier_trackare_dp() -> DossierMedical:
"""Dossier Trackare : DP pré-codé sans preuve RAG (source d'autorité)."""
return DossierMedical(
source_file="trackare-TEST.pdf",
document_type="trackare",
sejour=Sejour(sexe="F", age=72, duree_sejour=3),
diagnostic_principal=Diagnostic(
texte="Pancréatite aiguë biliaire",
cim10_suggestion="K85.1",
cim10_confidence="high",
source="trackare",
# Pas de source_excerpt, sources_rag, preuves_cliniques
# → c'est normal pour un Trackare
),
)
@pytest.fixture
def controle_cpam() -> ControleCPAM:
"""Contrôle CPAM de test avec codes contestés."""
return ControleCPAM(
numero_ogc=12345,
titre="Contestation du codage CIM-10",
arg_ucr="Le codage du DP K81.0 est contesté, proposition K80.2",
decision_ucr="Modification du DP",
dp_ucr="K80.2",
da_ucr="K56.0",
)