# payroll.overtime
Splits the minutes worked in a period across multiplier bands and prices each
band: with bands `[{0, 10000}, {2400, 15000}]` the first 40 hours are paid at
the basic rate and every minute after that at time and a half.
- Time is in whole **minutes**, so 37 hours 20 minutes is 2240, and no
fractional hours ever reach the arithmetic.
- Each line is `hourlyRate x minutes x multiplier / 60`, rounded half-up to the
penny once per line (math.round-div), and the total is the sum of the lines,
so the payslip adds up to what it shows.
- Bands must start at 0 and ascend strictly; a band list that leaves the first
minutes unpriced or overlaps itself is an error rather than a guess.
- Only bands the worker reached produce a line.
Overtime rules come from contracts, not statute, so the bands are the
caller's. Premiums by day (Sunday double time) are separate calls with that
day's minutes. Check the result with payroll.minimum-wage-check: overtime
premiums above the basic rate do not count towards the minimum wage.
## Before you rely on this
**Not professional advice.** This capability calculates payroll figures from published rules. It is a software component for developers, not tax or legal advice. Rules change and every rate here has an effective date. Check that the dates cover your case. Verify results against the official sources listed above, and have a payroll specialist review how you use it, before anyone relies on the output. Provided "as is" under its licence, without warranty.
**Unreviewed.** This capability's implementations agree in every language and pass its published test vectors, which were worked out from the official sources cited. But no qualified payroll specialist has yet checked those vectors, or confirmed that the capability covers the cases it claims. Treat it as a draft. Do not use it for real people, money or decisions without your own expert review. Once a qualified reviewer signs off, this notice is replaced with their name, qualification and the date. Each new version needs fresh sign-off.
1.0.1 marks it unreviewed. The code and the tests are unchanged.