Skip to content

Add national council tax reduction core#1769

Merged
MaxGhenis merged 1 commit into
mainfrom
codex/ctr-core-slice-20260607
Jun 7, 2026
Merged

Add national council tax reduction core#1769
MaxGhenis merged 1 commit into
mainfrom
codex/ctr-core-slice-20260607

Conversation

@MaxGhenis

Copy link
Copy Markdown
Collaborator

Summary

  • add a main-based national CTR core for Scotland, Wales, and English pensioner households
  • preserve reported CTB/CTR for unsupported English working-age local schemes
  • expose council_tax_reduction, support detection, simulated benunit CTR, and net council tax flooring
  • add national CTR parameters with primary legislation references

This is a focused extraction from the larger draft CTR framework branch (#1534), leaving local working-age authority schemes for later auditable batches.

Tests

  • uv run policyengine-core test policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction.yaml policyengine_uk/tests/policy/baseline/consumption/council_tax_less_benefit.yaml -c policyengine_uk
  • uv run policyengine-core test policyengine_uk/tests/policy -c policyengine_uk
  • uv run --with pytest --with pytest-cov python -m pytest policyengine_uk/tests/ --cov=policyengine_uk --cov-report=xml --maxfail=1 -v
  • uv run ruff check policyengine_uk/variables/gov/local_authorities/council_tax_reduction policyengine_uk/variables/gov/dwp/council_tax_benefit.py policyengine_uk/variables/household/consumption/council_tax_less_benefit.py policyengine_uk/variables/input/consumption/property/council_tax.py
  • git diff --check

@MaxGhenis MaxGhenis merged commit 8279df5 into main Jun 7, 2026
9 checks passed
@MaxGhenis MaxGhenis deleted the codex/ctr-core-slice-20260607 branch June 7, 2026 00:39
MaxGhenis added a commit to TheAxiomFoundation/axiom-oracles that referenced this pull request Jul 6, 2026
…14/25) (#192)

* docs: refresh CTR coverage-matrix row for PE-UK 2.89.2

council_tax_reduction gained a formula in PolicyEngine-UK 2.89.2
(PolicyEngine/policyengine-uk#1769 national core + #1771 Kingston, both
merged), so matrix row 29 and note 6 — which said the variable "does NOT
exist in PE-UK" and the surface was "PE-blocked" — were stale. Update them
to the resolved state: the England pension-age path
(gov.local_authorities.england.council_tax_reduction.pensioners: max-support
1, capital limit 16000, withdrawal 0.20) is parameter-identical to SI
2012/2885 and matches the rulespec England pension-age award penny-for-penny
on a synthetic grid (verified, PE-UK 2.89.2). Record that CTR does not
inherit the #1794 Housing Benefit earnings-disregard defect (its
applicable-income path applies no earnings disregard) and note the uk-pe
universe pins 2.89.2 where the running EFRS suites pin 2.88.56.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* oracles: add uk-council-tax-reduction comparison (rulespec vs PE-UK 2.89.2)

Adds a case-grid comparison of the encoded England pension-age Council Tax
Reduction scheme (rulespec-uk uk/policies/govuk/council-tax-reduction.yaml,
SI 2012/2885 Schedule 1) against PolicyEngine-UK's council_tax_reduction
(present from 2.89.2). council_tax liability is a supplied input on both
engines, so the schemes are commensurable.

scripts/generate_uk_council_tax_reduction.py runs a synthetic England
pensioner-household grid through PolicyEngine-UK 2.89.2 live and the rulespec
scheme through the axiom rules engine, bridging PE's own applicable amount /
applicable income / non-dependant deductions / council_tax liability / savings
into the rulespec supplied inputs (the uk-pension-credit bridge pattern), and
writes a v2 report. comparisons/uk-council-tax-reduction.yaml registers it;
the uk-council-tax-reduction-grid runner delegates to the generator and reuses
the committed dashboard report on a runner without the PE-UK/engine stack
(mirroring state-income-tax-liability-grid).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* conformance: cover council_tax_reduction on uk-pe (13/25 -> 14/25)

The committed uk-council-tax-reduction report matches all 11 pensioner
case-grid cases to the penny (the 20% taper interior, the 16000 capital
screen, single and couple), residuals sub-0.001 from PolicyEngine float32,
inside the 0.01 tolerance. Bind uk-pe:council_tax_reduction to the
uk-council-tax-reduction suite so the scoreboard scores it covered, moving
PolicyEngine-UK conformance coverage from 13/25 (52%) to 14/25 (56%) and
lifting the ratchet floor to 14. Regenerate the scoreboard, per-policy
detail, burn-down, freshness, and affected-map. Widen the covered-suite
allowlist test to admit the case-grid CTR suite alongside the two EFRS suites.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant