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

4.0 KiB
Raw Blame History

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

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 think désactivé pour JSON pur (plus rapide)
  • Timeout Ollama : 120s par page (pages denses)