1. What it does
Lab Shift Roster builds a draft rota for a diagnostic laboratory from a spreadsheet of your workforce, then tells you where that rota is thin.
The question it exists to answer is: do I have the right people, with the right competencies, in the right laboratory areas, at the right time?
It understands the things that make laboratory rostering awkward:
- Contracted hours and FTE, so a ten-hour night is not treated as equivalent to a seven-and-a-half hour day
- Part-time and alternating working patterns
- Competency as a status with an expiry date, not a tick-box
- Grade, seniority and competence as three separate things
- Sections that each need their own person standing at them
- Rest intervals measured from real shift times, including across midnight
Every roster it produces is a draft for you to review. It supports your decisions; it does not make them. It is not artificial intelligence — it is a rules engine that fills the shifts you define and tells you when it cannot.
2. Your data
Your workbook never leaves your device. Lab Shift Roster runs entirely inside your browser. Your workbook and the roster it produces are not uploaded to Optymum SS, there is no account, and no roster is stored on any external database. Once the page has loaded you can disconnect from the network and it will still work.
What that means in practice:
- The workbook you choose is read by the page itself, not sent anywhere
- The rota you download is written on your own computer
- Closing the tab discards everything; nothing persists
Usage analytics
The web page itself does use Google Analytics, so limited information about how Lab Shift Roster is used is transmitted: page views, and three events recording that a draft roster was generated, a staff rota was exported or a manager report was exported. Those events are names alone.
No staff, roster, competency, leave, hours, organisation or workbook information is included — not staff names or identifiers, not your file name, not any figure from your workbook, and no error text. Advertising features, Google Signals and ad personalisation are switched off. The distinction worth holding on to: your workforce data stays local; ordinary website analytics does not.
No absolute security claims are made about your own device or network. Please include only the workforce information the tool needs. Do not add unnecessary personal details, and never add patient-identifiable information — none is required.
3. Quick start
If you want to see what it produces before entering any real data, open the application and press Try the balanced example. That generates a rota from a fictional department in a few seconds.
For your own laboratory:
- Download a workbook — the blank one, or an example to work from
- Fill it in — staff, competencies, shifts, requirements, leave
- Upload it — choose the file, nothing is transmitted
- Generate a draft roster
- Review the issues — start with Critical
- Export — a staff rota to circulate, a manager report to keep
Expect the first attempt to raise issues. That is the tool doing its job: it is showing you where the plan is thin, not failing.
4. Choosing a workbook
Three downloads are offered, and they serve different purposes.
| Download | Contains | Use it when |
|---|---|---|
| Blank workbook | All the headings, guidance and dropdown lists. No staff, no
competencies, no leave. Shifts, requirements and sections carry a
common starting configuration you can adjust — set a shift's
Active column to N for any your laboratory
does not run. |
You are setting up your own laboratory |
| Balanced example | A well-staffed fictional department of fourteen. Produces full coverage with no critical issues. | You want to see what a healthy result looks like |
| Challenging example | A fictional department with deliberate gaps: thin morphology cover, an expired competency, part-time constraints and leave. | You want to see what the tool detects |
Every name, competency and date in both examples is invented. Neither contains real staff information, and the challenging example is labelled as deliberately difficult so nobody mistakes it for a typical result.
The workbook has eleven sheets. The next sections cover each one. You do not need to complete every column — most have sensible behaviour when left blank — and the guidance below says which ones matter.
5. Roster Details
Who the rota is for and what period it covers. These appear on the exported workbook, so they are worth filling in properly if the rota will be circulated.
| Setting | Notes |
|---|---|
| Rota name | Defaults to Laboratory Staff Rota |
| Organisation | Appears in the export heading |
| Department | For example Blood Sciences |
| Site | Useful where a trust runs several laboratories |
| Prepared by | Recorded in the manager report |
| Roster period start | Required. Enter as dd/mm/yyyy |
| Roster period end | Required. Inclusive |
| Workbook version | Leave alone. Lets the tool recognise an older workbook |
A month is the usual period. Longer works, but produces a very wide spreadsheet — you will be warned beyond a year.
6. Rules
Your laboratory's own operating rules. Every one is a setting you control.
These are planning settings, not compliance determinations. The rest interval in particular is whatever your organisation has agreed. Lab Shift Roster reports a configured rest rule conflict; it never claims a shift is unlawful.
| Rule | Default | What it does |
|---|---|---|
| Minimum rest hours between shifts | 11 |
Measured from real finish and start times. A late ending 21:00 followed by an early starting 07:00 is ten hours and will be prevented |
| Maximum consecutive days | 6 |
Longest unbroken run of working days. Can be overridden per person |
| Maximum consecutive nights | 4 |
Longest unbroken run of nights |
| Night block length | 3 |
Nights are rostered in blocks rather than scattered |
| Recovery days after nights | 2 |
Days off following a block of nights |
| Hours tolerance (%) | 10 |
How far from contracted hours before somebody is flagged |
| Competency expiry warnings (days) | 30, 60, 90 |
Warn when a competency expires within these periods |
| Max simultaneous bench assignments | 1 |
How many sections one person may cover at once. Leave at 1 |
| Cross cover allowed | N |
Reserved for a future release |
| Weekend days | Saturday, Sunday |
Which days count as the weekend |
| Share nights evenly | Y |
Spread nights across everyone eligible. See the note below |
| Section rotation warning (days) | 56 |
Warn if somebody has not worked a section for this long |
| Alternative roster number | 42 |
Changes which of several valid drafts you get. You never need to edit this — use the button instead |
A note on sharing nights
Sharing nights evenly is on by default, because concentrating them on a few
people while eligible colleagues do none is not acceptable in practice. It has
a genuine cost: a block of nights also books the recovery days after it, so
spreading nights across more people fragments cover for the day service. On the
balanced example, turning sharing on moves requirement compliance from 100% to
about 95%. Set it to N only if that last few per cent of cover
matters more to you than sharing the unpopular work.
There is deliberately no senior band threshold. Seniority is
recorded per person on the Staff sheet, and a shift that needs a particular
grade uses Min Band on the Requirements sheet. A Band 7 is not
automatically senior, and a senior is not automatically competent in
everything.
7. Staff
One row per person. This is the most important sheet, and the one worth taking time over.
Identity and role
| Column | Notes |
|---|---|
| Staff ID | Required and must be unique. Every other sheet refers to it. Anything
consistent works — S01, initials, a payroll number |
| Name | Required. Shown on the rota |
| Initials | Optional. These are the initials used in the section allocation rows, and they now appear in their own column on the rota so a reader can tell whose they are. Leave it blank and they are worked out from the name and kept unique; fill it in if your laboratory already uses its own |
| Job Title | Shown in the manager report |
| Band | NHS band or local grade. 8a sorts above
8, which sorts above 7 |
| Registered BMS | Y/N. Used by the
Min Registered BMS requirement |
| Senior | Y/N. Recorded explicitly,
never inferred from band |
| Shift Coordinator | Y/N. Checked
separately from seniority |
| Trainee | Y/N. Counted against
Max Trainees |
Hours
| Column | Notes |
|---|---|
| Contracted Weekly Hours | Drives how much work each person is given. This is the main workload control |
| FTE | Used only if weekly hours are blank, applied to a 37.5-hour week |
| Working Pattern | Free text label such as Part time. Descriptive only |
| Max Hours This Period | Hard ceiling for the whole period. Blank means no ceiling |
| Max Weekly Hours | Hard ceiling per week |
When they are available
| Column | Notes |
|---|---|
| Mon – Sun | Y/N per day: the days this person is
available. Leave all seven blank for somebody fully
flexible. These are hard constraints — a blank Saturday
means they can never be rostered on a Saturday |
| Pattern Cycle (weeks) | Set to 2 for an alternating fortnight, then use the Week
Patterns sheet |
| Earliest Start / Latest Finish | Times such as 09:00 and 16:00. A shift that
falls outside them is never offered |
| Max Days Per Week | Personal cap |
| Max Consecutive Days | Overrides the organisational rule for this person |
| Works Nights / Works Weekends | Y/N eligibility |
| Max Nights / Max Weekends | Caps for the period |
| Group | Splits the rota into labelled blocks, such as Main and Bank |
| Restrictions / Notes | Your own reminders. Restrictions appear in the manager report only, never on the staff rota |
The commonest setup mistake. The Mon–Sun columns are availability, not a record of contracted days. If you mark somebody as working Monday to Friday only, they can never be rostered at a weekend however Works Weekends is set. If they are flexible, leave those columns blank.
8. Week Patterns
Only needed for staff who work alternating weeks. Set Pattern Cycle (weeks) on the Staff sheet first, then add one row here per person per week.
| Staff ID | Week | Mon | Tue | Wed | Thu | Fri | Sat | Sun |
|---|---|---|---|---|---|---|---|---|
| S06 | 1 | Y | Y | Y | N | N | N | N |
| S06 | 2 | N | N | Y | Y | Y | N | N |
Weeks are counted from the Monday of the week the roster period starts, so a period beginning midweek does not shift the pattern. If a cycle is declared but a week is left out, week 1 is used for it rather than making that person unavailable.
9. Competencies
One row per person per discipline. This is what lets the tool answer whether a section can actually be staffed.
| Column | Notes |
|---|---|
| Staff ID | Must match the Staff sheet |
| Name | For your readability; the ID is what is used |
| Discipline | Short code: BT, HAEM, COAG,
MORPH. Whatever codes you use must match the Benches and
Requirements sheets |
| Competency | The name of the specific competency, such as Crossmatch and electronic issue |
| Status | See the table below |
| Date Achieved / Review Date | Your records |
| Expiry Date | Past this date the competency stops counting, whatever the status says |
| Trainer / Assessor | Y/N. Used by
Min Trainers |
| Result Authoriser | Y/N. Checked
separately from competence |
What each status means
| Status | Counts as cover? | Meaning |
|---|---|---|
| Not Trained | No | Has not started |
| In Training | No | Learning, and needs somebody with them |
| Supervised | No | Working towards sign-off, still supervised |
| Competent | Yes | Can work the discipline unsupervised |
| Trainer | Yes | Competent, and can train others |
| Assessor | Yes | Competent, and can assess others |
| Expired | No | Lapsed and needs reassessment |
Only Competent, Trainer and Assessor satisfy a requirement. Somebody In Training or Supervised needs a colleague present, so counting them as cover would overstate what the laboratory can actually deliver. An expired record never counts, even if the status column still says Competent.
Somebody may hold several records in one discipline. The strongest current one governs, so an old In Training row does not hide a later Competent one.
Authorisation is checked independently of competence. A result authoriser must also be currently competent in that discipline — the flag alone is not enough.
10. Shifts
The shifts your laboratory runs, defined by real clock times.
| Column | Notes |
|---|---|
| Code | Short label shown in every cell of the rota, such as
C |
| Name | Full name, such as Core |
| Start / End | 24-hour times. Length is worked out from these, so the hours can never disagree with the times |
| Days | All, Weekday or
Weekend |
| Active | Y or N. Set it to N for a
shift your laboratory does not run. Leave it blank and the shift
runs, so older workbooks are unaffected |
| Night Shift | Y brings in the night block,
recovery days and consecutive-night rules |
| Colour / Font Colour | Six-digit hex. The cells show the actual colour and the Preview column shows how the shift will look |
The starting configuration is:
| Code | Name | Times | Hours | Days | Night |
|---|---|---|---|---|---|
| E | Early | 07:00–15:00 | 8 | Weekday | No |
| C | Core | 09:00–17:30 | 8.5 | Weekday | No |
| L | Late | 13:00–21:00 | 8 | Weekday | No |
| N | Night | 21:00–07:00 | 10 | All | Yes |
| W | Weekend Day | 09:00–17:30 | 8.5 | Weekend | No |
A shift crossing midnight is handled correctly: 21:00 to
07:00 is ten hours, not a negative number. A shift that starts and
finishes at the same time is rejected as a data-entry error.
Shifts your laboratory does not run
Those five are a starting point, not a prescription. Plenty of laboratories have no early shift, or run a twilight instead of a late, or work weekends on the same pattern as weekdays.
Set Active to N for any shift you do not run.
An inactive shift is never rostered, and any requirement or bench that
mentions it is quietly ignored for as long as it is switched off — so you
do not have to go and unpick the Shift Requirements and Benches sheets to
remove one shift.
To add a shift, add a row. Give it a code that nothing else uses, then refer to that code from Shift Requirements and Benches as normal.
Switching off is deliberately reversible. A laboratory that drops its early
shift over the summer can set Active back to Y in September
without retyping the times, the colours or the requirements. Deleting the
row works too, but you would lose all of that.
If every shift is marked inactive, the roster says so plainly rather than producing an empty rota.
11. Shift Requirements
What each shift needs in order to be safe to run. Every condition is checked independently — a senior does not satisfy a transfusion competency, and a competent scientist does not satisfy a coordinator requirement.
| Column | Notes |
|---|---|
| Shift Code | Must match the Shifts sheet |
| Days | All, Weekday,
Weekend, or a single day. A day-specific row wins over a
general one, so you can set a different Saturday minimum without
restating everything |
| Min Staff | Minimum headcount |
| Min Registered BMS | How many must be registered |
| Min Senior | How many must be marked Senior |
| Min Band + Staff At Min Band | Used together: Min Band 6 with
Staff At Min Band 1 means at least one person at
Band 6 or above |
| Min Coordinators | How many shift coordinators |
| Min Trainers | How many trainers or supervisors |
| Max Trainees | Cap on trainees. Blank or 0 means no cap |
| Required Competencies | Discipline and number, comma separated:
BT:1, HAEM:2, COAG:1 |
| Required Authorisers | Same format:
BT:1 |
How competency requirements are counted
There is an important distinction here, and getting it wrong is the usual cause of an impossible requirement.
- Sections need distinct people. A section is a physical place somebody stands. Three sections each needing one competent person need three different people, even if one person holds all three competencies.
- A shift's own competency list does not.
BT:1, HAEM:1on a single-handed night shift means one person competent in both. Asking for two distinct people on a one-person shift could never be satisfied.
Because sections drive distinct people, section demand also drives staffing: a shift with a headcount minimum of one will still roster three people if three sections need cover.
12. Benches
The laboratory sections that need somebody actually standing at them.
| Column | Notes |
|---|---|
| Bench | The section name in words, such as Blood Transfusion. This is what appears in issue headlines |
| Discipline | The competency code it needs, such as
BT |
| Days | All, Weekday or
Weekend |
| Min Staff | How many people during the week |
| Min Staff Weekend | A reduced weekend service.
0 closes the section at weekends |
| Shift Codes | Which shifts the section must be staffed during, such as
C, L, W. Blank means every shift except nights |
| Requires Authoriser | Y means only a result
authoriser can cover it |
| Rotation Interval (days) | Used by the rotation warning |
Watch the Shift Codes column. If you leave it blank, every non-night shift is expected to staff that section. A two-person late shift cannot cover four sections, so you will get gaps. List only the shifts the section genuinely runs during.
One person covers one section at a time. Coverage is judged on who is actually allocated, not on who happens to be on duty holding the right competency — so a multi-skilled scientist is never counted twice.
13. Leave and Leave Types
Nobody is ever rostered on a day they are recorded as absent.
Leave
| Column | Notes |
|---|---|
| Staff ID | Must match the Staff sheet |
| From / To | Both dates are included in the absence |
| Type | A code from the Leave Types sheet |
| Credited Hours | Optional. States the hours for this absence explicitly instead of deriving them. Pro-rated if the absence straddles the period edge |
| Reason | Your own note. Never appears on the staff rota |
Why credited hours matter
Without them, somebody who takes a week off still shows a shortfall against their contracted hours, and the rota tries to fill it — giving them a full workload squeezed into fewer days. Crediting the absence closes that gap, so hours lost to leave are not clawed back with extra shifts.
Hours are therefore reported as five figures:
| Figure | Meaning |
|---|---|
| Target | Contracted weekly hours scaled to the period |
| Worked | Hours actually on shifts |
| Credited absence | Hours credited for time away |
| Total accounted | Worked + credited. This is what balancing compares |
| Variance | Total accounted minus target |
Leave Types
| Column | Notes |
|---|---|
| Code / Label | Shown on the rota and in the key |
| Colour / Font Colour | Hex, displayed as the actual colour |
| Counts Towards Contracted Hours | Y credits the hours, so no make-up shifts are
added |
| Credited Hours Method | Working pattern derives them from that person's own
days, Fixed hours per day uses the column below,
Not credited credits nothing |
| Fixed Hours Per Day | Used with the fixed method |
The supplied codes are A/L, S/L, C/L,
M/L and S/D, all crediting hours by default. This is
a planning setting, not a statement of HR or pay policy — organisations treat
sickness and long-term absence differently, so it is configurable rather than
assumed.
Because credited hours come from each person's own pattern, a part-timer absent for a week is credited a part-time week.
14. Generating a roster
Choose your completed workbook, then press Generate draft roster. Everything happens on your own machine, so nothing is uploaded and the speed depends on your computer rather than a connection.
If the workbook needs correcting you will get a list of everything wrong at once, each naming the sheet, the row and the column heading. Fix them, save, and choose the file again — you do not have to reload the page.
A workbook from an earlier version still works. You will see a note saying it predates the current template, because it will not have the newer optional columns — Active on the Shifts sheet and Initials on the Staff sheet. Nothing is rejected, and a missing Active column simply means every shift runs, exactly as before.
Advanced settings
Optional. You can override the start and end dates without editing the workbook, which is useful for producing next month from the same file. The Roster generation ID is recorded with each draft so a particular rota can be reproduced; you never need to change it by hand.
15. Reading the dashboard
The headline is the roster status: No issues found, Review suggested, or Attention required.
The two coverage figures
These are different questions and it matters not to confuse them.
| Figure | What it measures |
|---|---|
| Staffing slot coverage | Whether the positions are occupied. A headcount measure only |
| Shifts meeting all configured requirements | Whether each shift satisfies everything you set: staffing, registration, seniority, band, coordinator, competencies, authorisers, the trainee limit, section coverage, availability and rest |
These routinely differ, and the gap is the useful part. On the challenging example, 100% of positions are occupied while only 63% of shifts satisfy everything configured. A full shift is not necessarily a safe one.
The other tiles
| Tile | Meaning |
|---|---|
| Unfilled shifts | Shifts below their minimum headcount |
| Uncovered sections | Section slots with nobody competent allocated |
| Senior cover gaps | Shifts requiring a senior with none |
| Competency gaps | Missing competencies or authorisers |
| Rest rule conflicts | Gaps shorter than your configured interval |
| Outside target hours | People beyond your hours tolerance |
| Competencies expiring / expired | Against your warning thresholds |
| Single points of failure | Disciplines with only one independently competent member of staff |
| Weekend / night fairness | Good, Review or Uneven |
Fairness is a coarse judgement to review, not a score to optimise — there is no single correct fairness formula. Night fairness is measured in blocks, because ten three-night blocks shared between eight people cannot come out level, and counting individual nights would call the closest available split unfair.
16. Working through issues
Issues open with counts by severity and the main causes ordered by frequency, so you can see where to start rather than reading a list.
| Severity | Meaning |
|---|---|
| Critical | Resolve before publishing: an unfilled shift, a missing competency or authoriser, absent senior cover, somebody rostered while unavailable |
| Review | Worth a look: materially off contracted hours, uneven distribution, a competency expiring, thin section cover, a single point of failure |
| Passed | Checked and satisfied. Useful evidence that a rule was applied |
Each issue states the date, shift and section, what was required, what was available, the impact, and a suggested review point. For example:
Morphology cannot be covered
Core. Morphology cannot be staffed on this shift.
Required: 1 independently competent MORPH scientist
Available: 0
What to check: consider moving a competent scientist onto this
shift, changing the deployment plan, or arranging additional cover.
Related warnings with the same underlying cause are combined. A missing morphology scientist produces one issue, not two — one for the competency and another for the section that consequently could not be staffed.
17. Roster preview and section coverage
Staff down the side, dates across the top, shift codes in the cells, coloured as you configured them. The name column stays put while you scroll sideways.
This on-screen preview names people in full. The exported rota adds an Initials column, because that is where the section allocation rows use initials — see Exporting.
- Search staff by name, role or band
- Filter by shift to see who is on nights, for instance
- Narrow the dates to focus on a week
- Hover a cell for the shift name, times and any section allocation
- A cell marked
*was adjusted by hand - A blank cell means not scheduled
The Section coverage panel below lists each date and shift with the section, how many people were required and allocated, a status of Covered, Review or Not covered, and who is on it. Filter by date or section.
18. Contracted hours
Per person: contracted weekly hours, target for the period, worked, credited absence, total accounted, variance, percentage of target, and a status.
Work is distributed by hours, not by counting shifts. Twenty ten-hour nights total 200 hours where twenty seven-and-a-half hour days total 150 — treating those as equivalent would be the wrong answer. Shift counts are reported as a statistic only.
Somebody mildly under target is often just a part-timer whose available days do not line up with demand. Somebody well over is worth investigating: it usually means they are one of very few people who satisfy a constrained requirement.
19. Workforce resilience
How exposed you are if one person is unavailable. Two different risks are reported separately, because they are not the same thing.
| Level | Question | Example |
|---|---|---|
| Workforce | How many people in the whole department can do this? | Only one morphology-competent scientist exists |
| Shift | How many are on duty for a particular shift? | Only one transfusion authoriser is scheduled on Tuesday |
At workforce level, one competent person is Critical, two is Review, three or more is Passed. Shift-level thinness is reported once per shift and discipline with a count of affected dates, rather than once per day — a thinly covered section is one problem to think about, not thirty.
Section rotation is also tracked: if somebody competent in a discipline was not allocated to it during the period, that is flagged against your configured interval. No rotation rule is invented; the report simply says how long it has been.
20. Adjusting a roster by hand
The draft is a starting point. To change it, use Adjust an assignment:
- Choose the date and shift
- Choose somebody to take off, somebody to put on, or both
- Add a reason if you want a record of why
- Press Apply change
Only people who could actually work that shift are offered, each listed with their current competencies. Anybody excluded is counted with the reason — on leave, not their working day, cannot work nights or weekends, or already working elsewhere — so you can see why a name is missing rather than wondering.
Every check then re-runs: staffing, competency and section coverage, hours, fairness, rest rules, resilience, the dashboard and both exports. If your change creates a problem, you will see it immediately.
Taking somebody off means they are not rostered anywhere that day. Without that, the tool would simply put them back when it refilled the shift. To move somebody between shifts, take them off and put them on the other shift in the same change.
Manual changes are marked as such, listed with an Undo for each and an Undo all, and they survive Generate alternative roster — they are never silently overwritten. Undoing everything returns exactly the automatic roster.
Generate alternative roster
Produces a different valid draft from the same information, keeping your workbook, date range and rules. Useful when a rota is technically fine but you would rather the work fell differently. If you have manual changes you will be warned before they are replaced.
Start new roster
Clears the loaded workbook, the draft, the issues, the filters and any manual changes, and returns to the upload state. No page reload, and the tool stays ready to use.
21. Exporting
One draft, two audiences. Both come from the same roster, so exporting one does not change the other or lose your manual adjustments.
Export staff rota
A simplified workbook for circulating to the team: Roster, Section Allocations and Notes. Clean, printable, and deliberately limited to what somebody needs in order to read their own rota.
The Roster sheet carries an Initials column beside each name, so the initials used in the section allocation rows can be matched to a person without leaving the sheet.
What it withholds, on purpose. Competency records,
individual hours, fairness analysis, workforce vulnerabilities, private
working restrictions, leave reasons — and the type of any absence.
Absence appears as an ordinary non-working day, because printing
S/L on a departmental rota discloses that somebody was off
sick.
Export manager workbook
The full analytical record, in ten sheets:
| Sheet | Contains |
|---|---|
| Instructions | Period, status, and the rules that were applied |
| Roster | The rota, with an Initials column beside each name, section allocations and per-shift staffing counts |
| Staff | Who was included, grades, patterns, restrictions |
| Competencies | The register, with what counts as cover |
| Shift Requirements | What each shift was required to provide |
| Bench Allocations | Section cover day by day, with status |
| Issues | Everything to review, by severity |
| Hours Summary | Target, worked, credited, accounted, variance |
| Fairness Summary | How the unpopular shifts are shared |
| Competency Expiry | Expired and expiring records |
Both are formatted to be usable: freeze panes, filters, sensible column widths, landscape and fit-to-width for printing, and a legend. Status is always carried by a word as well as a colour, so nothing depends on colour alone.
22. How it decides
Useful to know when a result surprises you.
Hard rules it will not break
If a shift cannot be filled without breaking one of these, it is left short and reported:
- Nobody is rostered on a day they are recorded as absent
- One shift per person per day
- Nobody is rostered outside their working pattern or available hours
- No shift the day after a night, and the configured rest interval is honoured in both directions
- Maximum consecutive days and nights
- Nights only for staff marked as night-capable; weekends likewise
- Personal caps on nights, weekends, days per week and hours
Order of work
- Nights first. They are the most constrained and they generate the recovery days everything else has to work around
- Then day shifts, hardest first — the shift with the fewest eligible people goes first
- Within a shift, the rarest capability first, so a scarce competency is not spent on a slot somebody else could have filled
- Then top up to the minimum headcount
- Then allocate sections, one person to one section
Who gets offered work
Among eligible people, whoever is furthest below their contracted target goes first. For weekend days, whoever has done fewest weekends leads instead — ordering by hours alone concentrated weekends on full-time staff, because a larger target means a larger shortfall. Nights are shared the same way when Share nights evenly is on.
Fairness comparisons are only ever made within the group eligible for that work, so somebody who cannot work nights is never counted as having an unfairly light night load.
23. If something goes wrong
The workbook is validated before any rota is produced, and every problem is reported at once so you can fix them in one pass. Each names the sheet, the row and the column heading rather than an internal error.
| Message | What to do |
|---|---|
| That file could not be opened as an Excel workbook | It may be a different file type, an old .xls, or damaged.
Download a fresh workbook |
| This workbook was made with an earlier version | It lacks competency, hours or requirement information that cannot be safely guessed. Download the latest blank workbook and copy your staff into it |
| The Staff sheet is missing the '…' column | Add the heading, or start from a fresh workbook |
| Staff ID '…' is used twice | IDs must be unique; the other sheets refer to them |
| '…' is not a competency status | Use one of the seven listed statuses. The dropdown offers them |
| … is marked as not working on any day of the week | Mark at least one day, or clear all seven to mean fully flexible |
| … has a latest finish at or before their earliest start | No shift could ever fit; correct one of the two times |
| Shift '…' starts and finishes at the same time | Check the start and finish times |
| Shift '…' has no entry on the Shift Requirements sheet | Add a row saying how many people it needs, or no staff will be rostered onto it |
| Nobody holds a '…' competency | A section can never be covered. Check the discipline code matches the Competencies sheet |
| Could not write … the file is open in another program | Close it in Excel and try again |
The rota looks wrong rather than broken
- Somebody is never rostered. Check their Mon–Sun availability, night and weekend eligibility, and any personal caps
- Nobody is rostered at weekends. Their availability pattern probably excludes Saturday and Sunday
- A section is never covered. Check the discipline code matches, that somebody is Competent rather than In Training, that the competency has not expired, and whether the section requires an authoriser
- Everybody is over or under target hours. Your total shift demand does not match your total contracted hours. Adjust the requirements or the hours
- Too many people are under target. Often a sign that a requirement routes work to a small group, leaving others idle
24. What it does not do
- It does not make staffing decisions. Every rota is a draft for managerial review
- It is not artificial intelligence. It is a rules engine. Where it cannot fill a shift without breaking a rule you set, it leaves the shift short and says so
- It does not determine legal or regulatory compliance. Rest intervals and other limits are rules you configure
- It does not replace local workforce policies, HR systems, payroll, ESR or professional judgement
- There are no user accounts, no external database, no cloud storage and no integrations
Not yet supported
- Bank holidays are not modelled as a distinct category
- Section rotation is reported but is not yet an input to scheduling
- Part-shift sections — morphology 09:00–13:00 then coagulation 13:00–17:00 — are not yet available; sections are covered for a whole shift
- The engine produces a workable draft reliably but does not prove it is the best possible one. A human-built rota may sometimes be better