# Pipeline MCO PMSI - Automatisation du Codage Médical

Système d'automatisation du codage médical PMSI (Programme de Médicalisation des Systèmes d'Information) basé sur une architecture RAG (Retrieval-Augmented Generation) avec approche conservatrice basée sur les preuves.

## 🎯 Objectifs

- **Codage basé sur les preuves** : Chaque code proposé est justifié par 1 à 3 extraits de texte
- **Approche conservative** : En cas d'incertitude, génération de questions plutôt que suppositions
- **Vérification indépendante** : Architecture à deux passes (Codeur + Vérificateur)
- **Auditabilité complète** : Traçabilité totale des décisions, preuves et versions
- **On-premises** : Aucune dépendance externe, inférence LLM locale
- **Reproductibilité** : Versionnement strict de tous les composants

## 🏗️ Architecture

```
Documents Cliniques → Structuration → Extraction de Faits → Recherche RAG → 
Codage Initial → Vérification Indépendante → Validation & Export
```

### Composants Principaux

- **Document Processor** : Segmentation et structuration du texte clinique
- **Clinical Facts Extractor** : Extraction de faits structurés avec qualificateurs
- **RAG Engine** : Recherche hybride dans les référentiels versionnés
- **Codeur** : Proposition de codes CIM-10/CCAM avec justifications
- **Vérificateur** : Validation indépendante et détection d'erreurs sensibles DIM
- **Référentiels Manager** : Gestion versionnée des référentiels ATIH
- **Audit Logger** : Enregistrement complet des décisions et preuves
- **PII Protector** : Détection et anonymisation des données identifiantes

## 📋 Prérequis

- Python 3.10+
- PostgreSQL 14+ (ou SQLite pour développement)
- 16 GB RAM minimum (32 GB recommandé)
- GPU optionnel (améliore les performances)

## 🚀 Installation

### 1. Cloner le dépôt

```bash
git clone <repository-url>
cd pipeline-mco-pmsi-codage
```

### 2. Créer un environnement virtuel

```bash
python -m venv .venv
source .venv/bin/activate  # Linux/Mac
# ou
.venv\Scripts\activate  # Windows
```

### 3. Installer les dépendances

```bash
pip install -e .
```

## 🎯 Démarrage rapide

### Exemple complet avec document fourni

Un exemple de séjour est fourni dans `data/sejours/EXEMPLE001/` :

```bash
# 1. Traiter le séjour d'exemple
python scripts/process_stay.py \
  --stay-id EXEMPLE001 \
  --documents-dir data/sejours/EXEMPLE001 \
  --specialty chirurgie \
  --admission-date 2024-01-15 \
  --discharge-date 2024-01-17

# 2. Lancer l'interface web
python scripts/start_api.py

# 3. Ouvrir http://localhost:8001 et rechercher "EXEMPLE001"
```

### Traiter vos propres documents

```bash
# 1. Créer un répertoire pour votre séjour
mkdir -p data/sejours/MON_SEJOUR

# 2. Placer vos documents .txt dans ce répertoire
cp mes_documents/*.txt data/sejours/MON_SEJOUR/

# 3. Traiter le séjour
python scripts/process_stay.py \
  --stay-id MON_SEJOUR \
  --documents-dir data/sejours/MON_SEJOUR \
  --specialty chirurgie

# 4. Consulter les résultats sur l'interface web
python scripts/start_api.py
```

## 📖 Documentation

