version a 82%
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/
|
||||
94
README.md
Normal file
94
README.md
Normal file
@@ -0,0 +1,94 @@
|
||||
# Extraction OGC — Ministral-3 8B
|
||||
|
||||
Extraction automatique des fiches OGC (Organisme de Gestion du Contrôle) vers Excel.
|
||||
Modèle : **ministral-3:8b-cloud** (vision via Ollama).
|
||||
|
||||
---
|
||||
|
||||
## Structure du dossier
|
||||
|
||||
```
|
||||
TestExtract_mistral/
|
||||
├── extraction.py ← script principal
|
||||
├── README.md ← ce fichier
|
||||
├── scanOgc -> ../testExtraction2/scanOgc ← lien symbolique vers les PDFs
|
||||
└── output/
|
||||
├── extraction_ogc.xlsx ← résultat (4 onglets)
|
||||
└── extraction_ogc_raw.json ← données brutes pour debug
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Lancement
|
||||
|
||||
```bash
|
||||
cd TestExtract_mistral
|
||||
|
||||
# Tous les fichiers
|
||||
python3 extraction.py
|
||||
|
||||
# Un seul fichier (relance partielle — fusionne avec le cache)
|
||||
python3 extraction.py "358"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Ce que fait le script
|
||||
|
||||
Même logique que le projet qwen (`testExtraction2`) :
|
||||
|
||||
1. Convertit chaque page PDF en image (200 DPI)
|
||||
2. Envoie l'image à **ministral-3:8b-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
|
||||
|
||||
---
|
||||
|
||||
## Différences vs projet Qwen
|
||||
|
||||
| | Qwen3-VL 235B | Ministral-3 8B |
|
||||
|---|---|---|
|
||||
| Vitesse par page | ~10–100s | ~2–10s |
|
||||
| Thinking mode | Oui (num_predict=8192 obligatoire) | Non (num_predict=2048 suffit) |
|
||||
| Rate limit | Modéré | Plus serré — pause 3s entre requêtes |
|
||||
| JSON malformé | Rare | Parfois des newlines dans les valeurs |
|
||||
|
||||
---
|
||||
|
||||
## Particularités techniques
|
||||
|
||||
- **Pas de thinking** : ministral répond directement, les prompts courts et le `num_predict=2048` suffisent.
|
||||
- **Rate limit serré** : pause de 3s entre chaque requête + retry automatique sur 429. Ne pas lancer en parallèle avec le projet qwen.
|
||||
- **Newlines dans JSON** : ministral peut inclure des sauts de ligne dans les valeurs string — le parser les nettoie automatiquement.
|
||||
- **Relance partielle** : `python3 extraction.py "XXX"` charge le cache JSON existant.
|
||||
|
||||
---
|
||||
|
||||
## Prérequis
|
||||
|
||||
```bash
|
||||
pip install pdf2image pillow pandas openpyxl requests
|
||||
# Ollama doit tourner (ollama serve)
|
||||
# Modèle requis : ministral-3:8b-cloud
|
||||
```
|
||||
1048
extraction.py
Normal file
1048
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 — MISTRAL
|
||||
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 = "ministral-3:8b-cloud"
|
||||
LABEL = "MISTRAL"
|
||||
ACC = colors.HexColor("#6c3483")
|
||||
|
||||
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_mistral_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()
|
||||
131
output/bilan_extraction_mistral_ogc.pdf
Normal file
131
output/bilan_extraction_mistral_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:20260421103343+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260421103343+02'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (\(unspecified\)) /Title (Bilan extraction OGC \204 MISTRAL) /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 2566
|
||||
>>
|
||||
stream
|
||||
Gb!#_D/\/e&H88._(WdU!`aMn'DX@WdNV,K[#GH0JA6>hgSJlUc??GZhiF!QP'XU>F1.m(_]3gnOM$@]P>4BArJ'\%oT>6E,P't;&7B&@NIXP&)-rHLdE/".YjEl>U'rhCPVEI]AaFP?S-[+\1F-Cn)obDmJYu2)eb>8]]hVKM1aH6D9jZSoC.>qN3h_s:gSHSs1UF/p'GLS=)ZnXH?3;7^[5`K>3`u+1\*W983IQ6sI<It1I_#B!o]>FeFEMs%P)OjOd495uAh55MD_K*Mkk-7tG]dZ2>SgjbrNlG4#acX7:dR/jq1+b-8kJ]^MN$j@=a>+eT5Li^428M@\bc6sP+:Ei0$2kS48ZY1GPCc^N1!]@mcrs*mZ&\];b^2a$#nedI^rcLbZ8M"qu/_HID/s&<b&;NHq(&Z6hqZj_.5<Ne_/:!_jiF'<,K.;/&PDh=D]W'b'5i>jpi#OLJE%Ac&O?@%<sck3h%*[aOT;L@63)cT'YCLc^2CBT)NV5Rt*e\6j='_r+5bQBEe"hIHI#`4;+>]m[TNca^%?MGBkW[XP[,+_Q#Jm&h2I/mIVX6]HUVI2j_B[5WbN!e&a.a7^IZ*md86(@MW=;-+-;JaqC<2JAN5Mrp=53X><u&KinUPHc'Dth6>9u.]!H;_=eXfI[.>T_23l2c1`AH^hV^@#W"4:c6FHd9!-npA1ML]h7AC_J`oLCjai6'in%a=%0nh"QQ.gl%[IBqXiG=!=:_5]JkqVaFeUldh>62Uf;j;-5QIO2S!t\2U\+mFMEPd]R*>S5O1BqO#?:-GlD,9$[&&B\Yg3994T8TLl14B-A5rh6mb.$D(oXNs)AW&5;6<m*l"1sJEn%5IQ#YC$86).Xfn.F!W2EY&G&b9?[mlg`PR!Y,b#W?TY^T\,o&F4DMruST)r^X$s8P&Mo[\EOe".?.M6bsl+2dNLo0^Ef-,ncbJ#8oHe>'/n1#.2>lDLu7\+VDIUC1ohf5$U^6Y^//f/L?F0J%EA-h\!&B%l<@il&Ri`S<o_fm5Z`Ds2.J2BKt<U^:_f)E-6SXH3sP)H]>?A41j7D^Lr2Z+MC;!6N2MrS`C)p.4gXd%^h8Fel`5?=l*U#gn:\\b#$Y-feYbN]C2RF81hWlQ[>FoP%o!BVpPu#2QI#R`EsV\Tsu^c->;6e(d(6P31n8odJ[*r=3&GQA`QO[[dTShqUYPKBU#tcG(>&F_gotPit`mHup!835$1k+7<U=[eiLZBCr.3H!5k"r35a[ct9iQ8h@%K,rp)[CfSgJqB9_M#B"d4d)94%B5`QG"c8mkfW)m1Br_E_6pa>b%Y^O:ok*kRh)qfOo5IlObuE/h%^-O0@G.70Q-WaQM,Ta:F/aBQ654L&<_[]a4^Gu6:5]3Ka==RjoV9Nr;,D4<#6@<Iq%7N9d_l;>/kRUGn4o#G6Gn]`h(ipO"c0d7eK3#g_]"L9C)75MQiddfTE#HY;.Jd<'L4r=PQE6U1`K0j'Hhf<TP,$1X+&_i!>KT5'KuR%E1j1]VZ73a)Mn+_BqbS7#_PAC'HfOQ!0'L"lIOEL!??/W@iGIQOJ"<aL]TOa"<2Fii.+A[?jbfll(`bqUO]Lb4\ZVU0aC/fJH@gXC/594U]:aZNgMZu3K>Bg5=Yb&kN@(MYA(HZr#@)hXAK>BcZ,VWL0/dE5=\#U#&a)n3NjK!J`k+"!AEUn464%6k)PVr,!hF#;eSB&TV/58q48;9aa"InJ`k+"!A3IL[(?$,'Ym<)dTTV05QMj<9sOCU'L4t##>tO*6u%HTi&Pga[$91fCd/#@dRmeLi8FgS5rS5Xs8O8"`CY9/a$@t5m@ko=;/KLKoA_*\q?X\t%Ph/pc1Z1,'G.q9\\fK6O+K[H_9W'#.54p0/D(GVHB>GV,<.p91Z-o=LqT<#-iInlh7AC5j(,oPYk(*&"(+1RY>0CRaTG/jItYG(85FRO,4<,O*rc&T(FSYd#iuQ:EW4hK1CUmjgJQ!!6/aB1=Dm?4W?(\U']-t*o.=e:(m0/8'H)(.Pd6gT(8E^'`!E5R;,BA=?&r>NfITY98cGnmZY`gDB\PFhWYuBgS'/f]7BUkj(9*tNec!K3&W'Um`$,dFMeEYf\Hj7N.X3AZJ-Z@D@6aqtatOri!G*)Z_.YF>04Te\PS(k*:`8S"OJZ6Z40`^WBa682IV*0a73fmAHV)2].]]U')Ne:IS.(guBEU=#SU5<VG[E97H#)M)Qo*bg[?oa&ikE=Wg3]EQdQ88Jp3o'U\A*DuXr_39IR^3;*k&fj+/DMNJ;%<aT5(91oY7?ge>A"ciU9Te5.%c0Lar-IYs"/6U]%8ChH`1\5lMs(:JE]>m<6`ko[I^YVkfahlf*lf6\a&k;(Y$[MCO(2mZ)na?"5F]+Re=VY2:+9ibDDAh72S]30p4#=n3Vb@]B@rU@ZpZ/l$b;633qn^2&?7P?f^U$g6NU29F_=r36Y`#'OfD-tT\G\/A&chB(R/I0ZV6Arg\[?+gZca_H#iH:$Ps'EP,5''Z:LJSs0\0^ft6289^em4]i-GKBomU>a(]VthNLEEUZpK:jQ`lHFG!8E6Y.SGWa;9*,e~>endstream
|
||||
endobj
|
||||
12 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1944
|
||||
>>
|
||||
stream
|
||||
Gb"/);,c4/&:WeDm)oiPB5/u#ZDDp.JC<;=],&i(bhVt+6et<Rl8WMHhquROA1+XePAHmJG6A1\'n%V$kLG$E)7]HNq=!8Fi3tn?]k+u=o^@>;7mR(V>kLn,SZl[$krZWA)ZS1<@G9?.3A`fYi)47(G@(I]hj*MA%dCl&@Qp\p&;iJ?Ba&Fb$Y]b<YAmD1>4qE$qm;>63fM;W)VJsL\UI^6"4tk?D;=tZ[>\<S9/dA$G$2gcje:d?Jb:_t@Mql-j&Z5Mn&6EnEX(2Ofc7>Bq%:p1o(Egj^I%t._>&\e&r12_"B&tY\3MkpnUNWEI0:.F0,p$9iAhtBM?ldl!'/cP3t:4%ZsZRY_`[O%K?>-c.[Y=*fCt(@;sK\Yf61Pg+CWkY8Htbsd0snWhfKtY#qBS:#F:K;1!Mf,N+Q+[[giSf83BiI!1n0;&+8G4,g=+b7A=3O$aXNtJSZUYdVi__8N%20TtBAB&h#t(!ng+,4".)='HZ%sN0]/BS(fu#N<E@+=Zf9;!nMp9,Y6-@!mt\a[bRKgMSaq&BekXq/Bm*f!eVOYj+CG#<$Qs+>@FM))@;R)m7\`*ig[KBJ7p3g"U?;0Otq%80fCqXC_A&I$q:gkVU9c'[<%<1?F\5oYZrD=nmlfIBZW_q,WBK?!j^3EJma)6Ojo9O_r3Em@?G_We]of\7,MjZ(CAGhcth9&;fC-KMoMq&a@/uG?GF*<AmN0`CSqqBQ/$po`s/j!+p$E9EL>fX.WBdS4m@OX'mj(F:lE7Fk.1dC/s<lt8Q1f5Oj+?3\qEMWn9.nCJ(>843/*\"qAk("SiGq6rdB-AicsrUhm%<4!la<s)"-lXG5Ki-CnnALl\=ufVG"fSbdMiJjB##ah'=Hs^2DpFPIk^Q9@LHg'dqR\W49)"6,eCtHje7W0CB3X[Z,=Agm82:NSQKb]B9>$%uoC'.M6WB_1s"ZeQCKhD6VaWX2>J`3(b[HOJomGoP=bCRD@Uu26tElhfE`^o)^PR==+EAEF<*J1KE4B%X^rEGs.+!7`dfJ.:iH@7X:[J4uAVZV)JH'?@!iYNeXH+DBWRCpO$9.hYR$@Ce/MN*PZm.3M5g/.F0S.hX.PB_h$6Bk=H\SPNpIsCmUHH;el-n-akeRg&Sg8QgelAp)O,c^4_]j)._2ISH%fUeE[^6h[Hb.]8'C5)@a%8-#cMZmkC:_*.+88O1cjLG8Rr<n%GgJIN&g46u[KqnbMJKLM%7O%%#OX;V0'0hO^NCfA&U-OW2R8VZ4O(HN1Yu)?ndT0SBQXkd!WOJtt>VIN#bF^p+i8-n>qaq;olu5PSB&i+Y&-(*h-N\s_=3\;^X542Q.aM.=@FgP*!C@pKp@&r[;2&!5/="1r6<L=di><!j"[T%DEcDX)Z?h""\=*Tab-*`XMEbnck`'^W8<K4(kkoO=!9qTp@AXh@"5QZK6p`(PHP,Sj'6QudjK8aIm73uf`,,td/NbG$i0''1r"WdcE(of9ID-ZhiB:_4bLFbj9;F/c5#s0%:j<Q,adI%*V[NaOU_@B<c4.tfb'9\a'l3F;!FnM!\ta>2e4F=`>URXOhqT0oF.)lmn>FMfIaGWh)R(BND$l>E31E'!eVNY8G7/`^S+S&NcRZIbA%p6FFr@UH%l,0hk(bDP0">F^"[5>=Ug#T(l"0$g"_B5BhIZu::JBlMu=lLqa^?"@#6-ZSPuNO'I?],*[(>s9_APAgq?9EKiQoE0Q]/AqSqk:hpk\Ikmp<_kj=@ei=]5iiZ7C+Fn_#djkgls&JQ#X[P+]5XA/cOLSQ0oQ#L:/.E(-OX2VMrgUUb"cA+LJr1rA]Q&:79p`sUW_?t6A'>)Jrhs9(dU^DORkP=6q/MMbSO^C]O7'$i>BV$Fm4HD@ioF\39'5nT+GbmW!#Jb6AR34'd70'P9E4E`)_kT?0`[G\UE"A'k1DrLFL4M+U0=o!o[T\;?~>endstream
|
||||
endobj
|
||||
13 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2182
|
||||
>>
|
||||
stream
|
||||
Gau`XD3N^$&H;*)_7)InM#mqooNTbVb]Gnp-M>EKaZ+LeeJZ-Wg%)NGpBAY?Ulu3bQg7p(%U$0bZL!40PqYL+s-!6IgDrV!=6T;^Jd=fGDhtWVU"+)FrG(l4+IA[OAjT?`:a&A!PYh3;/^>3X3E7K&3*2?=N0CoI*$+Ja=spR/*3FB&Jg-B0&CLP07>B[cf@qCF&ln&]iG^?Wg[YMOI7L?)#6'hc*AW1%r@_pf7t9hg^Q.%=q;YpkX4SRB<$nH)]!4\RNp=rEV]XOMrdaQ_5cPk9XiL&/-KjH3hO+mr^HHsMD^.`8P75o,(c8u0(RGWEE#l*-gl.C%N0km8-sohgG_s/J>\$J$@JVHR#Z_N8.F$uJ.Q2O:NX5U<p7\fLj03,U8+H(.4*lYe(!o$)8uoF5$:WCfHC#u4Q0^8'<9TqUofr>9`0s4@^<YiPo?d]'k/F#tDbG3H;u'43>i/SO_nHpb<s$7l72=->SgtrT#i"n/e2,#j9(.AGO!prfG)%1$IUAi$kjECND9?A$LB>rhg]h4BfjXOq]S7)Fm9tG#?ZdMs#%B2.o,T/$%/<1OkCb\d2HB.R^,Z1b!jT(nZi)-lnD>=KjnX/4/6E4k"C`[Km3Id9oBl6j>K>34?'T*8fki3\ZXd%k]RY2CLrJs+#-q^@FBWoU&*<?LN64:e=&lf7[/[MVi#N#20qQ-d_)^jeD043FZi'-.XF6?Z]Mdi'O**?Vd.]sU;=d;Un6)pCr&2IK\K&jN9eL?_r)V2CDsVW=\r8$mq62M]SqqPYe.^fD#Wn188>Ho@#NM6![D4SkMf7RR<6`&mZ#-k#qD>YXi*9h[WrD.ua][$6-Z+RoR@@cqhJ@=XE?**D#2s6MM(1tR6])b,`:gP2+d64fT@::j!$bt:Wm90>fD"XrR^K8+c(,;7XC`pe8(u?aq;AbLRd&a$]3@W[33LWZ:^iAk\*9D=K.9!7@b1H_T>'7?OAXfOXaeHV-'EHCo`0+KbmK3I9]_#*?dI9$G!/?a>HF3grPPMI=7pGU<3If=jn$^1ls[oA(HdmdcI6*4r1g95;]`i6bu/s]P/ijZ+tF#>6d#(D%qomfb?"T4BpRhQ)!75!1'f`sN]0ZR2NW[4B03Y1Z6j,om@_'?"O4\XI7M)3&?Korm,6D1XFEd.3)G?;.UHQWMH\(I_*8SFk#PXfMD,8_)_b1G+ET`Q/L=i@`nbA9$3Sf8!"G#I23=Xa%+(!*p[LpN%ncnQr;Q4&Xf5Zk(h2B%32#2Rlq;*/\-F#N5TEOB3/W,,?nq!M!K(;m@N`]T&>0U35`-+1qa:kiVSW?;^LLVK"3/e3a$-HEINHBj&?m#F_:5b7fU!GrYn$sc^cndmH9ggI+u7KdE'V6XfpC1g3^0U1I4u/_m!DWR*FKrt=9SM/J0NX4)T]2p"t7DRJ\g!*8$Hn]*)Q,dp*DS(I/S'O"*(h_hd?o.cTVoE)"rL\`NV!MOCK@<:l'N6@WP\Y:\"eb9n`ZVI`K0u#)o`MNdW#[-T`YbfEVHn_`eX))"o6[EpNl/$F#R>Yc<U"a0G!#$jRLEQ@3HV?t&cF3'8tfKE7!=*t1sKqbdN!p;$`_fE^tf;8^,(Wlnp4T\t%\95;9;h;>IJ`8R/54GJ8,?nq"@nrDE8q[rukp433tfU"s*>o4UnI`K1%E'V8.fU(*<nMk[X"*(h_?VKSg!uAd<&>0m6,mJDV!s&b6%ms?&(l>2::5/iXI`K0u#"1RjLN0h9hih.%LY)h5(;i<ITG[AK#'0&4!=H&,5S[QAM(!XE70<mFbIs_H&WbX3]H):T"2Tj;*XGLDmh4Y_g4A18T!C]u>M,3gcTPf7=mCfg`h!`+O*J_NipB:fJRHGZ@"5>g>Ft0BQ=m/%5h/u>^"2ITL]1XihRtS5&3f*q*_^]&l@$rjWi\B^A`]?F.LE.*=,p%Do.^0;,2J2=3orC4+._s;RF<t+82jb83AfcQ9[ekYm>,l5MRj%aEppf/3VDC(Kp'^iF4eGJEG("ddGg(_1W(2CnP=*QB?$3HBBG:Jk=Csr6ZoJ,c3Vh&6$T!b3heJsMT`SCXKW/sGf!Uin//]Q3'!h2=W-Mb@;WoGRr?;#FKX_B_oZsN)]fp.D0U(r)?SI[[c,>nC*LEY[uFEPH9A=VL+pH8HoZrI+>_ktG\eS;r[nb":5KS4s1J>:+DC9u/4rDO~>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
|
||||
0000001530 00000 n
|
||||
0000001608 00000 n
|
||||
0000004266 00000 n
|
||||
0000006302 00000 n
|
||||
0000008576 00000 n
|
||||
trailer
|
||||
<<
|
||||
/ID
|
||||
[<5db226b142aed52cb198342b3a28cf5b><5db226b142aed52cb198342b3a28cf5b>]
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
|
||||
/Info 9 0 R
|
||||
/Root 8 0 R
|
||||
/Size 15
|
||||
>>
|
||||
startxref
|
||||
8984
|
||||
%%EOF
|
||||
BIN
output/extraction_ogc.xlsx
Normal file
BIN
output/extraction_ogc.xlsx
Normal file
Binary file not shown.
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
4036
output/extraction_ogc_raw_mistral.json
Normal file
4036
output/extraction_ogc_raw_mistral.json
Normal file
File diff suppressed because it is too large
Load Diff
213
output/rapport_mistral.pdf
Normal file
213
output/rapport_mistral.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 Ministral-3 8B) /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 2002
|
||||
>>
|
||||
stream
|
||||
Gb!$I?#uJp'Sc)T.s/77-R"Wa6L%i@ge;n?D<e]ZQ'iY-PE_*B@Ztp2n+R+3LBn%Yf^?,gfYIf!]fLUaOAHggnADQ`adeGO@rhR?&]VrfQ8%8(1;4sMn_el3[V&5#8^0+;TaX'+I0nL75.-t)r:5O<JL@rLE(rGiIEaeB!p58#+R?W?1s/E4d.//=E5JUE!,$lc`gE[3ck%9paiPr7Xd8:;9`KqK9@qQ:9pQ1Xn`&pD1B(%g0?KW155>0-@?Ce;MgkA\1uFc<=`+i"`3M5](-sG>IBg3T@6)$k"$2@^/+Oid,TH5547e;T6Z,Z]eH`;-f<`S8q(TL-;7X03]%p"r,rjPgDS.paMo*0-b]?39V*hXJIf\-R_Rutp$\;V<Gtu==Vd,B(?\";g'khX*H"\I@PKC9Z?>iBALh8k1k+YT'*F&HPmSGPb]>M:3r.("1lm-4c0j%s)F!@FRPgZFc)>W(@5TjeN\,mN^5VbPsQnet0@3-:th0bT&.Cu!#^IGQ(cVHS>aK5\5<S`:>TbJ[?Zs`A>]IVqs@6Bp[ECdH5/FV:1LX0INq\$%5T)^g__o9i)A\-60(#TE``ApU9PSsDPVp(sR-k"G+bV@etXW=g&_q&/ek_dr/g.?2L'?uW[.5Sk<=2WB7ZjLOib;#u'nc[0'+Y2(jmu*;6jX!L#J[gF)H0u.*?&j:L5?^sA1<+RVLO1)0%e4h3/Ea':S8P"d$F5QWiXO"I)G(icWg\:EggJ>5HtktiT:/ce:6TpG"@+ZL(d86[9$p4d(W;8qagZKrLsQQmUMtc<)<+Qrk&tTY]M,)'F,1eZ&I</gO%dpVCK3M2ak^Eoc%9D'6KZ\T@5D%6l1ngE4UrhF^HmBF:UkbZ]$BjZ4i2`+fB`3?D9]s/T+Q`FMU"_rHf;O;6m*Z%,Q^q'BenA'4*q$WN+%An.e"aMmp<Z8B`T^C?]ktR7>8bbRh!pER<b4@$^d/PA$U\0oGIT@A9Kj_Ri/f`<b./:+*`\(^T\.<Hs!B`994?Ukr"6.4]X2aMLbX[XdrQUV*i<T?0WRm/4*rs;@Ao11'Gd`H3b#(&?J%[+ZM#?gp1>uMibAPkfQ;,GmGo._K$bK"'jK,h$/6MoC'qK-kD27I-OnsqE"89$9B9PplZB^I2B`T,OZ&BBp>">jgo[Hd(]u!"64ri?5Han<.3`gF4Y!-C:ic!A[&3j;kd?]"WX:R06(^,12T1P7p5Km98p%;fBqhO[X+p5l35*n.^te,r7C%m<\_M\A5S&Pk)?q9"!oN.AFlH\rhO>L>W'TMkqP['JJtUa9Y6cn_W+h31te>8@5bmdf&o6kKMlL^n]t4Cf][3B0^=?A'\I"]Vc!;Pp>##,!K^5RWuj"O_S*GG%b_$sVr)l:cpepK\bW2$%4I`eF(4!\;Qk-<kSOcdIMlHuSW_t)^Xo7>Q[aafjRp+qQ[eUJIThc#lk=R!m%F[W=pq9H;SfKV4SmC)?%7:&fL/X.(Re!o'Um4rR9bG<UqQqt87`#YOie/=p+-07>[f/8K?HNS\I=sCe2Aq!qCZ%4P[1f;.D'QPX8JH-M54Ym0"Jc=krWj@ds'a`VsM8H:>(?E?KE3<A5B_r8)Y(PaW=\b4I<)DkdQOES:5Z.Y.2D!GC-L&`$r<;M,W8?g#Pk+VBt^YbRV?2*io==$THp]I]d%=`g=T?+*Zo_SiPW^NG2f2-f=mqQ,qp;ANt0iG$G*8$Qk$:SB$%TOaEb\Yfso)4.q0=G!P09N_<@4iD@@9g_U]V7Rb\lGu0>):>Q!dS?N)FLNZps+qBA8cJuX;i$[R3:PX^?a$KqWm"!7+B&``-W8Kf+>ugBi3%WgE<`>#Y;N=aS%TcI:#>*g-Za0=^eWZP8e[)T`HFKi`]lD6]41EQ&74W^d=k.\\"+-Lui%>toB&Bd5U/f906ENc+$HO])n'fm4fBqo=!VdcZ/1+UC<68W6c(R)dnt6a/<=Wp_0+P!Ak;%h>`63eeQUaK)<bANp.,t&/3#VW)^TU</~>endstream
|
||||
endobj
|
||||
17 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1849
|
||||
>>
|
||||
stream
|
||||
Gb!#^9lldp&A@C2oOVg/<%Xu&!J[B$<bu]nN\/F7\]TUPlr?YE=sQ2_J%n-splIe7Q>g]:6lC;qrJ!8[h#edeoYL=[d1"sZ+WPtt5QSc85\Wb+IYId*pJ2=KT!i,gT(!:rb;7Ld4?APIL?AnJH9f6*FHM$;BmBcSQX35G8bsnnPk#Od+\[[nGlCC(qNH(7Q!MVd/TjXQWL0&t8':oV;^N-?DfQJ&,G_Tg2DL6+SY(KJp*U^VJDk.#GtXbL=1O&5:iPC<>%"]W"47fV@&G&J8OI_D(V$'AY_40b=p*ZFjsEe&dTUr0;1X:arfa<-C=SJ\)Qn*,PN0p0@!LB)]"tcP<7tcYGg/%@X,59T4R$UL*,_&^E0=o,^Zb-ISj??8n)1ik=R\*V670p>BJkK*3fjLjI6;:UB!ZkI5:l-sMipB-%<N_\45-2^ZLcEuP:<0L=X,l;.T%rZY8`m4#U^3PS$PRJ7T1X83Ms6&UupD@E?2<Erk^OWXfOqNM@PZ%=U-OLY\ZVi60PBm^p)4\K^hf/4&Jo&-t=]+/>ZpnNW0VB+o&I&r5jiq\*tVErOW>MVdYmhCr^E`7-fKe/0r[qe<&KKVs:'UG&mfh=/n_p3kDFd]#)+K'rCt*9J0!nHG7i1;hVY#3#^4fLN,Qt][U;<bEdnGQk%<WomHHIANgI42h_,*EOtS`,edNT?M#<ErR:ZCAQ9T#(am5=QEgU/CM10VfD\eMH?f1/1[*_Gml+0WplJ].$]fRm:X6*qY91`YBVs#CZ&Q'&(Lq:!G]ss(KX^"n/12/HNThn6Ed>^j1fjgS#Zn6,CMf`S<\R?#97a+-!`bfnALRf*e6kiq\R(^lel[!lbsOBpAfEnB2@nK>Z4?co+_eaVhu7GsKX]'j_U:/lo5G_?2IfYh(J;=d/iD`!3`YiH*YZTcj`1u%96`F"^.)X_p]U0nMt4nFJ<;/a_/^93"Fh"H=LOWPd*ZS`%h6#Zdr'/l7I[kil6KCKSo?5q;>u%S!skVL+;a(qo@%.IRb?:[54Y>35r]3:42YGu4N;i[e9o:-dH`=h=%8\&,:HK[E`:.4Q"-LT@k+t3aphoLaq^qq:=Wbr\(LjbDh=I?X%->[`p.P$+Ck(8bK/5oC-o'EBc3>8?jd!<qQXsIC_gMbDIFsE:+)&np%pHNJ>S#Y(]CrUFnOt@VN%.!>kC<9>>-F;pp@oe`6Z=CqQIY)LY0`>ID*50m3RPLs8##OMf7dV/bJ"IE*I"n6f'@iBd[ibXX!3dou`q7*IhXYWL^*2@j8m1I,Q?ojk1*%k2Z=:9eI@q^Q!%lj=Y!'1"f2XhQ9),D)us:$:G[S/]?[pBd4Z0\I7qP9_K+FjG>g/]B4A5\E0l)VAg%lF!Go8h3`h:q77_&adujEkm[cur29BH580+BUrAd4,'U9RQq[3VF3%"Vk8/?SB\-CH_F3fY]8s-mOI'>I\r-UsRG2Vtk1XrYW%a@Gd-fp%($)2m^$^'jY-U0CM;3f.+((og0?'NA7e:;@I&>rddZ5>!,inc9,9[T.$OM)Pp5tG@Z/!/@S?+(:ZroD\$e6dJZUd'gDEK,/`KuQkXS?^_\>"C<3!uB3GEjuWGb/*;a".l6Y9&bG53d.2Prj5^KPd"pcTqrdR.\;S7H5!57l4Ou4aEMJiU$-8X`?NW/X0aG#@6*nqs`^e&h\Ke+2%E5W'u9jfm<OfLisoc)BQl`B9%\$gUc)';1.6*qGDVP83`e!5!W0QP>aA""]P5^1f8WJD<%HL;1)Ydj*e>jKOl'(TRgYm=J14V)H`Z;jY[5ne%c$E15c3j1'`U7DOs+U/<T`#\TK,u7(?PYeRSKfOkZpDCfoGU(E9%A+&6%"%f~>endstream
|
||||
endobj
|
||||
18 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1632
|
||||
>>
|
||||
stream
|
||||
Gb"/)hfGM_&:XAWkdT;_mGe%o!?Urc+IdVPQlo_kK.j;L=]1,[_;,%c2hR"IOu#%UGEiLiM2j`@J,M+Np3\.j`#lMa5?e+mL=#mV!>>b-!UH0ai;gNpo:prI1E"T-9l(4b_]#tOc*-/>9deF52J<4jRh3pT9MK!3lCl+Di\HGniIZh-J8#V4&ck05)S!sIO4,u)5P%m>j=hmuK]jjk9rW$5i@.sHh(m0:G]a&G,D7-BXBY\&K;R*)1t_^IA'm5;0N\Jm;F#6:7uO8RB(IH/E41C__:*G<K%]n^a#`&Xd9mMun/T^5onq'h+j$L)+sph_)-FkaBKfW:Nqb`!!Dg^#&+^VRim""jJE_iilS70BBf)GgBWoL:lGY99>Q"[uapG8d0;Q66k^\WK-;bUc\NgVi7<Aag#1lTJ0Y#@pkrcIm1>TnHfb,]$n5R?%3p7@1/BbK[1LCKi)"'V/VrFtNK3@$#':pqNI*+7ROGmgA:4(Q-o/c!$e7MnWN,%rFiRtA.[,T`>c0Bshj7M`6;Ko<.8](7`$-1A]Pq86h_)AH^/A@";C4V^Ahr[Lr`JZ_#Ntsr00&6]O0*]I+7kh$f@W2R#^OJ?8T_Foh\;ko!nrJkh+pMHn:q\:?'eL(fm#fo=`mi)'+Lm>,QX@t05g]I%/+tDHf[`m4&.%#rWK9bh;4/u*LD[TVNdo&CBp8b9%#E>Jo7<D0$DS1ZgpbMu\q/l41&?(kJb\[oO[J&*Jm`[\%YKTB]a;3D!VAJk3:M\^*qqg_*9j=77tE^]j:DHY6K!Qh+8/2g02Ie)mjf]=8/9@LlX@mDhcRP'C<V_Y&<'mg$&>0`Aujtr93"X$$ZAV'W^r7>;36AgU`B,m9h;PNC@>uI>hsOL7B[dJK;Q:<!MYYd;l]2@UI^OpGnSAknfS0&nQ%B?$CbEHHB.b4DRN5OnLAH^@HDGVhBGq)S8M-#r1pnc^.p>M&gE*"n`h6;]rrh"ZQr20C%ER#%"Ld2Uj3TN?^C#2=7i"Ai*XoD$ILnA`T!0*2'Z,FSs'S/rS_AE1gVXe&FNl-kT[t6r9pnc=^+4QSqF)(7cCOKUKHlDULH3<EFD1h##oje*DAS_nq&*[E?(GBE+]eM`dp\i99W@q.#+RTOc"u+99W](7gr$(WPB(_dY+VSclRpI6"04JQk^%l*eI6T@-dp@8pkpr^)DD9S<q:@&eP\t_2d4'QP;:430QW$9=:o7a9ZYeZ;r)`"gV/Oq_&(--7b0Tg^7S=J]r!8Z==#Iap\CTD[^(49SUhn,THQO@-mYu\/@8S&,JK!IWd>jULTh_;DAP2ro1p*^5b&<(j_d#h%(i`#EJ-DH_)=*"2Uo\W13uW;Y.FJoKIip3j#\g!^Y%!\kpt^XeSp"gF?uPLho?a[4,gT[E<L&*l0qff+`.j\#lh_hC*;L?W4Tu>(*O'f33Uih<A_-5*N]mim[a-M;gDh>,s'B:Jm;A@[/E8Or2KF-qUkPC'>nD&.Q?mAY)1`P&#X!a[pOC)*XOY,hE5N'U.SX"H4ODr))DNWUuZ[E_Wc)R7Ig<=;h-c(Tq*1Oi)at&6jISC7$Ks-;sM4Z-X^uK85gk%_uVbXrht<lhq@mkbcDW^Jj$"+(%moXM:UOG*gLOZ%^K\ne:Sd~>endstream
|
||||
endobj
|
||||
19 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1412
|
||||
>>
|
||||
stream
|
||||
Gb"/i9lldb'ScA]'k_aFc4oRMnY&AfBhVI_M=$%Z9ue4<Opi3I:Vl;/5JIgh"Dh<UTsWjG3!k_$%`^5ccHA"0+QA+Nn&5XlI/q.q#Y6,K"_7gii"E\1n83]f1G.@c3TUOTK*H@cMfGKGi"!.3#B@,=KAu)-P>b$@#)O<i>[T0&Y01*qM_:e;gqF@dj_K&M-V^MG"EnHo>`1&L2=8u)f_CR;C5X_Mp5`ZZ/hR;df9RI+CBHM>@PZSbD[0]rPJlijjYs+Nj42glYti%D7s!.r/Bf':+h3<cNJr?5?6g%XA:R0+5_g5cNN?&&He7\[LL[<ZEUiQ;i[!C!iNfKoC'g9_+W=@b**!`jmpWMQ`B%-il,Mp:L0>XYNMo\_PH0R\)^jSWk-%[f:<;6HR_S8?LfuF"B*Ukj,kB2h&SLVpl)K>=!in"M2K=to><g&8kM3-\dW`eoJad*37e/4'F%0k"q]9B()Gdg5VXmba8YL,WQbi\:5PG8th+=kqoIgE'$30*EMSNt.I@"n)hC/hulmNg6rM8:9b.$I]7n3"%&H4XYeE0AYBGDP^,$-fnX6:*p\'cF'jlPf00.r9n]@Bu[:c=3lY"HNR1P$=mL%20c@FVZ_DuruW!"+I7VXOcppP<_U&Jai:.qtPcEKn?,iZ(Y4Cq*\r^5:f)HkS@VbtH<::i,bRD2sRa4#1nX//d1/Sd_$E.7<q7=4Z^p>9Z"QcW]7=VqD]lfmD<02ET/A-+&"pMFuFCgOrq"EL'%o.+r\q,t^1f?]M&EWuDR=s.&oJBBL@L;k4)XW)_Jh'4m9I3dWN;>A%["ZCob[a\WDS+jXQk_6!=UWFbNZl2uUa+_!W5UR(,De`+1HL2\13+*EiG0`d%pQt.nKe:Hs?ND>Yh9$\?L:EZR$=FH`g]j_2[BnGdWhD?(qVIJfGpuA?O;])D(]J9!M$)<f;S0^4=TSedmP>V[kGf17lB0"HS6(FTe<C:.@h7#nFF?u`D;<j<6MmY07e?Yb0"Gmi3iJsa3Pb'#r&Hk\s;E8TGUfiZ*-V0[0km>c[99?k/hpJ(:OX,^\!#XC*!Cg;aoQXh$H)_(3*2D5A(&Yu8r.hm!1/pbHDM;6H2#nqlAJ_Cq*n`*VBIs\H4@KNV.!lY[RI1GK0R)F$1dEb%H3i(hYTADh&F:2u0Z"0]oiqbl=V&=i+dgeIY_/4e(kKf^jn'nha#OG&jNdmG4Is1YVOi:r"o4UWbXS2molR:5@g@+79]U46MFTt%pN3L0A"O)+SC92fHTKa,Ynu4_:7I8X(?>&OQtAWZSW4FuCraM@.+U4@H5Q@B__C'+?3H#E5`@Wr[lkkBrF^H.H4gcN*MB.8Kkod!Vd)YIitI\'SdJ,>B2-cC7b%E3pEreuH%kAD0"A#*f$DNpeQR_"Co16U0874Q'r3"%~>endstream
|
||||
endobj
|
||||
20 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1115
|
||||
>>
|
||||
stream
|
||||
Gb"/'?#Q2d'Re<2\;tL'&T%&I5P/AggN:oEX\Bl._AKDR&u#Eop@EJ;JH0\#bqQ,c>aeRRRd9"O`TA-A/fphb)fGa@XC-KEJ5B?2!q@6@<aXd22>]BYqjr8p"G.!Y7gOm+5i?c%G!nlL:B6sg0-kf)/e\riVcb@Mj">SH31L?dmg+\2J]A-l.Z^H&5ZN5SR6=?<R0G"+?*;F'Pge&+%[HYPjn4n&dc=u^=n\7[:<B11re)sfj$cs6:uG>:d%b=]n?2Ta$Lj_fXfipcARQ$bX/bG13P5+lCZ^g9qX0lkl5<V=1@[LKDKTAD1c[QQ#sBXALhDTQ9kcR(H5$lrBZ.g+F?Gp6R$n709Md9XmogoC%ZB*'BKF@fbbsNR&5t4P,i26aKGfXrM%Il6_>?4KjZhm/Z7_$5C5h8k%*6AJ88,A:@3n1-V.CQ^`j/tV?t'n!UX_uB&A:P9$1TX+PIqmKCms=MQjdT:BJ/6uc(YZKcZ4D*go!lP4s*FR)4$*cTgifu[8b(YOm]N[/=6Ij7VPo#8TopuGe&1C0-PWjoAjr7;DD?I?df(Z52FcN1:fe!.M/$E1Obp.%c7pS3'Ss+%YJ-=];l<DW0P:*QM=2O+tEb4it-G3J]$*FbD@aF#3glHfnN=:F@4\s6`;ZL+`+S1'G9.42OfflTb%G?@1P_MJDg/5p]gf#2a6O9h]KNLS-6L=P7g4:BSa0:DpH)ZBI!>iYUfN3b'\TYEi9Zq'HE`!e0dc:5jN0X3;N!;\grXpal2RFA+a8^/#m*P3>q]%bt4=0),aq>%#&"*Sl!)2b\@UBc`C0[]$+mugs<'&]UI&Z%GXUX<kOm6C(8tAX&cl:04JZ*9Sq/_H&Z9GP86Tm9sSg;Ie>%rD:`U]Nln/J6LN^V\8.,e_?e-YL(1*OK*o_nhaH1[Rr.4^$*(jRniI^@$dAZ>=TPgATK'r!I3e,'=Wbc^8Cg;:5*GT$XH2uX#dHRVooTGBP4So=VMK&'%&;O%3cn=_:YeFe=6PB0a-%$_:I];=9PKHbL=qd1'I3Y'R.=KXDbPkM0?&?T9NblJ)H54SZGr+dVQ;L`N@AX:=_#Sm;q@>A`fr?XX>+:G.;MWUa2Sh;rW%>4gm\~>endstream
|
||||
endobj
|
||||
21 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1197
|
||||
>>
|
||||
stream
|
||||
Gb"/g_/c#!&;KY&MEN;S.7QW0398H;M:53UBjr04Te=HKZ1/N!g;gB"0d*K\c6BaB6ud%(/:%!QpI`>P"C1I>ea%Mhn88Q]Erq$3neMLP(b@nfflHY#6Cq4ulL9U!"9KW(,iXs]SsX[<om@[/6X;@>'HE`i!VIVNRu!H-8L":T71'C?X\qu`i+TPLMDWH6CAtqn1.%"0Gn8(3RJ^5N=ogg:&g5VF"[jOT'*=nYZ[dl+:b%S/17?a(^d@%6@2-Qt&ji2*m>2)u+8[pKldcJ4-=ZLAA.lJ@aIE`1B%lPhMG1EZW^_0>f/4+"dU&jb37)!^5[8g6kOVNbT)Ko_(OlJXhs5$CjVtYYX)8GF7Eq-KqS0cM=M4r12osBL)1U>87?MDMXR$\:>CCXdS33:2"O,hp0W^!DV*Qd--mr8O;)+!PUjuq9q;d#!OH9):V.+c=orR\/V51TGN)M"o0M]<p94/*bj@:uV,c#rM.mOjZ'YeB"jTkNWQ1Gl(eVKdWN&Cg:_!hgX/3s#MA'P=L!n0>0e9Nse\87*8)eFK'(i9LQaOI"%"Eg_:0CiYe1M$\aKh3L5gmP]Zn+*[2RB2;jXp/CL^^2a.70:ta,q8rD/1o=q1Y)`"!5gGaW7+AM&3n0;$0tm*:@`GtZ&-q<fF/:9BJ/4$c/K26NcMBtgq-:d3Z`&B:5e?U;V_5L4=\orOm]OFpZ34mgGmI#1s&M3!FCXFi_tXTauh[A=XpAFoJ%q*p>N;0QdHOWW'FnWO5bFLEPa(JHLEfaM;uGHL'qhP(/PK"Yc+GSmY%Wgluj.fQ95gOEeWqG)"+:I4QoJ\@5AWJ!TgPRi`)<Y_e+cTf-?'q'NJ\b@5I#F1>Go"Uo9)Q&V6Z"BI3G2!l#K..J^YPH8YR`3T4CP)H&mXfK4H9j$F3Bo%cZb.;p%s;/X47"]H11=YOF'PQau$9Na&\_3>+%(/.jbA\jT7;\i&00P/)MCBRS#*=tnAIi(k!:Z`2d56=d0THP&hkX!QlA3Ci/,O7YB:h2^-;BkEmcp1u%)H,S[6-ql%4W<T/3n#2Wfg6S\5qfj02%,"T.fM1/_Y'6"5nHf,_*AR7bqo`YE!d$B+C'h=O9<2[*nN4P_W`br5-TI<;$M[e@F>?b=*XcKoRbh%K*V`1^bk`Z57#WNBkMqE1tI(jqh`%*m=.LP!5IgeF72o\IDY%mkN;O_~>endstream
|
||||
endobj
|
||||
22 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 957
|
||||
>>
|
||||
stream
|
||||
Gb"/'hf"u<&:Vr4EK=t5&`7"*Id"\Xrn+)J?(3t=Ke^'28r*\YgRl5:,Qq#rBEh2[e.@5WB-6#ZYs6Ee+S`h=2d$0oS&=k"!=@n4JC9W8rs\)^anH*ZH3VMjRP[?%JVREC*li.oZRn'(;ooUH)$sX`jS+js`s!)dKO,AW#i8ql\Uh@+NbP[k(LQiX3=qPSoaN+aT+L^g4K(l6+KG"-BA"a'[g>X)^\&^cLgitW'hPME8!b<0E0k2,&f+"5_@OT`dO^E>@K$8u'DmY+^-i]G$Nbec!^l3$L!gRVJgfE$o+44o>sOo7$(.MW]$?&9i!*R(VcfFVm$-[$\UMau+att`F#kL$^'h*Q:MBiB+0Xto13eP41dPsA:OGB#]P'[NhXgG]iq`)=>'0mIopT4(N#S3#B\OK$EJn_HBUZJ%It*c9Q@l<AK3*<@_,fqg("IEY(H'2Zi(]Enk's/.J-itB@$:G<=D5e@$\9+ecdMED;5tK[5gc1kl_6pE%bI'9X':bT@<bR6V>:8t-3(3&&isa*mM4,EA;l17A4;7ubMKlA7Aep8]9,P^k4!D%h4&(*E7gZ1J$T4i3c-tAAc-\=(55nZX;nD=s2<J9h"JIl1^+S:#CPI#B.t,s.&Ig[*]8MKOR2WZLFJ2;2T'kD;j`uFAgg62!91'[4)(@4NaWJ@.WCh:?bjr*?:j!]6JN-2]Rit7:-@<la+G=_Z$@J4A&VG8">:HQAIPHR%ENWb0$m0i/Jkrhemf<NL13h#[$tYSaZBG[XU\H%>T#o>E!%ld&db-$ar\4E/1o?0B.5b>,I7q@WKh$<IYtHEP'*(X]GrJlDE(*4j0]Zo>)R[.`OoH6Z#tUu9uNJ*at@i0B%O<&I+&R9lO%JF[OO&D>E[B2X&pUXeX@K]>8V%cfPFfuPE.R?(Nj+fZZ1gS%'bGY4"0_27+f<edbh&tD4.L6;_\"NqSW6,~>endstream
|
||||
endobj
|
||||
23 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1034
|
||||
>>
|
||||
stream
|
||||
GatU2gMRZZ&:O"KN;CtebHghJZ4#Xq6(s*-Tm;Sr\R$X<nufI97-3kT43<eO()!@,Wh_F4BBG^o:C*ckOSG0O!,j4Rif!l20UVs`P8kpAi8*JXk(p)p9:D)&XU0qZP*!8VnN@:.3R%n76UK8'VA,2FA7JenR3,j31;FSXBb>puaWa+f!(LN$?aLI^SD]<#hKWI)@IaLI:BL;MHld#Fs1Nu#'G?lGj4")ZNK9LFBM-9SM"O+[0f]$2RqYp!8q;+`8W-p]]Nchd.u^-dS[?ZrofRS(>sILEqdtUQZSJNO4?!%T!i89$_38-F?7=K`mHuXaSo'Xsec/[(7oNTUpQO20kaNHT/Xm-8NbFlugPb[fl+TSs,<@2bOu"J.#OZ4XTFoP+Z?qlM\&^aoANjFLrNbnXbZ`D#WrW(cQ4(*QG,1"f*n@EpdimZ\m7=q*GhAGg3Ua<]%`H[t.NVrOa:IYI1a`ZJHg)@cG/Z&bD6JPRSN'*\Y*J.rZHcZlUdO6sKB"c0(BW;eV*RgT'SG_3$fb]]nE(?P_u(s[iseSTI_i)c$@V8Xku#=E"VqptP(,8k<b7HWl!G8ZWZg>?7_]0dk%[&`PJY-4&!nu6*E1_R>)BRVFK=W.fM^ERjM`"=KK$*BQi$XH%dA-6N7WiKq!D&]1;Y2_=*(-b3!r`HC]h\3_>d#69@gY#MQQrIG=E!cs"hua"X`ZuNkVd8/>H?l&\lC#;Z0%2>&N>T97MEjhJ)I9p$mEHakefU:*MdH7$e2IiW<4S(@=79#IFW"HA4c+`*RNpCKlIC`^Apaa,D'W\*6GSB[^AF,r8F--cl^L%4Q+idFP$>mIYK:p*`MtD#?8>l$*k+G`@)`W32;cF:Zd\nKQ%*i8?R6?SL9fkiWnGo2@$."`Km&_/QtSnjE%-#E..F`WQP.[,,BN1eYukG]_f:W]0Icf;?qT8(a<Y!N^cYJT?b+YI74d!^_UQe)T-AMf>l<Pla_^mo8^TLcFO8K,J9a?/r,GQ)TAg&?>,A@%aHU,gS6OU&^4&!Om&qIf~>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
|
||||
0000002451 00000 n
|
||||
0000002556 00000 n
|
||||
0000004650 00000 n
|
||||
0000006591 00000 n
|
||||
0000008315 00000 n
|
||||
0000009819 00000 n
|
||||
0000011026 00000 n
|
||||
0000012315 00000 n
|
||||
0000013363 00000 n
|
||||
trailer
|
||||
<<
|
||||
/ID
|
||||
[<05bdcda7816aec63d7ee9027f38df985><05bdcda7816aec63d7ee9027f38df985>]
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
|
||||
/Info 14 0 R
|
||||
/Root 13 0 R
|
||||
/Size 24
|
||||
>>
|
||||
startxref
|
||||
14489
|
||||
%%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:20260421103114+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260421103114+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 1972
|
||||
>>
|
||||
stream
|
||||
Gb!#]?$"^Z'Rf.GkcJQ3i^d-XG2E']]@h&LQB4:AL*=CTd)A8cb\mIZ9"$9D`3Ook%26P@lJ-IQFUs3LX<+0`IOl',0LckN#pOo>:Pc6.U%)2@*"Q?[`'ar'6j=MpP08Mh,#eG>1Tm0*cNAkd/?%i?-pU$CeURW<Npm0292jA)StWL<FM2!t8i1lN>tu3N[lKo=W6C1m(>T'`<6U^#D7Q&ecKSp:E;m@Lm:L:ap_Oj`6g$Y!,5OYi]#`;N8s\%=$-Faf("]cFpQUl<IbO!5[)`i@$d:4'K0]0qWP8.jP"WY1;LL++_h+P2eGl.nKOaZu62Rj\08!hi:`q*j,Y^'HF+J4]n,Q&&;l\e<"%7l\5\LkASMF@X6Wsr:8;lBnMJ<Qk(TW>U+t-Nm,XN&s3#59#KLdt#)+oEV67#7r1N6&Rb9X&j/t=8Y;2WXb&^/SN]0VUb$j6'-RP(>@Md!j[dDW9L@Gq2gHo,ZK4qG&*:EO8Z3Y+'AVV:RuY'DmucAE0JR&++&B@hJ#bK]rrQTK9WKL2+R9X(tGcflY2D4G!XamJK&='8[cEO.,92V"3L>A^k@I'Z9,0US3WJrK4R(kd&;WX.8'ZCX8C.`JF[<d6"'kpt4*3j'\kmAe&KY@1G"2u13\`+(f7/Rq?\"CVJ#!PJQ2H[1M!msM[id7#j)OY!@o.<$'H+bD`HO@9eLc6P5X!h$#+DDl7OQjLiD'5T_g&?)"j%u\tJ26@9BFFU`eQ8r-m$akfI7M7s36/=Z+Wms/fb]YCAU1mcm99hhTMng9R=6<.U'+"Hb<u2LPC.E>[(@D+PQb#H7]$WA0+(H\F#mgUrA(GK0:)!5gR*u1e'0&_=Do-@T0?56pF)WQ&$lf=tI[_BV>*$@7[MOq[+/.E21A*9]_:$I/DVC/PXIlLkFZNm.D7&Q[Xs#u.`:=d1UB[+8DQ_+eF961t@7COJ-t_-8X$;cKB2A&T%a)T>X@X`BPA4Ck]f%07fp0#8.(*>le16D7-AF&oNm--)aNDt#O`@;%#]eKFe,u#-WZnsc;l5=C4#OuHU/Rjp^B(1)qTTb*W>Bl/5O;#B,h0dtfGQ)/Ua4AtBWliEff9U\[Y_L>EZ_HVMmD+VkOX(H&e3<<O+t=&5Mos-P]uQ"""-r$:o#5<4cTZIc@rUnXj>ZRZNjA^5iT<GKKJEK)`04u]DJpQJ*g=t"*k_OIM@i:3]-!Fb>g\O-]Neq,"E6,R:@9"1M%Ec:\2WkCJ/mh#6P4qEN;A:LIK:K*lbu\0mXfA7U=nq8n*F'O%KfXPqtNK[t-OlGJ.8<)jg?0.s?jI4?/Hk^PbcO13Hde^M4QV)],JG[;3k5j^Bdi"pS>."4Z@1FZoI--9)3nq$*$C##k:$;`G!1f7R9GRE$Le8P"npCaj=a!H/9@00aU-qq7J"!2?'gb'>l]bnpVT-W$=@_I_)?!_I7E;>7M(l`'WoA_[9c0.o:cirB,/$ihT8$;_fk<9Q7Q2q<9DV;#7#I\tjloq?Oj.hB#A8+hFVgT!D`gDaTs$E:ba"h$D>eLbJcB(snK-5'Y@<c!E/^Xn$EP,8P)E+6"sMN9o9,YcclUJA:,j;%s]BgO87:7'^U>'`q_s*df5:h8"iON9-.^s?((rtnL#_iK#ZX0;K>@Jd:U4bmVPCh2a1M%snQ=+:GlX0QS/+JQs^*hg^LM/'>YYMA1h;)U6^8e;XK\F!lsftcA$TAT'+PO%s%GIJYa=6"a8[Tc^tNRY]g7"j7GapmL,]r(-cP<GYc"qJBXYD5'sgWB3;nF#JD?X*s\'5&Pb$dhFuk7!eBas3p&@(d-/J%EA*R?1!JrALZlYG`oi.:T;nAC'saY[Y5F6PIBp*IM<QJNUNQ\ca$s6dT#IYUf"JE],UZjo5#JMLh2>MF)C3ng5fdVG0!.n(UkS=ZooQ3GU8$G03rN8%RM_2!mU#-=nANRhmhu;C&%EGcC/t<kerq?$jn9JnXWqGH#_6~>endstream
|
||||
endobj
|
||||
17 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1647
|
||||
>>
|
||||
stream
|
||||
Gb"/(>uTK;'Re<2cm.odWkN'77YBs&b=<LFT:!`2Bjf@8^]lU,qsRVc\s@tb`U5GIF>K=C1&'nq?Kjp?*%3$)7J$P_<sZK8d(<eF-pu)cU&k^eS=hhZrAC;q;DG6]1DFOL0f@,+EAgM]nG7<=)(:SePcQDZ8!FdB);X0FLG@dD_N/&BhOrpK9&=/YI($5))GP1HPT:m3E2LH@/"nEGI('dHBB)[=K]H5BcI"h8d!C7\hHJ@o<FI*2_h=Bl$Sr/FKUJen1\'$2?oHk.)oUH7<Ie.sbA?ZgDbZpjn.t83f"5FHU:c[lfpGOH8P>__L>+f$ifa<2S3#J+2KnCo`[TK-C>`KQWI5uaRB;>d:jp.'-=(gJ[Uh7dj5p641s4brBg`2rp.Id$@S*0CfqL#oqN0"k(5#L7WT]5DVg_5,r#jYh1r!<YPo75BfIDT<8G/ID8n\">5O!L.9^SaY^%:-bh@.Q%A/)`J0\T*.H$fQfCrr?8.(NH`"E`$ia^XpV'DT/K:R=#`lZp'h(t><,*K0c:K;)*Vq/0FJc(Lll]O(l;kb<=8?9GCr/Utl-H;2S?VKm[cE1OIgG^6*$1NuF>Dsj?*%b&pFq>sqeYFb3?o3br="Wq_#0>"k]g4/!L3+?(DdphosqI,%;qAZU&<IN_:O*Be3%hU`c)F#PYd"/P8AQQPaMJBH`5'KBf&OQ10G=2'96M@R*6hV*YUfe5-dkHb49V$iSjIkfQA0V1Z-bp\mF(b@3m+(0UWFEWJ']>ZgUX'mR$acJ3l:`t81=>1g#R,a/pnPp[h,IY(l$Rc3*qSj96!+-pWh$[S,MXu-0T-Xo&n.rK%fnPANA/9\C:n\IX+m599;sOE^TqU9qK5aRWF&\CaP0H\GuE90D>T3Klup;>NS-E7!+kmhQfU(aq=h,t9VVkLaW0ZCj77c-7WWBmNB>&;QJ8,PP5SFt3RQ-6MfbOKP[IEcddEqc\tl$NAH:ZYAGfXoS&XL3G]M6G*&'iG"]h9kK=!n;Ee$@OfoiYS[n?u7'Eu:HW:B]:31_IPalNA9p187YGF&Q07Ar=6?88;Zo`6re:lDdU[*kVcnN`3:]SJeD?VY73LM)qij67iRXq$0iWrqDueH%R)S`&/$5[RIq_"]0=NR*cGfr&P3q'E7f21;D_5akMZ!j]Ko=nSVVJZ8]P2!3cEl/Z[#AhEsd<<].L<RlqZWWH_Of<%H>d'q7u'+NL!oat(&Ff6MQq;H!K8Skh9dqu`VZsC:;lIL+YCsdDj^"sC'grqm7lClLm7O$`u/6mV+UJ.(bZZ<HS4k+I(7Bo?c*$2,)X-s\i@2bP70dhdm.]OIHBf@d$ljaU<)ei60+tFuH,iGBZ&ZP#Aqh/]WT9.cbTe9ee'CK\R+(5iVpZGl%-8Yt?T/H:&2ITBcAnMdO?eHd]</<W*E+]jPCr2f2[LTYNW>=-dJ).+Um<Sfk[;A727>^Vkibk7TJ*#jEA[7#\#M?8M#LHdh*fSh,bC^DaBB=]P'!h'.fYbiNi!*$sqFqs&mG7o3.Np;QJ:jr9!IiB2Af"hWAf#\C+Y+(RrN*Z)g[ii0g7gXD#-+a%QB7;3iHcAeHJ<kKJ=D&3I1:P%oqEt>DYSe_k2*n#'Yod8Gp"o8b6(&FaTGtda('pH';Ns)YH&R9~>endstream
|
||||
endobj
|
||||
18 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1651
|
||||
>>
|
||||
stream
|
||||
Gb"/);,c4/&:Vs/cm.odWjIp?M`2PJ00KTS@/@f8-:\0%*W[m\l.s*=fp62285\`+*cmOeJ0XMt[C_T&T=tV#7"8n?s([D;`tWq]VMG:GY7]l`U\"[8l/9kg24B]d3/T+SOu#d3Ui\gQ`el8JW;TiS%.83b(*P:I(7[+d:Lgc#U[.[.@/_l1qQ3,='Otkmj-IWXn-b1VqK:m87j)j:'((O"./f1SpZi_0(59M(nTZng-(,eqSW:]gR"DphNFN@ul<aD9XU((u:mBM!O[kUl(c+WlXa0r%a6,5=gf>OGl%k1N@]DJG:e5W]LnlPoI.;U8J):K5&FD&<ld*\N!G:OcYnRIIQ>>UuSa.)8=lf$g_hq%_4gD2uL0J#gY(f3NbW&uc=kKbn[NCKSOg84qICDP!<10XhC)^3t">@*FMf$@fIk*_Ure^\G9(ti=;&kL]jnm5r5VOu$H34MF^HBh%#0DSEmFkM%fVV<R(rn*al1-i"U5&X/?E@+KQLif/E3/Y%bDMGNbe:>Y6c:7h&)XN/bFh"WXWrFRAf+-0>\^IoSlM=Xc9ed:98H4gA3#7GA^:0TL+V[4EQ/`tXIOjM$qk54!P?2dB$7?hVM?q37?n)lqeEdj#%US;N\6`m^HZ;sC6TePhThe'PE]$M)aGP"-[["X<9/S0"3/s;D>$DbLSEc\mWuEP]!pJqdb,)C[>U83Xn&:3;0JSVDWe]<18a8uON266YbD]qI@8p8+,pNO/8XF"0beaLSr1PWo=qT]Cm!t#Q[<A[?G>aeLU#KK/sL1^Z+.?V0;kUI-B'P?jFAf5<'"AMBEu8rn$9q*ibFc2mX)'5@h*%YeI^,_(WC2qp%?+f@^MU0]NdnIC,LKEoh*!(5WT>^jeDQqH[f$H!=l-UfZ$UoZ-26LQt:TlkNM2Fq/filK:Yi&p0)U3J`HYF_rA3(W,;Yg'o*o9M>V*W2tUl(b)cB7R&c5.kBU"%RoZ>GnYSi9XU&+70lL5-Bu`SU2cRs.<BD@.502F]dIKQlhQR_;.d*j_SlMQ.OV_8CV/R,!0=KrHXQ0EG8!0h';L's/Zc+MB.!EBl)#r]A#<NV(_A)2A,fC9cJM<#Q0**K/l14()<\6#c`_i5,\m\U^W#J.<b!"FXQnkr:Sudu2>T];`CLsW<rr(bPY&9H2mV'M[oB^?tG=t%g`Nrc\h;pbgAM"bOM)%oXFd30ZT\A#`8M[qL7OO\S@J^06KA)<-f_$e9jh,!1)$=GL4I?):1/P*GL1fOT1.`#*dFid@F``iN\-'-UGZODK5_f&d9".&]F5QQ<\A7=55`f#$3Cuu0EI'hI1.a+4#(j1pK#(Sa'q.1al(:#^YS21DMomN@-_J^;-I^G]n\t<C1.jK\<SJ%<AMpra1TMI^ZaWHOq09)%8'ltafM<dV2IN?*^^`8DH>amA\N.O\D\kuI9AM.-/U,ZsQ.uc/(mgTr_S''3EIhVpn/=D4"5:!:SL7t&nUqTI1Q3>M\Dmnq".l_%62)ik+[+c>W1hi%#s0n04.[#^T6\:ro^VNu_K?R,isBol+klI>]m7JbBq_d9D*Do1$*suBbnNX[0iWZPo\kf>7,bnYet<,O#29f,d#1tXcEnM&%'-fgWRc]#l[0eO50]G,&:=02$iQ=O:&\T*%K6Bq:G+L~>endstream
|
||||
endobj
|
||||
19 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1644
|
||||
>>
|
||||
stream
|
||||
Gb"/'>>s99'RnB3cm.odWpU\[BJA7a\TEJg'/Q%-2,(RafO/<8s8C)!aUXIKL[CC_9El.,HoaIS8CmV/@=ZQ,QiF7U!.7JVLLU`H!U1'/$o3p9J0Z063PmXO,,g11$j`[Qej>jG`XF`RLk+pFl?78f#&+2WViW],_*1n-Q%>G!`aSD:+d2UCI82e\3i-;a;ZlTL5\93b;HH@T?C$Ar`A+ikl7a?'@9nIJnd_JQ62H$N+WrG]AqA!dnLr"#I"!tKVWhMM3Bs!]SK&sTiE.O"3,t_HP93=@Kg]G9OB7*+5F-<n.7MZn(Us,LX"4XS!!KHE1m4X<?6l/h0;l/*_m@OEnT9rfB4lugZa7^^ZEr1SG)S=TO(;mSa[pNAS>@%.0@T"QCLl_#qcIkSW<5\\RRKF<&^$"#)T!_%=^\Wk&!'I5B/;XXXQLo\4"?\a7>b2J()bCi2SNX=RjTQrb=QULNbpgQd[*e8\UHGdha`bQ'.jFShpY@G8ASZp*ehD8g/IIUKt1XdX5^k,Y\)Cumr%G&hJC._K=P_*B#ea+bZ/.,qeXG`Xr;rG6!FP7<JO958L[#?/o1eqZ*O4[[J=[!7-LZ3L"0L31Zb\fFCDTo[J@<&j'%in:hVX+#UuJ,MAE<F!"b7C!7U8DR>PIrTH]P=1JMZBB"Dg?9o)DU"^D<ss.$Io\,/l%2,u7EcA,n.7pIq7UAO;JIi8Eh3.1XIdooW)a4Q\p@V_m8V-q_>^%U:S6LAWESIURC\$a7=$ZENCH=l%5*qN(</\gThH1Qo<IKbMkp%o(7dpIq@Qja!F`+-;s+Np>@k_aEYqfCWMfErN2*)%c8;IX?g&4FH#@f+)SKanAP?tA)!Ik52Y-o^V6rDm@V_q2bu#8@UT_n=]78Y0!P;)44tjR^!"X,q'tGfeIaYTRVi&aXq6he#Z,">;lR'LM1X%!t,!XiG((kH"D&2nuNhc@<NR[oFF#9=?$aB\<`fjE'FICfQ>Gf<@+]X#6/Sb=<5]\*Q:cgaoVkq;Ph`2-RW09?`0n#D$*!Pk/n.D%*g&8qodMWcaQ-<n[(ZWsP^f%!rpb[;8%`4^=>3J.]K>ZYMM;Sm<q8_`Tm,Sq64jjmucc,A\5cjUXNM8R[ut=Ai6XlSd;A.`VK<)X2d$*nb^92#@cRF3]Z'hDP\\)N.)A2DN5kMf.?/OVW"+h0b<1$cJ;A;9`065+@J-7R;@B(l(HB+M0JVB^??%LOjVaWG9]RHuTB4b;\?%c2];&mST&gWX/]f-p]*`OG`$fKM;((-[os`Teh-Ee`YIYX?',T1oem$T2i"ugKmFa:%YGOVR]"E0I(40#>Y;E%"OhBWP_JWHI%M%WZ.6,>/cCEWuH)AcgqVY*$gL-k3S!NA^K8>qD9's-BjYmEnE)l,V%FZ\2\Ho['%*_opskSQhpsn@Wp6^oa.[I;5(rQ_c&L!jr5XVg0rC9/96A'Ze3?h]h\!R8n3#Y=[0ZSotF6Cr\(r<WaQCgqk=G[J"ZQ/YbZ__B7U(upZC_+?RKr8qh.:KodbaAm["8"H]ZG`9d/VS"kfFAK;o.R#d'0og%%@0.l9D+,HXdui[Ijq[)/A7p_1'Pi?I(gd0eQrcjCB=Bn\XNY]31o:KInT:Ja-LE2OD%SPltc;@#bl!]AC1]`~>endstream
|
||||
endobj
|
||||
20 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1706
|
||||
>>
|
||||
stream
|
||||
Gb"/'hc&8h&:Vr4Th!fSFOo`D`>]8(0>.E5Qp*6gajIo"7t:e"^&.7o[UiUe=]Xn)bRMI#+E;StmB1VBIJsM0oSXF`Y>tpW8C;>t#pOoJCIB"O./ea\FS'WBN2HY,'I\R/UmQcKHJRedeNjc4n8f9Yk4QtiLEJK)7Hph.W/?+eLYFo%UmtuejXkeGh^fhr_)mn\5jA/.Og@M.)<"['_N:GK`53'_"b8;F![L:'MYog_r@VF^!\pjaB9]-=&u5+$?,%Ii`DiWL2;Y>Z;;ATJn!&8=*u4H;Pn4)[X=ku=/Zo+H\r/"l!0G.3DMm:sVf<+W_K5;Um=!MJEZ4"b$-\5=b&L2VH13eW36&bMnXY&7gh"[pjjcIthVY`E!^23_eu5o+q)_g,YP_$AO"mJnFI&G0oB[oIgtcD`VmCFpPVb'>YRT1Rj(/(717KWNMe)CTHTUR4p))G53fV5@C+HcrpO@Hd7T(*?#S^hjbG*"S-f\a+*i>.MPM*Fe;:8aA>obKBH<pZo5^h4-H#n2E?MMMRjYs-TNs:KKNp"OIdu3JWq!dA(Hp!sqh::1i_<S,b(=cRF5]r#dd0%p%a5fm6S=HD<Z`hj=i`i'u212>^l`!4'Bg)EI$.Y*&#HG(ij^9,N*D]FBAEK<CW[bV1=I&OnTrP2,a3Um)$N8[^C4]8V>Mhas7in\/p&:'qbFeIbNtLN:cBb-JpZ\RfVWa@0KNIh$P[E:Ao>23PL8aWbj>]1Q*h`G\G"qh=19&8;<CbGLZ=D6_PsM%\N^7#P#21JY3oQRUX5FC[1Q)sIM`PbhZ_D<I\b]Q86)_(l\_1<=G03t@UYK`?.f7m'J[/f\!5Tp]?8<ma_P4DQI`6FCo4I#",icJP)t1Ac[ZNVi3**:uUaJ9+]S>mNMYU+VP1,"5SphS&WabnqrAr.8WFAU78dZnfc5Z3e7oEd87q*"jlUDXug..NcpN7^i'AFjS4-L*r[r^:.E''Hsi3q+h#&ZMp%IHQ!O\K!a./&caXoW'QLF\rbrbRZ`_[4#7JJ'L[OVS$C&Gm'o#@1>O!:55*RrI2okhAIEdpLr@9#E4;8:r!\hCf?:__/CYBq91b!bM,Zr,seC,m-S:dH4RF8qKt<eF@3-p^b5B.2X2T00J2gpdP1\Z-;j<bIu@h0&I,\K=$fK5TWNYBbW\6BZZp<0Nc[P!Em]I\l_,Z"?N.([`cM&6/6As"EC_LGTQdkbJ6BjT(C%G.8&1W`RB.[p)A[6[fe+7k/6Tb<A=O`e<&;eVI/\1>Rn)62gp7[SlSXrjo&Rp&g^lEU",j"IYL]u8_#(i.c-=\>"9*gFF`qW^-UmrYl$V-9qpd/q(_<+=NqaGq!\6H[K;8j?Nou$/uh)*&ka,nXP(A\1.s*nFa.Vg&6S;;HBSZmAAZqF'DfY'2jpm=`HX,*Ya:G05U?gGC"Cbj])M8.5OifF5.F&-XDabE]?,^l8SruO(_kM,==+GKT=ngQi"WoIKWe)s"=gX3$1Y;]TH"X*n.J&2&E;XB<=2mI[SmM:F/oR[:$l+iP=kY\A2j&hFKuR)#=dC'4.'"@;<EgVZ]d.W0Qrc#N-I-XR5<#FdLZYBp.E4N36r_k)'lMFH7CX=^tDkV1H>>43MYCmT."=Pqe:)p<@2q>j:#'R:!T[tc_\`$3!qeriRoKe&rEn7PTdg@@VCAl`^:Ct<j_@Uf-9:C9$<tONW'*PqC*u~>endstream
|
||||
endobj
|
||||
21 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1656
|
||||
>>
|
||||
stream
|
||||
Gb"/'gN)%,&:N/3i6fZ*;;<gRF(?Utl:WVUH1Hn`F_Hh6bB@EBgAZLd&d1K),UC>HVl<-qP9A.'G-P0-?njq/LWf^!9*!hEi0Uni?inblJ/Ml?4U+J=qD,o'.1oNG?j7n8&8Ru!SEYc3$77Lk5$'\<4!Vc`@%9R/-jBKMJQ2oW?Q5QTcU+Q95pCUa/g,g>>7IBMLB(>#6`_s'A*j[0N.Q-Xp6*rUHWiSH!pO?Z^:'tL-@/)e`DB/XCCR3m4#eeMV9k^dqlBNep';M_gPg""Cc8^QAIe;o]?<!LosB+X]qcW\gDWrR6iQ-]bN6G5q`KIf8B+BZ3m['&&Z"?g15H2eX!McocHQS1d,MZQ\8KgqNne9"#ij1PniBIFmP#$glS,H@K+Ln*<Xe%-<oNN/YK7#8T[6)r`5!:3,"7V)@/uH#n>3N^CT&tqR*/smFYiE37n%[nq;N/PP`+Y=S*@@9/igIAhH5j^WX/]f-p]*`OG`&:,n]B54f4>RC-?;D'MQ/?6>Ns-<_9#X_]-^ZddY!!;B"C\*5n_=M-aOA0Rtm5<AK"W0l!VK6OCiW*O>dEs#fq(Yu6[&iaF4,9YrEb(K^3UEISdj,*G:!eu0s^r11%R=8a>-.nD+PT#c1@c_#4ghVM*!n5O(8e_nM*38iQ5pt'%79u\!kjEPo1S.'b'bWoYBl@D"B*VB?W*g;0)(.'3?3FLsuq!<*m9[gn$EcsM@3&sTch/h"ApDiae&/k#a@2CkHpT(B6GliOKN^fO\^uRI88P[b+fnX9^nM0$nPDVEaOR^s`BRf@cXiHF2jacO9qm24Fm,[[.id<kZUr.X=qI=t7j;L=*fLX@[S[CT>SHDnCoC1sSE]PGOScrC]kG34D\]0_5bT(XGh^h+4dOjAjNqjqFL,MV8JMQ@bE!,W4&4a`D_gXXBT*5t-Yg5dpL_6592`8B)EUjhZa0slZPj?aL+l/)d%V;i][%<h,0k,c<RSYp]]<PgVfS]+n^$-h0=2?B>>2<lg.;)Y>MLO0Uqg7QI(D:2RHeBAT*"#^'I^f\n&aTP0lN1co<(\Y[aM-UNDU]2;`T!u&DJLP$4F9!k$tK)%krMQQ.79[?OfOe.;a.:/38^rP&a+S0oanlHc!b5=ef:Qm&^=a)gJT#'ZiAR6102pgYIohld:.lHh\9iH";.o"fKM#rT`ZJK)""=B[`*%njeff&gWBpThD%A=0XdAe-F(`CH!42akkmW:he$)\A6%S7_I$:dL5hkU>rs+0"^BM3C.2U<iA((]c\f?S+uaG,HY:*!^=p^>*$f;341+Y(-lGr$P-&?5l67/b+KIAbB$1Eh^q`rec(^)$U0Z=bYsMjEMQH"'\"3b((#<glmL!\^?Vi85C7f0R[3h/\^`Fui.4UAS(7As&($E-b,oY'2*92JaCKTTss8=ZdCUd&?cVZ@#Um+6aradahUkCeEpT>0=c+L<)Fi%FTn:+[jm%/=23oLIu$)@/2LK(l@i=Ag5N&p\HQO0E.mE1)H>F?$Qo;450ATLs^Lb7P3'FHR]T)QtbKlk"#TjYSN]@pBNmf+l81&3pX.=5ddZ7ome4%?.N^0,a,?JqHL/7pcu-0cQ@l]hRd\L9q!a3.ZZJENthafeggB'"R"4hE`mgkYC8d(oqsR$YC!CZOm-@.Z,6P=WR~>endstream
|
||||
endobj
|
||||
22 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1659
|
||||
>>
|
||||
stream
|
||||
Gb"/)>uTK;'Re<2cm.od>$l\\if+/k9t*AHQp*6gajRu#97R4&h>R'uq*UI#A]87CATomIl6n^)\lVtE3^-J-Oo@WFn'qc=G:ECM(_@7C?6`jFU%BR%da>N9PfPi$;@$Z$`.1,[V8qh<XCB"T5b$*mc03H3M^2c%@a6Ajq]O:4JZdmFUZPKa<7D*Y(lh27/nY:Q;A$8DXW^./3b_.!PQ]*U,tYY-qT!=o3DqS(=(q'Or+>JTQ8a$^lV#B/nb<<b?W$[.`1).!N=ZFVNZkQAOj1/%%`Bh=PV,uIg4:o8]52c+]UEKVqn""8PibO7/:pVM"?9^=rlWg`X.^T!VHD?o"%Mljaa1XF=q=g9dR)H!>/Kksmr%Ttnh%Y5)DZMNVVg1JFudc%Sb*)sH<NJfk*p:f'8=->\so/Y62u?R@7aqJoblM/:>_*d7Gm^c'VSN0-Z7>Brl#p1dpX2<J(3h@m*>mq)5.s9<'<]P&Z8"*WX`;rS.=AT3codh3crP?hjhBKS.JOKP]=Mt.d)9,5BW)'":IY_rZX>a,Sm8u[KF`I-/`"&pf()WX3$>mUT2eQG@]-mc'Pp'+l@YP:?J"jfS[u]F6:=bU5BM8M%h5t#ZG0Gf]l"2.k"Fl7=%ejnLn,[I]G-3+oFe7?OmoM*mkgGhq;HEJ7EKcLuttL."QYm%G0P1mfs@?Ur7p"#<V1KqY$#k'^NG%SRIAQ9NOS0Q^H2LG(uN"oB[oIi6@`(\sGb&V&9OiK*<;l`kNk,BemCn-6Kjd_iA/dJJG->fXt[b7;egnIsPAN(M3ssJY4Qu#\na13_lR:@6-D1SUI(L-/IP5dD><'nrf(o&>-r(b[obfT))27EAS6&"XY=TPN4P`T7*.T(S:fGfhoTD/.siIb-T_Oe=SflX*FeU=l=SriTt#74#oF:3$1pDBm3girD6`7\OFpt2NTanSQ[(jc2ropH$FEd3M""1Z_=GXm&4<2(+DR1ZcJ0u<nRg#\!ECP.&O+^8-S(JLft1B_l@sW^"$q6j6<j!EsoU%KSU1f.X@BbH?bfek]ILj7`o9(/l[haDicMGS*@)if=aSN,$?p3Wu?+FjfHOcl*lYPhb3,l:^g6Ifc1746<:;>>URoE]7W<%6u!O7<3f2nB6kobg3b8L1j=?k!T[e]m/:%i+ib+#Y/<(no0Fa[J1dM3PRlgd@/r]_pAl3W%="7WdrIO8%9RKq[gg7BCc5\1S_l?l[M.BA9"\+(!Em&ojt@s/1t^d<Dk<4'&eVAjZ$i@AM@PG)i,mFQ[kFJ;092BOUk`]0dg[397*s6h?>(0G:PB^?ZMSHe],9U,BaRn'lmIShV2dB4GVDZ)W=4W4dfXfkcR#8rVS?F)Sc*a-Arn+]9%J.eh9Q\sW7hQ"s##AQ>h(IS;F)V3Ulm2MkrFLB<Snp?NiXTHPgM=)(Mf+%e$ND0rqe`jX%+O:!M,<C^mb5B?=mn2C^'U]3[(`KR;8]6mW?>GRni0oF`5Y6I<*+u-[`0ofM><_+;A]*S](f-lRs(J;F(PdKg7sddmF!poC_@$6#ChD'CKtZf<,bgO]Y-S0:`1X@jh@B67ISD3qiGDKk`]K:bXhcTDq,rau?_paAJdjk;#l[2uf4X;/Ln%K`b`MojNcF5OYR$aoLh3!]4"RHG'bbp[k-+5NK^Q_u~>endstream
|
||||
endobj
|
||||
23 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1231
|
||||
>>
|
||||
stream
|
||||
Gb!#\9iKe#&A@7.kQoC3[D&d"+Ll8:"Ib^LR)rl:_k^!4"D?Hfqb"<([]+,+S2q^qjaC=GVd4(^6;V2F;Z'n'&NWS4qi:jlMUHi>39DX&6qKFa*Y=*+&WW\5*(ckYd8HHZ`f.<g>S6W)^3ph\g3Ji*/f5@o1%^LEBUb^m'B@SK*lE7B-KLT;YidDu^pB&QN`E-[J7$\RZf.7YC's>rX2q5qRt29IV'mr?93kfI9-78eL`e*OUSIG:p5THBTmW'M=4o<#J"ZGP_/4L?qOidTV2,1SA52:2CBse`%!t)-B)[n*3!TD-GS:8D8FErL&[g`,ht_H0bg"VmdIij<j+DS9O*iT%>1I:;+!*@P8.O>[kDSas5j;`UR]W1jJa_9%^:[f*k4s&hGR+Q;NlLs-K-W;i75Pd812sBUgQ)@gZRFLEZeb>Jm<9VG]p>L+d[[EtM]r<aeVC6nh!DLnR4bC_DM"IR`GW@nQ05u7,YEP`IIh8<\M/Lt"urK;S($BiII_*&)>[@'C_9j_)R;\.o*148COe]^O.(e/?<]t@$sS/F-8Pdg.5>t/)1ot0QFb0H]h(.Bk_b%.E)78Qd9n(H!j&XjX"E46h(MO&/9frKJ:Uf![CE5o/h**TC@a[r(0!k0d9?W<CB-IU.Z9'#Xu=oj06EHq8*;d[o(d<[Sr.@`:eQKh)/(\5H)fH41h)nOKP<!:&dU:-*s,.:em(^W;WH?c'/[jNHO%p\[Cm_s3,L>KI88P/JS'\d0?/G3$B)'JQ.n?RX4l2'c2f5r.!iT7SGmg!!0]C^<6uP,e5Jipe5-RC>[t0U8]SC1V_A]m`ZeEP1<o"X0!E*\D%Psh$E]g;'%dBgIN/e]-aQB"]M1k^rS%?ope,!"!(f`e'U/]Ao<X(TWPI@p5SO2k;8__i0U\`7l0*FUq_gK2qW5Q[TKGKr;5s]o!*cfs=]]p<,L#+K5U6?-ai3r?A9N)V^7>`]UU4AK9FIj&j;ZSL2P?'dgtGF#UCMgrATF&pe*642P2(KoKW]>;&dLr?Kea=7h3gk5="=?X!*Ejql1rkC4<q1mK_D]Z<_sPSAOmOYHbMH-/+gB[BVHYEDa$NN:kTOj*[%jK9gj`<C!U,AlYTg$T@D8L\],,0*KAm)hf*T#Jltq>K8MUEGnDrMp<T"h8mMY%B\30TZ89>?(g/p/]Y1YBj$I5glcsC.$\`0YJ%lRBLc3mKrAXr.:lJm)]0P*3dGQZ`qsBg~>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
|
||||
0000004628 00000 n
|
||||
0000006367 00000 n
|
||||
0000008110 00000 n
|
||||
0000009846 00000 n
|
||||
0000011644 00000 n
|
||||
0000013392 00000 n
|
||||
0000015143 00000 n
|
||||
trailer
|
||||
<<
|
||||
/ID
|
||||
[<01a4daea9a4820dcaaed648811d43bad><01a4daea9a4820dcaaed648811d43bad>]
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
|
||||
/Info 14 0 R
|
||||
/Root 13 0 R
|
||||
/Size 24
|
||||
>>
|
||||
startxref
|
||||
16466
|
||||
%%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:16:17.260420",
|
||||
"fin": "2026-04-21T10:17:29.584121",
|
||||
"duree_totale_s": 72.32,
|
||||
"nb_pages_total": 6,
|
||||
"pages": [
|
||||
{
|
||||
"page": 1,
|
||||
"type": "FICHE_RECUEIL",
|
||||
"duree_identification_s": 4.81,
|
||||
"duree_extraction_s": 9.64,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 2,
|
||||
"type": "FICHE_RECUEIL",
|
||||
"duree_identification_s": 4.72,
|
||||
"duree_extraction_s": 12.27,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 3,
|
||||
"type": "SEJOUR_MANUSCRIT",
|
||||
"duree_identification_s": 4.93,
|
||||
"duree_extraction_s": null,
|
||||
"statut": "ignoree",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 4,
|
||||
"type": "ELEMENTS_PREUVE",
|
||||
"duree_identification_s": 4.67,
|
||||
"duree_extraction_s": 9.45,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 5,
|
||||
"type": "FICHE_ADMIN_1_2",
|
||||
"duree_identification_s": 4.32,
|
||||
"duree_extraction_s": 6.83,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 6,
|
||||
"type": "FICHE_ADMIN_2_2",
|
||||
"duree_identification_s": 4.86,
|
||||
"duree_extraction_s": 5.2,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
}
|
||||
],
|
||||
"erreurs": [],
|
||||
"blocages_429": [],
|
||||
"retries_total": 0
|
||||
},
|
||||
{
|
||||
"fichier": "OGC 358.pdf",
|
||||
"debut": "2026-04-21T10:17:29.587640",
|
||||
"fin": "2026-04-21T10:18:31.688689",
|
||||
"duree_totale_s": 62.1,
|
||||
"nb_pages_total": 6,
|
||||
"pages": [
|
||||
{
|
||||
"page": 1,
|
||||
"type": "FICHE_RECUEIL",
|
||||
"duree_identification_s": 5.21,
|
||||
"duree_extraction_s": 10.65,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 2,
|
||||
"type": "FICHE_CONCERTATION_VIDE",
|
||||
"duree_identification_s": 4.56,
|
||||
"duree_extraction_s": null,
|
||||
"statut": "ignoree",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 3,
|
||||
"type": "SEJOUR_MANUSCRIT",
|
||||
"duree_identification_s": 4.73,
|
||||
"duree_extraction_s": null,
|
||||
"statut": "ignoree",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 4,
|
||||
"type": "ELEMENTS_PREUVE",
|
||||
"duree_identification_s": 4.32,
|
||||
"duree_extraction_s": 9.14,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 5,
|
||||
"type": "FICHE_ADMIN_2_2",
|
||||
"duree_identification_s": 4.29,
|
||||
"duree_extraction_s": 5.44,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 6,
|
||||
"type": "FICHE_ADMIN_1_2",
|
||||
"duree_identification_s": 5.15,
|
||||
"duree_extraction_s": 7.79,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
}
|
||||
],
|
||||
"erreurs": [],
|
||||
"blocages_429": [],
|
||||
"retries_total": 0
|
||||
},
|
||||
{
|
||||
"fichier": "OGC 368.pdf",
|
||||
"debut": "2026-04-21T10:18:31.689115",
|
||||
"fin": "2026-04-21T10:19:34.838029",
|
||||
"duree_totale_s": 63.15,
|
||||
"nb_pages_total": 6,
|
||||
"pages": [
|
||||
{
|
||||
"page": 1,
|
||||
"type": "FICHE_RECUEIL",
|
||||
"duree_identification_s": 4.78,
|
||||
"duree_extraction_s": 11.69,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 2,
|
||||
"type": "FICHE_CONCERTATION_VIDE",
|
||||
"duree_identification_s": 4.44,
|
||||
"duree_extraction_s": null,
|
||||
"statut": "ignoree",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 3,
|
||||
"type": "SEJOUR_MANUSCRIT",
|
||||
"duree_identification_s": 5.0,
|
||||
"duree_extraction_s": null,
|
||||
"statut": "ignoree",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 4,
|
||||
"type": "ELEMENTS_PREUVE",
|
||||
"duree_identification_s": 4.8,
|
||||
"duree_extraction_s": 8.83,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 5,
|
||||
"type": "FICHE_ADMIN_2_2",
|
||||
"duree_identification_s": 4.91,
|
||||
"duree_extraction_s": 6.62,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 6,
|
||||
"type": "FICHE_ADMIN_1_2",
|
||||
"duree_identification_s": 5.24,
|
||||
"duree_extraction_s": 6.03,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
}
|
||||
],
|
||||
"erreurs": [],
|
||||
"blocages_429": [],
|
||||
"retries_total": 0
|
||||
},
|
||||
{
|
||||
"fichier": "OGC 371.pdf",
|
||||
"debut": "2026-04-21T10:19:34.842501",
|
||||
"fin": "2026-04-21T10:20:34.886910",
|
||||
"duree_totale_s": 60.04,
|
||||
"nb_pages_total": 6,
|
||||
"pages": [
|
||||
{
|
||||
"page": 1,
|
||||
"type": "FICHE_RECUEIL",
|
||||
"duree_identification_s": 4.78,
|
||||
"duree_extraction_s": 10.63,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 2,
|
||||
"type": "FICHE_CONCERTATION_VIDE",
|
||||
"duree_identification_s": 4.39,
|
||||
"duree_extraction_s": null,
|
||||
"statut": "ignoree",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 3,
|
||||
"type": "ELEMENTS_PREUVE",
|
||||
"duree_identification_s": 4.4,
|
||||
"duree_extraction_s": 9.22,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 4,
|
||||
"type": "SEJOUR_MANUSCRIT",
|
||||
"duree_identification_s": 4.72,
|
||||
"duree_extraction_s": null,
|
||||
"statut": "ignoree",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 5,
|
||||
"type": "FICHE_ADMIN_2_2",
|
||||
"duree_identification_s": 4.52,
|
||||
"duree_extraction_s": 5.25,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 6,
|
||||
"type": "FICHE_ADMIN_1_2",
|
||||
"duree_identification_s": 4.74,
|
||||
"duree_extraction_s": 6.29,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
}
|
||||
],
|
||||
"erreurs": [],
|
||||
"blocages_429": [],
|
||||
"retries_total": 0
|
||||
},
|
||||
{
|
||||
"fichier": "OGC 373.pdf",
|
||||
"debut": "2026-04-21T10:20:34.888041",
|
||||
"fin": "2026-04-21T10:21:42.319224",
|
||||
"duree_totale_s": 67.43,
|
||||
"nb_pages_total": 6,
|
||||
"pages": [
|
||||
{
|
||||
"page": 1,
|
||||
"type": "FICHE_RECUEIL",
|
||||
"duree_identification_s": 4.59,
|
||||
"duree_extraction_s": 14.99,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 2,
|
||||
"type": "FICHE_CONCERTATION_VIDE",
|
||||
"duree_identification_s": 4.31,
|
||||
"duree_extraction_s": null,
|
||||
"statut": "ignoree",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 3,
|
||||
"type": "SEJOUR_MANUSCRIT",
|
||||
"duree_identification_s": 4.53,
|
||||
"duree_extraction_s": null,
|
||||
"statut": "ignoree",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 4,
|
||||
"type": "ELEMENTS_PREUVE",
|
||||
"duree_identification_s": 4.38,
|
||||
"duree_extraction_s": 9.24,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 5,
|
||||
"type": "FICHE_ADMIN_1_2",
|
||||
"duree_identification_s": 4.76,
|
||||
"duree_extraction_s": 6.26,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 6,
|
||||
"type": "FICHE_ADMIN_2_2",
|
||||
"duree_identification_s": 4.38,
|
||||
"duree_extraction_s": 9.06,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
}
|
||||
],
|
||||
"erreurs": [],
|
||||
"blocages_429": [],
|
||||
"retries_total": 0
|
||||
},
|
||||
{
|
||||
"fichier": "OGC 385.pdf",
|
||||
"debut": "2026-04-21T10:21:42.320662",
|
||||
"fin": "2026-04-21T10:23:30.340651",
|
||||
"duree_totale_s": 108.02,
|
||||
"nb_pages_total": 6,
|
||||
"pages": [
|
||||
{
|
||||
"page": 1,
|
||||
"type": "FICHE_RECUEIL",
|
||||
"duree_identification_s": 26.59,
|
||||
"duree_extraction_s": 11.52,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 2,
|
||||
"type": "FICHE_CONCERTATION_VIDE",
|
||||
"duree_identification_s": 4.54,
|
||||
"duree_extraction_s": null,
|
||||
"statut": "ignoree",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 3,
|
||||
"type": "ELEMENTS_PREUVE",
|
||||
"duree_identification_s": 5.1,
|
||||
"duree_extraction_s": 9.09,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 4,
|
||||
"type": "SEJOUR_MANUSCRIT",
|
||||
"duree_identification_s": 5.2,
|
||||
"duree_extraction_s": null,
|
||||
"statut": "ignoree",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 5,
|
||||
"type": "FICHE_ADMIN_2_2",
|
||||
"duree_identification_s": 28.73,
|
||||
"duree_extraction_s": 5.33,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 6,
|
||||
"type": "FICHE_ADMIN_1_2",
|
||||
"duree_identification_s": 4.92,
|
||||
"duree_extraction_s": 6.12,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
}
|
||||
],
|
||||
"erreurs": [],
|
||||
"blocages_429": [],
|
||||
"retries_total": 0
|
||||
},
|
||||
{
|
||||
"fichier": "OGC 397.pdf",
|
||||
"debut": "2026-04-21T10:23:30.348601",
|
||||
"fin": "2026-04-21T10:24:30.467269",
|
||||
"duree_totale_s": 60.12,
|
||||
"nb_pages_total": 6,
|
||||
"pages": [
|
||||
{
|
||||
"page": 1,
|
||||
"type": "FICHE_RECUEIL",
|
||||
"duree_identification_s": 4.81,
|
||||
"duree_extraction_s": 10.82,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 2,
|
||||
"type": "FICHE_CONCERTATION_VIDE",
|
||||
"duree_identification_s": 4.59,
|
||||
"duree_extraction_s": null,
|
||||
"statut": "ignoree",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 3,
|
||||
"type": "SEJOUR_MANUSCRIT",
|
||||
"duree_identification_s": 4.5,
|
||||
"duree_extraction_s": null,
|
||||
"statut": "ignoree",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 4,
|
||||
"type": "ELEMENTS_PREUVE",
|
||||
"duree_identification_s": 4.56,
|
||||
"duree_extraction_s": 9.41,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 5,
|
||||
"type": "FICHE_ADMIN_1_2",
|
||||
"duree_identification_s": 4.51,
|
||||
"duree_extraction_s": 6.05,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 6,
|
||||
"type": "FICHE_ADMIN_2_2",
|
||||
"duree_identification_s": 4.36,
|
||||
"duree_extraction_s": 5.15,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
}
|
||||
],
|
||||
"erreurs": [],
|
||||
"blocages_429": [],
|
||||
"retries_total": 0
|
||||
},
|
||||
{
|
||||
"fichier": "OGC 398.pdf",
|
||||
"debut": "2026-04-21T10:24:30.468566",
|
||||
"fin": "2026-04-21T10:25:35.618130",
|
||||
"duree_totale_s": 65.15,
|
||||
"nb_pages_total": 6,
|
||||
"pages": [
|
||||
{
|
||||
"page": 1,
|
||||
"type": "FICHE_RECUEIL",
|
||||
"duree_identification_s": 6.26,
|
||||
"duree_extraction_s": 10.86,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 2,
|
||||
"type": "FICHE_CONCERTATION_VIDE",
|
||||
"duree_identification_s": 4.25,
|
||||
"duree_extraction_s": null,
|
||||
"statut": "ignoree",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 3,
|
||||
"type": "ELEMENTS_PREUVE",
|
||||
"duree_identification_s": 4.48,
|
||||
"duree_extraction_s": 9.33,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 4,
|
||||
"type": "SEJOUR_MANUSCRIT",
|
||||
"duree_identification_s": 4.37,
|
||||
"duree_extraction_s": null,
|
||||
"statut": "ignoree",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 5,
|
||||
"type": "FICHE_ADMIN_2_2",
|
||||
"duree_identification_s": 4.28,
|
||||
"duree_extraction_s": 5.83,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 6,
|
||||
"type": "FICHE_ADMIN_1_2",
|
||||
"duree_identification_s": 4.82,
|
||||
"duree_extraction_s": 9.77,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
}
|
||||
],
|
||||
"erreurs": [],
|
||||
"blocages_429": [],
|
||||
"retries_total": 0
|
||||
},
|
||||
{
|
||||
"fichier": "OGC 404.pdf",
|
||||
"debut": "2026-04-21T10:25:35.619092",
|
||||
"fin": "2026-04-21T10:26:43.866215",
|
||||
"duree_totale_s": 68.25,
|
||||
"nb_pages_total": 6,
|
||||
"pages": [
|
||||
{
|
||||
"page": 1,
|
||||
"type": "FICHE_RECUEIL",
|
||||
"duree_identification_s": 4.84,
|
||||
"duree_extraction_s": 10.5,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 2,
|
||||
"type": "FICHE_CONCERTATION_VIDE",
|
||||
"duree_identification_s": 4.18,
|
||||
"duree_extraction_s": null,
|
||||
"statut": "ignoree",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 3,
|
||||
"type": "ELEMENTS_PREUVE",
|
||||
"duree_identification_s": 4.32,
|
||||
"duree_extraction_s": 10.8,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 4,
|
||||
"type": "SEJOUR_MANUSCRIT",
|
||||
"duree_identification_s": 4.72,
|
||||
"duree_extraction_s": null,
|
||||
"statut": "ignoree",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 5,
|
||||
"type": "FICHE_ADMIN_2_2",
|
||||
"duree_identification_s": 9.48,
|
||||
"duree_extraction_s": 5.92,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 6,
|
||||
"type": "FICHE_ADMIN_1_2",
|
||||
"duree_identification_s": 5.17,
|
||||
"duree_extraction_s": 7.43,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
}
|
||||
],
|
||||
"erreurs": [],
|
||||
"blocages_429": [],
|
||||
"retries_total": 0
|
||||
},
|
||||
{
|
||||
"fichier": "OGC 411.pdf",
|
||||
"debut": "2026-04-21T10:26:43.869120",
|
||||
"fin": "2026-04-21T10:27:44.984002",
|
||||
"duree_totale_s": 61.12,
|
||||
"nb_pages_total": 6,
|
||||
"pages": [
|
||||
{
|
||||
"page": 1,
|
||||
"type": "FICHE_RECUEIL",
|
||||
"duree_identification_s": 4.69,
|
||||
"duree_extraction_s": 11.2,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 2,
|
||||
"type": "FICHE_CONCERTATION_VIDE",
|
||||
"duree_identification_s": 4.68,
|
||||
"duree_extraction_s": null,
|
||||
"statut": "ignoree",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 3,
|
||||
"type": "ELEMENTS_PREUVE",
|
||||
"duree_identification_s": 5.17,
|
||||
"duree_extraction_s": 8.66,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 4,
|
||||
"type": "SEJOUR_MANUSCRIT",
|
||||
"duree_identification_s": 4.26,
|
||||
"duree_extraction_s": null,
|
||||
"statut": "ignoree",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 5,
|
||||
"type": "FICHE_ADMIN_2_2",
|
||||
"duree_identification_s": 4.64,
|
||||
"duree_extraction_s": 5.44,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 6,
|
||||
"type": "FICHE_ADMIN_1_2",
|
||||
"duree_identification_s": 5.62,
|
||||
"duree_extraction_s": 5.91,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
}
|
||||
],
|
||||
"erreurs": [],
|
||||
"blocages_429": [],
|
||||
"retries_total": 0
|
||||
},
|
||||
{
|
||||
"fichier": "OGC 413.pdf",
|
||||
"debut": "2026-04-21T10:27:44.986082",
|
||||
"fin": "2026-04-21T10:28:53.878912",
|
||||
"duree_totale_s": 68.9,
|
||||
"nb_pages_total": 6,
|
||||
"pages": [
|
||||
{
|
||||
"page": 1,
|
||||
"type": "FICHE_RECUEIL",
|
||||
"duree_identification_s": 4.64,
|
||||
"duree_extraction_s": 10.82,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 2,
|
||||
"type": "FICHE_CONCERTATION_VIDE",
|
||||
"duree_identification_s": 4.39,
|
||||
"duree_extraction_s": null,
|
||||
"statut": "ignoree",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 3,
|
||||
"type": "ELEMENTS_PREUVE",
|
||||
"duree_identification_s": 4.42,
|
||||
"duree_extraction_s": 17.8,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 4,
|
||||
"type": "SEJOUR_MANUSCRIT",
|
||||
"duree_identification_s": 4.72,
|
||||
"duree_extraction_s": null,
|
||||
"statut": "ignoree",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 5,
|
||||
"type": "FICHE_ADMIN_1_2",
|
||||
"duree_identification_s": 4.76,
|
||||
"duree_extraction_s": 6.3,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 6,
|
||||
"type": "FICHE_ADMIN_2_2",
|
||||
"duree_identification_s": 4.99,
|
||||
"duree_extraction_s": 5.12,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
}
|
||||
],
|
||||
"erreurs": [],
|
||||
"blocages_429": [],
|
||||
"retries_total": 0
|
||||
},
|
||||
{
|
||||
"fichier": "OGC 425.pdf",
|
||||
"debut": "2026-04-21T10:28:53.882864",
|
||||
"fin": "2026-04-21T10:30:01.999566",
|
||||
"duree_totale_s": 68.12,
|
||||
"nb_pages_total": 6,
|
||||
"pages": [
|
||||
{
|
||||
"page": 1,
|
||||
"type": "FICHE_RECUEIL",
|
||||
"duree_identification_s": 5.33,
|
||||
"duree_extraction_s": 14.5,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 2,
|
||||
"type": "FICHE_CONCERTATION_VIDE",
|
||||
"duree_identification_s": 4.57,
|
||||
"duree_extraction_s": null,
|
||||
"statut": "ignoree",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 3,
|
||||
"type": "SEJOUR_MANUSCRIT",
|
||||
"duree_identification_s": 4.36,
|
||||
"duree_extraction_s": null,
|
||||
"statut": "ignoree",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 4,
|
||||
"type": "ELEMENTS_PREUVE",
|
||||
"duree_identification_s": 4.8,
|
||||
"duree_extraction_s": 12.04,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 5,
|
||||
"type": "FICHE_ADMIN_1_2",
|
||||
"duree_identification_s": 4.5,
|
||||
"duree_extraction_s": 7.19,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 6,
|
||||
"type": "FICHE_ADMIN_2_2",
|
||||
"duree_identification_s": 4.41,
|
||||
"duree_extraction_s": 5.35,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
}
|
||||
],
|
||||
"erreurs": [],
|
||||
"blocages_429": [],
|
||||
"retries_total": 0
|
||||
},
|
||||
{
|
||||
"fichier": "OGC 429.pdf",
|
||||
"debut": "2026-04-21T10:30:02.002040",
|
||||
"fin": "2026-04-21T10:31:14.505352",
|
||||
"duree_totale_s": 72.5,
|
||||
"nb_pages_total": 6,
|
||||
"pages": [
|
||||
{
|
||||
"page": 1,
|
||||
"type": "FICHE_RECUEIL",
|
||||
"duree_identification_s": 4.87,
|
||||
"duree_extraction_s": 21.76,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 2,
|
||||
"type": "FICHE_CONCERTATION_VIDE",
|
||||
"duree_identification_s": 4.34,
|
||||
"duree_extraction_s": null,
|
||||
"statut": "ignoree",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 3,
|
||||
"type": "SEJOUR_MANUSCRIT",
|
||||
"duree_identification_s": 4.7,
|
||||
"duree_extraction_s": null,
|
||||
"statut": "ignoree",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 4,
|
||||
"type": "ELEMENTS_PREUVE",
|
||||
"duree_identification_s": 4.5,
|
||||
"duree_extraction_s": 10.16,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 5,
|
||||
"type": "FICHE_ADMIN_1_2",
|
||||
"duree_identification_s": 4.88,
|
||||
"duree_extraction_s": 6.01,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
},
|
||||
{
|
||||
"page": 6,
|
||||
"type": "FICHE_ADMIN_2_2",
|
||||
"duree_identification_s": 4.92,
|
||||
"duree_extraction_s": 5.49,
|
||||
"statut": "ok",
|
||||
"erreur": null
|
||||
}
|
||||
],
|
||||
"erreurs": [],
|
||||
"blocages_429": [],
|
||||
"retries_total": 0
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user