SAL for hyde

This commit is contained in:
Khalim Conn-Kowlessar 2025-10-13 18:36:35 +01:00
parent 570d463097
commit e5272e2e64
9 changed files with 174 additions and 9 deletions

2
.idea/Model.iml generated
View file

@ -7,7 +7,7 @@
<sourceFolder url="file://$MODULE_DIR$/open_uprn" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/recommendations" isTestSource="false" />
</content>
<orderEntry type="jdk" jdkName="Fastapi-backend" jdkType="Python SDK" />
<orderEntry type="jdk" jdkName="AssetList" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

2
.idea/misc.xml generated
View file

@ -3,7 +3,7 @@
<component name="Black">
<option name="sdkName" value="Python 3.10 (backend)" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Fastapi-backend" project-jdk-type="Python SDK" />
<component name="ProjectRootManager" version="2" project-jdk-name="AssetList" project-jdk-type="Python SDK" />
<component name="PyCharmProfessionalAdvertiser">
<option name="shown" value="true" />
</component>

View file

@ -309,6 +309,17 @@ class AssetList:
'NAME OF SURVEYOR'
]
# Solar non-intrusive fields
NON_INTRUSIVES_SOLAR_COLNAMES = [
'PV, ACCESS ISSUE, SEE NOTES', 'ROOF ORIENTATION',
'AREA (m²) OF ROOF WHERE PV WILL BE SITUATED ', 'SHADING',
'Roof Tiles - CONCRETE/SLATE/ROSEMARY',
'NO. OF PANELS (Typical size of 420W panel is 1mx1.7m and need 30cm all the way around panels)',
'SCAFFOLD REQUIRED? IF YES, ARE THERE ANY SURROUNDING ACCESS ISSUES - PLEASE DESCRIBE',
'IF PANELS ARE GOING ON REAR PLEASE CHECK FOR SPACE FOR SCAFFOLDING - DESCRIBE ANY ISSUES BELOW',
'DATE', 'NAME OF SURVEYOR'
]
NON_INTRUSIVES_ELIGIBILITY_COLUMN = "Eligibility (Red/Yellow/Green)"
OLD_FORMAT_NON_INTRUSIVE_COLNAMES = ['WFT Findings', 'ECO Eligibility']
@ -461,6 +472,8 @@ class AssetList:
self.new_format_non_insturives_present_v2 = 'TILE HUNG' in self.raw_asset_list.columns
self.solar_non_intrusives_present = "AREA (m²) OF ROOF WHERE PV WILL BE SITUATED" in self.raw_asset_list.columns
# Names of columns
self.landlord_property_id = landlord_property_id
self.address1_colname = address1_colname
@ -774,6 +787,9 @@ class AssetList:
if self.new_format_non_insturives_present_v2:
non_intrusive_columns += self.NON_INTRUSIVES_NEW_FORMAT_COLNAMES_V2
if self.solar_non_intrusives_present:
non_intrusive_columns += self.NON_INTRUSIVES_SOLAR_COLNAMES
if self.old_format_non_intrusives_present:
# We check if we have the ECO Eligibility column, which we might not have
non_intrusive_columns = [
@ -946,7 +962,7 @@ class AssetList:
if self.phase:
# We filter on just the properties that have had an inspection
if self.new_format_non_insturives_present_v2:
if self.new_format_non_insturives_present_v2 or self.solar_non_intrusives_present:
self.standardised_asset_list = self.standardised_asset_list[
~self.standardised_asset_list['NAME OF SURVEYOR'].isin(
["YET TO BE SURVEYED", "", None]
@ -1341,10 +1357,10 @@ class AssetList:
# for identifying cavity jobs
if self.non_intrusives_present and not self.old_format_non_intrusives_present:
if self.new_format_non_insturives_present_v2:
if self.new_format_non_insturives_present_v2 or self.solar_non_intrusives_present:
existing_solar_non_intrusives_check = (
self.standardised_asset_list["non-intrusives: ROOF ORIENTATION"].str.strip().isin(
["ALREADY HAS SOLAR PV"]
["ALREADY HAS SOLAR PV", "ALREADY HAS PV"]
)
)
else:

View file

@ -59,6 +59,74 @@ def app():
Property UPRN
"""
# Hyde - solar
data_folder = "/Users/khalimconn-kowlessar/Documents/hestia/Customers/Hyde/Solar"
data_filename = "Domna Property Analysis HYDE (Chichester Removed).xlsx"
sheet_name = "Electric Property Inspections"
postcode_column = 'Postcode'
address1_column = None # Is only patchily populated so we create it
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 = "Address 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 = True
ecosurv_landlords = None
asset_list_header = 0
landlord_block_reference = None
# Hyde cavity
data_folder = "/Users/khalimconn-kowlessar/Documents/hestia/Customers/Hyde/Cavity"
data_filename = "Domna Property Analysis HYDE (Chichester Removed).xlsx"
sheet_name = "Cavity Inspections"
postcode_column = 'Postcode'
address1_column = None # Is only patchily populated so we create it
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 = "Address 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 = True
ecosurv_landlords = None
asset_list_header = 0
landlord_block_reference = None
# CDS - Sept 2025
data_folder = "/Users/khalimconn-kowlessar/Documents/hestia/Customers/CDS/September 2025 Programme"
data_filename = "Founder Estates CDS.xlsx"

View file

@ -439,5 +439,23 @@ BUILT_FORM_MAPPINGS = {
'Chalet - Wheelchair': 'unknown',
'Studio Flat': 'unknown',
'Bungalow - Attached': 'semi-detached',
'ND': 'unknown'
'ND': 'unknown',
'Maisonette: Mid Terrace: Mid Floor': 'mid-floor',
'Maisonette: Semi Detached: Ground Floor': 'semi-detached',
'Maisonette: Enclosed Mid Terrace: Ground Floor': 'enclosed mid-terrace',
'Maisonette: Enclosed End Terrace: Ground Floor': 'end-terrace',
'Maisonette: Mid Terrace: Ground Floor': 'mid-terrace',
'Flat: Semi Detached: Basement': 'semi-detached',
'Maisonette: Semi Detached: Top Floor': 'semi-detached',
'Maisonette: Enclosed Mid Terrace: Mid Floor': 'enclosed mid-terrace',
'Flat: Detached: Basement': 'detached',
'Maisonette: Enclosed Mid Terrace: Top Floor': 'enclosed mid-terrace',
'Maisonette: End Terrace: Top Floor': 'top-floor',
'House: Mid Terrace: Ground Floor': 'ground floor',
'Maisonette: Semi Detached: Mid Floor': 'detached',
'Maisonette: Detached: Mid Floor': 'detached',
'Bungalow: EnclosedMidTerrace': 'enclosed mid-terrace'
}

View file

@ -477,6 +477,23 @@ HEATING_MAPPINGS = {
'Heat networks Heat networks (mains gas)': 'communal heating',
'ND Oil': 'oil fuel',
'Boiler Biofuel': 'boiler - other fuel'
'Boiler Biofuel': 'boiler - other fuel',
'Electric (direct acting) room heaters: Water- or oil-filled radiators': 'room heaters',
'Other: Electric ceiling heating': 'electric ceiling',
'Heat Pump: Electric Heat pumps: Air source heat pump with flow temperature <= 35°C': 'air source heat pump',
'Oil room heaters: Room heater, 2000 or later': 'room heaters',
'Electric Underfloor Heating: In screed above insulation (standard or off peak)': 'electric underfloor',
'Heat Pump: Electric Heat pumps: Air source heat pump in other cases': 'air source heat pump',
'Electric Storage Systems: Old (large volume) storage heaters': 'electric storage heaters',
'Gas (including LPG) room heaters: Condensing gas fire': 'room heaters',
'Solid fuel room heaters: Open fire in grate': 'solid fuel',
'Solid fuel room heaters: Open fire with back boiler (no radiators)': 'solid fuel',
'Community Heating Systems: Community heat pump (RdSAP)': 'communal heating',
'Gas (including LPG) room heaters: Gas fire, open flue, 1980 or later (open fronted), sitting proud of, '
'and sealed to, fireplace opening': 'room heaters',
'Boiler: A rated Regular Boiler, System 2: Boiler: C rated Regular Boiler': 'boiler - other fuel',
'Boiler: G rated Combi': 'gas condensing combi'
}

View file

@ -343,5 +343,23 @@ PROPERTY_MAPPING = {
'bungalow': 'bungalow',
'flat': 'flat',
'FLA': 'flat',
'HOU': 'house'
'HOU': 'house',
'Maisonette: Mid Terrace: Mid Floor': 'maisonette',
'Maisonette: Semi Detached: Ground Floor': 'maisonette',
'Maisonette: Enclosed Mid Terrace: Ground Floor': 'maisonette',
'Maisonette: Enclosed End Terrace: Ground Floor': 'maisonette',
'Maisonette: Mid Terrace: Ground Floor': 'maisonette',
'Flat: Semi Detached: Basement': 'flat',
'Maisonette: Semi Detached: Top Floor': 'maisonette',
'Maisonette: Enclosed Mid Terrace: Mid Floor': 'maisonette',
'Flat: Detached: Basement': 'flat',
'Maisonette: Enclosed Mid Terrace: Top Floor': 'maisonette',
'Maisonette: End Terrace: Top Floor': 'maisonette',
'House: Mid Terrace: Ground Floor': 'house',
'Bungalow: EnclosedMidTerrace': 'bungalow',
'Maisonette: Semi Detached: Mid Floor': 'maisonette',
'Maisonette: Detached: Mid Floor': 'maisonette'
}

View file

@ -275,5 +275,30 @@ ROOF_CONSTRUCTION_MAPPINGS = {
'Pitched (vaulted ceiling) Non-joist': 'pitched unknown insulation',
'ND (inferred) ND (inferred)': 'unknown',
'Flat Non-joist': 'flat insulated',
'Same dwelling above N/A': 'another dwelling above'
'Same dwelling above N/A': 'another dwelling above',
'Flat: As Built, PitchedNormalLoftAccess: Unknown': 'flat unknown insulation',
'PitchedNormalLoftAccess: Unknown, PitchedNormalNoLoftAccess: Unknown': 'pitched unknown insulation',
'PitchedNormalLoftAccess: 400mm+': 'pitched insulated',
'AnotherDwellingAbove: 150mm': 'another dwelling above',
'Flat: 150mm': 'flat insulated',
'AnotherDwellingAbove: 50mm': 'another dwelling above',
'PitchedNormalNoLoftAccess: As Built': 'pitched no access to loft',
'PitchedNormalLoftAccess: 250mm, PitchedWithSlopingCeiling: As Built': 'pitched insulated',
'PitchedNormalLoftAccess: 200mm, PitchedWithSlopingCeiling: As Built': 'pitched insulated',
'PitchedNormalLoftAccess: 350mm': 'pitched insulated',
'PitchedNormalNoLoftAccess: 270mm': 'pitched no access to loft',
'AnotherDwellingAbove: 100mm': 'another dwelling above',
'PitchedWithSlopingCeiling: Unknown': 'piched unknown insulation',
'AnotherDwellingAbove: Unknown, Flat: As Built': 'another dwelling above',
'Flat: Unknown, PitchedNormalLoftAccess: 25mm': 'flat unknown insulation',
'SameDwellingAbove: Unknown': 'another dwelling above',
'Flat: Unknown': 'flat unknown insulation',
'Flat: 50mm, PitchedNormalLoftAccess: 100mm': 'flat insulated',
'Flat: As Built, PitchedNormalLoftAccess: 250mm, PitchedWithSlopingCeiling: As Built': 'flat unknown insulation',
'Flat: As Built, PitchedNormalLoftAccess: 400mm+': 'flat unknown insulation',
'PitchedWithSlopingCeiling: As Built': 'pitched insulated',
'PitchedNormalLoftAccess: As Built': 'pitched unknown insulation',
}

View file

@ -353,4 +353,7 @@ WALL_CONSTRUCTION_MAPPINGS = {
'System built As-built': "uninsulated system built",
'System built Internal': 'insulated system built',
'Cavity: AsBuilt (1976-1982), TimberFrame: AsBuilt': 'cavity unknown insulation',
'Cavity: FilledCavityPlusExternal': 'filled cavity'
}