- **[Guide d'Utilisation Complet](GUIDE_UTILISATION.md)** - Instructions détaillées
- **[Documentation API](src/pipeline_mco_pmsi/api/README.md)** - Référence API REST
- **[Spécifications](~/.kiro/specs/pipeline-mco-pmsi-codage/)** - Requirements et design

## 📁 Organisation des données

```
data/
├── sejours/              # Documents cliniques par séjour
│   ├── EXEMPLE001/       # Exemple fourni
│   │   └── cr_operatoire.txt
│   └── MON_SEJOUR/       # Vos séjours
│       ├── cr_operatoire.txt
│       ├── cr_medical.txt
│       └── imagerie.txt
├── referentiels/         # Référentiels ATIH
│   └── CCAM_V81.xls
└── exports/              # Exports d'audit
```

## 🔧 Scripts disponibles

- `scripts/process_stay.py` - Traiter un séjour avec ses documents
- `scripts/start_api.py` - Lancer l'interface web TIM
- `scripts/import_ccam.py` - Importer le référentiel CCAM

## 🚀 Installation
python -m venv .venv
source .venv/bin/activate  # Linux/Mac
# ou
.venv\Scripts\activate  # Windows
```

### 3. Installer les dépendances

```bash
pip install -e .
```

Pour le développement :

```bash
pip install -e ".[dev]"
```

Pour le support GPU :

```bash
pip install -e ".[gpu]"
```

### 4. Télécharger les modèles spaCy

```bash
python -m spacy download fr_core_news_lg
```

## 🧪 Tests

### Exécuter tous les tests

```bash
pytest
```

### Exécuter les tests par catégorie

```bash
# Tests unitaires uniquement
pytest -m unit

# Tests de propriétés (Hypothesis)
pytest -m property

# Tests d'intégration
pytest -m integration

# Tests lents
pytest -m slow --run-slow
```

### Profils Hypothesis

```bash
# Profil par défaut (100 exemples)
pytest

# Profil développement (20 exemples, rapide)
HYPOTHESIS_PROFILE=dev pytest

# Profil CI (200 exemples)
HYPOTHESIS_PROFILE=ci pytest

# Profil exhaustif (1000 exemples)
HYPOTHESIS_PROFILE=exhaustive pytest
```

### Couverture de code

```bash
pytest --cov=pipeline_mco_pmsi --cov-report=html
# Ouvrir htmlcov/index.html dans un navigateur
```

## 📁 Structure du Projet

```
pipeline-mco-pmsi-codage/
├── src/
│   └── pipeline_mco_pmsi/
│       ├── models/           # Modèles de données Pydantic
│       │   ├── clinical.py   # Documents, faits, preuves
│       │   ├── coding.py     # Codes, propositions
│       │   ├── metadata.py   # Versions, audit
│       │   └── validation.py # Validation, questions
│       ├── processors/       # Traitement des documents
│       ├── rag/             # Moteur RAG et référentiels
│       ├── validators/      # Validation PMSI
│       └── utils/           # Utilitaires
├── tests/                   # Tests (unit, property, integration)
├── data/
│   ├── referentiels/       # Référentiels ATIH (CIM-10, CCAM, Guide MCO)
│   ├── gold_set/           # Jeu gold pour validation
│   └── exports/            # Exports d'audit
├── config/                 # Fichiers de configuration
├── logs/                   # Logs système
├── pyproject.toml         # Configuration du projet
├── pytest.ini             # Configuration pytest
└── README.md
```

## 🔧 Configuration

### Variables d'environnement

Créer un fichier `.env` à la racine :

```env
# Base de données
DATABASE_URL=postgresql://user:password@localhost:5432/pmsi_db

# Modèle LLM
LLM_MODEL_NAME=mistral
LLM_MODEL_TAG=7b-instruct-v0.2
LLM_BASE_URL=http://localhost:11434  # Ollama

# Embeddings
EMBEDDING_MODEL=sentence-transformers/paraphrase-multilingual-mpnet-base-v2

# Logging
LOG_LEVEL=INFO
LOG_FILE=logs/pipeline.log

# Sécurité
ENCRYPTION_KEY=<your-encryption-key>
```

## 📚 Documentation

La documentation complète est disponible dans :

- `~/.kiro/specs/pipeline-mco-pmsi-codage/requirements.md` : Exigences détaillées
- `~/.kiro/specs/pipeline-mco-pmsi-codage/design.md` : Document de design
- `~/.kiro/specs/pipeline-mco-pmsi-codage/tasks.md` : Plan d'implémentation

## 🎓 Référentiels ATIH

Le système utilise les référentiels officiels ATIH :

- **CIM-10 FR 2026** : Classification Internationale des Maladies
- **CCAM Descriptive 2025** : Classification Commune des Actes Médicaux
- **Guide Méthodologique MCO 2026** : Règles de codage PMSI

Les fichiers PDF doivent être placés dans `data/referentiels/`.

## 🔒 Sécurité et Conformité

- **Protection des DIP** : Détection et anonymisation automatique
- **Chiffrement** : Exports d'audit chiffrés
- **Contrôle d'accès** : RBAC pour TIM, responsables DIM, administrateurs
- **Logs d'audit** : Traçabilité complète sans DIP
- **On-premises** : Aucune donnée ne quitte l'hôpital

## 📊 Métriques de Qualité

Le système calcule automatiquement :

- Pourcentage de codes sans preuve
- Pourcentage de diagnostics niés codés comme affirmés
- Pourcentage de DP corrects (vs gold standard)
- Pourcentage de DAS fantômes
- Pourcentage d'actes CCAM sans preuve
- Pourcentage de dossiers validés en un clic
- Pourcentage de pertinence des questions

## 🎯 Critères de Succès POC

- ✅ Traiter minimum 200 séjours MCO anonymisés
- ✅ Support de 1-2 spécialités médicales
- ✅ ≥50% de taux d'acceptation TIM
- ✅ ≤2 minutes de temps de validation pour dossiers acceptés
- ✅ ≤1% d'erreurs sensibles DIM
- ✅ 100% de traçabilité (tous les codes ont preuves et versions)
- ✅ ≥80% de questions pertinentes

## 🤝 Contribution

Ce projet suit les principes de Property-Based Testing avec Hypothesis.
Tous les nouveaux composants doivent inclure :

1. Tests unitaires pour cas spécifiques
2. Property tests pour propriétés universelles
3. Documentation des propriétés de correctness

## 📝 Licence

MIT License

## 👥 Auteurs

DIM Team - Département d'Information Médicale

## 🔗 Liens Utiles

- [ATIH - Agence Technique de l'Information sur l'Hospitalisation](https://www.atih.sante.fr/)
- [Hypothesis Documentation](https://hypothesis.readthedocs.io/)
- [Pydantic Documentation](https://docs.pydantic.dev/)
- [SQLAlchemy Documentation](https://docs.sqlalchemy.org/)
