Skip to content
SkyRosterBook a working session

Who it's for · HR and payroll

Teresa closes the month. She needs the numbers to already be right.

“Every month-end I spend four days reclassifying overtime by hand, and one wrong code is a grievance.”

Teresa runs payroll for a 24/7 workforce.* Nobody hired her to be a rostering expert, and the roster is not her system. But every overtime hour, every meal allowance, every disputed shift eventually lands as a line in a file she has to sign off before it reaches payroll.

What she actually needs to decide is whether she can stop re-deriving payroll codes from the roster by hand, and where her real risk sits if she does. The honest answer has two parts: the classification work she currently does manually is a mechanical computation the platform already runs on every approved shift, and the one action in the whole workflow worth being careful with is closing the month, because that one is irreversible.

The mechanism

Four pipelines. One code per line.

Overtime doesn't come from one place. SkyRoster runs four separate calculations, each independently working out the right payroll code for the hours in front of it.

Holiday shifts

A shift worked on a public holiday, priced at the holiday rate.

Overtime duties

A duty request approved on top of the normal roster.

Shift extensions

Time added before or after a scheduled shift.

Work requests

An ad hoc extra shift, called in on what was a day off.

Each pipeline resolves independently to your own payroll code, including a first-hour premium where a labour agreement pays a higher rate for the first hour of overtime than the rest. That matters because a shift extension worked on a public holiday is not paid like an ordinary shift extension, and a system with one overtime bucket has to fudge the difference. This one doesn't.

Where the boundary falls: day, night, banked, paid

Two more decisions happen automatically on every overtime line. First, the day/night split: any period of overtime that crosses your configured night-shift boundary is split into separate day and night line items, each carrying its own rate, including a shift that runs across midnight. configured

Second, the banked-versus-paid decision. At approval time, the system checks the employee's Bank of Working Hours (BWH) balance. Enough balance to cover the whole extra shift, and it books as banked hours, no overtime. A partial balance splits the shift: part banked, part overtime for the remainder. No balance, and the whole thing books as overtime. Nobody decides which bucket a shift falls into by hand; the balance decides it, though either the employee or their manager can still force a shift onto the pure-overtime path when the contract calls for it.

Compensatory time off, mirrored automatically

For employees whose contract lets them bank time off instead of being paid, every overtime line is automatically duplicated as a Compensatory Time Off (CTO) entry at the configured compensatory rate. You don't reclassify anything by hand. Whether it was paid or banked was decided by the employee's contract and their BWH balance, not by whoever happened to run that week's export.

Meal allowances, computed, not remembered

Every work period is checked against your configured meal-time window. Overlap it for long enough and the allowance applies automatically, with different rules for holidays and normal days and per request type. Nobody has to remember that the 14:00 to 22:00 shift crosses the dinner window and the 22:00 to 06:00 one doesn't.

Walk it through

One illustrative day, all seven stages.

Everything above in one place: four inputs, the BWH carve-out, the configurable day/night split, the first-hour premium, CTO mirroring, code resolution, and the export it feeds.

Payroll · one illustrative day

modelled

Four inputs, one export

Follow one employee's extra time through seven stages of SkyRoster's payroll engine: four sources of extra time, a Bank of Working Hours carve-out, a day/night split at a boundary you set, a first-hour premium, Compensatory Time Off mirrored automatically, and a numeric code for every line. The hours and codes below are illustrative; the pipeline is not.

Step 1 of 7

Four inputs, one day

Every source of extra time enters as its own labelled line, raw and uncoded.

SkyRoster runs four independent calculations for extra time worked outside the roster, each resolving its own payroll code: a shift worked on a public holiday, an approved overtime duty, a shift extension before or after a scheduled shift, and an ad hoc work request called in on a day off.

This illustrative employee has all four on the same day, so every pipeline is visible at once. Most real days carry one of these, if any.

The payroll pipeline's running figures after step 1 of 7.
LineTimeHoursDay / nightPayroll treatment
Holiday shift08:00–13:005h00, Raw, not yet coded
Shift extension13:00–14:301h30, Raw, not yet coded
Overtime duty20:00–23:303h30, Raw, not yet coded
Work request01:30–05:003h30, Raw, not yet coded
Lines so far4

Step 2 of 7

The Bank of Working Hours carve-out

Thirty minutes of the overtime duty move to the Bank of Working Hours line, before anything is priced as overtime.

