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

Reported Council Tax Reduction is never uprated, so it covers less of the bill each projected year

Chiusa
#2,674 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 2 giorni

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
68/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
python
Ambito
backend, data

Direzione di ricerca

Start with policyengine_uk/data/economic_assumptions.py and the uprate_council_tax logic, then inspect the tests for the two Council Tax Reduction variables. Check how the household council tax uprating factor is applied and how reported reductions are mapped from person to household. Add a test that a reported reduction keeps the same share of its bill across projected years; done means the test passes and the reduction grows with the bill.

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

Descrizione

What happens

council_tax_benefit_reported has no uprating, and the dataset projection in policyengine_uk/data/economic_assumptions.py does not grow it. A family whose Council Tax Reduction scheme the model does not simulate falls back to this reported amount (council_tax_benefit, council_tax_reduction_scheme_supported). These are mostly working-age claims in the English councils the model does not model.

Their reduction therefore stays at its data-year cash value, while uprate_council_tax grows their bill every year. The other benefits the model falls back to a reported amount for, such as housing_benefit_reported, pension_credit_reported and universal_credit_reported, all carry an uprating.

Size

Measured on Microcosm UK 2024-25 (staged build uk-frs-calibration-attempt-20261025T091414Z-a6299504) with policyengine-uk 2.151.0. All figures are for households whose reduction is reported only, not simulated: about 2,800 records, 1.62m households in 2024-25 and 1.70m in 2031-32.

2024-25 2031-32
Mean reported reduction (cash) £492.50 £492.07
Mean council tax bill (cash) £1,250 £1,804
Mean council tax net of the reduction (cash) £757 £1,312
Total reported reduction £0.80bn £0.84bn
Total if each reduction kept its 2024-25 share of the bill £0.80bn £1.21bn

By 2031-32 the reductions fall about £0.37bn a year short of their 2024-25 share of the bill (£0.15bn in 2027-28). The effect on the income distribution is small: about £9 a person (equivalised, 2027-28 prices) in the bottom BHC decile, 0.05% of its income.

The code is the same in 2.132.6 and 2.158.2: the variable has no uprating, and nothing outside the tests and the two CTR variables refers to it.

Suggested fix

Grow a reported reduction with its household's bill. In uprate_council_tax, multiply the person-level council_tax_benefit_reported by its household's factor, so the reduction keeps its share of the bill. Council Tax Reduction schemes work out the award from the council tax liability (a maximum share of the bill, then reduced for income), so an award moves with the bill. Uprating by CPI, as for other benefits, would still leave the reduction behind bills that the OBR forecasts to grow 5.5–6.2% a year in England.

A test could pin the share: a household whose reported reduction is half of its bill in the data year still has half in each projected year.

Reproduce

On any dataset with reported reductions:

from policyengine_uk import Microsimulation

sim = Microsimulation()
for year in (2024, 2027, 2031):
    rep = sim.calculate("council_tax_benefit_reported", year, map_to="household")
    bill = sim.calculate("council_tax", year)
    print(year, round(rep[rep > 0].mean()), round(bill[rep > 0].mean()))

The mean reduction stays at its data-year value while the mean bill grows.

Found while breaking down the bottom decile in the Living standards projections of PolicyEngine/uk-autumn-budget-dashboard-2026. Related: #1669 (closed), which added the simulated schemes this fallback sits beside.

Lingua principale
Python
Stelle
53
Fork
34
Merge medio
4g 54m
PR unite (30g)
381

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.