Functional Weave
Code in TypeScript

payroll.holiday-pay-accrual@1.0.1

README.md

4,367 bytes · view raw

# payroll.holiday-pay-accrual

Holiday pay under the Working Time Regulations 1998 (WTR), by the two methods
payroll actually uses.

## `rolled-up`: the 12.07% uplift

For irregular-hours and part-year workers, in leave years beginning on or
after **1 April 2024**, holiday pay may be paid as a **12.07% uplift** on pay
for work done, at the same time as that pay (reg 16A). 12.07% is 5.6 weeks of
leave over the 46.4 weeks a year left for working. The uplift is rounded to
the nearest penny, half up (the regulations do not say; this is the usual
payroll rounding, stated so it is testable). `periodPay` should be every kind
of pay reg 16 counts for a week's pay (reg 16A(9)): basic pay plus regular
overtime, commission and similar. `onDate` is the first day of the worker's
leave year; an earlier leave year is refused, because rolled-up holiday pay
was not lawful then.

## `average-week`: a week's pay over the reference period

Where a week's pay varies, it is the **average over the most recent 52
weeks in which the worker was paid**, counting back from the week before the
leave starts; weeks with no pay are skipped and earlier weeks brought in, but
nothing more than **104 weeks** back counts (WTR reg 16(3)(e) and (f), in force
from 6 April 2020). A worker employed under 52 weeks is averaged over the
weeks they have. The average is rounded to the nearest penny, half up.

`weeklyPay` is one entry per week, **most recent first**, with 0 for a week in
which nothing was paid. Leave out entirely any week the worker spent on sick
or statutory leave (reg 16(3ZE)(b)), and pass only weeks within the
employment. Entries beyond the 104th are ignored. `onDate` is the first day of
the leave (the calculation date); it only selects the rule. Deciding which
payments are part of a week's pay (reg 16(3ZA)) and, for regular-hours workers,
whether a fixed week's pay applies instead, is the caller's.

The 12.07%, 52 and 104 are dated rows in `data/holiday-pay-rules.json`.

Entitlement, rather than pay, is `payroll.holiday-entitlement`.

## Sources

- The Working Time Regulations 1998 (SI 1998/1833) reg 16 (a week's pay, 52-week
  reference period, 104-week limit) and reg 16A (rolled-up holiday pay at 12.07%):
  https://www.legislation.gov.uk/uksi/1998/1833/regulation/16,
  https://www.legislation.gov.uk/uksi/1998/1833/regulation/16A
- The Employment Rights (Employment Particulars and Paid Annual Leave)
  (Amendment) Regulations 2018 (SI 2018/1378), in force 6 April 2020 (12 weeks
  became 52): https://www.legislation.gov.uk/uksi/2018/1378/made
- The Employment Rights (Amendment, Revocation and Transitional Provision)
  Regulations 2023 (SI 2023/1426) (reg 16A, from leave years beginning 1 April 2024):
  https://www.legislation.gov.uk/uksi/2023/1426/made
- GOV.UK, "Holiday pay and entitlement reforms from 1 January 2024":
  https://www.gov.uk/government/publications/simplifying-holiday-entitlement-and-holiday-pay-calculations/holiday-pay-and-entitlement-reforms-from-1-january-2024

## 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.

## Notices

Contains public sector information licensed under the Open Government
Licence v3.0 (https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/).

Legislation: Crown copyright and database right.

1.0.1 marks it unreviewed and adds its attribution notices (NOTICE). The code and the tests are unchanged.