# Bench V2 (Qwen2.5-VL-3B) vs V0 legacy — 18 dossiers OGC 2018

Bench terminé (18/18 JSONs dans `output/v2/`, 0 parse_error, 0 truncated_loop).
Temps VLM cumulé **495 s** ≈ **27.5 s / dossier** sur 6 pages. Legacy non-GT : les chiffres ci-dessous mesurent l'écart, pas la justesse absolue.

## Couverture & accord (page `recueil`)

| Champ | V2 extr. | Legacy extr. | Accord (both) | Diffs |
|---|---:|---:|---:|---:|
| n_ogc / finess / date_debut_controle | 100% | 94% | 100% | 0 |
| etablissement / dates_sejour | 100% | 94% | 94% | 1 |
| codage_etab.dp | 100% | 94% | 76% | 4 |
| codage_etab.dp_libelle | 94% | 94% | 69% | 5 |
| codage_etab.dr | 77% | 38% | 20% | 4 |
| **codage_reco.dp** | **27%** | 94% | 25% | 3 |
| ghm_etab / ghs_etab | 100% | 83–88% | 81–87% | 2–3 |
| ghm_reco / ghs_reco | 100% | 77% | 93% | 1 |
| recodage_impactant | 100% | 88% | 75% | 4 |
| ghs_injustifie | 100% | 66% | 42% | 7 |
| accord_desaccord | 100% | 94% | 82% | 3 |
| praticien_conseil | 88% | 94% | 47% | 8 |

**DAS** : etab 31/47 récupérés (66%), **reco 5/41 (12%)**.

## Audit visuel — 3 divergences `codage_reco.dp`

| Dossier | Legacy | V2 | Réalité (image) | Gagnant |
|---|---|---|---|---|
| OGC 20 | `D274` | `D374` | **D374** | **V2** (legacy fautif) |
| OGC 66 | `C780` | `C07` (copie etab) | **C780** | **Legacy** |
| OGC 74 | `B991` | `A099` (copie etab) | **≈B991** | **Legacy** |

Pattern : V2 laisse vide (13/18) ou recopie `codage_etab.dp` (3/18) au lieu de lire la colonne droite.

## Top 5 améliorations V2

1. **GHM/GHS reco** 100% vs 77% couverture (+4 dossiers).
2. **Corrections OCR crédibles** : OGC 27 `1652` (invalide CIM-10) → `I652` ; OGC 66 `CO7` → `C07`.
3. **Zéro parse error** / JSON toujours bien formé (vs boucles DAS tronquées en legacy).
4. **`codage_etab.dr`** mieux rempli : 77% vs 38%.
5. **Entête 100% stable** (finess, dates, n_ogc, étab) — plus aucun rateau.

## Top 3 régressions V2

1. **`codage_reco.*` sous-extrait** : dp 27% vs 94%, DAS reco 12% de récupération. La colonne Recodage est structurellement ignorée.
2. **`praticien_conseil` halluciné** : « DR VIGNAU » dans **15/18** dossiers, y compris où legacy lit clairement PIAU, POSE CATHERINE, Masson. Biais fréquentiel.
3. **`ghs_injustifie` non structuré** : renvoie le libellé complet « 0 SE 1 2 3 4 ATU FFM FSD » au lieu de la case cochée (7 désaccords).

## Verdict

**V2 n'est PAS prêt à remplacer V0 en l'état.** Les champs d'entête, GHM/GHS et DP etab progressent clairement, mais la **colonne Recodage — cœur métier du contrôle T2A** — est quasi-ignorée. Déployer perdrait l'information la plus utile du dossier.
Blocages : (a) extraction `codage_reco.*`, (b) hallucination `praticien_conseil`, (c) `ghs_injustifie` non structuré.

## Actions priorisées

1. **P0 — Prompt `recueil` avec colonne Recodage explicite** : few-shot montrant les deux colonnes (Codage étab | Recodage), demander séparément `codage_reco.{dp,dr,das}`. Tester un crop ciblé demi-page droite avec passe dédiée.
2. **P1 — Anti-hallucination `praticien_conseil`** : contrainte prompt (« si illisible, chaîne vide, ne jamais deviner ») + éventuelle passe OCR manuscrit sur crop bas de page. Valider que VIGNAU ne redevient pas défaut.
3. **P2 — Structurer `ghs_injustifie`** via `checkboxes.py` (case cochée, pas libellé). Au passage corriger `pipeline/persist.py` : `ocr_model="Qwen/Qwen2.5-VL-3B-Instruct"`, `pipeline_version="v2"` (actuellement tag "GLM-OCR" obsolète dans `_meta`).
