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.

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.

ObszarPrzedPo
Układanie grafikuCodziennie ręcznie w Excelu dla 188 osóbGenerator układa obsadę pod zapotrzebowanie terminalu
PublikacjaPlik wrzucany na grupę WhatsApp, widoczny dla wszystkichKażdy widzi swój grafik; skład zmiany tylko lider i koordynator
Zgłaszanie niedostępnościPo publikacji grafiku, co wymuszało układanie go od nowaDyspozycje zgłaszane z wyprzedzeniem, przed publikacją
Nieobecność i zastępstwoŁańcuszek telefonów o dowolnej porze dobyZgłoszenie i wezwanie zastępstwa z poziomu koordynatora przed zmianą
Rozkład godzinPilnowany w pamięci i w arkuszuKwota dni wolnych liczona per tydzień, twardy limit dni pracy z rzędu
Rola lideraNieformalna, 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ą.