From b80d22ec5e896a00b0a8c1095b72a6de2fbb16ee Mon Sep 17 00:00:00 2001 From: Charlotte Avery Date: Fri, 22 Nov 2024 11:37:30 +0000 Subject: [PATCH] Limit BUS grant cap per annum --- simulation/costs.py | 39 +++++++++++++++++++++++++++++++--- simulation/tests/test_costs.py | 10 ++++++--- 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/simulation/costs.py b/simulation/costs.py index c4d1c4c..9edcbd2 100644 --- a/simulation/costs.py +++ b/simulation/costs.py @@ -155,6 +155,23 @@ # Source: Distribution based on values in https://www.theccc.org.uk/publication/analysis-of-alternative-uk-heat-decarbonisation-pathways/ DECOMMISSIONING_COST_MIN, DECOMMISSIONING_COST_MAX = 500, 2_000 +# Grant cap is set to £250M for 2024-’25, SOURCE: https://www.gov.uk/government/publications/boiler-upgrade-scheme-budget-increase-and-approval-to-over-allocate-vouchers/approval-to-increase-the-budget-and-over-allocate-vouchers-for-the-boiler-upgrade-scheme-november-2024 +# Grant cap is set to £1.54B for 2025-’28, SOURCE: https://www.gov.uk/government/news/families-business-and-industry-to-get-energy-efficiency-support +# Assume limited spend PA of £515M in this period, and further assume this will be extended to 2035 +BOILER_UPGRADE_SCHEME_GRANT_CAP = { + 2024: 250_000_000, + 2025: 765_000_000, + 2026: 1280_000_000, + 2027: 1795_000_000, + 2028: 2310_000_000, + 2029: 2825_000_000, + 2030: 3340_000_000, + 2031: 3855_000_000, + 2032: 4370_000_000, + 2033: 4885_000_000, + 2034: 5400_000_000, +} + def get_unit_and_install_costs( household: "Household", @@ -345,13 +362,28 @@ def estimate_extended_boiler_upgrade_scheme_grant( return 0 model_population_scale = ENGLAND_WALES_HOUSEHOLD_COUNT_2020 / model.household_count - boiler_upgrade_funding_cap_gbp = 5_400_000_000 / model_population_scale - if ( + + if (model.current_datetime.date() < datetime.date(2025, 4, 1)) and ( model.boiler_upgrade_scheme_cumulative_spend_gbp - >= boiler_upgrade_funding_cap_gbp + >= BOILER_UPGRADE_SCHEME_GRANT_CAP[2024] / model_population_scale ): return 0 + for year in BOILER_UPGRADE_SCHEME_GRANT_CAP.keys(): + boiler_upgrade_funding_cap_gbp = ( + BOILER_UPGRADE_SCHEME_GRANT_CAP[year] / model_population_scale + ) + if ( + (model.current_datetime.date() >= datetime.date(year, 4, 1)) + and (model.current_datetime.date() < datetime.date(year + 1, 4, 1)) + and ( + model.boiler_upgrade_scheme_cumulative_spend_gbp + >= boiler_upgrade_funding_cap_gbp + ) + ): + return 0 + + # Date range for BUS scheme 2022-2035 if ( not datetime.date(2022, 4, 1) <= model.current_datetime.date() @@ -359,6 +391,7 @@ def estimate_extended_boiler_upgrade_scheme_grant( ): return 0 + # Grant is £7.5k up to 2028, then reduces to £5k after 2028 if ( not datetime.date(2022, 4, 1) <= model.current_datetime.date() diff --git a/simulation/tests/test_costs.py b/simulation/tests/test_costs.py index 39ca7f4..124f7cb 100644 --- a/simulation/tests/test_costs.py +++ b/simulation/tests/test_costs.py @@ -10,6 +10,7 @@ HeatingSystem, ) from simulation.costs import ( + BOILER_UPGRADE_SCHEME_GRANT_CAP, DECOMMISSIONING_COST_MAX, MEAN_COST_GBP_BOILER_GAS, estimate_boiler_upgrade_scheme_grant, @@ -324,12 +325,13 @@ def test_extended_boiler_upgrade_scheme_grant_is_zero_when_outside_grant_window( assert estimate_extended_boiler_upgrade_scheme_grant(heating_system, model) == 0 @pytest.mark.parametrize("heat_pump", set(HEAT_PUMPS)) + @pytest.mark.parametrize("year", list(range(2024, 2035))) def test_extended_boiler_upgrade_scheme_grant_is_zero_when_grant_cap_exceeded( - self, heat_pump + self, heat_pump, year ): model = model_factory( - start_datetime=datetime.datetime(2024, 1, 1, 0, 0), + start_datetime=datetime.datetime(year, 6, 1, 0, 0), ) num_households = random.randint(1, 5) @@ -338,7 +340,9 @@ def test_extended_boiler_upgrade_scheme_grant_is_zero_when_grant_cap_exceeded( model_population_scale = ( ENGLAND_WALES_HOUSEHOLD_COUNT_2020 / model.household_count ) - boiler_upgrade_scheme_budget_scaled = 5_400_000_000 / model_population_scale + boiler_upgrade_scheme_budget_scaled = ( + BOILER_UPGRADE_SCHEME_GRANT_CAP[year] / model_population_scale + ) model.boiler_upgrade_scheme_cumulative_spend_gbp = ( boiler_upgrade_scheme_budget_scaled * 0.8