Settings

Build it in ROSTER, which checks the rest between every pair of consecutive shifts, the run of days either side, every rolling seven-day window rather than calendar weeks, and the average across the period — and then reports how unevenly the nights and weekends fall, which no rule covers. Every threshold is a box you set. Nothing is uploaded.

Why a rota cannot be checked by reading it

A rota is a grid of people against days, and everything that is wrong with one is a property of two cells rather than of any single cell. You cannot see a rest violation by looking at a cell, because the violation is the gap between the end of one shift and the start of the next, and neither of those numbers is written anywhere on the grid.

So the eye is checking the wrong thing. It scans for obviously silly patterns — somebody on for ten days, somebody with three nights in a row — and misses everything that requires arithmetic between two cells, which is all of the rules.

The gap between two shifts

The canonical failure is a late followed by an early. A late finishing at 22:00 and an early starting at 07:00 the next morning is nine hours, and it looks completely unremarkable on a grid where the two cells read “L” and “E”.

Eleven hours is a common floor. Whether it is your floor depends on your agreement, your regulations and your jurisdiction, and this is why a tool that hard-coded eleven would be worse than useless: it would pass rotas that break a twelve-hour rule and fail ones that comply with a ten-hour one, in both cases silently.

The arithmetic also has to cross midnight properly. A night shift running 22:00 to 07:00 ends on the following day, so the rest before the next shift is measured from the following morning, not from the night it started. An implementation that subtracts clock times rather than real times gets this exactly backwards and produces a negative rest period, which then gets discarded as obviously wrong.

The run of days

Consecutive days worked is the rule people do check by eye, and the one they check adequately. The subtlety is what breaks a run. A day marked as rest breaks it. A day marked as annual leave breaks it. A day marked as a training course probably does not, because the person was at work.

That distinction is why a rota needs codes that carry times and codes that do not. A code with no start and no end occupies the day, contributes no hours, and breaks a run. A code with times is work, whatever it is called.

The rolling week, which is where rotas actually hide

This is the important one, and it is the one almost nobody checks, because almost every tool totals by calendar week.

Consider fourteen days starting on a Monday. Two rest days, then ten consecutive working days of eight hours, then two rest days.

WindowDaysHours
Calendar week 1Mon Tue rest, Wed–Sun worked40
Calendar week 2Mon–Fri worked, Sat Sun rest40
The seven days from WednesdayAll worked56

Both calendar weeks report forty hours, which is unremarkable. The seven days in the middle of them are fifty-six, and there is no calendar week that contains that stretch. It is invisible to any check that starts counting on a Monday.

This is not a contrived example. It is what happens naturally whenever a rest block sits at the start of one week and the end of the next, which is an extremely common rota shape, and it is precisely the pattern that produces the fortnight people describe afterwards as brutal while every report said forty hours.

Checking every seven-day window rather than the aligned ones costs nothing computationally and is the difference between a check that works and one that reassures.

The average across the period

A separate question again, because a reference period that averages hours over weeks or months can be satisfied while individual weeks are extreme, and can be breached while no single week looks bad. Both figures are worth having and neither substitutes for the other.

Night work

Night work usually carries its own limits, and the definition of a night shift is not obvious: it is generally a shift that includes some minimum number of hours within a defined night period, rather than one that starts after a particular time. A shift from 21:00 to 05:00 contains a great deal of night and may or may not qualify; a shift from 23:00 to 02:00 is short but entirely within it.

The practical point is that “is this a night shift?” is a property of the definition you are working to, not of the shift's name. Marking which codes count as nights explicitly, rather than inferring it from the label, is the only approach that survives somebody renaming a code.

The rule nobody has: fairness

Everything above is about compliance, and a rota can satisfy every rule on the list and still be the one that generates a grievance.

The reason is distribution. Nights, weekends and unsocial hours are not shared evenly by accident, and small biases compound: a pattern that gives one person one extra night per cycle gives them twenty-six extra nights a year. Nobody set out to do that, nobody can see it in a two-week grid, and the person it happens to can see it perfectly well over six months.

The check is trivial once somebody thinks to do it: count nights per person, count weekend days per person, and look at the spread between the highest and the lowest. A spread of one is noise. A spread of five is a conversation you are going to have whether or not you initiate it.

None of this is legal advice

Rest periods, maximum hours, reference periods, night work limits and the exemptions to all of them vary by jurisdiction, by sector, by collective agreement and by individual contract, and several of them can be modified by agreement. The figures commonly quoted — eleven hours, forty-eight hours averaged, six consecutive days — are common starting points and are not universal.

Which is why every threshold in the tool is a box rather than a constant. Put your own numbers in, and the check tells you what your own rules say about the rota in front of you.

Related tools