Skip to content

UK FRS stages evaluate policy parameters at the survey period: declare a policy-year rule (uk-data#475, uk-data#478) #862

Description

@juaristi22

Parent: #665 (workstream E, #145); registered on #796. Incumbent filings: PolicyEngine/policyengine-uk-data#475 and PolicyEngine/policyengine-uk-data#478, fixed on the incumbent side by PolicyEngine/policyengine-uk-data#480; the week-constant point from PolicyEngine/policyengine-uk-data#476.

What

Three stage paths read policyengine-uk parameters at the frame period (2024, the survey year), where the incumbent did the same:

  1. uk_runtime/frs_disability.py: categories from parameters(2024).baseline.gov.dwp, which is the FY 2023-24 rate table (AA higher 101.75), because the baseline clone is taken before the fiscal-year conversion; flags from parameters(2024).gov.dwp (FY 2024-25, 108.55). The docstrings record the split as value-bearing parity with the incumbent; uk-data#475 now identifies it as an incumbent defect. The contemporaneous rates for April 2024 to March 2025 fieldwork are the plain gov tree at 2024. Not in spine_swap_signed_differences.json.
  2. uk_runtime/spi_income.py::_refresh_disability_derived_inputs repeats the split for the SPI refresh of the same columns, and divides by the model's 52-week constant where frs_disability divides by 365.25/7 (uk-data#476's only real content). The two stages disagree on the categories path by 0.34%.
  3. uk_runtime/frs_education_grants.py (frs_education_grant_split): DSA capacity is a zero vector because 2024 < DISABLED_STUDENTS_ALLOWANCE_FIRST_MODELED_YEAR (uk-data#478). disabled_students_allowance_eligible_expenses is an all-zero input, excluded from parity as zero-share; the stage notes sign it as inert.

Fix

  • A declared year_rule on parameter-reading operations, as student_loans already declares (year_rule: calibration_year): observed-amount thresholds (disability categories and flags) at the survey fiscal year's converted tree (gov@2024); modelled capacities (DSA gate, eligibility predictors, maximum) at the calibration year.
  • One week constant across frs_disability and the SPI refresh.
  • Fix-and-sign: re-mint the parity fixture and the signed-differences entries; re-measure disability category and flag shares and the two TCL disability cells (UK spine: child disability under-identification blocks the TCL disability cells (−56.5% / −40.0% across three spine vintages) #808 lineage); record the DSA column's new mass.

Acceptance

  • source_stages.json declares the year rule for both stages; the runtime resolves parameters from it, never from the frame period alone.
  • Category/flag shares and the DSA column measured on a licensed build, with the deltas vs the incumbent signed.
  • No stage reads .baseline.gov unless the declaration says why.

Not filed separately

🤖 Filed with Claude Code

Activity

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