
Programowanie
RCP: rejestracja czasu pracy w urzędzie
Importer odbić z czytnika kart RFID i aplikacja do list obecności, wniosków i raportów dla Urzędu Miejskiego w Starym Sączu. Bez nowego systemu: dane trafiają do intranetu, z którego urząd już korzysta.
20.10.2026
Urząd Miejski w Starym Sączu od lat ma czytnik kart RFID do rejestracji czasu pracy. Problem polegał na tym, że odbicia lądowały w plikach tekstowych, a kadry składały z nich listy obecności ręcznie.
Zamiast kupować nowy system, dobudowałem do istniejącego czytnika dwie rzeczy: importer, który przenosi odbicia do intranetu, i aplikację, w której kadry, przełożeni i pracownicy widzą obecność w przeglądarce.

Importer: pliki tekstowe do bazy
Czytnik zapisuje każdy dzień do osobnego pliku. Każda linia ma 24 znaki: datę, godzinę bez sekund, numer karty i rodzaj zdarzenia, czyli wejście, wyjście, wyjście służbowe albo powrót.
Importer w Pythonie co godzinę:
- sprawdza katalog z nowymi plikami,
- parsuje linie i pomija te, które już są w bazie, więc ponowne wczytanie pliku niczego nie dubluje,
- łączy numer karty z pracownikiem w kartotece,
- zapisuje zdarzenia w Directusie intranetu,
- przenosi przetworzony plik do archiwum i zapisuje wszystko w logu.
Osobny skrypt przenosi pliki z komputera, do którego podłączony jest czytnik. Nikt nie musi już ich kopiować ręcznie.
Jedno źródło prawdy
Dane trafiają do tego samego Directusa, z którego korzysta intranet urzędu. Są tam pracownicy, struktura organizacyjna, stanowiska, karty RFID, słownik nieobecności i typy wniosków. RCP Dashboard nie ma własnej bazy, tylko nadbudowuje interfejs nad tymi danymi.
RCP Dashboard
Aplikacja ma osobne widoki dla różnych ról:
- obecność dzienna z przełączaniem dni strzałkami,
- dziennik zdarzeń z ręczną korektą odbić przez kadry,
- wnioski: urlop, wyjście służbowe i prywatne, nadgodziny, z akceptacją najpierw przełożonego, a potem kierownictwa urzędu,
- listy pracowników z eksportem do CSV,
- raporty: dzienna lista obecności, podsumowanie miesiąca i karta pracownika,
- moja obecność, czyli widok dla każdego pracownika z jego własnymi odbiciami.
Uprawnienia wynikają z ról i struktury organizacyjnej. Kadry widzą wszystkich, przełożony swój zespół, a pracownik tylko siebie. Logowanie odbywa się kontem intranetu, a zdarzenia bezpieczeństwa trafiają do osobnego dziennika.
Tryb uproszczony
Wprowadzanie elektronicznej rejestracji czasu pracy w urzędzie to także sprawa ludzi, a nie tylko techniki. Administrator może tymczasowo ukryć godziny odbić i oznaczenie spóźnień w widokach aplikacji. Dane w bazie zostają bez zmian, a kadry dalej widzą i poprawiają prawdziwe wartości.
Dlaczego bez zrzutów ekranu
To system z danymi o obecności konkretnych osób, więc zamiast zrzutów pokazuję schemat.
Stack
- SvelteKit z adapterem Node, TypeScript,
- Tailwind v4 i Flowbite Svelte (szablon panelu administracyjnego),
- Directus intranetu przez oficjalne SDK,
- importer i synchronizacja plików w Pythonie,
- powiadomienia e-mail przez Nodemailer,
- Docker.
