Skill Pack
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 tresci do modelu). Uzywaj gdy uzytkownik chce zanonimizowac lub spseudonimizowac dokument, usunac dane osobowe z pisma, przygotowac tekst do publikacji albo do wyslania do LLM, lub mowi o PESEL/NIP/REGON/RODO/anonimizacji/pseudonimizacji.
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 zaden oryginal nie przetrwal (np. przez fleksje nazwiska). Jezeli cos zostalo - operacja jest przerywana z kodem wyjscia 2 i komunikatem na stderr, zeby zweryfikowac recznie.
.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.