Anonimizacja i pseudonimizacja polskich danych osobowych (PESEL, NIP, REGON, KRS, telefon, e-mail, imiona i nazwiska, nazwy firm) w tekscie - RODO-safe, offline, deterministycznie (bez wysylania...
Samodzielny silnik (zero zaleznosci, Node >=20). Wykrywa polskie PII checksumowo (PESEL/NIP/REGON/KRS/IBAN/dowod osobisty), heurystycznie (imiona z gazetteera, firmy z forma prawna, e-mail, telefon, adres) i podmienia na tokeny. Dwa tryby RODO. Cala praca lokalnie.
| Tier | Operacje | Regula |
|---|---|---|
| R - Read-only | wykryj (tylko raport, nic nie zmienia) |
Bez potwierdzenia. Wykonaj od razu. |
| M - Mutating | pseudonimizuj + odwroc, paczka + przywroc (odwracalne przez mape/slownik) |
Pokaz co zostanie zmienione. Czekaj na potwierdzenie slowne. |
| D - Destructive | anonimizuj (NIEODWRACALNE - mapa nie powstaje, danych nie przywrocisz) |
Uzytkownik musi wpisac doslownie: "potwierdzam" zanim wykonasz. |
Dotyczy zwlaszcza akt klientow i pism procesowych -
anonimizujna oryginale bez kopii = nieodwracalna utrata danych osobowych. Slownik*.mapa-pii.jsonzawiera oryginaly PII - chron go, nie wysylaj do LLM, nie commituj.
Z katalogu skilla:
# Raport co jest w dokumencie (nic nie zmienia)
node bin/cli.mjs wykryj pismo.txt
# ANONIMIZACJA - nieodwracalna, do publikacji/dzielenia (brak mapy)
node bin/cli.mjs anonimizuj pismo.txt --out pismo-anon.txt
# PSEUDONIMIZACJA - odwracalna, do pracy z LLM (zapisuje mape)
node bin/cli.mjs pseudonimizuj pismo.txt --map mapa.json --out pismo-pseudo.txt
node bin/cli.mjs odwroc odpowiedz-llm.txt --map mapa.json # przywraca oryginaly
# PACZKA - odwracalna redakcja WIELU plikow, jednolita numeracja (v0.2.0)
node bin/cli.mjs paczka pozew.txt zeznanie.txt --slownik sprawa.mapa-pii.json
node bin/cli.mjs przywroc odpowiedz-llm.txt --slownik sprawa.mapa-pii.json
Wejscie - lub brak = stdin. Wynik na stdout albo do --out.
Gdy sprawa sklada sie z kilku pism, paczka trzyma JEDEN slownik odwracania:
ten sam byt w kazdym pliku = ten sam [OSOBA_1], liczniki nie resetuja sie
per plik, a kolejne wywolanie z tym samym --slownik kontynuuje numeracje
(takze po restarcie). przywroc podstawia oryginaly w odpowiedzi LLM lokalnie
i ostrzega o placeholderach, ktorych slownik nie zna (zmyslone przez model).
paczka pozew.txt zeznanie.txt --slownik sprawa.mapa-pii.json --audit audit.log*.pseudo.txt do modelu, odbiera odpowiedz.przywroc odpowiedz.txt --slownik sprawa.mapa-pii.json --out odpowiedz-jawna.txtpaczka aneks.txt --slownik sprawa.mapa-pii.json - numeracja kontynuowana.Granica governance: narzedzie przygotowuje i przywraca LOKALNIE, niczego samo nie wysyla - co idzie do LLM decyduje czlowiek.
| Cel | Tryb | Czemu |
|---|---|---|
| Udostepnic dokument na zewnatrz, opublikowac, anonimizacja akt | anonimizuj |
Nieodwracalne. Mapa NIE powstaje. RODO motyw 26 - dane zanonimizowane nie podlegaja RODO. |
| Wyslac tresc do LLM (Gemini/Claude/...) i odzyskac wynik | pseudonimizuj + odwroc |
Odwracalne przez mape. RODO art. 4 pkt 5 - dane nadal osobowe, trzymaj mape bezpiecznie. |
pseudonimizuj pismo.txt --map mapa.json --audit audit.log -> tekst z tokenami + mapa.odwroc odpowiedz.txt --map mapa.json -> odpowiedz z prawdziwymi danymi.MappingStore w README.Obie komendy po podmianie sprawdzaja, czy przetrwal ktorys z wykrytych oryginalow. Jezeli tak - operacja jest przerywana z kodem wyjscia 2 i komunikatem na stderr, zeby zweryfikowac recznie.
Czego ta bramka NIE robi. Liste oryginalow buduje ten sam detektor, ktory
przetworzyl tekst. Bramka nie zobaczy wiec PII, ktorego detektor nie wykryl.
Kod wyjscia 0 znaczy "nie znalazlem sladu tego, co wykrylem" - nie znaczy
"w tekscie nie ma PII". Pomiar z 2026-09-23: na 70 fragmentach bramka nie
zatrzymala zadnego, a 54,3% wyszlo z niezamaskowanym PII (ewaluacja/README.md).
Przy dokumencie, ktory opuszcza kancelarie, kod 0 nie zastepuje przejrzenia tekstu przez czlowieka.
ewaluacja/README.md.doPrzegladu: true (walidacjaSumy: "failed"); CLI podaje ich liczbe na stderr.
Po etykiecie ("PESEL", "NIP", "REGON") takze przy cyfrze za malo lub za duzo.
Bez etykiety: 11 cyfr jako PESEL, 10 cyfr lub 3-3-2-2 jako NIP, 14 cyfr jako
REGON - z pewnoscia 0,5, wiec --min-confidence powyzej 0,5 je wycina.
Przejrzyj oznaczone numery: to moze byc literowka w PESEL albo numer faktury.--out, paczka) jest sprawdzany po zapisie: plik czytany od
nowa, oryginaly w tekscie i surowych bajtach, kontrola pozytywna tokenow,
ponowna detekcja. BLOKADA usuwa zapisane pliki (kod 2). Wyjscie na stdout nie
jest weryfikowane..docx z tracked changes - roadmap v2 (silnik jest tekstowy).import { pseudonimizuj, anonimizuj, odwroc } from "matematic-anonimizacja-pl";
const r = anonimizuj("Jan Kowalski, PESEL 44051401359");
// r.text -> "[OSOBA_1], PESEL [PESEL_1]"
// paczka (v0.2.0): wspolny slownik, jednolita numeracja, restart-safe
import { pseudonimizujPaczke, przywroc, SlownikOdwracania } from "matematic-anonimizacja-pl";
const { wyniki, slownik } = pseudonimizujPaczke([{ nazwa: "pozew.txt", text: "..." }]);
const wznowiony = SlownikOdwracania.fromJSON(slownik.toJSON());
const { text } = przywroc(odpowiedzLlm, wznowiony);
Pelne API i wzorce operacyjne (TTL, szyfrowane archiwum, audit log): README.md.
Te reguły obowiązują w każdym skillu tej wtyczki, także gdy sam skill milczy. Są skopiowane do każdego skilla, więc działają zarówno po instalacji całej wtyczki, jak i pojedynczego skilla.
Plugin obsługuje dokumenty: konwersję do Markdown, redlining .docx i anonimizację danych osobowych. Część operacji dotyka danych wrażliwych, więc reguła ochrony danych jest tu pierwsza.
let-it-be), zanim treść trafi do modelu. Dane osobowe nie powinny wychodzić do API. To zasada minimalizacji (RODO).Niektóre operacje są nieodwracalne (anonimizacja w trybie nieodwracalnym, zaakceptowanie wszystkich zmian w .docx). Skille oznaczają je jawnie - wykonuj je dopiero po potwierdzeniu przez człowieka.
Wynik to projekt. Nic nie zostaje wysłane ani złożone, zanim sprawdzi to uprawniony człowiek. Plugin przygotowuje plik, nie wykonuje aktu wysyłki.
Plugin daje narzędzia na dokumentach (konwersja, redline, anonimizacja, akta i chronologia). Nie ocenia treści prawnej. Weryfikację cytatu wobec źródła prawa daje plugin „fundament weryfikacyjny”; chronologia-stanowiska-pl sprawdza tylko, czy cytat stoi na wskazanej stronie akt.