W większych stacjach grafiku nie układa jedna osoba - odpowiedzialność jest rozłożona. raTool wspiera ten model w dwóch wymiarach: rejestr zmian (każda modyfikacja jest zapisywana z autorem i czasem) oraz scoped permissions (koordynator ZRM widzi i edytuje wyłącznie swój zespół, nie cudze).
Każda zmiana w grafiku - utworzenie dyżuru, zmiana ratownika, anulowanie, zatwierdzenie zamiany, korekta godzin - trafia automatycznie do rejestru. Wpis zawiera:
created (utworzono), updated (zaktualizowano: zmiana ratownika lub statusu), deleted (usunięto), cancelled (anulowano), swapped (zamiana).user_id poprzedniego ratownika, status planned).Rejestr jest append-only - wpisy nigdy nie są edytowane ani kasowane. To zapewnia, że historia jest pełna i wiarygodna nawet po kontroli z NFZ czy w sporze pracowniczym.
Wpisy generuje trigger bazodanowy - niezależnie od tego, którą drogą wprowadzono zmianę (siatka grafiku, RPC zatwierdzenia zamiany, ręczne poprawki przez support), audyt zapisuje się automatycznie. Nie da się zmodyfikować dyżuru bez śladu.
Uwaga: Aktualnie rejestr nie ma osobnego widoku w aplikacji - dostęp przez support raTool w razie potrzeby (np. przy sporze). Dedykowany ekran przeglądu rejestru pojawi się w przyszłej wersji.
raTool nie wymaga rozbudowanej struktury organizacyjnej. Dla większości stacji wystarczają trzy poziomy:
Każda osoba może mieć kilka ról jednocześnie - np. ratownik, który dla jednego ZRM-u jest delegowanym koordynatorem.
Strona Koordynatorzy ZRM (menu Administracja → Koordynatorzy ZRM) jest dostępna dla użytkowników z uprawnieniem zrm_coordinators.manage (typowo: koordynator stacji).
Każdy aktywny ZRM ma osobną kartę, na której widzisz:
swap.approve), ale nie modyfikują obsady.Kliknięcie „Przypisz koordynatora" otwiera okno „Przypisz koordynatora ZRM" z polem „Członek stacji" - wybierz osobę z listy. Po zapisie pojawia się na karcie ZRM-u i (jeśli delegacja jest włączona) od razu uzyskuje dostęp do edycji grafiku tego konkretnego ZRM-u.
Komunikat „Brak dostępnych członków do przypisania" oznacza, że wszyscy członkowie stacji są już przypisani jako koordynatorzy tego ZRM-u (rzadki scenariusz).
Po wejściu w Budowanie grafiku (zob. Układanie grafiku) koordynator z delegacją:
- zamiast +).To samo dotyczy dashboardu Mój ZRM (jeśli istnieje w menu) - koordynator widzi statystyki dyżurów i zamian dla zespołów, których jest koordynatorem.
Kontrola dostępu nie jest tylko UI - jest egzekwowana na poziomie bazy danych przez Row-Level Security (RLS). Nawet bezpośrednie zapytanie do bazy (np. przez nieuczciwie zmodyfikowanego klienta) nie wyświetli ani nie zmodyfikuje danych, do których użytkownik nie ma uprawnień. Każdy zapis przechodzi przez polityki RLS, które weryfikują:
has_role_on_account).schedule.manage, swap.approve, zrm_coordinators.manage).can_manage_zrm_schedule).To samo dotyczy odczytu - koordynator ZRM bez schedule.manage nie zobaczy listy zgłoszeń dyspozycyjności poza własnym ZRM-em (chyba że stacja udostępniła ją publicznie).
changed_by. Każda zmiana ma autora; jeśli zobaczysz nieoczekiwanego użytkownika, prawdopodobnie ma uprawnienia, których nie chcesz mu nadawać. Cofnij delegację lub przepnij rolę.