Wyszukiwarka rejestru z polem Numer albo słowa z tytułu lub treści, liczbą 2934 zarządzeń i 2164 uchwał, filtrami po rejestrze, roku, statusie, dziedzinie i dacie oraz listą najnowszych uchwał ze statusem i znakiem podpisu elektronicznego

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.

Wyszukiwarka rejestru z polem Numer albo słowa z tytułu lub treści, liczbą 2934 zarządzeń i 2164 uchwał, filtrami po rejestrze, roku, statusie, dziedzinie i dacie oraz listą najnowszych uchwał ze statusem i znakiem podpisu elektronicznego(powiększ)
Wyszukiwarka rejestru z filtrami i najnowszymi aktami

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.
Karta uchwały w sprawie zmiany miejscowego planu zagospodarowania przestrzennego: status Obowiązuje, treść aktu, lista plików PDF z rozmiarami, ramka Dane aktu, ramka Podpis elektroniczny z rozmytym nazwiskiem i link do publikacji w Dzienniku Urzędowym(powiększ)
Karta uchwały z treścią, plikami, publikacją i podpisem

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.

Widok pracownika z filtrem Luka w numeracji: lista 46 brakujących numerów zarządzeń z 2026 roku, przy każdym napis Brak aktu o tym numerze w rejestrze i znaczek Luka w numeracji(powiększ)
Widok pracownika: brakujące numery zarządzeń z jednego roku

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.

Kliknij albo przewiń, żeby przybliżyć. Przeciągnij, żeby przesunąć.Stuknij dwa razy albo rozsuń palce, żeby przybliżyć.

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