From c93dc34a70f4715894d81dcf4427f844ec60d842 Mon Sep 17 00:00:00 2001 From: Domi31tls Date: Fri, 26 Jun 2026 09:50:07 +0200 Subject: [PATCH] =?UTF-8?q?docs(beta):=20plan=201b=20=E2=80=94=20d=C3=A9ci?= =?UTF-8?q?sion=20Dom=20CODE=5FPOSTAL=20suit=20le=20toggle=20Adresses=20(c?= =?UTF-8?q?at=C3=A9gorie=20ADRESSE)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- .../2026-06-25-gui-v6-beta-plan-1b-gating-coeur.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/docs/superpowers/plans/2026-06-25-gui-v6-beta-plan-1b-gating-coeur.md b/docs/superpowers/plans/2026-06-25-gui-v6-beta-plan-1b-gating-coeur.md index d28d620..0b4e200 100644 --- a/docs/superpowers/plans/2026-06-25-gui-v6-beta-plan-1b-gating-coeur.md +++ b/docs/superpowers/plans/2026-06-25-gui-v6-beta-plan-1b-gating-coeur.md @@ -12,9 +12,9 @@ - VLM : `VLM_CATEGORY_MAP` (vlm_manager.py:51) `label→(kind, placeholder)` — source de vérité (Qwen ratait `VLM_CP`). - `_GLOBAL` : `PiiHit(kind=f"{kind}_GLOBAL")` (core:5286) pour `_CRITICAL_PII_TYPES` (core:5245) — **plusieurs** kinds, pas seulement NIR/ADHERENT. - Burn : `_VECTOR/_RASTER_SKIP_KINDS` (core:4564/4723) excluent déjà `EDS_SECU/EDS_TEL/EDS_DATE_NAISSANCE` du PDF. -- **Décision CP/ZIP** : code postal (`VLM_CP`, `EDS_ZIP`, placeholder `CODE_POSTAL`) = **PAS** dans les 7 toggles → **toujours masqué** (conservateur ; « Adresses » révèle la voie, pas le CP). Qwen d'accord (RGPD : le CP identifie le lieu de soin/résidence). **Caveat UX à documenter** : décocher « Adresses » donne un rendu type « 12 rue X [CODE_POSTAL] Ville » (voie en clair, CP masqué) — assumé. À confirmer Dom. +- **Décision CP/ZIP (TRANCHÉE Dom 2026-06-26)** : code postal (`VLM_CP`, `EDS_ZIP`, placeholder `CODE_POSTAL`) **suit le toggle « Adresses »** → catégorie `ADRESSE`. Décocher « Adresses » révèle voie + CP (rendu « 12 rue X 64100 Ville »). **Override explicite de la spec D2/D3** (qui listait CODE_POSTAL non-toggleable). **Périmètre strict = CP uniquement** : `VILLE` reste non-toggleable (toujours masquée), hors de cette décision. -**Référence spec :** `docs/superpowers/specs/2026-06-25-gui-v6-beta-prod-design.md` (chantier D, P1-2, D2/D3 : pas de plancher dur ; `EMAIL/IBAN/IPP/VILLE/FAX/CODE_POSTAL` non toggleables = toujours masqués). +**Référence spec :** `docs/superpowers/specs/2026-06-25-gui-v6-beta-prod-design.md` (chantier D, P1-2, D2/D3 : pas de plancher dur ; `EMAIL/IBAN/IPP/VILLE/FAX` non toggleables = toujours masqués). **NB** : `CODE_POSTAL` retiré de cette liste par décision Dom 2026-06-26 (suit « Adresses »). --- @@ -45,11 +45,14 @@ def test_category_of_each_source(): assert core._category_of("VLM_ETAB") == "ETAB" assert core._category_of("EDS_SECU") == "NIR" # dérivé EDS (SECU→NIR) assert core._category_of("EDS_HOPITAL") == "ETAB" + assert core._category_of("VLM_CP") == "ADRESSE" # CP suit « Adresses » (Dom 2026-06-26) + assert core._category_of("EDS_ZIP") == "ADRESSE" def test_category_of_default_deny(): # Non toggleables → None (restent TOUJOURS masqués). Sécurité. - for k in ("EMAIL", "IBAN", "IPP", "VILLE", "FAX", "VLM_CP", "EDS_ZIP", + # NB : VILLE reste masquée ; seul CODE_POSTAL (VLM_CP/EDS_ZIP) a été basculé vers ADRESSE. + for k in ("EMAIL", "IBAN", "IPP", "VILLE", "FAX", "VLM_VILLE", "EMAIL_GLOBAL", "INCONNU_XYZ"): assert core._category_of(k) is None, k @@ -85,6 +88,7 @@ def test_filter_audit_drops_only_disabled(): _PLACEHOLDER_TO_CATEGORY = { "NOM": "NOM", "DATE_NAISSANCE": "DATE_NAISSANCE", "ETAB": "ETAB", "ADRESSE": "ADRESSE", "NIR": "NIR", "TEL": "TEL", "ADHERENT": "ADHERENT", + "CODE_POSTAL": "ADRESSE", # décision Dom 2026-06-26 : CP suit le toggle « Adresses » } # Kinds regex/inline non dérivables d'une map → leur catégorie explicitement. _EXPLICIT_KIND_CATEGORY = { @@ -205,11 +209,11 @@ Add `disabled_kinds: set = None` kwarg to `process_pdf` (~l.4973). After `cfg = --- ## Self-review (couverture spec + revue Qwen + vérif Claude) -- **F-1** : `_category_of` dérivé (VLM_CATEGORY_MAP + EDS_LABEL_MAP + suffixe _GLOBAL) + **test anti-dérive** → couvre les 15 kinds de Qwen ET ceux qu'il a ratés (VLM_CP→masqué). Default-deny. ✓ +- **F-1** : `_category_of` dérivé (VLM_CATEGORY_MAP + EDS_LABEL_MAP + suffixe _GLOBAL) + **test anti-dérive** → couvre les 15 kinds de Qwen ET ceux qu'il a ratés. Default-deny. **CODE_POSTAL→ADRESSE** (décision Dom 2026-06-26). ✓ - **F-2** : Task 3 liste consolidée incl. propagation globale, VLM, Trackare, structured/critical, cleanups. ✓ - **F-3** : Task 4 adresse gaté + images/barcodes documentés conservateurs + SKIP_KINDS vérifiés. ✓ - **F-4** : Task 2 coordonne résiduel + **exclusion NIR-like du pattern TEL** + gate selective_rescan/propagation (Task 3). ✓ - **F-5** : Task 3 impose le gating NER **intra-boucle** (per-hit), jamais per-function. ✓ - **Risque résiduel** : un site oublié ⇒ catégorie reste masquée (test rouge), JAMAIS fuite croisée (default-deny + filtre par catégorie). Livrable PDF garanti par T1 seul. -- **Décision ouverte Dom** : CODE_POSTAL (CP/ZIP) hors des 7 toggles (masqué) — confirmer. +- **Décision Dom 2026-06-26 (TRANCHÉE)** : CODE_POSTAL (CP/ZIP) → catégorie ADRESSE (suit le toggle « Adresses »). VILLE reste toujours masquée (hors décision). - **Re-revue Qwen post-implémentation obligatoire** (Tasks 1-4).