4.0 KiB
4.0 KiB
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:2bvia 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 principalscanOgc/: dossier des PDFs sourceoutput/: dossier de sortie Excel
Pour relancer
cd "/Users/oussi/Documents/Documents - MacBook Pro de oussi/EttaSante/T2A/ScanOGC/testExtraction2"
python3 extraction.py
Dépendances
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
thinkdésactivé pour JSON pur (plus rapide) - Timeout Ollama : 120s par page (pages denses)