Skip to content

Commit 715647f

Browse files
authored
Document company-director NI (annual cumulative basis) (#721) (#1715)
#721 reported that there's no input flag for company-director NI. Investigate and document the actual situation: - HMRC's annual-cumulative basis for directors was created to prevent the bonus-timing avoidance route on monthly NI. It applies annual thresholds to year-to-date earnings. - PolicyEngine UK already computes NI as an annual quantity (the Class 1 employee primary formula reads weekly thresholds, converts to monthly via WEEKS_IN_YEAR/MONTHS_IN_YEAR, and the input employment_income is annual). For any user inputting annual earnings, the model's annual NI matches HMRC's director annual cumulative figure — no divergence in microsimulation. - Three edge cases where a dedicated director path would matter (irregular pay timing, mid-year director status changes, multiple employments) are surface-area for the household calculator rather than microsimulation. - Sketch an is_company_director input for any future household calculator work, but conclude no short-term code changes needed. Refs SSCBA 1992 s.8, SI 2001/1004 reg.8, HMRC NIM12000, and CA44.
1 parent dd91d44 commit 715647f

2 files changed

Lines changed: 107 additions & 0 deletions

File tree

changelog.d/721.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
- Document the relationship between PolicyEngine UK's annual-NI computation and HMRC's "annual cumulative" basis for company directors in a new docs page; the current model is functionally correct for annual-income inputs and no code changes are required short-term, with a future `is_company_director` input flag sketched for any household-calculator follow-up.
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
# Company-director NI (annual cumulative basis)
2+
3+
```{note}
4+
PolicyEngine UK applies a **single annual NI calculation** at the
5+
person level. For most users this matches what HMRC charges company
6+
directors at year end. This page explains the relationship between the
7+
director-specific "annual cumulative" basis HMRC uses and PolicyEngine's
8+
current modelling, and describes what would need to change to expose a
9+
dedicated director-specific path. Tracked under
10+
[#721](https://github.com/PolicyEngine/policyengine-uk/issues/721).
11+
```
12+
13+
## What HMRC's annual cumulative basis is
14+
15+
Class 1 NI is normally charged on each *earnings period* (typically a
16+
week or a month) — the employer applies the weekly/monthly thresholds
17+
to that pay period's earnings in isolation. Directors are a special
18+
case because their pay is often irregular: a director might take £0 in
19+
salary for eleven months and then a £200,000 bonus in December. Under
20+
period-by-period NI rules, that pattern would generate massive NI in
21+
the bonus month and almost none in the other eleven, even though the
22+
director's annual income is no different from someone earning a steady
23+
salary.
24+
25+
To prevent this avoidance route, [SSCBA 1992 s.122 and the *Social
26+
Security (Contributions) Regulations 2001*][nim12000] require directors
27+
to use an **annual earnings period** by default:
28+
29+
1. The director's NI is computed on a **cumulative** year-to-date
30+
basis.
31+
2. The annual thresholds (Primary Threshold, Upper Earnings Limit,
32+
Secondary Threshold) are applied to YTD earnings, not to each pay
33+
period's earnings in isolation.
34+
3. NI is charged once YTD earnings cross each threshold, and never
35+
refunded if earnings drop later in the year.
36+
37+
There is also an "**alternative**" method, which approximates the
38+
annual basis with monthly cumulative figures, used for in-year
39+
operational simplicity; the final year-end reconciliation still uses
40+
the annual basis.
41+
42+
## How PolicyEngine currently handles this
43+
44+
PolicyEngine UK already computes NI **annually** for every person:
45+
46+
- The Class 1 employee primary and additional formulas in
47+
[`variables/gov/hmrc/national_insurance/class_1/`](https://github.com/PolicyEngine/policyengine-uk/tree/main/policyengine_uk/variables/gov/hmrc/national_insurance/class_1)
48+
read weekly thresholds from `gov.hmrc.national_insurance.class_1.thresholds`
49+
and convert them to monthly (`× WEEKS_IN_YEAR / MONTHS_IN_YEAR`) before
50+
applying the rate.
51+
- Because the input `employment_income` is annual and is implicitly
52+
spread evenly across months, the **annual NI** the model produces is
53+
identical to the annual cumulative figure a director would owe — for
54+
someone earning the same total over the year, the two methods give
55+
the same answer.
56+
57+
That's why microsimulation results don't depend on director status.
58+
59+
## Where the current model could diverge from HMRC's director rules
60+
61+
Three situations could in principle produce a different answer:
62+
63+
1. **Irregular within-year pay**. If a household-calculator user inputs
64+
an annual `employment_income` of, say, £80,000 but means it as a
65+
single lump-sum payment, PolicyEngine still spreads it across twelve
66+
months — matching the annual cumulative outcome. There is no
67+
surface here for the user to express the pay timing.
68+
2. **Mid-year start or end** of directorship within a tax year. The
69+
pro-rating rules for directors who start or cease being a director
70+
part-way through a year are slightly different from regular
71+
employees — PolicyEngine assumes a full-year period everywhere.
72+
3. **Multiple employments**. A director with two separate company
73+
roles can sometimes have NI calculated separately per employment.
74+
PolicyEngine has a single `employment_income` per person and so
75+
collapses this case.
76+
77+
In practice (1) and (2) only matter for the household-calculator
78+
front-end, not microsimulation. (3) is a wider modelling gap that
79+
applies beyond directors.
80+
81+
## What a dedicated director path would look like
82+
83+
A future PR addressing this fully would add:
84+
85+
- A new boolean input `is_company_director` (Person, year).
86+
- A documentation flag on `ni_class_1_employee_primary` / `_additional`
87+
noting that for directors with `is_company_director == true` the
88+
formula returns the same annual figure as the regular path (rather
89+
than period-by-period NI), confirming the equivalence.
90+
- Optional follow-up: a `company_director_pay_timing` enum so that
91+
household-calculator users who model a director's actual pay pattern
92+
can document their intent, but the resulting NI stays on the annual
93+
basis.
94+
95+
For now PolicyEngine is **functionally correct** for any user whose
96+
input is an annual income — which is the expected interface — and
97+
no code changes are needed in the short term.
98+
99+
## References
100+
101+
- HMRC, [NIM12000 — Class 1 NICs: company directors](https://www.gov.uk/hmrc-internal-manuals/national-insurance-manual/nim12000) — primary internal guidance covering the annual cumulative basis.
102+
- HMRC, [CA44 — National Insurance for company directors](https://www.gov.uk/government/publications/ca44-national-insurance-for-company-directors) — the operational employer guide.
103+
- [The Social Security (Contributions) Regulations 2001 (SI 2001/1004) reg. 8](https://www.legislation.gov.uk/uksi/2001/1004/regulation/8) — the regulation that imposes the annual earnings period.
104+
- [Social Security Contributions and Benefits Act 1992 s. 8](https://www.legislation.gov.uk/ukpga/1992/4/section/8) — primary statute for Class 1 employee NI.
105+
106+
[nim12000]: https://www.gov.uk/hmrc-internal-manuals/national-insurance-manual/nim12000

0 commit comments

Comments
 (0)