Nazwiska obywateli nie muszą wyjeżdżać z nadleśnictwa
W dokumentacji pilotażowej stoi rada: „anonimizuj nazwiska markerem przed skanem”. To narzędzie robi dokładnie to samo, tylko w tekście i automatycznie — w momencie, w którym wklejasz pismo do dowolnego okna przeglądarki.
Jak to wygląda w praktyce
Kopiujesz fragment pisma, wciskasz Ctrl+V w oknie ChatGPT, Claude, Perplexity, Gemini czy w zwykłym formularzu — i w polu pojawia się już wersja pozbawiona danych osobowych:
Jan Kowalski, email: jan@example.com, PESEL: 92010212345
[OSOBA], email: [EMAIL], PESEL: [PESEL]
Alternatywnie: skrót klawiszowy na zaznaczonym tekście albo pozycja w menu kontekstowym. Włącznik ON/OFF siedzi w okienku rozszerzenia, więc da się to wyłączyć na czas pracy z danymi, których nie chcesz maskować.
Co i gdzie się wykonuje
Dwie części: rozszerzenie do Chrome/Edge (Manifest V3) i mały backend w Pythonie (Flask) uruchomiony na Twojej maszynie. Backend nasłuchuje tylko na 127.0.0.1 i ::1 — nie jest widoczny w sieci lokalnej ani z internetu. Domyślny port to 6677, do zmiany zmienną PRESIDIO_PORT.
Rozpoznawanie danych robi Microsoft Presidio wsparte modelem językowym spaCy dla polszczyzny (pl_core_news_md) oraz zestawem wyrażeń regularnych pod polskie identyfikatory. Nazwiska i nazwy miejscowości wychodzą z modelu, PESEL i NIP z reguł — dlatego działa też na tekstach, w których model sam by się pogubił.
Rozmiary, żeby nie było zaskoczenia: model spaCy to około 500 MB na dysku, backend z wczytanym modelem zajmuje ok. 200 MB pamięci, a rozpoznanie danych w typowym fragmencie pisma trwa dziesiątki milisekund.
Typy danych włączone domyślnie
| Rodzaj danych | Co wstawia w zamian |
|---|---|
| PESEL | [PESEL] |
| NIP | [NIP] |
| REGON | [REGON] |
| Numer dowodu | [DOWOD_PL] |
| Paszport | [PASZPORT_PL] |
| Imię i nazwisko | [OSOBA] |
| Adres / miejscowość | [LOKALIZACJA] |
| Telefon | [TELEFON] |
| [EMAIL] | |
| Numer karty | [KARTA] |
| IBAN | [IBAN] |
| Data | [DATA] |
Do tego wyłączone domyślnie identyfikatory zagraniczne (amerykańskie, brytyjskie, australijskie, singapurskie) — można je włączyć w pliku konfiguracyjnym, jeśli kiedyś będą potrzebne.
Jak to spina się z BORIX
Moduł klasyfikacji JRWA woła model przez zewnętrzne API — to jedyne miejsce, w którym treść wychodzi na zewnątrz (patrz model lokalny). Kolejność, którą rekomendujemy w pilotażu:
- Pismo obywatela wpada do kancelarii.
- Anonimizacja lokalnie — nazwiska, PESEL, adresy zamieniają się na znaczniki.
- Dopiero taki tekst idzie do klasyfikatora albo do modelu w chmurze.
- Odpowiedź wraca, a Ty podstawiasz prawdziwe dane w gotowe pismo — już u siebie.
Backend wystawia zwykłe API HTTP (POST /api/anonymize), więc podłączenie tego kroku do własnego procesu to jedno wywołanie. Warunek: backend musi stać na tej samej maszynie, bo celowo nie wychodzi poza localhost i nie ma uwierzytelniania.
Uczciwe ograniczenia
- Narzędzie nie gwarantuje wykrycia wszystkich danych osobowych — zdarzają się zarówno pominięcia, jak i fałszywe trafienia (np. zamaskowana liczba, która nie była PESEL-em).
- Samo jego użycie nie czyni procesu zgodnym z RODO. To jeden z technicznych środków ograniczających ryzyko, nie certyfikat.
- Przy dokumentach klauzulowanych odpowiedź jest inna niż „anonimizuj” — takich treści nie wkleja się do modeli w ogóle.
- Rozszerzenie instaluje się w trybie dla programistów (nie ma go jeszcze w Chrome Web Store).