Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Salary sacrifice above the April 2029 NI cap raises adjusted net income, but HMRC says the cap leaves ANI unchanged

Chiusa
#2,173 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 2 giorni

@juaristi22 ci sta già lavorando.

Dal 18/10/2026.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
57/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
python, yaml
Ambito
backend, databases

Direzione di ricerca

Trace salary_sacrifice_returned_to_income, employee_pension_contributions, pension_contributions_relief and adjusted_net_income in the relevant UK policy variables, then find the YAML tests for this case. Check the 2029-30 behavior against the issue’s example: ANI should remain at £97,000 less the broad-base haircut, income tax should match 2028-29 rules, and NI should apply to £8,000 more earnings.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

What happens. From 6 April 2029, gov.hmrc.national_insurance.salary_sacrifice_pension_cap (£2,000) makes pension salary sacrifice above the cap subject to Class 1 NI. policyengine-uk models this by adding the excess (salary_sacrifice_returned_to_income) to employment_income. The same amount is added to employee_pension_contributions, and pension_contributions_relief gives the income tax relief. That relief enters allowances after adjusted_net_income, so ANI rises by the full excess.

What the law says. HMRC's policy paper, Salary sacrifice reform for pension contributions effective from 6 April 2029, says the measure changes Class 1 National Insurance only. It does not change salary sacrifice's effect on adjusted net income, and the paper names Tax-Free Childcare among the schemes unaffected.

Example (policyengine-uk 2.102.3). One parent with £97,000 employment income (employment_income_before_lsr) after £10,000 of pension salary sacrifice, and a two-year-old:

2028-29 2029-30
salary_sacrifice_returned_to_income £0 £8,000
adjusted_net_income £97,000.00 £104,844.80
extended_childcare_entitlement_meets_income_requirements True False
tax_free_childcare_meets_income_requirements True False

So the parent loses the 30 funded hours and Tax-Free Childcare in 2029-30, although under the measure their ANI stays below £100,000. The personal allowance taper and the High Income Child Benefit Charge, which both read ANI, are affected in the same way.

Suggested fix. For income tax the sacrifice stays a sacrifice under the measure; only Class 1 NI changes. So the excess above the cap should enter NI-able earnings only, not employment_income, employee_pension_contributions or pension_contributions_relief. Excluding it from ANI alone is not enough: the model also gives the excess as pension relief, so deducting it again from ANI double-counts it. In a quick test, income tax fell by about £4,200 against the correct figure. A YAML test with the case above should hold ANI at £97,000 (less the model's broad-base haircut) in 2029-30, with income tax unchanged from 2028-29 rules and NI charged on £8,000 more earnings.

Found while costing the removal of the £100,000 childcare limit (PolicyEngine/uk-childcare-100k-threshold#1), which applies this correction locally until it is fixed upstream.

Lingua principale
Python
Stelle
52
Fork
34
Merge medio
4g 1h
PR unite (30g)
358

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di PolicyEngine/policyengine-uk

Tutte le issue di PolicyEngine/policyengine-uk

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.