version à 86%
This commit is contained in:
10
.gitignore
vendored
Normal file
10
.gitignore
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
.venv/
|
||||||
|
venv/
|
||||||
|
data/config.json
|
||||||
|
data/alerts.json
|
||||||
|
*.log
|
||||||
|
scanOgc/
|
||||||
|
CLAUDE.md
|
||||||
|
.claude/
|
||||||
124
PLAN_EXTRACTION.md
Normal file
124
PLAN_EXTRACTION.md
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
# 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)
|
||||||
82
README.md
Normal file
82
README.md
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
# Extraction OGC — Qwen3-VL 235B
|
||||||
|
|
||||||
|
Extraction automatique des fiches OGC (Organisme de Gestion du Contrôle) vers Excel.
|
||||||
|
Modèle : **qwen3-vl:235b-cloud** (vision multimodal via Ollama).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Structure du dossier
|
||||||
|
|
||||||
|
```
|
||||||
|
testExtraction2/
|
||||||
|
├── extraction.py ← script principal
|
||||||
|
├── README.md ← ce fichier
|
||||||
|
├── PLAN_EXTRACTION.md ← documentation technique détaillée
|
||||||
|
├── scanOgc/ ← 12 PDFs source (OGC 358 à 429)
|
||||||
|
└── output/
|
||||||
|
├── extraction_ogc.xlsx ← résultat (4 onglets)
|
||||||
|
└── extraction_ogc_raw.json ← données brutes pour debug
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Lancement
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd testExtraction2
|
||||||
|
|
||||||
|
# Tous les fichiers
|
||||||
|
python3 extraction.py
|
||||||
|
|
||||||
|
# Un seul fichier (relance partielle — fusionne avec le cache)
|
||||||
|
python3 extraction.py "358"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Ce que fait le script
|
||||||
|
|
||||||
|
1. Convertit chaque page PDF en image (200 DPI)
|
||||||
|
2. Envoie l'image à **qwen3-vl:235b-cloud** pour identifier le type de page
|
||||||
|
3. Ignore la page "Séjour d'hospitalisation complète" (bloc manuscrit — phase 2)
|
||||||
|
4. Pour chaque autre page, extrait les données en JSON via un prompt dédié
|
||||||
|
5. Assemble tout en Excel (4 onglets)
|
||||||
|
|
||||||
|
### Types de pages traités
|
||||||
|
|
||||||
|
| Type | Action |
|
||||||
|
|---|---|
|
||||||
|
| FICHE_RECUEIL | Extrait (données séjour, codages, GHM/GHS) |
|
||||||
|
| ELEMENTS_PREUVE | Extrait (tableau 17 documents) |
|
||||||
|
| FICHE_ADMIN_2_2 | Extrait (GHS final, décision concertation) |
|
||||||
|
| FICHE_ADMIN_1_2 | Extrait (argumentaire imprimé complet) |
|
||||||
|
| SEJOUR_MANUSCRIT | **Ignoré** — commentaires manuscrits (phase 2) |
|
||||||
|
| FICHE_CONCERTATION_VIDE | Ignoré — page vide |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Sortie Excel (4 onglets)
|
||||||
|
|
||||||
|
**Données principales** — 1 ligne par OGC, tous les champs scalaires
|
||||||
|
**Diagnostics** — 1 ligne par code (DP/DR/DAS), établissement + recodage
|
||||||
|
**Actes** — 1 ligne par acte CCAM, établissement + recodage
|
||||||
|
**Eléments de preuve** — 1 ligne par type de document × OGC
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Particularités techniques
|
||||||
|
|
||||||
|
- **Thinking mode** : qwen3-vl génère ~4000 tokens de réflexion interne avant la réponse. `num_predict=8192` est obligatoire pour avoir assez de budget tokens.
|
||||||
|
- **Rate limit** : pause de 2s entre chaque requête + retry automatique sur 429 (attente 60s × tentative).
|
||||||
|
- **Ordre des pages variable** : identification par titre, pas par numéro de page.
|
||||||
|
- **Relance partielle** : `python3 extraction.py "XXX"` charge le cache JSON existant et ne réécrase que le fichier relancé.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Prérequis
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install pdf2image pillow pandas openpyxl requests
|
||||||
|
# Ollama doit tourner (ollama serve)
|
||||||
|
# Modèle requis : qwen3-vl:235b-cloud
|
||||||
|
```
|
||||||
1129
extraction.py
Normal file
1129
extraction.py
Normal file
File diff suppressed because it is too large
Load Diff
683
generate_report.py
Normal file
683
generate_report.py
Normal file
@@ -0,0 +1,683 @@
|
|||||||
|
"""
|
||||||
|
Génération du bilan d'extraction OGC — QWEN
|
||||||
|
Usage : python3 generate_report.py
|
||||||
|
"""
|
||||||
|
|
||||||
|
import json
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
from datetime import datetime
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
from reportlab.lib import colors
|
||||||
|
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT
|
||||||
|
from reportlab.lib.pagesizes import A4
|
||||||
|
from reportlab.lib.styles import ParagraphStyle, getSampleStyleSheet
|
||||||
|
from reportlab.lib.units import cm
|
||||||
|
from reportlab.platypus import (
|
||||||
|
HRFlowable, PageBreak, Paragraph, SimpleDocTemplate, Spacer, Table,
|
||||||
|
TableStyle,
|
||||||
|
)
|
||||||
|
|
||||||
|
# ─── Config ───────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
BASE = Path(__file__).parent
|
||||||
|
OUTPUT = BASE / "output"
|
||||||
|
|
||||||
|
MODEL = "qwen3-vl:235b-cloud"
|
||||||
|
LABEL = "QWEN"
|
||||||
|
ACC = colors.HexColor("#1a5276")
|
||||||
|
|
||||||
|
JSON_PATH = OUTPUT / "extraction_ogc_raw.json"
|
||||||
|
CORRECTION_PATH = OUTPUT / "extraction_ogc_raw_Correction.json"
|
||||||
|
TIMING_PATH = OUTPUT / "timing_stats.json"
|
||||||
|
REPORT_PATH = OUTPUT / "bilan_extraction_qwen_ogc.pdf"
|
||||||
|
|
||||||
|
# ─── Styles ───────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
def make_styles(acc):
|
||||||
|
base = getSampleStyleSheet()
|
||||||
|
return {
|
||||||
|
"title": ParagraphStyle("title", parent=base["Title"],
|
||||||
|
fontSize=22, textColor=colors.white, alignment=TA_LEFT),
|
||||||
|
"subtitle": ParagraphStyle("subtitle", parent=base["Normal"],
|
||||||
|
fontSize=10, textColor=colors.HexColor("#aaaaaa"), alignment=TA_LEFT),
|
||||||
|
"section": ParagraphStyle("section", parent=base["Heading2"],
|
||||||
|
fontSize=13, textColor=acc, spaceBefore=16, spaceAfter=6),
|
||||||
|
"body": ParagraphStyle("body", parent=base["Normal"], fontSize=9, leading=14),
|
||||||
|
"small": ParagraphStyle("small", parent=base["Normal"], fontSize=8,
|
||||||
|
textColor=colors.HexColor("#444444")),
|
||||||
|
"right": ParagraphStyle("right", parent=base["Normal"], fontSize=7,
|
||||||
|
textColor=colors.HexColor("#888888"), alignment=TA_RIGHT),
|
||||||
|
"kpi_num": ParagraphStyle("kpi_num", parent=base["Normal"], fontSize=36,
|
||||||
|
fontName="Helvetica-Bold", alignment=TA_CENTER),
|
||||||
|
"kpi_lbl": ParagraphStyle("kpi_lbl", parent=base["Normal"], fontSize=8,
|
||||||
|
textColor=colors.HexColor("#777777"), alignment=TA_CENTER),
|
||||||
|
"warn": ParagraphStyle("warn", parent=base["Normal"], fontSize=8,
|
||||||
|
textColor=colors.HexColor("#c0392b")),
|
||||||
|
"footnote": ParagraphStyle("footnote", parent=base["Normal"], fontSize=7,
|
||||||
|
textColor=colors.HexColor("#888888")),
|
||||||
|
"center": ParagraphStyle("center", parent=base["Normal"], fontSize=9, alignment=TA_CENTER),
|
||||||
|
"bold": ParagraphStyle("bold", parent=base["Normal"], fontSize=9,
|
||||||
|
fontName="Helvetica-Bold"),
|
||||||
|
"th": ParagraphStyle("th", parent=base["Normal"], fontSize=8,
|
||||||
|
textColor=colors.white, fontName="Helvetica-Bold"),
|
||||||
|
}
|
||||||
|
|
||||||
|
# ─── Utilitaires ──────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
def _fmt_s(s):
|
||||||
|
if s is None:
|
||||||
|
return "—"
|
||||||
|
s = int(s)
|
||||||
|
h, r = divmod(s, 3600)
|
||||||
|
m, sec = divmod(r, 60)
|
||||||
|
if h:
|
||||||
|
return f"{h}h{m:02d}m{sec:02d}s"
|
||||||
|
if m:
|
||||||
|
return f"{m}m{sec:02d}s"
|
||||||
|
return f"{sec}s"
|
||||||
|
|
||||||
|
|
||||||
|
def _prec_color(p: float):
|
||||||
|
if p >= 90:
|
||||||
|
return colors.HexColor("#27ae60")
|
||||||
|
if p >= 75:
|
||||||
|
return colors.HexColor("#e67e22")
|
||||||
|
return colors.HexColor("#e74c3c")
|
||||||
|
|
||||||
|
|
||||||
|
def _gravite_color(g: str):
|
||||||
|
return {
|
||||||
|
"Critique": colors.HexColor("#e74c3c"),
|
||||||
|
"Haute": colors.HexColor("#e67e22"),
|
||||||
|
"Moyenne": colors.HexColor("#f1c40f"),
|
||||||
|
"Faible": colors.HexColor("#27ae60"),
|
||||||
|
}.get(g, colors.black)
|
||||||
|
|
||||||
|
|
||||||
|
_TS = TableStyle
|
||||||
|
|
||||||
|
def _base_table_style(acc):
|
||||||
|
return [
|
||||||
|
("BACKGROUND", (0, 0), (-1, 0), acc),
|
||||||
|
("TEXTCOLOR", (0, 0), (-1, 0), colors.white),
|
||||||
|
("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"),
|
||||||
|
("FONTSIZE", (0, 0), (-1, -1), 8),
|
||||||
|
("ROWBACKGROUNDS",(0, 1), (-1, -1), [colors.HexColor("#f8f9fa"), colors.white]),
|
||||||
|
("GRID", (0, 0), (-1, -1), 0.3, colors.HexColor("#cccccc")),
|
||||||
|
("LEFTPADDING", (0, 0), (-1, -1), 6),
|
||||||
|
("RIGHTPADDING", (0, 0), (-1, -1), 6),
|
||||||
|
("TOPPADDING", (0, 0), (-1, -1), 4),
|
||||||
|
("BOTTOMPADDING", (0, 0), (-1, -1), 4),
|
||||||
|
]
|
||||||
|
|
||||||
|
# ─── Comparaison orig vs correction ───────────────────────────────────────────
|
||||||
|
|
||||||
|
def _flatten(d, prefix=""):
|
||||||
|
items = {}
|
||||||
|
if isinstance(d, dict):
|
||||||
|
for k, v in d.items():
|
||||||
|
key = f"{prefix}.{k}" if prefix else k
|
||||||
|
if isinstance(v, (dict, list)):
|
||||||
|
items.update(_flatten(v, key))
|
||||||
|
else:
|
||||||
|
items[key] = str(v).strip()
|
||||||
|
elif isinstance(d, list):
|
||||||
|
for i, v in enumerate(d):
|
||||||
|
key = f"{prefix}[{i}]"
|
||||||
|
if isinstance(v, (dict, list)):
|
||||||
|
items.update(_flatten(v, key))
|
||||||
|
else:
|
||||||
|
items[key] = str(v).strip()
|
||||||
|
return items
|
||||||
|
|
||||||
|
|
||||||
|
def _normalize_keys(flat: dict) -> dict:
|
||||||
|
"""Normalise les anciens noms de clés pour compatibilité avec les fichiers de correction antérieurs.
|
||||||
|
rang → niveau (renommage effectué en avril 2026).
|
||||||
|
"""
|
||||||
|
return {k.replace(".rang", ".niveau"): v for k, v in flat.items()}
|
||||||
|
|
||||||
|
|
||||||
|
def _get_cat(key: str, ptype: str = "") -> str:
|
||||||
|
k = key.lower()
|
||||||
|
if ptype == "ELEMENTS_PREUVE":
|
||||||
|
if any(x in k for x in ("medecin", "signataire", "date")):
|
||||||
|
return "Signataires / Dates"
|
||||||
|
return "Éléments de preuve"
|
||||||
|
if ptype in ("FICHE_ADMIN_2_2", "FICHE_ADMIN_1_2"):
|
||||||
|
if any(x in k for x in ("nom_medecin", "date_conc", "medecin")):
|
||||||
|
return "Signataires / Dates"
|
||||||
|
return "Concertation (2/2)"
|
||||||
|
if any(x in k for x in ("das_etab", "das_reco")):
|
||||||
|
return "DAS"
|
||||||
|
if any(x in k for x in ("sejour_etab", "sejour_reco")):
|
||||||
|
return "Données séjour"
|
||||||
|
if any(x in k for x in ("dp_etab", "dr_etab", "dp_reco", "dr_reco")):
|
||||||
|
return "DP / DR"
|
||||||
|
if any(x in k for x in ("rum_etab", "rum_reco")):
|
||||||
|
return "Données RUM"
|
||||||
|
if any(x in k for x in ("actes_etab", "actes_reco")):
|
||||||
|
return "Actes"
|
||||||
|
if any(x in k for x in ("ghm_", "ghs_")):
|
||||||
|
return "GHM / GHS"
|
||||||
|
if any(x in k for x in ("accord_desaccord", "se_coche", "atu", "ffm", "fsd")):
|
||||||
|
return "Accord / SE"
|
||||||
|
if any(x in k for x in ("date_debut", "date_fin", "nom_praticien")):
|
||||||
|
return "Signataires / Dates"
|
||||||
|
return "Métadonnées"
|
||||||
|
|
||||||
|
|
||||||
|
def compare_extractions(orig_list, corr_list):
|
||||||
|
orig_map = {r["fichier"]: r for r in orig_list}
|
||||||
|
corr_map = {r["fichier"]: r for r in corr_list}
|
||||||
|
|
||||||
|
total_g = correct_g = 0
|
||||||
|
per_dossier = []
|
||||||
|
per_cat = {}
|
||||||
|
per_type = {}
|
||||||
|
|
||||||
|
ep_counters = {k: {"occ": 0, "dossiers": set()} for k in [
|
||||||
|
"dr_confondu_das", "annee_mal_lue", "se_coche_halluc", "maintien_X",
|
||||||
|
"provenance_halluc", "acte_dans_das", "das_manquant", "das_code_wrong",
|
||||||
|
"json_non_parsable",
|
||||||
|
]}
|
||||||
|
|
||||||
|
for fichier in sorted(orig_map):
|
||||||
|
if fichier not in corr_map:
|
||||||
|
continue
|
||||||
|
o = orig_map[fichier]
|
||||||
|
c = corr_map[fichier]
|
||||||
|
|
||||||
|
o_pages = {(p["page"], p.get("type", "")): p for p in o.get("pages_traitees", [])}
|
||||||
|
c_pages = {(p["page"], p.get("type", "")): p for p in c.get("pages_traitees", [])}
|
||||||
|
structural_error = "raw_response" in json.dumps(o)
|
||||||
|
|
||||||
|
dos_total = dos_correct = 0
|
||||||
|
|
||||||
|
for page_key in sorted(set(o_pages) & set(c_pages)):
|
||||||
|
op = o_pages[page_key]
|
||||||
|
cp = c_pages[page_key]
|
||||||
|
ptype = op.get("type", "UNKNOWN")
|
||||||
|
od = op.get("data", {})
|
||||||
|
cd = cp.get("data", {})
|
||||||
|
|
||||||
|
if not isinstance(od, dict) or not isinstance(cd, dict):
|
||||||
|
continue
|
||||||
|
if "raw_response" in od or "raw_response" in cd:
|
||||||
|
ep_counters["json_non_parsable"]["occ"] += 1
|
||||||
|
ep_counters["json_non_parsable"]["dossiers"].add(fichier)
|
||||||
|
continue
|
||||||
|
|
||||||
|
o_flat = _normalize_keys(_flatten(od))
|
||||||
|
c_flat = _normalize_keys(_flatten(cd))
|
||||||
|
all_keys = set(o_flat) | set(c_flat)
|
||||||
|
|
||||||
|
for k in all_keys:
|
||||||
|
ov = o_flat.get(k, "")
|
||||||
|
cv = c_flat.get(k, "")
|
||||||
|
cat = _get_cat(k, ptype)
|
||||||
|
per_cat.setdefault(cat, {"total": 0, "correct": 0})
|
||||||
|
per_type.setdefault(ptype, {"total": 0, "correct": 0})
|
||||||
|
per_cat[cat]["total"] += 1
|
||||||
|
per_type[ptype]["total"] += 1
|
||||||
|
dos_total += 1
|
||||||
|
if ov == cv:
|
||||||
|
per_cat[cat]["correct"] += 1
|
||||||
|
per_type[ptype]["correct"] += 1
|
||||||
|
dos_correct += 1
|
||||||
|
|
||||||
|
if ptype == "FICHE_RECUEIL":
|
||||||
|
dr = (od.get("dr_etab") or {}).get("code", "")
|
||||||
|
cdr = (cd.get("dr_etab") or {}).get("code", "")
|
||||||
|
if dr and not cdr:
|
||||||
|
ep_counters["dr_confondu_das"]["occ"] += 1
|
||||||
|
ep_counters["dr_confondu_das"]["dossiers"].add(fichier)
|
||||||
|
|
||||||
|
prov = str((od.get("sejour_etab") or {}).get("provenance", "")).strip()
|
||||||
|
cprov = str((cd.get("sejour_etab") or {}).get("provenance", "")).strip()
|
||||||
|
if prov and not cprov:
|
||||||
|
ep_counters["provenance_halluc"]["occ"] += 1
|
||||||
|
ep_counters["provenance_halluc"]["dossiers"].add(fichier)
|
||||||
|
|
||||||
|
se = str(od.get("se_coche", "")).strip()
|
||||||
|
cse = str(cd.get("se_coche", "")).strip()
|
||||||
|
if se and not cse:
|
||||||
|
ep_counters["se_coche_halluc"]["occ"] += 1
|
||||||
|
ep_counters["se_coche_halluc"]["dossiers"].add(fichier)
|
||||||
|
|
||||||
|
das = od.get("das_etab") or []
|
||||||
|
cdas = cd.get("das_etab") or []
|
||||||
|
dp = (od.get("dp_etab") or {}).get("code", "")
|
||||||
|
if dp and not [x for x in das if isinstance(x, dict) and x.get("code")]:
|
||||||
|
ep_counters["das_manquant"]["occ"] += 1
|
||||||
|
ep_counters["das_manquant"]["dossiers"].add(fichier)
|
||||||
|
for od2, cd2 in zip(das, cdas):
|
||||||
|
if isinstance(od2, dict) and isinstance(cd2, dict):
|
||||||
|
if od2.get("code") != cd2.get("code") and cd2.get("code"):
|
||||||
|
oc = od2.get("code", "")
|
||||||
|
if len(oc) >= 7 and oc[:4].isalpha():
|
||||||
|
ep_counters["acte_dans_das"]["occ"] += 1
|
||||||
|
ep_counters["acte_dans_das"]["dossiers"].add(fichier)
|
||||||
|
else:
|
||||||
|
ep_counters["das_code_wrong"]["occ"] += 1
|
||||||
|
ep_counters["das_code_wrong"]["dossiers"].add(fichier)
|
||||||
|
|
||||||
|
if ptype == "FICHE_ADMIN_2_2":
|
||||||
|
m = str(od.get("maintien_avis_controleur", "")).strip()
|
||||||
|
cm_ = str(cd.get("maintien_avis_controleur", "")).strip().lower()
|
||||||
|
if m.upper() == "X" and cm_ == "oui":
|
||||||
|
ep_counters["maintien_X"]["occ"] += 1
|
||||||
|
ep_counters["maintien_X"]["dossiers"].add(fichier)
|
||||||
|
|
||||||
|
for k in od:
|
||||||
|
if "date" in k.lower():
|
||||||
|
ov = str(od.get(k, "")).strip()
|
||||||
|
cv = str(cd.get(k, "")).strip()
|
||||||
|
if ov != cv:
|
||||||
|
oy = re.findall(r"1[6-9]", ov)
|
||||||
|
cy = re.findall(r"1[6-9]", cv)
|
||||||
|
if oy and cy and oy != cy:
|
||||||
|
ep_counters["annee_mal_lue"]["occ"] += 1
|
||||||
|
ep_counters["annee_mal_lue"]["dossiers"].add(fichier)
|
||||||
|
|
||||||
|
prec = round(dos_correct / dos_total * 100) if dos_total else 0
|
||||||
|
per_dossier.append({
|
||||||
|
"fichier": fichier.replace(".pdf", ""),
|
||||||
|
"total": dos_total, "correct": dos_correct,
|
||||||
|
"errors": dos_total - dos_correct,
|
||||||
|
"precision": prec, "structural_error": structural_error,
|
||||||
|
})
|
||||||
|
total_g += dos_total
|
||||||
|
correct_g += dos_correct
|
||||||
|
|
||||||
|
prec_g = round(correct_g / total_g * 100, 1) if total_g else 0
|
||||||
|
n_total = len(orig_list)
|
||||||
|
error_patterns = []
|
||||||
|
for desc, key, gravite in [
|
||||||
|
("DR confondu avec DAS", "dr_confondu_das", "Critique"),
|
||||||
|
("Année mal lue (ex : 2017 au lieu de 2018)", "annee_mal_lue", "Haute"),
|
||||||
|
("se_coche inventé ('1' ou '4' au lieu de vide)", "se_coche_halluc", "Haute"),
|
||||||
|
("maintien_avis = 'X' au lieu de 'oui'", "maintien_X", "Haute"),
|
||||||
|
("provenance inventé ('8' au lieu de vide)", "provenance_halluc", "Haute"),
|
||||||
|
("Code acte mis dans DAS", "acte_dans_das", "Haute"),
|
||||||
|
("DAS entier manquant", "das_manquant", "Critique"),
|
||||||
|
("DAS code mauvais", "das_code_wrong", "Critique"),
|
||||||
|
("JSON non parsable", "json_non_parsable", "Critique"),
|
||||||
|
]:
|
||||||
|
e = ep_counters[key]
|
||||||
|
if e["occ"] > 0:
|
||||||
|
error_patterns.append({
|
||||||
|
"desc": desc, "occ": e["occ"],
|
||||||
|
"dossiers": len(e["dossiers"]), "n_total": n_total,
|
||||||
|
"gravite": gravite,
|
||||||
|
})
|
||||||
|
|
||||||
|
return {
|
||||||
|
"total": total_g, "correct": correct_g,
|
||||||
|
"errors": total_g - correct_g, "precision": prec_g,
|
||||||
|
"per_dossier": per_dossier, "per_cat": per_cat,
|
||||||
|
"per_type": per_type, "error_patterns": error_patterns,
|
||||||
|
}
|
||||||
|
|
||||||
|
# ─── Sections PDF ─────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
def _section_header(story, S, acc, text):
|
||||||
|
story.append(Paragraph(text, S["section"]))
|
||||||
|
story.append(HRFlowable(width="100%", thickness=0.5, color=acc, spaceAfter=6))
|
||||||
|
|
||||||
|
|
||||||
|
def _build_header(story, S, acc, meta):
|
||||||
|
hdr = Table(
|
||||||
|
[[Paragraph(f"BILAN D'EXTRACTION —\nMODÈLE {LABEL}", S["title"]),
|
||||||
|
Paragraph(meta, S["subtitle"])]],
|
||||||
|
colWidths=[10*cm, 7*cm],
|
||||||
|
)
|
||||||
|
hdr.setStyle(_TS([
|
||||||
|
("BACKGROUND", (0, 0), (-1, -1), acc),
|
||||||
|
("LEFTPADDING", (0, 0), (-1, -1), 16),
|
||||||
|
("RIGHTPADDING", (0, 0), (-1, -1), 12),
|
||||||
|
("TOPPADDING", (0, 0), (-1, -1), 16),
|
||||||
|
("BOTTOMPADDING", (0, 0), (-1, -1), 16),
|
||||||
|
("VALIGN", (0, 0), (-1, -1), "MIDDLE"),
|
||||||
|
]))
|
||||||
|
story.append(hdr)
|
||||||
|
story.append(Spacer(1, 0.5*cm))
|
||||||
|
|
||||||
|
|
||||||
|
def _build_kpis(story, S, acc, cmp):
|
||||||
|
GREEN = colors.HexColor("#27ae60")
|
||||||
|
RED = colors.HexColor("#e74c3c")
|
||||||
|
kpi_num_style = ParagraphStyle("kpi_num2", parent=S["kpi_num"], fontSize=28, leading=32)
|
||||||
|
|
||||||
|
def kpi_cell(num, lbl, color=colors.HexColor("#333333")):
|
||||||
|
return [Paragraph(f'<font color="{color.hexval()}">{num}</font>', kpi_num_style),
|
||||||
|
Paragraph(lbl, S["kpi_lbl"])]
|
||||||
|
|
||||||
|
cells = [
|
||||||
|
kpi_cell(str(len(cmp["per_dossier"])), "Dossiers analysés", acc),
|
||||||
|
kpi_cell(str(cmp["total"]), "Champs comparés", colors.HexColor("#333333")),
|
||||||
|
kpi_cell(str(cmp["correct"]), "Champs corrects", GREEN),
|
||||||
|
kpi_cell(str(cmp["errors"]), "Champs en erreur", RED),
|
||||||
|
kpi_cell(f"{cmp['precision']}%", "Précision globale",
|
||||||
|
GREEN if cmp["precision"] >= 85 else RED),
|
||||||
|
]
|
||||||
|
kpi_t = Table([[c[0] for c in cells], [c[1] for c in cells]], colWidths=[3.4*cm]*5)
|
||||||
|
kpi_t.setStyle(_TS([
|
||||||
|
("BACKGROUND", (0, 0), (-1, -1), colors.HexColor("#f8f9fa")),
|
||||||
|
("BOX", (0, 0), (-1, -1), 0.5, colors.HexColor("#dddddd")),
|
||||||
|
("INNERGRID", (0, 0), (-1, -1), 0.3, colors.HexColor("#eeeeee")),
|
||||||
|
("TOPPADDING", (0, 0), (-1, 0), 14),
|
||||||
|
("BOTTOMPADDING", (0, 0), (-1, 0), 6),
|
||||||
|
("TOPPADDING", (0, 1), (-1, 1), 4),
|
||||||
|
("BOTTOMPADDING", (0, 1), (-1, 1), 12),
|
||||||
|
("ALIGN", (0, 0), (-1, -1), "CENTER"),
|
||||||
|
("VALIGN", (0, 0), (-1, -1), "MIDDLE"),
|
||||||
|
]))
|
||||||
|
story.append(kpi_t)
|
||||||
|
story.append(Spacer(1, 0.4*cm))
|
||||||
|
|
||||||
|
|
||||||
|
def _build_per_dossier(story, S, acc, W, cmp):
|
||||||
|
header = ["N° OGC", "Champs\ntotaux", "Champs\ncorrects", "Erreurs",
|
||||||
|
"Précision", "Err. structurelle"]
|
||||||
|
rows = [header]
|
||||||
|
style_extra = []
|
||||||
|
|
||||||
|
for i, d in enumerate(cmp["per_dossier"], start=1):
|
||||||
|
prec = d["precision"]
|
||||||
|
rows.append([d["fichier"], str(d["total"]), str(d["correct"]),
|
||||||
|
str(d["errors"]), f"{prec}%",
|
||||||
|
"■ Oui" if d["structural_error"] else "—"])
|
||||||
|
pc = _prec_color(prec)
|
||||||
|
style_extra += [
|
||||||
|
("TEXTCOLOR", (4, i), (4, i), pc),
|
||||||
|
("FONTNAME", (4, i), (4, i), "Helvetica-Bold"),
|
||||||
|
("TEXTCOLOR", (3, i), (3, i),
|
||||||
|
colors.HexColor("#e74c3c") if d["errors"] > 0 else colors.HexColor("#27ae60")),
|
||||||
|
("FONTNAME", (3, i), (3, i), "Helvetica-Bold"),
|
||||||
|
("TEXTCOLOR", (2, i), (2, i), colors.HexColor("#27ae60")),
|
||||||
|
("FONTNAME", (2, i), (2, i), "Helvetica-Bold"),
|
||||||
|
]
|
||||||
|
if d["structural_error"]:
|
||||||
|
style_extra += [("TEXTCOLOR", (5, i), (5, i), colors.HexColor("#e74c3c")),
|
||||||
|
("FONTNAME", (5, i), (5, i), "Helvetica-Bold")]
|
||||||
|
|
||||||
|
tot_prec = round(cmp["correct"] / cmp["total"] * 100, 1) if cmp["total"] else 0
|
||||||
|
n_struct = sum(1 for d in cmp["per_dossier"] if d["structural_error"])
|
||||||
|
rows.append(["TOTAL", str(cmp["total"]), str(cmp["correct"]),
|
||||||
|
str(cmp["errors"]), f"{tot_prec}%", f"{n_struct} dossier(s)"])
|
||||||
|
n = len(rows)
|
||||||
|
style_extra += [("BACKGROUND", (0, n-1), (-1, n-1), colors.HexColor("#eaf0fb")),
|
||||||
|
("FONTNAME", (0, n-1), (-1, n-1), "Helvetica-Bold")]
|
||||||
|
|
||||||
|
col_w = [W*0.16, W*0.12, W*0.14, W*0.11, W*0.13, W*0.34]
|
||||||
|
t = Table([[Paragraph(str(c), S["th"] if i == 0 else S["small"]) for c in row]
|
||||||
|
for i, row in enumerate(rows)], colWidths=col_w)
|
||||||
|
t.setStyle(_TS(_base_table_style(acc) + style_extra))
|
||||||
|
story.append(t)
|
||||||
|
|
||||||
|
|
||||||
|
def _build_per_cat(story, S, acc, W, cmp):
|
||||||
|
cat_order = [
|
||||||
|
"DAS", "Données séjour", "DP / DR", "Données RUM",
|
||||||
|
"Signataires / Dates", "Métadonnées", "Concertation (2/2)",
|
||||||
|
"Éléments de preuve", "Accord / SE", "GHM / GHS", "Actes",
|
||||||
|
]
|
||||||
|
rows = [["Catégorie", "Champs\ntotaux", "Champs\ncorrects", "Erreurs", "Précision"]]
|
||||||
|
style_extra = []
|
||||||
|
for i, cat in enumerate(cat_order, start=1):
|
||||||
|
d = cmp["per_cat"].get(cat)
|
||||||
|
if not d:
|
||||||
|
continue
|
||||||
|
prec = round(d["correct"] / d["total"] * 100) if d["total"] else 0
|
||||||
|
rows.append([cat, str(d["total"]), str(d["correct"]),
|
||||||
|
str(d["total"] - d["correct"]), f"{prec}%"])
|
||||||
|
style_extra += [("TEXTCOLOR", (4, i), (4, i), _prec_color(prec)),
|
||||||
|
("FONTNAME", (4, i), (4, i), "Helvetica-Bold")]
|
||||||
|
|
||||||
|
col_w = [W*0.40, W*0.15, W*0.15, W*0.15, W*0.15]
|
||||||
|
t = Table([[Paragraph(str(c), S["th"] if i == 0 else S["small"]) for c in row]
|
||||||
|
for i, row in enumerate(rows)], colWidths=col_w)
|
||||||
|
t.setStyle(_TS(_base_table_style(acc) + style_extra))
|
||||||
|
story.append(t)
|
||||||
|
|
||||||
|
|
||||||
|
def _build_per_type(story, S, acc, W, cmp):
|
||||||
|
rows = [["Type de page", "Champs\ntotaux", "Champs\ncorrects", "Erreurs", "Précision"]]
|
||||||
|
style_extra = []
|
||||||
|
for i, (ptype, d) in enumerate(sorted(cmp["per_type"].items(),
|
||||||
|
key=lambda x: -x[1]["total"]), start=1):
|
||||||
|
prec = round(d["correct"] / d["total"] * 100) if d["total"] else 0
|
||||||
|
label = (ptype.replace("FICHE_", "Fiche ").replace("_RECUEIL", "de recueil")
|
||||||
|
.replace("_ADMIN_", " administrative ").replace("_2_2", "2/2")
|
||||||
|
.replace("_1_2", "1/2").replace("ELEMENTS_PREUVE", "Éléments de preuve"))
|
||||||
|
rows.append([label, str(d["total"]), str(d["correct"]),
|
||||||
|
str(d["total"] - d["correct"]), f"{prec}%"])
|
||||||
|
style_extra += [("TEXTCOLOR", (4, i), (4, i), _prec_color(prec)),
|
||||||
|
("FONTNAME", (4, i), (4, i), "Helvetica-Bold")]
|
||||||
|
|
||||||
|
col_w = [W*0.40, W*0.15, W*0.15, W*0.15, W*0.15]
|
||||||
|
t = Table([[Paragraph(str(c), S["th"] if i == 0 else S["small"]) for c in row]
|
||||||
|
for i, row in enumerate(rows)], colWidths=col_w)
|
||||||
|
t.setStyle(_TS(_base_table_style(acc) + style_extra))
|
||||||
|
story.append(t)
|
||||||
|
|
||||||
|
|
||||||
|
def _build_error_patterns(story, S, acc, W, cmp):
|
||||||
|
rows = [["Ce que le modèle a raté — catégorie d'erreur",
|
||||||
|
"Occur-\nrences", "Sur combien\nde dossiers", "Gravité"]]
|
||||||
|
style_extra = []
|
||||||
|
for i, p in enumerate(cmp["error_patterns"], start=1):
|
||||||
|
gc = _gravite_color(p["gravite"])
|
||||||
|
rows.append([p["desc"], str(p["occ"]),
|
||||||
|
f"{p['dossiers']} / {p['n_total']}", p["gravite"]])
|
||||||
|
style_extra += [("TEXTCOLOR", (3, i), (3, i), gc),
|
||||||
|
("FONTNAME", (3, i), (3, i), "Helvetica-Bold")]
|
||||||
|
|
||||||
|
col_w = [W*0.56, W*0.10, W*0.17, W*0.17]
|
||||||
|
t = Table([[Paragraph(str(c), S["th"] if i == 0 else S["small"]) for c in row]
|
||||||
|
for i, row in enumerate(rows)], colWidths=col_w)
|
||||||
|
t.setStyle(_TS(_base_table_style(acc) + style_extra))
|
||||||
|
story.append(t)
|
||||||
|
|
||||||
|
|
||||||
|
def _build_timing(story, S, acc, W, timing_data):
|
||||||
|
if not timing_data:
|
||||||
|
story.append(Paragraph(
|
||||||
|
"Aucune donnée temporelle disponible. "
|
||||||
|
"Relancez l'extraction pour générer timing_stats.json.", S["small"]))
|
||||||
|
return
|
||||||
|
|
||||||
|
total_s = sum(t.get("duree_totale_s") or 0 for t in timing_data)
|
||||||
|
total_pages= sum(t.get("nb_pages_total") or 0 for t in timing_data)
|
||||||
|
total_err = sum(len(t.get("erreurs", [])) for t in timing_data)
|
||||||
|
total_429 = sum(len(t.get("blocages_429", [])) for t in timing_data)
|
||||||
|
total_wait = sum(b["attente_s"] for t in timing_data for b in t.get("blocages_429", []))
|
||||||
|
n_dos = len(timing_data)
|
||||||
|
|
||||||
|
story.append(Paragraph("Résumé global", S["bold"]))
|
||||||
|
story.append(Spacer(1, 0.2*cm))
|
||||||
|
|
||||||
|
kpi_rows = [
|
||||||
|
["Durée totale d'extraction", _fmt_s(total_s)],
|
||||||
|
["Durée moyenne / dossier", _fmt_s(total_s / n_dos) if n_dos else "—"],
|
||||||
|
["Durée moyenne / page", _fmt_s(total_s / total_pages) if total_pages else "—"],
|
||||||
|
["Pages traitées", str(total_pages)],
|
||||||
|
["Erreurs totales", str(total_err)],
|
||||||
|
["Blocages rate limit (429)", str(total_429)],
|
||||||
|
["Temps perdu en attentes 429", _fmt_s(total_wait)],
|
||||||
|
["Temps utile (hors 429)", _fmt_s(total_s - total_wait)],
|
||||||
|
]
|
||||||
|
style_kpi = _base_table_style(acc) + [
|
||||||
|
("ALIGN", (1, 0), (1, -1), "CENTER"),
|
||||||
|
("TEXTCOLOR", (1, 0), (1, -1), acc),
|
||||||
|
("FONTNAME", (1, 0), (1, -1), "Helvetica-Bold"),
|
||||||
|
]
|
||||||
|
t_kpi = Table([[Paragraph(k, S["small"]), Paragraph(v, S["small"])]
|
||||||
|
for k, v in kpi_rows], colWidths=[W*0.6, W*0.4])
|
||||||
|
t_kpi.setStyle(_TS(style_kpi))
|
||||||
|
story.append(t_kpi)
|
||||||
|
story.append(Spacer(1, 0.4*cm))
|
||||||
|
|
||||||
|
story.append(Paragraph("Détail par dossier", S["bold"]))
|
||||||
|
story.append(Spacer(1, 0.2*cm))
|
||||||
|
|
||||||
|
header = ["Dossier", "Début", "Fin", "Durée", "Pages",
|
||||||
|
"Erreurs", "Blocages\n429", "Attente\n429"]
|
||||||
|
rows = [header]
|
||||||
|
style_dos = _base_table_style(acc)
|
||||||
|
|
||||||
|
for i, t in enumerate(timing_data, start=1):
|
||||||
|
debut = (t.get("debut") or "")[:16].replace("T", " ")
|
||||||
|
fin = (t.get("fin") or "")[:16].replace("T", " ")
|
||||||
|
n_err = len(t.get("erreurs", []))
|
||||||
|
n_b = len(t.get("blocages_429", []))
|
||||||
|
att = sum(b["attente_s"] for b in t.get("blocages_429", []))
|
||||||
|
rows.append([
|
||||||
|
t["fichier"].replace(".pdf", ""), debut, fin,
|
||||||
|
_fmt_s(t.get("duree_totale_s")), str(t.get("nb_pages_total", "—")),
|
||||||
|
str(n_err), str(n_b), _fmt_s(att) if att else "—",
|
||||||
|
])
|
||||||
|
if n_err > 0:
|
||||||
|
style_dos += [("TEXTCOLOR", (5, i), (5, i), colors.HexColor("#e74c3c")),
|
||||||
|
("FONTNAME", (5, i), (5, i), "Helvetica-Bold")]
|
||||||
|
if n_b > 0:
|
||||||
|
style_dos += [("TEXTCOLOR", (6, i), (6, i), colors.HexColor("#e67e22")),
|
||||||
|
("FONTNAME", (6, i), (6, i), "Helvetica-Bold")]
|
||||||
|
|
||||||
|
col_w = [W*0.18, W*0.14, W*0.14, W*0.10, W*0.08, W*0.09, W*0.10, W*0.17]
|
||||||
|
t_dos = Table([[Paragraph(str(c), S["th"] if i == 0 else S["small"]) for c in row]
|
||||||
|
for i, row in enumerate(rows)], colWidths=col_w)
|
||||||
|
t_dos.setStyle(_TS(style_dos))
|
||||||
|
story.append(t_dos)
|
||||||
|
|
||||||
|
has_issues = any(t.get("erreurs") or t.get("blocages_429") for t in timing_data)
|
||||||
|
if has_issues:
|
||||||
|
story.append(Spacer(1, 0.4*cm))
|
||||||
|
story.append(Paragraph("Erreurs et blocages détaillés", S["bold"]))
|
||||||
|
story.append(Spacer(1, 0.2*cm))
|
||||||
|
for t in timing_data:
|
||||||
|
if not t.get("erreurs") and not t.get("blocages_429"):
|
||||||
|
continue
|
||||||
|
story.append(Paragraph(t["fichier"].replace(".pdf", ""), S["bold"]))
|
||||||
|
for err in t.get("erreurs", []):
|
||||||
|
story.append(Paragraph(
|
||||||
|
f" ⚠ Page {err['page']} — {err['phase']} : {err['message'][:100]}",
|
||||||
|
S["warn"]))
|
||||||
|
for b in t.get("blocages_429", []):
|
||||||
|
story.append(Paragraph(
|
||||||
|
f" ⏳ Blocage 429 — tentative {b['tentative']}, "
|
||||||
|
f"attente {b['attente_s']}s à {str(b.get('ts',''))[:16].replace('T',' ')}",
|
||||||
|
ParagraphStyle("b429", parent=S["small"],
|
||||||
|
textColor=colors.HexColor("#e67e22"))))
|
||||||
|
story.append(Spacer(1, 0.1*cm))
|
||||||
|
|
||||||
|
|
||||||
|
# ─── Main builder ─────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
def build_pdf():
|
||||||
|
W = A4[0] - 4*cm
|
||||||
|
|
||||||
|
if not JSON_PATH.exists():
|
||||||
|
print(f"⚠ JSON introuvable : {JSON_PATH}")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
with open(JSON_PATH, encoding="utf-8") as f:
|
||||||
|
orig_data = json.load(f)
|
||||||
|
|
||||||
|
cmp = None
|
||||||
|
if CORRECTION_PATH.exists():
|
||||||
|
with open(CORRECTION_PATH, encoding="utf-8") as f:
|
||||||
|
corr_data = json.load(f)
|
||||||
|
cmp = compare_extractions(orig_data, corr_data)
|
||||||
|
|
||||||
|
timing_data = None
|
||||||
|
if TIMING_PATH.exists():
|
||||||
|
with open(TIMING_PATH, encoding="utf-8") as f:
|
||||||
|
timing_data = json.load(f)
|
||||||
|
|
||||||
|
S = make_styles(ACC)
|
||||||
|
story = []
|
||||||
|
|
||||||
|
if cmp:
|
||||||
|
etabl = finess = controle = ""
|
||||||
|
for r in orig_data:
|
||||||
|
for pt in r.get("pages_traitees", []):
|
||||||
|
d = pt.get("data", {})
|
||||||
|
if d.get("etablissement"):
|
||||||
|
etabl = d["etablissement"]
|
||||||
|
if d.get("finess"):
|
||||||
|
finess = d["finess"]
|
||||||
|
if d.get("date_debut_controle"):
|
||||||
|
controle = d["date_debut_controle"]
|
||||||
|
if etabl and finess and controle:
|
||||||
|
break
|
||||||
|
if etabl:
|
||||||
|
break
|
||||||
|
meta = (f"{etabl} · FINESS {finess}\n"
|
||||||
|
f"{len(orig_data)} dossiers OGC · Contrôle {controle} · "
|
||||||
|
f"{datetime.now().strftime('%B %Y').capitalize()}")
|
||||||
|
else:
|
||||||
|
meta = (f"{len(orig_data)} dossiers OGC\n"
|
||||||
|
f"Généré le {datetime.now().strftime('%d/%m/%Y à %H:%M')}")
|
||||||
|
|
||||||
|
_build_header(story, S, ACC, meta)
|
||||||
|
|
||||||
|
if cmp:
|
||||||
|
_section_header(story, S, ACC, "1. Indicateurs globaux")
|
||||||
|
_build_kpis(story, S, ACC, cmp)
|
||||||
|
|
||||||
|
_section_header(story, S, ACC, "2. Résultats par dossier OGC")
|
||||||
|
_build_per_dossier(story, S, ACC, W, cmp)
|
||||||
|
story.append(Spacer(1, 0.4*cm))
|
||||||
|
|
||||||
|
_section_header(story, S, ACC, "3. Précision par catégorie de champ")
|
||||||
|
_build_per_cat(story, S, ACC, W, cmp)
|
||||||
|
story.append(Spacer(1, 0.4*cm))
|
||||||
|
|
||||||
|
_section_header(story, S, ACC, "4. Précision par type de page")
|
||||||
|
_build_per_type(story, S, ACC, W, cmp)
|
||||||
|
story.append(Spacer(1, 0.4*cm))
|
||||||
|
|
||||||
|
if cmp["error_patterns"]:
|
||||||
|
_section_header(story, S, ACC, "5. Patterns d'erreurs récurrents")
|
||||||
|
_build_error_patterns(story, S, ACC, W, cmp)
|
||||||
|
story.append(Spacer(1, 0.4*cm))
|
||||||
|
|
||||||
|
sec_timing = 6
|
||||||
|
else:
|
||||||
|
sec_timing = 1
|
||||||
|
|
||||||
|
story.append(PageBreak())
|
||||||
|
_section_header(story, S, ACC, f"{sec_timing}. Analyse temporelle")
|
||||||
|
_build_timing(story, S, ACC, W, timing_data)
|
||||||
|
|
||||||
|
story.append(Spacer(1, 0.5*cm))
|
||||||
|
note = (
|
||||||
|
"Rapport généré par comparaison automatique de extraction_ogc_raw.json "
|
||||||
|
"vs extraction_ogc_raw_Correction.json · "
|
||||||
|
f"Périmètre : {len(orig_data)} dossiers OGC · "
|
||||||
|
"Les pourcentages de précision sont calculés champ par champ."
|
||||||
|
if cmp else
|
||||||
|
f"Rapport généré automatiquement · {len(orig_data)} dossiers OGC · "
|
||||||
|
"Aucun fichier de correction disponible — métriques de précision non calculées."
|
||||||
|
)
|
||||||
|
story.append(HRFlowable(width="100%", thickness=0.3, color=colors.grey))
|
||||||
|
story.append(Paragraph(note, S["footnote"]))
|
||||||
|
|
||||||
|
doc = SimpleDocTemplate(
|
||||||
|
str(REPORT_PATH), pagesize=A4,
|
||||||
|
leftMargin=2*cm, rightMargin=2*cm,
|
||||||
|
topMargin=2*cm, bottomMargin=2*cm,
|
||||||
|
title=f"Bilan extraction OGC — {LABEL}",
|
||||||
|
author="EttaSanté / T2A",
|
||||||
|
)
|
||||||
|
doc.build(story)
|
||||||
|
print(f"✓ {REPORT_PATH}")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
print(f"Génération bilan {LABEL}...")
|
||||||
|
build_pdf()
|
||||||
137
output/bilan_extraction_qwen_ogc (2).pdf
Normal file
137
output/bilan_extraction_qwen_ogc (2).pdf
Normal file
@@ -0,0 +1,137 @@
|
|||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R /F3 4 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /ZapfDingbats /Name /F3 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 12 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 11 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 13 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 11 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 14 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 11 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 15 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 11 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 11 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Author (EttaSant\351 / T2A) /CreationDate (D:20260420204759+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260420204759+02'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (Bilan extraction OGC \204 QWEN) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<<
|
||||||
|
/Count 4 /Kids [ 5 0 R 6 0 R 7 0 R 8 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
12 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2572
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb!#_D,VB4&H9tYd$IEtAo_SXY)`]VL(&bIS7t(F0<T:m14W<X9\Y&(l-?3U]q9]\'1afD]%olWB;OFr4Wr7&6i(m'5fgPD3I22=(n#at+;-se(Z]CQnFls"7nT$pb:F39D$!a@GFe%pJ@YrHKJS_XO,6\,$V=CV%NaGKL([o;0ub.&ehpJ9o(C6.9kCmZ\QYH%AMp<W#ae9tpu_8g#j@\gk/#/Il#0qXT,6SXh>,%[,rtqcm.\Wbj-.U\e`CR%q+`8TaPi@<9n'c:ST:A>BB8ouZd@l7?b>bn4`aO:8go`FS#u6gRT)MPYdhe_Q)Ag#l0@8hPDf%UoBS&BjQ(&r7c#0C\DICuRkL[Mb+-9AkEfg?2adtP%Fr<,i*k""EkT1kXOcIt_auc_AGN`<9t:o2$UVfEj[[Os9%k)a3rZCq]-iOm<L`E!A_N%'95S3+),DX;4?u4Md)h!)F_&3u^f09\e2WPOo>fUtq/!B^Eg-BD^\i0HoPa'L'GuKoA:[%0J)$EPX^F>B8;Tp[!ti[fbbX<kgf3>>^.W0Lq,T:#S2dR7cq_52PZrm\G=B$oc'BRChftPOQ,t"h7am2gDOk?ADT0*HSsiN-Z@m!lTO9&B2b5M[1.W2110W&nD7QjQfU>3$BqtL9dDF.8)9*tHG0'$`%hR+-%L'_N9Ru^?Lo&N:DhN5/h'_s<"p-N9iMs,<2?f+=<t,DDO@TA(@h=q3CE-in3/h@`X+D"]cFTcrU1OtTG1WdB[Qjh%$C]^;]@dAkVthAlH^rpl\"7UHlN!kG[[!X*Y`*W.;8>6gC\I7-:$0WS+1"rb<-`"9JMBt]N`oHXDa:^6/`rOF9]]qi4-ag:cUq1neDcTA*2oc8[!(uLG$6,Y8b9gD5G]kg^K]SI+1("fIM(<a)B7Z3kl-&r8Bb+_jjTb9l%u_%gE2=/h.2:13(rhWQiBa;ERBTRR)F%F7B2td5MtaM%NSj=>+&WrS2Y+3;n8S6e:M6L0n"7ZKPkC<7M=T!)PNY4#U!D+h]3W43%u;4A1;U%7^e$\&pW7t2JQV+q4'M2e,<me=VKu-A/cZepo$E)OOS-%!=O5G^o3+.G6c=8`=YQ2i-+N>HKYYqR#5A`QH'sg?;AOs`\Dn)f`9-9+3@pe,t%::qBS#GZn/b5?@A!+B3LJR4KT[@"4hD*j_MC4r+J#kJG[Su,WLVJMrNg@]:`kt?^VO4q-&SL+pj$k;pXDTD`)FI8Fqc]nLdUQOImOo+VWQ\2dM8o@o/?!/qU7kR9`%Qh>Y2Af6\D'/3S>AKI]RrL&G$u5#,<>E$c2I1trgq6IqXVdsUbo>20ploi=dED<bN"#RS]Jr2tDW#q$4250]oA^d8`XTP[+tGDtG@GQhf$T[g-jOTm\*)$L1r3f*/#'RoX/`!7eV8h,H!UdkGobc<m@=ni1.&:``?4e-MI24=oO+YJ;>mWi%;#MN8r5X@-U"].Hl\,Zkt4r9l*/tf7gDfPjmFeEM46Z<&GBXNh-7i/s,6&43maTYL+=>AY9:k82J!#Rg7i;G9YUWug\8K`6X'!eMHG&mX'&2akXnK/!geQ)SZZ:#g"$AtVQ]EB]W9<(h1e^N@2M$,4`s"SPEs.H:mq[>t#&i<Gnn94CG'GO7aG)2l35\N1S#f-PiGD+o9d^EFWi;ttFCON*MDulakIp<\AK;,ppm<FG[@&P.k]6h=dUsad[9%S7K-4do6=%t8H7.:0rBUk(R!#--T6_K;!.%2t7ch!LEQN8[F(/t_#q9PN`,=.M<H&dKN<oCAqY_*"o+9XbZOY<K+bKdEl*e:!0V,I'uJ:gPGOR9u9'G.?h]4`Sgj4lPsUY1][UPJb\\ZUG`pPNq\8Q4AQa-.Sodr!`]G9B*W#X3.p8&8TsB_&o+RZ!Kn$9$g3%o+INSfu%m5pg@Bj\Fl,1=)m=(FR0B:];/U=H#cLp8f_nQhX_DI\\@1j*#mA#K7.Oa%j#T5KS!+B-MhDh&;%)ajoJI@_c,s''6-:s"="g*5CgLE=t0KN&fEN]P3^%H/9COrm5!"L17j/(jUG;T"]*hR?sP0lsHaKgTj_n[qcJR3%kIoQ^l*JI,SYlV$^YFAiT2k;&:a,Z)ESH]4fRqjT9aa.d3Q7"!SRYL&hkp.)UQ@#*`O]"J`A`^Pj=f:du#NTeb5:LXo[*pYDN?QlW]Xr%fqHcPo;;o.RUuY=`U$o1%4_A`aD8J)2UM3LGcAC!hCdaST2Bp;-$I$e8Rl%uQ,CA*`i66;$]^pq$G"CubQdD7R5^OP9r,qc__Q$@\m90a0-#&q4]1GgZPSUDL!*.H)@FZTbfM4-(k8.*k&5QD=D[akqI!7mZh];,9>5duZP!M&m*cjk*ftMDJl<R8.*H[K)^DWq\c`4,U:u``PbthWaQ)58fQSBQXG!3@Rc]WG:qX5R<l/eH44ff1W`'3m\0:);k=Z'i%GG\pSnt'ORq5qDRR3AarZ,a/4JDF4q4LL:mg:^:!>=abkKOj_bK1VHiIj(cOs"%u#<R?sO+i26-kk\i\3f^%(ZrJR.lZPX,gY11NrqQfX4Rc+2-N3"=(%7PP3a1K13_o7i9X2KJ:OHohht~>endstream
|
||||||
|
endobj
|
||||||
|
13 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2177
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb!TY?#uJr&;KZF/,&+!da"("M%Ak+jWnQo:=G9V^!"V;MJ5[1L(r[TkMMnsYm&cfYZWoU-;>LL=M(j[Q@2hD@,j1Mr#\Z7rY`W<9*U?mp^8drEa\e\0#pK>O4a"qf<[TY(&jql`K[:iIFrBcT=^*bI.\JOiN'>>ifMt:-2N&<#"LFA8gWF"[ip[fbB"Y&J$6$F)R&BDg$(4HheQc7HfX='FU[%fce>nRPNj!oH'\/5iUE#lg<.C_nr8@rDulKj@WE!oHrtkM#%<6(Ugpu"k/kRI3/*9[B/';hj6,.98,P",0I8=.FVU$!cYKr,I:hI$it,@67&qWm#YT+hM(J1>99ukh.63Eo=E/^'0#rgN<gC.sWl&)bZTUVIBtJks\[DTH%LHHUP2$D275MILFPVR)'!!us&'S]\q<^S:S<92uI$6>pknmMBjY/$t@R>S3`#4DE;@VQC;g:!Rmuee(iXA,jGS]AfX9WPeVHp)1Cc];ZE$&l[RlLQ1O8L9Pq9_jLKt'Ml,B?mG28GlqH\.6P,k&M4M?-FWS4NPr'ipE5I8''fQ:M5Bn78\l:$@uBa$RA=f[4AE[@bC_oP'=^3aVu66k2eaP7)/IQi$u$uQA383D1_N0'"17#_:D1]qIt,a7ZG]t`fY%c*djW=N0T"^2Mrp't2et7,]%uEB8Rb9dWZ*i78[*)g+KCP`VSrJ<OedkI@@1X?bgAnHh0b>eFPUiIBFOQYAs+!Oki!`UCC"/jWSuC.CF&62eYjE=RXDaQ>!s:()_D[ilNe/s7?dAe!HF#CD"U\j,\t)r]UIgp725"&e3O`FiHZ52ijh@>2Y73'^)^A?e`,K2eWD09a.cmU_\A!VpcXT*0;`up4%uF9\*G'rTCjK^n'FMrC6r#dEp?q*V2Ns;GbrTdGM-P/h2@.(FWW(ce30`i:q(Ae1W>:,6?eng3FD3b"jX^:1s17jquT7AD]4lUYZ8NW_YgF=lMn?u[Du?Q+k!iq.tr_Vq#XWb$]m-PjAg0]H4%4U\F6pHPdps/*10i9-B#L[Je+8EY/>L]Fkf?G62ob/Zq.NU]CmM^oZ"_(Qeo6.UZSr./O\0okG]qXp$p;POMb(@r:\erGf%(jgpI^+hc<7.mA.F=PBq$l2=Ii<90+7lWT:,KfSD)d!D^X_Q?P^"mpP)OCG:1(6([5Tr+CMMhJ@agm3YkDT4#s97:G'P"PhAh4&"fMa.?r2@rKHU*QG8=HV^]J?cM'V#];9@5@)!Pqhq7-Z^pbPK0s?g.=R\n[N"qpL1V,VT)j:JEP6iJLLqLHm6M\N-.XGh-)hca(T2^$YruJ6KLCt<!U]75qXlq!g:m'`MOTGD>9Gbg[Zi(P2>:^fE-OJiEQfN/X\2>)lU)N2rSHRb$H]%:TSk'nrgrE0hc5)?iDC>qf^+^Q9>,3qCshR6JY#OI)]r5tZ0?1(`8qu.(%JTE<=q;d>)7miWec@NbQU?KZ&=K!aR^fQ0LIj\MW>k:4FN6lA;eY[*V+X%/KH#O`QVE6nN0.Dg.)jd*2'ATL"u!)@ES\oqT-q%-3%3nDbegL,.&Ti5*+VcJn[835]-ENJ1Sc!XDl?Cnkh73dO^Cec<D>5DGaR%n>9?Q^CTi=H!s*$hC@KMU9rj'cT48Icdld$6'tD3a&.FL_UtBSZWS8b'C3)B.8RO%IGS%.n/*fBc_it8G_;2U^8/k]%`)Wh_So[TSl3+t,dt0%LbL>O@gGh<j.+/?Z`@^"8\@.2i]P5mmthPjSh895_)/ZWHOL+f-db`b)oE9Z+dg/q*6kn<`jXZC4Ju_C`2bK3ULAhoOOq@j^,_utKZ(K(_)re>#g"g+=nHX"C7PtbO-mNn:PP'CFq!UTNh,2[,`hI@l3.KNB3UB@(eA<K*=<DlmtO+pEl@8e99G26+4k:maM%)93=j_9#E>8V_*R)90K)IZ`oeeRHk>H8KS`P;"fR<),o\Zgijp;+Z#_#n8=UV'!DU:R2?F9pQs!pjOaNc+8`!1W6-bWN&3sag5fr0WO_^+j1E(jA7tYM0Igk=[NF`BgWUb3G5Z?f/&-4'%%46VBM)V4(miX%hM9LRtp[.j$AIS>kH/^!R`5*&DE6I-=P?.@F[-CkZ<ZO'^b!:I-M(l)jYF=4?^:e?Io+ehJXas^+[o\P]^J`%F0D\b0<I\e4RsEFkP-Laq%7gF#KK_j&~>endstream
|
||||||
|
endobj
|
||||||
|
14 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2240
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau`XD/\/e&H;*)_/DsS7-2&%IV[OO?l6,Uo>^ibPGkGgb>)mX>Q=Xmfchk6Z7,,(`C1I&UjJ+l51K,$$UNEm8H&QoM9t!'HM)h36IG?S,!=n!q)`o;>l7]ce!6).;H$:d/kJO>eE/q>c3Q<;JhffP0YbiAUcB6)s0+1<M1ZCR=W.R'#cf,5"h9^5HF$moINAhq($4In?YhX>$afhlQ7jif-hHRY6#cFZ1I7\Kbr*6Fg@G("@U#l]&XPOW8h8BCTYC^(1E#Ds[CFs7eoXI7rLn@`52S%[%Srr"L)r7bgXRXF2iM:7k0fuX(C5;t5ihorZQ?Th,SD?)aK_)`e/2MbY:g][cDfaaC7S"hS%H)F9N--On%Hog#kMc5TsHT9EQr6Yir4D8o_*KD6uRQ.S_fea'Ic93D42;Co$]j$BteW;rSF):r&Bm2W:T<1e)!hD_i%g.g(`cMQf=WP^UgJs]5;1QSXC&G/uh?0(t1b4O`,o;6le=cKN.3kde+4Vohr?t=_tPNHA1d2LVp^Ua89O\5eZ2C//BP^s1rJ1Ok1XU&)D@E_IXkP$9m?U$Gq<XNH5TNY]!gtId<F)i$f4!F#D]J&d&+3IU>5)&#U^(JX8X',dX$EZ?!\8m-a07ZsQf:g8rJ?Kl4%QeMf/>*<ot-T'\4n'm"'j_ZP39p@h@]fV2AG(#-n+caXD?@3??Gq<Jcc_k*m9#odcb^?tX%YEDS_FHOM&3he"cq]\u&ps4W`))It8'BPND::!Y6catmG&[[%IK+!<)"r,aX3#(mJ7,&n(Li?RO]h#OVapZpo#u##:&/`d6GOSSrj2b?-CG_UY1pd>s6>'3\mKUVQH/?UiD27!$a(;Y^DbPP`+,J-eiFlicAj3^JdbMti[\1#=\I&Ca7cSXmSB/FV>2'EsT%_XN1I9&=[l,D7R]5T>BhL5s^&8ku9RD-?hB(t=IZ81TAT(@+)p^MhW5f->c5OIh_`,.kj:i^!D0X717?Y)(p(?S'RcPNQRE@*SDkF$qm:M;4MKqBYqhK<<^D]4*W**2tB(O51m:(gXk9<hkc-p">r.D#;9p&l/B;n(Kahu7iT&mKuA'3&8pLnL)b=;H\o/OiZE@`jseL4C85MdA)Z(=3352K^[adNo21nALh&X7^;jro78+]pPE?0CksCqdJ(Ih-Ol%)GnL@t%-Xd!S:SCF7*4Q.,fZ`]6$3JGq]F8Y9kOHRK1&2XFI7:`,kn(9!"iWIZ$h@=W7>\.;)=VHXZ5jH#A:)GT%h6m)<'_?!A[cb?1Z%"$^7&&dG.jNk,iII%%:Md[\5:^m46"*sTk!0+5o,RmVW:WBVW.NHgrpZtOeJ/Eb3HhN"MS<Y:UI3;oPm"<Dl7BeF"OCoX@cj9NIg$8[D09:oO-c5sZI`K10"q7\"NdWSkQZ;?o!ZPbo$r@*(;?JrQ_#TJ":LZ$O%0q?RI8f*T-GO2#1'8qRNC=!I5TDCL-=b[5"4fWXcr_\bNKQ>&B>-/f%0af$ELs9TL<VkcoNVST,DOAa5\"&r&6m\RbA)8KHS/*J"/:tAE_6GTn>LXcK/d,#pt66k+.#:/@\0A<5VZ'_`'BoB+@%1<,8r+gUPEh/q^02]9n(-sZj&o\8RWUaj5O/XYR's=!(F+F23;;i%+#jg5[IJPZ7dDW1Dp[9npC),1k8%Xqd:Br8krmK#6G[Y4qOA(p*Bq6liR8,@ip?GiGa:8G_UWFiIE8iB4"O=,0hiL*1iKBk4B2h/;AQq5V_Uu%-6(H!]7n\%$e`h,U.k%)%L?NHhO9mJ46!a_`6H<qa_.m5epj]#6GUW^;N:.I3:d"m#t7;(JZ.eW)M)oVS;(s;Z)?g$P76GW)H)<%g4D7GT\sX]M"4DBEs,FG%M8MCuI2peN"?RB\*%oqh4a77NC'uA6K7s3Np3Ib;,E1=6<Dab$6(4!gR7UpQDV-\b^fDoD\.CK^]R84:#$[P/Us5/sKSN:hJfUH'O%cPr"+r[^me:;)6Cp67dUpIj%jkaO]@(,1C?r[KIrhfqoDhg(KgN'=H#]=AZ_CCM:T-.cnpZV)+f9GVa/a9IQXl$sOJ\eq7[T`gJ#/>Op2l0_8o?Q5/*m+^6kG^_:QT1^5@R>1]hjY2LBs"@"M$<pgl4:+83+%!AgXdg5%.Df&T;fCGftjUA17&$=VE!kBFD!nHk=&]h@DcMUl&1`H0tZ(!L5-pe,rh/_lCPD\1blK=m.[nVkNI8^-TWW+Znn:ReCQQj>#W0;@;nLq;RCM*~>endstream
|
||||||
|
endobj
|
||||||
|
15 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 506
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gasak_+rc>&A@6WhJq;&=kedsE!-1S6A7ad/$4bM6dR.iG..&748*j^.U=N5BkH]L^GgTTN[69KXQb;B"t,`W>bLlnT!KE]%5++92<009Q!gU-2+OW<`bST'4\@A+g:%qCn97]cVC+W[3oPpO[^a"3LFhO'1bWOV7eH/VN\M6e!<Xh[;<Jom#Y>UF=-XE[5FhP0PG@utH#b>E[u2Dlc\`LJe#apTPp"^Vqp5f>qB`WPVmq2crJ#m?Gci,I(8mdMJ7)7]&Kbu)5ZWhFomcOi<RkCUM)Qopc<.=s=\+C;^V@pGK[:rFFhCi(AqPjLqr@SS^6%m&gs>ZTj^-m95eDA+Nm:F6=0gaO1d7?V(Q@\%kq4Hb\!-.Ne@f`OSh063a_N\TDHOO%XM''m8arA288<S@]XR-==1&[@`*FSQH?.3Ndp0[7Sm2Plo`=Sq94^%?lj's9h:<N,9Jl/K],4JMV@/%c!hNfl`b[U(1r)6>Ib[(37Vju,AA80-@aLJ~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 16
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000073 00000 n
|
||||||
|
0000000124 00000 n
|
||||||
|
0000000231 00000 n
|
||||||
|
0000000343 00000 n
|
||||||
|
0000000426 00000 n
|
||||||
|
0000000631 00000 n
|
||||||
|
0000000836 00000 n
|
||||||
|
0000001041 00000 n
|
||||||
|
0000001246 00000 n
|
||||||
|
0000001315 00000 n
|
||||||
|
0000001621 00000 n
|
||||||
|
0000001699 00000 n
|
||||||
|
0000004363 00000 n
|
||||||
|
0000006632 00000 n
|
||||||
|
0000008964 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<8465917567113f196f99bd144e52b34c><8465917567113f196f99bd144e52b34c>]
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
|
||||||
|
/Info 10 0 R
|
||||||
|
/Root 9 0 R
|
||||||
|
/Size 16
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
9561
|
||||||
|
%%EOF
|
||||||
131
output/bilan_extraction_qwen_ogc.pdf
Normal file
131
output/bilan_extraction_qwen_ogc.pdf
Normal file
@@ -0,0 +1,131 @@
|
|||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 11 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 10 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 12 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 10 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 13 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 10 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 14 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 10 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 10 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Author (EttaSant\351 / T2A) /CreationDate (D:20260421112127+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260421112127+02'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (Bilan extraction OGC \204 QWEN) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Count 4 /Kids [ 4 0 R 5 0 R 6 0 R 7 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2546
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb!#_gN)%,&:O:Si$D="1L[Mtj3b,sN&.UWa3(c[d>KJ)WACiE9(K@fqZ<Q!JiAf)f:Mgc6OW<'!.06%C'fR)Db0oR*XR*N-?%cD!Ck(9$&D!2nJ)q$:]<D+>u.F4AXN^rXA-J[l`P<g"K6)98N6h:hFrT3>"GsuG-Z5A)+oR5`#*:2)qS3<ak*.\BWBO(aj&8`/?9Wl7DNGg^c-Jh5X<ZN231K;9E4mXrk0MRmk1fhY0"XYUYj(`cd'Rt2qP7TpcBAn9MQsoC%BHl`In?,)Nic]7mZ92hn&9n4EEk)8go`F)m/[<RT*XpYdhe_Q%sPZl/q:*o;g(#bM+ZpEdfecO`tG^mf*:Tm`Pd%0W4F=jn7j*N[R3$Tir974ES/AD)MpronM7L36uoCYEmr9KIa<p'.Vj:rg()p8S-k\ZQJLg"_!Xpg2Ls\_cA<qC*OD7GWPW^%MD*`]tR=3*LX)Kn8r\E3]W:`bN8]?Cq?0%\\W\uXT"SNrR8>9"U6+_=^[?PDqF/^/""X);TGToOU,MSc_P);mOJ'c^Ir9MrDk^'S3!^9cq_83PZrn'mtu((fNa<ls2OBcWD;T[1R\eiI.([5jg4`Z/?)>n:mQ';$5AG05J>9mEsBa<=U$)Fg7,CLDV1CG9510k]ACDa?Q$j0GOpp@pG"qKaPK1LPmMCN!O5TBj!Q!UC%ob5ZCX<T@^mn"`6n]W8Q<UD/L1tEi(ODLKJh%bG;tORjK$-F9#<X:]VB'M`,=2-]XC'*@L>''M0>X'#VP[2Cq?,hrnU8XKM;GGmb@$&(pJsoK.(,us#GN*Yp$I(j,`H9%'&*hh17:W3?PZ/i,:lg?I*9=:$g#"[rtim=[+E:D5-/c13]C_f$W3jrS$'GBppk3B`9GdZ.[%W@C==>O2X5QX/Kril_F@UIZg(hq9#a"/^b;D\$nR;]=Z/pNGt3En!Dq/7DGck>tne=s!#upDkHLb4$lFR\lP][.`Va1AZ@[GJm#</F%e4sN?DiQAkq@)Tb55u70)RuH#[MbikT@mP,6N^gN6Z;"pmDY%uhK069_;8I9LHbgC8/8-+a0!a%+tEK;@p+$s:lO#=_F`IXeTG>T?U/%rURUU5+bjK;gim@!Ts.ioRP.B^F3ERJ"p#O3nB5>;J*sX%RO*8B[Hka47#sH))b2c,8gCggg;C>J?D]_"W#C"h=U17=p0EIo2_`Gm^"kpm!;504,+78Yk>;HK'?t+'X`Z0@DtX6bU[l)Y@Zt<QKj%X6mX>_Ket@;&@&LousQ\dVaQmQKt:mDNpa+H^$$O"GPl:,sG(./T<$L.Ps4&IR5sIp![aS[%8q.ds>Z(RPsR'3Y<!jh>(?%m1W6bqL"`)e&)Pjb^n=[;u:)&IDdY+('bbe<G:c6:m3]1T]"@sE$2IX;u"V\&0J"K.&dV!3'@TSD-n=JQ3B3DJG:'bmGX!cXO/GhqG712*9`i`+]&.DRLm@bJ:`Br@2(s-@H_Y;TE+5N!(EZ5L)q$o0aG:ub99[^#oXgR!>H4Q9MZ<(:bZ!/S,k$'3Z%i$Nrcn_!BB577Q(AR+@24/%KWX;)FOTG&9dglJ-2U*!XangVL&"q;#nQTfIGW0."DCo1dp;X:]LZQ(`!A8JC&U%"]0_k;#i6g[dA5F$K._MjuFi?Pc-Nch]W\!5qso#_SLa6#N5[I@K9^iCjRGF39HeY)+K3)CE_D?$p[+pL><BW!F`oc$G8b^$u!beT[b0pM#p3cB=0c,K*"$ZjKN/3#=Yb@lTbg8AE7bj"^WAl7SAKlb]YcB-e1$!5QIT*Zkf8SjSq1^%Yt]9g`ImUk(CAI-1YHN1g&6S]tsMa;GG'uSKA*i^s*r)"L$(q6$kg'#/^X,s%?n<BF1nN4mi@0,akZUX)YZ@iuf#Cqi:tB5>htTB]mFXIYZe^I?@<WnXR@_O>bZVr,4e&_qFj@h>>#[HlGDUK*ibUG5gGZ5G'Inm4:lIYWKQ:T3_+L$S[l.H>oUl4:N[tP3nQm%3/kO[MhFhmEui#)F*!'?E])lMWU2DPLIe;Fb@rO[[^kmV.+>c9%D_"frLXUkh'-9*\6e]Q*Ejpb'ZKo//")$Psm5:dB\QD+t-O56W>*;AJbupJ2.Oh?pGS66nk8B"!SSa2>Ukm&VMokGTJ>Eh$LIF1#7aTUR65_,3*<>DkArq3V-%MGZLXEpN\!H9::ncQ04,ncG=$4S6"_6NEk=DOq1S@>c@@bHr)qI(g<0M'2j,n_\_F\VHa)G\(1=`:@@:UjpPb4bO_:t`"]H&lgqOSl:(F\N*`VMVEVab62Js&lTD10T_A(A>)r<_-@_uY(^&G)664%r9LIed96=:OWO:m*\N"*]R,N.P=ppFKU5C%fHV^J\h\Z_MaLaFDlZNK&\9cKaC;D>q/Cgc%)]Sol8F1j;aZ;C%g^0m9o]R3*S=&YP[9S"oT5R9sW9<nTn\j@W9a>1hHr#,/p)]HfF7"0CMgacBDh7Y*ZKEYGk_Ob3.0.r#''SWZEN\_gQOaPlRNIb&G*nG\\"n"Hh?[T9Fgf;(=I(n'5u=%FF_X!VkW!6#-iX3G_?PD~>endstream
|
||||||
|
endobj
|
||||||
|
12 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2076
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb!Snhc&8h&:WfGfU!OjB50!NZDDp.JC<;=],&gRAo<!VU$e#03Y'd=mr)bbrfPj<&oS%s:`@8%qGu#,eUB#'Yjn4Es+_8<haVS]ScRk*\d.A$/rW!1jlkpK&R4lAT&hE(n/%oPVEBS$6aNV:/mJSTlFB*r=(saR6i(aYeaJ\[\<9um.LGRR%;>t>DfJVP^$Odep?<OL2&MbM1pYq%Er34i#&^&GA)-cLoo.Wh906K?m'9_tR4g.!>?DCP^g/K<p[H@]e^n7A<cSDt0j,OgjPhtc_Ssb=(k%1e>E/.V^FL;$Uu_uXLu<ZY'8cV1_U$7K65&*FNpBdWkE6+-gFGg\ZA"M_8'+gP?QHt&@`qd5SZD$2@<o<EOF>itXLP\B]j)1r-.D+L,?QdTS$1EJ/0dIBN#U-&"H#e&J7g^FP3Y6JOH+n2<A%bo/EZ0"Xa!=pRIgaRN)Ot?)a@#K/;R4M)TK*+Me30(,CpWIKPWJA%Po4H#o$`8ZC$Y\82a7Q3-2lUMHt'<ZB9C/]E)QL.6P,k&M4C1ASa/q)@>nf=Apr6"Nb#12/P`+61X`b1D7aXJB_"j3,kH__^Nc]/5E']GJ[/Oh4&kjO[(^7OJe3`8\^m2,X?a:BZ#$i'$'nNRjUdnGipdSVut]uRV">m8+;a4oB3'ECF&DPh&U9'Y)sheT'.O@c(%fV*s/a13%!2DA0XY\cb_A-a-`XX?M<uK"OUG=B.`a"!>5T/J7_:C>:,26b2/[o,cTbQLMLGOeVDn.C6@GB:i"rR-+-9oek-gtWC>e_ZNkH-->j\m8s2/C'!NcB.?f"aO)Qt(0-o3XjXR#^d-pc$rQ%=/np`T"8!X8Wj98a,-;`43+5n"8;H@_DTkm\O]4n5CXLiSe6W_h(-Eh$%RjPUVi_:)iRI$fmY"VPCC/-U6W4C:IT]SKQ^P$6W(QX8.Q]5aog_0j^[CpBUG/s+\)JXWPW3(TP$9mP?bJr!0AVJVT?_2sBhi^;eRRHN`KN!%ZQE^U#*R9>9OLH;*?*VC);6Yu]F)m_ki[M4lF/lS40V2u%pCsEbrVI;jH$8](SRkmZ\2a$$)hE+\4RI.s.9gi=;g%Lca"NL.>d!APGL&21'0\S0Z%^*?c8lBZPBJu^1,r!C5@u@VoL,3Ab1GOU(0MOXS;^.-G>5;[!HA#iQorV99<qt)dp/i\,;?;?@QF,g-LGL]B&,Q,RTSHV3gVi"4RF2:9lFr)G5^)UXNZ,8LYj;c\NKn<q=2oABkr*"].:n.i`^1aU(u;8DE2Z_*U9(8=C(B%b+Ug#1-#]86*^sP7\f8CE"G@2[bV%dm383o?!MmWK:d<?4K[[V:3XOA<c^'$]o_I7a2'BbA+IF0]>cO:_D%E&n]RkLDGZ7g8HJ$nViXj]egf'1nlmW*\rt$EO3V&;p9J1`@':#]0M,OGcln6=H\WlLk1D;C(\UTqlnW9`bjdb@Yp8)1_b`oU:_F"9(8Xr';3%CqqhH@mT4;ZJ6"a.,q7\.)LWEIMB<".EO"(pWW8`hqNm5b/mFN9V^O!N),dNCNNo7r?K#\-DaV\`&j)4so6)H(7GF[\C(6+(pNMDYY)^;sD$:$c2Ztnhh6_s7a;EH+s_[X"`LZ=T[qKt6'gNa-71AO"lVO6e<R,_^8Mka"8g(p"FUtFr'^.O%@3<))OHkY]&"t)XK:T!/4"OBpN(MDQ:5LlKk?uN!8QRbZ1"K/JI+(N)=?EQDIGNW\1`VB'Gp9)Wmi[P^;Jk(((=E&HsrIeN4)DN=c3BY=/>g$Plb71po8rD!NU=jL#\"j;S'p9&]lma3F$mBWY6SQi0B*V"6Aet=[-<a$[dq?lWMI#3%QlSOLLL^(gcB.46*18L6VNfV,&/q'%&VS*5@0@aQV*(R\&gP2?HA*P`-Z7;d/FVa+%F1QT6/pZRDNGPuc4aIY+O"eCM,CGZ-sDS8%%>U@57)"Bp-\rpk6;+rMELLs()+rt:+tbU6/8#3=!<+RaY[,uf:67:0tlqS'o?P)8=7tc6r0q`2UH6QFMW*F6W:4f+>"LskDh1fB^4XnUh-<5=/oB:gqISUm@=t;DG,mZ`ek*9*;p*i]Lu]~>endstream
|
||||||
|
endobj
|
||||||
|
13 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2182
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau`XD/\/e&H;*)_/DsS<9:a5IV[OO?l6,Uo>^ibS#EFsbAM/#>Q=XmaW`0&Z7,,(,t1_oW-aQFHg'LX1dTcAPPXHJM9r:\HN'3Q6IGWc,!=n!rB#>3?N!ugF&,@`WMq3mQR!eZC@dr-B*=\.5oHFcQp51fd[U\er3A(=M1ZCR>oF!+#cf,5"h9[4HF_r"I\$mG($52-Z.SH$-YWGfXe/elpZ?hD"Mr@_S-]8qD>O/gC<MBVX*q+E6sT"N.BQ9RL]/4BcX`[jfAcd[=?@X2O,)<Hq/FL[3B`W#(](F!I+mp27`.cOBeCu@fKmT"#Eeln(HlY+8L-c1O_0j(W%kqMT:`8ASQ!@!Dk0OmS#<[29N1["++24!K_]N_cpaDnZt?^6naJM"HA;__Tm(aG:2eAkMNjb+/kq9Tq0A^51g`9.s6`AiD^($k3cA=h*,Q6)?6#uiY!D`r'`V.Qc!@_?m!Bmu+X"F'</Z\hVLcr9?SO(A4S;ASWR?-hmj/>+V=O,^f^B4?*8M]3VepF4pX-p4HH1S=bY,ePK@b&dYC5;Ul*%]1/d!hplfAUT&-i&HS9%#OIG:dq>MgD#:P%/dX2TON&GU1(a5Z'&3\OVB]ED[i?L/r!Q1NPoE*(*/EDmTc[k5'(]"R'%h`cU8(l6/S*<rfYY"`AM6Jm^]r<"PCBN%pM^,#[D/q\?bLrFW7H3NK9LMCVQL>/3$LL]_P,iP"@PPA!foE9SHAI:<p9H'NXPNoV[DX$aLgU-dh9Cl@RpWkh_(j$WmA96a,_ugV=MJ+-L>nQcSeWD75kRJpnTkcr%5Sr=o;l,tOZ!u<u#PEO^#9niHUsf2NLmR_GQ-\.o]s]S\eRlELq8I>!1E2"BR>K19F@2k7Pt,XVCEIR3,kR&8m/f806Vhj5(X0O,ce$ADS^uTLKZ%W&C2fshbu>+3CJ$B'*,0VDW!C@#[69b,,OK>1Qcu+oSj9i"r[q"(jSk6>gr+()aJ21eFu/gul=cXJ*0Z*!/PA;k<280l*+]iUI$+-3g\uXZGTibm?'1R-1]+hC):tI<9F8+#H_'bhWb/\-L,E>6qOAmn.i3Jsk?:P.2q'p_^!/37of%s',S.l!aL"p1:kReQfjnOoM-,/>_p"9$.u.dCh+](Aqaeti!9SrBbqO?of,q9n,1FJ]1'CPO%.e,]6/E1NK&kD98nn?kdi=lp^gK4$9?bCCgJJRfCj]3BTJ/Y0/^OK#;Zf%[_>rD\GotANbci>ma<0l"24FAAM';T;K`_[2cb>VJYjklhliV5e.trdf*sbsWq`o[@fU!GrZO[1PML?UYLmi`IL4+.%J:c[b0<"t7JpeaO2s_KbA+\FZ!Z&[;QtfY)q[s!Vp433<Y`G6d*YA5>Ls0ou*)Q,dp8'WSI/S'OK5ijiG\:lDI5#%@m"5=r?sdXka$(?5.J?=A`]b0S^:A2J_=-'DdK!#efE^DT?Eu!QJUk_D%g4;8I>NM;q`o\/fLI)CQSnZ)Lg]+F32#4(lq;*/\>MLe5TDCK*0YZbJAn`'"=T"QM1Ied5_(367l4>u7??Igp<A<o$@^%0U]uYFgtT(E`o4SKGm+"P^`qD9!u/Sce3K%B0L/S'"$'];YV2a91)g]Opc\M;)A)G!",t-C>g3od/;ARE:8n]-0/8Q$*sg4-q\W;_L#_]tLM,LL32#4(lq:skH#_d`:X;39LW?\2">#:U+@%[J9+9n7#6Ha$4q(G6i?Y/[3?&GVpc\M;)A'1BK5nD[g\1`"7Bd:*.#*/,JNWfpJ0rnrTo(Im7$KgsU&ft^j'G@U$fcH\"7`fJ8^'12&?H/sJ`&rc/hrB]*=0s?]BiA5(/?)HSTE2/U>EZ*Se=9MGT"m(QDi8Df/hc/Xj\lR3o"b0.LT48jjLD7IiS<7M0XSW3ZU>B3)^#[?&:VgH)96;Pq":cWiIDHWa*%pAadNiQ\nHmlKXW&3.,iu<+KpnKHel]7J>/'+L4]h'!rl=9df44G[eLC.spS.]F1RK)>:@/-kbAFH_Vl$;/_3&a:d@fdb]ojf?W_/Q-PXKDhd[^TtM&D@tP1Pd<.imJ<K)<c!''EhXO#'B&U"8fC3fQ8[C2%f>H<3+Ldu'@Hh%?gP2%NX;W-`\SD=g5oKgTo!T.O[;I2'QFDiS5'f@D2hl:n++6D/n";G`G50HQHMr+3id<J^p\XOEJY:Q.U_65k~>endstream
|
||||||
|
endobj
|
||||||
|
14 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 317
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
GarVIb>,r/&A70Vk#aU1DUKd;7k3FpM2-J['NqRX>h-)p42C#h-bocAQ$07bfpT5SlP)0gBn/:*Rg0"[i().KD8:A*kJa9jDe;qRVCO_p>M"hFVFu!0c0?c#r'`ga8X"U?W!,,d7lsq>fjOJ&S?kCgfN0qi3Vf3'KSQo]J^D5n&6#r*7"(I;%LVJWH6K&l@rDV*Hh"pIRJ%^$C%Y]r]p_S%CL8tOSnBir'!.j0\-5klfFYF\!Ded2Ksjq=$N($UNKpi6QYMIg:a'c9k$=en8Jt)Z6Ai+>cFFi9hh6!m6h668aJ;U[8V,k/[EELd~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 15
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000073 00000 n
|
||||||
|
0000000114 00000 n
|
||||||
|
0000000221 00000 n
|
||||||
|
0000000333 00000 n
|
||||||
|
0000000538 00000 n
|
||||||
|
0000000743 00000 n
|
||||||
|
0000000948 00000 n
|
||||||
|
0000001153 00000 n
|
||||||
|
0000001222 00000 n
|
||||||
|
0000001527 00000 n
|
||||||
|
0000001605 00000 n
|
||||||
|
0000004243 00000 n
|
||||||
|
0000006411 00000 n
|
||||||
|
0000008685 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<5b68c87b2bd1edda18069a726c174248><5b68c87b2bd1edda18069a726c174248>]
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
|
||||||
|
/Info 9 0 R
|
||||||
|
/Root 8 0 R
|
||||||
|
/Size 15
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
9093
|
||||||
|
%%EOF
|
||||||
BIN
output/extraction_ogc.xlsx
Normal file
BIN
output/extraction_ogc.xlsx
Normal file
Binary file not shown.
3291
output/extraction_ogc_raw (1).json
Normal file
3291
output/extraction_ogc_raw (1).json
Normal file
File diff suppressed because it is too large
Load Diff
3593
output/extraction_ogc_raw (2).json
Normal file
3593
output/extraction_ogc_raw (2).json
Normal file
File diff suppressed because it is too large
Load Diff
3413
output/extraction_ogc_raw_Correction.json
Normal file
3413
output/extraction_ogc_raw_Correction.json
Normal file
File diff suppressed because it is too large
Load Diff
3979
output/extraction_ogc_raw_qwen.json
Normal file
3979
output/extraction_ogc_raw_qwen.json
Normal file
File diff suppressed because it is too large
Load Diff
213
output/rapport_qwen.pdf
Normal file
213
output/rapport_qwen.pdf
Normal file
@@ -0,0 +1,213 @@
|
|||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R /F3 6 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 16 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 15 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 17 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 15 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Symbol /Name /F3 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 18 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 15 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 19 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 15 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 20 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 15 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 21 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 15 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 22 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 15 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
12 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 23 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 15 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
13 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 15 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
14 0 obj
|
||||||
|
<<
|
||||||
|
/Author (EttaSant\351 / T2A) /CreationDate (D:20260416195931+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260416195931+02'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (Rapport extraction OGC \204 Qwen3-VL 235B) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
15 0 obj
|
||||||
|
<<
|
||||||
|
/Count 8 /Kids [ 4 0 R 5 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
16 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1889
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb!<P>uTK;'Sc)J.s/8-"%HX`-182uA\(ODKr2OmB#dUS9da9nL:7,2O6lX/Y)UC,l*.rKaKf-c3dE":7#Xt;A_HBo:<9IJ3I\jOj(*7+Qjb5XSWi#GE'%I^3u&9jiJ*IcK`U:%6+as%lO?aV2r"lE7[[,4"G3sV)%oKZ,8l[;blBe9V%;d8%N[Uge9^'.3admM`^g4)UBrrjN*!(A3[KtSOrrpL*iIKKK"O<0I6g?[aQOp1Epj85(EF9:=LT]a+4>OT>%G04#SYCu['ch6.S>WfQBNg2dTJn3aMmma+c\aY'/%.'jQbY]/)SZJT`!nb4BpZ:Y$TVjf7gfL/)u:Agj3kN2ndDO]<85V9`o5V]sW:n`nA5CXR-CH0ed`DjY<Z<OXhS@ade$=>]CffM<jF$lSMa_8A'ak5<$$uVAtUHrm5Ut&=14B5tJ`-9n.;+F*TZGA/]M5PmOfU[Yl%!f\&P=CE<30(`#(dOTeG5J/tkE>\:mdRqEnUR4Z1lZXV.n$o1dd&!H4h#K%`3,8(j8i'2J<;D;fJfV*9j[+$WKg(B,+$+YKkXajTj"5]_+Z`U/[]VcL[$GXPC9HfW<r7e-nPf>+EfrrUSd4h[)FbHO@;>'.qemZ-UDB0D8ON8lWe'M(Ccrjs<XF)S>Uu(/K0FNSNTg!^"bX>PJVl;Ha[no94]`l*mOb!7;'NHPkN&Q.Za+9Wa+,BB,^7$A4#$,#$<q/ni+k\)MRO4M=c$d1U@*J$ORn2IIZ\mB!1n!`^&<&2u%g#F'F:aT=Z.!7]2&QK@1h1&L?m&/2&/$$J]!p'BNG$KrZA1[fX@\D4"F^2W<KG)jB!KRg6&Al7k4.GK1L<l+j88(O5F`koEet9%o_@P56Pc$`*[XRd?70r4B,gjB&OBO;:RpqE$eIB]!We]_@mFUh:<+;oj6iT70oZ`6%3?2^pr."f(8)lI/HJ.>j?%=4NJAPRbeD;b"`-gY$!G(a\kdb_1Pc;oRCUS*1.Jte!_r5MaM\,\fijMdbc?/q/_ZGjbg_LWpG/l,=M(CsaC[*u.OZ'42FXTFfj\(fR7Y(!MIdNu+8%*3Q;u_F@>dR>EEnmR7-&TK.LX[E+=dP!\msPs#c[A*c?^lH749e"&m\q?JEa<0HPrMZ;86lfbQIFid[J0SqnQGQ?Np(7_CG.JAZq"C5.[>'$1=2fLT7JAS"r&IR]j#d$+DE@75;rtFek&'BcU68Y\G2VUFRB,e97,)*NKU!WTa')PU-;#q=:N;MK^8>UVLigIIpqoB^$YoYS?X5?!H'`6RGdJ)!+QC@;Q8&h5-D<2o_c=eeen'NEEYR(Hdd_U\.,A=&i;Jh2Pr%LiaoIh0_oVoIfNV-pI\S9HHU*n'=bf);.\<g&T(U[lm'IUu@Q-?Q?ERKi;mWN7q+n<GnELQc%9J_mefaAGG-@&!t10T8/3_ce%XBrkjfm@6&,//*sc+_LR?q86F]4js%0>dH@Q9s8#^"M593N1md]F6Z]4h\4#V/E/@Qfi"E$U_.CCPoAgNWaUVQ*M<6R&*aI^sICR3Eqf%Bjp>N;Yq3c8[Ugs]_@Io?<;L!/;e+_f6VsM;I:>(EG?KF[taaW33mtFC[,s-';;7kP@9-&=tM:;4X&uY*6,u3-Kb?j:C\m?R0_/lUFBoe,IZ,Fb2:l,kZJ.a6r_.9b=o3<c-JDc7upk6\4,Wn&3%jH#1*^o"@4c&G>I\)HC&eI0fkY+LT*e?.ugfL)RY:O<n3R7X\_g.^KVXJ%h4/Y<OfJip_YB1b82-RAWV:cNCHAf!gPi@ZY-8,6,c.q>47;F8\mWf`&r?l*tnXq?>_Jp\*")oEU?e.YKVujd<c0'qc0+52a8E[WuogPRSk?R-(gA8*Oq]Mi]$-Ao<'T2bb!0.Ke"1G1r\G~>endstream
|
||||||
|
endobj
|
||||||
|
17 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1999
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb!#^?!$&E&:N_CbY(ab4k+-jfp3_hO9Jfq=U=oC3?45"RQ\T_:8$?k?ce>CJfQ?T]]CDda<P%tl&ISFfa(9$0`=/'!rP68rQbbj@<`;2*=9V^(^tWfhSEbtf5nTT#7-oZ%L-74n'bkrn@:%Od!n4CU].<]#WO(?40c>W/!()YV#gh8$%4sgqi;ZFI$SmVYGk,!YU;MPp!ndH/FAM$ZL"khHd#jif)oQ"fgcA%2nKHUZ.#I)>m8p[Ec_9onH037_sjE%rMi(.Yk"?8,:DNp<b)o9K?-"eRC=Ckl0of<,I:E]0"<-kZ9^s`$2S[]E'60@h1NP_mD\2FqV,Bg4rp5cSF_0CQT)OG?GZTj*]iNU5\fKQ'GmnP7qBo2]*E7s%uJO#PqU6co&g>pHb]1eh(;()>LMF]]TNJ8iKQ0,$_QbghU!S=PtU[3>a":nFH7+Wfd"&^m?'5M$]h(a>BhD&fYSjpJ`!@q&flYnOco-o6+94Ecn50XKPTP,,[:^qm)"1Cc:IPd<F7SuJ*<Nn4-"pZH[3!Y#l#cA4rI$;97J&B8ma#&;.D!]V4H-GXLN)H[+q>gkDD]pEe@,I.gB;%%6=m"(j%2_kR3eg)\,<1C^L?h*7WW!6H/AnbgB=8?7>32H^VbgHVp^M%[3;;knrK8h#;H8rB-\?6q#r]<sbX7Es3nJ$<hCZHJbH&7rWSCrl(!@pSIaZIlGh`',7DJW71j$!uKo`1l(;8+pfV)rSLP@^uF7LW-+gKHRA"SG!n+)=_6X1V;6m)[YlVQWbmQ>:;E-p':6nM<L353BUP4@V\s(K;dJ9fl%)K\FDJHLeDh&!88I_A55rEa:>djfeAD#tHC#=_<-7R79'uTLrJaBr4ukSDgb)[PmX>dP_"RPs^_IgK%8I.@KCe'PEbY")9P@ofB-%US3K6#-r3dWYi(RforA\^a)/Ud?hF&UK2'L;I>I@#@\mekb,[!X!ADJETY=1@A(C""MT<aEI]G;c<*[HI3Z2la$MF,U^2&8d0F'K.OelX2?fZYj^)iLKo#ChHVV`DC``d2@QLNjTt$e4J<eAR'k\87JFQ0[FS2P3d>A.CQ1oB/NrDa(u'7d(][(r=9)KP8(j3C<M*g^'5uQdO2i15d0_NgJ;E.SnI`!d#a&0^ouNk`TKG*(LPd8Yhgms'"7hZff23A<#R(4GlW@R)Uh+e3(`Z4?%Z-ZdJA$MAK%^n;'?pB[,V<Q:3dZllrY@kCV7$3O9+*>W(A<O1QG>=]uqh&or%hCWP/`YHDBrk+:.dS,:`]5])'G;U@`qP(#=[Xfp0X;:=DtOnM?1Raf&e7--+R/f">S=mF_gQ0Uss$]4)6dIc[CdZ1MtV.Jkgi=Eih+'OH,Onn=5ec'*3H_gA]Dp2tdjljKH+'K%fc3jtrBZR@i&c*Y9.3jr^A&$BePGC)I046UU\*n?0iFr#RO/bh2LrcXDD]p*[9#.p_NDjtHSD<?S`8i*XlHre?;3-OgLO(d,>H,YVl<W,h3Z<JEQEAYrL5`/`nQY3HUS7ls2l$W2UZ4/:M82Q)f:M7DiXm-7Qul<g*[Vniau5FnC#SaKphCK4Lb[[O4<eefimF]@,p"YVR[KL1HI5uA,[6/X>I$RamR+XZT<'.e_O?n%JU"li.TGIm`;BA@$IZfXVpT1DN;!k-dQ%ieJq\rtm(u(V,'"bDd\puW+Z4,IJk8(-9Z"hfl"EdnCs\#!9+Uo@,*QlPkOaubHjShehCcaA-s:W,>j0eo!R(@#?hke(=/]9F(#2SoRqYB.^d9qg_U='Q6mgZZMNL6^b@D*<-YKmAd9<e8dsO+.&XdGmj[dfG&*]:fE0=>!R_?tVpEJ?rWRgT]hE6Oo^AGl#T?`c<S"Iu-J]pL)l8*Q_0mRo*=#%h.8QJOX<sj369`SMg&$O?q3Xr1;^cDq+d(h[OPgt!I>$jh93Xr1;W3`FaW,nn6W&(B4_b+;-pZdiQP9bR[/h`HHE'MF64gjI,dbao)6Z16,Fb$%_!0C(FnG~>endstream
|
||||||
|
endobj
|
||||||
|
18 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1645
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb"/)9lo#Z&A@sBoPNtp,3DO*LE'hJgMDGFL"P)](Br!B>Tb"3SG`;U&KhW8#Oc?Y/T509_pG1Hf2"1scRU[lrkQMQkoAV:K[(;:9H\]_bVTN4+2%+0gDSkl1l,br`5Z1'=MqRUoBWnh_h\gWBTunq^Srr?QqW:siu.TJb:ku1Euoo5VF:b`"?>!jE#340V^mRQjNAsn@7#bVd;usj:hHlg3Ej;u,0Q-oGlck;KHC>u48u12`ooTC#4(/6/8U:LK2k/["Vg]H1k3eY3h&qdB3R>54>0`.R!t%/Xl:oD%Jk&K0@;=W/c!U)P!#0Z@RA(uJRps'B%'c=LsH_Pn76Y53/_2thTWM@R%.O@N8PjNUY4]pHUD\8'sC#Cob0#.-bTDlORg,Y4YjV76t(?-!nFDSdHSXt3&B6:E8)X!j$@P2?mZ+e>DV!$"A_H[b(*VsZRjj_:OFTB@sIdaSVkI2%Q<V7*:]!`jC=ddKk*:bjLAi'S(BC@Uc-]%B2kAP&^PW;U(t^\D,s1)lGmfbQ+D>88J6[UQuMi5?HH[@mVV!!al9?lWYTi)oOX>!=Zhbor*]&iimM[_r+^1%G(bF7/-`T@o6Y[k&%]M9Ja9g)6iR-X,@V4M!S*0M?I:N*`1D3ZCeTg.$A(>VFnio['F6a$ZsoX=h:NRE(BQ>"="<8D>>upWk:q]$N8bq!;]6q_(ck'![f4(e3"3SP8`AN;(>(2QT9.He_iM`ccAESCT+V:Eb>B+82<^(:*VQ2m6/R5X][<\@WT8l';B,l*30HW?:^VaiH@FKcqRf(QK:]92(a;s8YAXUk1OO!.ri.\;E^2=%0dRe@_hP:V(G&Q>"Y[M;?)Sr9%RiYj?B]E^;)TT:QE.aKl!eqqkn`*(<",5d+p[0V#b%u,8ejR1,Y?E0:SLuj2WOidhCuN?GnV_s0+gFk9c*%N?KR75X;h_h)hgm"e]fP.T3/SCfZ?Q\6KG@!?6)G:#8S8%RUjMaD14='!AKRt1f*-'o4"!S\t8L_r,]G?+^4!N=M.PBAu'2-99MTM2d!8Q`_/`)_Yre#<J:.<s#loeeqT9=kMZ21U[YtH.d"?QW>Nog<1)%H!EIuGHP?.N]])Iq*W%0IgmWnhZ"F]edUZ>tMIC3S8B&N&V284C&]<$b.PSfF1ncB-["Ddg:tRi@Ad*gtK:l9WkW8dO&teTGY=@CRkN-]s6j/0`Y\!Or2'n7H-PFT$<ip.j14i`(X;/l]Tr]!OrXGRFO;5ndDM>Be:hCdTAY^'`i-[p%*C8R%Bb1KoGi3E"ZD%:17ZK]bgV2/.T]^Cf-g.cs4@K$=C1j6Z?eftDePP:dU$K6J]jMh)i4*[.lhR7+kF@,KW#Q%/>k>KToKIlq3j$D&!^VR!R*aKibttIGD)=.-5dhehg/MXGC,NI"OiF8C_n9oI:%:\uru.Bde^8,JXiAq,CqlL[L@#XgD!']C'P]J5'#e'3[T6BhSZ3sg`@=lQ,Vbfi<K_0.eVZt>+<#Y'auk6P,hE*uPEb.fo3-B"77jWo<[]B<!=0*k_"!22pSZGX=in(f$ABZa!+KgCkC'jd[7:]37K[J36J!nkSkc(2TOOljZ3h,H5reqo^i^[FgRIZ(FJS4THhU9`Q[O*I9tUCr>2*mTldcisrW;#Qp!`~>endstream
|
||||||
|
endobj
|
||||||
|
19 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1482
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb"/ihfGM_&BE],/,JXV[q]o/(^B,2+'^)u=&BW_qlo1?kE-H-`B#`#pZLEBrWj?G2T'(o]HbFXTp_eVcAuj,,m'2^bl>tT!1tM"?6CAEkT5gg%&.P,UWsr%gg0/`M[M!G\;M+0/n@1\[Y.9o-9rV4F&<uA@LEP/LJFlG&J(7aQKJPb5,&;J)"'UZVs:\%7ZaWCC)jjmeuutJr7\g7033NIMfSXR_XUKHb/L48jkA-!b&S'e:.tlHhea`'%$DTjANi?_+7FOIq.fkTG;-EFb[u.\4[b>BI8Ko]jbr10p(?6)#gd,ukK"PFEcgasHFSu1(me<JOJKuFR4XlmTGN,1>[gM5a440up2-+5@(o7rnTn\&'gjVaQQmC__\TgmgaD?&!Rl7.\PC5`,+cMe.YqC^L1^`[SKRLJ@\.,P.W)2;?3&/OP&?FBrNplCjNb;=4fprFWt]/ARrth31HB*T2R@<n#(p<nSMuP+MG=GBHb"1rX*d-T/8loTd4r<#=>p)Fk9pDT?1qR>SNLsa=NYSr4PNH\5Rs^B,q""p;A\lY8*8rc6+6IkR?7j]g"IBUeh%_LlYualh=iiumVVVs+WMEti,0'Wm:HFUQS(rG9,AkZ+Y*P^U*EH;N)Q''0?/fca,!@f`KdgQZ6Wbopp(F=CKHJG;;K1['m11t.uT`l*C@$:<iN.@7"%LYSk_k3]Y5^[VGi^&rILuM]$d\M>[;]B**64121DTAc][2N9!_8!j0^7'X_d-<B"op\/;oj7\nRa.Zsr6+#G^4#iks]@?J+`>YJqfN$'sddf\%Us+B*RZ;'rcldca+cSM$).m*$W6TR1+6lr33=SY=gN#jihu4Ul._SmF$uLnP3#nR$97))VM8$-^g+VNeZRaY:M@8W-j>.:[<!C3%Ghf=8-<N$,KE#lVgd7DX3o(Z-JH7_VH&R+;qk+>bI)Ad$m9cl;eu^k^b_^CS6=[0=rg3"C;ergcW;W93]un=YnK=n;*]Yu5n!+:aN3)$7//EUD7H(Y%.kPqMBI^+q!l?51m1,#P)E_K?9Edc.,'"C<jr<6cF9)&D91nWI<H>.iAEV:0Z\iJ@W&;9^#>Zis@R(KLX;U*G@NMC'lN+]66G_CGV]1?%d2.#XG%P\M75XRpd;o3e;h0N@W`g"9WaPAJJ:hM@/:a/)H5)agN7@kAX8fiZG;IKCH5CeqQIbJkrGg"8)"F':J&Z1]%[$N#c/;&JAAlm<]BIP;[ioLF@TkstQL*0(8QkdSo4m8U7O6=^NW#_LF4?nd.iET#$0^_c=C4?JG;hN`S3*8gc7T95gN[9`U0a@2$5pA!u)TjMkg->8=`>'tMkr>VM)jh1,O@56%LT,HKAc5iN+B(c:uXe([kT=+Hq`Ffq\9GVYeK?o3TO3b8laS22H_Ir%a?hAM^U\$u.KK"W=rsJIo'a/PooR_"3?N+C&U31h&CTu"J;UNU7F.70>mjB*Q2K>/<I\#Kd$_>$5/YbQU~>endstream
|
||||||
|
endobj
|
||||||
|
20 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1477
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb"/)d;GFE'Rf^Wgp_-q(,H%$bX3GM9c[8B'#7CFq8MYG&Wq^R`pN3WmfhG_>dC`S<*EAA8auL1G7KBi1Hn;?;"6uss6CJO%l'#-&g.nJ7j,C;6gT@;O8^&[j-^*M(oJA2E39bt3;17o_G+e/*:V$kPMjhd2,7TS1s1])Q3t2l'[,JO]I+K]&pV(*UrDYA%\mn(FCj%rm`^oPA6,hXbe3VS3YIpaf@e5\ZsH^%?ENlMRnU1qP!U&cQuI>h:1Z^fYf_9bhc']q]4N$55_m8GTbj[X$Z"t&XK#He2q*+UC'N@pr_VH<r!`*iOn\raC>&,61jO4W@d4;16l/>.#QahZZQn'&hjH)ZcZ[4sXZNfd93AkedS1m<Tfe@R&3.6r^ph#Q+qEG]%H_UO#-m46KD3[H$"m$"4tI]CS=($O1's^\"RbX%Y8DmHbjM4^]SQY4bU4l/#`P.:9O=r6"aScIl`D^9`)%R*.R0)j8L0"*,&$?9HFs&q4>#hE?^6Vb]SHUa%g7;_0ngB3X:@e-FJ#]oIG#/6+F1g@6H`]O_WpG:gV\?,XcqSTp\HCp6h3Xm";fSo*n+r5J`W@AeuJSR8X=;l&gE'a.<6<"646pVA(PFdDR7&6L]Ma'V:e%,ZJ/0bXREW*G.4^PZJQt;15eS7;>lsG0Qm=]_=XlBaieBQ`:*Kq4Ar7*+W&1<2GuC,]DS\1_@%?:b6B0gV#&qQ"KKI%Xu6CFO,HqCktt!CH3g!?#^&j)KZu!"Ei'npAedYW;@d4-']KQ9r!^GY?nfn<N!9@D$p\TeYLSAGNd_n:0^E[J$OBbm7)VH8F,mXu:C>Q-lO&iSfKdiZ;.AI=MU&0")rFTu4]DU(Mm&Jd2UBi_#Jk5.CX;)Xdir]fm0D](e[e0t,sif?GDjgL`-#/DG.HGQgb,bA1:PHoB'+8Vh3#6RDDr3;MsHD9m;fh$[p<6_g)dQ]2C1[/Vh:.GPNI/]P%=IhS!FV?M<E/W\N'Q4%O^u2/ssi;b#P^[I'lajaGWdQ))p"#e;0e@`gDiBG%OPp(k:$RnKg'F1!o9C".jh]PaRiimf/NE\r2`$P26OE$inaaQ0#6Ge:\fM!0Kjq[2N<a%2YsFnJ.EPn0&5&P<0#$"\]_O+"[=trXL.,*UGChb2`c^*4U%Fd!:D*71_jH9#7'2K-*(EL[7HlZ\Sh+lO623I?j+(JIn[hNn4:8eNU&+1I<cUVh=$[">Y4-P,HHFHX2f4aRsmcOpN#-Y$]K>C0a>ZbiC74Mje-S1csKoK.V71Z/$1r-Rt(9HAL)K,2P/8\2Cd.*Nn(PfiMH8NVjdJ9NNl+Wts=2/57qD(gOD`2&ff,_);,)\n5Jlbpi]/]5Z$E_)3_bI8[i?d3h/G3h[eK$+amGXRaZ$_)qP^F\MIdWB3SCaS=\a*D%u6'u.5<Ja&I\G\=qC@Vl)j:RLHkcm2DOlZ^]$'/DO\^RTp'm:!998%WX\%7^@!P0lrX~>endstream
|
||||||
|
endobj
|
||||||
|
21 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1575
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb"/i?$#9h&;KZL'mnQ&1Tg2iZ><h-_DP(TLB''SR<Bo9PWB[;#u!):Zp2;<+3%c[P,q+$["K]`/5,m:SX&Pi`X&aDi9L@');rODg(t%9+M.m>%Yq+j8_3aOKpsk%F+e':+V93W;FiZ?FZ\fe#(kkio[Q6_$Pm\'((VuS-^J2j`6Tn9"*@TfQk")dR2<h!?bkST#*/HbZ:Du"lbGIEZO?2Z9lM26i%e\(=$^C?Gb@IGd.J[5_.PeU(ViC[_GH!V",=&$iVp0P<.D@>Yd!Pc6SkdD3&EFke)*>F#.u_6F),FNS2)l^lit$82rnC'!f@eCm:@4-HF;@HaGKbOA4$4tYlDD^A=^<j/p#:6!R/GU7WMW2mcQfAk<Dup3D5[u?_=2aO[&$8j^.MiX.e;+pgS3-0TH^cW>ac&\)4m09q_)`Pf?RJ2<aKXBk.Wu'N(Fk1,#<1o6bqUIpFn>L8KRm2I`/d-t&mEIGl(BGK^km%W`bsE')LBQRI:)<C@?XZsf4!R5_O9-pS%TcO.0l/:^(/JGjo1OXWR]9!BK&jAP<iC$Z1$6!rM:ii![Np7RU707kk!B[famHGaIRV"VG]W'IJe)@9QFEi%O*8E.ij;a[!AZ(hj%*9c0),D]`p%^IVJHg"cHHg9oP9eIFIBA-Jtp_&SG;Z0`_NbmFl,fS?XX6\28[3.-+7ZH6##sjMID2<'%`$JZX^*)YEUjZD,PIW8DBI^A<l3=gT-+%?C,i*a?a^i-\XkhD#;N+\:VS4l!@aU6eF:1rk!Ro_D3?:=AomnI*nl#!L)ma]rr,"Q#_IPj"jGRU0rL'P#ne1JKgZ]"3VmGn,gmp%H3cQ75o".[l%A@L@C^;9Q@&qO]1+fBp=nCffMLam[FLI_%Zh'g>I_JdBmH62&\m4=Z2KOSZM1(j/d-4l?o;-Ga=PH@=j?KWYa-IBVXP!DF03aGAJ!;eMGuqN@jqE\S?#I'f2%I6`'.]un0Ti4UeLoB']?hOO]/Z7$<4[1XljC8MV4(s32nO=2M]%k]Rq7q%.+HLYQS\ifS\Dn$([TZIL&uiP^batsQ1/DXD/co^f?'^4P`;fO2g[B^6top&7m^qH@?ee0\"GSH0T0@1JhaQs`gBjXX<gPqAeqf$l%ILah'`_([pZfrNM\uT%\&L[0't[71-6_[GV(DO<-a5*S$G147MB0;0q4H<+;HmpTbpLTjV@D"!8'Nq_ZqPim1Z>%Do;l.;jNck#N\jTH@S5"WLXnS/lgF78BFV3lGTNZbG@=RU?Lb*\5[b5$XB\eO[]]_I&[_qBd+E4<a^o&d[CNK&gjmsm/P##2U9%XV3lHP0#db+>Y7O-47ln!V,!!4,;L<L<FhBb&2bI%FX^dJA/Y1S<Og[N7XA@_(#+l>?g(XG68S_[46#R(Zs(Ws(nq?#Eu2!.)(+UP(QH#Jk(TdC3Z)F*B(M9:=qtW](srJ^Sd/tm-2jo,kc:iM2XU3Tg-VnLD=]!@%V2ifR=;Wc8"8$a[6V)kP%Z%?QJgJ[pO@>E#Z.LWOS>mc/Q*lmr0h3f[Z^,uWiL:0[l[JpqsBHC.3efhA_P^gFdWH9^Ap#5pLj~>endstream
|
||||||
|
endobj
|
||||||
|
22 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1164
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb"/'9lldX&A@sBm&a![_-.ub3okgJPIM8fNK%Rsn:eG!6RKfO+DlUW([q[>1i<FPSTGd50[`S:o<Ye74Tn4j(B9^OJ:S70$O#PKhZ4'OJ:A"q^\>-kRus!nUuD`tB"!7_.[ik96eU6-$Ks*rNHBB3WAl0t]pRs8*/&s!j!Y.-d=EQr]6BJq^G\G1d59oT?;hoi9>+&F\YL;d%du6Ri.-GY:r%Q(5_<Qc5-oe1\"&+5/r?u9_.+e3gWQW8"Q+ejKB5.#L.Q!IJH#WK]0-$D?*'F."b=>kJ@7/-7%oH)=Qg_e\IBFRdO!p+MM"E$]M00=`U4hc`CX9#oWSlMW^B*4l@:iA&o\_bd5l0gJf]GB&B.cd`b.5+&ab]srKNg<n<>6X=dQ0X#FbNA9&Y.S/lta47A9ro\QgLh%N_/gs$2&E4i>rLEH%OVp'_VK(NkPMW[rga0VaY6:!3?WNEqq%qq8-A7Pp1(qH4,$CE&ob=U@o?)k^YB#uIZ2TQEf'EWj"ok"3%o:VQWsq*kji@o_Uj))\?tRiF$F1kaquY^RabQXk/&<o"2M1l]?TDD"'`r,?^8BTWiZcm!?c.SWVo3&V,eOj'aB[H9`7Qqh7=>X20M-n+XNOAON0U!I@PN?>Nn\G<Pj8D`JFKj*?qf7IL+FT/#M;+m"*=n)5A9%._o``[XGd)+^HO!^XVq%1j/\5U`HY&5RlC*_7AaWLsi89:bX+FS!!N?/F=oo\u_Z@i9Fs2(kV(Yk1C5^ah1B03Fe0%&'F[/1F20FNA`D/%K&?s4,[.4dHf+XItU?'6B`XTeD1o#4&pYP$)L-A&L^[&sW)l"oDkB/#cZ$pEKm%hm9C;u#:2#K&0.&m@e]o4`D*komQK>_"p*La$d*]9D3#\<p'1-JnEW*X(oL^RDa+W-HQ70HM4.Cdf5n4Re;RSC,'Go1s/aoRJX9':]^=mT=Y!]V&:[c$;mtjgls?oM?6t?qEtW[99msD"NW1@2^tn4C66i*ft"GZsgr)Wf4K"&B.K^[6F`X!U+dG]P\Obj,NX+?)3K^a+"oi+*<X:WM_E@P&^r*@bp+i,IUJ654&S5gJ??f\HPk?@Dt3(Flu:U'i0\:9r1"+gr$(FjPIMkXc$pbls\uS6oDn50N]>"gVZiF'^G/AB3St@rsX3<!FE?TNW~>endstream
|
||||||
|
endobj
|
||||||
|
23 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1031
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
GatU2gN(as&:O"Km.@,''P#7O`%\hX:bKY^cobp;UWQ1Q7^cQ-9_j$98n'2_+X,m6N9sp>ffeLh$@rmE&q>0/n8\k3cNt-idlELPa^P#H?;HW"NlX8fUe+_:MSQ_I$)u&S^Vb"W;LBUKA<[f'1<E0Mc3l=a,HOH@Qia,o6;Se-KU;mm;453Im=YWjpp-/D?J&2DIY6m[!<*/*q\mP*DdXN<`9+rs<Id^%AJQtgOms8trQn(DN]u`SQ5-A3i13iqiWFaEl_JZW&_qaMD>'c,cY-?a5N,63HA=\j19'h,p3D,hV*i,9K3ZJm.+sLFjtC&3Dj%HW]2dh;N#(O2jE1I6H;8%h('8(mR\oT>in`sCh]f?AXcmhJR?P2cpS/Bu$g9q14\LW9B,H\@hHta2[.!2%>1$TU!;u\Z$akV1A.n>Pe?5n$+lNt!8@?3WfU;uSBXJ-N`;;,$O"Wl]S+['OPGP^YF:A,Zig/o-;o-LL*2@&r8onZJlRb'DTlS#dn[[^R!DTLjUF%IJ_0*qTENr.2Z:E:rIn&[I6dho;1+RlA(OPI28f5.T!Wtj]DaqoARH/Yi(Ij>)ODm1S?NV5T[3!sl@GoDb9:3ngWGQ[X`*"@s<O>i/QhCc3ECMJ;bmWq#^4,s5oHN/8<]Z(5cNB7@%dCT/)"#4=\>j*R0K'@=576^Zlg?14!bC.*1#W#V4?X'Gr/s/<`X:0bZgK#dOXF]1([YqIM'"AK]=[r8NN9%:lYB/eNYudKfmu2q6uWt:s'E!En)8(J944_T'J_"YU9.SI+:Qa@=s#n>oWYsP7d<C2)XI+@8271k.hjn;Ya&BrMk7;^dp:V$,cS*>_sF5[:&NpZj=<T?Q#*8.O"MM4!XgtIcGl1Z%rCn0NQ:jo'5,/9k!q+qDNOc-^!4BfFbDKc5rl&jR5`BRE`,"ZD_\4Ln\^D^UN)<5DFOl8m[aNFC[?LmqLg.;<7j8qY!'K-qartKi%a/]b.S,oa8Bd._d'K_r)9jU<A5@Y2;J`N'U'`_Z](t6J>8a1H?ud~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 24
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000073 00000 n
|
||||||
|
0000000124 00000 n
|
||||||
|
0000000231 00000 n
|
||||||
|
0000000343 00000 n
|
||||||
|
0000000548 00000 n
|
||||||
|
0000000753 00000 n
|
||||||
|
0000000830 00000 n
|
||||||
|
0000001035 00000 n
|
||||||
|
0000001240 00000 n
|
||||||
|
0000001445 00000 n
|
||||||
|
0000001651 00000 n
|
||||||
|
0000001857 00000 n
|
||||||
|
0000002063 00000 n
|
||||||
|
0000002133 00000 n
|
||||||
|
0000002450 00000 n
|
||||||
|
0000002555 00000 n
|
||||||
|
0000004536 00000 n
|
||||||
|
0000006627 00000 n
|
||||||
|
0000008364 00000 n
|
||||||
|
0000009938 00000 n
|
||||||
|
0000011507 00000 n
|
||||||
|
0000013174 00000 n
|
||||||
|
0000014430 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<8b5ac18869754bc73be1f4958d9d786f><8b5ac18869754bc73be1f4958d9d786f>]
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
|
||||||
|
/Info 14 0 R
|
||||||
|
/Root 13 0 R
|
||||||
|
/Size 24
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
15553
|
||||||
|
%%EOF
|
||||||
213
output/rapport_timing.pdf
Normal file
213
output/rapport_timing.pdf
Normal file
@@ -0,0 +1,213 @@
|
|||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R /F3 4 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica-BoldOblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 16 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 15 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 17 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 15 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 18 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 15 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 19 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 15 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 20 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 15 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 21 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 15 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 22 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 15 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
12 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 23 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 15 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
13 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 15 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
14 0 obj
|
||||||
|
<<
|
||||||
|
/Author (\(anonymous\)) /CreationDate (D:20260421112058+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260421112058+02'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
15 0 obj
|
||||||
|
<<
|
||||||
|
/Count 8 /Kids [ 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
16 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2001
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb!#]gNM:1'Rf-po[^Bb`K?0u2K-:U:-),''%3\Z`?N.?d(quW9W*A)OtFiiYq4gI_?s[m[*RU?SW+cuWs:)G*t!\XNR5X7JdA$s,9e[IB_2H;7_Rt+0p)MMO[2Huj>%mHaAbCSN6CAV;bnPJ$`^cS$4mb?2'@F(,EMmudo<`9VW_hU=fn"U/XjDB/10uGRiG.D[*=NZ#2K;No_^4Hd.;bLIA$N;r*d=p9ja[C:GdBMc@%+[o=K=UEMZg&/$6;oPa0rqWb7sl-moE$[+8#dSg,?oQsB[rJaOpbI7YN"T;OQG/f*5N6-q:Xs1+J8X?InCs)n+9[jVgq`'foeBr5Ied7k/n+A$iN2101iaKQ*ZN<6RF7a#42b@)6&nXEf]Nks1lGs@]%j[te+#f7.n_F^(*$(PQt9c,0UU-q3Jf*&HSP,d'LBu1aakSt;A*'M%#,oOl[+TJ;+,$MUWeZ0a6$p,LG%Y2Mg_m\n&:ttYbJ[VWN5U1$d%1hlq<tjl##bcuUl8<R)V'gc)SiuO_BC;<e8@*sUf(A_lRHM2i'C7?^]q+j@/#tA,Qc8p74;+O7c"<9F2e]gpbdQVbN:AS=KXM,c#h[J/RQT[]`H(:Hn5aY[=/J9*>Xa%mQ%qk9_5]>qnpcp\L[AogLa=bej=a17-3B&.9(t(UbMW,)Oe[h\fHPT7Io^M(bTVQuoUnVcR*I5j_OJXcXOh47Qmp*d;f"MR&?)"lGOso`3O&uJFEb0bCi_G*'l"W"N[0-GJuX)qQE+$"T'fFh5a1Rn?`4Yg>6NfU]/$#%W^+qWY0)iF<B]VgZY4Nl^=4IG<fXc-rtmhK:.P@U+1,pLE130O`1/1DS%raTIM6UfHoVZCT7]MIBAa?jo@ro!dVA,kZb<=1ILfF[QDo'W%i/4nE8>tJD>d;&X-;4AD526sFq*u8,*pP7)E#=+Z?'S@TOUga#W"ed7PW*+=T+@m21:G8FQL?-X@X`BPA4Ck^",VM)4%/l.(*oGe16G8-AF&oNm--)aNE%%O`@G)#]eKGe,u#=WZnsc<MkOE>;aAhU/e!r_#^C+$I0B:W>Bl/hs\#Q8Z9g^YVT+=84fVrcu/_#ZZAsCE1b38JUP%G0$89OS<("q8Mj+bT*C*8iQ'>Bm^^:JS4(IaAHes#j%.Pf>WDW331^"'HQWIo,`YMn\<FW`6F3e?GB`cRci%U++:j*Lgg"C<TeUmt/?:3[Bd=*&3Jr@2*:#;J.`3reS39PPR_ls%(cYFOoXOQ:Lr1HJ9Fp/kT]A`^)<&B0lhsRMD%Q26Bn=$<LSs2k0ZW:XQHWRn'H_M;DI/k?-^*\:Osrr!:5o-Qm3HE5,ZVBu9prRTbXpO(J<P)*3o$a<l(6!"a(-s_A2;29$K#A$a(5$mE'klA=C_jIl#Ddo"n",'%0>bUVbVP&H^u-A<:a,$cha@WUS.JeMA&[n%,+K"W=:iP%[UrqocE>;9q_@RU/TSp&2;?/:]dTrojL1@IM6^#STeJq%@60kg?hiUC:h+K5hitO(MLFgg9\;[+m,S^l5O#:M_eYtP,<!&J#-["iT8>'-@#00'aQ.#RK*R?p9LFnfs=/r7'/?3F;mVcA5JjEP[`m!\_0`dSf?J"/(?QnR5?TC1(6)1j5p/"\#rU&P69D<B^i5'b5oaisR"dOXH/)CI`rsl86jkGGR7$e?F6C7(,+Ju1G/P&j-%1_\:`.S9]_-(&%n7M1clg8Y=p%J7Uk5Fdie1Jpg,<R<tL?bBG,0F_<km[11Sl<)8`3G+\)`[UJ\/JV5DT:RgKA.K#DKWB(ff/^[e2<p'KN>:AB7n)8#PEQ-&S3l)>**Ye>[:ZsaZ-MbCLsqUBTZG+2A-?<\cHQ"g#.m]Ag0WZUUA0pR&mmJ^'B.ucg#WdSZC>Jj05#+f%Pg`;Ra'?JH9Q\^UIDUb\WRZlALBU8Qe&l]"*:I["?B!fdb6MIF5E#cDinQmIm8l&"5L-'2dJtOI;:V+a(SAFg&:PV(h8q4+8VH^&J';+F9F~>endstream
|
||||||
|
endobj
|
||||||
|
17 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1684
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb"/(>uTK;'Re<2cm.odWkN'97YBs&$_\$,:X!@T1be/,@"Xm8rqhtqY%>YZ@deL(lt/#7R!WpsYB4WP*%3#n7C1l1CP:QbkhR[VPbIjf;1Sn.cVP=:rYX#aW>JYZ$RsLr@N)8nN&+n*Kf=3#_a&d;UNgV]3MJ>X9^*$>5)^)?!IjlkqZb$s;#E5Bij3o1dqF=8V9Aq=KJa2K[1\q&k.@&V+WV@'84\c;i#Ecc!,\%cp8oK4?R7$AD&=A$@X_o4L+kFFB-sa'H'lM#6>ONN[42]jCb<!5b?JcQX[HreG%\KMALPV\M%u"a[@8uU3c2BZPA;f8D_Hst>t&6b#;],[el2_V,>9*jEQCgRjG9c[.[tP9\X8[WGtqEOK@20&f@/[=Lsg`d8=D3Rb9gMZ,t]5B`VjgR8d,r:9DR?r$(a9c%R)K4QHqu(>7<Ti:_9UTdo0sT^\fn@/67W'FFA,ulh-`5Gnc43=!"'DdTG<g4Q]j'BI+!<eggclpJee15FDYg/g$8,mHS;GX<%W>BL,/?,j<hjMHY:9qf+DKLOtDcL$G"Wa?(j)CmH`D6!I/>OC$DA]Q)fc5Mfpf+BUU6mXh=ngj.'_-]-OO-+\A)^YJ"uKRl_UI)K@(oDno)I_Le\^pGdkN9:$(_[(>U*KKH.oup2bn'P\^,'JLdr_+l9"`Y*Ma1WK#.^J\?[mT9j6KT]*6fo"Jk.J,ijq:"V?4X$`#]!Rr<>)m/K<A+6[1$T2!3aYnXm,/XQ]j5&o)20ZJ;\H-4u\-2kW<JmRUfTu_Q+\"'EC5sOJ8uEVYk[6(9;fSPhcF3IMF90[cYGcn;oAX=eM.J#]l8[n0fb+MNF2k[C:%)<RWelEiP&*?!YuOgU0usBtL`e8DHs2nY@ihlFOr'HG\Y+e>tkT!+kjgPNET>rp.Z,VEoa#A/9@:E<*h]7WWBlNEa:Ea*CMl8\\DI::)n>10Gk[2-AIp[!O5g?-lEo1'$fc1B&Sgc_Br01cal.Nf'>jH^4Z);E1=G3^=d:GN<QMmfL?g<<4eWC4%`V8$htMSm4tP?R@-tGC;0V.1s#2"6;=Lg/B)$1DR<>oqtXl"cdqe"Q3k`n`":A5<k`G?&iQ]\@Xd=7Z"<2JF65T?p3TXNa$Yi<d=\(cD'oD)ILcSc(_6lT"TbRPkh<]-u[84Xl9?GmS-a=\C+:l!;#&04uo6/kA9R"l*;oY7CfTSJ;V]T(I1(M\H8IP[p2R+e5qpl\J7a_COV8t^<bM*Z8A-u-=<P8)XfPCkE\cs)@q?.NVCof0#<G4bYfiBWk<$gZAhMpjl\,9<1*,TVV91N.aFm3pF)$=72^<L3^FIW60K#*JdAH0dVY1['@Y4o&G*,g-H.)]U67bC/bD.J'n(#H;!mHa;KG$$7I2VD]k-sGQJhhImY=o!ieR_%JS!K_T%R>&kW`o%DFr"&YRI#lDf6N]/OQnS$jU!k<"!NV!GJCB2!Y<q+)Ml64\Df**-YVAs!r!uglib[4i$ob4b35]p0cCq^)i7.B=;..h<aD9os"*=EgIlRD%+fLnJZ`SG+/ouYP=&>!"LdX.W`\s2ZRq)lO0p<lO2J`T<ed<Ia29]&\7UGgEYFG4MZ9c.ub@;Yufq2q0M-FQ_h*$'FC+OqemBAcJpNA^u5gkkB@$cU'"`Fn:Ag;r#Q-PgH?*cGC)YcS]>F92ncC:Yl~>endstream
|
||||||
|
endobj
|
||||||
|
18 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1684
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb"/)>uTcA'Re<2cm-.YBVd6$Z?Tl3fk/FJ2OJo%-Bk`daVFsfB%m7]b$U=&aB%X/jWTfga1b&FpKktid@!g!oS;T/Y7lRQa6:u,72/RGK.+b[`@!'k7t6P4M3J-u5sRGnS7/E!V;#]?<a65%c-,BqFKZXg!-,iZi/F@X)PYa`h0d]^ZVLnT:E:"0pSf<I=;$NS/h!LCO/oKE!g-V!ZmS&1pa:q`Xs4!!notW5GV]7ERN3H?:<mH*"*ZO>L):'G<oK5]#a/UmPZ]7s$^?JZ1Ie0o55`e@FHNn!"J2]j,:VnNWbOqi0<#9bd[-/>V3K5sYPR_N#RdBeV.ffgrA)4urKY\5Js'Tsgn>,S^s%c(\[aG,dX4g6@uYHfo`V<5oNg,\PdSa6<B$cq%=)9ebZ]ER7L2sjW6B!oN0suY<$sJkS'q4=rirY/!'!fd4d(c`:kUBH`EE6EZP&qg6)!V2eJX,b\^7`i]BU<(Ep4.Q:k`Jkg&`B_c%#\7XJ!/Ifk>jreode-U63-ZHfnbULe3IGJ)&PN6*hN:PR&JuBdaj<WM<e3<_J-eXqb`q$#sC$SceJ/k'VttfO>.4cFc92Pr$gBA*M4[j&\4hD"r-+lb5u-Z-WR[gQm,Y*QWVR3P&[Orr/EG=/0SuBPe1SFcqn[ir]Piqh4EjcAESqIR(bmGMTOfjWRuPQhQ-L.%@Do&KVM70+@eok9YC[AOTapoHBd_/I$o.\mgNS:]5lQq*M=[D19*A.O3U8YZ1t*US(ug<7JKdr11"Qb>`u'g,o?-lGK8S8rpVd*(nf!=Phn!'LOXS&u@8F'n@jt<4kaCFT=WApZ_6\Gs+ri%tj"Xl&I)9kVjRb>)OUIO6`JoPcc.flf>qs"#"7aZs#&Q=+c7#oK[_F$cU'[I.qTN:BM)A8Dg85IXN#2jtKO&^b=(-F7O][X9eu]./]2T2j\=C)2?=GgNB''WR+/i$MJ+`DYdFYP\p.(6>)j#H[=MDDiI>,j`Qd$2(!!5a6_BE82D>s_bc=@PRTr;@ZWJNd>1'W_:02B.)md8T@HY9UK2ugQ,5hc>59HTAS(V_5Dk\r9?$%`cBib=0n098r#@CP5FAT-&>h^b,9[I\$A;QDIIY[`Xts`!]4qlq2j`h#lD@SkVf!^O.`Z*&.@5n:j0IOuYh_&tLJs*8D]=(b-`STO3^)[B'k/8Eih2GT^La[J6d)cX&.EhLW2fM`")4Ch6_nRXO;kq7a6/pq;J$V`&>*OD%&SDBD><-;mKBa:Z#fD,8[*)5J2G]J6kq`[#t4<d,BRSp>H:dM8bUeaLZYW7VFZqXEB%S@`4A8-SA8TYlA`>>k!e*-A7-Tff"T:LORjVp>bD'(pdY`jTTjCNiXdF\!5l0S'3m.+UJS]'?@R:bd'DBgfegg\bAeh_&ZV:PH4bsL0L]ltjU[8!i![Eb8i$`J1gA>u'W6+=Z(r`PRl0XPi3'LQYY98;$cedO'U/#Ql^@O;A!-$>.S*0u-,&.KN(RfEA]+koaKUd43ZlpSa^B_[(5LAfZ6f+8BO*&-&!N0b=iH,=a!iD)52Mh^Qqj3:"[Q9`bV\J#ErU>\j(ll_[`lp='6gtE#\--Q?q>;cn7XXfHKfZ$'8<5\a=ZU#+i%CT?k@$&G6]eq]m)2W37Kl)@U-FZ2'>Bu4A`NNBI?cNuZH-<ht'akrY$^e@Z/H~>endstream
|
||||||
|
endobj
|
||||||
|
19 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1680
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb"/(>>O9='RoMSn09_%*oAW`0dY%eQHO(No7U(cR=[ImJLs0oqsW-.*'7l*\1'`eD,m6'cKCC4HsE;i*uH-l_StEu"TY/nnECbl9L*n+0S9e0-QktcIh/bP8d(CjQiWm;`*-h1cBt;;)A1>D>M]kXbohuGitQN'.G2ZJ/8*o'UN)[9/4>X4Urt3";5[CcF_X0m&ZA7V5j[i.aG]:+G&kgoC3CGU3k$`W*r,faT-4*BM@bjce)l2$UZ$.5A9`P]9ZH=*3]]KpHlj@TiSdlf83$.70n'HSM565H9Ki$*&/iJcXrsQ3HL1S'ra@gV[H%;j[Q#2IdK)"aYNM84am%d;ji)1$9"WPn_rBo@kQ^93Ca;/5/WN9JF26i^3DIfIMoiGJEqqjr4?!Vr=EY1s<=@;&kF`?8[H0i%jXlX^"."l:nE=t92SkTC2-o>*7`DFjTVN%^noE+N]VIuPfQSs0'o?L%%DjOi9ri;tZ(,>QV0nL*C4:XB+@dbb$s)9+?NuUD?c??*^nTUgn%aXfiV'DO^:S>re@b6glScE/P%t8C<>j$+>;MYIb$aqtR_`6/#.'NE%-G]e9Pdjh&?6*S!`lCis4ge+G"*Zt3Tms'>rXY%XISM0ln5C8O5f8*RNPF?1EHfNU#Lsl/Zf1!+LM3uo=-5<?8AI8ADED`jkZ0Ec+F?[.BS+2+lo8ZRf@]kWM!jho7cf#fZYQmRrmM@p<LD]!EC+'rj\r0W9.SplSc#ue'LuHBqepZYBloQ2T8.``@BO"A"H,nlSgu5@%WL*-Ge9joSeBI76J>8bB3T/!M/JHM%(:2!NM.*E8s2!44V^njnR0bXLYUtFJs=9TbpCYV=Qta&c7CO'9a.l@,uj\<Hm9(R-gU"^?>5pKjfb?KHUjCm2(NQC)9h>]Z_a7#-s##H8jS.,jU=@OEg%,">)N`]l2BSfoqD'c,3!o=@]+Cj"[`#IeHRGSB`q^l"]\bpT"g/`IWZ+.h[W'[4hqg=-R6rRBXCrY5i+DVUF/Wd0/rKG+[#tk1A'urijok[I3McnUBdii*%*h4g)8R_7HA!29m(rJX%`7=Y=@5bH4BE4eQ,B-0<#>I.qSc/-AB62UAgLqE;Gq15B"E$9nXEc\ptuE_k=CLsfX_C"?s+43qlQ0Q5QcZDCQ[!L?.%"2dg<mO3#J%796KjZU:p&tV&EXh8O\SiPs3\o&]LmYI>-+S?eS.j:Xg=$]'OMe\8U#ps.%$Dgu&V0POAO3g*"ZsQI;F3^ZS47H@"!tO<1O<Wg/"UUol&-.P"6ui:,a?N)V<2YllAlfF.'BW1u?Gk9miA=6(\t"M#eI'(YK\1.9;\q4V%JlA.3N%1BqX7o%\2p4-m&6]VXIWAiYb\*uX;tLCOGdqD25jn9M+kMpF^uD4o=R7^L6p$GUjG/8EtUR;4"+7Y2Bg'dYCf@=2jOBr</,Uor:Q5m]^Q`&`dB$m<]gV(04'.MYFhQR28?(Jk+EZXc!_i.H^XF@e]?OE[Sj17IlLW><u1e0Ei.X%@W!Dn4iG$gnCKsl\f%(A[P5@<capuFToV:2(j]t"1A(:EAm!_j3??K];N=j0WAD:c=hng/L.'+Os5'KDBl"`FL-jrsTmA()mR4rO'Fjr?Ffur,Ebp3]=u9atZq:@CU>c,S1upeGjO]J%fD\@QP72Yu+kTA@Rn8?Bn/k^j$T.~>endstream
|
||||||
|
endobj
|
||||||
|
20 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1741
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb"/(hc&8h&:Vr4Th!fSFOo`D`>]8(0>.E5Qp*6ga\fsO7t:e"^&.7o[UiT:/LsT[%+AWuS!`%1G#p1uT>)!QkoWh&HaQ9*?&JW+:CmPk?6d<@6g5t_UndB'@QXg%Tg028-,gk"cuGhe:'X(d_tR#-RTDEmSV#Lq'W&u.UFHpDO`'XOP&c`3(UrU:IZlphK/Y4WL=3P"+_Ro^1;^:-KHWXtab:n4$34Lj"\=Y-'ucL`qcsd=!\pjYB9]-=&u/H]Y2>8D@OfelXcGLgMRu4I9'IGXUS=H\&qZdH%0`T!c*]f.Il$15!$j:;L8($k)&u"snA;h+H_9tiS,p0,!ct)hEh(VY*^%^nN\PKlHm`:-]6nV3\=2T=qn)8Ed$ml#2<oi@s5pBXPs9rm(fM>E-fdC^k>/YKmV^TbGP3YCOp6XDQGGVrT8`eDB%(:<O\@t308GNaO+A$Zb#f;8EONPbkPK`k73edj$O#1hN`B<De!"c,9b5^pl,i;8j='82cpj3Ie=h#u"H\0=Xmb93mXCGsFsni3;5G?DFD2cAPE2UXe(O9Mai4(#3_B5'ZXMhdXQp)X=l2JkN#FnrB[8^dT9A6q,X%cJSgG7\!lM?A"@Cp%Y04oLCtl;Arp:$bc-$3[=iY9(*Zc=t:1e&!g!t4X2G/]BZ_!D7g9RkEGFe78Tpr3[.0qeB_1Qr8II$bgD0)=lF]9@-+8+N0,KqB</j\fqdgmZsd1:RD0:N'C\@b8nV($Eo;<uhrj64!tJ;WsQ2<i<<Ufp'aaeDRDa.TVNK0GJ>K>+>p[+,G)d^QR7aVgI[Q6k#s:#.(,jkL2arOoIf:t;o[Zb:&=Pd>*oL#$(bp9QV+ASIV6Jk<&VZq_0d7:k(EMsDN%_o=E%`q=l654tT9+E`N\XC<tV:O90g"5c`iMaP7RW?l=Br@g]?`VAEXFdOg[`LJ9>'MRe\f03uYUr(oJ`#eL$O"A-NO>%1IlppK@\8C;E:)cIdB"9MODH\!pm3]Crghp^C>)CNOgB8$`m%\c0"3C$>=2'sth4fa\*I<?h&hG>k('>`lq[qQfh,SR4M>jgkf3aGb4HrY?`SFR+R..L=_uUOhb0W(j\KjtO@SnnFhrjUcCo`^-'O,VW333BXmJFr!WSf.WNCkli"4r'B-[f%.F=_J2m;h[fYKJk/eNl6q>+c?OSMEeq=H6pmPqZ;oVuTufWAIgCkQ6(eff#nI^^]*/JiHb@Sl`_P.PO\@al?eeY\G7+X&\l#g1gTl+W?R\Wbq@qpAV)I":Wd<\IHcegsq->b]>r@$sc"JT5L\W_NmViGV.M2O@_[WBZQua;_8`&81(I6LJ0`o`F7YuEt)5kU:Vc"Yf>ZFG>50tNBI^FAJ/&E;9c/;T(POc7UBh$@tcf?QX4Q$V6g`I=u$3r41SZD_cOtLGEWHQU5Z,jqLjl1c#@mOE0.#1UOnYI,;(U"KuRbrrSnj"((M!FD:gnSnuIH`N6V2'`jV@G(_kS<<)?kI3Jq6A#*kYfXEJ.?]_thbHqr\o+r*J<!fNEW0<G?!0ej0Q68Ja2*;lM)+cFubU7kt4(BN3g>IJ<g.NbYV8)Aeup&a\J/UMKHAsYkQ3ht[#,gmQhS^fHij(p6o&cP]Hj<,WOCm\7:`11JekR>mYM9]cp4"GCWB@n&[N:VGnS,jTVcS8LsgejY!=Ms2[,O7IY49saC`8*s5H4G?uf('gI+;=Ri(df&)D`h!-/Y[l=r%>"0l*NMNdHH&jpb/o~>endstream
|
||||||
|
endobj
|
||||||
|
21 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1695
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb"/'gJStN&:O:Sk`MYJX]fr=7a*.D/=49`H(rIC-&-FU"#3/Sp[;1)dqG9!aEC+.:m;@S)4bYf95<_T!$_+=`W(i"6>ocoa'1eo;0n(L@ueu)Pb`r8"/q<=?nE[DUo;(:Up5*O)&jm4!jqg;]GfR-42DLF$k(>tg'*J%1N`HHqTM/=KZPi;`37.&(m-"C$RsMt8/Kt+.Mquf:.?AO:qAnRa`9Cg=PgeZknfSuY#+pb"AL<IX;%Ve"'N&!m?WXHkfref`UmngO#T#OoNf#\XD_+klt>#<-C^]eLW.1(3>4+$2Mfd'nHU^S0(82bQN>Z:EFJ$Ija6oCJ/S2a9Hlc\Ef"%r;u=F+B`?jO\7X0<:Y]`Dkf2ABjYb\g]"p!9YJEDf%@#!jZb.OW:c\GUI%#AC'MCfQ/IX=8:aP^ZkQVU[!+/rG["d:2o<HMph)*$`F-'0n2P"3M]4/&3GpD,T`YGCJg?T,F_@37H;_=s]#W%nKE(*.sV8j%M7]ilJKQIu9X.TpTe>o<@Vqi:`T@<4VV<,(2(NGP:V!RH%C4RT0J]hO#@-=Io7Lg`L.!Ef=SGm^K!/&ji$L2%iT5DEi0BX/#Cjp`[D+,2WG-*LF/GV5/:+sI29PDWe;4bmD2U*9u&)Q/>TmnJLWn]jM(``&4B_Z3q)(3>.A9?Hg*6q%27n19;l%2/#luI=.gOB8j,@tV>OgH+49P\ln4A<cZIQBMMSpVFs,lJ$1CDfdl+jVT;Oo-2BIW]_DS:q_,P#1+>,Y857%[3[K3'Eg[(aisg,0;hq'2-Uo3Jl"OK8/QLZeAV//I+C4hOg<t-V+'SB;`Z;..,@(R/r9nk+HM6R_qU,NRie6,3_*q\MX$kN^h&&3XMnO3]gsXTfR5I3@G9cVb><$HV1FnKil<:A-K6>gb-R@Ki[@Nh*sGL&W[>,@cOjAB][tr6ht0WP7f?T]VhQ$%Bu<dq2Y$pgM\:i249bmBmR$sZe&TW*h@Io>"rWA6N,9L%@S(HQT*O2RoV"53ElZ$WumdR-?qO@H+SF%gOlS&8;0@!+K6#P@&`HbOKaq9:Nd97FVAIVeCs,$,"(1-B\`>[`r*n205Ul*4F&kR*!"lE^5TBe`eg$MjMkcjbR\fGqXo3$EV]o&_#O6oG8&c?kAEa.n_DB/>E6<emI,@.#$kR0MEAr;/X!X;KsC>;$'i,Umo#Vilk.n1Yj/AU(:u^Dg]%+_X"Z$pPq^]/=.=nP$bI7=LLkalc>KuQok^[j.T^XV<p<sB#fbZej1^CY.ljAJ,WG$1K\-/R^N.OSqs/XmjKJ/V>K$W6N%GZt;-k(CCFZ2lX-'?.d>\3(jdJeSM`VkCc])d9D5D=Zhd9e9ECfTYQj'XClbu]2&du"fP[:`)-a0Z6a0e^ON*_]C3adJ5HB.RV^.%6(BDIt`2p$e5k!uu>`#Ijk_h"F,FmW3<lS/a09?%+C2ZOS'Q]*[)pt:fR)".(i+rS*cL<iRLN/CB%A16)K-lK&J//cIH-O1A`n``VZL*;9BH"_q07FXV;8;V\>RUL<\C*X>?jGRXFCc+T,p6PshdQ5a*T`Y-#eI[E)r,42,ZLq`qao*bsKX*3Ri(%lEof2eIFar:H-*+-%5lfXaRq[#q:&Y_]ZHAA5^a_cW:D`e7KoC0r0P^ssO!g!fn#4??\j15\/l)]GUAJ>#_06kQ^Zs*]Lpo=<_>b,"9o/~>endstream
|
||||||
|
endobj
|
||||||
|
22 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1702
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb"/)>>lJ"'Roe[cm-X@l5nd#)_k"N1dGfA4>Gli`%Xq@&@5'aIpZnCZIW?alm55;b':^fopqk!FEI?P"$h]g61OhmNmO7(rGi/L#g0:]0[*Ae*i7QJb5a#f9X#-2(_RH8BVCEVl,Hm6-3:6_0<PPheh0gUEJccO'^^K=M^c5`D4K<]L!`I2,iVphW*dhrpn]2"(Ksa0MKpt=@O_[^`CuG0*mL&E6uo(Lb3!C#_o;<@!R7ccmhY)N_t;n&b!)TeFbR<t#Wa+CY`p8G?Y%]q1B=B^UMN!+2Z\;phWD/Fg#YXd]=[GD6fj?/[1#*k&E#u3r@;5[>kX/MElI1V[Yo^a_D#7HVN6XA"fOO/>7F5M@J&^Em]optN9EH8=)PGc]3I&eH#Cbg7@0),a.$Q6oaRYfQhZbW:Q9S\kOS[(+rN>OCup*CG(;%<>3r-ic)[&f#+_3$gubm_Y-I=hRN77^g-PiV\m_>"2Wc"L3_ZUB0W0]X@9Rf/3?c$FdrN>b8$<.F7$J?r6ZA#G\DN4rnsC-p$Ve#(+?8LO$@C"*"7/Pni(N,*WM(Y>>8pd9]e&3hJLu(p0tTaG`T#YD.b>*KSb\d0D_+QpWX1tY-p]+KQjW`,SWBT>%)n\"`#(Ag^;2Z=pA0G(,4)]2"lUTS(6t8Bp(g!q*-6<s1q0;K$-\<cGR;[p^(5`[.82_kYbR5"hedC*Yutkl1J7fTF_sIU_NZCq1HE]5o#KO<2t'B&SdI&"2\;A]#<Wt8In_<NFEj+3hKMc9dQ'EXVSGL>S0S->9AY6grX;23DU$mB,VKBRo,=2?&(>O,T8cU+-Qbh`Bm5<W>/h1saE'[Y,X7&9kfYfi6I!JSiFjK.#>F$Q8*P#:3r(I)cTXg]F&ijPLs+(0fd]Em9?oi@`FH:K(<O`#:XaM8BB.+]rpe\+E'2:S'6@dUFm5P<Pg*V]AL$m!jcT0TY[![p#=kQL#ttCn]$AT(XYRo(j;a>;k/$0ATH.7>6AX9SCIsE%P*2<s<!0+UV:9gIGiX`0-<rp<<o/7FAM7PcPn4O;;&(*m^]5DH*'I*S`CO"R,)!P4N#NH]l=RZocc]W=FBP_t[FL7J5NSuJOmR@P\j+:$3)C#U#>#p@^d?Stf%^te(;#2f]0_qtQ-uZ^A70YZjO/H(A[GNfW<F!+n`9)abTY%$T<@0idEk35M24Eij3/$5+,'\_SGiQTUCdV7DUWYgUQ'M9kI:uAmA)Z"\"2Y>r3l4NfM"D-$3=-j4r2HiIl'^U`Xe`M&!@L/S$61-Z@Y64HO6dbl]+Du3l^-[QNg<VYCn(m38Z=s?A]U*O/4C\o"4hZB%ec2aq^Ig\t(GTP^46J)*op$Uin#l)]lLJI%_"oEqAOCkN',D=2!UD<ke;-<9dk_XE'@DY18Xpj"FTlIncuMf<nD_FB"L*kbO6;H_)I/h)>V1VsoNID7!$h`>Z\B2I0CO"$]TH)NYAM6o$"pY^$;36$?sfC^p0rOs.'J)s]pJI$"he3ls)Jr4Xd$_OR\?YSYFNRn8@h8ScUFD_)cDOIa9YZJ/\Fge&-#<`'US+_dmtl`+B<Ac=*o0Np8fKFme/$&35FZOSI>,V!*7.#'sU@L,A1T`B\?%Z&&"!PX>$#RU2%D_E$obsXq8r%.jGJ't<ff:F0[<A'jm#g'!C;Jji!8bT[Zr<O7q<TPr#]2&GG4\`A2-DLM-6%aXe2>0bg~>endstream
|
||||||
|
endobj
|
||||||
|
23 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1249
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb!#\9iKe#&A@7.kQoC3e[MX:+IG&$!_jY0RE8u;_h?#4Jhq9DI3i*`mDQG(:7VgGb!)rae#p%c(a/dng$_?2^dSAi?X\HkL`QS/OFcU"KMh3?LFlCJ(^P[1&6M9#K[TJ!)(I)&`*i>MH0W)1H%H%9.HHFcn-K>-'8+=]mF6Lj$tE!KT4]AGSl'H[B8+!YAYU`9?f!3;k*Iu@o'Ji?8<h(f6aG&O&7gnL2Qlo",-W%pN^8n[PKW?*8i_nt\k_Fhp_6-B+?HiJP9-hi#fTV4/=e;W+Srh<TUUUHDe@kPTAk(<@*c`G-s0"!YiRUC/0Fm`2tLU\hkhcFhl!ABnZX(f5s1C5cr`KFXRhMn[1h+-3J`2bfq^#k?8[;+nOpH@>V>1'ErC"e#O;jI#To?C!`sVWnQ6dS_7H?I6AKPgGp\679t]:%'a!\%*OIB>'B`i4?=[ccLcT-blfPFZo9;72;]YWM/@NZDQ/;m<P0!UPp>+5_C]3k[K)q*.h\`uOdFTG8i-0@V+ct>;Z3"P7NP"J7_$s!uWZ.&sg-AhRQjQeMl(Kot1/g'pTekru;Dm]I@8\rmW[&a'*+VWlf,4"?!3NA!/'HOG0,>p'j?%9.\3Zh^8+nC4\faftU@\i5O:s':<Gr"ZV&\Eq<a?'2k%]Kbnj8UeEH5da-_2nli&/^?09oM8PAr/Ydr4>OO<CP/!K[G98.HaWk/GdT5fFGcPA60H^7\MaS%F2'YK]d-c"V5,d,hXF,H,fHh.#`=Q]SZs<b?(]/F-[AS3)sc4R;l:E:in4"cS'6&l'q/5t<AD[t^\Tk8LHr$X7NJ@LD2tU_LqnP]8`[[qQ"PDhW0)<[_\<@*^_ji74M#/Y%g;rZiK=FDj\6I('aUD*\J&n8@LG'CWa&?S/@%+gqsAdH,nhY5[7]+-*)eBQ,o#4U`s\DM;u:?_N*I$'?9[%\'joEEe=cCWte:8#6<J_s=qVBQe_dS;d??6.@L4:%QPLck"3==H>R6@:N6H-dMh2S+&<U7cW2#.%EDEK'-bAeN#%C^>sC_p>dL<g#X8\%[\X,q;q!O35`(gS1\oo=d\u+3@OF_EmTh6B+`")jr.22T;l?u)q"5L'hPb/-e\JRCJn-rf/V3#Fe?,6XS-EM%9#o0Aii*[D!CHgqp(*3)pO=.0dq>-J7W^Vk2O(]&u"l0AURc;..*8*4@[?Y#)0auY@Cg'*2qGsNc>@o;#E,)lQDX(G;SG7OIBViW5&Vc/.[(,!6C2i]D~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 24
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000073 00000 n
|
||||||
|
0000000124 00000 n
|
||||||
|
0000000231 00000 n
|
||||||
|
0000000343 00000 n
|
||||||
|
0000000462 00000 n
|
||||||
|
0000000667 00000 n
|
||||||
|
0000000872 00000 n
|
||||||
|
0000001077 00000 n
|
||||||
|
0000001282 00000 n
|
||||||
|
0000001487 00000 n
|
||||||
|
0000001693 00000 n
|
||||||
|
0000001899 00000 n
|
||||||
|
0000002105 00000 n
|
||||||
|
0000002175 00000 n
|
||||||
|
0000002459 00000 n
|
||||||
|
0000002564 00000 n
|
||||||
|
0000004657 00000 n
|
||||||
|
0000006433 00000 n
|
||||||
|
0000008209 00000 n
|
||||||
|
0000009981 00000 n
|
||||||
|
0000011814 00000 n
|
||||||
|
0000013601 00000 n
|
||||||
|
0000015395 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<901f406f6cfbf9b640977a323bae9dd6><901f406f6cfbf9b640977a323bae9dd6>]
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
|
||||||
|
/Info 14 0 R
|
||||||
|
/Root 13 0 R
|
||||||
|
/Size 24
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
16736
|
||||||
|
%%EOF
|
||||||
782
output/timing_stats.json
Normal file
782
output/timing_stats.json
Normal file
@@ -0,0 +1,782 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"fichier": "23_20190411093049_00001.pdf",
|
||||||
|
"debut": "2026-04-21T10:17:12.538647",
|
||||||
|
"fin": "2026-04-21T10:26:15.952573",
|
||||||
|
"duree_totale_s": 543.41,
|
||||||
|
"nb_pages_total": 6,
|
||||||
|
"pages": [
|
||||||
|
{
|
||||||
|
"page": 1,
|
||||||
|
"type": "FICHE_RECUEIL",
|
||||||
|
"duree_identification_s": 11.69,
|
||||||
|
"duree_extraction_s": 97.82,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 2,
|
||||||
|
"type": "FICHE_RECUEIL",
|
||||||
|
"duree_identification_s": 12.24,
|
||||||
|
"duree_extraction_s": 77.88,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 3,
|
||||||
|
"type": "SEJOUR_MANUSCRIT",
|
||||||
|
"duree_identification_s": 15.92,
|
||||||
|
"duree_extraction_s": null,
|
||||||
|
"statut": "ignoree",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 4,
|
||||||
|
"type": "ELEMENTS_PREUVE",
|
||||||
|
"duree_identification_s": 13.07,
|
||||||
|
"duree_extraction_s": 81.06,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 5,
|
||||||
|
"type": "FICHE_ADMIN_1_2",
|
||||||
|
"duree_identification_s": 7.02,
|
||||||
|
"duree_extraction_s": 176.77,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 6,
|
||||||
|
"type": "FICHE_ADMIN_2_2",
|
||||||
|
"duree_identification_s": 8.1,
|
||||||
|
"duree_extraction_s": 41.14,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"erreurs": [],
|
||||||
|
"blocages_429": [],
|
||||||
|
"retries_total": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fichier": "OGC 358.pdf",
|
||||||
|
"debut": "2026-04-21T10:26:15.976638",
|
||||||
|
"fin": "2026-04-21T10:30:11.701132",
|
||||||
|
"duree_totale_s": 235.72,
|
||||||
|
"nb_pages_total": 6,
|
||||||
|
"pages": [
|
||||||
|
{
|
||||||
|
"page": 1,
|
||||||
|
"type": "FICHE_RECUEIL",
|
||||||
|
"duree_identification_s": 11.94,
|
||||||
|
"duree_extraction_s": 54.89,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 2,
|
||||||
|
"type": "FICHE_CONCERTATION_VIDE",
|
||||||
|
"duree_identification_s": 8.28,
|
||||||
|
"duree_extraction_s": null,
|
||||||
|
"statut": "ignoree",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 3,
|
||||||
|
"type": "SEJOUR_MANUSCRIT",
|
||||||
|
"duree_identification_s": 10.99,
|
||||||
|
"duree_extraction_s": null,
|
||||||
|
"statut": "ignoree",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 4,
|
||||||
|
"type": "ELEMENTS_PREUVE",
|
||||||
|
"duree_identification_s": 12.63,
|
||||||
|
"duree_extraction_s": 36.32,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 5,
|
||||||
|
"type": "FICHE_ADMIN_2_2",
|
||||||
|
"duree_identification_s": 13.53,
|
||||||
|
"duree_extraction_s": 49.68,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 6,
|
||||||
|
"type": "FICHE_ADMIN_1_2",
|
||||||
|
"duree_identification_s": 10.64,
|
||||||
|
"duree_extraction_s": 25.93,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"erreurs": [],
|
||||||
|
"blocages_429": [],
|
||||||
|
"retries_total": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fichier": "OGC 368.pdf",
|
||||||
|
"debut": "2026-04-21T10:30:11.703536",
|
||||||
|
"fin": "2026-04-21T10:34:08.640839",
|
||||||
|
"duree_totale_s": 236.94,
|
||||||
|
"nb_pages_total": 6,
|
||||||
|
"pages": [
|
||||||
|
{
|
||||||
|
"page": 1,
|
||||||
|
"type": "FICHE_RECUEIL",
|
||||||
|
"duree_identification_s": 16.14,
|
||||||
|
"duree_extraction_s": 64.08,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 2,
|
||||||
|
"type": "FICHE_CONCERTATION_VIDE",
|
||||||
|
"duree_identification_s": 10.97,
|
||||||
|
"duree_extraction_s": null,
|
||||||
|
"statut": "ignoree",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 3,
|
||||||
|
"type": "SEJOUR_MANUSCRIT",
|
||||||
|
"duree_identification_s": 14.35,
|
||||||
|
"duree_extraction_s": null,
|
||||||
|
"statut": "ignoree",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 4,
|
||||||
|
"type": "ELEMENTS_PREUVE",
|
||||||
|
"duree_identification_s": 9.12,
|
||||||
|
"duree_extraction_s": 48.81,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 5,
|
||||||
|
"type": "FICHE_ADMIN_2_2",
|
||||||
|
"duree_identification_s": 8.32,
|
||||||
|
"duree_extraction_s": 22.88,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 6,
|
||||||
|
"type": "FICHE_ADMIN_1_2",
|
||||||
|
"duree_identification_s": 13.82,
|
||||||
|
"duree_extraction_s": 27.6,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"erreurs": [],
|
||||||
|
"blocages_429": [],
|
||||||
|
"retries_total": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fichier": "OGC 371.pdf",
|
||||||
|
"debut": "2026-04-21T10:34:08.654725",
|
||||||
|
"fin": "2026-04-21T10:38:03.504814",
|
||||||
|
"duree_totale_s": 234.85,
|
||||||
|
"nb_pages_total": 6,
|
||||||
|
"pages": [
|
||||||
|
{
|
||||||
|
"page": 1,
|
||||||
|
"type": "FICHE_RECUEIL",
|
||||||
|
"duree_identification_s": 15.61,
|
||||||
|
"duree_extraction_s": 70.77,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 2,
|
||||||
|
"type": "FICHE_CONCERTATION_VIDE",
|
||||||
|
"duree_identification_s": 11.81,
|
||||||
|
"duree_extraction_s": null,
|
||||||
|
"statut": "ignoree",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 3,
|
||||||
|
"type": "ELEMENTS_PREUVE",
|
||||||
|
"duree_identification_s": 11.32,
|
||||||
|
"duree_extraction_s": 49.28,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 4,
|
||||||
|
"type": "SEJOUR_MANUSCRIT",
|
||||||
|
"duree_identification_s": 6.82,
|
||||||
|
"duree_extraction_s": null,
|
||||||
|
"statut": "ignoree",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 5,
|
||||||
|
"type": "FICHE_ADMIN_2_2",
|
||||||
|
"duree_identification_s": 11.32,
|
||||||
|
"duree_extraction_s": 18.73,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 6,
|
||||||
|
"type": "FICHE_ADMIN_1_2",
|
||||||
|
"duree_identification_s": 9.94,
|
||||||
|
"duree_extraction_s": 28.28,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"erreurs": [],
|
||||||
|
"blocages_429": [],
|
||||||
|
"retries_total": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fichier": "OGC 373.pdf",
|
||||||
|
"debut": "2026-04-21T10:38:03.508522",
|
||||||
|
"fin": "2026-04-21T10:42:37.600479",
|
||||||
|
"duree_totale_s": 274.09,
|
||||||
|
"nb_pages_total": 6,
|
||||||
|
"pages": [
|
||||||
|
{
|
||||||
|
"page": 1,
|
||||||
|
"type": "FICHE_RECUEIL",
|
||||||
|
"duree_identification_s": 11.39,
|
||||||
|
"duree_extraction_s": 97.01,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 2,
|
||||||
|
"type": "FICHE_CONCERTATION_VIDE",
|
||||||
|
"duree_identification_s": 11.14,
|
||||||
|
"duree_extraction_s": null,
|
||||||
|
"statut": "ignoree",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 3,
|
||||||
|
"type": "SEJOUR_MANUSCRIT",
|
||||||
|
"duree_identification_s": 11.22,
|
||||||
|
"duree_extraction_s": null,
|
||||||
|
"statut": "ignoree",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 4,
|
||||||
|
"type": "ELEMENTS_PREUVE",
|
||||||
|
"duree_identification_s": 13.87,
|
||||||
|
"duree_extraction_s": 58.78,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 5,
|
||||||
|
"type": "FICHE_ADMIN_1_2",
|
||||||
|
"duree_identification_s": 11.0,
|
||||||
|
"duree_extraction_s": 21.31,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 6,
|
||||||
|
"type": "FICHE_ADMIN_2_2",
|
||||||
|
"duree_identification_s": 10.34,
|
||||||
|
"duree_extraction_s": 27.16,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"erreurs": [],
|
||||||
|
"blocages_429": [],
|
||||||
|
"retries_total": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fichier": "OGC 385.pdf",
|
||||||
|
"debut": "2026-04-21T10:42:37.603168",
|
||||||
|
"fin": "2026-04-21T10:47:43.613674",
|
||||||
|
"duree_totale_s": 306.01,
|
||||||
|
"nb_pages_total": 6,
|
||||||
|
"pages": [
|
||||||
|
{
|
||||||
|
"page": 1,
|
||||||
|
"type": "FICHE_RECUEIL",
|
||||||
|
"duree_identification_s": 12.89,
|
||||||
|
"duree_extraction_s": 153.67,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 2,
|
||||||
|
"type": "FICHE_CONCERTATION_VIDE",
|
||||||
|
"duree_identification_s": 7.35,
|
||||||
|
"duree_extraction_s": null,
|
||||||
|
"statut": "ignoree",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 3,
|
||||||
|
"type": "ELEMENTS_PREUVE",
|
||||||
|
"duree_identification_s": 13.16,
|
||||||
|
"duree_extraction_s": 39.37,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 4,
|
||||||
|
"type": "SEJOUR_MANUSCRIT",
|
||||||
|
"duree_identification_s": 11.77,
|
||||||
|
"duree_extraction_s": null,
|
||||||
|
"statut": "ignoree",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 5,
|
||||||
|
"type": "FICHE_ADMIN_2_2",
|
||||||
|
"duree_identification_s": 9.31,
|
||||||
|
"duree_extraction_s": 19.19,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 6,
|
||||||
|
"type": "FICHE_ADMIN_1_2",
|
||||||
|
"duree_identification_s": 11.48,
|
||||||
|
"duree_extraction_s": 26.72,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"erreurs": [],
|
||||||
|
"blocages_429": [],
|
||||||
|
"retries_total": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fichier": "OGC 397.pdf",
|
||||||
|
"debut": "2026-04-21T10:47:43.619457",
|
||||||
|
"fin": "2026-04-21T10:51:51.030768",
|
||||||
|
"duree_totale_s": 247.41,
|
||||||
|
"nb_pages_total": 6,
|
||||||
|
"pages": [
|
||||||
|
{
|
||||||
|
"page": 1,
|
||||||
|
"type": "FICHE_RECUEIL",
|
||||||
|
"duree_identification_s": 9.27,
|
||||||
|
"duree_extraction_s": 76.42,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 2,
|
||||||
|
"type": "FICHE_CONCERTATION_VIDE",
|
||||||
|
"duree_identification_s": 10.26,
|
||||||
|
"duree_extraction_s": null,
|
||||||
|
"statut": "ignoree",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 3,
|
||||||
|
"type": "SEJOUR_MANUSCRIT",
|
||||||
|
"duree_identification_s": 10.22,
|
||||||
|
"duree_extraction_s": null,
|
||||||
|
"statut": "ignoree",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 4,
|
||||||
|
"type": "ELEMENTS_PREUVE",
|
||||||
|
"duree_identification_s": 12.02,
|
||||||
|
"duree_extraction_s": 62.89,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 5,
|
||||||
|
"type": "FICHE_ADMIN_1_2",
|
||||||
|
"duree_identification_s": 7.81,
|
||||||
|
"duree_extraction_s": 31.15,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 6,
|
||||||
|
"type": "FICHE_ADMIN_2_2",
|
||||||
|
"duree_identification_s": 6.48,
|
||||||
|
"duree_extraction_s": 20.03,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"erreurs": [],
|
||||||
|
"blocages_429": [],
|
||||||
|
"retries_total": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fichier": "OGC 398.pdf",
|
||||||
|
"debut": "2026-04-21T10:51:51.034973",
|
||||||
|
"fin": "2026-04-21T10:56:46.034162",
|
||||||
|
"duree_totale_s": 295.0,
|
||||||
|
"nb_pages_total": 6,
|
||||||
|
"pages": [
|
||||||
|
{
|
||||||
|
"page": 1,
|
||||||
|
"type": "FICHE_RECUEIL",
|
||||||
|
"duree_identification_s": 12.35,
|
||||||
|
"duree_extraction_s": 77.87,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 2,
|
||||||
|
"type": "FICHE_CONCERTATION_VIDE",
|
||||||
|
"duree_identification_s": 10.64,
|
||||||
|
"duree_extraction_s": null,
|
||||||
|
"statut": "ignoree",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 3,
|
||||||
|
"type": "ELEMENTS_PREUVE",
|
||||||
|
"duree_identification_s": 9.77,
|
||||||
|
"duree_extraction_s": 84.09,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 4,
|
||||||
|
"type": "SEJOUR_MANUSCRIT",
|
||||||
|
"duree_identification_s": 8.03,
|
||||||
|
"duree_extraction_s": null,
|
||||||
|
"statut": "ignoree",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 5,
|
||||||
|
"type": "FICHE_ADMIN_2_2",
|
||||||
|
"duree_identification_s": 6.18,
|
||||||
|
"duree_extraction_s": 31.56,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 6,
|
||||||
|
"type": "FICHE_ADMIN_1_2",
|
||||||
|
"duree_identification_s": 8.34,
|
||||||
|
"duree_extraction_s": 45.3,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"erreurs": [],
|
||||||
|
"blocages_429": [],
|
||||||
|
"retries_total": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fichier": "OGC 404.pdf",
|
||||||
|
"debut": "2026-04-21T10:56:46.039051",
|
||||||
|
"fin": "2026-04-21T11:01:41.285242",
|
||||||
|
"duree_totale_s": 295.25,
|
||||||
|
"nb_pages_total": 6,
|
||||||
|
"pages": [
|
||||||
|
{
|
||||||
|
"page": 1,
|
||||||
|
"type": "FICHE_RECUEIL",
|
||||||
|
"duree_identification_s": 8.05,
|
||||||
|
"duree_extraction_s": 121.21,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 2,
|
||||||
|
"type": "FICHE_CONCERTATION_VIDE",
|
||||||
|
"duree_identification_s": 6.92,
|
||||||
|
"duree_extraction_s": null,
|
||||||
|
"statut": "ignoree",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 3,
|
||||||
|
"type": "ELEMENTS_PREUVE",
|
||||||
|
"duree_identification_s": 9.45,
|
||||||
|
"duree_extraction_s": 40.67,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 4,
|
||||||
|
"type": "SEJOUR_MANUSCRIT",
|
||||||
|
"duree_identification_s": 12.45,
|
||||||
|
"duree_extraction_s": null,
|
||||||
|
"statut": "ignoree",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 5,
|
||||||
|
"type": "FICHE_ADMIN_2_2",
|
||||||
|
"duree_identification_s": 11.47,
|
||||||
|
"duree_extraction_s": 38.9,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 6,
|
||||||
|
"type": "FICHE_ADMIN_1_2",
|
||||||
|
"duree_identification_s": 14.06,
|
||||||
|
"duree_extraction_s": 31.22,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"erreurs": [],
|
||||||
|
"blocages_429": [],
|
||||||
|
"retries_total": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fichier": "OGC 411.pdf",
|
||||||
|
"debut": "2026-04-21T11:01:41.288964",
|
||||||
|
"fin": "2026-04-21T11:07:47.867790",
|
||||||
|
"duree_totale_s": 366.58,
|
||||||
|
"nb_pages_total": 6,
|
||||||
|
"pages": [
|
||||||
|
{
|
||||||
|
"page": 1,
|
||||||
|
"type": "FICHE_RECUEIL",
|
||||||
|
"duree_identification_s": 9.23,
|
||||||
|
"duree_extraction_s": 173.09,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 2,
|
||||||
|
"type": "FICHE_CONCERTATION_VIDE",
|
||||||
|
"duree_identification_s": 7.92,
|
||||||
|
"duree_extraction_s": null,
|
||||||
|
"statut": "ignoree",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 3,
|
||||||
|
"type": "ELEMENTS_PREUVE",
|
||||||
|
"duree_identification_s": 11.49,
|
||||||
|
"duree_extraction_s": 58.97,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 4,
|
||||||
|
"type": "SEJOUR_MANUSCRIT",
|
||||||
|
"duree_identification_s": 10.21,
|
||||||
|
"duree_extraction_s": null,
|
||||||
|
"statut": "ignoree",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 5,
|
||||||
|
"type": "FICHE_ADMIN_2_2",
|
||||||
|
"duree_identification_s": 12.2,
|
||||||
|
"duree_extraction_s": 24.99,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 6,
|
||||||
|
"type": "FICHE_ADMIN_1_2",
|
||||||
|
"duree_identification_s": 10.47,
|
||||||
|
"duree_extraction_s": 47.16,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"erreurs": [],
|
||||||
|
"blocages_429": [],
|
||||||
|
"retries_total": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fichier": "OGC 413.pdf",
|
||||||
|
"debut": "2026-04-21T11:07:47.870357",
|
||||||
|
"fin": "2026-04-21T11:13:01.604612",
|
||||||
|
"duree_totale_s": 313.74,
|
||||||
|
"nb_pages_total": 6,
|
||||||
|
"pages": [
|
||||||
|
{
|
||||||
|
"page": 1,
|
||||||
|
"type": "FICHE_RECUEIL",
|
||||||
|
"duree_identification_s": 11.21,
|
||||||
|
"duree_extraction_s": 140.94,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 2,
|
||||||
|
"type": "FICHE_CONCERTATION_VIDE",
|
||||||
|
"duree_identification_s": 7.76,
|
||||||
|
"duree_extraction_s": null,
|
||||||
|
"statut": "ignoree",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 3,
|
||||||
|
"type": "ELEMENTS_PREUVE",
|
||||||
|
"duree_identification_s": 10.87,
|
||||||
|
"duree_extraction_s": 44.94,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 4,
|
||||||
|
"type": "SEJOUR_MANUSCRIT",
|
||||||
|
"duree_identification_s": 11.68,
|
||||||
|
"duree_extraction_s": null,
|
||||||
|
"statut": "ignoree",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 5,
|
||||||
|
"type": "FICHE_ADMIN_1_2",
|
||||||
|
"duree_identification_s": 8.19,
|
||||||
|
"duree_extraction_s": 31.99,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 6,
|
||||||
|
"type": "FICHE_ADMIN_2_2",
|
||||||
|
"duree_identification_s": 8.74,
|
||||||
|
"duree_extraction_s": 36.54,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"erreurs": [],
|
||||||
|
"blocages_429": [],
|
||||||
|
"retries_total": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fichier": "OGC 425.pdf",
|
||||||
|
"debut": "2026-04-21T11:13:01.615261",
|
||||||
|
"fin": "2026-04-21T11:16:55.314927",
|
||||||
|
"duree_totale_s": 233.7,
|
||||||
|
"nb_pages_total": 6,
|
||||||
|
"pages": [
|
||||||
|
{
|
||||||
|
"page": 1,
|
||||||
|
"type": "FICHE_RECUEIL",
|
||||||
|
"duree_identification_s": 16.2,
|
||||||
|
"duree_extraction_s": 83.81,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 2,
|
||||||
|
"type": "FICHE_CONCERTATION_VIDE",
|
||||||
|
"duree_identification_s": 7.65,
|
||||||
|
"duree_extraction_s": null,
|
||||||
|
"statut": "ignoree",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 3,
|
||||||
|
"type": "SEJOUR_MANUSCRIT",
|
||||||
|
"duree_identification_s": 9.84,
|
||||||
|
"duree_extraction_s": null,
|
||||||
|
"statut": "ignoree",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 4,
|
||||||
|
"type": "ELEMENTS_PREUVE",
|
||||||
|
"duree_identification_s": 8.8,
|
||||||
|
"duree_extraction_s": 37.99,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 5,
|
||||||
|
"type": "FICHE_ADMIN_1_2",
|
||||||
|
"duree_identification_s": 9.78,
|
||||||
|
"duree_extraction_s": 19.28,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 6,
|
||||||
|
"type": "FICHE_ADMIN_2_2",
|
||||||
|
"duree_identification_s": 14.47,
|
||||||
|
"duree_extraction_s": 24.91,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"erreurs": [],
|
||||||
|
"blocages_429": [],
|
||||||
|
"retries_total": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fichier": "OGC 429.pdf",
|
||||||
|
"debut": "2026-04-21T11:16:55.318401",
|
||||||
|
"fin": "2026-04-21T11:20:58.656749",
|
||||||
|
"duree_totale_s": 243.34,
|
||||||
|
"nb_pages_total": 6,
|
||||||
|
"pages": [
|
||||||
|
{
|
||||||
|
"page": 1,
|
||||||
|
"type": "FICHE_RECUEIL",
|
||||||
|
"duree_identification_s": 10.55,
|
||||||
|
"duree_extraction_s": 71.53,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 2,
|
||||||
|
"type": "FICHE_CONCERTATION_VIDE",
|
||||||
|
"duree_identification_s": 10.12,
|
||||||
|
"duree_extraction_s": null,
|
||||||
|
"statut": "ignoree",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 3,
|
||||||
|
"type": "SEJOUR_MANUSCRIT",
|
||||||
|
"duree_identification_s": 10.72,
|
||||||
|
"duree_extraction_s": null,
|
||||||
|
"statut": "ignoree",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 4,
|
||||||
|
"type": "ELEMENTS_PREUVE",
|
||||||
|
"duree_identification_s": 10.83,
|
||||||
|
"duree_extraction_s": 37.92,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 5,
|
||||||
|
"type": "FICHE_ADMIN_1_2",
|
||||||
|
"duree_identification_s": 12.02,
|
||||||
|
"duree_extraction_s": 27.99,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": 6,
|
||||||
|
"type": "FICHE_ADMIN_2_2",
|
||||||
|
"duree_identification_s": 7.75,
|
||||||
|
"duree_extraction_s": 43.06,
|
||||||
|
"statut": "ok",
|
||||||
|
"erreur": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"erreurs": [],
|
||||||
|
"blocages_429": [],
|
||||||
|
"retries_total": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
Reference in New Issue
Block a user