# 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)