mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
256 lines
9.4 KiB
Python
256 lines
9.4 KiB
Python
import pandas as pd
|
|
from utils.s3 import save_csv_to_s3
|
|
|
|
|
|
def app():
|
|
# This is the payload to be used to extract the energy assessment data from s3 and upload it to the database,
|
|
# as well as produce links to each of the uploaded documents.
|
|
|
|
portfolio_id = 101
|
|
|
|
body = {
|
|
"portfolio_id": portfolio_id,
|
|
"surveyor": "JAFFERSONS ENERGY CONSULTANTS",
|
|
"project_code": "VEC001",
|
|
}
|
|
# 5 Grove Mansions
|
|
# These are the recommendations based on the on-site survey of the property.
|
|
non_intrusive_recommendations = [
|
|
{
|
|
# 2 Grove Mansions
|
|
"uprn": 121016121,
|
|
"recommendations": [
|
|
{
|
|
"type": "draught_proofing",
|
|
"cost": 100,
|
|
"survey": True,
|
|
"sap_points": 1
|
|
},
|
|
{
|
|
"type": "mixed_glazing", "cost": 14632, "survey": True,
|
|
"description": "Install double glazing to north facing windows and secondary glazing to the "
|
|
"remaining windows at the front of the building",
|
|
"sap_points": 3
|
|
},
|
|
{"type": "trickle_vents", "cost": 1000, "survey": True},
|
|
{"type": "suspended_floor_insulation", "cost": None, "survey": True, "sap_points": 2},
|
|
{"type": "internal_wall_insulation", "cost": None, "survey": True, "sap_points": 5},
|
|
]
|
|
},
|
|
{
|
|
# 8 Grove Mansions
|
|
"uprn": 10024087855,
|
|
"recommendations": [
|
|
{"type": "draught_proofing", "cost": 100, "survey": True, "sap_points": 2},
|
|
{
|
|
"type": "mixed_glazing", "cost": 7814, "survey": True,
|
|
"description": "Install double glazing to north facing windows and secondary glazing to the "
|
|
"remaining windows at the front of the building",
|
|
"sap_points": 4
|
|
},
|
|
{"type": "trickle_vents", "cost": 700, "survey": True},
|
|
{"type": "low_energy_lighting", "cost": None, "survey": True, "sap_points": 0},
|
|
{"type": "internal_wall_insulation", "cost": None, "survey": True, 'sap_points': 5},
|
|
]
|
|
},
|
|
{
|
|
# 9 Grove Mansions
|
|
"uprn": 121016128,
|
|
"recommendations": [
|
|
{"type": "draught_proofing", "cost": 100, "survey": True, "sap_points": 1},
|
|
{
|
|
"type": "mixed_glazing", "cost": 9740, "survey": True,
|
|
"description": "Install double glazing to north facing windows and secondary glazing to the "
|
|
"remaining windows at the front of the building",
|
|
"sap_points": 3
|
|
},
|
|
{"type": "trickle_vents", "cost": 1000, "survey": True},
|
|
{"type": "low_energy_lighting", "cost": None, "survey": True, "sap_points": 1},
|
|
{"type": "suspended_floor_insulation", "cost": None, "sap_points": 1},
|
|
{"type": "internal_wall_insulation", "cost": None, "survey": True, "sap_points": 6},
|
|
]
|
|
},
|
|
{
|
|
# 5 Grove Mansions
|
|
"uprn": 121016124,
|
|
"recommendations": [
|
|
{
|
|
"type": "mixed_glazing", "cost": 12662, "survey": True,
|
|
"description": "Install double glazing to north facing windows and secondary glazing to the "
|
|
"remaining windows at the front of the building",
|
|
"sap_points": 5
|
|
},
|
|
{"type": "trickle_vents", "cost": 1300, "survey": True},
|
|
{"type": "low_energy_lighting", "cost": None, "survey": True, "sap_points": 2},
|
|
{"type": "internal_wall_insulation", "cost": None, "survey": True, "sap_points": 8},
|
|
]
|
|
},
|
|
{
|
|
# 14 Grove Mansions
|
|
"uprn": 121016117,
|
|
"recommendations": [
|
|
{"type": "draught_proofing", "cost": 100, "survey": True, "sap_points": 1},
|
|
{
|
|
"type": "mixed_glazing", "cost": 10736, "survey": True,
|
|
"description": "Install double glazing to north facing windows and secondary glazing to the "
|
|
"remaining windows at the front of the building",
|
|
"sap_points": 4
|
|
},
|
|
{"type": "trickle_vents", "cost": 1000, "survey": True},
|
|
{"type": "low_energy_lighting", "cost": None, "survey": True, "sap_points": 1},
|
|
{"type": "internal_wall_insulation", "cost": None, "survey": True, "sap_points": 6},
|
|
]
|
|
},
|
|
{
|
|
# 19 Grove Mansions
|
|
"uprn": 10024087902,
|
|
"recommendations": [
|
|
{"type": "low_energy_lighting", "cost": None, "survey": True, "sap_points": 0},
|
|
{"type": "internal_wall_insulation", "cost": None, "survey": True, "sap_points": 2},
|
|
{"type": "room_roof_insulation", "cost": None, "survey": True, "sap_points": 16},
|
|
]
|
|
},
|
|
]
|
|
|
|
asset_list = [
|
|
# These are properties where we've done a survey
|
|
{
|
|
"uprn": 121016121, "address": "", "postcode": ""
|
|
},
|
|
{
|
|
"uprn": 10024087855, "address": "", "postcode": ""
|
|
},
|
|
{
|
|
"uprn": 121016128, "address": "", "postcode": ""
|
|
},
|
|
{
|
|
"uprn": 121016124, "address": "", "postcode": ""
|
|
},
|
|
{
|
|
"uprn": 121016117, "address": "", "postcode": ""
|
|
},
|
|
{
|
|
"uprn": 10024087902, "address": "", "postcode": ""
|
|
},
|
|
# These properties we just model with default data
|
|
# Flat 1
|
|
{
|
|
"uprn": 121016113, "address": "", "postcode": ""
|
|
},
|
|
# Flat 10
|
|
{
|
|
"uprn": 121016114, "address": "", "postcode": ""
|
|
},
|
|
# Flat 11
|
|
{
|
|
"uprn": 121016115, "address": "", "postcode": ""
|
|
},
|
|
# Flat 12
|
|
{
|
|
"uprn": 121016116, "address": "", "postcode": ""
|
|
},
|
|
# Flat 15
|
|
{
|
|
"uprn": 121016118, "address": "", "postcode": ""
|
|
},
|
|
# Flat 16
|
|
{
|
|
"uprn": 121016119, "address": "", "postcode": ""
|
|
},
|
|
# Flat 17
|
|
{
|
|
"address": "Flat 17 Grove Mansions", "postcode": "SW4 9SL"
|
|
},
|
|
# Flat 18
|
|
{
|
|
"uprn": 10024087901, "address": "", "postcode": ""
|
|
},
|
|
# Flat 3
|
|
{
|
|
"uprn": 121016122, "address": "", "postcode": ""
|
|
},
|
|
# Flat 4
|
|
{
|
|
"uprn": 121016123, "address": "", "postcode": ""
|
|
},
|
|
# Flat 6
|
|
{
|
|
"uprn": 121016125, "address": "", "postcode": ""
|
|
},
|
|
# Flat 7
|
|
{
|
|
"uprn": 10024087854, "address": "", "postcode": ""
|
|
},
|
|
# Flat 7A
|
|
{
|
|
"uprn": 10024087840, "address": "", "postcode": ""
|
|
},
|
|
# Flat 8A
|
|
{
|
|
"uprn": 10024087841, "address": "", "postcode": ""
|
|
},
|
|
]
|
|
asset_list = pd.DataFrame(asset_list)
|
|
|
|
filename = f"{8}/{portfolio_id}/asset_list.csv"
|
|
save_csv_to_s3(
|
|
dataframe=asset_list,
|
|
bucket_name="retrofit-plan-inputs-dev",
|
|
file_name=filename
|
|
)
|
|
|
|
# TODO Create asset list
|
|
# TODO: Store asset list & non_intrusive_recommendations
|
|
# Store non-invasive recommendations in S3
|
|
non_invasive_recommendations_filename = f"{8}/{portfolio_id}/non_invasive_recommendations.json"
|
|
save_csv_to_s3(
|
|
dataframe=pd.DataFrame(non_intrusive_recommendations),
|
|
bucket_name="retrofit-plan-inputs-dev",
|
|
file_name=non_invasive_recommendations_filename
|
|
)
|
|
|
|
# This is the first scenario which includes the first batch of recommendations
|
|
body1 = {
|
|
"portfolio_id": str(portfolio_id),
|
|
"housing_type": "Private",
|
|
"goal": "Increasing EPC",
|
|
"goal_value": "A",
|
|
"trigger_file_path": filename,
|
|
"already_installed_file_path": "",
|
|
"patches_file_path": "",
|
|
"non_invasive_recommendations_file_path": non_invasive_recommendations_filename,
|
|
"inclusions": [
|
|
"draught_proofing", "mixed_glazing", "trickle_vents", "low_energy_lighting", "windows"
|
|
],
|
|
"budget": None,
|
|
"scenario_name": "Quick wins - do now while tenanted",
|
|
"multi_plan": True,
|
|
}
|
|
|
|
# This is the second scenario which includes the second batch of recommendations
|
|
body2 = {
|
|
"portfolio_id": str(portfolio_id),
|
|
"housing_type": "Private",
|
|
"goal": "Increasing EPC",
|
|
"goal_value": "A",
|
|
"trigger_file_path": filename,
|
|
"already_installed_file_path": "",
|
|
"patches_file_path": "",
|
|
"non_invasive_recommendations_file_path": non_invasive_recommendations_filename,
|
|
"inclusions": [
|
|
"draught_proofing",
|
|
"mixed_glazing",
|
|
"trickle_vents",
|
|
"low_energy_lighting",
|
|
"suspended_floor_insulation",
|
|
"internal_wall_insulation",
|
|
"room_roof_insulation",
|
|
"windows"
|
|
],
|
|
"budget": None,
|
|
"scenario_name": "Do when void",
|
|
"multi_plan": True,
|
|
}
|
|
|
|
print(body1)
|
|
print(body2)
|