Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
9fd8005
Merge remote-tracking branch 'origin/is-remunerative-work-jsa-conditi…
MaxGhenis Oct 2, 2026
1f68925
Fix disable_simulated_benefits and read one claimant-or-partner award
MaxGhenis Oct 2, 2026
9e88021
Merge remote-tracking branch 'origin/legacy-award-readers-claimant-pa…
MaxGhenis Oct 2, 2026
7cd3c34
Merge remote-tracking branch 'origin/legacy-award-readers-claimant-pa…
MaxGhenis Oct 2, 2026
a418dc0
Test that an entered claimant-or-partner award alone decides its IS limb
MaxGhenis Oct 3, 2026
5eea6d2
Merge origin/main (e89b8abcf, with #2013, #2025, #2027) into disable-…
MaxGhenis Oct 10, 2026
135b384
Answer review r1 and Vahid's review: link, neutralization, roles by year
MaxGhenis Oct 10, 2026
d6d60b0
Merge origin/main (14d02b7f1, with #2038, #2258, #2262) into disable-…
MaxGhenis Oct 11, 2026
0847bbd
Merge origin/main (97ef6e1af, with #2285) into disable-simulated-bene…
MaxGhenis Oct 11, 2026
d10ef15
Keep the inputs a later reform sets through a reset; qualify the docs
MaxGhenis Oct 11, 2026
8b278e3
Merge origin/main (6d89338ab, with #2251, #2270, #2288, #2294) into d…
MaxGhenis Oct 11, 2026
0d53268
Name the inputs a reform replaces; qualify the marginal rate wording
MaxGhenis Oct 11, 2026
7114f11
Merge origin/main (ed7b42f95, with #1925 and #2349) into disable-simu…
MaxGhenis Oct 11, 2026
eeb08e9
Name the inputs a reform stores, by the keys core records
MaxGhenis Oct 11, 2026
5f1c878
Test the neutralized case on a variable added after the build
MaxGhenis Oct 12, 2026
b400cb9
Keep logging a reform's inputs when core replaces the record
MaxGhenis Oct 12, 2026
587c0e7
Merge origin/main (1d3abecef, with #2119, #1905, #2376, #2177) into d…
MaxGhenis Oct 13, 2026
5366cf0
Hold the reform's families on their legacy benefits; qualify derivative
MaxGhenis Oct 13, 2026
6f0148a
Merge origin/main (a98f8f084, with #2047, #2031, #2261, #2076, #2034,…
MaxGhenis Oct 13, 2026
8fbc559
Say the reform holds only the closure, and who it moves (review r7)
MaxGhenis Oct 13, 2026
f069577
Follow #2031's rule for an outside member's income-based JSA under th…
MaxGhenis Oct 13, 2026
339f5db
Read the PAWHP switch from the system applying the reform
MaxGhenis Oct 13, 2026
e6b3367
Merge origin/main (dd6484936, with #2085 and #2399) into disable-simu…
MaxGhenis Oct 14, 2026
25ddfd3
Count a Scottish carer's reported Carer's Allowance once under the re…
MaxGhenis Oct 14, 2026
ab800e8
Merge origin/main (7e10ccd98) into disable-simulated-benefits-scoped-…
MaxGhenis Oct 15, 2026
3890388
Merge origin/main (a94c65df9) into disable-simulated-benefits-scoped-…
MaxGhenis Oct 16, 2026
c5a8d1e
Read each year's country in the carer and winter heating splits
MaxGhenis Oct 16, 2026
d274f35
Merge origin/main (e7610ac52) into disable-simulated-benefits-scoped-…
MaxGhenis Oct 16, 2026
871e46d
Merge origin/main (b4dbaf57a) into disable-simulated-benefits-scoped-…
MaxGhenis Oct 17, 2026
593259f
Read the couple's held ESA and JSA in the benefit cap
MaxGhenis Oct 17, 2026
c2e069d
Say which readers use award_of_couple and when its fallback applies
MaxGhenis Oct 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions changelog.d/disable-simulated-benefits-scoped-awards.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
- A clone or branch that applies a reform now links the tax-benefit system to itself while it does, so a reform that sets inputs, such as `disable_simulated_benefits`, sets the clone's or branch's inputs and never its parent's. A reform applied after the simulation is built (one passed as `reform=`, or applied to a built simulation, clone or branch) now keeps through `reset_calculations` (and, before policyengine-core 3.33.0, `derivative`) every input it stores and leaves in place, however it stores it, including one that replaces an input set since the build; an input set since the build that the reform did not store is still reset, as before, unless the reform stores an input of the same variable (a reset keeps or clears whole variables).
- Under `disable_simulated_benefits`, set the claimant's and partner's income-related ESA and income-based JSA (`claimant_or_partner_esa_income`, `claimant_or_partner_jsa_income`) for each year from the dataset-year reports of whoever is the claimant or partner that year, and set Income Support from their reports alone. The reform holds each benefit at its dataset-year amount while the reported amounts are uprated, so in a later year the stored award matched neither reading of the reports and another member's award was taken to be the claimant's. Another member's own Income Support report is left out of household income, as it is with the reform off, where Income Support is calculated only for the claimant's family.
- Under `disable_simulated_benefits`, no family is moved off its legacy benefits: the reform holds `legacy_benefits_closed` false for its ten years, since it pays every reported legacy award and Universal Credit in every year. So, after the closure of income-based JSA and Income Support from April 2026, an adult outside the couple is still on the income-related ESA the reform pays them, and the closure ends no family's Housing Benefit or tax credit eligibility and prompts no Universal Credit claim. Only the closure is held: the model's other rules still apply, though the reform pays the amounts reported. So a family the model has claim Universal Credit anyway is still not eligible for Housing Benefit or tax credits, and an adult outside the couple is on the income-based JSA they report, as their own claim, only in the years the model has the scheme open (to 2025); the claimant and partner are on the award the reform holds for them.
- Under `disable_simulated_benefits`, count a Scottish carer's reported Carer's Allowance once. The reform set `carers_allowance` from the report in every country and left `carer_support_payment` simulated, so from 2025, when the model pays a carer in Scotland Carer Support Payment in place of Carer's Allowance, a Scottish carer was paid both. Now, as with the winter heating payments, in each year the report is the `carer_support_payment` of a carer living in Scotland that year, from 2025, and their `carers_allowance` before then, and everyone else's `carers_allowance`; neither benefit is simulated beside it. The entitlements before the overlapping-benefit reduction stay the model's for both. This split and the winter heating one read where the household lives in each year, as the model does, when the reform is applied, so a household that moves into or out of Scotland is paid under that year's scheme: before, both read the dataset year's country, so a carer who moved to Scotland was paid Carer's Allowance and lost the Scottish Carer Supplement.
- Neutralizing `esa_income` or `jsa_income` also neutralizes the claimant's and partner's award, so an award entered for them, or set by the reform, no longer outlives the benefit it is part of.
- Read the claimant's and partner's income-related ESA and income-based JSA in the benefit cap (its total of welfare benefits, and the ESA support component exemptions from both the Universal Credit and Housing Benefit caps) from `claimant_or_partner_esa_income` and `claimant_or_partner_jsa_income` wherever the cap's couple is the claimant and partner. Under `disable_simulated_benefits` the cap read an award held for another member of the benefit unit (a non-dependent adult claiming in their own right) as the couple's in every year after the dataset year, so it raised the cap's total and could exempt a claimant with a support component who receives no ESA. An award entered for those variables directly now reaches the cap too, and an award within half a penny of zero is no award there, as elsewhere. A Universal Credit couple that is not the claimant and partner (only with `is_uc_claimant` or `is_uc_assessed_claimant` entered, or more than two members entered as claimant or partner) is still read from `esa_income` and `jsa_income` by value.
- Read the claimant's and partner's income-related ESA and income-based JSA in `income_support_eligible` from `claimant_or_partner_esa_income` and `claimant_or_partner_jsa_income`, as the means tests and passports do, so an award entered for them directly, or set by the reform, is read the same way everywhere. The two variables share one formula, which now treats an award within half a penny of zero as no award, as `income_support_eligible` did, so the float residual left by reports that exactly match the tariff income is no longer the claimant's or partner's award, and no passport or status that reads their award counts it. A member outside the couple is still on their own award as before: it is read from their own report, without that rule. When `esa_income` or `jsa_income` holds the plain total of the reported awards, Income Support now reads the plain total of the claimant's and partner's reports, as the two variables already did; it used to read their award after the capital test.
Loading
Loading