Skip to content

Add twenty planning and validation docs pages - #2386

Merged
vahid-ahmadi merged 8 commits into
mainfrom
docs-planning-batch
Oct 21, 2026
Merged

vahid-ahmadi merged 8 commits into
mainfrom
docs-planning-batch

Conversation

@vahid-ahmadi

Copy link
Copy Markdown
Collaborator

Combines 20 docs-only PRs into one, so main gets one release instead of twenty (each merge that adds a changelog fragment triggers a version bump and a PyPI release).

Each page was re-checked against current main today and corrected where it had gone stale. The fixes are on each original PR branch; this branch takes their final files unchanged. The diff touches only docs/book/ pages and changelog.d/*.added.md fragments, with no code, parameters or tests.

Original PR Page Issue
#1712 programs/gov/hmrc/firm-vat.md #1320, #1333
#1714 programs/gov/cms/child-maintenance.md #669
#1718 assumptions/mp30k-uk-switch-plan.md #1692
#1719 policy/indirect-tax-effects-plan.md #1114
#1720 assumptions/non-uk-benefit-receipt-plan.md #842
#1721 programs/gov/hmrc/pension-tax-relief.md #704
#1722 programs/gov/hmrc/pensions-comparison-stbm.md #672
#1723 assumptions/uk-pipeline-alignment-plan.md #1621
#1724 validation/child-poverty-tcl.md #1398
#1725 programs/gov/dwp/pip-points-plan.md #1069
#1726 programs/gov/dfe/regional-childcare-plan.md #1008
#1727 policy/future-date-announcements.md #636
#1728 assumptions/takeup-analysis-plan.md #1354
#1729 validation/policyengine-py-household-impact.md #1628
#1730 validation/ubuntu-vs-macos.md #1209
#1731 assumptions/capital-gains-distribution-plan.md #818, #817
#1732 validation/reform-impacts-dashboard-plan.md #806
#1735 programs/gov/ofgem/warm-home-discount-plan.md #502
#1736 programs/gov/dwp/cold-weather-payment-plan.md #435
#1737 programs/gov/dwp/bereavement-support-plan.md #466, #465

The linked issues stay open: these pages are plans and diagnoses, not the implementations.

Checks:

axiom: n/a: documentation only, no rules or parameters change.

🤖 Generated with Claude Code

Combines the docs-only PRs #1712, #1714, #1718-#1732 and #1735-#1737,
each re-checked against current main today. One release instead of twenty.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@juaristi22 juaristi22 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed d50ee85a9664791d6c617135fed999418762f6a9 and all 20 consolidated pages. I found no blocking model defect, but three plans need technical corrections before they guide implementation:

  1. docs/book/assumptions/takeup-analysis-plan.md:95–97: restrict the numerator to eligible units too: sum(would_claim_X * eligible_X * weight) / sum(eligible_X * weight). Willingness-to-claim flags can be true for ineligible units; one eligible unit and two willing units currently gives a documented rate of 200%. Define the zero-denominator case as well.
  2. docs/book/policy/future-date-announcements.md:67–71: restoring 20% on the reversal announcement date does not cancel an existing future 19% row. An executed check through fiscal-year conversion leaves 2023 at 19%. Remove or replace the cancelled row at its original effective date, retaining the announcement history in references/version control.
  3. docs/book/programs/gov/dwp/bereavement-support-plan.md:72–84: a flag for bereavement within the previous 18 months can remain true across consecutive annual periods, so the proposed formula can award the initial lump sum twice. Use a payment/claim-year flag or event date for the single initial payment, and reserve the 18-month information for instalments.

Minor: docs/book/programs/gov/dwp/pip-points-plan.md:163 needs the closing ) on the DWP statistics link.

Validation: all 24 well-formed local links resolve; all six Python blocks parse; the dated-row diagnostic ran; 21 cited/primary sources checked. Captured documentation CI passes. I did not rerun the full documentation build or historical private-dataset benchmarks locally. The 20 older docs PRs can continue to be handled as superseded by this bundle.

The page said the earnings limit applies first, so someone with no
earnings gets no relief, and that the annual allowance caps relief. On
main, relief at source can use the £3,600 basic amount above earnings
(FA 2004 s. 191(7)), the annual allowance does not limit relief, the
taper tests adjusted and threshold income, the charge is sliced across
the rate bands, and relieved contributions reduce adjusted net income.
Mentions #2464 (SSP and SMP in relevant earnings) and #2488 (ATI uplift)
as pending. Figures re-run on policyengine-uk 2.135.6.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Take-up: count only eligible units in the numerator and treat a zero
  denominator as undefined.
- Future-dated announcements: a reversal removes or replaces the
  cancelled row at its own effective date; a new row at the reversal
  date leaves the future row in force.
- BSP: pay the single initial payment from a claim-year input, so an
  18-month bereavement window can't pay it twice; keep the 18 months
  for the instalments.
- PIP points plan: close the DWP statistics link.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vahid-ahmadi

Copy link
Copy Markdown
Collaborator Author

@juaristi22 thanks for the 15 Oct review. All four points are fixed in d7ed288 (docs only).

  1. Take-up rate (takeup-analysis-plan.md): the numerator is now sum(would_claim_X * eligible_X * weight), over the same eligible denominator, with a note on why. A zero denominator is reported as undefined (n/a), not 0%.
  2. Reversed announcements (future-date-announcements.md): the steps now say to remove the cancelled row, or replace its value at its own effective date (20% from 6 April 2023 for the Truss case), and keep the announcement history in references and version control. The page also says why a new row at the reversal date leaves 2023 at 19%.
  3. BSP initial payment (bereavement-support-plan.md): the lump sum now reads a claim-year input, bsp_initial_payment_due, so it is paid once. The 18-month window stays with the instalments in bsp_months_remaining. The page also mentions a single date-of-death input as an alternative. The Phase 3 data notes use the new names.
  4. PIP points plan: closed the DWP statistics link.

The documentation build runs in CI on this push.

🤖 Generated with Claude Code

@juaristi22 juaristi22 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-reviewed d7ed2889a7bc94d69c6ca10aa8f1b1296643293c.

All four points from my 15 October review are resolved: the take-up numerator includes eligibility and defines the zero-denominator case; the cancellation example removes/replaces the original future row; the BSP initial payment uses a one-year event; and the PIP link closes correctly. All 24 relative links resolve and six Python snippets parse. Five current-model pension examples also pass; hosted documentation checks pass.

A4 — Nonblocking: distinguish gross contributions from the pension-provider top-up. In docs/book/programs/gov/hmrc/pension-tax-relief.md:30–33, the new no-earnings example calls £3,600 the basic-rate top-up. A £3,600 gross relief-at-source contribution comprises £2,880 paid by the contributor and a £720 provider claim. The model's £3,600 pension_contributions_relief output is a taxable-income deduction base, not a £3,600 cash top-up. Please use that label, and £720 when describing the provider top-up. HMRC guidance and Finance Act 2004 s.192 support the distinction.

Review status: COMPLETE. No critical findings; one new should-address documentation point.

The no-earnings example called the £3,600 pension_contributions_relief
the basic-rate top-up. It is a deduction from taxable income. Under relief
at source a £3,600 gross contribution is £2,880 paid by the contributor and
£720 claimed by the provider from HMRC (FA 2004 s. 192), which the model
does not represent as a payment.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vahid-ahmadi

Copy link
Copy Markdown
Collaborator Author

@juaristi22 thanks, A4 is fixed in c19ce75.

docs/book/programs/gov/hmrc/pension-tax-relief.md now calls the £3,600 pension_contributions_relief a deduction from taxable income, not a cash top-up. It says a £3,600 gross relief-at-source contribution is £2,880 paid by the contributor plus the £720 the provider claims from HMRC, with a link to FA 2004 s. 192. It also says PolicyEngine does not represent the £720 as a payment, and that with no taxable income the deduction saves no income tax. On current main (340bedb) the example gives pension_contributions_relief of £3,600 for personal_pension_contributions and £0 for employee_pension_contributions, with income tax of £0 in both cases.

I checked the rest of the PR's pages for the same mix-up and found none. The relief-at-source section already describes the provider's claim as the 20% basic-rate portion. The docs build cleanly with jupyter book build --html.

The separate employment plus self-employment wording tied to #2464 will follow once #2464 merges.

🤖 Generated with Claude Code

vahid-ahmadi and others added 2 commits October 20, 2026 09:21
#2464 added employer-paid Statutory Sick Pay and Statutory Maternity Pay
(employment_benefits) to relevant UK earnings for pension tax relief, in
line with FA 2004 s. 189(2) and HMRC PTM044100. Update the pension tax
relief page and the STBM comparison table to match, and note that
Statutory Paternity Pay still waits on #2368.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vahid-ahmadi

Copy link
Copy Markdown
Collaborator Author

@juaristi22 following up on item 4 of your #2464 review: with #2464 merged, the relevant UK earnings wording is updated in 0163a613d (after merging main into this branch in 63edffe74).

This matches relevant_uk_earnings in utils/pensions.py on main.

🤖 Generated with Claude Code

…y-forward

The STBM comparison said the taper uses adjusted net income with no
threshold-income test, that carry-forward is not modelled and that
adjusted net income ignores pension relief. Main now applies both
s. 228ZA tests, takes unused allowance (s. 228A) as an input defaulting
to nil, and deducts relief in adjusted net income. State the remaining
limits (no MPAA, cash-proxy pension input) and re-run the examples on
2.140.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vahid-ahmadi

Copy link
Copy Markdown
Collaborator Author

Updated the annual allowance wording in 6659ebf to match current main and FA 2004:

  • pensions-comparison-stbm.md: the taper now applies both s. 228ZA tests (adjusted income above £260,000 and threshold income above £200,000), carry-forward is the unused_pension_annual_allowance input under s. 228A (default nil), and the personal allowance paragraph now says adjusted_net_income deducts pension relief. Remaining limits stated: no money purchase annual allowance, cash-proxy pension input.
  • pension-tax-relief.md: added carry-forward and the MPAA limit, and re-ran every example on 2.140.0 (all unchanged; £10,000 carried forward removes the £2,000 charge).

🤖 Generated with Claude Code

…plit

SI 2026/148 art 19 keeps the four BSP amounts in SI 2017/410 reg 3
unchanged, so the planned parameters carry no uprating. Note that
#2382 gave War Widow's Pension its own variables and that bsp_reported
keeps CPI uprating only until the datasets move FRS code 9 out (#2381).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vahid-ahmadi

Copy link
Copy Markdown
Collaborator Author

Updated the bereavement support plan page in 1d94053:

🤖 Generated with Claude Code

@juaristi22 juaristi22 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-reviewed 1d9405370acd1a577384fcadec1445c17d0f199e.

A4 is resolved: the pension text now distinguishes £3,600 gross relievable contributions/the model's deduction base from the contributor's £2,880 payment and the provider's £720 recovery, and states that the model does not add a cash top-up.

The SSP/SMP wording matches #2464's relevant-UK-earnings helper. The annual-allowance, carry-forward and default-charge text matches the current functions and override input. The prior five-case diagnostic remains applicable: the relevant relief-function AST and annual-allowance charge files are unchanged; the wrapper change is the documented SSP/SMP addition. No unchanged model suite was rerun for this prose-only delta. Hosted documentation checks pass.

All previous A1–A4/S1 points are resolved. I am approving this commit. Review status: COMPLETE; no open critical findings.

@vahid-ahmadi
vahid-ahmadi added this pull request to the merge queue Oct 21, 2026
Merged via the queue into main with commit 1ef4df9 Oct 21, 2026
9 checks passed
@vahid-ahmadi
vahid-ahmadi deleted the docs-planning-batch branch October 21, 2026 13:17
MaxGhenis added a commit that referenced this pull request Oct 23, 2026
Main already carries this page (#2386) and released its changelog line in 2.144.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 23, 2026
The page reached main through #2386 and its changelog line shipped in
2.143.0, so this drops the released .added fragment and corrects main's
copy:

- Scheme years run 1 April to 31 March (SI 2026/389 reg 3(1)); only the
  rebates are paid in winter.
- Scottish core group per Schedule 1 to SI 2026/488 (adds IS and JSA(IB)
  routes, the UC not-in-work condition, ESA limited capability; ESA has
  no plain disability premium); GOV.UK's summary is narrower.
- The rebate was £120/£130/£135 then £140 under SI 2011/1033 reg 2.
- The high-cost-to-heat test sat in the eligibility statements, and the
  2025-26 list also included income-based JSA and Income Support.
- Most rebates are automatic; the rest need a helpline call by
  26 February 2027.
- esa_income is reported receipt, so take-up doesn't carry through.
- 6.1 million households is the impact assessment's figure; Ofgem's
  figures are on its reports-and-data page.
- Note draft #2504 implements Phase 1 (not on main).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 23, 2026
Main already carries this page (#2386) and released its changelog line in 2.143.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 23, 2026
The page reached main through #2386 and its changelog line shipped in
2.143.0, so this drops the released .added fragment and corrects main's
copy:

- Winter Heating Payment replaced CWP in Scotland from 1 November 2022
  (SI 1988/1724 reg 1A(8), inserted by SI 2022/1018), first paid February
  2023, not "in 2023".
- Add the third and fifth conditions (no care home unless a child under
  5 or CTC disability element; home in England or Wales).
- IS and JSA(IB) premium lists are wider than ESA's; SMI recipients
  treated as on Pension Credit need no further condition (reg 1A(2)(g)).
- GOV.UK summarises; reg 1A has the full test.
- SMI and the pensioner premium have no variables yet.
- Phase 3 must drop CWP's care-home and England-and-Wales conditions
  (WHP also dropped its CTC limb in 2025, SSI 2025/195).
- DWP publishes triggers by weather station, not region; the Met Office
  historic data are monthly for 37 stations.
- WHD covers bill-payers, not everyone on the benefits.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 23, 2026
Main already carries this page (#2386) with d7ed288's and 1d94053's
corrections; the conflict is resolved to main's copy. Its changelog line
shipped in 2.143.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 23, 2026
The page reached main through #2386 (with d7ed288 and 1d94053) and
its changelog line shipped in 2.143.0, so this drops the released .added
fragment and corrects main's copy:

- Microcosm UK is the certified default since policyengine.py 6.10.0;
  its main branch moved FRS code 9 to war_widows_pension_reported
  (microcosm#1333); uk-data still sums codes 6 and 9. The FRS labels
  code 6 "BSP / Widowed Parent's Allowance".
- BSP lump sum only if claimed within 12 months (SI 2017/410 reg 3(2),
  (5)); "up to" 18 payments; higher-rate test per reg 4.
- Remedial Order: Jackson (2020) for BSP; cohabitees bereaved 6 April
  2017 to 29 August 2018 get fewer payments (reg 2(7)-(11)); BSP
  cohabitee eligibility covers deaths from 6 April 2017.
- WPA: deaths before 6 April 2017 except a widow's husband before
  9 April 2001 (s. 39A(1), (1A)); continuation per s. 39A(4)-(5); still
  uprated (£156.65, SI 2026/148 art 18); new claims still arise (3,400
  under the Remedial Order, DWP July 2025).
- Stat-Xplore carries BSP from April 2017; WPA there is unconfirmed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 23, 2026
Main already carries this page (added by #2386); the merge brings the
branch up to date before the page is corrected.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 23, 2026
Main already carries this page (added by #2386); the merge brings the
branch up to date before the page is corrected.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 23, 2026
Main already carries this page (added by #2386); the merge brings the
branch up to date before the page is corrected.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 23, 2026
Main already carries a later, reviewed version of this page (added by #2386
and revised on its branch through 20 October); the conflict resolves to
main's version before the page is corrected.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 23, 2026
Main already carries this page (added by #2386); the merge brings the
branch up to date before the page is corrected.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 23, 2026
Main already carries this page (added by #2386); the merge brings the
branch up to date before the page is corrected.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 23, 2026
Main already carries this page (added by #2386); the merge brings the
branch up to date before the page is corrected.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 23, 2026
Main already carries a later version of this page (added by #2386 and
revised on its branch on 19 October); the conflict resolves to main's
version before the page is corrected.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 23, 2026
Main already carries this page (added by #2386); the merge brings the
branch up to date before the page is corrected.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 23, 2026
Main already carries a later, reviewed version of this page (added by #2386
and revised on its branch through 20 October); the conflict resolves to
main's version before the page is corrected.

Co-Authored-By: Claude Opus 5.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.

2 participants