Shifts, rosters and working calendars
Define the working week, build shifts with breaks, set up fixed or rotating rosters, assign people, and check the schedule.
Required permission: hr.configure, hr.attendance.manage
Before you begin
- hr.configure creates calendars, shifts and rosters. hr.attendance.manage assigns people to them.
- Leave pricing uses the working calendar. Attendance reads a person's schedule in this order: roster, then fixed shift, then working calendar. Leave and holidays are applied on top.
Steps
Create a working calendar
- Open Employees > Configuration > Time & leave > Working calendars and select New.
- Enter a Code (for example STD40), Name, Timezone (an IANA name such as
Asia/Dubai) and Hours per week (0.01 to 168). - In the Working schedule, tick the working weekdays. Hours per working day is hours per week divided by ticked days, so 40 hours over five days is 8 hours.
- Select Save. Add holidays on Holidays (see Set up leave types, accrual plans and holidays).
Create a shift
- Open Shifts and select New shift. Enter the Code, Name, Starts and Ends. If it ends at or before the start, it crosses midnight; Overnight is worked out for you.
- Set Grace in and Grace out in minutes, and the overtime rule: choose an Overtime policy, or use the Simple threshold (overtime after a number of hours; 0 means the shift's scheduled hours).
- Tick Overtime needs approval if overtime must be decided before it is paid.
- Add Breaks. Choose a Fixed break (from and to times) or a Window break (an allowance in minutes somewhere inside the window). Tick Paid break and Deducted automatically as needed.
- Select Save.
Assign people to a shift
- Open the shift and select Assign employee. Choose the employee, From and optionally Until, then assign. A new assignment ends the earlier open one the day before.
Create a roster
- Open Rosters and select New roster. Choose Kind: Weekly (seven days, Monday first) or Rotating.
- For a rotating roster, enter Days in the cycle (2 to 366) and Day 1 falls on.
- Under Days of the cycle, choose a shift for each day, or leave it blank for a rest day. The number of entries must equal the cycle length.
- Select Save, then Assign employee with From, Until and Phase offset (days).
- Select Show schedule for an employee and a range of up to 62 days to check what attendance will expect.
Test a shift
- On a shift, use the Sample day calculator: clock in and out, the kind of day, regular hours already worked this week. It saves nothing.
What happens next
- Attendance days are built from the person's schedule. The scheduled hours of a shift are the paid length: a 09:00 to 18:00 shift with an unpaid hour of lunch is 8.00.
- A rotating roster picks the day with (date - anchor + phase offset) modulo cycle length. With a 3-day cycle DAY, NIGHT, rest anchored on 1 Oct 2026 and an offset of 1, 1 Oct is NIGHT, 2 Oct rest, 3 Oct DAY, 4 Oct NIGHT.
- A night shift 22:00 to 06:00 with a 02:00 to 03:00 unpaid window break of 30 minutes has 7.50 scheduled hours.
Good to know
- Codes are unique: 'A shift with that code exists.' 'A roster with that code exists.' A code is up to 30 characters.
- 'The shift ends before it starts, so it crosses midnight.' appears if you force a contradicting overnight setting.
- 'A break allowance cannot be longer than its window.'
- 'That person already has a roster over those dates.'
- 'Give exactly 3 days: a shift for each, or blank for a rest day.'
- A calendar in use cannot be switched off or have its code, hours or days changed: 'This master is used by an active position or current/future assignment.' and 'Create a new master for structural changes once this master has active assignments or positions.'
- The time zone and hours are checked, but error text on a calendar reads 'Use the supported fields and valid values for this master.'
- A calendar cannot hold different hours for different weekdays or a half-day weekday. Only holidays can be half days.
- Archived shifts cannot be assigned.
- Overtime policies and Import batches have their own menu entries and are not described here.