
Programowanie
Rejestr prawa lokalnego: pięć tysięcy aktów w jednej wyszukiwarce
Zarządzenia i uchwały były rozrzucone po BIP, paczkach z EZD, dysku sieciowym i archiwum. Zbudowałem rejestr, który łączy te źródła, pokazuje status aktu, podpis elektroniczny i publikację w Dzienniku Urzędowym, a do tego wskazuje luki w numeracji.
5.11.2026
Prawo stanowione w samorządzie to głównie zarządzenia burmistrza i uchwały rady. Każdy pracownik prędzej czy później pyta: czy to zarządzenie jeszcze obowiązuje i co je zmieniło?
Odpowiedź wymagała szukania w kilku miejscach i czytania kolejnych aktów. Zbudowałem więc rejestr prawa lokalnego i wewnętrznego, który zbiera wszystko w jednej wyszukiwarce.
(powiększ)Punkt wyjścia: akty w czterech miejscach
Przed rejestrem akty były rozproszone:
- BIP, z lukami i błędami w numeracji oraz skanami bez warstwy tekstowej,
- elektroniczny obieg dokumentów, z podpisanymi paczkami aktów,
- dysk sieciowy z uchwałami dwóch kadencji,
- papierowe archiwum.
Typowa sytuacja wyglądała tak. Pracownik szuka regulaminu korzystania z samochodów służbowych i znajduje w BIP zarządzenie z 2019 roku. Nie wie, że dwa lata później inne zarządzenie zmieniło w nim zasady rozliczania paliwa, a kolejne uchyliło część o kartach drogowych. Żeby to ustalić, musi przeczytać kilka aktów i dopytać w sekretariacie.
Trzy źródła, jedna prawda
Rejestr łączy dane automatycznie z trzech źródeł:
- BIP przez jego API: pełny import ponad 3400 aktów trwa około 2,5 minuty,
- paczki z elektronicznego obiegu dokumentów: metadane, tekst, załączniki i dane podpisu,
- Dziennik Urzędowy województwa przez API ELI: status, pozycja, tekst i ostateczny druk.
Gdy źródła się różnią, wygrywa poprawka redakcji, potem paczka z podpisem, a na końcu BIP. Pole poprawione ręcznie nie jest nadpisywane przy kolejnym imporcie. Podpisanych paczek rejestr nigdy nie zmienia.
Dziennik Urzędowy pozwolił uzupełnić rejestr wstecz do 1999 roku. Doszło 853 starszych uchwał, 73 luki zostały wypełnione, a statusy „obowiązuje” i „uchylony” pochodzą wprost z Dziennika.
Wyszukiwarka
Rejestr ma dziś 5098 aktów: 2164 uchwały od 1999 roku i 2934 zarządzenia od 2017 roku. Wystarczy wpisać numer, na przykład XII/170/2024, albo kilka słów z tytułu lub treści.
Wyszukiwanie jest pełnotekstowe i pokazuje fragment z trafieniem. Tekst ma ponad 3100 aktów. Wyniki można zawęzić do rejestru, roku, statusu, dziedziny i zakresu dat.
Karta aktu
Każdy akt ma kartę z kompletem informacji:
- treścią aktu i listą plików z formatem i rozmiarem,
- danymi: numer, data, kadencja, sesja, organ, dziedzina,
- statusem: obowiązuje, uchylony albo nieustalony,
- publikacją w Dzienniku Urzędowym z linkiem do ostatecznego druku,
- danymi podpisu elektronicznego odczytanymi z paczki: kto podpisał, kiedy, jakim certyfikatem i czy pliki są zgodne z podpisem.
(powiększ)Luki w numeracji
Rejestr wie, jakie numery powinny istnieć, więc pokazuje też te, których brakuje. Na przykład gdy w rejestrze są zarządzenia 41/2025 i 43/2025, numer 42/2025 trafia na listę luk. Pracownik widzi takie luki w osobnym widoku, razem z aktami wewnętrznymi, i może je wyjaśniać po kolei.
Akt, który nie podlega publikacji, nie znika z rejestru. Widać jego numer, datę, organ i tytuł, a zamiast treści informację, że nie podlega publikacji.
(powiększ)Lokalny model językowy jako pomocnik
Dziedzinę aktu i informację, czy w tytule jest nazwisko osoby, proponuje mały model językowy uruchomiony lokalnie w LM Studio. Dane nie wychodzą poza moją infrastrukturę.
Model musi odpowiadać w ustalonym formacie JSON. Najlepiej sprawdziła się Gemma, a polski Bielik odpadł, bo w LM Studio nie obsługuje wymuszonego formatu odpowiedzi. Nazwisko w tytule dodatkowo sprawdza zwykła reguła, a wynik modelu jest tylko propozycją do zatwierdzenia.
Próbowałem też rozpoznawania tekstu ze skanów, ale dawało za dużo błędów. Zdecydowałem, że tekst ze skanów nie trafia do rejestru, a takie akty mają tylko plik PDF.
Automaty i dostęp dla innych aplikacji
- co noc rejestr pobiera nowe uchwały i zmiany statusów z Dziennika Urzędowego,
- pliki z BIP i Dziennika są kopiowane do własnego magazynu S3, więc nie zależą od cudzych serwerów,
- inne aplikacje i asystenci AI korzystają z API, dostępnego tylko z kluczem,
- nowa wersja wdraża się sama po oznaczeniu tagu w repozytorium.
Dostępność
Rejestr ma tryb ciemny, wysoki kontrast, trzy wielkości tekstu i czytanie na głos. Automatyczny audyt axe-core sprawdza wszystkie rodzaje stron w pięciu trybach wyświetlania i nie zgłasza naruszeń WCAG 2.2 AA.
Rejestr prawa nie musi niczego wymyślać. Wystarczy, że zbierze to, co już jest, uczciwie pokaże braki i odpowie na pytanie, co dziś obowiązuje.
- Aleksander Kowal
Co dalej
- panel redakcji: wpisywanie aktów, uzupełnianie luk i relacje „uchyla” oraz „zmienia”,
- logowanie jednym kontem przez Authentik,
- publiczna wersja rejestru dla mieszkańców.
Stack
- Astro 7 z renderowaniem po stronie serwera, Tailwind v4, DaisyUI v5 i Lucide,
- NocoBase 2.2 jako panel administracyjny i PostgreSQL 16 z wyszukiwaniem pełnotekstowym,
- RustFS jako magazyn plików zgodny z S3,
- importery w Node.js, lokalny model w LM Studio, audyt axe-core, Docker.
Przydał się ten tekst?
Nowe teksty na maila
Raz na jakiś czas, gdy pojawi się nowy wpis albo projekt. Bez reklam.
Masz pomysł, pytanie albo uwagę? Napisz do mnie:Włącz JavaScript, żeby zobaczyć adres e-mail
