What is this page?
Most staff get their contract filled in automatically from the HR system. This page lists the exceptions — people where something needs to be set manually, either because their situation is unusual or because the HR data alone isn't enough. Each card explains what's different and why.
Contract exceptions (10)
| Hours per week | 19.8 hrs/week |
Employment hours capped at NMW-compliance limit at his current £1,047.50/m (£1,047.50 ÷ £12.21 NMW ÷ 4.33 weeks ≈ 19.8). Office-holder duties beyond 19.8 h/week are unpaid director duties, separately covered by the Director's Service Letter.
| Contract template | Template A |
| Hours per week | 9 hrs/week |
| Minimum hours per shift | 3 hours |
| Notice tier | Standard |
Her existing "casual" contract is structurally a full employment contract with 9 guaranteed hours per week and standard probation/notice clauses. Moving her to Template-B would be a downward variation of existing rights (loss of guaranteed hours, loss of employee status). Kept on A with the guaranteed-hours figure she already has. Confirm with Caledonia at issue.
| Contract template | Template A |
| Minimum hours per shift | 3 hours |
Regular packer with fixed rota shifts per Lily McCarthy (2026-05-25 email). Template-B (zero-hours) would be a downward variation from current contracted-hours casual template. Template-A §4.10 minimum shift payment activated.
| Contract template | Template A |
| Minimum hours per shift | 3 hours |
Evening packer with regular rota. Same rationale as Blue Brown.
| Contract template | Template A |
| Minimum hours per shift | 3 hours |
Regular packer with fixed rota shifts. Same rationale as Blue Brown.
| Contract template | Template A |
| Minimum hours per shift | 3 hours |
Regular packer with fixed rota shifts. Same rationale as Blue Brown.
| Contract template | Template A |
| Minimum hours per shift | 3 hours |
Regular packer with fixed rota shifts. Same rationale as Blue Brown.
| Annualised hours arrangement | Yes |
| Annual contracted hours | 2080 hrs/year |
Currently on annualised-hours driver contract (Drivers Annualised Hours T&Cs doc on file). Template-A §4.8 sub-clause should activate. Confirm annual_hours figure from current contract before issue.
| Notice tier | Senior |
ASSUMED: Sean transitioned from annualised salary (£30,072.37/yr) to hourly (£16/hr + on-call) on 9/2/26 per sheet note "Operations making good progress, rise to £16 going on call". The annualised_hours flag has been REMOVED on that basis — Template-A §4.8 will not emit for him; his contract will use the standard hourly clauses. **Confirm with John or Sean directly at issue**: if he's still on annualised, restore `annualised_hours: true` and replace the 2026-02-09 event with the appropriate annualised step.
Pay history
| Status | TERMINATED |
| End date | 2026-05-31 |
| Job title | Head of Operations (retired) |
| Worker type | DIRECTOR |
Retired. Final pay May 2026. Not present in the BrightHR Employee CSV (silent skip by the seed) — that's now correct given his retirement; no contract refresh needed. Listed here so the absence is documented and the reconcile script can flag him as "in sheet, retired, expected". Pay-history seed will skip him (no DB row to match).
Pay history notes (7)
These staff use the standard contract template but their pay history needed manual entry because the HR system data couldn't be automatically parsed.
Rianne Nairn
Pay-rates sheet stores her salary as the literal string "Annually, 1st Dec to 28962.65 then from 11th Dec 30072.37". Split into two EmployeeWageEvent rows here so the seed doesn't have to parse prose.
Ronin Walker
Pay-rates sheet stores his rate as the literal string "Hourly 10.88 1st to 6th, then 13.44 onwards as 18". Split into two events here keyed to his 18th birthday. **Confirm effective_from dates against his DOB before seeding.**
Kenza Akil
Sheet has a mid-year change; the BrightHR snapshot only carries the later figure. Logging both events here keeps the EmployeeWageEvent timeline accurate.
Connor Linklater
Probation completion drove a rate change; BrightHR snapshot shows the post-probation annual-equivalent figure but the sheet captures the transition properly.
Timothy Forge
Data-quality fix for the pay-rates sheet: his rate cell says "Monthly" but the value (22557.60) is the annual figure. BHR carries it correctly as 1879.80 monthly. Logged here as annual to match BHR; revisit if he's actually on an annualised-hours arrangement (in which case add `annualised_hours: true`).
Rui Barbosa
Sheet shows passed-probation step on the same day as the 2026 raise. Stored as two events so the audit trail is intact.
Rowan Cook
Sheet's "new pay fix" was 13.71 (the across-the-board raise) but a same-day mid-year change took her to 14.39 on confirmation as Baker.