Before any of this becomes overtime pay, SkyRoster checks the employee's Bank of Working Hours balance. A balance that covers the whole duty books all of it as banked hours; no balance books all of it as overtime; a partial balance, like this employee's, splits the duty.

The carved-out portion is drawn from the bank rather than priced as overtime, and it is carved out first, ahead of everything below: the day/night split and the first-hour premium only ever see what's left of the duty.

The payroll pipeline's running figures after step 2 of 7.
LineTimeHoursDay / nightPayroll treatment
Holiday shift08:00–13:005h00, Bank Holiday
Shift extension13:00–14:301h30, Overtime
Overtime duty, banked · Bank of Working Hours (new this step)20:00–20:300h30, Banked (Bank of Working Hours)
Overtime duty, remaining (new this step)20:30–23:303h00, Proceeds to overtime, not yet split by the night boundary
Work request01:30–05:003h30, Overtime
Lines so far5

Step 3 of 7

The day/night split, a boundary you configure

The remaining overtime duty splits into a day line and a night line at the boundary. Switch the boundary below and the split moves.

configured

Any overtime that crosses the configured night boundary splits into separate day and night lines, each on its own rate, including a duty that runs across midnight.

That boundary is a setting an administrator configures per site, not a clock time fixed in the code. Try the alternate boundary below: the overtime duty's night hours move; the work request, already deep in the night under either setting, does not.

Night boundary, a configuration screen in SkyRoster, not a constant
The payroll pipeline's running figures after step 3 of 7.
LineTimeHoursDay / nightPayroll treatment
Holiday shift08:00–13:005h00DayBank Holiday, day
Shift extension13:00–14:301h30DayOvertime, day
Overtime duty, banked · Bank of Working Hours20:00–20:300h30, Banked (Bank of Working Hours)
Overtime duty, day (new this step)20:30–22:001h30DayOvertime, day
Overtime duty, day (new this step)20:30–23:303h00DayOvertime, day
Overtime duty, night (new this step)22:00–23:301h30NightOvertime, night
Overtime duty, night (new this step), 0h00NightOvertime, night (none under this boundary)
Work request01:30–05:003h30NightOvertime, night
Lines so far6

Step 4 of 7

The first-hour premium

Every period's first hour is marked separately, independently of whichever split it just went through.

Many collective agreements pay a higher rate for the very first hour of a period of extra time than for the hours after it. SkyRoster marks that hour on every period independently: the holiday shift, the extension, the remaining overtime duty and the work request each get their own first hour marked.

The night split and the first-hour premium are two independent cuts through the same duty; here they land at different times, so one continuous overtime duty ends up divided into three differently-rated pieces.

The payroll pipeline's running figures after step 4 of 7.
LineTimeHoursDay / nightPayroll treatment
Holiday shift08:00–13:005h00 (incl. 1h00 premium)DayBank Holiday, day
Shift extension13:00–14:301h30 (incl. 1h00 premium)DayOvertime, day
Overtime duty, banked · Bank of Working Hours20:00–20:300h30, Banked (Bank of Working Hours)
Overtime duty, day20:30–22:001h30 (incl. 1h00 premium)DayOvertime, day
Overtime duty, day20:30–23:303h00 (incl. 1h00 premium)DayOvertime, day
Overtime duty, night22:00–23:301h30NightOvertime, night
Overtime duty, night, 0h00, none crosses into night under this boundaryNightOvertime, night (none under this boundary)
Work request01:30–05:003h30 (incl. 1h00 premium)NightOvertime, night
Lines so far6

Step 5 of 7

Compensatory Time Off, mirrored

Every paid line above is mirrored into a matching CTO line, at this employee's configured compensatory rate.

This employee's contract banks overtime as time off rather than paying it out, so every paid line above, the holiday shift, the extension, both overtime portions and the work request, is mirrored into a Compensatory Time Off (CTO) line at the contract's configured rate: one and a half hours banked per hour worked, in this illustration.

The Bank of Working Hours line is not mirrored. It was already banked, not paid, so there is nothing left to compensate a second time.

