mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
commiting missing stuff
This commit is contained in:
parent
2a391ec5e3
commit
f43b3edd01
5 changed files with 42 additions and 7 deletions
|
|
@ -25,6 +25,6 @@ class BatterySAPScorer:
|
|||
+ cls.COEF_PV_SIZE * pv_size
|
||||
)
|
||||
|
||||
# Round + clamp to [0,5]
|
||||
sap_uplift = int(np.round(np.clip(sap_uplift, 0, 5)))
|
||||
# Round + clamp to [1,5] - there are only a small number of cases with 0 points
|
||||
sap_uplift = int(np.round(np.clip(sap_uplift, 1, 5)))
|
||||
return sap_uplift
|
||||
|
|
|
|||
|
|
@ -1136,7 +1136,12 @@ async def model_engine(body: PlanTriggerRequest):
|
|||
# This is the uplift score ABS
|
||||
uplift_project_score = optimal_solution["total_uplift_score"]
|
||||
# This is the SAP score associated to a battery
|
||||
battery_sap_score = optimal_solution["battery_sap_uplift"]
|
||||
pv_size = next(
|
||||
(m["array_size"] for m in optimal_solution["items"] if m["type"] == "solar_pv"), 0
|
||||
)
|
||||
battery_sap_score = BatterySAPScorer.score(
|
||||
starting_sap=optimal_solution["ending_sap"], pv_size=pv_size
|
||||
)
|
||||
else:
|
||||
# We optimise and then we determine eligibility for funding, based on the measures selected
|
||||
optimiser = (
|
||||
|
|
|
|||
26
etl/customers/lincs_rural/prepare_data.py
Normal file
26
etl/customers/lincs_rural/prepare_data.py
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
"""
|
||||
Rough script to prepare the data for Lincs Rural project
|
||||
"""
|
||||
import pandas as pd
|
||||
from etl.find_my_epc.RetrieveFindMyEpc import RetrieveFindMyEpc
|
||||
|
||||
data = pd.read_excel(
|
||||
"/Users/khalimconn-kowlessar/Downloads/MASTER LIST EPCS UPDATED November 2025 Domna Homes.xlsx",
|
||||
sheet_name="PROPERTY EPC RATINGS"
|
||||
)
|
||||
|
||||
# We have property RRNs - we need UPRN
|
||||
|
||||
for _, x in data.iterrows():
|
||||
rrn = x["EPC Ref."]
|
||||
|
||||
# Fetch from find my epc
|
||||
retriever = RetrieveFindMyEpc(
|
||||
address="",
|
||||
postcode="",
|
||||
rrn=rrn,
|
||||
address_postal_town="",
|
||||
sap_rating=x["Actual"]
|
||||
)
|
||||
|
||||
find_epc_data = retriever.retrieve_all_find_my_epc_data()
|
||||
|
|
@ -533,18 +533,19 @@ def optimise_with_funding_paths(
|
|||
# For properties that are including batteries, we need to adjust the starting SAP to include the battery SAP uplift
|
||||
# Note: We score on ending sap, as the battery SAP uplift is based on the ending SAP after fabric/heat/solar
|
||||
# upgrades of each package is applied
|
||||
# NB: The battery SAP uplift is used to potentially prioritise packages that include batteries, it does NOT impact
|
||||
# the eventual SAP score at this point. Once the package is included, we'll re-calculate battery SAP score outside
|
||||
# of this. This is because
|
||||
solutions["battery_sap_uplift"] = solutions.apply(
|
||||
lambda x: BatterySAPScorer.score(starting_sap=x["ending_sap"], pv_size=x["array_size"])
|
||||
if x["has_battery"] else 0,
|
||||
axis=1
|
||||
)
|
||||
# We add this on to ending SAP
|
||||
solutions["ending_sap"] = solutions["ending_sap"] + solutions["battery_sap_uplift"]
|
||||
|
||||
solutions["starting_band"] = (solutions["starting_sap"] + solutions["already_installed_gain"]).apply(
|
||||
funding.get_sap_band
|
||||
)
|
||||
solutions["ending_band"] = solutions["ending_sap"].apply(funding.get_sap_band)
|
||||
solutions["ending_band"] = (solutions["ending_sap"] + solutions["battery_sap_uplift"]).apply(funding.get_sap_band)
|
||||
solutions["floor_area_band"] = solutions["floor_area"].apply(funding.get_floor_area_band)
|
||||
solutions["project_score"] = solutions.apply(
|
||||
lambda x: funding._calculate_full_project_abs(
|
||||
|
|
|
|||
|
|
@ -371,11 +371,14 @@ def flatten_recommendations_with_defaults(property_id, recommendations, selected
|
|||
|
||||
final_recommendations = []
|
||||
for recommendations_by_type in recommendations[property_id]:
|
||||
recs_by_type = []
|
||||
for rec in recommendations_by_type:
|
||||
rec_copy = {**rec, "default": rec["recommendation_id"] in selected}
|
||||
if rec_copy.get("has_battery", False):
|
||||
rec_copy["sap_points"] += battery_sap_score
|
||||
final_recommendations.append(rec_copy)
|
||||
recs_by_type.append(rec_copy)
|
||||
|
||||
final_recommendations.append(recs_by_type)
|
||||
|
||||
# Flatten the nested list of lists into a single list
|
||||
return [rec for recommendations_by_type in final_recommendations for rec in recommendations_by_type]
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue