Files
anonymisation/docs/cadrage-projet-anonymisation.md

14 KiB

Cadrage projet — anonymisation

1. Objet du projet

Le projet n'a pas pour finalite de "faire tourner un pipeline" ni de "passer des tests". La finalite est plus stricte :

  • produire des documents exploitables sans fuite de donnees personnelles ;
  • conserver l'information medicale utile au controle ;
  • permettre une validation humaine fiable et rapide ;
  • rendre les regles d'anonymisation pilotables sans repasser systematiquement par du code.

Autrement dit, la qualite du projet se mesure d'abord sur la fonction d'anonymisation, pas sur l'elegance interne du code.

2. Priorites produit

Ordre de priorite assume :

  1. Ne pas laisser fuiter de PII.
  2. Preserver le sens medical et administratif utile.
  3. Rendre le comportement verifiable, explicable et auditable.
  4. Permettre l'ajout rapide de regles metier locales.
  5. Industrialiser ensuite seulement : performance, packaging, confort d'usage.

Consequence directe :

  • un faux negatif est plus grave qu'un faux positif ;
  • mais un taux trop eleve de faux positifs finit par rendre le systeme inutilisable ;
  • la bonne cible n'est donc pas "tout masquer", mais "masquer tout ce qui doit l'etre, sans casser l'usage metier".

3. Definition de "fonctionne correctement"

Le systeme fonctionne correctement si, ensemble, les conditions suivantes sont remplies :

  • aucune fuite critique sur le corpus de validation bloquant ;
  • rappel tres eleve sur les PII obligatoires ;
  • preservation correcte des termes metier, structures, services, formulations cliniques utiles ;
  • stabilite du comportement entre deux versions ;
  • explicabilite minimale via les sorties texte, les audits et les diffs ;
  • capacite a integrer rapidement une nouvelle regle locale sans regression laterale evidente.

4. Definition de done d'une evolution

Une evolution ne doit pas etre consideree comme "terminee" parce que le code compile. Elle est terminee si :

  • les tests unitaires regressifs passent ;
  • les cas synthetiques rapides passent ;
  • le corpus synthetique complet de revue est relu ou au minimum regenere sans surprise ;
  • le sous-ensemble reel annote est dans les seuils cibles ;
  • les ecarts nouveaux sont compris et documentes ;
  • la revue humaine metier valide que le document reste exploitable.

5. Risques structurants du projet

5.1 Faux negatifs

Risque principal :

  • nom patient en en-tete non propage ;
  • identifiant compact non reconnu ;
  • libelle et valeur separes sur plusieurs lignes ;
  • OCR degrade ;
  • PII noyé dans un tableau ou un layout multi-colonnes ;
  • nouvelle variante locale non couverte.

Impact :

  • non-conformite ;
  • exposition de donnees de sante ;
  • perte de confiance dans le systeme.

5.2 Faux positifs

Risque secondaire mais reel :

  • services, actes, classes medicales, phrases metier masques a tort ;
  • document rendu illisible pour le controle ;
  • inflation des exceptions manuelles.

Impact :

  • baisse d'utilite ;
  • surcharge de revue humaine ;
  • contournements du systeme.

5.3 Pilotage des regles

Risque operationnel :

  • ajout d'une regle locale trop large ;
  • regle non testee qui casse 20 autres formats ;
  • absence de trace de qui a ajoute quoi et pourquoi.

Impact :

  • regressions silencieuses ;
  • gouvernance faible ;
  • difficultes d'audit interne.

6. Etat actuel utile dans le depot

Le projet dispose deja de briques solides, mais elles ne sont pas encore un cadre complet de validation produit.

Existant :

  • configuration externalisee :
    • config/dictionnaires.default.yml
    • config/dictionnaires.yml
    • config_defaults.py
  • evaluation :
    • evaluation/quality_evaluator.py
    • evaluation/leak_scanner.py
    • evaluation/benchmark.py
  • corpus reel annote :
    • tests/ground_truth/
  • suite synthetique rapide :
    • tests/synthetic_regression/
  • corpus synthetique complet de revue humaine :
    • tests/synthetic_review/
    • tools/run_synthetic_review_corpus.py

Manque encore a ce stade :

  • des gates de release formels et assumes ;
  • un workflow standard de revue humaine ;
  • un moteur de regles administrables avec versioning et validation avant activation ;
  • un tableau de bord simple "safe / warning / blocked" pour une version donnee.

7. Strategie de validation complete

Il faut raisonner en 4 couches et non en un seul type de test.

Couche 1 — garde-fous rapides

Objectif :

  • attraper vite les regressions simples et frequentes.

Contenu :

  • tests unitaires sur regex, rescan, config, propagation ;
  • cas synthetiques courts et stables ;
  • verification des sorties texte et de l'audit.

Dans le depot :

  • tests/unit/
  • tests/synthetic_regression/

Usage :

  • a executer a chaque modification.

Couche 2 — revue sur documents synthetiques complets

Objectif :

  • verifier le comportement d'ensemble sur des documents realistes et diffables.

