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.
- 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).
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.
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
Brak komentarzy.