Schemat wizyty w PSZOK w czterech krokach: wyszukanie mieszkańca, sprawdzenie deklaracji, wpisanie odpadów, wydruk protokołu

Programowanie

System ewidencji PSZOK w Starym Sączu

Elektroniczna ewidencja wizyt w Punkcie Selektywnej Zbiórki Odpadów Komunalnych: wyszukiwanie deklaracji w danych urzędu, limity oceniane przez pracownika i protokół PDF jak z regulaminu. Z danymi osobowymi, które nie opuszczają sieci urzędu.

18.10.2026

Punkt Selektywnej Zbiórki Odpadów Komunalnych w Starym Sączu przez lata działał na papierze. Pracownik ręcznie wypełniał formularz, sprawdzał deklarację telefonicznie, a limity liczył w zeszycie.

Zbudowałem system ewidencji, który prowadzi pracownika przez całą wizytę mieszkańca, od wyszukania deklaracji do wydruku protokołu. Działa w sieci urzędu i korzysta z danych, które gmina już ma.

Schemat wizyty w PSZOK w czterech krokach: wyszukanie mieszkańca, sprawdzenie deklaracji, wpisanie odpadów, wydruk protokołu
Wizyta mieszkańca w PSZOK krok po kroku

Panel pracownika

Pracownik loguje się kontem z intranetu urzędu, więc nie ma osobnych haseł do pamiętania. Na pulpicie widzi, ile przyjęć było dziś i w tym miesiącu, listę ostatnich wizyt z numerami protokołów i przycisk nowego przyjęcia.

System działa od maja 2026 roku. W samym październiku punkt obsłużył przez niego ponad 400 wizyt, a numeracja protokołów przekroczyła 2300.

Ekran logowania do panelu pracownika PSZOK obok pulpitu z liczbą przyjęć dziś i w miesiącu oraz listą ostatnich przyjęć, dane mieszkańców zastąpione szarymi paskami
Logowanie i pulpit pracownika, dane mieszkańców ukryte

Dane, których nie trzeba wpisywać drugi raz

Mieszkaniec może oddać odpady bezpłatnie, jeśli ma aktywną deklarację śmieciową. Ta informacja jest w systemie podatkowym urzędu. Zamiast budować kolejną kopię, system PSZOK czyta ją z intranetu na Directusie.

Osobny łącznik synchronizuje dane z programem dziedzinowym. Panel PSZOK nie ma do niego bezpośredniego dostępu, co ogranicza powierzchnię ataku do jednego, kontrolowanego miejsca.

Pracownik szuka właściciela deklaracji na trzy sposoby:

  • po numerze PESEL z dowodu albo upoważnienia,
  • po numerze punktu odbioru, także czytnikiem kodów kreskowych,
  • po nazwisku i adresie.

Wyszukiwanie po PESEL idzie zapytaniem POST, więc numer nie trafia do adresu URL, historii przeglądarki ani logów serwera.

Limit, którego system świadomie nie liczy

Najciekawsza decyzja w tym projekcie dotyczyła limitów. Uchwała rady daje bezpłatnie 2,2 metra sześciennego odpadów budowlanych albo 20 worków 120 litrów. Problem w tym, że 20 takich worków to 2,4 metra sześciennego.

Do tego mieszkaniec raz przywozi worki, a raz gruz luzem. Każdy automat, który próbowałby to rozstrzygnąć, w którymś momencie pomyliłby się na niekorzyść mieszkańca albo gminy.

Dlatego system pokazuje pracownikowi historię wizyt z bieżącego roku i zostawia decyzję jemu. Nadwyżka jest zawsze ważona, a opłata liczy się od kilogramów według stawki z ustawień.

Wyjaśnienie limitu odpadów budowlanych: 20 worków po 0,12 metra sześciennego to 2,4, a nie 2,2 metra sześciennego, obok przykładowej tabeli z pozycją w limicie i nadwyżką w kilogramach
Dlaczego limit odpadów budowlanych ocenia pracownik, a nie automat

