Skip to content

Model the Employment Allowance so ni_employer is net of it (split from #1918) #2459

Open

Description

@juaristi22

Problem

ni_class_1_employer computes rates.employer × max(ni_class_1_income − 52 × secondary_threshold, 0) for every earner over 16, and ni_employer only adds that. The Employment Allowance (EA) is not modelled, so ni_employer, gov_tax, employer_cost and the employer-NI incidence variables are all gross of the EA.

OBR's and HMRC's employer NICs figures are net of it. Employers offset the EA against their secondary Class 1 payments through payroll, so it never reaches receipts.

#1918 lists the EA alongside the under-21 and apprentice zero rates and the veterans and freeport reliefs. This issue takes the EA on its own for two reasons: it is the largest of those gaps from 2025-26, and it is the only one that needs a design decision, because the EA is set per employer and the model has no employer entity.

Size (public figures)

Tax year Maximum EA per employer Cost of the EA (HMRC) Employers claiming
2020-21 £4,000 £2.4bn 1,086,000
2021-22 £4,000 £2.6bn 1,153,000
2022-23 £5,000 £3.1bn 1,171,000
2023-24 £5,000 £3.1bn 1,173,000
2024-25 £5,000 £3.3bn 1,223,000
2025-26 £10,500 £7.4bn (forecast) not yet published

Source: HMRC tax relief statistics, January 2026, section 3.14.

OBR's March 2026 EFO puts Class 1 employer NICs for 2025-26 at £145.3bn. The £7.4bn EA is 5.1% of that. A model with exactly the right pay but no EA would produce about £152.7bn.

Rules

  • What it is. An annual amount per eligible employer, offset against the employer's total secondary Class 1 liability across its payroll. It is claimed through the EPS and covers secondary Class 1 only, not Class 1A or 1B. Any amount unused at the end of the tax year is lost. The legal basis is NICA 2014 ss.1–7 and Sch 1, with the amount in s.1(2)(a).

  • Amounts.

    • £2,000: 2014-15 and 2015-16
    • £3,000: 2016-17 to 2019-20
    • £4,000: 2020-21 and 2021-22
    • £5,000: 2022-23 to 2024-25
    • £10,500: from 2025-26, including 2026-27

    Sources: past years, April 2020 note.

  • £100,000 restriction. From 2020-21 to 2024-25, an employer could not claim if its secondary Class 1 liabilities in the previous tax year, together with those of connected employers, were £100,000 or more. The restriction was removed from 6 April 2025 by NICs (Secondary Class 1 Contributions) Act 2025 s.3, which omits NICA 2014 s.2(4B)-(4G).

  • Exclusions (eligibility guidance):

    • public authorities that are not charities;
    • employers more than half of whose work is of a public nature, unless they are charities;
    • personal, household or domestic employment, except care and support workers;
    • deemed payments under the off-payroll rules (IR35);
    • from 6 April 2016, companies whose director is the only employee paid above the secondary threshold.
  • Connected companies and charities. Only one employer in a connected group can claim, against one PAYE scheme. A business that controls a charity is not connected to it for this purpose.

  • Subsidy limits. De minimis subsidy limits still apply in a few cases, for example Northern Ireland businesses that make or sell goods. This is negligible for modelling.

Modelling options

A household survey cannot tell which workers share an employer, so the EA cannot be attributed exactly. There are three options.

  1. Aggregate scaling. ni_employer = ni_class_1_employer × (1 − s_t), where s_t is the EA's share of gross liability (about 4.8% in 2025-26). The total is right on the base data. The distribution is wrong, because the EA is a much bigger share of liability at small employers. Reforms to the EA can only be scored through a rough rule. Acceptable as a calibration stopgap only.

  2. Per-employee share using firm size as a proxy. For worker i at an eligible employer in size band b:

    ea_i = L_i × min(1, EA_max / (n_b × L̄_b)) × take_up_b

    Here L_i is the worker's gross liability, n_b the number of employees and L̄_b the mean liability in the band. The inputs are size band, public sector and domestic employment, imputed in policyengine-uk-data; the FRS job-level establishment size is to be checked there. Calibrate to HMRC's cost and claimant counts and to the 865k employers paying nothing. This version responds to changes in the EA amount, the £100k rule, the rate and the threshold. Its caveats are that an establishment is not an enterprise, that connected groups can't be seen, and that single-director companies will be under-identified.

  3. Parameterised effective allowance. Model the EA as a share of liability by employer-size band or earnings band, taken from HMRC distributional data. This is transparent and responds to reforms to first order.

Proposal: add the parameters and a person-level employment_allowance variable. Use option 2 when the dataset carries size inputs, and fall back to option 3's parameters when it doesn't, as in the household calculator. Apply the EA after the s.9A and s.9B zero rates, and coordinate with #1918.

Acceptance criteria

  • Parameters for the EA amount from 2014-15 and for the £100,000 restriction from 2020-21 to 2024-25, with legislative references.
  • ni_employer is net of the EA, and the gross statutory charge remains available. total_national_insurance, gov_tax, employer_cost, baseline_employer_cost and employer_ni_fixed_employer_cost_change use the net amount consistently.
  • On the default dataset, the modelled EA is within about 15% of HMRC's £3.1bn (2023-24), £3.3bn (2024-25) and £7.4bn (2025-26 forecast; revisit when the outturn is published).
  • Reform tests:
    • setting the EA to zero raises ni_employer by the modelled EA;
    • raising the EA from £3,000 to £4,000 in 2020-21 costs about £445m, with the right sign and order of magnitude (Budget 2020 Table 2.1);
    • lifting the £100,000 restriction in 2025-26 raises the EA total.
  • Situation tests:
    • liability below the EA gives zero ni_employer;
    • public-authority employers get no EA;
    • domestic employers get no EA, except for care workers.
  • The documentation states that the EA is an approximation.
  • The policyengine-uk-data obr/ni_employer calibration has been re-checked.

Not in scope

  • The under-21 and apprentice zero rates and the veterans and freeport reliefs stay in Employer NI ignores the under-21 and apprentice zero rates and the Employment Allowance #1918.
  • Calendar-year windows. Model year Y means tax year Y-Y+1 (convert_to_fiscal_year_parameters). Datasets that calibrate to a calendar-year blend of OBR fiscal years have to blend the engine's rules themselves. For 2025 this matters, because the 15% rate, the £5,000 threshold and the £10,500 EA all started on 6 April 2025. That is a dataset-side issue, and this one won't fix it.
  • Pay levels in calibrated datasets.

Sources:

Activity

  1. juaristi22 commented on Nov 1, 2026

    @juaristi22
    CollaboratorAuthor

    A note from Microcosm, so this issue and the row that waits on it stay in step.

    Since PolicyEngine/microcosm#1430, Microcosm's obr.ni_employer row binds ni_class_1_employer, not ni_employer. OBR's employer NICs line (EFO table 4.4 row 18) is Class 1 alone, and Class 1A sits in row 21 ("Other NIC"). ni_employer has added ni_class_1a since 2.165.0 (#2750).

    The row is held out of Microcosm's calibration until the Employment Allowance is modelled. Its rebind condition is the allowance netted out of the measure it binds. So if this issue nets the allowance out of ni_employer alone, ni_class_1_employer stays gross, and the row still can't rebind. Netting it out of ni_class_1_employer, or exposing a net Class 1 secondary variable, would meet it.

    🤖 Generated with Claude Code

  2. vahid-ahmadi commented on Nov 6, 2026

    @vahid-ahmadi
    Collaborator

    Review of main at 5c0850d: I read the plan against the employer NI variables, the employer-cost incidence formulas and the PRs merged since the issue was opened (#2505, #2750).

    The headline gap still holds. Neither ni_class_1_employer nor ni_employer has an Employment Allowance term, and the amounts, the £100,000 restriction and its repeal (NICs (Secondary Class 1 Contributions) Act 2025 s.3) all match the sources cited.

    Must

    1. Netting the allowance in ni_employer will not reach employer_cost or the incidence variables. employer_cost reads ni_class_1_employer directly (variables/contrib/policyengine/employer_ni/employer_cost.py:31). baseline_employer_cost.py:64-67, adjusted_employer_cost.py:46-49 and employer_ni_fixed_employer_cost_change.py:74-77 each work out employer NI again from the rate and threshold, as r * max(0, c - t), without reading any variable. The fixed-cost formula also solves that expression in closed form (employer_ni_fixed_employer_cost_change.py:101-102, (c_b + r_r * k_r) / (1 + r_r)).
      • Failure case: a worker whose £2,000 of secondary Class 1 is fully covered by the allowance gets ni_employer of £0, but employer_cost still includes the £2,000.
      • Failure case: a reform to the employer rate is passed through as if no allowance applied, so the fixed-cost wage change is overstated for workers at small employers.
      • Suggested fix: compute the allowance in a net Class 1 secondary variable. María's 1 Nov comment needs that variable for the Microcosm row anyway. Have employer_cost read it, and give the three formulas that recompute employer NI an allowance term. With option 2, the inversion stays linear only if the per-worker share is fixed: r(1 - s_b) above the threshold, with s_b taken from parameters by band. If s_b depends on simulated liabilities, the plan needs to say how the inversion is solved.

    Should

    1. One acceptance test conflicts with ni_employer as it now stands. "Liability below the EA gives zero ni_employer" cannot hold, because ni_employer adds ni_class_1a (variables/gov/hmrc/national_insurance/ni_employer.py:14-17, since Model the company car and car fuel benefits, with Class 1A NICs #2750). The issue's own rules say the allowance does not cover Class 1A. Failure case: £3,000 of secondary Class 1 and £1,000 of Class 1A on a company car should give ni_employer of £1,000, not £0. Suggested fix: run the test on the net Class 1 variable and assert that ni_employer equals Class 1A.

    2. Bring the background and scope up to date now that Employer NI ignores the under-21 and apprentice zero rates and the Employment Allowance #1918 is closed. Zero-rate employer NI for under-21s and apprentices under 25 #2505 closed Employer NI ignores the under-21 and apprentice zero rates and the Employment Allowance #1918 on 25 Oct and added the s.9A and s.9B zero rates (ni_class_1_employer.py, via utils/employer_ni.secondary_class_1_threshold). Three passages in the issue are now out of date:

      "Not in scope" says the veterans and freeport reliefs "stay in Employer NI ignores the under-21 and apprentice zero rates and the Employment Allowance #1918". Zero-rate employer NI for under-21s and apprentices under 25 #2505's body says they remain unmodelled (NICA 2022 ss.1 and 6-7), so they now have no open tracker. Suggested fix: rewrite those passages against current main, and either take the two reliefs in here or name a new issue for them.

    Checked and fine: the 5.1% and £152.7bn arithmetic (7.4 / 145.3; 145.3 + 7.4); the EA amount history from 2014-15 and the single-director exclusion from 6 April 2016; the exclusion of Class 1A and 1B; that unused allowance is lost at the end of the year.

    Item 1 changes the design, so it should be settled before work starts. Items 2 and 3 are edits to the text.

    🤖 Generated with Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions