Files
anonymisation/tests/synthetic_review/cases/010_fiche_admission_minimale/review.md
Domi31tls 9b431494a5 fix(detect): labels structurels Nom de jeune fille / Prénom / Ville (#7 #8 #9)
Trois nouveaux patterns cœur dans `_mask_structured_line` pour des
labels génériques qui n'étaient pas couverts par le pipeline kv_value
(le split key:value laissait fuir la valeur quand le label dépassait
les patterns existants `RE_EXTRACT_NOM_NAISSANCE`, `RE_EXTRACT_PRENOM`,
`RE_EXTRACT_VILLE_RESIDENCE`).

`RE_LABEL_NOM_VARIANTES` capture :
- Nom de jeune fille / de famille / de naissance(.)
- Nom d'usage / Nom marital / Nom marié

`RE_LABEL_PRENOM` capture :
- Prénom : / Prénoms : / Prénom de naissance / utilisé(e) / usuel
- Capture jusqu'à fin de ligne pour les énumérations virgulées
  (Prénoms : Sabine, Marie → tout masqué).

`RE_LABEL_VILLE` capture :
- Ville : / Ville de résidence : / Ville de naissance :
- Capture jusqu'à fin de ligne (gère "Saint-Jean-de-Luz",
  "Saint-Denis (974)", composés multi-tokens).

Effets de bord positifs :
- Le bug "Saint-Jean-de-Luz → [ETABLISSEMENT]-de-Luz" est corrigé :
  le matcher `RE_LABEL_VILLE` masque toute la valeur en `[VILLE]`
  AVANT que le gazetteer FINESS Aho-Corasick ne grignote "Saint-Jean".
  Cas 006_trackare_soignants et 008_anesthesie_complete : alignement
  des expected.txt sur cette amélioration.

Choix d'architecture (cf cadrage docs/cadrage-projet-anonymisation.md
section 10.1) : ces labels sont des règles cœur génériques applicables
à tout établissement de santé français. Légitimes en hardcodé. Les
patterns layout-specific (Bordeaux suffixe, CHCB en fin de phrase,
email cassé par force_term) seront branchés via admin_rules dans
l'étape suivante.

Cas 010_fiche_admission_minimale passe désormais (retiré de
KNOWN_FAILURES). Le xfail strict aurait signalé xpass.

Tests : 9 passed, 2 xfailed (avant : 8 passed, 3 xfailed sur
test_synthetic_review).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 22:30:40 +02:00

2.6 KiB

Revue 010 — fiche d'admission administrative

Famille documentaire : fiche d'identification administrative pure, quasi sans narratif. Empilement dense de PII structurées sous des labels explicites. Pas de contexte sémantique pour aider le NER.

Patterns testés :

  • structuration en blocs (IDENTITE, COORDONNEES, PERSONNE A PREVENIR, MEDECIN TRAITANT, INFORMATIONS COMPLEMENTAIRES) ;
  • nom marital + nom de jeune fille empilés sur deux lignes ;
  • patient et époux portant le même nom de famille (DARRIBEHAUDE) : vérifier la propagation globale ;
  • 4 numéros de téléphone différents (fixe patient, portable patient, proche, médecin traitant) ;
  • email avec local-part contenant le nom de famille (sabine.darribehaude) — fuite indirecte si l'email n'est pas masqué comme un bloc atomique ;
  • numéro de mutuelle MGEN (10 chiffres) à masquer ;
  • numéro de sécurité sociale au format espacé (2 73 04 65 100 100 88) qui doit être détecté par la règle NIR.

Points critiques :

  • aucun token PII ne doit fuiter, malgré l'absence de contexte narratif ;
  • le label structurel doit rester (Nom :, Prénom :, Adresse :, etc.) ;
  • le sigle MGEN (organisme de mutuelle, pas un nom propre) doit rester ;
  • le numéro d'adhérent MGEN 1234567890 doit être masqué (pseudo-NDA) ;
  • Sexe : F et Nationalité : française doivent rester intacts ;
  • le numéro de chambre chambre 412 doit rester intact (pas un identifiant patient).

Écarts résolus dans la session 2026-04-27 (commits c24b7f6 + suivants) :

  • numéro adhérent mutuelle : règle RE_NUM_ADHERENT ajoutée, masqué en [ADHERENT] (placeholder dédié) — gère MGEN, MAAF et toute formulation n° adhérent / Numéro d'adhérent ;
  • NIR au format espacé : RE_NIR réordonné AVANT RE_TEL pour empêcher la consommation prématurée ;
  • labels structurels Nom de jeune fille :, Prénom :, Ville : : trois nouvelles règles cœur (RE_LABEL_NOM_VARIANTES, RE_LABEL_PRENOM, RE_LABEL_VILLE) dans _mask_structured_line.

Écarts résiduels cosmétiques (non fuites) :

  • appartement 3B dans la ligne adresse est tagué [ETABLISSEMENT] par le matcher FINESS Aho-Corasick — perte d'information mais aucune fuite PII. À investiguer plus tard (le mot appartement ne devrait pas être dans le gazetteer FINESS).
  • kinds_present ne contient pas DATE_NAISSANCE alors que la ligne Date de naissance : 30/04/1973 est masquée — la valeur est masquée via un autre code path qui n'enregistre pas le hit avec ce kind. Pas de fuite, juste une incohérence d'audit.