Add uk-council-tax-reduction comparison; cover CTR on uk-pe (13/25 → 14/25)#192
Merged
Conversation
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>
….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>
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Council Tax Reduction — rulespec-uk vs PolicyEngine-UK 2.89.2
PolicyEngine-UK gained a
council_tax_reductionformula in 2.89.2(PolicyEngine/policyengine-uk#1769 national core + #1771 Kingston, both merged),
unblocking the CTR comparison that the M3 verdict had held on the PE side. This
adds the comparison and covers the program on the
uk-peconformance universe.Pairing
PE-UK's England pension-age path
(
gov.local_authorities.england.council_tax_reduction.pensioners: maximum-support1, capital limit £16,000, withdrawal rate 0.20) is parameter-identical to the
rulespec SI 2012/2885 England pension-age prescribed scheme
(
uk/policies/govuk/council-tax-reduction.yaml).council_taxliability is asupplied/projected input on both sides (PE
council_tax_reduction_maximum_eligible_liability=council_tax; rulespeccouncil_tax_liability_for_year).Comparison
scripts/generate_uk_council_tax_reduction.pyruns a synthetic Englandpensioner-household grid through PolicyEngine-UK 2.89.2 live and the encoded
scheme through the axiom rules engine, bridging PE's own applicable amount,
applicable income, non-dependant deductions,
council_taxliability, andsavingsinto the rulespec supplied inputs (theuk-pension-creditbridgepattern). Both engines are real; no numbers are hand-written.
Result: 11/11 cases match to the penny (100%) — full award below the
applicable amount, the 20% taper interior (three award levels), the £16,000
capital screen at and above the limit, high council tax, single and couple.
Residuals are sub-£0.001 PolicyEngine float32 artifacts, inside the £0.01
tolerance. Zero mismatches → no dispositions file needed.
#1794 interaction
CTR's England pension-age income test does not inherit the #1794 Housing
Benefit earnings-disregard defect:
council_tax_reduction_applicable_incomeapplies no earnings disregard and never calls
housing_benefit_applicable_income_disregard(where #1794 lives). Noted in thecoverage matrix and universe.
Coverage movement
uk-pePolicyEngine-UK conformance: 13/25 (52%) → 14/25 (56%);council_tax_reductionleaves the uncovered list; ratchet floor lifted to 14.Regenerated scoreboard, per-policy detail, burn-down, freshness, affected-map.
Files
scripts/generate_uk_council_tax_reduction.py— two-engine grid generatorcomparisons/uk-council-tax-reduction.yaml+uk-council-tax-reduction-gridrunnerdashboard/public/data/axiom-policyengine-uk-council-tax-reduction.json— committed reportconformance/uk-pe.yaml— CTR bound to the suite; scoreboard/detail/ratchet/burndown regendocs/uk-coverage-matrix.md— row 29 + note 6 refreshed for 2.89.2tests/test_conformance.py— covered-suite allowlist admits the case-grid suiteAll 12 CI gates +
pytest(1231 passed) green locally.🤖 Generated with Claude Code