Shift Planning
Shift planning lets admins and managers build weekly rosters from reusable shift templates, publish them to employees, and handle day-to-day changes through shift swaps — with German working-time law (ArbZG) checks built in. It is opt-in: a tenant must have it enabled, and only users on the shift-based work-time model draw their target hours from the roster.
Enabling shifts
Section titled “Enabling shifts”A super-admin turns the feature on per company under Admin → Companies:
- Shift planning Beta — enables shift templates and rosters for the company.
- Roster notice period (days) — advance notice required before a roster may be published (e.g. from a collective or works agreement).
0= none. The planner sees a “publish by” hint and a warning once the period has passed.
Once enabled, a Shifts entry appears for admins and managers, and a My shifts entry for every employee.
Work-time model
Section titled “Work-time model”Each user’s daily target hours come from their work-time model:
- Weekly — fixed/flexible weekly hours from the work schedule (the default).
- Shift-based — target hours are derived from the published roster instead of weekly hours.
- Inherit — use the department default, then fall back to weekly.
Set it per user under Admin → Users, or as a department default under Admin → Departments. Only shift-based users are affected by the roster; weekly users keep their schedule.
Templates & roster
Section titled “Templates & roster”Templates are reusable shift definitions (e.g. “Früh 06:00–14:00”) created under Shifts. Each has a name, start and end time (if the end is not after the start, the shift crosses midnight, e.g. 22:00–06:00), a break in minutes (subtracted from the gross to give paid net time), a colour for the grid, and an active flag. Shifts in the statutory night window (23:00–06:00) are detected automatically for the ArbZG checks.
The roster is a weekly grid of employees × days. Assign a template per cell, add an optional note, and use Copy previous week to carry a recurring plan forward. Drafts are invisible to employees and do not affect target hours. When ready, choose Publish & notify: assignments become visible in My shifts, feed shift-based target hours, notify affected employees (email and/or push, per their preferences), and show each employee a precise change diff versus the last published version.
Absences. Each roster cell shows the employee’s vacation and sickness for that day — approved or still requested, including half days and sick leave without a known end. Other leave types appear as Absent; home office and business travel do not. A shift assigned on a day of approved whole-day absence is flagged as a conflict.
Staff demand. A template can say how many people a shift needs on each weekday. The roster then shows, day by day, where a shift is understaffed — absences included.
Shift swaps
Section titled “Shift swaps”- Request. From My shifts an employee picks one of their published shifts and the colleague who should take it over, optionally with a reason.
- Colleague consents. The colleague sees the request under Requests and agrees or declines.
- Manager approves. After consent a manager/admin approves or rejects it — a rejection can include a reason, which the requester sees. On approval the shift moves to the colleague; if the colleague has a shift that day, it moves to the requester in exchange.
- Statuses:
awaiting colleague's consent → awaiting manager approval → approved, or declined, rejected or withdrawn. Until approval the requester can withdraw the request.
Employee view, calendar & reminders
Section titled “Employee view, calendar & reminders”My shifts shows the employee’s own published roster as a week or month; they can acknowledge the plan (“I have seen my shifts”) and request a shift swap from here.
Calendar subscription. Employees can enable a calendar feed and subscribe to the generated iCalendar URL (/shifts/feed/<token>) from any calendar app; it auto-updates. Renew link replaces the URL (the old one stops working), disabling revokes it. The database stores only half of the link — the other half is derived from SESSION_SECRET — and Klokk’s access log shows the feed path without the token.
Pre-shift reminders. Set SHIFT_REMINDER_HOURS (see Shift Planning under environment variables) to push a reminder that many hours before a shift starts — once per shift, to employees who enabled the “Shift plan published or changed” push notification.
ArbZG audit. Klokk checks rosters against the German Working Time Act — daily/weekly maximums, the 11-hour rest period, and night-work rules — and the Yearly ArbZG audit view gives a per-employee, full-year compliance overview.