Jeden rodzaj odpadu może dać na protokole dwa wiersze: część bezpłatną w limicie i zważoną nadwyżkę. Dzięki temu mieszkaniec widzi czarno na białym, za co płaci.

Protokół w jednym kliknięciu

Po zapisie wizyta dostaje numer w formacie PSZOK/rok/kolejny numer, a licznik zeruje się co roku. Protokół generuje usługa PDF w intranecie urzędu, z szablonu odwzorowującego załącznik do regulaminu punktu.

  • część pierwsza: dane właściciela deklaracji, osoby dostarczającej i lista odpadów z limitami,
  • część druga, tylko przy nadwyżce: usługa dodatkowa z masą, stawką, kwotą i kwotą słownie,
  • obie części na jednej stronie A4, z miejscem na podpisy,
  • druk albo pobranie PDF prosto z karty wizyty.

Po zmianie wzoru system sam wygenerował brakujące protokoły z wcześniejszych wizyt, więc archiwum jest kompletne.

Poglądowy wzór protokołu przyjęcia odpadów z częścią usługi dodatkowej, pola z danymi osobowymi zastąpione szarymi polami
Poglądowy wzór protokołu, bez danych osobowych

Drobiazgi, które robią różnicę na bramie

  • upoważnienie dla innej osoby to jedno pole, a dane pełnomocnika zapisują się tylko wtedy, gdy są potrzebne,
  • zdjęcia odpadów dołączone do wizyty, z podglądem, nawigacją strzałkami i pobieraniem,
  • anulowanie wizyty przez 3 godziny od zapisu, jako oznaczenie, a nie kasowanie z bazy,
  • dziennik zmian systemu widoczny w panelu, generowany z historii repozytorium.

Zaślepka strony bez wdrożenia

Gdy punkt jest nieczynny, na przykład w czasie inwentaryzacji albo awarii, pracownik może jednym przełącznikiem pokazać na stronie publicznej komunikat zamiast zwykłej treści. Edytor ma podświetlanie składni i podgląd na żywo, a zmiana działa od razu, bez wdrażania czegokolwiek.

Edytor zaślepki strony publicznej: przełącznik włączenia, kod HTML z podświetlaniem składni i podgląd na żywo
Edytor zaślepki strony publicznej z podglądem na żywo
Historia zmian w panelu: wpisy pogrupowane według dni z etykietami Nowość, Poprawka, Refaktoryzacja i Dokumentacja
Historia zmian generowana z repozytorium

RODO od pierwszego dnia

System przetwarza PESEL-e, imiona i adresy, więc zasady ochrony danych spisałem przed pierwszą linijką kodu. Pola wrażliwe nie trafiają do logów ani eksportów, a panel działa wyłącznie w sieci urzędu.

Klucze do usług zewnętrznych są w zmiennych środowiskowych, a nie w kodzie. Gdy któregoś brakuje, aplikacja zgłasza czytelny błąd zamiast działać po cichu bez zabezpieczenia.

Nie każdą regułę z uchwały da się zamienić na if w kodzie. Czasem najlepsze, co może zrobić system, to podać człowiekowi wszystkie informacje i nie udawać, że wie lepiej.

- Aleksander Kowal

Strona dla mieszkańców

Część publiczna pod adresem pszok.starysacz.org.pl to jedna strona z godzinami otwarcia, statusem punktu na żywo, listą frakcji i dokumentami do pobrania. Projekt strony przygotował Mateusz Duda, a ja wpiąłem ją w system jako statyczną stronę i utrzymuję.

Strona informacyjna pszok.starysacz.org.pl z godzinami otwarcia, statusem punktu na żywo i listą przyjmowanych frakcji, obok wersja na telefon
Strona informacyjna PSZOK na komputerze i telefonie

Stack

  • Astro w trybie SSR na Node.js, TypeScript,
  • TailwindCSS v4 i Flowbite w panelu pracownika,
  • Directus intranetu urzędu jako źródło danych i usługa PDF,
  • monorepo pnpm ze wspólnym klientem Directusa dla części publicznej i systemowej,
  • Docker, wdrożenie na serwerach urzędu.