125 lines
4.0 KiB
Markdown
125 lines
4.0 KiB
Markdown
# 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)
|