Skip to content
SkyRosterBook a working session

The engine

Score any roster against every active rule, and name exactly what fails

Every rostering vendor says their product is compliant. Few can show you, on your own roster, which specific rule is broken, on which specific shift, for which specific person, right now. Check Solution is the feature that does that. It is the same scoring pipeline that judges a solve, run on demand against whatever roster is on screen, solved, hand-built, or a mix of both, with nothing re-optimised and nothing changed.

Check Solution · illustration

12 people · 7 days · 63 duties

SolvedUnsolved draft

Hard

06

clearbreached

Medium

012

clearbreached

Soft

941

trade-offs

Every duty assigned.9 duties unassigned.

  • morning
  • afternoon
  • night
  • off
  • unassigned
  • ring: breaks a rule
  1. cleared breachedThere is a minimum rest gap between two dutiesrest and recovery
  2. cleared breachedNights in a row stay under the unit's limitnight work
  3. cleared breachedOnly staff holding the required rating work the shiftqualifications and currency
Rule names: compiled rule catalogue, compiled on 12 September 2026

modelled

An illustration of how the score behaves, not a benchmark.The engine scores a roster on three levels, hard, medium and soft. This shows the shape of a solve: unassigned duties fill in, breached rules clear, and the soft score settles on a trade-off rather than zero. The roster and the counts are invented. There is no solve time on this card, because we have no published benchmark to put behind one.

What it actually does

The same score, with no search attached

A solve and a Check Solution run share the identical scoring logic. The difference is the search: a solve spends its time budget trying moves that might improve the score, while Check Solution runs with no time budget for search at all. It scores the roster exactly as it stands and stops. That is why it comes back in seconds regardless of how large the roster is: there is nothing to search, only arithmetic to do once against every active rule.

Works on anything, not just a solved roster

A planner who hand-placed half a roster and let the solver fill the rest can run Check Solution on the result exactly as they would on a fully automated solve. The scoring does not know or care how an assignment got there. It evaluates what is actually on the grid.

Changes nothing

Running it does not move a single shift. It is purely a read: a report of where the roster stands against the rules, which is exactly what makes it safe to run as often as anyone wants, before a publish, mid-edit, or to test a question that has nothing to do with publishing at all.

Reading the result

Hard score, unassigned shifts, and soft score

The result comes back as three numbers, not one. Hard score is violations of rules the organisation has set as non-negotiable, and it should read zero before anyone publishes. Soft score is the weighed cost of every preference the roster does not fully satisfy, a number to minimise, not to zero out. Unassigned shifts is exactly what it says: required slots nobody is covering yet.

Hovering any of the three opens a per-rule breakdown, the exact rule that is firing, for example "There is a minimum rest gap between two duties", against the exact shift and the exact person it is firing on. When the roster is clean, it says so, in place of a list. A planner is looking at named facts, not a hunch about where the roster might be weak.

What this is for

Three moments a planner actually reaches for this

Before publishing

The moment a planner checks a roster is genuinely ready before staff see it, rather than finding out from a controller that their rest was short.

After a hand edit

Manually moving one shift to cover a gap can quietly break a rule three days later. A quick check confirms the fix did not create a new problem elsewhere in the same roster.

Testing a policy change before it goes live

A revised rest limit is not real until it changes what the roster allows. Scoring an existing roster against the revised setting, before publishing the change, is how a policy review gets tested rather than merely filed.

Where the numbers come from

ATS.OR.320 obliges the number. Check Solution enforces it.

Regulation (EU) 2017/373 does not set a minimum rest figure itself. It obliges the ANSP to specify one. Once your organisation has specified it, that figure becomes a rule setting, and Check Solution is the mechanism that actually enforces it against a real roster, shift by shift, rather than leaving it as a number on a policy page nobody re-checks.Regulation (EU) 2017/373, Annex IV (Part-ATS), ATS.OR.320(a)(5) and (8)

Bring a roster you already suspect is wrong.

A working session runs Check Solution against one of your own rosters, hand-built or solved, and you see exactly which rule fires and where, before we talk about anything else.