Skip to content

Pass Class 1A NICs through the employer NI incidence #2752

Open

Description

@juaristi22

#2750 adds Class 1A NICs on the company car and car fuel benefits to ni_employer, but the employer NI incidence covers secondary Class 1 only. employer_cost, baseline_employer_cost and adjusted_employer_cost leave out benefits in kind and the Class 1A on them. So no household bears Class 1A, or a change in it:

  • employer_ni_fixed_employer_cost_change returns zero unless a Class 1 parameter changes, and the cost it holds fixed excludes Class 1A, so pay never absorbs a Class 1A change.
  • employer_ni_response_capital_incidence and employer_ni_response_consumer_incidence spread adjusted_employer_cost - baseline_employer_cost, which never moves with Class 1A.

A reform that changes Class 1A therefore raises gov_tax by more than it lowers household incomes. For example, raising the employer rate by one point raises the Class 1A on a £12,000 company car benefit by £120, and no household's income falls by it. Budget 2026's rise in the 2030-31 appropriate percentages (company_car_tax_rise_2030) does the same for its Class 1A part. HMRC's benefit in kind statistics put Class 1A at about 28% of the revenue from company cars.

#2750 keeps this on purpose, so that the 2030-31 rise is scored statically, as income tax plus Class 1A, comparable with the OBR's costing. It documents it in docs/book/assumptions/employer-ni-incidence.md and docs/book/programs/gov/hmrc/company-car-benefit.md.

What to change

Add Class 1A to the employer cost the incidence variables hold, so it is borne like secondary Class 1:

  • employer_cost reads ni_employer (secondary Class 1 and Class 1A). baseline_employer_cost adds the baseline simulation's ni_class_1a, and adjusted_employer_cost the reformed simulation's.
  • employer_ni_fixed_employer_cost_change solves for pay holding that cost fixed. Class 1A does not depend on pay, so the target is the baseline cost less the change in Class 1A. The early return must also check whether ni_class_1a changed.

With the default full employee incidence, a company car holder's pay would then fall to absorb a rise in Class 1A, and the lower pay would bear less income tax and NICs. For a higher-rate taxpayer above the upper earnings limit, a pay cut of the Class 1A change over 1.15 costs 40% + 2% + 15% of itself, so the revenue from the rise would fall by about half of its Class 1A part. Whether that should be the default for reforms like the 2030-31 rise is part of this issue.

Tests

  • Conservation: adjusted_employer_cost equals baseline_employer_cost for a company car holder with positive reformed pay, under an employer rate reform and under the 2030-31 rise.
  • Agreement: baseline_employer_cost and adjusted_employer_cost equal each simulation's employer_cost, for holders too.
  • With employee incidence 0.5, the remaining Class 1A change reaches the capital and consumer channels in a population run.

Activity

  1. vahid-ahmadi commented on Oct 29, 2026

    @vahid-ahmadi
    Collaborator

    Checked against main at 64cf582 (after #2750). Code reading only; I ran nothing.

    1. The claims hold.

      • employer_cost adds ni_class_1_employer, not ni_employer (variables/contrib/policyengine/employer_ni/employer_cost.py:29-34).
      • baseline_employer_cost and adjusted_employer_cost rebuild secondary Class 1 only (baseline_employer_cost.py:64-67, adjusted_employer_cost.py:46-49), and both incidence channels spread their difference (employer_ni_response_capital_incidence.py:22-24, employer_ni_response_consumer_incidence.py:22-24).
      • ni_class_1a takes the secondary Class 1 rate outside 2022-23 (gov/hmrc/national_insurance/ni_class_1a.py:36-40, SSCBA 1992 s. 10(5)), so a one-point rate rise on a £12,000 benefit is £120 of Class 1A that no household bears.
      • The half-revenue figure checks out: (40% + 2% + 15%) / 1.15 = 49.6% of the Class 1A change.
    2. should: the early return at employer_ni_fixed_employer_cost_change.py:87-89 compares parameters (rate, threshold, pension exemption). The 2030-31 rise changes no NI parameter, only the appropriate percentages, so the new check has to compare ni_class_1a values between the baseline and reformed simulations, not Class 1A parameters. A test with company_car_tax_rise_2030 and no NI reform would pin this.

    3. nit: two docstrings state today's exclusion and will need changing with the fix: employer_cost.py:6-13 and ni_class_1a.py:17-19, as well as the two book pages the issue names.

    Not checked: the 28% Class 1A share from HMRC's benefit in kind statistics.

    🤖 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