dom 0cafb47e8d feat: batching CPAM par modèle pour réduire les swaps VRAM
Restructure le flux CPAM pour regrouper les appels LLM par modèle :
- Phase 1 (cpam model) : extraction + argumentation de TOUS les contrôles
- Phase 2 (validation model, 1 swap) : validation adversariale de tous
- Phase 3 (cpam model, si correction nécessaire) : correction des échoués

Nouvelle fonction generate_cpam_responses_batched() qui orchestre les 3 phases.
L'ancienne generate_cpam_response() reste intacte (rétrocompatible, utilisée
par le viewer pour la régénération unitaire).

Structure intermédiaire _CpamDraft (dataclass) pour transporter l'état entre phases.
Fonctions de phase extraites : _phase_generate, _phase_validate, _phase_correct,
_phase_finalize.

Gain estimé : de ~4*N swaps de modèle à 2-4 swaps (indépendant de N contrôles).
Sur RTX 5070 avec des modèles 24-32b, chaque swap coûte ~10-15s.
Pour 3 contrôles : économie estimée ~60-90s.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 14:10:34 +01:00
2026-03-05 00:37:41 +01:00
2026-03-05 00:37:41 +01:00
2026-03-05 00:37:41 +01:00
2026-03-05 00:37:41 +01:00
2026-03-05 00:37:41 +01:00

T2A — Pipeline de codage PMSI automatise

Pipeline d'extraction et de codage CIM-10/CCAM pour le PMSI hospitalier (MCO). Transforme les comptes rendus d'hospitalisation (CRH) et fiches Trackare en dossiers structures, codes et valorises.

Architecture

input/               PDFs bruts (CRH, Trackare, anapath, bacterio)
  |
  v
[Extraction]         pdfplumber / OCR / DOCX / images
  |
  v
[Anonymisation]      CamemBERT NER + regex (PHI -> pseudonymes)
  |
  v
[Codage CIM-10]      LLM local (Ollama) + RAG FAISS + regles ATIH
  |                   diagnostic_extraction -> validation_pipeline
  v
[Arbitrage DP]       dp_selector (LLM) -> dp_finalizer (deterministe)
  |                   Trackare vs CRH-only, traçabilite audit
  v
[Qualite]            veto_engine (contestabilite) + decision_engine
  |                   completude (checklist documents) + severity (CMA)
  v
[CPAM]               cpam_parser + cpam_response (contre-argumentation LLM)
  |                   guardian deterministe + validation adversariale
  v
output/              JSON structures, rapports, export RUM
  |
  v
[Viewer Flask]       Dashboard, detail dossier, synthese DIM, CPAM, validation

Modules principaux

Module Role
src/extraction/ Parsers PDF, DOCX, images, OCR, classification documents
src/anonymization/ Anonymisation NER + regex, registre d'entites
src/medical/ CIM-10, CCAM, biologie, RAG FAISS, LLM Ollama, fusion multi-documents
src/quality/ Moteur de vetos deterministe, decisions, completude, routage regles
src/control/ Controles CPAM, contre-argumentation, validation adversariale
src/viewer/ Application Flask (dashboard, detail, DIM, admin, regles)
config/ 12 fichiers YAML de regles editables via l'interface web

Moteur de regles

Le pipeline utilise un moteur de regles 100% deterministe (pas de LLM) pour :

  • Vetos : bloquer les codes sans preuve, negatifs, doublons, contradictions bio
  • Decisions : downgrade, ecartement, promotion DP
  • Conflits : exclusions mutuelles CIM-10, incompatibilites
  • Bio : contradiction labo vs diagnostic code
  • Completude : checklist documents manquants

Toutes les regles sont dans config/*.yaml et editables via /admin/rules.

RAG (Retrieval-Augmented Generation)

Index FAISS avec ~23 000 vecteurs issus de :

  • CIM-10 FR 2026, Guide Methodologique MCO 2026, CCAM V4
  • 30 referentiels supplementaires (COCOA 2025, fascicules ATIH, etc.)
  • Embeddings : sentence-camembert-large (francais medical)

Separation en 3 index : ref (referentiels), proc (procedures), bio (biologie).

Installation

# Prerequis : Python 3.11+, Ollama avec gemma3:27b
git clone <repo> && cd t2a_v2
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"

# Variables d'environnement (.env)
OLLAMA_URL=http://localhost:11434
T2A_MODEL_CODING=gemma3:27b
T2A_MODEL_CPAM=mistral-small3.2:24b
# ANTHROPIC_API_KEY=sk-...  (optionnel, fallback cloud)

Utilisation

# Pipeline CLI : traiter des PDFs
python -m src.main input/dossier/

# Reconstruire l'index RAG
python -m src.main --rebuild-index

# Viewer web (developpement)
python -m src.viewer

# Viewer web (production)
gunicorn -c gunicorn.conf.py 'src.viewer:create_app()'

Tests

pytest                    # 239+ tests, ~10s
pytest -k test_viewer     # Tests viewer uniquement
pytest -k test_cpam       # Tests CPAM

Structure des donnees

Chaque dossier produit un JSON structure (DossierMedical Pydantic) contenant :

  • diagnostic_principal : code CIM-10, confiance, justification, source
  • diagnostics_associes : DAS avec decisions (KEEP/DOWNGRADE/REMOVE/RULED_OUT)
  • actes_ccam : actes codes
  • veto_report : score de contestabilite (0-10), issues detectees
  • completude : checklist, score, verdict
  • ghm_estimation : GHM, severite, valorisation estimee
  • controles_cpam : contre-argumentations generees

Deploiement

Service systemd inclus (t2a-viewer.service), config gunicorn (gunicorn.conf.py). Auth HTTP Basic configurable via T2A_DEMO_USER / T2A_DEMO_PASS.

Description
No description provided
Readme 203 MiB
Languages
Python 87.3%
HTML 12.3%
Shell 0.4%