Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/2361.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- The salary sacrifice National Insurance measures (`salary_sacrifice_pension_ni_employee` and `salary_sacrifice_pension_ni_employer`) now equal the change in the Class 1 liability from the NIC-only salary sacrifice pension excess: an amount crossing the upper earnings limit is split between the main and additional rates, and the thresholds and age conditions apply. No tax total changes.
1 change: 1 addition & 0 deletions changelog.d/2362.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- Corrected units: `shareholding` and `consumption_shareholding` are shares (`/1`, so a month's value is no longer a twelfth of the share), `free_tv_licence_value` is in pounds, and seven true/false variables (`sdlt_liable`, `lbtt_liable`, `benunit_is_rent_liable`, the three Pension Credit eligibility flags and `car_is_ved_exempt`) no longer declare a unit. No yearly value changes.
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
# £250 excess * 8% = £20
salary_sacrifice_pension_ni_employee: (2_250 - 2_000) * 0.08

- name: Employee NI charge at 8% main rate for earner just below UEL
- name: Employee NI excess crosses UEL when pay is just below it
period: 2025
absolute_error_margin: 0.01
input:
Expand All @@ -37,8 +37,8 @@
gov.hmrc.national_insurance.salary_sacrifice_pension_cap: 2_000
gov.contrib.behavioral_responses.salary_sacrifice_broad_base_haircut_rate: 0
output:
# £8,000 excess * 8% = £640
salary_sacrifice_pension_ni_employee: (10_000 - 2_000) * 0.08
# The excess spans both the main and additional rate bands.
salary_sacrifice_pension_ni_employee: (50_269.96 - 50_000) * 0.08 + (58_000 - 50_269.96) * 0.02

- name: Employee NI charge at 2% additional rate for high earner above UEL
period: 2025
Expand Down Expand Up @@ -107,6 +107,124 @@
salary_sacrifice_pension_ni_excess: 1_000
salary_sacrifice_returned_to_income: 0

# The cases below set only the pay (employment_income_before_lsr), so
# ni_class_1_income is pay plus NIC-only excess. The charge is the
# employee Class 1 liability on those earnings less the liability without the
# NIC-only excess. 2025 thresholds: primary threshold 241.73 x 52 = 12,569.96,
# upper earnings limit 966.73 x 52 = 50,269.96.
- name: Amount returned straddles the upper earnings limit
period: 2025
absolute_error_margin: 0.01
input:
employment_income_before_lsr: 48_000
pension_contributions_via_salary_sacrifice: 6_000
gov.hmrc.national_insurance.salary_sacrifice_pension_cap: 2_000
gov.contrib.behavioral_responses.salary_sacrifice_broad_base_haircut_rate: 0
output:
salary_sacrifice_pension_ni_excess: 4_000
employment_income: 48_000
# 8% from 48,000 to the limit, 2% from the limit to 52,000 = 216.20.
# (A single rate on the whole amount would give 4,000 x 2% = 80.)
salary_sacrifice_pension_ni_employee: (50_269.96 - 48_000) * 0.08 + (52_000 - 50_269.96) * 0.02

- name: Amount returned stays below the primary threshold
period: 2025
absolute_error_margin: 0.01
input:
employment_income_before_lsr: 6_000
pension_contributions_via_salary_sacrifice: 5_000
gov.hmrc.national_insurance.salary_sacrifice_pension_cap: 2_000
gov.contrib.behavioral_responses.salary_sacrifice_broad_base_haircut_rate: 0
output:
employment_income: 6_000
# Earnings of 9,000 are below the threshold, so no contributions are due.
ni_class_1_employee: 0
salary_sacrifice_pension_ni_employee: 0

- name: Amount returned straddles the primary threshold
period: 2025
absolute_error_margin: 0.01
input:
employment_income_before_lsr: 11_000
pension_contributions_via_salary_sacrifice: 5_000
gov.hmrc.national_insurance.salary_sacrifice_pension_cap: 2_000
gov.contrib.behavioral_responses.salary_sacrifice_broad_base_haircut_rate: 0
output:
employment_income: 11_000
# Only the part above the threshold is charged: 1,430.04 x 8% = 114.40.
ni_class_1_employee: (14_000 - 12_569.96) * 0.08
salary_sacrifice_pension_ni_employee: (14_000 - 12_569.96) * 0.08

- name: No employee charge over State Pension age
period: 2025
absolute_error_margin: 0.01
input:
age: 70
employment_income_before_lsr: 45_000
pension_contributions_via_salary_sacrifice: 5_000
gov.hmrc.national_insurance.salary_sacrifice_pension_cap: 2_000
gov.contrib.behavioral_responses.salary_sacrifice_broad_base_haircut_rate: 0
output:
salary_sacrifice_pension_ni_excess: 3_000
# Primary contributions end at pensionable age (SSCBA 1992 s.6(3)).
ni_class_1_employee: 0
salary_sacrifice_pension_ni_employee: 0

- name: No employee charge under 16
period: 2025
absolute_error_margin: 0.01
input:
age: 15
employment_income_before_lsr: 20_000
pension_contributions_via_salary_sacrifice: 5_000
gov.hmrc.national_insurance.salary_sacrifice_pension_cap: 2_000
gov.contrib.behavioral_responses.salary_sacrifice_broad_base_haircut_rate: 0
output:
salary_sacrifice_pension_ni_excess: 3_000
ni_class_1_employee: 0
salary_sacrifice_pension_ni_employee: 0

- name: Statutory pay counts towards the upper earnings limit
period: 2025
absolute_error_margin: 0.01
input:
employment_income_before_lsr: 46_000
statutory_sick_pay: 3_000
pension_contributions_via_salary_sacrifice: 5_000
gov.hmrc.national_insurance.salary_sacrifice_pension_cap: 2_000
gov.contrib.behavioral_responses.salary_sacrifice_broad_base_haircut_rate: 0
output:
employment_income: 46_000
ni_class_1_income: 52_000
# Class 1 earnings are 52,000 with the 3,000 excess and 49,000 without.
salary_sacrifice_pension_ni_employee: (50_269.96 - 49_000) * 0.08 + (52_000 - 50_269.96) * 0.02

- name: Worked example in the salary sacrifice cap research post
period: 2025
absolute_error_margin: 0.01
input:
# A 50,000 salary with 5,000 sacrificed leaves pay of 45,000.
employment_income_before_lsr: 45_000
pension_contributions_via_salary_sacrifice: 5_000
gov.hmrc.national_insurance.salary_sacrifice_pension_cap: 2_000
gov.contrib.behavioral_responses.salary_sacrifice_broad_base_haircut_rate: 0
output:
employment_income: 45_000
# Earnings stay below the upper earnings limit: 3,000 x 8% = 240.
salary_sacrifice_pension_ni_employee: 240

- name: Current law in 2029, with the cap and the broad-base haircut
period: 2029
absolute_error_margin: 0.01
input:
employment_income_before_lsr: 48_000
pension_contributions_via_salary_sacrifice: 6_000
output:
salary_sacrifice_pension_ni_excess: 4_000
# Cash earnings exclude the £4,000 NIC-only excess and lose the £76.80 haircut.
employment_income: 47_923.20
salary_sacrifice_pension_ni_employee: (50_269.96 - 47_923.20) * 0.08 + (51_923.20 - 50_269.96) * 0.02

- name: Broad-base haircut reduces all workers employment income
period: 2025
absolute_error_margin: 1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,99 @@
output:
# £1,000 excess * 15% = £150
salary_sacrifice_pension_ni_employer: (3_000 - 2_000) * 0.15
# Full excess enters NIC earnings (no targeted haircut)
# Full excess enters NIC-only earnings (no targeted haircut)
salary_sacrifice_pension_ni_excess: 1_000
salary_sacrifice_returned_to_income: 0

# The cases below set only the pay (employment_income_before_lsr), so
# ni_class_1_income is pay plus NIC-only excess. The charge is the
# employer Class 1 liability on those earnings less the liability without the
# NIC-only excess. 2025 secondary threshold: 96.153846 x 52 = 5,000.
- name: Amount returned stays below the secondary threshold
period: 2025
absolute_error_margin: 0.01
input:
employment_income_before_lsr: 1_500
pension_contributions_via_salary_sacrifice: 5_000
gov.hmrc.national_insurance.salary_sacrifice_pension_cap: 2_000
gov.contrib.behavioral_responses.salary_sacrifice_broad_base_haircut_rate: 0
output:
employment_income: 1_500
ni_class_1_income: 4_500
# Earnings of 4,500 are below the threshold, so no contributions are due.
# (The rate on the whole amount would give 3,000 x 15% = 450.)
ni_class_1_employer: 0
salary_sacrifice_pension_ni_employer: 0

- name: Amount returned straddles the secondary threshold
period: 2025
absolute_error_margin: 0.01
input:
employment_income_before_lsr: 3_000
pension_contributions_via_salary_sacrifice: 5_000
gov.hmrc.national_insurance.salary_sacrifice_pension_cap: 2_000
gov.contrib.behavioral_responses.salary_sacrifice_broad_base_haircut_rate: 0
output:
employment_income: 3_000
ni_class_1_income: 6_000
# Only the part above the threshold is charged: 1,000 x 15% = 150.
ni_class_1_employer: (6_000 - 5_000) * 0.15
salary_sacrifice_pension_ni_employer: (6_000 - 5_000) * 0.15

- name: Employer charge continues over State Pension age
period: 2025
absolute_error_margin: 0.01
input:
age: 70
employment_income_before_lsr: 45_000
pension_contributions_via_salary_sacrifice: 5_000
gov.hmrc.national_insurance.salary_sacrifice_pension_cap: 2_000
gov.contrib.behavioral_responses.salary_sacrifice_broad_base_haircut_rate: 0
output:
# Secondary contributions have no upper age limit (SSCBA 1992 s.6(3)).
salary_sacrifice_pension_ni_employer: 3_000 * 0.15

- name: No employer charge under 16
period: 2025
absolute_error_margin: 0.01
input:
age: 15
employment_income_before_lsr: 20_000
pension_contributions_via_salary_sacrifice: 5_000
gov.hmrc.national_insurance.salary_sacrifice_pension_cap: 2_000
gov.contrib.behavioral_responses.salary_sacrifice_broad_base_haircut_rate: 0
output:
salary_sacrifice_pension_ni_excess: 3_000
ni_class_1_employer: 0
salary_sacrifice_pension_ni_employer: 0

- name: Employer pension contributions count when they are not exempt
period: 2025
absolute_error_margin: 0.01
input:
employment_income_before_lsr: 1_500
employer_pension_contributions: 2_000
pension_contributions_via_salary_sacrifice: 5_000
gov.hmrc.national_insurance.salary_sacrifice_pension_cap: 2_000
gov.contrib.behavioral_responses.salary_sacrifice_broad_base_haircut_rate: 0
gov.contrib.policyengine.employer_ni.exempt_employer_pension_contributions: false
output:
employment_income: 1_500
ni_class_1_income: 4_500
# Charged earnings are 4,500 + 2,000 = 6,500 with the 3,000 excess and
# 3,500 without: (6,500 - 5,000) x 15% = 225.
ni_class_1_employer: (6_500 - 5_000) * 0.15
salary_sacrifice_pension_ni_employer: (6_500 - 5_000) * 0.15

- name: Current law in 2029, with the cap and the broad-base haircut
period: 2029
absolute_error_margin: 0.01
input:
employment_income_before_lsr: 48_000
pension_contributions_via_salary_sacrifice: 6_000
output:
salary_sacrifice_pension_ni_excess: 4_000
employment_income: 47_923.20
ni_class_1_income: 51_923.20
# Earnings stay above the secondary threshold: 4,000 x 15% = 600.
salary_sacrifice_pension_ni_employer: 4_000 * 0.15
Loading
Loading