Skip to content

Commit 6ca74dc

Browse files
authored
Merge pull request #1441 from PolicyEngine/edit-salary-sacrifice3
Edit salary sacrifice implementation
2 parents fdf7fc7 + 349e5e1 commit 6ca74dc

18 files changed

Lines changed: 606 additions & 104 deletions

.gitattributes

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
2+
# Use bd merge for beads JSONL files
3+
.beads/issues.jsonl merge=beads
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# The rate at which ALL workers' employment income is reduced due to the salary sacrifice cap.
2+
# When the salary sacrifice cap is active, employers face increased NI costs on excess contributions.
3+
# They spread these costs across ALL employees (not just affected workers), reducing everyone's pay.
4+
#
5+
# Calculation from blog (https://policyengine.org/uk/research/uk-salary-sacrifice-cap):
6+
# - Total excess above £2,000 cap: £13.8 billion
7+
# - Employer NI on excess (at 15%): £2.1 billion
8+
# - Total UK employment income: ~£1.3 trillion
9+
# - Broad-base haircut rate: £2.1bn / £1.3tn ≈ 0.0016 (0.16%)
10+
#
11+
# This is applied to ALL workers' employment income, not just salary sacrificers.
12+
# The economic logic: employers cannot target only affected workers (who would negotiate
13+
# to recoup the loss), so they spread the cost across all employees.
14+
description: Rate at which all workers' employment income is reduced when salary sacrifice cap is active.
15+
values:
16+
2010-01-01: 0.0016
17+
metadata:
18+
unit: /1
19+
label: Salary sacrifice broad-base haircut rate
20+
reference:
21+
- title: PolicyEngine UK Salary Sacrifice Cap Analysis
22+
href: https://policyengine.org/uk/research/uk-salary-sacrifice-cap

policyengine_uk/simulation.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,10 @@ def __init__(
123123

124124
self.move_values("capital_gains", "capital_gains_before_response")
125125
self.move_values("employment_income", "employment_income_before_lsr")
126+
self.move_values(
127+
"employee_pension_contributions",
128+
"employee_pension_contributions_reported",
129+
)
126130

127131
self.input_variables = self.get_known_variables()
128132

policyengine_uk/tests/microsimulation/reforms_config.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ reforms:
1616
parameters:
1717
gov.hmrc.child_benefit.amount.additional: 25
1818
- name: Reduce Universal Credit taper rate to 20%
19-
expected_impact: -29.3
19+
expected_impact: -29.4
2020
parameters:
2121
gov.dwp.universal_credit.means_test.reduction_rate: 0.2
2222
- name: Raise Class 1 main employee NICs rate to 10%
2323
expected_impact: 13.3
2424
parameters:
2525
gov.hmrc.national_insurance.class_1.rates.employee.main: 0.1
2626
- name: Raise VAT standard rate by 2pp
27-
expected_impact: 20.7
27+
expected_impact: 20.9
2828
parameters:
2929
gov.hmrc.vat.standard_rate: 0.22
3030
- name: Raise additional rate by 3pp

0 commit comments

Comments
 (0)