The payroll pipeline's running figures after step 5 of 7.
LineTimeHoursDay / nightPayroll treatment
Holiday shift08:00–13:005h00 (incl. 1h00 premium)DayBank Holiday, day
Shift extension13:00–14:301h30 (incl. 1h00 premium)DayOvertime, day
Overtime duty, banked · Bank of Working Hours20:00–20:300h30, Banked (Bank of Working Hours)
Overtime duty, day20:30–22:001h30 (incl. 1h00 premium)DayOvertime, day
Overtime duty, day20:30–23:303h00 (incl. 1h00 premium)DayOvertime, day
Overtime duty, night22:00–23:301h30NightOvertime, night
Overtime duty, night, 0h00, none crosses into night under this boundaryNightOvertime, night (none under this boundary)
Work request01:30–05:003h30 (incl. 1h00 premium)NightOvertime, night
Compensatory (CTO) · mirrors Holiday shift (new this step), 7h30DayCompensatory Time Off
Compensatory (CTO) · mirrors Extension (new this step), 2h15DayCompensatory Time Off
Compensatory (CTO) · mirrors Overtime, day (new this step), 2h15DayCompensatory Time Off
Compensatory (CTO) · mirrors Overtime, day (new this step), 4h30DayCompensatory Time Off
Compensatory (CTO) · mirrors Overtime, night (new this step), 2h15NightCompensatory Time Off
Compensatory (CTO) · mirrors Overtime, night (new this step), 0h00NightCompensatory Time Off
Compensatory (CTO) · mirrors Work request (new this step), 5h15NightCompensatory Time Off
Lines so far11

Step 6 of 7

Code resolution

Every line, including the meal allowance the holiday shift triggered, resolves to a numeric code from this employee's own configuration tables.

Six configuration tables, Bank Holidays, Bank of Working Hours, Compensatory Time Off, Meal, Overtime and Preventive, map roster and attendance events to the numeric codes the client's payroll system expects. Each table is assigned per employee, so a colleague on a different collective agreement can see different codes for the same hours.

The meal allowance is not one of the four inputs, and it skips the carve-out, the split and the mirroring: it is evaluated once, directly from the holiday shift overlapping the configured meal-time window, and resolved straight to a code here. The Preventive table is not triggered by this employee's day.

The payroll pipeline's running figures after step 6 of 7.
LineTimeHoursDay / nightPayroll treatment
Holiday shift08:00–13:005h00 (incl. 1h00 premium)DayBank Holiday, day · 4014
Shift extension13:00–14:301h30 (incl. 1h00 premium)DayOvertime, day · 4111
Overtime duty, banked · Bank of Working Hours20:00–20:300h30, Banked (Bank of Working Hours) · 4302
Overtime duty, day20:30–22:001h30 (incl. 1h00 premium)DayOvertime, day · 4120
Overtime duty, day20:30–23:303h00 (incl. 1h00 premium)DayOvertime, day · 4120
Overtime duty, night22:00–23:301h30NightOvertime, night · 4121
Overtime duty, night, 0h00, none crosses into night under this boundaryNightOvertime, night (none under this boundary) · 4121
Work request01:30–05:003h30 (incl. 1h00 premium)NightOvertime, night · 4131
Compensatory (CTO) · mirrors Holiday shift, 7h30DayCompensatory Time Off · 4214
Compensatory (CTO) · mirrors Extension, 2h15DayCompensatory Time Off · 4211
Compensatory (CTO) · mirrors Overtime, day, 2h15DayCompensatory Time Off · 4220
Compensatory (CTO) · mirrors Overtime, day, 4h30DayCompensatory Time Off · 4220
Compensatory (CTO) · mirrors Overtime, night, 2h15NightCompensatory Time Off · 4221
Compensatory (CTO) · mirrors Overtime, night, 0h00NightCompensatory Time Off · 4221
Compensatory (CTO) · mirrors Work request, 5h15NightCompensatory Time Off · 4231
Meal allowance · from Holiday shift (new this step)12:00–13:00 (window), (flat allowance), Meal · 4401
Lines so far12

Step 7 of 7

One export

These lines are what a Draft export previews, for one employee, on one day, inside one month.

verified

A payroll officer can run a Draft export for absences, overtime or prevention at any point in the month, for one unit or the whole organisation, as many times as needed. It recomputes fresh every time and never marks anything reported.

Close of month is the one deliberate, irreversible step: it stamps every contributing record as reported and archives the final file, with a cooldown against re-closing it by accident. Every export, draft or closed, stays archived and can be re-downloaded.

