Files
ScanOGC_extract/PLAN_EXTRACTION.md
2026-04-24 10:39:05 +02:00

125 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Plan extraction OGC → Excel
## Contexte
Extraction des fiches OGC (Organismes de Gestion du Contrôle) scanées.
Chaque PDF = 1 dossier patient, ~6 pages.
## Modèles utilisés
- **Vision** : `qwen3-vl:2b` via Ollama (identifie le type de page + extrait les champs)
- **Texte** : `qwen3:4b` (optionnel, structuration secondaire si besoin)
## Architecture
```
PDF → pdf2image (images par page)
Pour chaque page :
→ qwen3-vl:2b : identifier le type de page
→ Si "Séjour d'hospitalisation complète" : SKIP
→ Sinon : extraction structurée JSON via qwen3-vl:2b
Assemblage des champs par dossier
Sortie Excel (openpyxl / pandas)
```
## Types de pages
| Titre détecté | Action |
|---|---|
| FICHE MEDICALE DE RECUEIL DU PRATICIEN CONSEIL | Extraire (page principale) |
| FICHE MEDICALE DE CONCERTATION | Skip (vide ou manuscrit léger) |
| Séjour d'hospitalisation complète | **SKIP** (gros manuscrit) |
| Eléments de preuve tracés au dossier | Extraire |
| FICHE ADMINISTRATIVE DE CONCERTATION 2/2 | Extraire |
| FICHE ADMINISTRATIVE DE CONCERTATION 1/2 | Extraire |
## Champs à extraire
### En-tête (commun)
- N° OGC, Etablissement, FINESS, Date début contrôle
- N° Champ, Libellé champ de contrôle
- Dossier manquant, Date début séjour, Date fin séjour
### Page 1 — Données du séjour (Etablissement + Recodage)
- Age (ans), Age (jours), Sexe
- Poids d'entrée, Durée de séjour
- Mode d'entrée, Provenance, Mode de sortie, Destination
- Nb séances, Nb RUM, Nb j EXH, Type EXB, Nb j EXB
### Page 1 — Données du RUM (Etablissement + Recodage)
- N° RUM, Lits dédiés SP, UM, IGS II
- Durée RUM (date_debut / date_fin)
- Nature suppl., Nb suppl.
### Page 1 — Codages (listes)
- DP_etab_code, DP_etab_libelle
- DR_etab_code, DR_etab_libelle
- DAS_etab : liste de {code, rang, libelle}
- Actes_etab : liste de {code, rang, libelle}
- DP_recodage, DR_recodage
- DAS_recodage : liste de {code, rang}
- Actes_recodage : liste de {code, rang}
### Page 1 — GHM/GHS + décision
- GHM_etab, GHS_etab, GHM_recodage, GHS_recodage
- Recodage_impactant_facturation (0/1)
- GHS_injustifie (0/1)
- SE_coche (1/2/3/4), ATU, FFM, FSD
- Accord_Desaccord (accord/désaccord)
- Nom_praticien_conseil
### Page Eléments de preuve (tableau 17 lignes)
Pour chaque type de document :
- present (oui/non), photocopie (nombre), absent_date_1ere_demande, date_obtention
- Date_elements_preuve
- Medecin_controleur_signataire, Medecin_DIM_signataire
### Page Fiche Administrative 2/2
- GHS_initial, GHS_avant_concertation, GHS_final_apres_concertation
- Decision_finale (maintien_avis_controleur / retour_groupage_DIM / autre_groupage)
- Avis_DIM_final (accord/désaccord)
- Date_concertation
- Nom_medecin_responsable_controle, Nom_medecin_DIM
### Page Fiche Administrative 1/2
- Date_concertation_1_2
- Argumentaire_medecin_controleur (texte long imprimé)
## Structure Excel de sortie
### Onglet 1 : "Données principales"
1 ligne par OGC, colonnes = tous les champs scalaires
### Onglet 2 : "Diagnostics"
1 ligne par code diagnostique (DP/DR/DAS), avec colonne N°OGC
### Onglet 3 : "Actes"
1 ligne par acte, avec colonne N°OGC
### Onglet 4 : "Eléments de preuve"
1 ligne par type de document × N°OGC
## Fichiers
- `extraction.py` : script principal
- `scanOgc/` : dossier des PDFs source
- `output/` : dossier de sortie Excel
## Pour relancer
```bash
cd "/Users/oussi/Documents/Documents - MacBook Pro de oussi/EttaSante/T2A/ScanOGC/testExtraction2"
python3 extraction.py
```
## Dépendances
```bash
pip install pdf2image pillow pandas openpyxl requests
# Ollama doit tourner : ollama serve
# Modèle requis : qwen3-vl:2b
```
## Notes importantes
- L'ordre des pages varie selon les fichiers → identification par titre, pas par numéro
- Page manuscrite identifiée par le titre "Séjour d'hospitalisation complète"
- qwen3-vl:2b : paramètre `think` désactivé pour JSON pur (plus rapide)
- Timeout Ollama : 120s par page (pages denses)