fix(core): renforcer detection PII et FINESS Corse

Couvre les corrections PII batch A/A-2, le NIR multi-ligne en flux reel, le gazetteer FINESS Corse derive depuis la base locale, et les tests de regression associes. Aucun build ni diffusion.
This commit is contained in:
2026-06-17 17:59:27 +02:00
parent 536ab81184
commit d18ca919fa
7 changed files with 1638 additions and 53 deletions

View File

@@ -20,6 +20,7 @@ from collections import Counter
CSV_PATH = Path(__file__).parent.parent / "data" / "finess" / "finess_etablissements.csv"
OUT_DIR = Path(__file__).parent.parent / "data" / "finess"
RE_FINESS_IDENTIFIER = re.compile(r"^(?:\d{9}|2[AB]\d{7})$", re.IGNORECASE)
# Préfixes génériques d'établissements à retirer pour extraire le nom distinctif
GENERIC_PREFIXES = re.compile(
@@ -110,12 +111,12 @@ def main():
continue
# Numéros FINESS : col 1 = finess_et (structure), col 2 = entjur (entité juridique).
# Les deux sont des identifiants 9 chiffres réels du référentiel FINESS et doivent
# être masqués. Avant ce fix, seul finess_et était extrait (~102k), et les ~48k
# entjur étaient manqués — provoquant des fuites (ex: 999999999 entjur CHUXX).
# Les deux sont des identifiants réels du référentiel FINESS et doivent être masqués.
# Les départements corses utilisent le préfixe alphanumérique 2A/2B au lieu de deux
# chiffres, donc on accepte aussi 2A/2B + 7 chiffres.
for col_idx in (1, 2):
finess = row[col_idx].strip() if col_idx < len(row) else ""
if re.match(r"^\d{9}$", finess):
finess = (row[col_idx].strip() if col_idx < len(row) else "").upper()
if RE_FINESS_IDENTIFIER.match(finess):
finess_numbers.add(finess)
# Noms (col 3 = court, col 4 = long)