AWRA OpsHub Search
Shifts & rosters

Roster the week that is different. Let the rest look after itself.

Most of your people work the same shift most weeks. AWRA OpsHub takes that seriously: set a default shift once per person, then use the weekly grid only for the days that break the pattern. Empty cell means "as usual", so a roster is a list of exceptions rather than a wall of repetition.

Default shift + per-date override · Copy last week · Department filter · Grace periods · Expected hours derived

 Week of 24 Aug 2026  ·  Operations ← previous  ·  copy last week  ·  next →
Employee Mon 24Tue 25Wed 26Thu 27Fri 28Sat 29Sun 30
A. Otieno Day Day Day Night Night Off Off
J. Mwangi Night Night Off Day Day Day Off
L. Wanjiru Early Early Early Early Day Off Off
P. Kimani Day Day Day Day Day Day Off
The dashed cells are not empty — they are inherited. Nobody typed "Day" four times for P. Kimani; that is their default shift showing through. The one solid Day on Saturday is a real override, and so is every Night and every Off. The roster records the decisions, not the routine.
The mental model

Two layers, and the top one is usually almost empty.

This is the whole design, and it is worth thirty seconds because everything else follows from it.

Layer one — the default shiftone per person

Each employee gets a single standing shift, set on one screen that lists your whole active workforce with a dropdown beside each name. Save the lot in one action.

The screen tells you who is missing one. A count of active employees with no default shift sits at the top — because an employee with no shift has no expected hours, and that is the quiet gap that makes overtime detection and timesheet totals wrong later.

Clearing a dropdown removes the assignment rather than leaving a stale one behind, so somebody moving to a fully rostered pattern is one action.
Layer two — the per-date overrideonly the exceptions

The weekly grid holds one shift per employee per date, and only where that date differs. An empty cell is not "no shift" — it means fall back to the default.

Because the grid stores exceptions, the timesheet can also tell you something useful for free: an employee with any overrides in a month is shown as Rotating rather than being labelled with a single shift name that would be a lie for half their days.

Clearing a cell deletes the override and the day reverts to the default. There is no third state to reason about.

The reason this matters is what it does to the amount of work. A roster that requires every cell to be filled is a roster that gets filled once, enthusiastically, and then stops being maintained around week five — after which it is worse than no roster, because people trust it. A roster that only wants the exceptions stays accurate, because the effort of keeping it accurate is proportional to how much actually changed.

Anatomy of a shift

Five fields, and one number derived from them.

Shift definitions are deliberately small. Everything downstream — lateness, expected hours, overtime detection, the availability board — reads these five fields, so they carry a lot of weight for their size.

Day Shift  ·  08:00 → 17:00  ·  60 min break  ·  10 min grace  ·  8.00 expected hours
Paid span
Break
Start & end start_time · end_time

The span. An end time earlier than the start is a valid night shift, not an error — see below.

Break minutes 0 – 480

Unpaid, subtracted from the span. Up to eight hours, for the genuinely long shifts.

Grace minutes 0 – 240 · default 5

How late is still on time. Past it, a clock-in is marked late automatically rather than by somebody's judgement.

Active flag is_active

Retired shifts stop appearing in pickers without breaking the history that references them.

Expected hours is derived, never typed. It is the span minus the break, and it is the figure that decides whether a day produced overtime and what a monthly timesheet was supposed to total. Deriving it means a shift whose times change cannot leave a stale expected-hours number behind it — which is exactly the sort of stale number that makes a payroll query take a week to answer.
The 22:00 to 06:00 problem

A night shift is declared, not deduced.

This is a small design decision that decides whether your night workers get paid correctly, and almost every system gets it wrong in the same way.

The crossing comes from the roster, not from the clock times

Somebody clocks in at 22:00 and out at 06:00. A system now has to decide what happened, and it has two pieces of evidence: the two times, and the shift the roster says that person was working.

Inferring it from the times

"The end is before the start, so it must be a night shift — add a day." Reasonable, and wrong, because an inference cannot tell a night shift from a transposed pair of times.

Somebody typing 06:00 and 22:00 the wrong way round at the end of a long night silently becomes sixteen hours of recorded work, on a record payroll will later read.

Reading it from the shift

AWRA asks the roster instead: which shift governed this person on this date, and is that shift defined as ending before it begins?

A shift definition is a declaration somebody made once and reviewed. That is a completely different quality of evidence from two times typed at 6am, and it is the one the platform trusts.

The correction screen is where this pays off most. Attendance regularisation exists precisely because clock times arrive wrong, so it is the single place a transposed pair is most likely to turn up. Inferring the crossing there would turn the screen that exists to fix bad records into one that legitimises them. Instead, an approved correction takes its midnight crossing from the roster too — the same source, in the flow most likely to be carrying a typo.

The alternative failure is worth naming because it is the one this replaced. Where the crossing is not handled at all, a 22:00–06:00 day stores perfectly — both clock times present, status recorded — and every hours figure derived from it comes back empty. Not zero, which somebody would query, but nothing, which sums to nothing and leaves no gap behind it. A monthly total short by every night worked, with nothing anywhere reporting it.

Working the week

Copy last week, filter to one team, save just this week.

Three things that sound mundane and are the difference between a roster somebody maintains and a roster somebody abandons.

Copy last week

One action rolls the previous week forward, weekday onto weekday, so a stable four-week pattern is three clicks a month rather than a re-entry exercise.

It respects the department filter you have applied, so you can roll one team forward without touching another. And it tells you how many shifts it copied — or says plainly that the source week was empty, rather than reporting a cheerful success over nothing.

Filter by department

A grid of four hundred people is not a planning tool. Narrowing to one department turns the roster into something a departmental supervisor can own for their own team.

The filter carries through to the copy action and back onto the URL, so a supervisor's bookmark lands on their own team's week rather than the whole organisation's.

Save just this week

A roster save accepts only dates inside the week actually on screen, and only shifts that belong to your own workspace.

That sounds like paranoia until you consider what a roster is: the thing that decides expected hours, and therefore overtime, and therefore pay. A screen that writes pay-affecting data gets to be careful about what it accepts.

Who is actually here

The availability board answers the question rosters cannot.

A roster tells you who was scheduled. It does not tell you who is on leave, or that Thursday is a public holiday. The availability board resolves all three into one weekly view.

 Availability · week of 24 Aug 2026 read-only · department filter · week navigation
Working On approved leave Public holiday Off (not rostered)

Every person resolves to exactly one of four states per day, from three sources: their approved leave, your holiday calendar, and the shift the roster gave them for that specific date. It is roster-aware, so somebody whose Thursday override says Off shows as off on Thursday rather than as working because their default shift said so.

It creates no new data at all — which is exactly why it can be trusted. There is no availability record for anyone to forget to update; the board is a reading of leave, holidays and the roster you already keep. And it carries per-day totals across the workforce shown, so "can we cover Friday" is a number rather than a headcount exercise.

31Working
4On leave
0Holiday
9Off

The same resolution is used when assigning operational work, so the answer to "is this person available on Thursday" is the same answer everywhere in the platform rather than two systems disagreeing politely.

Public holidays are your own list, not a guessed calendar. Each holiday carries a name, a date and a recurring flag for the ones that fall on the same date every year — so the fixed ones are entered once and the moveable ones are entered when they are announced, which is the only honest way to handle a calendar that a government changes.

Straight answers

What rostering does today — and what we can add to yours.

Rosters decide pay, so here is precisely what this does, and the work we would take on for a more demanding operation.

The straight answer

What AWRA OpsHub does today

  • A default shift per employee plus per-date overrides on a weekly grid, so a roster records exceptions rather than repetition
  • A count of active employees with no default shift, surfaced where you assign them, because an employee without one has no expected hours
  • Shift definitions with start and end time, unpaid break minutes up to eight hours, and a grace period up to four hours before a clock-in counts as late
  • Expected paid hours derived from the span minus the break, so changing a shift's times can never leave a stale number behind it
  • Night shifts handled by declaration — the midnight crossing is read from the shift on the roster, never inferred from a pair of clock times
  • The same declared crossing used by the attendance correction flow, which is where a transposed pair of times is most likely to arrive
  • Copy last week onto this week, weekday to weekday, respecting the department filter and reporting how many shifts it moved
  • A department filter that carries through the grid, the copy action and the URL, so a supervisor can own their own team's week
  • Roster saves that accept only dates inside the week on screen and only shifts belonging to your workspace
  • A read-only weekly availability board resolving every person to working, on leave, public holiday or off — roster-aware, with per-day workforce totals
  • Availability resolved from one shared source, so operational work assignment and HR agree about who is free
  • Your own public holiday calendar, with a recurring flag for the fixed dates
  • Retired shifts kept out of pickers without breaking the roster history that references them
  • Automatic lateness marking against the grace period rather than by somebody's judgement

More we can add to your workspace

  • Generated rotation patterns — four-on-four-off, a rolling three-shift cycle — projected forward across months from a pattern you define once
  • Coverage rules with minimum staffing per shift and per skill, warning while you roster rather than after
  • Shift swap requests between employees, with a supervisor approval step and an audit trail
  • A conflict warning when a roster cell falls on approved leave or a public holiday, shown in the grid as you place it
  • An employee-facing roster view in the app and browser, with a notification when a published week changes
  • Multi-week roster copy — rolling a pattern forward four or twelve weeks in one action
  • Split shifts and multiple shifts per day, for operations that break the day into two attendances
  • Shift differentials — a premium rate carried by the night or weekend shift itself and applied in payroll
  • Skill and certification matching, so only qualified people can be placed on a shift that requires a certificate
  • Drag-and-drop rostering with keyboard fill, bulk paint across a row, and an undo
  • A roster cost preview, showing the wage cost of a week as you build it
  • Time-and-attendance rounding rules — to the nearest five or fifteen minutes — configured per shift
  • Roster publication with a locked, versioned week and a record of who published it

Where we point you to a specialist

  • Working-time limits, rest-period rules and night-work protections are law in most places and vary by jurisdiction. We will build the rule your labour counsel specifies; we will not ship a default that implies we have assessed your compliance.
  • Whether a particular pattern is lawful for a particular employee is an employment-law question, so it stays with the people accountable for it. Tell us the constraint and we will enforce it in the grid.
  • We will not pick your overtime multipliers or your night premium from a template. Those come from your contracts and your local law, and we build to what you give us.
  • A roster is a management decision. We will warn, block and record — we will not build something that decides who works nights on your behalf.

Rotation patterns and coverage rules are what larger operations ask for first, and both build straight onto the two-layer model already here — a pattern is simply a generator for the override layer. Tell us your patterns and your minimum staffing and we will come back with a written spec, a timeline and a price.

Worth knowing when you set up: the grace period defaults to five minutes on a new shift, and expected hours is derived rather than entered — so a shift with no break configured expects its whole span, which is usually what you want and occasionally is not.

Questions, answered

Shift scheduling FAQ.

Do I have to fill in every cell of the roster?
No — that is the point of the design. Each person has one default shift, and the grid only holds the days that differ. An empty cell means "as usual", so you record the exceptions and nothing else.
How do night shifts get counted?
Correctly, because the midnight crossing is taken from the shift definition on the roster rather than guessed from the clock times. A shift defined as 22:00 to 06:00 is a declaration somebody reviewed; two times typed at the end of a long night are not. That distinction is what stops a transposed pair becoming sixteen hours of pay.
Can I set up a four-on-four-off rotation?
You can roster it, and copy-last-week helps where the cycle aligns to a week. What we have not built is a pattern generator that projects a rotation forward across months from a definition you give once — that is the first item in the middle column above, and it builds directly onto the override layer that already exists.
Will it stop me rostering somebody who is on leave?
Not today. The availability board will show you they are on leave, and it is the screen for that question — but the grid does not yet warn you in the cell as you place it. That warning is on the list above.
Can employees see their own roster?
Not yet. Employees have self-service for attendance, leave and payslips; a published roster view with a change notification is work we can add.
What is the grace period for?
It is how late still counts as on time. Past it, a clock-in is marked late automatically — so lateness is a rule your organisation set once rather than a judgement somebody makes each morning. It defaults to five minutes and goes up to four hours.
What happens if I change a shift's times after people have worked it?
Expected hours is derived from the definition rather than stored, so past days recalculate against the shift as it now stands. Where you need history frozen, that is what locking a monthly timesheet does — a locked month keeps its own snapshot and stops responding to later changes.
Who can edit the roster?
Anyone holding the shift-management permission. Viewing availability is a separate, lower-trust grant, so a supervisor can be given the board without being given the power to change the week.
Ready when you are

Roster the exceptions. Get the nights right.

A default shift each, a grid for the days that differ, copy-last-week for the ones that do not — and a night shift that arrives at payroll as eight hours rather than as nothing at all.