Grafik 188 osób w porcie: 3 terminale i 6 stanowisk bez arkusza
Firma obsługująca terminale kontenerowe przestała układać dobowy grafik w Excelu i wysyłać go na WhatsAppa: generator, automat dyspozycji i wnioski.
- Osób w jednym grafiku: 188
- Terminale objęte grafikiem: 3
- Stanowisk z osobnym zapotrzebowaniem: 6
O kliencie
Grand International dostarcza personel operacyjny na terminale kontenerowe Portu Gdańsk. 188 osób pracuje na umowach zlecenia, na trzech terminalach i sześciu stanowiskach: kierowcy ciągników terminalowych, sztauerzy mocujący kontenery na statkach, ekspedytorzy, kontrolerzy, instruktorzy oraz rotacyjni liderzy zmian i koordynatorzy. Praca odbywa się na dwie zmiany po dwanaście godzin, siedem dni w tygodniu, bo statki nie czekają.
Rytm dnia narzuca terminal. Do dziewiątej rano firma deklaruje, ilu ludzi może wystawić nazajutrz. Terminal odsyła zapotrzebowanie z podziałem na stanowiska — i bywa, że zamawia dwadzieścia osób zamiast trzydziestu czterech, albo nie zamawia nikogo. Dopiero wtedy powstaje grafik na następny dzień.
Wyzwanie
Grafik dla 188 osób powstawał ręcznie w arkuszu i lądował na grupie WhatsApp. Osoba układająca go musiała jednocześnie pilnować umownej dyspozycyjności, równego rozkładu godzin między pracownikami, limitu dni pracy z rzędu, obsadzenia lidera na każdej zmianie i tego, kto akurat jest chętny do pracy. Każda z tych reguł z osobna jest prosta; razem, przy 188 osobach i codziennej zmianie zapotrzebowania, przestają być możliwe do utrzymania w głowie.
Najbardziej kosztowna okazała się jednak kolejność zdarzeń. Pracownik czekał, aż grafik pojawi się na grupie, sprawdzał, czy wypadł mu dogodny dzień, i dopiero wtedy zgłaszał, że nie przyjdzie. Grafik trzeba było układać od nowa. Właściciel formułował to wprost: chodziło o to, żeby dyspozycje spływały wcześniej, zamiast być reakcją na gotowy plan. Plik na grupie miał też drugą wadę — każdy widział godziny każdego.
Trzecim obszarem była obsługa nieobecności i ewidencja czasu. Zgłoszenie szło łańcuszkiem telefonów o dowolnej porze doby, a godziny pracy pochodziły z systemu terminalu, gdzie wystarczyła literówka w nazwisku wpisanym na recepcji, żeby czasu pracownika nie dało się odnaleźć. Cel klienta dało się streścić jednym zdaniem, które powtarzał na warsztatach: chciał wyeliminować czynnik ludzki tam, gdzie decyduje on o cudzym wynagrodzeniu.
- Grafik dla 188 osób układany codziennie ręcznie w Excelu i publikowany na grupie WhatsApp
- Każdy pracownik widział godziny wszystkich pozostałych
- Zgłoszenia „nie mogę przyjść" przychodziły dopiero po publikacji grafiku, więc trzeba go było układać od nowa
- Nieobecność szła łańcuszkiem telefonów: pracownik do lidera o dowolnej porze doby, lider do biura, biuro szukało zastępstwa
- Ewidencja czasu pochodziła z systemu terminalu, gdzie literówka w nazwisku wpisanym na recepcji gubiła godziny pracownika
- Ręczne pilnowanie umownej dyspozycyjności, limitu dni pracy z rzędu i równego rozkładu godzin
Rozwiązanie
Powstała aplikacja webowa instalowana jak mobilna, działająca także bez zasięgu, z osobnymi widokami dla pracownika, lidera, koordynatora zmiany i administracji.
Administracja wprowadza zapotrzebowanie terminalu z podziałem na stanowiska i zmiany, a system układa propozycję obsady. Wersje robocze są chronione przed równoległą edycją, a publikacja grafiku jest osobnym, świadomym krokiem.
Najtrudniejszą częścią projektu okazał się automat dyspozycji. Rytm pracy ustawia się osobno dla każdej osoby i liczbowo — ile dni pracy, ile wolnych, jak rozłożonych — zamiast wybierać sztywny wariant. Kwota dni wolnych liczy się w tygodniu kalendarzowym i jest wspólna dla rytmu oraz urlopów, a twardy limit dni pracy z rzędu przebija pozostałe reguły. Dni wolne rozkładają się deterministycznie, ale równomiernie w całej załodze, żeby nie okazało się, że połowa zespołu ma wolne w tę samą sobotę.
Kluczowa decyzja projektowa brzmi: dyspozycja jest uzgodnieniem z faktami, a nie prognozą. Dla przyszłości obowiązuje kolejność — decyzja administracji, nieobecność, przypisana zmiana, rytm. Dla przeszłości fakt wygrywa ze wszystkim: jeśli ktoś przepracował dzień, którego nie było w planie, system przyjmuje rzeczywistość i odnotowuje to w dzienniku zmian. Bez tej zasady grafik po tygodniu rozjeżdża się z listą obecności i traci wiarygodność jako podstawa rozliczeń.
Uprawnienia są przypisane do dnia, nie do człowieka. Lider to rola rotacyjna — ta sama osoba dziś prowadzi zmianę, a pojutrze jest zwykłym sztauerem — więc dostęp do składu zespołu ma wyłącznie w dni, w które faktycznie pełni tę funkcję. Poza nimi widzi tylko własny grafik, jak każdy inny pracownik. Koordynator może zgłosić nieobecność i wezwać zastępstwo jeszcze przed startem zmiany, co zastąpiło nocny łańcuszek telefonów.
System obejmuje też obecności, sesje pracy i rozliczenia z dodatkami za pracę nocną, powiadomienia push, SMS i mailowe, logowanie numerem telefonu jako drugim identyfikatorem (nie każdy ma firmowego maila) oraz import listy pracowników plikiem od kadr, z podglądem zmian przed zatwierdzeniem. Odejście z firmy oznacza zablokowanie konta, nie usunięcie — historia grafików sprzed roku musi dalej wskazywać, kto rzeczywiście pracował.
Osobno powstała publiczna strona tłumacząca działanie generatora bez żargonu technicznego, otwierana wprost z aplikacji. Algorytm, który rozdziela pracę, a przez to i pieniądze, musi dać się wytłumaczyć ludziom, których dotyczy. Projekt prowadzi też własny rejestr znalezisk audytowych obejmujący uprawnienia, dostęp do danych i wydajność, wraz z barierą uniemożliwiającą nadanie uprawnień szerszych niż posiadane. Stack: React z TypeScriptem na TanStack Start, Supabase, aplikacja instalowalna jako PWA.
| Obszar | Przed | Po |
|---|---|---|
| Układanie grafiku | Codziennie ręcznie w Excelu dla 188 osób | Generator układa obsadę pod zapotrzebowanie terminalu |
| Publikacja | Plik wrzucany na grupę WhatsApp, widoczny dla wszystkich | Każdy widzi swój grafik; skład zmiany tylko lider i koordynator |
| Zgłaszanie niedostępności | Po publikacji grafiku, co wymuszało układanie go od nowa | Dyspozycje zgłaszane z wyprzedzeniem, przed publikacją |
| Nieobecność i zastępstwo | Łańcuszek telefonów o dowolnej porze doby | Zgłoszenie i wezwanie zastępstwa z poziomu koordynatora przed zmianą |
| Rozkład godzin | Pilnowany w pamięci i w arkuszu | Kwota dni wolnych liczona per tydzień, twardy limit dni pracy z rzędu |
| Rola lidera | Nieformalna, zależna od tego, kto akurat prowadzi zmianę | Uprawnienia przypisane do dnia pełnienia funkcji, nie do osoby |
Efekty
- Generator grafiku przyjmujący zapotrzebowanie terminalu z podziałem na stanowiska i zmiany
- Automat dyspozycji z rytmem pracy konfigurowanym liczbowo dla każdej osoby i kwotą dni wolnych liczoną w tygodniu
- Dyspozycje zgłaszane z wyprzedzeniem, przed publikacją grafiku, a nie po jej zobaczeniu
- Pracownik widzi wyłącznie swój grafik; skład zmiany widzą tylko lider i koordynator
- Uprawnienia lidera przypisane do dnia, w którym faktycznie prowadzi zmianę, a nie do osoby na stałe
- Zgłoszenie nieobecności i wezwanie zastępstwa z poziomu koordynatora, jeszcze przed startem zmiany
- Obecności, sesje pracy i rozliczenia z dodatkami nocnymi w jednym miejscu
- Publiczna strona tłumacząca działanie generatora bez żargonu — dla pracowników, których dotyczy
Codzienne układanie grafiku dla 188 osób przestało być zadaniem pamięciowym. Zapotrzebowanie terminalu wchodzi do systemu, generator proponuje obsadę, a reguły, które wcześniej trzeba było utrzymać w głowie — dyspozycyjność, limit dni z rzędu, równy rozkład godzin, obsada lidera — pilnują się same.
Drugą zmianą jest odwrócenie kolejności zdarzeń. Dyspozycje spływają przed publikacją grafiku, a nie po niej, co usuwa przyczynę najbardziej uciążliwej pracy w całym procesie. Przy okazji zniknął plik z godzinami wszystkich na wspólnej grupie: pracownik widzi swój grafik, skład zmiany widzą wyłącznie lider i koordynator, a uprawnienia lidera obowiązują tylko w dni, w które faktycznie prowadzi zmianę.
Aplikacja działa w firmie: pracownicy logują się numerem telefonu i od razu widzą swoje zmiany, a kierownicy nie układają już grafiku w arkuszu. Współpracę klient ocenił na tyle dobrze, że zapowiedział kolejny projekt — platformę szkoleniową dla kursantów, z częścią rekrutacyjną.