From f20b22187086ca4be5578b8123ae4af5de4b9e7e Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Tue, 28 Oct 2025 17:24:51 +0000 Subject: [PATCH 1/2] fixed fetching of incorrect find my epc data --- asset_list/app.py | 34 ++++++++++++++++++++++++++++ asset_list/mappings/built_form.py | 4 +++- asset_list/mappings/property_type.py | 4 +++- etl/find_my_epc/RetrieveFindMyEpc.py | 29 ++++++++++++++++-------- 4 files changed, 60 insertions(+), 11 deletions(-) diff --git a/asset_list/app.py b/asset_list/app.py index 20cf04f1..bb5cb427 100644 --- a/asset_list/app.py +++ b/asset_list/app.py @@ -59,6 +59,40 @@ def app(): Property UPRN """ + # Stonewater Solar + data_folder = "/Users/khalimconn-kowlessar/Documents/hestia/Customers/Stonewater/October 2025 Solar" + data_filename = "Copy of AP Stonewater Ammended address list - PV AM Amended - Khalim initial review.xlsx" + sheet_name = "Proposed Sheet" + postcode_column = 'Postcode' + address1_column = None + address1_method = "house_number_extraction" + fulladdress_column = "Address" + address_cols_to_concat = [] + missing_postcodes_method = None + landlord_year_built = None + landlord_os_uprn = None + landlord_property_type = "Property Type" + landlord_built_form = "Property Type" + landlord_wall_construction = "Walls" + landlord_roof_construction = "Roofs" + landlord_heating_system = "Heating" + landlord_existing_pv = None + landlord_property_id = "Asset Id" + landlord_sap = "SAP" + outcomes_filename = None + outcomes_sheetname = None + outcomes_postcode = None + outcomes_houseno = None + outcomes_id = None + outcomes_address = None + master_filepaths = [] + master_id_colnames = [] + master_to_asset_list_filepath = None + phase = False + ecosurv_landlords = None + asset_list_header = 0 + landlord_block_reference = None + # data_folder = "/Users/khalimconn-kowlessar/Documents/hestia/Customers/Cambridge/" data_filename = "22.10_Cambridge_west addresses.xlsx" diff --git a/asset_list/mappings/built_form.py b/asset_list/mappings/built_form.py index b02b8810..2556d755 100644 --- a/asset_list/mappings/built_form.py +++ b/asset_list/mappings/built_form.py @@ -456,6 +456,8 @@ BUILT_FORM_MAPPINGS = { 'House: Mid Terrace: Ground Floor': 'ground floor', 'Maisonette: Semi Detached: Mid Floor': 'detached', 'Maisonette: Detached: Mid Floor': 'detached', - 'Bungalow: EnclosedMidTerrace': 'enclosed mid-terrace' + 'Bungalow: EnclosedMidTerrace': 'enclosed mid-terrace', + + 'House: EnclosedMidTerrace': 'enclosed mid-terrace' } diff --git a/asset_list/mappings/property_type.py b/asset_list/mappings/property_type.py index 88ec2934..1c236d96 100644 --- a/asset_list/mappings/property_type.py +++ b/asset_list/mappings/property_type.py @@ -360,6 +360,8 @@ PROPERTY_MAPPING = { 'House: Mid Terrace: Ground Floor': 'house', 'Bungalow: EnclosedMidTerrace': 'bungalow', 'Maisonette: Semi Detached: Mid Floor': 'maisonette', - 'Maisonette: Detached: Mid Floor': 'maisonette' + 'Maisonette: Detached: Mid Floor': 'maisonette', + + 'House: EnclosedMidTerrace': 'house' } diff --git a/etl/find_my_epc/RetrieveFindMyEpc.py b/etl/find_my_epc/RetrieveFindMyEpc.py index 21794284..5bb5e39b 100644 --- a/etl/find_my_epc/RetrieveFindMyEpc.py +++ b/etl/find_my_epc/RetrieveFindMyEpc.py @@ -718,15 +718,26 @@ class RetrieveFindMyEpc: find_epc_data = searcher.retrieve_newest_find_my_epc_data() except Exception as e: logger.error(f"Error retrieving find my epc data: {e}") - if epc["address1"] == epc["address"]: - # There's no benefit of using the same address, so we split on comma - address1 = epc["address"].split(",")[0] - else: - address1 = epc["address1"] - # We attempt with the backup add - searcher = cls(address=address1, postcode=epc["postcode"]) - find_epc_data = searcher.retrieve_newest_find_my_epc_data() - logger.info("Successfully retrieved find my epc data using backup address") + + # We try two backup approaches. The first is to trim the final section off the end of the address + address1 = ",".join(epc["address"].split(",")[:-1]) + try: + searcher = cls(address=address1, postcode=epc["postcode"]) + find_epc_data = searcher.retrieve_newest_find_my_epc_data() + logger.info("Successfully retrieved find my epc data using trimmed address") + except Exception as e2: + logger.error(f"Error retrieving find my epc data using trimmed address: {e2}") + # Attempt final approach + + if epc["address1"] == epc["address"]: + # There's no benefit of using the same address, so we split on comma + address1 = epc["address"].split(",")[0] + else: + address1 = epc["address1"] + # We attempt with the backup add + searcher = cls(address=address1, postcode=epc["postcode"]) + find_epc_data = searcher.retrieve_newest_find_my_epc_data() + logger.info("Successfully retrieved find my epc data using backup address") non_invasive_recommendations = { "uprn": epc["uprn"], From 1c94db54ef5e0020f494943876157528695869a3 Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Tue, 28 Oct 2025 17:56:43 +0000 Subject: [PATCH 2/2] corrected eligibiltiy criteria for EPC E, F, G EWI projects --- recommendations/optimiser/funding_optimiser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recommendations/optimiser/funding_optimiser.py b/recommendations/optimiser/funding_optimiser.py index 73475fc0..8fbb13b2 100644 --- a/recommendations/optimiser/funding_optimiser.py +++ b/recommendations/optimiser/funding_optimiser.py @@ -896,7 +896,7 @@ def make_funding_paths(p, input_measures, housing_type, funding: Funding): # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # 1) The package must include EWI or IWI if the property is private rental sector # We check if we have any EWI or IWI measures available - only for EPC E or below - if p.data["current-energy-rating"] not in ["E", "F", "G"]: + if p.data["current-energy-rating"] in ["E", "F", "G"]: ewi_or_iwi = [{"OR": []}] reference_measures = [] # If we have EWI we add it in