Contenu :

  • documents synthetiques longs ;
  • test.txt source ;
  • expected.txt attendu metier ;
  • review.md indiquant les points critiques ;
  • actual.txt et diff.txt generes par le runner.

Dans le depot :

  • tests/synthetic_review/
  • tools/run_synthetic_review_corpus.py

Usage :

  • a executer pour toute evolution de regles ou de pipeline ;
  • support principal de revue humaine rapide.

Couche 3 — corpus reel annote

Objectif :

  • mesurer la qualite sur des documents representatifs du terrain.

Contenu :

  • annotations manuelles ;
  • precision, rappel, F1 ;
  • analyse des faux positifs / faux negatifs ;
  • scanner de fuite.

Dans le depot :

  • tests/ground_truth/
  • evaluation/

Usage :

  • avant merge important ;
  • avant release ;
  • avant activation d'une famille de nouvelles regles.

Couche 4 — validation humaine metier

Objectif :

  • confirmer que le document reste exploitable et conforme dans la vraie vie.

Contenu :

  • lecture de expected.txt vs actual.txt ou du PDF de sortie ;
  • checklist de revue ;
  • validation ou rejet motive ;
  • trace date / personne / version / decision.

Usage :

  • obligatoire pour les changements qui touchent :
    • les noms patients ;
    • les identifiants administratifs ;
    • les regles globales ;
    • les whitelists / blacklists sensibles ;
    • les formats documentaires majeurs.

8. Gates de release proposes

Une release ne doit pas se limiter a "tout est vert dans pytest".

Gate A — technique minimale

  • les tests unitaires passent ;
  • la suite synthetique rapide passe ;
  • le corpus synthetique complet ne presente aucun ecart non explique ;
  • aucun leak critique dans le scanner de fuite.

Gate B — qualite reelle

Sur le corpus reel annote :

  • rappel global >= 99,5 % sur les PII obligatoires ;
  • precision >= 97 % ;
  • F1 >= 0,98 ;
  • aucun document critique avec fuite non acceptee.

Si ces seuils sont trop ambitieux pour une famille documentaire donnee, il faut documenter explicitement l'exception, pas l'ignorer.

Gate C — validation humaine

  • un echantillon de documents impactes est relu ;
  • les nouveaux faux positifs sont juges acceptables ou corriges ;
  • la decision est tracee.

Sans Gate C, on a un systeme "teste", pas un systeme "approuve".

9. Workflow cible d'une modification

Cas 1 — correction technique simple

  1. ecrire ou adapter le test unitaire ;
  2. corriger le moteur ;
  3. rejouer la suite rapide ;
  4. rejouer le corpus synthetique complet ;
  5. si changement visible, faire relire les cas impactes.

Cas 2 — ajout de regle metier

  1. definir la regle ;
  2. preparer 1 a 3 documents synthetiques representatifs ;
  3. lancer le runner de revue ;
  4. verifier l'absence de regression sur le corpus reel ;
  5. faire valider la regle avant activation globale.

Cas 3 — nouvelle famille documentaire

  1. echantillonner des documents reels ;
  2. construire 2 a 4 cas synthetiques representatifs ;
  3. annoter un sous-ensemble reel ;
  4. regler le pipeline ;
  5. passer la revue humaine ;
  6. seulement ensuite integrer la famille au gate standard.

10. Gouvernance des regles d'anonymisation

Il faut distinguer plusieurs classes de regles.

10.1 Regles coeur

Exemples :

  • nom, prenom, date de naissance, telephone, email, adresse ;
  • RPPS, FINESS, IPP, OGC, NDA, dossier.

Caracteristiques :

  • versionnees dans le code ou dans la config versionnee ;
  • modifiees rarement ;
  • forte revue requise.

10.2 Regles locales / metier

Exemples :

  • un sigle d'etablissement local ;
  • un format de numero interne ;
  • un libelle administratif propre a l'organisation.

Caracteristiques :

  • doivent etre administrables sans dev lourd ;
  • doivent etre historisees ;
  • doivent etre testables avant activation.

10.3 Regles de preservation

Exemples :

  • "classification internationale" ;
  • "prise en charge" ;
  • "service de cardiologie" ;
  • termes structurels indispensables a la lecture.

Caracteristiques :

  • aussi importantes que les regles de masquage ;
  • toute regle de masquage nouvelle doit etre testee contre elles.

11. Cadrage de l'interface d'administration

L'interface d'administration n'est pas une "feature de confort". C'est un dispositif de pilotage du risque.

11.1 Objectif

Permettre a un administrateur metier autorise de :

  • ajouter une regle ;
  • la tester ;
  • visualiser son effet ;
  • l'activer ;
  • la desactiver ;
  • savoir qui l'a creee et pourquoi.

11.2 Principe cle

L'admin ne doit jamais saisir "une regex brute obligatoire" comme seule option. Il faut partir d'objets metier.

11.3 Types de regles a proposer en MVP

Type A — terme exact

Exemple :

  • CHCB
  • LOCAL_SIGLE

Usage :

  • masquer exactement cette chaine, avec ou sans casse.

Type B — identifiant normalise

Exemple :

  • 1234567

