# 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 ```bash # Prerequis : Python 3.11+, Ollama avec gemma3:27b git clone && 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 ```bash # 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 ```bash 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`.