Wprowadzenie
Czym jest WHC
WHC (Warehouse Calendar) to oprogramowanie do awizacji i zarządzania ruchem pojazdów na dokach (ang. dock scheduling software / yard & dock management). System porządkuje cały proces umawiania dostaw i odbiorów: od momentu, w którym przewoźnik lub dostawca rezerwuje okno czasowe na rampie, przez kontrolę wjazdu kierowcy na teren, aż po rozliczenie czasu operacji i raporty.
W jednym zdaniu: WHC zamienia chaos telefonów, maili i Excela w jeden, współdzielony kalendarz doków, w którym każda dostawa ma swój termin, bramę, status i komplet danych.
Awizacja (appointment) to w WHC podstawowa jednostka pracy — pojedyncza, zaplanowana operacja na rampie (dostawa lub odbiór) z przypisanym terminem, bramą, ładunkiem, kierowcą i statusem.
Jaki problem rozwiązuje
W typowym magazynie TSL (transport-spedycja-logistyka) bez systemu awizacji występują te same bolączki:
- Kolejki ciężarówek pod bramą — bo wszyscy przyjeżdżają „rano" lub „po południu".
- Spiętrzenia pracy na jednych rampach i przestoje na innych.
- Brak jednego źródła prawdy — terminy żyją w mailach, na kartkach, w głowach.
- Brak danych — nikt nie wie, ile naprawdę trwa rozładunek, kto się spóźnia, które okna są niewykorzystane.
- Ręczna obsługa stróżówki — ochrona dzwoni do magazynu, żeby potwierdzić, czy wpuścić auto.
WHC adresuje każdą z tych bolączek konkretnym mechanizmem opisanym w dalszych rozdziałach: oknami czasowymi (time slots), limitami (limits), statusami i flow, automatyzacją wjazdu (entry automation) oraz raportami (reports).
Korzyści w skrócie
| Rola | Co zyskujesz dzięki WHC |
|---|---|
| Dyrektor / kierownik magazynu | Pełna widoczność obłożenia doków, raporty czasu operacji i spóźnień, równomierne rozłożenie ruchu, mniej przestojów. |
| Koordynator / planista | Jeden kalendarz zamiast maili; limity pilnujące przepustowości; szybkie przenoszenie i edycja awizacji; powiadomienia. |
| Operator magazynu | Jasna kolejka „co teraz na rampie", statusy w czasie rzeczywistym, kioski i ekrany TV. |
| Ochrona / stróżówka | Lista oczekujących aut, weryfikacja po PIN/tablicy, decyzja o wjeździe, automatyczne szlabany (ANPR). |
| Supply chain manager | Mierzalne KPI (czas operacji, terminowość), integracja z ERP, kontrola nad oknami dostaw. |
| Przewoźnik / dostawca (kontrahent) | Samodzielna rezerwacja terminu online, podgląd statusu, przypomnienia e-mail/SMS, brak telefonów. |
Dla kogo jest ta dokumentacja
Dokument jest pisany dla przeciętnego pracownika branży TSL (30–45 lat): supply chain managera, koordynatora awizacji, operatora i dyrektora magazynu. Używamy nomenklatury logistycznej, a pojęcia techniczne tłumaczymy w Słowniku pojęć.
Dokumentacja jest jednocześnie referencją dla modeli i agentów AI (LLM) — stąd jej rygorystyczna struktura, jednolite nazewnictwo, tabele oraz Załącznik techniczny z modelem danych. Przy każdym pojęciu podajemy angielski odpowiednik w nawiasie, aby ułatwić mapowanie na nazwy w systemie, API i bazie danych.
Jak czytać ten dokument
- Spis treści na początku jest klikalny (w wersji HTML) i odwzorowuje pełną strukturę.
- Rozdziały 1–2 to fundament — przeczytaj je najpierw, bo wprowadzają „klocki" i model dostępu.
- Rozdziały 3–11 opisują funkcje operacyjne dnia codziennego (awizacje, widoki, okna, limity, statusy, zamówienia, powiadomienia, stróżówka).
- Rozdziały 12–16 to integracje, API, raporty, bezpieczeństwo i ustawienia.
- Rozdziały 17–18 to słownik i załącznik techniczny (model danych) — punkt wejścia dla integratorów i agentów AI.
Stos technologiczny (w skrócie)
WHC to aplikacja webowa działająca w przeglądarce, hostowana w modelu SaaS (każdy klient ma własną instancję):
- Backend: Java + Spring Boot, baza danych MySQL/MariaDB, warstwa Hibernate.
- Frontend: AngularJS + AngularJS Material, widoki JSP.
- Wielojęzyczność: interfejs PL/EN (każdy obiekt ma tłumaczenia).
- Wsparcie urządzeń: komputery, tablety, telefony (RWD), a także telewizory przemysłowe (ekrany TV w hali, w tym starsze modele).
Szczegóły architektury danych znajdują się w Załączniku technicznym.
Dwa tryby pracy użytkowników
Każdy użytkownik należy do jednej z dwóch stron (ang. side), co jest osią całego systemu uprawnień:
- INTERNAL — strona magazynu: koordynatorzy, operatorzy, kierownicy, ochrona, administratorzy. Widzą i obsługują (zależnie od uprawnień) wszystkie awizacje.
- EXTERNAL — strona kontrahenta: przewoźnicy, dostawcy, odbiorcy. Widzą i edytują wyłącznie własne awizacje, w granicach wyznaczonych przez konfigurację (terminy, załączniki, dostępne bramy).
Ten podział przewija się przez całą dokumentację — przy każdej funkcji zaznaczamy, której strony dotyczy.
Koncepcje i klocki systemu
Ten rozdział to mapa myślowa WHC. Opisuje klocki (building blocks), z których zbudowany jest system, oraz relacje między nimi. Zrozumienie tych pojęć wystarczy, by poruszać się po całej resztą dokumentacji.
Mapa klocków
MAGAZYN (warehouse)
└── BRAMA / DOK (gate)
└── OKNO CZASOWE (time slot)
└── AWIZACJA (appointment)
├── OPERACJA (operation type) → INBOUND / OUTBOUND
├── STATUS (appt status) → MILESTONE (kamień milowy)
├── JEDNOSTKA ŁADUNKOWA (loading unit) + ilość
├── PRODUKTY (products) + ZAMÓWIENIA (orders)
├── KIEROWCA + POJAZD (vehicle)
├── DODATKOWE POLA (attributes)
└── ZAŁĄCZNIKI (attachments)
Sterowanie dostępnością: LIMITY i BLOKADY (limits)
Sterowanie procesem: STATUSY + FLOW + AUTOMATYZACJE
Kontrola dostępu: UŻYTKOWNIK (user) → ROLA (role) → UPRAWNIENIA (permissions)
Kontrola wjazdu: PUNKT WJAZDU (entry point) + WHITELISTA + ANPR
Klocki infrastruktury
Magazyn (warehouse)
Najwyższy poziom struktury — pojedyncza lokalizacja logistyczna (oddział, centrum dystrybucyjne). Magazyn grupuje bramy, ma adres, opis dojazdu (driving directions) i pozycję na liście. Instancja WHC może obsługiwać wiele magazynów jednocześnie, a użytkownikom przydziela się dostęp do wybranych magazynów.
Brama / dok / rampa (gate)
Fizyczny punkt załadunku/rozładunku należący do magazynu. To na bramach planuje się awizacje. Bramy mają nazwę, kolejność i własne okna czasowe. Dostęp użytkownika może być zawężony do konkretnych bram.
Okno czasowe (time slot)
Przedział czasu na danej bramie, w którym można zaplanować operację — np. „poniedziałek 08:00–09:00 na Rampie 3". Okna definiuje się:
- jako szablon tygodniowy (per dzień tygodnia, powtarzalny),
- albo jako wyjątek dla konkretnej daty (np. inny grafik w święto).
Okna czasowe są fundamentem planowania i działają w dwóch trybach (STATIC/DYNAMIC) opisanych poniżej oraz w rozdziale Okna czasowe.
Punkt wjazdu (entry point)
Brama wjazdowa/wyjazdowa na teren (szlaban, kamera ANPR). Powiązany z magazynem, obsługuje automatyczne rozpoznawanie tablic i sterowanie szlabanem. Opisany w rozdziale Automatyzacje i automatyzacja wjazdu.
Klocek centralny: awizacja (appointment)
Awizacja spina wszystkie pozostałe klocki. Jedna awizacja zawiera m.in.:
- termin — data + okno czasowe (a w trybie DYNAMIC dokładne godziny
od–do), - lokalizację — magazyn + brama,
- operację — dostawa (INBOUND) lub odbiór (OUTBOUND),
- status — bieżący etap procesu,
- ładunek — jednostka ładunkowa + ilość, ewentualnie produkty i powiązane zamówienia,
- dane kierowcy i pojazdu — imię i nazwisko, telefon, numery rejestracyjne ciągnika i naczepy, typ pojazdu,
- dane dodatkowe — komentarze (wewnętrzny/zewnętrzny), atrybuty (dodatkowe pola), załączniki,
- metadane — kto utworzył, kiedy, awizowany podmiot, opiekun, historia zmian.
Dwie strony użytkowników: INTERNAL vs EXTERNAL
| Cecha | INTERNAL (magazyn) | EXTERNAL (kontrahent) |
|---|---|---|
| Kto | koordynator, operator, kierownik, ochrona, admin | przewoźnik, dostawca, odbiorca |
| Zakres widoczności | wszystkie awizacje (wg uprawnień) | tylko własne awizacje |
| Typowe widoki | Harmonogram, Oś Czasu, Lista, Stróżówka, konfiguracja | Dodaj Awizo, Twoje Awizacje, Zamówienia |
| Ograniczenia czasowe | brak (lub wg roli) | horyzont awizacji, wyprzedzenie, dni wolne |
| Tworzenie awizacji | przez okno „Nowe awizo" w Harmonogramie | przez kreator „Dodaj Awizo" |
Strona jest cechą roli (role) — patrz rozdział Konta, role i uprawnienia.
Dwa tryby okien czasowych: STATIC vs DYNAMIC
To najważniejsza decyzja architektoniczna każdej instancji WHC. Wybiera ją administrator (ustawienie timeSlotsMode), a od niej zależy zachowanie całego planowania.
| Aspekt | STATIC (okna stałe) | DYNAMIC (okna dynamiczne) |
|---|---|---|
| Czas trwania awizacji | równy całemu oknu (np. 08:00–09:00) | wyliczany automatycznie z ładunku/produktów |
| Liczba awizacji w oknie | wiele awizacji w jednym oknie | jedna operacja zajmuje fragment bramy w czasie |
| Kiedy stosować | gdy procesy są zryczałtowane, sloty stałej długości | gdy czas operacji zależy od liczby palet/produktów |
| Dodatkowy czas operacji | nie dotyczy | reguły wydłużające czas (extra operation time) |
| Przenoszenie awizacji | między oknami | przeciągnij i upuść (drag & drop), w obrębie minuty |
Zmiana trybu w działającej produkcji jest operacją destrukcyjną (kasuje awizacje), dlatego dostępna jest wyłącznie dla konta superadmin. Tryb wybiera się na etapie wdrożenia.
Szczegóły obu trybów: rozdział Okna czasowe.
Klocki sterujące procesem
Operacja (operation type)
Rodzaj czynności na doku. Każda operacja ma kierunek — INBOUND (dostawa/rozładunek) lub OUTBOUND (odbiór/załadunek) — oraz własny zestaw statusów i ustawień modułu zamówień. Przykłady: „Rozładunek dostawy", „Załadunek na eksport", „Odbiór zwrotów".
Status i milestone (kamień milowy)
Status (appt status) to widoczna etykieta etapu, w którym jest awizacja (np. „Awizowane", „Na placu", „W trakcie rozładunku", „Zakończone"), z własnym kolorem i ikoną. Statusy definiuje się per operacja.
Każdy status może być przypisany do milestone (kamień milowy) — abstrakcyjnej fazy procesu wspólnej dla całego systemu: APPROVED (zatwierdzone), ARRIVED (przyjechał), IN_YARD (na placu), OPERATION_STARTED (rozpoczęto operację), OPERATION_FINISHED (zakończono operację), DONE (zakończone), CANCELLED (anulowane), NOT_ARRIVED (nie dotarł), REJECTED_ON_ARRIVAL (odrzucony przy wjeździe). Milestone steruje logiką systemu (np. rezerwacją produktów, liczeniem spóźnień, grupowaniem w stróżówce).
Limit i blokada (limit / blockade)
Reguła pilnująca przepustowości i dostępności. Limity ograniczają np. liczbę przyjazdów na dzień, liczbę palet w oknie, łączny czas operacji albo „ile X jednocześnie". Blokady wyłączają dostępność (np. zamknięcie bramy, blokada dat dla konkretnego kontrahenta). Limit może blokować albo tylko ostrzegać. Szczegóły: rozdział Limity i blokady.
Klocki ładunku
Jednostka ładunkowa (loading unit)
Typ nośnika ładunku: paleta EUR, paleta przemysłowa, kontener, big-bag itd. Ma czas bazowy (time base) i czas na jednostkę (time per unit), na podstawie których WHC wylicza czas operacji w trybie DYNAMIC. Może mieć przypisany kolor (do kolorowania awizacji).
Umowna jednostka miary (basic loading unit)
Uogólniona miara ładunku (np. tona, m³), używana m.in. w limitach tygodniowych. Ilość zapisywana jest jako basicLoadingUnitQuantity.
Produkt i grupa produktów (product / product group)
Pozycje towarowe (indeksy), opcjonalnie grupowane. Produkty mogą mieć własny czas operacji i są wykorzystywane w module zamówień oraz jako kryterium limitów. Szczegóły: rozdział Zamówienia i produkty.
Klocki danych i kontekstu
Atrybut / dodatkowe pole awizacji (attribute)
Konfigurowalne pole awizacji wykraczające poza pola standardowe — np. „Numer awizo dostawcy", „Temperatura", „Kod SSCC". Typy atrybutów: tekst, tekst wielowierszowy, link, lista rozwijana (jedno- i wielokrotnego wyboru), generowany PIN, generowany UUID. Szczegóły: rozdział Pola awizacji i atrybuty.
Załącznik (attachment)
Plik dołączony do awizacji (CMR, list przewozowy, faktura, zdjęcie). Typy załączników mają reguły (dozwolone rozszerzenia, rozmiar, wymagalność).
Zamówienie (order)
Dokument źródłowy (zamówienie zakupu PO lub sprzedaży SO), zwykle importowany z systemu ERP, na podstawie którego tworzy się awizację. Aktywny tylko gdy włączony jest moduł zamówień.
Klocki dostępu i tożsamości
Użytkownik (user)
Konto w systemie — osoba lub punkt (np. konto kioskowe). Ma dane (e-mail, firma, NIP, telefon), przypisaną rolę, język, dostęp do magazynów/bram, opcjonalnie opiekuna (Account Manager) i klucz API.
Rola (role)
Zbiór uprawnień + przypisanie strony (INTERNAL/EXTERNAL). Rola decyduje, jakie widoki i akcje są dostępne oraz jakie kolumny awizacji widać na listach.
Uprawnienie (permission)
Pojedyncze pozwolenie: dostęp do widoku, prawo do dodania/usunięcia awizacji, edycji konkretnego pola, zmiany statusu z X na Y, przekraczania limitów itd. Pełna lista: rozdział Konta, role i uprawnienia.
Klocki komunikacji
System komunikuje się trzema kanałami, każdy oparty o szablony i wyzwalacze (zdarzenia):
- E-mail — szablony HTML, parametry, załączniki, masowa wysyłka.
- SMS — przez bramkę HostedSMS, z walidacją numerów.
- Powiadomienia systemowe (dzwoneczek) — wewnątrz aplikacji, w czasie rzeczywistym, z opcją dźwięku i popupu.
Szczegóły: rozdział Powiadomienia.
Jak klocki współpracują — przykład
Przewoźnik wchodzi na Dodaj Awizo, wybiera operację „Rozładunek", magazyn i bramę. System pokazuje dostępne okna czasowe — z pominięciem tych zablokowanych przez limity i blokady dat. Po wyborze terminu i wpisaniu danych kierowcy oraz jednostki ładunkowej powstaje awizacja ze statusem domyślnym (milestone
APPROVED). Wysyłane jest powiadomienie e-mail/SMS. W dniu dostawy kierowca podjeżdża, kamera ANPR rozpoznaje tablicę z whitelisty, szlaban się otwiera, a status zmienia się automatycznie naARRIVED. Operator widzi auto w Stróżówce i na Kiosku magazyniera, rozpoczyna operację (OPERATION_STARTED), a po zakończeniu (OPERATION_FINISHED/DONE) dane trafiają do raportu czasu operacji.
Każdy z pogrubionych elementów to klocek opisany szczegółowo w kolejnych rozdziałach.
Konta, role i uprawnienia
WHC ma drobnoziarnisty (granular) system uprawnień: nie ma sztywnego podziału „admin vs użytkownik". Każdy widok i każda akcja są osobnym uprawnieniem, które przydziela się rolom. Dzięki temu zbudujesz dowolny profil — od „tylko podgląd Harmonogramu na TV" po „pełny administrator".
Użytkownik (user)
Konto użytkownika zawiera m.in.:
- Dane: e-mail (login), imię i nazwisko (person name), nazwa firmy (company name), NIP, telefon, adres.
- Rola (role) — decyduje o uprawnieniach i stronie (INTERNAL/EXTERNAL).
- Język interfejsu (PL/EN).
- Dostęp do magazynów i bram — zawężenie widoczności do wybranych lokalizacji.
- Domyślny widok (default view) — ekran otwierany po zalogowaniu (wybierany z listy widoków, do których użytkownik ma dostęp).
- Opiekun / Account Manager — użytkownik INTERNAL przypisany do konta; odbiorca powiadomień.
- Klucz API (API key) — do integracji (nagłówek
X-API-KEY). - Identyfikator zewnętrzny (integrated system user id) — do mapowania na ERP.
- Flagi: konto ukryte (hidden), zatwierdzone przez admina, zweryfikowany e-mail.
Operacje na użytkownikach (widok Użytkownicy)
- Dodawanie, edycja, usuwanie (soft-delete) kont.
- Wyszukiwarka użytkowników.
- Kopiowanie (powielanie) użytkownika i roli — szybkie tworzenie podobnych kont.
- Ręczna zmiana hasła dowolnemu użytkownikowi (z poziomu menu kontekstowego) — dla uprawnionych kont.
- Akceptacja / odrzucanie kont oczekujących (przy włączonej rejestracji z potwierdzeniem).
- Import masowy użytkowników (z konfiguracją kolumn) — przydatny przy onboardingu wielu przewoźników.
- Domyślny wybór „wszystkie magazyny i bramy" przy zakładaniu konta (przyspiesza wprowadzanie).
- Przypisanie opiekuna do dowolnego użytkownika (również INTERNAL).
- Edycja kont admin/superadmin przez uprawnione konta (z zachowaniem hierarchii).
Rola (role)
Rola łączy w sobie:
- Stronę (side): INTERNAL albo EXTERNAL.
- Zbiór uprawnień (widoki + akcje + pola).
- Listę kolumn awizacji widocznych w widoku „Lista" dla tej roli (role appt fields) — każda rola może mieć inny zestaw kolumn i ich szerokości.
- Opcję „utrzymuj zalogowanie" (keep user logged in) — dla kont specjalnych (kioski, TV), które mają pozostać zalogowane nawet po restarcie systemu.
Zmiany uprawnień roli propagują się natychmiast — użytkownik nie musi się wylogowywać i logować ponownie.
Konto superadmin omija wszystkie kontrole uprawnień — zawsze może edytować pola, usuwać awizacje i zmieniać ustawienia krytyczne. To konto serwisowe/wdrożeniowe.
Katalog uprawnień
Uprawnienia funkcjonalne (akcje)
| Uprawnienie | Co daje |
|---|---|
appointment.add |
Dodawanie awizacji. Brak tego uprawnienia = widok „tylko do odczytu" (np. Harmonogram bez możliwości tworzenia). |
appointment.delete |
Usuwanie (soft-delete) awizacji. |
exceedLimits |
Przekraczanie limitów przy dodawaniu, przenoszeniu i edycji awizacji. |
apptHistory.preview |
Podgląd zakładki „Historia zmian" w oknie awizacji. |
viewAppointmentsByStatus |
Zawężenie widocznych awizacji do listy dozwolonych statusów (parametr: lista ID statusów lub „wszystkie"). |
reports |
Dostęp do modułu raportów. |
downloadLogs |
Pobieranie/przeglądanie logów systemowych. |
integrations |
Dostęp do funkcji integracyjnych. |
Uprawnienia do edycji pól awizacji
Wzorzec klucza: appointment.field.<pole>.update (konkretne pole) lub appointment.field.*.update (wszystkie pola). Dzięki temu można np. pozwolić koordynatorowi zmieniać termin, ale nie ilość palet.
Obsługiwane pola:
| Grupa pól | Pola |
|---|---|
| Termin i lokalizacja | warehouseGateDatetime, gateDatetime, datetime |
| Operacja i status | operationTypeAndStatus, status (z parametrem ALL lub listą przejść {from, to}) |
| Czas | duration (tryb DYNAMIC), expectedDuration (tryb STATIC, ręczny) |
| Strony i ładunek | appointedUser, loadingUnit, loadingUnitQuantity, basicLoadingUnitQuantity, productInAppt, productQuantityInAppt |
| Kierowca i pojazd | driverFirstName, driverLastName, driverFullName, driverPhone, vehicleType, vehicleRegistrationNumber, vehiclePlateNo, trailerPlateNo |
| Pozostałe | pickupMethod, commentInternal, commentExternal, attachments |
Uprawnienie do zmiany statusu X → Y
Szczególnie istotny mechanizm kontroli workflow. Uprawnienie appointment.field.status.update przyjmuje parametr:
ALL— pozwala na dowolne przejścia statusów,- albo listę dozwolonych przejść w formie par
{ from, to }— np. operator może zmienić status tylko z „Na placu" na „W trakcie rozładunku", ale nie cofnąć go do „Awizowane".
To pozwala odwzorować realny proces i zapobiec „przeskakiwaniu" etapów.
Uprawnienia do atrybutów (dodatkowych pól)
appointment.attribute.<id>.update— edycja konkretnego atrybutu,appointment.attribute.*.update— edycja wszystkich atrybutów.
Uprawnienia do widoków (views.*)
Każdy ekran systemu jest osobnym uprawnieniem. Przydzielenie/odebranie steruje zarówno widocznością w menu, jak i dostępem do adresu URL.
| Obszar | Uprawnienia widoków |
|---|---|
| Awizacje | views.appointmentsSchedule (Harmonogram), views.appointmentsList (Lista), views.appointmentsListToday (Lista dziś), views.appointmentsTimeline (Oś czasu), views.appointmentsToday (Awizacje dziś) |
| Kontrahent (EXTERNAL) | views.addMyAppt (Dodaj awizo), views.yourAppts (Twoje awizacje), views.orders (Zamówienia) |
| Stróżówka i kioski | views.gatehouse, views.kioskApptsQueue (TV), views.kioskApptNow (Kiosk magazyniera), views.kioskDriverEntry (Kiosk wjazdu) |
| Reguły | views.limits (Limity) |
| Powiadomienia | views.emailNotificationTemplates, views.smsNotificationTemplates, views.systemNotificationTemplates |
| Użytkownicy | views.users, views.roles |
| Konfiguracja słowników | views.operationTypes, views.warehousesAndGates, views.timeSlots, views.apptStatusesAndFlowPhases, views.orderStatuses, views.loadingUnits, views.products, views.apptFields, views.pickupMethods, views.vehicleTypes, views.extraOperationTime, views.fieldExclusions |
| Automatyzacja wjazdu | views.entryAutomationEntryPoints, views.entryAutomationWhitelist, views.entryAutomationEvents, views.entryAutomationSettings |
| Ustawienia | views.settingsGeneral, views.settingsOperationTime, views.settingsSchedule, views.settingsTimeline, views.settingsKioskApptsQueue, views.settingsTimeslotPicker, views.settingsAttachments, views.settingsEmail, views.settingsSms, views.settingsAPI, views.settingsGatehouse, views.settingsRegisterAndLogIn |
| Pozostałe | views.reports (Raporty), views.logs (Logi), views.integration (Integracje kurierów), views.hooksAndHandlers (Automatyzacje) |
Rejestracja i wdrażanie kontrahentów
WHC wspiera kilka ścieżek pozyskiwania kont zewnętrznych:
- Tworzenie ręczne przez koordynatora (widok Użytkownicy).
- Import masowy z pliku.
- Samodzielna rejestracja (self-service) przez formularz rejestracyjny — opcjonalnie z potwierdzeniem przez administratora (account approval) lub bez. Formularz (registration form) definiuje, które pola są widoczne/wymagane, oraz domyślny widok i przypisaną bramę po rejestracji.
- Tworzenie automatyczne przez API przy imporcie zamówień (z domyślną rolą, językiem i opiekunem).
Po rejestracji system może wymagać weryfikacji adresu e-mail (z zabezpieczeniem przed „automatycznym klikaniem" linków przez filtry antyspamowe).
Logowanie i bezpieczeństwo dostępu
- Logowanie e-mailem i hasłem.
- Uwierzytelnianie dwuskładnikowe (2FA) — kod e-mailem, z opcją zapamiętania zaufanego urządzenia (trusted device) na określoną liczbę dni.
- Polityka haseł — minimalna długość, wymóg wielkich/małych liter, cyfr, znaków specjalnych.
- „Nie pamiętam hasła" — reset hasła przez link e-mail (gdy włączony).
- Tokeny jednorazowe — linki w e-mailach/SMS (np. zmiana statusu, edycja awizo, potwierdzenie zamówienia) działają bez pełnego logowania; menu i zmiana języka są wtedy ukrywane.
- Logowanie zdarzeń — udane i nieudane próby logowania trafiają do logów systemowych.
Szczegóły bezpieczeństwa: rozdział Bezpieczeństwo, audyt i monitoring.
Awizacje — cykl życia
Awizacja (appointment) to serce systemu. Ten rozdział opisuje wszystko, co można z nią zrobić: od utworzenia, przez edycję i przenoszenie, po historię zmian i wydruk.
Tworzenie awizacji
Awizację tworzy się na dwa główne sposoby, zależnie od strony użytkownika:
- INTERNAL — przez okno dialogowe „Nowe awizo" wywoływane z Harmonogramu (kliknięcie „+" w slocie lub przycisku dodawania). Operator widzi pełny zestaw pól i może ustawić dowolny status początkowy.
- EXTERNAL — przez kreator „Dodaj Awizo" (przewodnik krok po kroku: operacja → magazyn/brama → okno czasowe → dane transportu → załączniki → ewentualne zamówienia).
Ułatwienia przy tworzeniu
- Automatyczne uzupełnianie pól, gdy istnieje tylko jedna opcja (jeden magazyn, jedna brama, jedna jednostka ładunkowa, jeden typ operacji).
- Domyślny status ustawiany automatycznie po wyborze operacji.
- Podsumowanie awizacji w ostatnim kroku kreatora (krok SUCCESS) z identyfikatorem awizo w formacie
WHC-123i przyciskiem szybkiego kopiowania. - Po dodaniu — sekcja „Co dalej?": dodaj kolejne identyczne awizo, dodaj kolejne puste, lub przejdź do swoich awizacji.
- Walidacja limitów i spójności przed zapisem (patrz Limity).
- Automatyczne powiadomienia (e-mail/SMS/systemowe) zaraz po utworzeniu.
Cykliczne / stałe awizacje (periodic appointments)
Dla stałych kontrahentów i powtarzalnych dostaw system pozwala definiować awizacje cykliczne — powtarzalne wpisy w harmonogramie (np. „codziennie 07:00, Rampa 1, dostawca X"), bez ręcznego dodawania każdego dnia.
Identyfikator awizacji
Każda awizacja ma czytelny identyfikator z prefiksem WHC- (np. WHC-4567). Identyfikator jest widoczny w oknach podglądu, na liście i w komunikatach, a dedykowany komponent pozwala go skopiować jednym kliknięciem — przydatne w korespondencji i przy zgłoszeniach.
Edycja awizacji
Po utworzeniu awizację można edytować w oknie podglądu/edycji. Zakres edycji zależy od uprawnień do pól (patrz Uprawnienia do pól):
- Zmiana danych kierowcy, pojazdu, ilości, jednostki ładunkowej, produktów, atrybutów, komentarzy, załączników.
- Zmiana operacji (po dodaniu) — z osobnym uprawnieniem, opcjonalnie wraz ze statusem.
- Zmiana czasu trwania (duration) w trybie DYNAMIC — z osobnym uprawnieniem.
- Ponowna walidacja limitów uruchamiana tylko, gdy zmienia się pole wpływające na limit (data, okno, ilość, magazyn, brama itd.).
- Podgląd pełnej wartości pól statycznych/nieedytowalnych (np. data utworzenia) oraz okno szybkiego kopiowania wartości pól.
Pola wykluczone (field exclusions)
Administrator może ukrywać lub wyłączać wybrane pola formularza zależnie od kontekstu (operacja, metoda odbioru, typ pojazdu, jednostka ładunkowa, rola, użytkownik, a nawet konkretna wartość atrybutu). Pola wykluczone nie są poddawane walidacji. Szczegóły: rozdział Pola awizacji i atrybuty.
Przenoszenie awizacji (zmiana terminu)
Przeniesienie to zmiana daty i/lub okna czasowego (a w trybie DYNAMIC dokładnych godzin). Dostępne mechanizmy:
- Selektor terminów z kolorowaniem okien wg zajętości (zielone/żółte/czerwone) — od razu widać, gdzie jest miejsce.
- Przeciągnij i upuść (drag & drop) w Harmonogramie (tryb DYNAMIC).
- Kopiowanie awizacji metodą „Ctrl + przeciągnij i upuść" (tryb DYNAMIC) — szybkie powielenie na inny termin.
- Walidacja limitów i nakładania przy przenoszeniu.
- Automatyczna zmiana statusu po przeniesieniu (osobny status dla ruchu wewnętrznego i zewnętrznego).
- Reset flagi spóźnienia po zmianie terminu.
- Zakres dostępnych dat spójny z zakresem Harmonogramu; automatyczne przewijanie do bieżącej daty.
Usuwanie i anulowanie
- Usuwanie to soft-delete — awizacja jest oznaczana jako usunięta, ale dane pozostają (audyt, raporty). Wymaga uprawnienia
appointment.delete(superadmin zawsze może). - Anulowanie to zwykle zmiana statusu na milestone
CANCELLED— awizacja zostaje w systemie z odpowiednim statusem. - Konta EXTERNAL mogą usuwać/anulować własne awizacje (jeśli pozwala konfiguracja).
- Usunięcie/anulowanie zamówieniowej awizacji zwalnia zarezerwowane produkty z powrotem do puli zamówienia.
Historia zmian (audyt awizacji)
Każda awizacja ma zakładkę „Historia zmian" rejestrującą każdą modyfikację pola: status, termin, okno, magazyn, brama, kierowca, pojazd, produkty, atrybuty, czas trwania i ponad 30 innych pól. Dla każdego wpisu zapisywane jest:
- kto dokonał zmiany (z wyróżnieniem zmian wykonanych automatycznie przez system),
- kiedy (z dokładnością do sekund),
- wartość poprzednia → nowa.
Pierwszy wpis to wartość początkowa (przy utworzeniu), kolejne to zmiany. Historia jest podstawą raportów mierzących czas między etapami (np. od OPERATION_STARTED do OPERATION_FINISHED). Dostęp wymaga uprawnienia apptHistory.preview.
Wydruk i kopiowanie awizacji
- Wydruk awizacji — z możliwością wyboru, które pola znaleźć się mają na wydruku (np. dane kierowcy + ładunek + PIN/QR).
- Kopiowanie wartości pól z okna podglądu (szybkie wklejenie do innych systemów).
- Powielanie awizacji (kopiowanie) jako szybkie tworzenie podobnych wpisów.
Wyliczanie czasu trwania operacji
W trybie DYNAMIC WHC sam wylicza, ile potrwa operacja, a tym samym jaki fragment bramy zajmie awizacja:
- Baza — z jednostek ładunkowych (
czas bazowy + ilość × czas na jednostkę) lub z sumy czasów produktów (zależnie od ustawienia metody wyliczania). - Dodatkowy czas operacji (extra operation time) — reguły wydłużające czas wg kryteriów (magazyn, brama, operacja, jednostka, pojazd, produkt, użytkownik, okno, data).
- Mnożnik nocny — wydłużenie lub skrócenie czasu w godzinach nocnych (np. mniejsza obsada nocą).
- Zaokrąglenie do kroku czasowego (time step).
W trybie STATIC czas operacji nie jest wyliczany automatycznie — awizacja zajmuje całe okno, a użytkownik INTERNAL może opcjonalnie podać oczekiwany czas (expected duration). Szczegóły: rozdział Okna czasowe.
Kolizje i spójność
- Wykrywanie nakładania (overlap) — w trybie DYNAMIC system pilnuje, by przedziały czasowe awizacji na tej samej bramie nie zachodziły na siebie.
- Kontrola spójności (coherency) — magazyn ↔ brama ↔ okno ↔ status ↔ operacja muszą do siebie pasować; w DYNAMIC awizacja musi mieścić się w oknie.
- Limity „jednocześnie" (SIMULTANEOUS) — kontrola, ile jednostek danego typu może być obsługiwanych w tym samym momencie (mapowanie minutowe).
Kolorowanie awizacji
Awizacje w widokach można kolorować według:
- statusu (kolor przypisany do statusu), albo
- jednostki ładunkowej (kolor przypisany do typu nośnika).
System dba o kontrast tekstu i ikon na jasnych tłach (czytelność na jasnych kolorach statusów/jednostek). Ikona spóźnienia kierowcy jest wyróżniana kontrastowym kolorem.
Spóźnienia kierowców
WHC automatycznie wykrywa spóźnienia:
- Po przekroczeniu progu (próg w minutach + punkt odniesienia: początek lub koniec okna) awizacja jest oznaczana jako spóźniona (delayed).
- Informacja o spóźnieniu pojawia się w oknie awizacji i na kafelkach w Harmonogramie (ikona).
- Można skonfigurować powiadomienie „Kierowca się spóźnił" (e-mail/SMS/systemowe).
- Spóźnienie jest resetowane po przeniesieniu awizacji na nowy termin.
- Sumy spóźnień per kontrahent trafiają do raportów.
Widoki operacyjne
WHC oferuje kilka komplementarnych widoków na te same awizacje — każdy zoptymalizowany pod inny scenariusz pracy. Dostęp do każdego z nich reguluje osobne uprawnienie (views.*).
Harmonogram (schedule)
Główny kalendarz awizacji — centrum dowodzenia koordynatora. Adres: /admin/schedule (z opcją wskazania magazynu: /admin/schedule/{magazyn}).
Funkcje
- Perspektywy czasu: 1 dzień, 3 dni, 5 dni, tydzień, miesiąc (M). System sam dobiera perspektywę do wielkości ekranu (np. 1 dzień na małych ekranach, 3 dni gdy mało bram).
- Podział na bramy/rampy w kolumnach; przy wielu magazynach — podział menu na magazyny.
- Dodawanie awizacji kliknięciem „+" w slocie (puste i niepuste sloty, oba tryby okien).
- Podgląd, edycja i przenoszenie awizacji (drag & drop w DYNAMIC, Ctrl+drag = kopiowanie).
- Wyszukiwarka awizacji z opcją „Pokaż awizo w Harmonogramie" (przeskok do dnia i bramy).
- Wyróżnianie awizacji po dodaniu/zamknięciu okna (z auto-przewinięciem do właściwego dnia i bramy).
- Linia czasu (current time line) — pozioma linia „teraz".
- Wiszący/przyklejony nagłówek — zawsze widać dzień i bramę, jak nisko byś nie przewinął.
- Tryb kompaktowy („ściskanie" Harmonogramu w pionie) — więcej awizacji na ekranie.
- Kolorowanie okien wg zajętości (zielony/żółty/czerwony) na bazie limitów.
- Konfigurowalny wygląd kafelków awizacji (HTML + edytor) — wybierasz, jakie dane i ikony pokazać (status, ilość, kierowca, nr zamówienia, ikona spóźnienia itd.).
- Filtrowanie po zakresie dat (mechanizm konfigurowalny), automatyczna synchronizacja danych co ~30 s.
- Utrzymywanie pozycji przewijania przy zmianie bramy/dnia.
Oś czasu (timeline)
Widok osi czasu prezentujący awizacje per brama/okno czasowe w układzie liniowym. Adres: /admin/timeline.
Funkcje
- Filtry: operacja, status, magazyn, brama, kontrahent — z zakładkami filtrów (zapisane zestawy).
- Konfigurowalny wygląd kafelków (górna i dolna linia tekstu).
- Przenoszenie awizacji między slotami.
- Opcjonalne pomijanie pustych slotów/dat przy aktywnym filtrze (mniej szumu).
- Sortowanie awizacji po godzinie rozpoczęcia.
- Auto-przewijanie do bieżącej daty.
Lista awizacji (list)
Tabelaryczny widok awizacji w wybranym zakresie dat. Adres: /admin/appt-list.
Funkcje
- Tabela z konfigurowalnymi kolumnami per rola — każda rola widzi inny zestaw pól (w tym atrybuty/dodatkowe pola).
- Sortowanie po kolumnach i filtrowanie.
- Podgląd/edycja awizacji oraz przyciski „kolejnych/sugerowanych statusów" zamiast sztywnych przycisków.
- Menu boczne (dostępne dla lepszej nawigacji).
- Czytelne wyświetlanie wartości atrybutów, autora i awizowanego podmiotu.
Lista dziś / Awizacje dziś
Szybkie widoki „na dziś" do obsługi bieżącego dnia:
- Lista Dziś (
/admin/appt-list-today) — lista awizacji zaplanowanych na bieżący dzień (jak Lista, ale z domyślnym filtrem na dziś). - Awizacje Dziś (
/appts-today) — uproszczony, mobilny widok dnia (lista/kafelki) do szybkiej obsługi statusów.
Twoje awizacje (EXTERNAL)
Widok kontrahenta z jego własnymi awizacjami. Adres: /external-user/appointments.
Funkcje
- Lista własnych awizacji z podglądem, drukiem, anulowaniem i edycją dozwolonych pól.
- Przeniesienie (zmiana terminu) istniejącej awizacji (
.../move). - Edycja wybranego awizo (
.../edit). - Kolorowanie i ukrywanie pól wykluczonych.
- Przeszłe awizacje wyszarzone i przeniesione na koniec listy (czytelność).
- Pełne wsparcie mobilne (RWD) — obsługa z telefonu kierowcy/spedytora, w tym dodawanie załączników.
Dodaj awizo (EXTERNAL)
Kreator nowej awizacji dla kontrahenta. Adres: /external-user/add-appointment. Opisany w rozdziale Awizacje — cykl życia; kluczowe cechy:
- przewodnik krok po kroku z selektorem okien czasowych,
- powiązanie z zamówieniem (gdy moduł zamówień włączony),
- weryfikacja limitów już na etapie wyboru terminu,
- podsumowanie i identyfikator
WHC-…na końcu.
Widoki publiczne i linki tokenowe (landings)
Specjalne strony otwierane z linków w e-mailach/SMS (bez pełnego logowania):
| Widok | Zastosowanie |
|---|---|
| Dodaj awizo z linku (token) | Tworzenie awizacji z prefillem zamówienia (link z ERP/maila). |
| Zmiana statusu z linku | Jednorazowa akceptacja/odrzucenie/zmiana statusu awizo z maila lub SMS. |
| Dokończ awizo | Wieloetapowe uzupełnienie danych awizacji (termin, kierowca, pojazd) z linku do zamówienia. |
| Komunikaty błędów | Np. „dla tego zamówienia awizo już istnieje". |
Tabela zbiorcza widoków awizacji
| Widok | Adres | Dla kogo | Najlepszy do |
|---|---|---|---|
| Harmonogram | /admin/schedule |
INTERNAL | planowania i obsługi całego dnia/tygodnia na rampach |
| Oś czasu | /admin/timeline |
INTERNAL | analizy obłożenia per brama z filtrami |
| Lista | /admin/appt-list |
INTERNAL | pracy tabelarycznej, sortowania, eksportu spojrzenia |
| Lista dziś | /admin/appt-list-today |
INTERNAL | szybkiego przeglądu dzisiejszych dostaw |
| Awizacje dziś | /appts-today |
INTERNAL | obsługi mobilnej, zmian statusów w ruchu |
| Twoje awizacje | /external-user/appointments |
EXTERNAL | samoobsługi kontrahenta |
| Dodaj awizo | /external-user/add-appointment |
EXTERNAL | rezerwacji terminu przez kontrahenta |
Widoki na duże ekrany (TV), stróżówkę i kioski opisuje rozdział Stróżówka, kioski i ekrany TV.
Okna czasowe
Okna czasowe (time slots) decydują o tym, kiedy i gdzie można umawiać dostawy. To one przekładają politykę przepustowości magazynu na konkretne, dostępne terminy widziane przez kontrahentów.
Tryb STATIC vs DYNAMIC
WHC pracuje w jednym z dwóch trybów okien (ustawienie timeSlotsMode), wybieranym przy wdrożeniu:
Tryb STATIC (okna stałe)
- Awizacja zajmuje całe okno (np. 08:00–09:00), niezależnie od wielkości ładunku.
- W jednym oknie może być wiele awizacji (pojemność reguluje się limitami).
- Brak automatycznego wyliczania czasu — opcjonalnie operator INTERNAL podaje oczekiwany czas (expected duration).
- Kontrahentowi można pokazywać okno jako pełen przedział (
FULL, np. „08:00–09:00") albo tylko godzinę początku (TIME_FROM, np. „08:00").
Tryb DYNAMIC (okna dynamiczne)
- Awizacja ma własny czas trwania wyliczany z ładunku/produktów; zajmuje fragment bramy w czasie.
- W danym momencie jedna operacja na bramę (system pilnuje nakładania).
- Wymaga konfiguracji wyliczania czasu operacji (z jednostek ładunkowych lub produktów) i ewentualnie dodatkowego czasu operacji.
- Umożliwia przeciągnij-i-upuść oraz precyzyjne (minutowe) przenoszenie.
| Kryterium decyzji | Wybierz STATIC | Wybierz DYNAMIC |
|---|---|---|
| Czas operacji | stały, niezależny od ilości | zależny od liczby palet/produktów |
| Model rampy | sloty „na zakładkę" | precyzyjna oś czasu zajętości |
| Złożoność konfiguracji | niższa | wyższa (reguły czasu) |
Definiowanie okien
Okna definiuje się w widoku Konfiguracja → Okna Czasowe (/admin/time-slots):
- Szablon tygodniowy — okna per dzień tygodnia (poniedziałek–niedziela), powtarzalne. (Uwaga: w WHC numeracja dni zaczyna się od poniedziałku.)
- Okna dla konkretnych dat (specyficzne) — wyjątki od szablonu na wybrany dzień (np. krótszy grafik w wigilię, dodatkowe okna w szczycie sezonu).
- Okna definiuje się z dokładnością do minut, można je edytować i zawężać.
- Kopiowanie okien: z dnia tygodnia na konkretną datę, z jednego dnia na inne dni, z bramy na inne bramy.
Bezpieczne zmiany okien
Edycja i usuwanie okien to operacje wrażliwe (mogą dotyczyć istniejących awizacji), więc WHC:
- pokazuje listę awizacji dotkniętych zmianą okna,
- informuje, gdzie znaleźć awizacje z usuwanego slotu,
- waliduje poprawność wprowadzanych przedziałów (w tym przypadki graniczne wokół północy 00:00).
Selektor okien czasowych (time slot picker)
Komponent, w którym kontrahent (i operator) wybiera termin. Pokazuje dostępne okna w układzie dni, z uwzględnieniem limitów, blokad i już zajętej pojemności. Konfigurowalny (ustawienia selektora):
- liczba dni na stronę,
- najmniejszy widoczny slot (w krokach czasowych),
- wysokość i marginesy slotów,
- kolorowanie okien wg zajętości (zielony/żółty/czerwony) — także podczas przenoszenia awizacji.
Horyzont i wyprzedzenie awizacji (dla EXTERNAL)
Dla kontrahentów można precyzyjnie ograniczyć, jak daleko i jak wcześnie wolno awizować:
| Parametr | Działanie |
|---|---|
| Maks. dni do przodu | Najdalszy dzień, na który można się awizować. |
| Najwcześniejszy dzień | Dziś / dziś, ale z minimalnym wyprzedzeniem godzinowym / dopiero za N dni. |
| Min. wyprzedzenie w godzinach | Przy „dziś, ale później" — ile godzin od teraz minimum. |
| Godzina graniczna na „jutro" | Do której godziny dnia można jeszcze awizować na dzień następny. |
| Dni wolne w kalkulacji | Czy dni bez dostępnych okien wliczać przy liczeniu najwcześniejszej możliwej daty. |
To kluczowe narzędzie do ochrony magazynu przed dostawami „na ostatnią chwilę" i do wymuszenia planowania z wyprzedzeniem.
Dodatkowy czas operacji (extra operation time)
W trybie DYNAMIC możesz precyzyjnie modelować, ile naprawdę trwa operacja, dodając reguły wydłużające czas. Widok: Konfiguracja → Dodatkowy Czas Operacji (/admin/extra-operation-times).
Każda reguła ma:
- kryteria dopasowania: magazyn, brama, typ operacji, metoda odbioru, jednostka ładunkowa, typ pojazdu, okno czasowe, użytkownik, data, produkt, grupa produktów,
- sposób naliczania: na operację (per operation), za ilość produktu (per product quantity) lub za ilość jednostek ładunkowych (per loading unit quantity),
- wartość (minuty).
Przykład: „+15 min dla każdej operacji z chłodnią", „+2 min za każdą paletę big-bag", „+30 min na bramie 1 w poniedziałki".
Mnożnik nocny
Operacje nocne często trwają dłużej (mniejsza obsada, gorsza widoczność). WHC pozwala ustawić:
- zakres godzin nocnych (początek i koniec),
- procentowy mnożnik czasu operacji w tym zakresie (np. 120% = +20%, 50% = skrócenie o połowę).
Mnożnik wpływa na wyliczany czas trwania awizacji w trybie DYNAMIC.
Limity tygodniowe jednostek
Niezależnie od okien można ustawić limit tygodniowy umownej jednostki miary dla operacji przychodzących (np. maksymalna liczba ton dostaw na tydzień). Wartość 0 oznacza wyłączenie limitu. Mechanizm współgra z modułem limitów opisanym w kolejnym rozdziale.
Limity i blokady
Moduł limitów (limits) to mechanizm, który chroni przepustowość magazynu i wymusza politykę dostaw. To dzięki niemu dostępne okna czasowe „znikają" dla kontrahenta, gdy magazyn osiągnął zaplanowane obłożenie. Widok: Blokady i Limity (/admin/limits).
Dwie kategorie w interfejsie
Widok limitów dzieli się na dwie części:
- Blokady dni per użytkownik — prosty pod-widok do blokowania wybranych dat konkretnemu kontrahentowi (np. „dostawca X nie awizuje w piątki").
- Zaawansowane (wszystkie limity i blokady) — pełna konfiguracja limitów pojemnościowych i blokad z paginacją, kopiowaniem i priorytetami.
Limity pojemnościowe — co można ograniczać
Limit określa maksimum jednej z wielkości (limit entity):
| Wielkość | Co ogranicza |
|---|---|
MAX_ARRIVALS |
liczbę awizacji (przyjazdów) |
MAX_LOADING_UNITS |
liczbę jednostek ładunkowych (np. palet) |
MAX_BASIC_LOADING_UNITS |
ilość umownej jednostki miary (np. ton, m³) |
MAX_DURATION |
łączny czas operacji (minuty) |
MAX_PRODUCTS |
liczbę produktów |
Okres obowiązywania (limit period)
| Okres | Znaczenie |
|---|---|
PER_DAY |
maksimum w skali dnia |
PER_TIME_SLOT |
maksimum w jednym oknie czasowym |
SIMULTANEOUS |
maksimum jednocześnie w danym momencie (mapowanie minutowe) — np. „maksymalnie 1 kontener naraz dla wszystkich bram magazynu" |
Kryteria dopasowania limitu
Limit można zawęzić do dowolnej kombinacji kryteriów — to czyni go bardzo precyzyjnym narzędziem:
- lokalizacja: magazyn, brama,
- czas: okno czasowe, dzień tygodnia, konkretne daty,
- rodzaj operacji: typ operacji, metoda odbioru,
- ładunek: jednostka ładunkowa, produkt, grupa produktów,
- transport: typ pojazdu,
- strona: konkretny użytkownik (kontrahent),
- dane awizacji: wartość konkretnego atrybutu (dodatkowego pola) — np. limit tylko dla awizacji z atrybutem „Towar niebezpieczny = TAK".
Przykłady:
„Maksymalnie 6 przyjazdów dziennie na Rampie 3" · „Maksymalnie 200 palet dziennie w magazynie Wrocław" · „Maksymalnie 1 chłodnia jednocześnie na całym obiekcie" · „Maksymalnie 4 awizacje na okno dla dostawcy X".
Limity blokujące vs ostrzegające
Każdy limit ma flagę typu:
- Blokujący (blocking) — przekroczenie uniemożliwia zapis awizacji (komunikat błędu, slot niedostępny).
- Ostrzegający (caution) — przekroczenie tylko ostrzega (komunikat), ale pozwala zapisać; slot widoczny z oznaczeniem „ponad limit".
Dla każdego limitu można zdefiniować własny komunikat błędu i ostrzeżenia (wielojęzyczny), aby precyzyjnie poinstruować użytkownika.
Priorytety i kolorowanie
- Priorytet rozstrzyga konflikty, gdy do awizacji pasuje wiele limitów.
- Progi procentowe kolorów (color thresholds) sterują kolorowaniem okien wg zajętości w Harmonogramie i selektorze (zielony → żółty → czerwony). Z kalkulacji wykluczane są awizacje i limity usunięte.
Blokady (kategorie grup limitów)
Poza limitami pojemnościowymi WHC oferuje gotowe kategorie blokad (limit group category), które rozwiązują typowe potrzeby operacyjne:
| Kategoria | Zastosowanie biznesowe |
|---|---|
Blokada dat per użytkownik (DATES_PER_USER_BLOCKADES) |
Zablokuj wybrane daty konkretnemu kontrahentowi (urlop magazynu danego dostawcy, sankcja za spóźnienia). Można blokować wiele dat naraz. |
Blokada okien czasowych per użytkownik (TIME_SLOTS_PER_USER_BLOCKADES) |
Zablokuj wybrane okna konkretnemu użytkownikowi (np. dostawca może awizować tylko popołudniami). |
Blokada bram (DOCK_BLOCKADES) |
Wyłącz bramę bezterminowo lub na wybrany okres (remont, awaria, przezbrojenie). |
Dozwolone operacje per brama (ALLOW_DOCK_OPERATIONS) |
Ustal, jakie typy operacji (załadunek/rozładunek) są dozwolone na danej bramie. |
Dozwolone jednostki ładunkowe per brama (ALLOW_DOCK_LOADING_UNITS) |
Ustal, jakie jednostki (np. tylko palety, bez kontenerów) obsługuje dana brama. |
Przekraczanie limitów (uprawnienie)
Uprawnienie exceedLimits (oraz konto superadmin) pozwala wybranym użytkownikom ignorować blokady limitów — widzą sloty ponad limit i mogą zapisać awizację mimo przekroczenia. To pozwala rozróżnić koordynatora (może „docisnąć" pilną dostawę) od kontrahenta (musi trzymać się limitów). Uwaga: w trybie DYNAMIC fizyczne nakładanie się awizacji jest blokowane osobno, niezależnie od tego uprawnienia.
Egzekucja limitów w praktyce
- Limity są sprawdzane przy tworzeniu, edycji (gdy zmienia się pole istotne dla limitu) i przenoszeniu awizacji.
- Sprawdzane są też przy zwracaniu listy dostępnych okien — slot zablokowany po prostu nie pojawia się kontrahentowi (lub pojawia się jako ostrzegawczy).
- Dostępny jest podgląd „czy przekroczono limit" jeszcze przed zapisem.
- Limity (jak grupy z dziećmi) usuwa się kaskadowo (soft-delete grupy + jej pozycji).
- Limity można kopiować (powielać) — szybkie tworzenie podobnych reguł.
Statusy i przepływ procesu (flow)
Statusy odwzorowują w WHC realny proces obsługi pojazdu na doku — od zatwierdzenia awizacji, przez wjazd, po zakończenie operacji. To one napędzają stróżówkę, kioski, ekrany TV, powiadomienia i raporty czasu operacji. Widok: Konfiguracja → Statusy i Flow (/admin/appt-statuses).
Status awizacji (appt status)
Status to widoczna etykieta etapu. Definiuje się go per typ operacji (inne statusy dla rozładunku, inne dla załadunku). Status ma:
- nazwę (wielojęzyczną) i opis,
- kolor (RGB) i ikonę — używane na kafelkach, listach, w stróżówce i na TV,
- pozycję (kolejność na osi/selektorze),
- domyślność — osobno dla awizacji tworzonych przez INTERNAL i przez EXTERNAL,
- status po przeniesieniu — automatycznie nadawany po zmianie terminu (osobno dla ruchu wewnętrznego i zewnętrznego),
- zewnętrzne ID statusu (integrated system status id) — do mapowania na ERP/integracje.
Operacje na statusach
- Dodawanie, edycja, usuwanie statusów.
- Kopiowanie statusów z jednej operacji do innej — szybka konfiguracja podobnych procesów.
- Wyświetlanie ID statusu w widoku konfiguracji.
Milestone (kamień milowy)
Każdy status można powiązać z jednym z kamieni milowych — abstrakcyjnych faz wspólnych dla całego systemu. Milestone steruje logiką, niezależnie od nazwy nadanej statusowi:
| Milestone | Znaczenie | Konsekwencje w systemie |
|---|---|---|
APPROVED |
zatwierdzone/awizowane | stan początkowy, awizacja oczekuje |
ARRIVED |
kierowca przyjechał | start liczenia obecności, automatyka wjazdu |
NOT_ARRIVED |
nie dotarł | obsługa nieobecności |
REJECTED_ON_ARRIVAL |
odrzucony przy wjeździe | kierowca nie został wpuszczony |
IN_YARD |
na placu | oczekiwanie na rampę |
OPERATION_STARTED |
rozpoczęto operację | aktywna rezerwacja produktów, start pomiaru czasu |
OPERATION_FINISHED |
zakończono operację | koniec pomiaru czasu operacji |
CANCELLED |
anulowane | zwolnienie zasobów/produktów |
DONE |
zakończone | awizacja zamknięta |
Milestone decyduje m.in. o: rezerwacji produktów (aktywna do OPERATION_STARTED), logice spóźnień (po ARRIVED), grupowaniu w stróżówce i na TV, oraz o kolumnach raportów (czas między milestone’ami).
Kolejne / sugerowane statusy (next statuses)
Zamiast pozwalać na dowolne zmiany, WHC prowadzi użytkownika grafem dozwolonych przejść status X → Y:
- Przejścia definiuje się osobno dla strony INTERNAL i EXTERNAL — operator i kontrahent widzą inne przyciski „następnego statusu".
- Każdy przycisk ma własny tekst i podpowiedź (tooltip), kolejność i kolor.
- Wybór zestawu przycisków zależy od roli użytkownika.
- Opcjonalne potwierdzenie zmiany statusu (ustawienie globalne) — zabezpieczenie przed przypadkowym kliknięciem.
- Zmiana statusu jest dodatkowo chroniona uprawnieniem do przejścia X → Y (patrz Uprawnienie do zmiany statusu).
Przyciski „kolejnych statusów" są używane spójnie w oknie awizacji, na liście, w stróżówce i kioskach.
Fazy przepływu (flow phases)
Faza flow to grupa statusów reprezentująca etap procesu (np. „Na placu", „Oczekujący", „Zaplanowani", „Zakończeni"). Fazy:
- grupują wiele statusów w jeden logiczny etap,
- mają kolejność i wielojęzyczne nazwy,
- mogą być konfigurowane per widok (np. inny układ faz w stróżówce niż na osi czasu) — widoczność i kolejność faz dla danego ekranu.
Fazy flow porządkują widoki operacyjne (zwłaszcza Stróżówkę) w czytelne sekcje „co się dzieje na jakim etapie".
Statusy zamówień (order statuses)
Gdy włączony jest moduł zamówień, zamówienia mają własną ścieżkę statusów (oddzielną od statusów awizacji), definiowaną w Konfiguracja → Statusy Zamówień (/admin/order-statuses). Status zamówienia ma:
- przypisanie do typu zamówienia (zakup
PURCHASE_ORDER/ sprzedażSALES_ORDER), - kolor, ikonę, pozycję,
- domyślność przy utworzeniu,
- zewnętrzne ID statusu (do ERP).
Mapowanie statusów awizacja ↔ zamówienie
WHC potrafi synchronizować statusy między awizacją a powiązanym zamówieniem, według reguł mapowania:
| Reguła | Działanie |
|---|---|
ONE_APPT_TO_ORDER |
zmiana statusu jednej awizacji aktualizuje status zamówienia |
ALL_APPT_TO_ORDER |
status zamówienia zmienia się, gdy wszystkie powiązane awizacje osiągną dany status |
ONE_ORDER_TO_APPT |
zmiana statusu zamówienia aktualizuje awizację |
ALL_ORDER_TO_APPT |
analogicznie w drugą stronę |
Dzięki temu zmiana etapu w jednym module automatycznie odzwierciedla się w drugim — bez podwójnej obsługi.
Zamówienia i produkty
Moduł zamówień (orders) łączy WHC ze światem ERP: dostawy i odbiory wynikają z konkretnych zamówień zakupu i sprzedaży, a awizacja staje się „realizacją transportową" tych zamówień. Moduł jest opcjonalny — włącza się go globalnie (ustawienie ordersMode) i konfiguruje per typ operacji.
Czym jest zamówienie (order)
Zamówienie to dokument źródłowy, zwykle importowany z ERP (np. Microsoft Dynamics 365 Business Central) lub przez API. Zawiera m.in.:
- typ: zamówienie zakupu (
PURCHASE_ORDER) lub sprzedaży (SALES_ORDER), - identyfikator z systemu zewnętrznego (do mapowania na ERP),
- dostawcę, ceny, datę zamówienia,
- okno realizacji: najwcześniejsza i najpóźniejsza data awizacji (
minApptDate/maxApptDate), - magazyn i bramę docelową, jednostkę i ilość,
- opis towaru, adres,
- produkty (pozycje) i atrybuty zamówienia (dodatkowe pola),
- status zamówienia i flagę „zrealizowane" (
isCompleted), - token do linku „dodaj awizo z tego zamówienia".
Widok zamówień
Uniwersalny widok Zamówienia (/orders) działa zarówno dla INTERNAL, jak i EXTERNAL (konta zewnętrzne widzą tylko własne zamówienia). Pozwala przeglądać zaimportowane zamówienia i tworzyć z nich awizacje. Widok jest stronicowany (paginacja) dla wydajności.
Selektor zamówień (orders picker)
Kluczowy komponent przy tworzeniu awizacji w trybie zamówień — pozwala wybrać, które zamówienia (lub ich części) realizuje dana awizacja. Funkcje:
- wybór jednego lub wielu zamówień (zależnie od konfiguracji operacji),
- podgląd produktów, ilości i adresu magazynu per zamówienie,
- reguła „stare zamówienia jako pierwsze" (patrz niżej),
- automatyczne dedukowanie magazynu z wybranego zamówienia (jeśli zamówienie ma przypisany magazyn),
- aktualizacja puli dostępnych zamówień po dodaniu awizacji,
- wykluczanie zamówień przeterminowanych i już w pełni zrealizowanych,
- wysoka wydajność (zoptymalizowany pod duże listy).
Produkty i grupy produktów
Widok Konfiguracja → Produkty (/admin/products) zarządza katalogiem:
- Grupy produktów (product groups) — np. kategorie towarowe.
- Produkty (products) — indeksy z nazwą (wielojęzyczną), kodem i opcjonalnym czasem operacji (do wyliczania czasu trwania awizacji w trybie DYNAMIC).
Produkty występują:
- na zamówieniu (pozycja + ilość),
- bezpośrednio na awizacji (produkt + ilość), niezależnie od zamówień,
- jako kryterium limitów i dodatkowego czasu operacji.
Ilości produktów i jednostek ładunkowych mogą być niecałkowite, z konfigurowalną precyzją (do 6 miejsc po przecinku).
Konfiguracja modułu per operacja
Dla każdego typu operacji (widok Operacje) ustala się zachowanie zamówień:
| Ustawienie operacji | Działanie |
|---|---|
| Tryb zamówień włączony | czy awizacje tej operacji są wiązane z zamówieniami |
| Wiele zamówień na awizację | czy jedna awizacja może realizować kilka zamówień |
| Częściowa realizacja | czy zamówienie można transportować w częściach (w wielu awizacjach) |
| Produkty | czy operacja korzysta z produktów |
| Awizo bez zamówienia | czy wolno utworzyć awizację bez powiązanego zamówienia |
| Stare zamówienia jako pierwsze | priorytetyzacja starszych zamówień przy wyborze |
Częściowa realizacja zamówienia
Gdy operacja dopuszcza częściową realizację, jedno zamówienie może być transportowane w kilku awizacjach. WHC śledzi, ile z każdej pozycji już zaplanowano:
- ilość całkowita − ilość zarezerwowana = ilość dostępna do awizacji,
- po pełnej realizacji zamówienie jest oznaczane jako zrealizowane (
isCompleted), - przypadek szczególny: gdy w trybie z produktami tworzymy awizo z zamówienia bez produktów, takie zamówienie traktowane jest jako jednorazowe (realizowane w całości w jednym awizo).
Rezerwacja produktów
Produkty z zamówienia są rezerwowane, gdy powiązana awizacja osiąga status z odpowiednim milestone (rezerwacja aktywna do OPERATION_STARTED). Dzięki temu te same pozycje nie zostaną zaplanowane dwa razy. Usunięcie lub anulowanie awizacji zwalnia rezerwację z powrotem do puli zamówienia. W selektorze i podglądzie widać zarezerwowane ilości per produkt/awizo.
„Stare zamówienia jako pierwsze"
Reguła wymuszająca, by starsze zamówienia były transportowane w pierwszej kolejności względem podobnych, nowszych. Za „tożsame" uznawane są zamówienia mające przypisany ten sam magazyn. Zapobiega to zaleganiu starych zamówień i poprawia rotację.
Powiązanie z awizacją i automatyzacje
- Awizacja może być powiązana z jednym lub wieloma zamówieniami (oraz z konkretnymi ilościami produktów z tych zamówień).
- Przy imporcie zamówienia może zostać wysłany e-mail/SMS z linkiem do formularza nowej awizacji.
- Tworzenie awizacji z zamówienia uruchamia łańcuch automatyzacji (np. callback do ERP).
- Dane zamówień (w tym atrybuty zamówień) można pokazywać na kafelkach awizacji (Harmonogram, Oś czasu, TV) oraz w nagłówku okna podglądu, a także w treści powiadomień e-mail/SMS/systemowych.
Import zamówień z ERP opisuje rozdział Integracje i API.
Pola awizacji i atrybuty
WHC pozwala dopasować zestaw pól awizacji do procesu konkretnego magazynu — bez zmian w kodzie. Obok pól standardowych (predefiniowanych) można dodawać własne atrybuty (dodatkowe pola), grupować je tematycznie i sterować ich widocznością.
Pola predefiniowane (standardowe)
To wbudowane pola awizacji, m.in.: data i czas, magazyn, brama, operacja, status, jednostka ładunkowa i ilość, umowna jednostka miary, produkt i ilość, metoda odbioru, typ pojazdu, dane kierowcy, numery rejestracyjne, komentarze, załączniki, awizowany podmiot.
Wybrane usprawnienia pól wbudowanych:
- Imię i nazwisko kierowcy jako jedno połączone pole (obok wariantów osobnych).
- Numer pojazdu (ciągnika) i numer naczepy jako dwa osobne pola.
- Czytelne wartości puste — zamiast pustki wyświetlany jest konfigurowalny znak (np.
-).
Atrybuty (dodatkowe pola awizacji)
Atrybut (attribute) to konfigurowalne pole tworzone przez administratora w widoku Konfiguracja → Dodatkowe Pola Awizo (/admin/appt-fields). Pozwala zapisać dane specyficzne dla branży/klienta — np. „Numer awizo dostawcy", „Temperatura", „Kod SSCC", „Numer rampy klienta".
Typy atrybutów
| Typ | Zastosowanie |
|---|---|
| Tekst (STRING) | krótka wartość tekstowa |
| Tekst wielowierszowy (TEXTAREA) | dłuższe opisy, uwagi |
| Link / odnośnik (LINK) | klikalny URL (np. do dokumentu) |
| Lista rozwijana (ENUM) | wybór jednej wartości z listy |
| Lista wielokrotnego wyboru (ENUM_MULTISELECT) | wybór wielu wartości |
| Generowany PIN (GENERATED_PIN) | automatyczny kod dostępu kierowcy |
| Generowany UUID (GENERATED_UUID) | automatyczny, unikatowy identyfikator |
Walidatory atrybutów
- Wymagane (REQUIRED) — pole musi być wypełnione.
- Unikatowe (UNIQUE) — wartość nie może się powtórzyć w obrębie wszystkich awizacji (np. unikatowy numer awizo dostawcy).
PIN i kod QR
Atrybut typu generowany PIN zasila funkcje kontroli wjazdu:
- PIN jest wpisywany przez kierowcę w Kiosku wjazdu lub odczytywany w Stróżówce,
- na bazie PIN-u generowany jest kod QR,
- do e-maila można dołączyć PDF z PIN-em i kodem QR (wygląd i wersja językowa PDF są konfigurowalne).
Kategorie i kolejność pól
Pola (zarówno predefiniowane, jak i atrybuty) można:
- grupować w kategorie tematyczne (np. „Ładunek", „Pojazd", „Kierowca"),
- dowolnie zmieniać ich pozycję w oknie awizacji,
- ustawiać szerokość w widokach tabelarycznych.
To pozwala zbudować przejrzysty, logiczny formularz awizacji dopasowany do procesu.
Kolumny awizacji per rola
Każda rola może mieć własny zestaw kolumn widocznych w widoku „Lista" (role appt fields) — w tym kolumny będące atrybutami. Np. dział celny widzi inne kolumny niż dział transportu.
Wykluczanie pól (field exclusions)
Mechanizm wykluczeń (widok /admin/field-exclusions) pozwala ukrywać lub wyłączać pola formularza awizacji zależnie od kontekstu. Reguła wykluczenia działa wg kryteriów:
- typ operacji, metoda odbioru, typ pojazdu, jednostka ładunkowa,
- rola, konkretny użytkownik,
- a nawet konkretna wartość atrybutu (np. ukryj pole „Temperatura", gdy „Towar mrożony = NIE").
Można też wykluczać konkretne wartości pól z list (np. ukryć wybraną jednostkę ładunkową albo konkretną operację z list w danym kontekście). Pola wykluczone nie są poddawane walidacji.
Pola jako parametry powiadomień i wyświetlania
Wartości pól (standardowych i atrybutów) są dostępne jako parametry {{...}} w szablonach e-mail, SMS, powiadomień systemowych oraz w szablonach wyświetlania (kafelki w Harmonogramie, nagłówek okna podglądu, linie tekstu na TV). Przykłady: {{appt.warehouse}}, {{appt.loadingUnitWithQuantity}}, {{appt.appointedUser.NIP}}, {{vehicleType}}, nazwa pliku ikony statusu. Szczegóły: rozdział Powiadomienia.
Powiadomienia (e-mail, SMS, systemowe)
WHC komunikuje się z uczestnikami procesu trzema kanałami. Wszystkie działają na tej samej zasadzie: szablon (wielojęzyczny) + wyzwalacz/zdarzenie (trigger/event) + odbiorcy + parametry {{...}}. Każdy kanał ma osobny widok konfiguracji.
Kanały
| Kanał | Widok | Charakterystyka |
|---|---|---|
Powiadomienia → E-mail (/admin/email-notification-templates) |
szablony HTML, załączniki, masowa wysyłka, asynchroniczna | |
| SMS | Powiadomienia → SMS (/admin/sms-notification-templates) |
przez bramkę HostedSMS, walidacja numerów |
| Systemowe (dzwoneczek) | Powiadomienia → W systemie (/admin/system-notification-templates) |
wewnątrz aplikacji, w czasie rzeczywistym, dźwięk + popup |
Wyzwalacze (zdarzenia)
Powiadomienie wysyła się w reakcji na zdarzenie (event). Najważniejsze:
- utworzenie awizacji (appointment created),
- usunięcie awizacji (appointment deleted),
- przeniesienie awizacji — zmiana daty/czasu (appointment moved),
- zmiana statusu (status changed),
- zmiana pola / atrybutu awizacji,
- zmiana czasu trwania (duration) w trybie DYNAMIC,
- spóźnienie kierowcy (delayed),
- timery: 1 / 3 / 7 dni przed datą awizacji (przypomnienia),
- import zamówienia (order imported),
- rejestracja / akceptacja / weryfikacja e-mail / reset hasła użytkownika,
- kod 2FA,
- decyzja o wjeździe: dopuszczenie / odrzucenie kierowcy.
Odbiorcy
Dla każdego szablonu wybiera się odbiorców (recipient types), również kilku jednocześnie:
| Odbiorca | Kto to |
|---|---|
| Awizowany podmiot | kontrahent przypisany do awizacji |
| Opiekun (Account Manager) | użytkownik INTERNAL przypisany do kontrahenta |
| Twórca awizacji | osoba, która utworzyła awizo |
| Kierowca | przez SMS/e-mail (jeśli podano kontakt) |
| Role wewnętrzne powiązane z magazynem | masowa wysyłka do wszystkich użytkowników INTERNAL z daną rolą powiązanych z magazynem (np. Magazyn, Logistyka, Planista, Biuro) |
Można też ograniczyć wyzwalacz do roli inicjatora (kto wywołał zdarzenie) — np. „wyślij tylko, gdy status zmienił kontrahent".
Parametry {{...}}
Treść szablonów dynamicznie podstawia dane. Dostępna pula obejmuje m.in.:
- dane awizacji (data, godziny, magazyn, brama, status, ilości, jednostka ładunkowa),
- dane kierowcy i pojazdu,
- dane awizowanego podmiotu (w tym NIP),
- dane zamówień i ich atrybutów,
- atrybuty (dodatkowe pola) awizacji,
- linki z tokenami: edycja awizo, zmiana statusu, akceptacja/odrzucenie, dodanie awizo z zamówienia,
- dane systemu/hosta, formatowanie dat (w tym poprzednia data przy przeniesieniu
{{oldDatetime}}), - nazwa pliku ikony statusu (do wyświetlenia ikony).
System obsługuje też warunkowe wyświetlanie fragmentów HTML (np. if) w blokach definiowanych przez użytkownika.
E-mail — funkcje szczegółowe
- Szablony HTML z edycją kodu; gotowe szablony domyślne (PL/EN).
- Załączniki: pliki awizacji ze storage, generowany PDF z PIN-em i kodem QR, dowolne załączniki ze szablonu.
- Masowa wysyłka (cron poranny) — przypomnienia 1/3/7 dni przed datą awizacji do wszystkich pasujących awizacji (z pominięciem anulowanych).
- Wysyłka asynchroniczna — użytkownik nie czeka, aż e-mail faktycznie wyjdzie.
- „Każdorazowo pytaj o zgodę na wysyłkę" — opcja per szablon (operator potwierdza wysyłkę).
- Test wysyłki i konfiguracja serwera SMTP (z testem połączenia) w Ustawieniach → E-mail.
- Allowlista adresów e-mail (ograniczenie odbiorców, np. na środowiskach testowych).
SMS — funkcje szczegółowe
- Integracja z bramką HostedSMS (login, hasło, nazwa nadawcy w Ustawieniach → SMS).
- Walidacja i automatyczna poprawa numeru telefonu (formaty międzynarodowe, prefiks +48, usuwanie spacji/myślników).
- Wysyłka SMS m.in. przy imporcie zamówienia (z linkiem do formularza awizacji).
- „Każdorazowo pytaj o zgodę na wysyłkę SMS" — opcja per szablon.
- Log SMS — rejestr wysłanych wiadomości (treść, numer, kto wysłał).
- Test SMS z panelu.
Powiadomienia systemowe (dzwoneczek) — funkcje szczegółowe
- Pojawiają się w czasie rzeczywistym pod ikoną dzwoneczka (technologia WebSocket).
- Opcje per szablon: dźwięk (sound) i okienko popup.
- Po zalogowaniu/subskrypcji dosyłane są nieprzeczytane powiadomienia z ostatnich dni.
- Działają nawet po restarcie systemu bez odświeżania strony.
- Jeśli przeglądarka nie wspiera WebSocket, system działa dalej (pomijając powiadomienia).
- Odtwarzanie dźwięku obsłużone również na iPhone/Android.
Zarządzanie szablonami
Wspólne dla wszystkich kanałów:
- Kopiowanie (powielanie) szablonów e-mail / SMS / systemowych.
- Tymczasowe wyłączanie / włączanie wybranego szablonu (funkcja „Wyłącz").
- Globalne włączniki kanałów (e-mail / SMS / systemowe) na poziomie konfiguracji instancji.
- Krytyczne, wbudowane powiadomienia są chronione przed pełną edycją/usunięciem (spójność systemu).
- Wybór statusu w wyzwalaczu pokazuje informację o operacji (czytelność konfiguracji).
Stróżówka, kioski i ekrany TV
WHC wychodzi poza biuro koordynatora — obsługuje stanowiska na bramie, w hali i na placu. Te widoki działają zwykle na dedykowanych kontach (z opcją „utrzymuj zalogowanie"), na tabletach, terminalach i telewizorach przemysłowych.
Stróżówka (gatehouse)
Widok operacyjny dla ochrony/portierni. Adres: /gatehouse. Steruje wjazdem i wyjazdem pojazdów.
Funkcje
- Lista awizacji pogrupowana wg faz flow (np. na placu, oczekujący, zaplanowani, zakończeni) — czytelny obraz „kto gdzie jest".
- Weryfikacja kierowcy po PIN / kodzie QR / tablicy.
- Zmiana statusów przyciskami „kolejnych statusów" (np. wpuszczenie, skierowanie na rampę, wyjazd).
- Podgląd awizacji z danymi potrzebnymi na bramie.
- Dodatkowa tabela historii: awizacje zakończone, anulowane oraz „kierowca nie dotarł".
- Zakres czasowy widoku konfigurowalny (godziny wstecz / do przodu — zwykle wąskie okno, np. ±kilka godzin, dla czytelności).
- Delegowanie decyzji o wpuszczeniu kierowcy do operatora magazynu (rozszerzony proces wjazdu).
- Wsparcie skanera kodów.
Kiosk wjazdu kierowcy (driver entry kiosk)
Samoobsługowy terminal przy wjeździe. Adres: /kiosk-driver-entry. Kierowca sam autoryzuje wjazd.
Funkcje
- Wpisanie PIN lub skan kodu QR.
- Weryfikacja i uzupełnienie/poprawa danych awizacji (np. tablice, dane pojazdu).
- Informacja o statusie decyzji o wjeździe i możliwość ponowienia prośby o wjazd.
- Po pozytywnej weryfikacji — automatyczna zmiana statusu (milestone
ARRIVED). - Integracja z automatyzacją wjazdu (szlaban) — patrz Automatyzacje i automatyzacja wjazdu.
Kiosk magazyniera (warehouseman kiosk)
Ekran dla pracownika magazynu przy rampie. Adres: /kiosk-appt-now.
Funkcje
- Pokazuje aktualnie obsługiwaną awizację na danej bramie/rampie.
- Pozwala zmieniać status operacji na doku (rozpoczęcie/zakończenie operacji) przyciskami „kolejnych statusów".
- Tryb TV/tablet — duża, czytelna prezentacja.
TV — Kolejka awizacji (appointments queue)
Wyświetlacz informacyjny na duży ekran w hali/na placu. Adres: /kiosk-appts-queue.
Funkcje
- Kolejka nadchodzących awizacji (bieżąca, poprzednia, przyszłe) per brama/rampa.
- Konfigurowalne 3 linie tekstu na każdej pozycji (jakie dane pokazać) oraz horyzont godzin do przodu.
- Opcjonalny znacznik statusu (badge) przy każdej pozycji.
- Możliwość wyświetlania danych powiązanych zamówień.
- Duża czcionka, częsta automatyczna synchronizacja danych.
- Wsparcie starszych telewizorów (legacy, m.in. LG WebOS / Chromium z 2020 r.).
Proces wjazdu kierowcy — całość
- Kierowca podjeżdża. Kamera ANPR rozpoznaje tablicę albo kierowca wpisuje PIN w Kiosku wjazdu.
- System sprawdza whitelistę (powiązaną z awizacją). Jeśli tablica/PIN się zgadza i mieści w oknie czasowym — decyzja pozytywna.
- (Opcjonalnie) decyzja jest delegowana do operatora magazynu / stróżówki.
- Po akceptacji status zmienia się na
ARRIVED, a szlaban się otwiera (automatyzacja wjazdu).- Auto pojawia się w Stróżówce i na Kiosku magazyniera; operator prowadzi je przez kolejne statusy aż do
OPERATION_FINISHED/DONE.- Przy wyjeździe — ponowne zdarzenie wyjazdu i ewentualna automatyczna zmiana statusu.
Konfigurację automatyzacji wjazdu opisuje kolejny rozdział.
Automatyzacje i automatyzacja wjazdu
WHC potrafi wykonywać akcje automatycznie — w reakcji na zdarzenia awizacji oraz na zdarzenia fizyczne na bramie (rozpoznanie tablicy, otwarcie szlabanu). Pozwala to ograniczyć ręczną obsługę do minimum.
Automatyzacje (hooki) — własne reguły
Widok Automatyzacje (/admin/hooks-and-handlers) umożliwia tworzenie własnych akcji w języku JavaScript, wyzwalanych zdarzeniami zmiany awizacji.
- Każda automatyzacja (hook handler) ma nazwę, identyfikator zdarzenia (np. zmiana awizacji), kod oraz opis (PL/EN).
- Reguła może np. walidować dane, automatycznie ustawiać pole, blokować zapis przy niespełnionym warunku, integrować z systemem zewnętrznym.
- Definicje są zarządzane centralnie; akcje wykonują się w przeglądarce przy zdarzeniach awizacji.
To narzędzie dla zaawansowanych wdrożeń — pozwala dopasować logikę do nietypowych procesów bez modyfikacji rdzenia systemu.
Automatyzacje wbudowane (backend)
Niezależnie od hooków, system uruchamia wbudowane łańcuchy automatyzacji po kluczowych zdarzeniach:
| Zdarzenie | Co dzieje się automatycznie |
|---|---|
| Utworzenie awizacji | powiadomienia, wpis na whitelistę wjazdu, callback do ERP |
| Przeniesienie awizacji | powiadomienia, aktualizacja whitelisty, reset spóźnienia |
| Zmiana statusu | powiadomienia (e-mail/SMS/systemowe), mapowanie na status zamówienia, integracje |
| Zmiana pola / atrybutu | powiadomienia o zmianie |
Automatyzacje czasowe (harmonogram)
- Wykrywanie spóźnień (cyklicznie) — oznaczanie awizacji jako spóźnionych i wysyłka powiadomień.
- Zbyt długo na placu — opcjonalna automatyczna zmiana statusu, gdy auto przekracza dopuszczalny czas postoju.
- Czyszczenie wartości atrybutów z auto-usuwaniem po określonym czasie.
- Przypomnienia 1/3/7 dni przed datą awizacji (poranna wysyłka).
Automatyzacja wjazdu (entry automation, ANPR)
Moduł łączy WHC z fizyczną infrastrukturą bramy: kamerami rozpoznającymi tablice (ANPR) i szlabanami. Konfiguracja w grupie widoków „Automatyzacja wjazdu".
Klocki automatyzacji wjazdu
| Element | Rola |
|---|---|
Punkty wjazdu (/admin/entry-points) |
rejestr bramek/szlabanów/kamer: typ (wjazd/wyjazd/oba), magazyn, dane kamery (IP, login) |
Whitelista (/admin/entry-whitelist) |
dozwolone tablice rejestracyjne (i przyczepy) — wpisy ręczne i automatyczne, powiązane z awizacją, z okresem ważności |
Zdarzenia wjazdu (/admin/entry-events) |
dziennik zdarzeń: tablica, punkt, typ zdarzenia (wjazd/wyjazd, ręczne/automatyczne), znacznik czasu, czy z whitelisty |
Ustawienia automatyzacji wjazdu (/admin/entry-automation-settings) |
parametry integracji i tolerancji czasowych |
Jak to działa
- Po utworzeniu/przeniesieniu/zmianie tablicy w awizacji system automatycznie tworzy wpis na whiteliście (lokalnie, a opcjonalnie też w zewnętrznym systemie szlabanowym), z ważnością „cały dzień" lub w oknie X minut wokół terminu.
- Kamera ANPR (np. Dahua) rozpoznaje tablicę nadjeżdżającego pojazdu.
- System sprawdza whitelistę → zapisuje zdarzenie wjazdu → otwiera szlaban (np. przez integrację FLIS) → automatycznie zmienia status awizacji (np. na
ARRIVED). - Przy wyjeździe — analogiczne zdarzenie i ewentualna zmiana statusu.
Ustawienia kluczowe
| Ustawienie | Działanie |
|---|---|
| Auto-zmiana statusu | czy zdarzenie wjazdu/wyjazdu ma automatycznie zmieniać status awizacji |
| Integracja whitelisty | brak / Dahua / FLIS (sterowanie szlabanem i synchronizacja whitelisty) |
| Tolerancje czasowe | dopuszczalny wcześniejszy/spóźniony przyjazd i wyjazd (np. 15–180 min lub „cały dzień") |
| Parametry FLIS | klucz API, adres IP, identyfikator punktu wjazdu (gdy wybrano FLIS) |
Efekt biznesowy: bezobsługowy wjazd umówionych aut — kierowca z poprawną awizacją wjeżdża bez kontaktu z ochroną, a auta nieumówione są zatrzymywane.
Integracje i API
WHC nie jest wyspą — integruje się z systemami ERP, arkuszami, firmami kurierskimi i infrastrukturą fizyczną. Dla integracji programistycznych udostępnia REST API.
API REST
System udostępnia API do zarządzania awizacjami, zamówieniami i użytkownikami. Autoryzacja odbywa się kluczem API w nagłówku X-API-KEY (każdy użytkownik widzi i może wygenerować swój klucz w Ustawieniach → API). API jest bezstanowe (stateless).
Wersja v1 (RESTful, z dokumentacją OpenAPI)
Awizacje (/api/v1/appointments):
POST— utworzenie awizacji,GET,GET /{id},GET?dateFrom=…— pobieranie list i pojedynczych awizacji,GET /sync— pobranie zmian od ostatniego potwierdzenia synchronizacji,PATCH /{id}— częściowa aktualizacja z kontrolą wersji (nagłówekIf-Match/ ETag),DELETE /{id}— usunięcie (soft-delete) z kontrolą wersji,POST /confirm— potwierdzenie synchronizacji.
Zamówienia (/api/v1/orders): pełny CRUD, wyszukiwanie po identyfikatorze z systemu zewnętrznego, częściowa aktualizacja (PATCH).
Użytkownicy (/api/v1/users): CRUD po ID, e-mailu i identyfikatorze zewnętrznym, częściowa aktualizacja (PATCH).
Wersja v0 (starsza)
Zestaw endpointów POST do dodawania/aktualizacji/pobierania awizacji, zamówień i użytkowników (/api/orders, /api/appointments, /api/users). Utrzymywana dla kompatybilności.
Ustawienia API
- Klucz API per użytkownik (generowanie, kopiowanie).
- Domyślna rola, język i opiekun dla użytkowników tworzonych przez API.
- Standaryzowana obsługa błędów (m.in. 404 — nie znaleziono, 409 — konflikt, 412 — niezgodność wersji).
Integracja z ERP — Microsoft Dynamics 365 Business Central
WHC importuje zamówienia bezpośrednio z Business Central:
- import zamówień sprzedaży (Sales Orders) i zakupu (Purchase Orders) wraz z pozycjami produktowymi i atrybutami,
- import cykliczny z kolejką ponawiania (retry) na wypadek chwilowej awarii,
- po utworzeniu awizacji — callback do Business Central,
- źródła danych mogą obejmować również Google Sheets i Excel w SharePoint,
- alerty e-mail przy błędach komunikacji z ERP,
- odporna obsługa awarii serwera BC.
Integracja z arkuszami (Google Sheets / SharePoint)
- Google Sheets — odczyt/zapis wierszy (konto serwisowe); wykorzystywane m.in. jako źródło importu zamówień oraz do eksportu danych przy wybranych statusach.
- Excel w SharePoint — alternatywne źródło danych zamówień.
Integracje kurierskie
Widok Integracje kurierów (/courier-integration) obsługuje śledzenie przesyłek i powiązanie z awizacjami:
- śledzenie statusów przesyłek u przewoźników: DPD, DHL, UPS, GLS, InPost, Pocztex, Orlen,
- Allegro — obsługa zwrotów (OAuth),
- cykliczne odświeżanie statusów, tworzenie awizacji na podstawie danych kurierskich, wyliczanie przewidywanej daty dostawy.
Integracja z infrastrukturą bramy (ANPR / szlabany)
- Kamery ANPR (np. Dahua) — strumień rozpoznanych tablic.
- Szlabany (np. integracja FLIS) — automatyczne otwieranie dla umówionych aut i synchronizacja whitelisty.
Szczegóły: rozdział Automatyzacje i automatyzacja wjazdu.
Mapowanie statusów do systemów zewnętrznych
Statusy awizacji i zamówień mają pole zewnętrznego ID statusu (integrated system status id), co pozwala spójnie mapować etapy WHC na statusy w systemach partnerów i ERP. Reguły synchronizacji statusów awizacja↔zamówienie opisuje rozdział Statusy i przepływ procesu.
Raporty
Moduł raportów (reports) zamienia dane operacyjne w mierzalne wskaźniki: terminowość, czas operacji, obłożenie, spóźnienia. Widok: Raporty (/reports); wymaga uprawnień views.reports + reports.
Jak działają raporty
- Raport ma konfigurowalne kolumny (nazwy, podpisy, szerokości, kolejność) i typ agregacji (suma, średnia, maksimum, mix).
- Eksport do Excela (plik do pobrania).
- Zakres dat: bieżący miesiąc, poprzedni miesiąc lub dowolny przedział
od–dowskazany przy generowaniu. - Dane respektują dostęp użytkownika: EXTERNAL widzi swoje, INTERNAL — zgodnie z przypisaniem magazynów i bram.
Gotowe rodzaje raportów
Raport awizacji
Pełna lista awizacji z polami: ID, data, godziny, ilości, magazyn, brama, twórca, awizowany podmiot, kierowca, numery rejestracyjne, status, data utworzenia oraz wszystkie atrybuty (dodatkowe pola).
Raport awizacji ze zmianami statusów
Jak wyżej, ale wzbogacony o znaczniki czasu zmian statusów i kamieni milowych — np. kiedy awizacja osiągnęła OPERATION_STARTED i OPERATION_FINISHED. To pozwala policzyć w Excelu rzeczywisty czas operacji na rampie oraz czasy oczekiwania między etapami.
Raport spóźnień
Zestawienie sum spóźnień per kontrahent/spedytor: nazwa, liczba awizacji, łączny czas opóźnienia. Idealny do rozmów z przewoźnikami i do KPI terminowości.
Co zmierzysz dzięki raportom
| Wskaźnik | Z którego raportu |
|---|---|
| Liczba dostaw/odbiorów w okresie | Raport awizacji |
| Obłożenie magazynów i bram | Raport awizacji |
| Rzeczywisty czas operacji na doku | Raport ze zmianami statusów |
| Czas oczekiwania (od przyjazdu do rozpoczęcia) | Raport ze zmianami statusów |
| Terminowość / spóźnienia przewoźników | Raport spóźnień |
| Wykorzystanie atrybutów (np. typ towaru) | Raport awizacji (kolumny atrybutów) |
Raporty są stale rozwijane (dokładność danych, dodatkowe pola, poprawki formatowania Excel).
Bezpieczeństwo, audyt i monitoring
WHC obsługuje dane operacyjne wielu firm jednocześnie, dlatego kładzie nacisk na kontrolę dostępu, rozliczalność (audyt) i niezawodność.
Uwierzytelnianie i dostęp
- Logowanie e-mailem i hasłem; ekran logowania w pełni przetłumaczony (PL/EN).
- Uwierzytelnianie dwuskładnikowe (2FA) — kod wysyłany e-mailem, z opcją zaufanego urządzenia (zapamiętanie na określoną liczbę dni). Włączane w Ustawieniach → Rejestracja i logowanie.
- Polityka haseł — minimalna długość, wymóg wielkich/małych liter, cyfr, znaków specjalnych.
- Reset hasła przez link e-mail (gdy włączony).
- Tokeny jednorazowe — bezpieczne linki w e-mailach/SMS (zmiana statusu, edycja, akceptacja) bez pełnej sesji; menu i zmiana języka są wtedy ukrywane.
- Klucz API (
X-API-KEY) dla integracji; sesja API jest bezstanowa. - Natychmiastowa propagacja uprawnień — zmiana roli działa od razu, bez przelogowania.
- Zabezpieczenia przed niezamierzonym usunięciem/resetem danych systemu.
Audyt — kto, co i kiedy
WHC prowadzi kilka uzupełniających się dzienników:
| Dziennik | Co rejestruje |
|---|---|
Logi systemowe (/system-logs) |
tworzenie, edycję i usuwanie wszystkich obiektów; udane i nieudane próby logowania; adres IP |
| Historia zmian awizacji | pełny ślad zmian każdego pola awizacji (kto, kiedy, z czego na co) |
| Log SMS | treść, numer i autor każdej wysłanej wiadomości SMS |
| Zdarzenia wjazdu | zdarzenia ANPR i ręczne na bramie (tablica, punkt, typ, czas) |
Widok logów systemowych
- Filtrowanie po poziomie (INFO / WARN / ERROR), datach, wyszukiwanie.
- Dwa poziomy widoczności: zwykły (admin) i superadmin.
- Dokładność czasu zdarzenia do milisekund, paginacja, czyszczenie filtrów.
- Podgląd pełnej treści logu ze sformatowanym JSON-em (duże obiekty, np. szablony e-mail, nie są przycinane).
- Automatyczne czyszczenie logów starszych niż ~3 miesiące; alert e-mail przy nadmiernym rozroście tabeli logów.
Monitoring instancji i niezawodność
- Strona monitorowania stanu instancji (wersja aplikacji, liczba awizacji w okresach, liczba magazynów i bram).
- System monitorowania instancji (kontrola awarii i braku aktywności) oraz alerty e-mail przy problemach integracji.
- Metryki integracji (liczniki i czasy wywołań kurierów, arkuszy) — dla wybranych wdrożeń.
- Asynchroniczna wysyłka e-mail i obsługa zbyt długich operacji — system pozostaje responsywny.
- Uniezależnienie od krytycznych CDN — kluczowe zasoby (JS/CSS) ładowane lokalnie, co eliminuje awarie przy niedostępności zewnętrznych dostawców.
- Wsparcie starszych przeglądarek (m.in. Chromium z 2020 r., telewizory LG WebOS 6.0+).
Licencja i tryb SaaS
WHC działa w modelu SaaS — każdy klient ma osobną instancję. System obsługuje licencję z datą wygaśnięcia, ostrzeżeniami z wyprzedzeniem i blokadą po upływie. Liczenie awizacji na potrzeby rozliczeń opiera się na czasie utworzenia awizacji.
Strefa czasowa i wielojęzyczność
- Strefa czasowa instancji jest konfigurowalna (np.
Europe/Warsaw) — wszystkie terminy są spójne. - Interfejs i treści (statusy, nazwy obiektów, szablony) są wielojęzyczne (PL/EN), z możliwością rozbudowy.
Ustawienia — katalog konfiguracji
Ustawienia zebrane są w menu Ustawienia i podzielone na strony tematyczne. Poniżej kompletny katalog. Część parametrów konfiguruje się na poziomie wdrożenia (instancji), a niektóre dostępne są wyłącznie dla konta superadmin.
Ustawienia → Ogólne
| Ustawienie | Co robi |
|---|---|
| Tryb zamówień (orders mode) | Globalne włączenie/wyłączenie modułu zamówień. |
| Krok czasowy (time step) | Minimalny kwant czasu w systemie (harmonogram, selektor, wyliczanie czasu). Tylko superadmin. |
| Domyślny zakres dni wstecz / do przodu | Ile dni pokazuje Harmonogram przy starcie (INTERNAL). |
| Precyzja ilości jednostek ładunkowych | Dokładność liczby palet/nośników (do 6 miejsc po przecinku). |
| Precyzja umownej jednostki miary | Dokładność wagi/objętości. |
| Maks. dni do przodu (EXTERNAL) | Najdalszy horyzont awizacji dla kontrahenta. |
| Najwcześniejszy dzień (EXTERNAL) | Dziś / dziś z wyprzedzeniem godzinowym / za N dni. |
| Min. wyprzedzenie w godzinach | Minimalny odstęp od „teraz" przy awizacji na dziś. |
| Godzina graniczna na „jutro" | Do której godziny można awizować na dzień następny. |
| Metoda wyboru magazynu/bramy przez EXTERNAL | System wybiera oba / użytkownik wybiera magazyn / użytkownik wybiera oba. |
| Tytuł okna podglądu awizacji | Szablon HTML nagłówka (parametry {{appt.*}}). |
| Kolorowanie awizacji | Wg statusu lub wg jednostki ładunkowej. |
| Próg spóźnienia (minuty) | Po ilu minutach rejestrować spóźnienie. |
| Punkt odniesienia spóźnienia | Początek lub koniec okna czasowego. |
| Potwierdzanie zmian statusów | Czy pytać przy kliknięciu „następnego statusu". |
| Znak pustej wartości | Symbol zastępujący puste pola (np. -). |
| Limit tygodniowy umownej jednostki (INBOUND) | Globalny limit dla dostaw (0 = wyłączony). |
Ustawienia → Czas trwania operacji
| Ustawienie | Co robi |
|---|---|
| Tryb okien (STATIC / DYNAMIC) | Fundamentalny tryb planowania. Tylko superadmin; zmiana w produkcji kasuje awizacje. |
| Wyświetlanie okna dla EXTERNAL (STATIC) | Pełny przedział (np. 8:00–9:00) lub tylko godzina początku. |
| Metoda wyliczania czasu (DYNAMIC) | Z jednostek ładunkowych lub z czasów produktów (+ dodatkowy czas). |
| Mnożnik nocny (%) | Wydłużenie/skrócenie czasu operacji w nocy. |
| Początek / koniec nocy | Zakres godzin nocnych. |
Ustawienia → Harmonogram
| Ustawienie | Co robi |
|---|---|
| Szablon kafelka awizacji | HTML (z edytorem) — jakie dane/ikony pokazać na boxie. |
| Maks. awizacji w oknie (STATIC) | Ile pokazać od razu, reszta pod „Pokaż wszystkie". |
| Wysokość i skalowanie kafelków | Maks. wysokość, min/maks rozmiar czcionki, współczynnik. |
| Wysokość kroku czasowego / dnia miesiąca | Skala osi czasu i widoku miesięcznego. |
| Liczba bram na stronę | Osobno dla perspektyw 1/3/5 dni i tygodnia. |
Ustawienia → Oś czasu
| Ustawienie | Co robi |
|---|---|
| Górna / dolna linia kafelka | Szablony tekstu na kafelkach osi czasu. |
Ustawienia → Rejestracja i logowanie
| Ustawienie | Co robi |
|---|---|
| 2FA | Włączenie uwierzytelniania dwuskładnikowego. |
| Ważność kodu 2FA | Czas ważności kodu (minuty). |
| Ważność zaufanego urządzenia | Ile dni pamiętać urządzenie. |
| Polityka haseł | Minimalna długość, wymagane znaki (wielkie/małe litery, cyfry, znaki specjalne). |
| Reset hasła | Włączenie publicznego resetu hasła. |
| Rejestracja publiczna | Włączenie i wybór formularza samodzielnej rejestracji. |
Ustawienia → TV Kolejka awizacji
| Ustawienie | Co robi |
|---|---|
| 3 linie tekstu awizacji | Jakie dane wyświetlać na ekranie TV. |
| Horyzont godzin | Ile godzin do przodu pokazywać w kolejce. |
Ustawienia → Stróżówka
| Ustawienie | Co robi |
|---|---|
| Zakres godzin wstecz / do przodu | Wąskie okno czasowe widoku dla czytelności. |
| Etapy flow | Kolejność i widoczność faz (na placu, oczekujący, zaplanowani, zakończeni). |
Ustawienia → Selektor okna czasowego
| Ustawienie | Co robi |
|---|---|
| Dni na stronę | Ile dni widać naraz. |
| Najmniejszy slot | W krokach czasowych. |
| Wysokość i marginesy slotów | Wygląd selektora. |
Ustawienia → Załączniki
| Ustawienie | Co robi |
|---|---|
| Min. / maks. liczba załączników | Limity liczby plików (głównie EXTERNAL). |
| Min. rozmiar pliku | Dolny limit rozmiaru (EXTERNAL). |
| Maks. rozmiar pliku | Górny limit dla wszystkich (również admina) — ochrona serwera. |
Restrykcje załączników mogą działać różnie dla kont INTERNAL i EXTERNAL oraz zależnie od uprawnienia „przekraczania limitów".
Ustawienia → E-mail (SMTP)
| Ustawienie | Co robi |
|---|---|
| Nazwa i adres nadawcy | Dane nadawcy wiadomości. |
| Host / port / login / hasło / szyfrowanie | Konfiguracja serwera SMTP. |
| Test połączenia / wysyłki | Weryfikacja poprawności konfiguracji. |
Ustawienia → SMS (HostedSMS)
| Ustawienie | Co robi |
|---|---|
| Login / hasło HostedSMS | Dostęp do bramki SMS. |
| Nazwa nadawcy | Etykieta nadawcy z panelu HostedSMS. |
Ustawienia → API
| Element | Co robi |
|---|---|
| Token / klucz API | Per użytkownik (generowanie, kopiowanie). |
| Domyślna rola / język / opiekun | Dla użytkowników tworzonych przez API. |
Automatyzacja wjazdu → Ustawienia
| Ustawienie | Co robi |
|---|---|
| Auto-zmiana statusu | Po zdarzeniu wjazdu/wyjazdu. |
| Integracja whitelisty | Brak / Dahua / FLIS. |
| Tolerancje czasowe | Dopuszczalny wcześniejszy/spóźniony przyjazd i wyjazd. |
| Parametry FLIS | Klucz API, IP, identyfikator punktu wjazdu. |
Ustawienia na poziomie instancji (wdrożenie)
Część parametrów ustawia się przy wdrożeniu (nie w panelu admina):
| Ustawienie | Co robi |
|---|---|
| Strefa czasowa | Np. Europe/Warsaw. |
| Nazwa firmy / instancji | Wyświetlana m.in. w e-mailach i PDF. |
| Atrybut PIN + szablony PDF (PL/EN) | Który atrybut jest PIN-em i jak wygląda PDF z PIN/QR. |
| Globalne włączniki powiadomień | E-mail / SMS / systemowe. |
| Licencja | Data wygaśnięcia, ostrzeżenia, blokada. |
| Odbiorcy alertów błędów / allowlista e-mail | Kontrola powiadomień technicznych. |
| Integracje arkuszy (Google Sheets / SharePoint) | Parametry per wdrożenie. |
| Dni wolne w liczeniu najwcześniejszej daty | Czy uwzględniać dni bez okien. |
Słownik pojęć (terminologia)
Tabela pojęć WHC z odpowiednikami angielskimi (jak w systemie, API i bazie danych) oraz znaczeniem biznesowym. Ułatwia spójną komunikację oraz mapowanie przez agentów AI.
Pojęcia domenowe
| Pojęcie (PL) | Odpowiednik (EN) | Znaczenie |
|---|---|---|
| Awizacja, awizo | appointment | Pojedyncza zaplanowana operacja na rampie (dostawa/odbiór): termin, brama, ładunek, kierowca, status. |
| Awizowanie, awizacja (czynność) | scheduling | Proces umawiania operacji na doku. |
| System awizacji | dock scheduling software | Klasa oprogramowania, do której należy WHC. |
| Okno czasowe | time slot | Przedział czasu na bramie, w którym można planować operację. |
| Magazyn | warehouse | Lokalizacja logistyczna grupująca bramy. |
| Brama, dok, rampa | gate | Fizyczny punkt załadunku/rozładunku. |
| Operacja | operation type | Rodzaj czynności na doku; ma kierunek INBOUND/OUTBOUND. |
| Dostawa / przyjęcie | inbound | Operacja przychodząca (rozładunek). |
| Odbiór / wydanie | outbound | Operacja wychodząca (załadunek). |
| Jednostka ładunkowa | loading unit | Typ nośnika (paleta, kontener…) z czasem bazowym i na jednostkę. |
| Umowna jednostka miary | basic loading unit | Uogólniona miara ładunku (tona, m³). |
| Produkt / grupa produktów | product / product group | Indeks towarowy i jego kategoria. |
| Zamówienie | order | Dokument źródłowy (PO/SO) powiązany z awizacją. |
| Status | appt status / order status | Etykieta etapu procesu (kolor, ikona, flow). |
| Kamień milowy | milestone | Abstrakcyjna faza procesu sterująca logiką systemu. |
| Faza flow / etap | flow phase | Grupa statusów reprezentująca etap (np. „na placu"). |
| Limit | limit | Reguła ograniczająca przepustowość/dostępność. |
| Blokada | blockade / blocking limit | Wyłączenie dostępności (dat, bram, okien). |
| Atrybut / dodatkowe pole awizo | attribute / custom field | Konfigurowalne pole awizacji poza polami standardowymi. |
| Załącznik | attachment | Plik dołączony do awizacji (CMR, faktura…). |
| Awizowany podmiot | appointed user | Kontrahent (EXTERNAL) będący drugą stroną awizacji. |
| Opiekun / Account Manager | account manager | Użytkownik INTERNAL przypisany do kontrahenta; odbiorca powiadomień. |
| Metoda odbioru | pickup method | Sposób odbioru towaru (np. odbiór własny, kurier). |
| Typ pojazdu | vehicle type | Środek transportu / klasa ciężarówki. |
| Dodatkowy czas operacji | extra operation time | Reguła wydłużająca wyliczany czas operacji. |
| Mnożnik nocny | night time multiplier | Procentowa korekta czasu operacji w nocy. |
| Wykluczenie pola | field exclusion | Ukrycie/wyłączenie pola formularza wg kontekstu. |
| PIN | PIN | Kod dostępu kierowcy (generowany atrybut), baza dla kodu QR. |
| Whitelista | whitelist | Lista dozwolonych tablic rejestracyjnych na bramie. |
| Punkt wjazdu | entry point | Brama wjazdowa/wyjazdowa (szlaban, kamera). |
Pojęcia dostępu i ról
| Pojęcie (PL) | Odpowiednik (EN) | Znaczenie |
|---|---|---|
| Strona wewnętrzna | INTERNAL (side) | Użytkownik po stronie magazynu; szerszy dostęp. |
| Strona zewnętrzna | EXTERNAL (side) | Kontrahent; tylko własne awizacje. |
| Rola | role | Zbiór uprawnień + strona + kolumny list. |
| Uprawnienie | permission | Pojedyncze pozwolenie (widok/akcja/pole). |
| Użytkownik | user | Konto w systemie (osoba lub stanowisko). |
| Superadmin | superadmin | Konto serwisowe omijające kontrole uprawnień. |
| Token | token | Jednorazowy link bez pełnego logowania. |
| Klucz API | API key | Sekret do autoryzacji integracji (X-API-KEY). |
| 2FA | two-factor authentication | Uwierzytelnianie dwuskładnikowe (kod e-mail). |
Pojęcia widoków i stanowisk
| Pojęcie (PL) | Odpowiednik (EN) | Znaczenie |
|---|---|---|
| Harmonogram | schedule | Główny kalendarz awizacji. |
| Oś czasu | timeline | Liniowy widok awizacji per brama. |
| Lista (awizacji) | appointment list | Tabelaryczny widok awizacji. |
| Twoje awizacje | your appointments | Samoobsługowy widok kontrahenta. |
| Stróżówka | gatehouse | Widok ochrony — wjazd/wyjazd, statusy. |
| Kiosk wjazdu kierowcy | driver entry kiosk | Samoobsługa kierowcy przy bramie (PIN/QR). |
| Kiosk magazyniera | warehouseman kiosk | Ekran bieżącej awizacji na rampie. |
| TV Kolejka awizacji | appointments queue (TV) | Wyświetlacz kolejki na duży ekran. |
Pojęcia techniczne i konfiguracyjne
| Pojęcie (PL) | Odpowiednik (EN) | Znaczenie |
|---|---|---|
| Tryb okien stałych | STATIC time slots | Awizacja zajmuje całe okno; wiele awizacji w oknie. |
| Tryb okien dynamicznych | DYNAMIC time slots | Czas wyliczany; jedna operacja na bramę w danym momencie. |
| Krok czasowy | time step | Minimalny kwant czasu w systemie. |
| Tryb instancji / wariant | MODE | Wariant interfejsu/logiki dopasowany do klienta/wdrożenia. |
| Soft-delete | soft delete | Oznaczenie jako usunięte z zachowaniem danych (audyt). |
| ANPR | ANPR / LPR | Automatyczne rozpoznawanie tablic rejestracyjnych. |
| Powiadomienie systemowe | system notification | Komunikat w aplikacji (dzwoneczek), czas rzeczywisty. |
| Hook / automatyzacja | hook handler | Reguła JavaScript wyzwalana zdarzeniem awizacji. |
| ERP | ERP | System klasy ERP (np. Dynamics 365 Business Central). |
Załącznik techniczny — model danych
Ten załącznik jest przeznaczony dla integratorów, administratorów i agentów AI. Opisuje fizyczny model danych WHC: obiekty domenowe (encje), słowniki (enumy) i tabele bazy. Stanowi most między językiem biznesowym (poprzednie rozdziały) a implementacją.
Konwencja wspólna: większość encji dziedziczy po klasie bazowej
WhcObject, która dodaje kolumny:id(PK),hash(blokada optymistyczna),created_time,update_time,deleted_time,deleted(soft-delete). Encje*Langto tłumaczenia (wielojęzyczność), a tabele*_event_initiator_roles,limit_datesitp. to tabele łączące/pomocnicze.
Obiekty domenowe (encje JPA) — wg obszarów
Awizacje (rdzeń)
| Encja | Tabela | Rola |
|---|---|---|
Appointment |
appointments |
Awizacja — rdzeń schedulingu: termin, godziny, magazyn, brama, operacja, status, ładunek, kierowca, pojazd. |
TimeSlot |
time_slots |
Okno czasowe (szablon tygodniowy lub konkretna data) per brama/magazyn. |
ApptHistory |
appt_history |
Historia zmian pól awizacji (audyt). |
ApptUserVersion |
appt_user_versions |
Wersja awizacji per użytkownik (kontrola współbieżności API). |
ApptProduct |
appt_products |
Produkt przypisany bezpośrednio do awizacji (+ ilość). |
ApptOrderLink |
appt_order_links |
Powiązanie awizacja ↔ zamówienie. |
ApptOrderProductLink |
appt_order_product_links |
Ilość produktu z zamówienia realizowana w awizacji. |
Infrastruktura magazynowa i wjazd
| Encja | Tabela | Rola |
|---|---|---|
Warehouse / WarehouseLang |
warehouses / warehouse_lang |
Magazyn i jego tłumaczenia. |
Gate / GateLang |
gates / gate_lang |
Brama/dok i tłumaczenia. |
EntryPoint |
entry_points |
Punkt wjazdu/wyjazdu (kamera, szlaban). |
EntryPointEvent |
entry_point_events |
Log zdarzeń ANPR/ręcznych. |
WhitelistEntry |
entry_whitelist |
Whitelista tablic (powiązana z awizacją). |
Parametry transportu i operacji
| Encja | Tabela | Rola |
|---|---|---|
OperationType / OperationTypeLang |
operation_types / operation_type_lang |
Typ operacji (INBOUND/OUTBOUND) + ustawienia zamówień. |
PickupMethod / PickupMethodLang |
pickup_methods / pickup_method_lang |
Metoda odbioru. |
LoadingUnit / LoadingUnitLang |
loading_units / loading_unit_lang |
Jednostka ładunkowa (czas bazowy, czas/jednostkę, kolor). |
VehicleType / VehicleTypeLang |
vehicle_types / vehicle_type_lang |
Typ pojazdu. |
ExtraOperationTime |
extra_operation_times |
Reguła dodatkowego czasu operacji. |
Statusy i flow
| Encja | Tabela | Rola |
|---|---|---|
ApptStatus / ApptStatusLang |
appt_statuses / appt_status_lang |
Status awizacji (per operacja). |
ApptStatusNextStatus / …Lang |
appt_status_next_statuses / …_lang |
Dozwolone przejścia statusów (per strona). |
FlowPhase / FlowPhaseLang |
flow_phases / flow_phase_lang |
Faza flow (grupa statusów). |
ViewFlowPhase / …Lang |
view_flow_phases / view_flow_phase_lang |
Konfiguracja faz per widok. |
StatusMapping |
status_mappings |
Mapowanie status zamówienia ↔ status awizacji. |
Limity
| Encja | Tabela | Rola |
|---|---|---|
LimitGroup |
limit_groups |
Grupa limitów (kategoria: blokady dat/bram/okien, dozwolone operacje/jednostki). |
Limit / LimitLang |
limits / limit_lang |
Limit/reguła (wielkość, okres, kryteria, komunikaty). |
LimitApptAttributeCriteria |
limit_appt_attribute_criteria |
Kryterium limitu po wartości atrybutu. |
| — | limit_dates |
Konkretne daty objęte limitem. |
Pola awizacji
| Encja | Tabela | Rola |
|---|---|---|
ApptFieldsCategory / …Lang |
appt_fields_categories / appt_fields_category_lang |
Kategoria tematyczna pól. |
ApptPredefinedField / …Lang |
appt_predefined_fields / appt_predefined_field_lang |
Metadane pól wbudowanych. |
ApptAttribute / …Lang |
appt_attributes / appt_attribute_lang |
Definicja atrybutu (dodatkowego pola). |
ApptAttributeValue |
appt_attribute_values |
Wartość atrybutu na awizacji. |
RoleApptField / …Lang |
role_appt_fields / role_appt_field_lang |
Kolumna awizacji widoczna dla roli. |
FieldExclusion |
field_exclusions |
Reguła ukrycia/wyłączenia pola. |
FieldExclusionSpecificValue |
field_exclusion_specific_values |
Wartość aktywująca wykluczenie. |
Zamówienia i produkty
| Encja | Tabela | Rola |
|---|---|---|
Order |
orders |
Zamówienie (PO/SO) z ERP. |
OrderStatus / OrderStatusLang |
order_statuses / order_status_lang |
Status zamówienia. |
OrderProduct |
order_products |
Pozycja produktowa zamówienia. |
OrderAttribute / …Lang / OrderAttributeValue |
order_attributes / order_attribute_lang / order_attribute_values |
Atrybuty zamówień. |
ProductGroup / ProductGroupLang |
product_groups / product_group_lang |
Grupa produktów. |
Product / ProductLang |
products / product_lang |
Produkt/indeks. |
Użytkownicy, role, rejestracja
| Encja | Tabela | Rola |
|---|---|---|
User |
users |
Użytkownik (dane, rola, dostęp, klucz API). |
Role / RoleLang |
roles / role_lang |
Rola (strona, uprawnienia, kolumny). |
Permission |
permissions |
Uprawnienie roli. |
UserWarehouseGate |
user_warehous_gate |
Dostęp użytkownika do magazynu/bramy. |
RegistrationForm / …Lang |
registration_forms / registration_forms_langs |
Formularz rejestracji. |
RegistrationFormWarehouseGate |
registration_form_warehouse_gates |
Domyślny magazyn/brama po rejestracji. |
Token |
tokens |
Token jednorazowy (linki, reset). |
TwoFactorAuthCode / …TrustedDevice |
two_factor_codes / trusted_devices |
2FA: kody i zaufane urządzenia. |
Załączniki, powiadomienia, raporty
| Encja | Tabela | Rola |
|---|---|---|
AttachmentType / …Lang / Attachment |
attachment_types / attachment_type_lang / attachments |
Typy i pliki załączników. |
EmailTemplate / …Lang |
email_templates / email_templates_langs |
Szablon e-mail. |
SmsTemplate / …Lang / SmsLog |
sms_templates / sms_templates_langs / sms_log |
Szablon i log SMS. |
SystemNotificationTemplate / …Lang / SystemNotification |
system_notification_template / …_lang / system_notification |
Szablony i instancje powiadomień systemowych. |
Report / ReportLang / ReportColumn |
report / report_lang / report_column |
Definicje raportów i kolumn. |
Integracje i system
| Encja | Tabela | Rola |
|---|---|---|
HookHandler / HookHandlerLang |
hook_handlers / hook_handler_lang |
Automatyzacja (kod JS) + opis. |
Parcel |
parcels |
Przesyłka kurierska powiązana z awizacją. |
AllegroReturn |
allegro_returns |
Zwrot Allegro. |
BCSalesOrderImportQueue |
bc_sales_order_import_queue |
Kolejka importu zamówień z Business Central. |
Lang |
langs |
Język interfejsu (pl, en). |
ConfigEntity |
configs |
Parametr konfiguracji instancji (klucz–wartość). |
SystemLog |
system_logs |
Log aplikacyjny/audyt. |
Słowniki (enumy) — kluczowe
| Enum | Wartości | Znaczenie |
|---|---|---|
Side |
INTERNAL, EXTERNAL | Strona użytkownika. |
InboundOutbound |
INBOUND, OUTBOUND | Kierunek operacji. |
StatusMilestone |
APPROVED, ARRIVED, NOT_ARRIVED, IN_YARD, REJECTED_ON_ARRIVAL, OPERATION_STARTED, OPERATION_FINISHED, CANCELLED, DONE | Kamień milowy statusu. |
LimitEntity |
MAX_ARRIVALS, MAX_LOADING_UNITS, MAX_BASIC_LOADING_UNITS, MAX_DURATION, MAX_PRODUCTS | Co limituje dany limit. |
LimitPeriod |
PER_DAY, PER_TIME_SLOT, SIMULTANEOUS | Okres limitu. |
LimitGroup.category |
DATES_PER_USER_BLOCKADES, TIME_SLOTS_PER_USER_BLOCKADES, DOCK_BLOCKADES, ALLOW_DOCK_OPERATIONS, ALLOW_DOCK_LOADING_UNITS | Kategoria grupy limitów/blokad. |
ApptAttributeType |
STRING, TEXTAREA, LINK, ENUM, ENUM_MULTISELECT, GENERATED_PIN, GENERATED_UUID | Typ atrybutu. |
AttributeValidator |
REQUIRED, UNIQUE | Walidator atrybutu. |
ExtraOperationTimeType |
PER_OPERATION, PER_PRODUCT_QUANTITY, PER_LOADING_UNIT_QUANTITY | Sposób naliczania dodatkowego czasu. |
Event |
APPOINTMENT_CREATED/DELETED/MOVED, APPT_STATUS_CHANGED, APPOINTMENT_FIELD_CHANGED, DELAYED, TIMER_1/3/7_DAY_BEFORE_APPT_DATE, ORDER_IMPORTED, USER_* , EMAIL_VERIFICATION, WAREHOUSE_ALLOW/REJECT_DRIVER_ENTRY, TWO_FACTOR_… | Zdarzenia wyzwalające powiadomienia/hooki. |
RecipientType |
APPOINTED_USER, ACCOUNT_MANAGER, CREATOR, DRIVER, INTERNAL_ROLES_RELATED_WITH_WAREHOUSE | Odbiorca powiadomienia. |
OrderType |
PURCHASE_ORDER, SALES_ORDER | Typ zamówienia. |
MappingType |
ONE_ORDER_TO_APPT, ONE_APPT_TO_ORDER, ALL_ORDER_TO_APPT, ALL_APPT_TO_ORDER | Reguła synchronizacji statusów. |
NotificationType |
EMAIL, SMS, SYSTEM_NOTIFICATIONS | Kanał powiadomienia. |
EntryPointType |
ENTRY, EXIT, BOTH | Kierunek punktu wjazdu. |
EntryPointEventType |
DETECTED_ARRIVAL, DETECTED_EXIT, MANUAL_ENTRY, MANUAL_EXIT, MANUAL_OPEN, UNKNOWN | Typ zdarzenia bramy. |
TokenType |
APPOINTMENT, ORDER, USER, USER_APPROVAL, USER_DELETION, EMAIL_VERIFICATION | Typ tokenu linkowego. |
ConfigType |
GENERAL, EMAIL, SMS, SCHEDULE, TIMELINE, OPERATION_TIME, ATTACHMENTS, API, PASSWORD_POLICY, ENTRY_AUTOMATION, GATEHOUSE, KIOSK_APPTS_QUEUE, REGISTER_AND_LOGIN, GOOGLE_SHEETS, ALLEGRO_API, LICENSE, … | Grupa parametrów konfiguracji. |
Skala modelu
| Element | Liczba |
|---|---|
Encje JPA (@Entity) |
~94 |
| Enumy domenowe | ~35 |
| Tabele bazy (po pełnej migracji) | ~99 |
Mapa pakietów backendu (orientacyjna)
| Pakiet | Rola |
|---|---|
appointment/**, apptorder/** |
Awizacje, powiązania z zamówieniami, historia. |
slots/**, service/TimeSlotService |
Okna czasowe, generowanie dostępności. |
service/Limit*, entites/Limit* |
Limity i blokady. |
status/**, flowphase/**, statusmapping/** |
Statusy, fazy, mapowania. |
order/**, products/** |
Zamówienia i produkty. |
email/**, sms/**, notification/** |
Powiadomienia (3 kanały). |
automation/**, hooks/** |
Automatyzacje wbudowane i hooki. |
integration/**, integrations/** |
ERP (Business Central), kurierzy, arkusze, ANPR/szlabany. |
security/**, user/** |
Uprawnienia, role, 2FA, tokeny, import użytkowników. |
report/** |
Raporty Excel i dostawcy danych. |
api/** |
REST API v0/v1. |
controller/**, service/**, repo/**, entites/** |
Warstwy MVC, usług, repozytoriów i modelu. |
Uwaga o aktualności: najnowszy snapshot DDL (
db-structure/db-full) bywa o kilka wersji za kodem — tabele najnowszych modułów (automatyzacja wjazdu, fazy flow) istnieją w encjach i migracjach przyrostowych (db-structure/db-update) zanim trafią do pełnego snapshotu. Źródłem prawdy dla zmian schematu są migracje przyrostowe.