feat: interface admin regles, refactoring viewer, README, pyproject.toml

- Nouveau module rules_manager.py : CRUD YAML pour les regles metier
- Nouveau blueprint bp_rules.py + template admin_rules.html :
  interface web pour activer/desactiver/ajouter/supprimer des regles
- Extraction helpers.py depuis app.py (filtres Jinja2, statistiques,
  scan dossiers, status systeme) — app.py passe de 1585 a 482 lignes
- Suppression backward-compat re-exports dans cim10_extractor et
  cpam_response (imports corriges dans les tests)
- README.md : architecture, modules, installation, utilisation
- pyproject.toml : dependencies completes, config ruff, pytest, coverage

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
dom
2026-03-07 19:11:27 +01:00
parent 2478928798
commit 1e837c2758
13 changed files with 1694 additions and 1103 deletions

121
README.md Normal file
View File

@@ -0,0 +1,121 @@
# 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 <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
```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`.