L'outil doit pouvoir generer automatiquement des variantes comme :

  • 1234567
  • N°1234567
  • N° 1234567
  • No 1234567
  • Numero 1234567

Et, selon le contexte choisi :

  • seulement comme jeton entier ;
  • seulement apres certains prefixes ;
  • partout dans le document.

Type C — prefixe + valeur

Exemple :

  • N° venue : 1234567
  • IPP : ABC12345

Usage :

  • quand on veut contraindre la detection a un contexte structure plutot qu'au nombre seul.

Type D — phrase a ne jamais masquer

Exemple :

  • classification internationale
  • prise en charge

Usage :

  • proteger les formulations critiques contre les regressions.

11.4 Champs minimum d'une regle

  • identifiant technique ;
  • libelle humain ;
  • type de regle ;
  • valeur source ;
  • placeholder cible ;
  • options de normalisation ;
  • options de contexte ;
  • portee ;
  • priorite ;
  • auteur ;
  • motif ;
  • date d'effet ;
  • statut : brouillon / testee / active / retiree.

11.5 Options de normalisation necessaires

Pour le cas 1234567, il faut pouvoir cocher par exemple :

  • ignorer les espaces ;
  • accepter ou non les prefixes , No, Numero ;
  • accepter ou non les separateurs :, - ;
  • matcher sur ligne simple ou multi-ligne ;
  • matcher en casse insensible ;
  • matcher seulement sur mot entier.

11.6 Portee de la regle

La regle ne doit pas etre obligatoirement globale. Il faut pouvoir choisir :

  • globale ;
  • famille documentaire ;
  • etablissement ;
  • lot de validation ;
  • environnement de test uniquement.

11.7 Cycle de vie d'une regle

  1. creation en brouillon ;
  2. simulation sur corpus synthetique ;
  3. simulation sur sous-ensemble reel ;
  4. lecture du diff ;
  5. approbation ;
  6. activation ;
  7. surveillance ;
  8. retrait ou revision.

11.8 Garde-fous obligatoires dans l'interface

  • previsualisation des variantes generees ;
  • affichage du nombre de documents impactes ;
  • exemples "avant / apres" ;
  • lancement automatique des tests associes ;
  • blocage si fuite critique ou regression majeure ;
  • journal d'audit des changements ;
  • possibilite de rollback.

12. Proposition concrete pour ton exemple N°1234567 / 1234567

Oui, c'est realisable proprement.

La bonne approche n'est pas :

  • "ajouter une ligne de dictionnaire brute et prier".

La bonne approche est :

  • creer un type de regle identifiant normalise ;
  • stocker la valeur canonique 1234567 ;
  • generer les variantes autorisees ;
  • choisir la portee :
    • partout ;
    • seulement apres prefixes ;
    • seulement en contexte administratif ;
  • visualiser les occurrences matchees ;
  • valider la regle sur corpus avant activation.

Cela evite deux erreurs classiques :

  • rater N°1234567 parce qu'on n'avait saisi que N° 1234567 ;
  • masquer tous les 1234567 partout alors qu'il fallait un contexte plus strict.

13. Tableau de bord de pilotage recommande

Pour chaque version du moteur ou du jeu de regles :

  • nombre de cas synthetiques rapides passes ;
  • nombre de cas complets de revue passes ;
  • nombre de documents reels evalues ;
  • rappel / precision / F1 ;
  • nombre de fuites critiques ;
  • top faux positifs ;
  • top faux negatifs ;
  • liste des regles ajoutees ou modifiees ;
  • decision : OK / WARNING / BLOCKED.

14. Roadmap recommandee

P0 — securiser la fonction d'anonymisation

  • stabiliser les gates ;
  • enrichir le corpus synthetique complet jusqu'a 10 documents ;
  • selectionner un sous-ensemble reel bloquant ;
  • formaliser la revue humaine.

P1 — administrabilite

  • definir le modele de regles ;
  • implementer le moteur de regles administrables ;
  • ajouter la simulation avant activation ;
  • tracer les changements.

P2 — industrialisation

  • tableau de bord de validation ;
  • packaging propre ;
  • exports de rapports ;
  • gestion du cycle de vie des regles.

15. Decisions recommandees maintenant

Decision 1

Assumer officiellement que la validation produit repose sur :

  • unitaires ;
  • corpus synthetique rapide ;
  • corpus synthetique complet ;
  • corpus reel annote ;
  • revue humaine.

Decision 2

Assumer que toute nouvelle regle d'anonymisation passe par :

  • un cas synthetique ;
  • une simulation ;
  • une validation humaine si la portee est large.

Decision 3

Faire de l'interface d'administration un moteur de regles gouverne, pas un simple formulaire de texte.

16. Prochaine etape concrete

La suite la plus utile n'est pas de rajouter encore du code "au hasard". La suite utile est :

  1. fixer le protocole de validation humaine ;
  2. etendre tests/synthetic_review/ a 10 documents complets ;
  3. definir le schema de regles d'administration ;
  4. concevoir l'ecran MVP d'ajout de regle ;
  5. brancher la simulation automatique avant activation.