The payroll pipeline's running figures after step 7 of 7.
LineTimeHoursDay / nightPayroll treatment
Holiday shift08:00–13:005h00 (incl. 1h00 premium)DayBank Holiday, day · 4014
Shift extension13:00–14:301h30 (incl. 1h00 premium)DayOvertime, day · 4111
Overtime duty, banked · Bank of Working Hours20:00–20:300h30, Banked (Bank of Working Hours) · 4302
Overtime duty, day20:30–22:001h30 (incl. 1h00 premium)DayOvertime, day · 4120
Overtime duty, day20:30–23:303h00 (incl. 1h00 premium)DayOvertime, day · 4120
Overtime duty, night22:00–23:301h30NightOvertime, night · 4121
Overtime duty, night, 0h00, none crosses into night under this boundaryNightOvertime, night (none under this boundary) · 4121
Work request01:30–05:003h30 (incl. 1h00 premium)NightOvertime, night · 4131
Compensatory (CTO) · mirrors Holiday shift, 7h30DayCompensatory Time Off · 4214
Compensatory (CTO) · mirrors Extension, 2h15DayCompensatory Time Off · 4211
Compensatory (CTO) · mirrors Overtime, day, 2h15DayCompensatory Time Off · 4220
Compensatory (CTO) · mirrors Overtime, day, 4h30DayCompensatory Time Off · 4220
Compensatory (CTO) · mirrors Overtime, night, 2h15NightCompensatory Time Off · 4221
Compensatory (CTO) · mirrors Overtime, night, 0h00NightCompensatory Time Off · 4221
Compensatory (CTO) · mirrors Work request, 5h15NightCompensatory Time Off · 4231
Meal allowance · from Holiday shift12:00–13:00 (window), (flat allowance), Meal · 4401
Lines so far12

Illustrative preview · 3 of 12 lines · payroll export field order

Sample export lines in the payroll export's fixed-width field order.
CompanyEmployee no.CodeLineHoursStart–endCost centreMealCorrection
0011048224014Holiday shift5.0008:00–13:0010042NN
0011048224120Overtime duty, day1.5020:30–22:0010042NN
0011048224401Meal allowance, 12:00–13:0010042YN

12 lines from this one illustrative day feed straight into this month's Draft export, alongside every other employee's. Close of month is the step that locks them.

  • Bank of Working Hours (BWH)A per-employee credit balance accumulated by working extra hours and consumed by approved Work Requests.
  • Compensatory Time Off (CTO)Substitute time-off granted in lieu of payroll for working overtime, on holidays, or on weekly off days.
  • Bank Holiday (BH)Payroll category for a calendar holiday day worked.
  • Meal allowancePer-day meal-allowance amount included in payroll.
  • Close-of-monthThe monthly payroll finalisation event that locks in reported hours and produces the export bundle for your payroll system.

The detail that protects your numbers

The past doesn't move. Only the future does.

This is the single mechanism worth understanding before anything else on this page, because it's the one that keeps a wrong code from ever reaching you in the first place.

A mandatory period is SkyRoster's formal statement that an employee is expected to be physically present between two times, sourced from the tactical roster or from an approved duty that requires attendance tracking. No clocked attendance inside one becomes an unjustified absence; a gap against one is exactly what payroll and compliance reporting are computed from.

Reschedule a shift that hasn't happened yet, and the expected-presence window it generates updates automatically and silently, the way you'd want a live roster to behave. Reschedule the past, or a period that's already in progress, and SkyRoster stops: a supervisor has to explicitly approve or reject the change before it takes effect.

The monthly close

Draft as many times as you like. Close once.

A draft export for absences, overtime, or prevention recomputes from current data every time you run it and never marks anything as reported, so previewing it costs nothing. It also surfaces per-employee configuration problems, an employee with no overtime table assigned, say, as warnings rather than silently dropping them or failing the whole export. Run it, fix what it flags, run it again.

Closing the month is the one deliberate, irreversible step in the whole workflow: it stamps every contributing record as reported, so nothing can be exported twice, and archives the final file. verifiedEvery export, draft or closed, is archived and can be re-downloaded, so nothing you generate is a file you have to guard as your only copy.

When someone disputes a number

Every change to a payroll code table, and every replacement-allowance configuration, is captured in a full audit trail: who changed which value, from what, to what, when. And if a specific figure is challenged, a payroll debug export lays out the exact calculation steps behind it, line by line, for technical staff to walk through with whoever is asking. You are not defending a number from memory.

Honestly

What SkyRoster does not do for her

* Teresa is a fictional persona, not a specific customer or contact. She stands in for the payroll conversation that comes up on most deals.

Bring one month that fought you.

A working session runs your own overtime rules, your own night boundary and one real month of shifts through the export, so you see the codes it produces before you commit to anything.