diff --git a/changelog_entry.yaml b/changelog_entry.yaml index e69de29bb..ed1216bec 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -0,0 +1,4 @@ +- bump: minor + changes: + added: + - rail_usage variable derived from rail_subsidy_spending / fare_index at survey year, enabling fare reforms to modify prices independently of usage quantity diff --git a/policyengine_uk_data/datasets/imputations/services/services.py b/policyengine_uk_data/datasets/imputations/services/services.py index 6d76525eb..22717e076 100644 --- a/policyengine_uk_data/datasets/imputations/services/services.py +++ b/policyengine_uk_data/datasets/imputations/services/services.py @@ -6,9 +6,31 @@ """ from policyengine_uk.data import UKSingleYearDataset +from policyengine_uk.system import system from .nhs import impute_nhs_usage from .etb import impute_public_services, create_efrs_input_dataset +# ETB survey year (most recent year in ETB data) +ETB_SURVEY_YEAR = 2021 + +# Fallback fare index for 2021 if parameter not yet available in policyengine-uk +# This is the cumulative fare index from base year 2020 (+1.0% from 2020) +FALLBACK_FARE_INDEX_2021 = 1.010 + + +def get_fare_index_survey_year() -> float: + """ + Get the rail fare index for the ETB survey year. + + Attempts to read from policyengine-uk parameters, falls back to + hardcoded value if parameter not yet available. + """ + try: + return system.parameters.gov.dft.rail.fare_index(ETB_SURVEY_YEAR) + except AttributeError: + # Parameter not yet available in policyengine-uk + return FALLBACK_FARE_INDEX_2021 + def impute_services( dataset: UKSingleYearDataset, @@ -44,6 +66,14 @@ def impute_services( .values ) + # Derive rail_usage (quantity at base year prices) from rail_subsidy_spending + # rail_usage = rail_subsidy_spending / fare_index at survey year + # This allows reforms to modify fare_index independently of usage quantity + fare_index_survey_year = get_fare_index_survey_year() + dataset.household["rail_usage"] = ( + dataset.household["rail_subsidy_spending"] / fare_index_survey_year + ) + visit_variables = [ "a_and_e_visits", "admitted_patient_visits", diff --git a/uv.lock b/uv.lock index e331e8442..f8fd52f58 100644 --- a/uv.lock +++ b/uv.lock @@ -1409,7 +1409,7 @@ wheels = [ [[package]] name = "policyengine-uk-data" -version = "1.21.0" +version = "1.23.3" source = { editable = "." } dependencies = [ { name = "black" },