Skip to content

UC health element reforms can silently score £0: LCWRA amount unreachable in 2026-29, 'rebalancing off' is not pre-Act law, draw gate misses core sims #2427

Closed

Description

@MaxGhenis

What is wrong

Two hazards in the UC rebalancing modifier (scenarios/uc_reform.py) can make a UC health element reform silently score £0 or the wrong sign. Both matter for any Budget-day measure.

  1. A reform to the LCWRA amount has no effect in 2026–29. add_universal_credit_reform overwrites uc_LCWRA_element as an input in 2026–29:

    • existing claimants get the protected amount, from rebalancing.protected_health_element or the UC Act 2025 s. 4 floor;
    • new claimants get rebalancing.new_claimant_health_element.

    So a change to gov.dwp.universal_credit.elements.disabled.amount (the element's own parameter) does nothing in those years. A single LCWRA claimant in 2027, with the amount raised by £100 a month, shows an unchanged uc_LCWRA_element (£5,259.27) and universal_credit (£16,475.33), on 2.130.1 and 2.126.12.

  2. "Rebalancing off" is not pre-Act law. elements.disabled.amount from 2026-04-01 is already £217.26 a month, the new-claimant rate. So rebalancing.active = False pays everyone that rate: the same claimant's element falls from £5,259 to £2,667 a year. A pre-Act counterfactual needs active = False and the 2026+ amount restored to the uprated £423.27 path.

  3. The new-claimant draw gate (L140) uses getattr(sim, "built_from_dataset", False), not Impute UC deductions in constituency and local-authority runs #1905's utils.data_source.built_from_data(). A policyengine-core simulation over the UK system therefore draws nobody as a new claimant. policyengine.py builds with policyengine_uk.Microsimulation(dataset=...), which sets the flag, so this is latent.

Fix

  • For item 1, either:

    • route an elements.disabled.amount change through to both the protected and new-claimant amounts, as a proportional change; or
    • warn when that parameter is reformed for a year the rebalancing modifier fixes.

    Whichever, document in the parameter metadata which parameters a health element reform must change in 2026–29.

  • For item 2, add a documented pre-Act switch, or fix active = False to restore the pre-Act amount path.

  • For item 3, use built_from_data(sim).

  • Add tests:

    • reforming each health-element parameter moves universal_credit for an LCWRA claimant, existing and new, in 2026–29;
    • active = False gives the pre-Act amount.

Activity

  1. juaristi22 commented on Oct 24, 2026

    @juaristi22
    Collaborator

    Closing as implemented by #2434 and #2521. #2434 adds the warning and parameter guidance for an LCWRA amount reform shadowed by active rebalancing, and uses built_from_data for the new-claimant draw. #2521 supplies the remaining inactive health-element counterfactual: the 2025-26 amount uprated by September 2025 CPI and then by the benefit index, through 2032. Current main and the dedicated warning, draw and inactive-counterfactual regressions cover all three items in this issue. The inactive path is the documented CPI-only scenario convention.

    Current implementation: uc_reform.py, test_uc_health_warnings.py.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions