You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Three stage paths read policyengine-uk parameters at the frame period (2024, the survey year), where the incumbent did the same:
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.
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%.
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.
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:
uk_runtime/frs_disability.py: categories fromparameters(2024).baseline.gov.dwp, which is the FY 2023-24 rate table (AA higher 101.75), because thebaselineclone is taken before the fiscal-year conversion; flags fromparameters(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 plaingovtree at 2024. Not inspine_swap_signed_differences.json.uk_runtime/spi_income.py::_refresh_disability_derived_inputsrepeats the split for the SPI refresh of the same columns, and divides by the model's 52-week constant wherefrs_disabilitydivides by 365.25/7 (uk-data#476's only real content). The two stages disagree on the categories path by 0.34%.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_expensesis an all-zero input, excluded from parity as zero-share; the stage notes sign it as inert.Fix
year_ruleon parameter-reading operations, asstudent_loansalready 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.frs_disabilityand the SPI refresh.Acceptance
source_stages.jsondeclares the year rule for both stages; the runtime resolves parameters from it, never from the frame period alone..baseline.govunless the declaration says why.Not filed separately
frs_disability.pyalready uses one constant; only the SPI refresh above.frs_release.json,frs_release.pyvalidation,test_uk_frs_release.py:44(spineTIME_PERIOD== releasetime_period), and the tab sha256 check at the root; Root identity: every raw microdata input hash-pinned and referenced to its Chronicle registration #848 registers the pin in Chronicle.🤖 Filed with Claude Code