Powrót do strony głównej

Obliczenie dni roboczych w oprogramowaniu do wniosków

Artykuł opisuje realizację obliczania terminów w dniach roboczych dla systemów przetwarzania wniosków. Omówione są reguły odliczania, wyświetlanie licznika, przykłady, niuanse backendu i strategie testowania. Podejście równoważy logikę systemową i UX.

Dni robocze w rozwoju: terminy i UX
Advertisement 728x90

Obliczanie terminów w dniach roboczych dla systemów obsługi wniosków

Systemy obsługi wniosków wymagają uwzględnienia dni roboczych zamiast kalendarzowych dla precyzyjnego obliczania terminów. Odliczanie rozpoczyna się od dnia publikacji w godzinach pracy lub od najbliższego dnia roboczego w przypadku publikacji poza harmonogramem. Kalendarz jest automatycznie pobierany z zewnętrznego serwisu przy starcie i codziennie sprawdzany pod kątem dostępności danych na bieżący i następny rok. Bez kalendarza następuje fallback na dni kalendarzowe.

Rejestracja następuje natychmiast po publikacji, bez oczekiwania na dzień roboczy. Przykładowo: publikacja o 23:00 w dniu roboczym przesuwa start na następny dzień roboczy; o 06:00 tego samego dnia — pozostaje w bieżącym dniu, jeśli harmonogram zaczyna się później.

Zasady wyświetlania licznika

Licznik pokazuje liczbę pełnych upłyniętych dni roboczych. Niezależnie od czasu publikacji, w dniu rozpoczęcia terminu wyświetlane jest 0/N.

Google AdInline article slot
  • Dzień publikacji w godzinach pracy: 0/N do 00:00 następnego dnia.
  • Publikacja poza harmonogramem: 0/N do 00:00 pierwszego dnia roboczego.

Zwiększenie licznika następuje o 00:00 po zakończeniu pełnego dnia roboczego. Przekroczenie terminu jest rejestrowane przy wartości ≥ N (np. 5/5).

Alternatywy odrzucone podczas dyskusji

  • Licznik 1/N od momentu publikacji — utrudnia percepcję pełnych dni.
  • Zwiększanie na koniec dnia roboczego — ignoruje opóźnienia pracowników.
  • Przekroczenie terminu po zakończeniu dnia roboczego — nieintuicyjne dla 17:59 vs 18:01.

Przykłady obliczeń

Przykład 1: Publikacja 1 stycznia (dzień wolny), pierwszy dzień roboczy 12 stycznia, deadline 16 stycznia (5 dni). Przetworzenie 13 stycznia — licznik 1/5 (pełny dzień: tylko 12 stycznia).

Przykład 2: 2 dni na przetworzenie, publikacja w dzień roboczy o 09:00 (poniedziałek). Poniedziałek: 0/2; wtorek: 1/2; północ we wtorek: 2/2 (przekroczenie terminu).

Google AdInline article slot

Przykład 3: To samo zadanie, publikacja o 20:00 w poniedziałek. Poniedziałek: 0/2; wtorek: 0/2; środa: 1/2; północ w środę: 2/2.

Strefy czasowe są ujednolicone według czasu serwera dla uproszczenia.

Niuanse implementacji w backendzie

  • Przechowuj kalendarz w pamięci podręcznej: bieżący rok + następny (z usuwaniem starych).
  • Zapisuj w bazie danych wartości licznika i oryginalny termin dla każdego wniosku — minimalizuje przeliczenia.
  • Przechowuj historię terminów: osobna tabela dla konfiguracji według typów/okresów lub kolumna w encji.

Aktualizacja kalendarza: zapytania API przy uruchomieniu, codziennie o 00:00.

Google AdInline article slot

Testowanie kluczowych scenariuszy

Sprawdzaj zachowanie w czasie rzeczywistym lub symuluj przez bazę danych/API:

  • Zwykły dzień roboczy.
  • Dzień wolny.
  • Wieczór dnia roboczego (po harmonogramie).
  • Brak kalendarza — fallback i automatyczna aktualizacja.
  • Przekroczenie terminu i normalne terminy.
  • Obciążenie: wiele kalendarzy na przestrzeni lat.
  • Uśpione serwisy API.

Co jest ważne

  • Odliczanie rozpoczyna się od dnia publikacji w harmonogramie lub najbliższego dnia roboczego.
  • Licznik: pełne upłynięte dni, start od 0/N.
  • Przekroczenie terminu: ≥ N o 00:00 po deadlinie.
  • Pamięć podręczna i zapis w bazie danych zmniejszają obciążenie.
  • Testuj przypadki brzegowe: dni wolne, wieczory, brak danych.

— Editorial Team

Advertisement 728x90

Czytaj dalej