mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-07-12 13:29:04 +00:00
ASHP sizing selects the smallest pump meeting the dwelling's design heat loss 🟥
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
fad2264def
commit
b37be6327c
2 changed files with 41 additions and 1 deletions
|
|
@ -137,6 +137,31 @@ _ASHP_OVERLAY = HeatingOverlay(
|
|||
)
|
||||
|
||||
|
||||
# ASHP sizing ladder (ADR-0049): the Vaillant aroTHERM plus "& AI VIH RW" family,
|
||||
# one representative PCDB Table 362 record per nominal size, ascending by rated
|
||||
# max output (kW). The pump is sized to the dwelling's design heat loss so SAP
|
||||
# 10.2 Appendix N reads the heat-pump efficiency near its PSR peak (~1.0), rather
|
||||
# than a single fixed unit that is grossly undersized on high-heat-loss dwellings
|
||||
# — where the PSR collapses and the ASHP scores at/below the resistance baseline.
|
||||
# 110257 (the 5 kW rung) is the previously-fixed anchor, validated against the
|
||||
# relodged after-cert.
|
||||
_ASHP_SIZING_LADDER: tuple[tuple[float, int], ...] = (
|
||||
(3.76, 110249), # aroTHERM plus 3.5 kW
|
||||
(4.37, 110257), # aroTHERM plus 5 kW
|
||||
(6.40, 110265), # aroTHERM plus 7 kW
|
||||
(7.93, 110273), # aroTHERM plus 10 kW
|
||||
(11.48, 110281), # aroTHERM plus 12 kW
|
||||
)
|
||||
|
||||
|
||||
def select_ashp_pcdb_id(design_heat_loss_kw: float) -> int:
|
||||
"""The PCDB heat-pump record to install for a dwelling with
|
||||
`design_heat_loss_kw`: the smallest ladder rung whose rated output meets the
|
||||
load (PSR >= 1.0), capped at the largest rung when the load exceeds the
|
||||
domestic aroTHERM plus range (ADR-0049)."""
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
# --- Gas boiler upgrade (Heating/HW expansion): replace an existing wet boiler
|
||||
# with a modern gas condensing boiler. Validated against Elmhurst before/after
|
||||
# re-lodgements (cert 001431): the upgrade always targets mains gas — gas->gas
|
||||
|
|
|
|||
|
|
@ -7,7 +7,10 @@ later slices. Detection + pricing only; impact is produced by scoring (ADR-0016)
|
|||
|
||||
from datatypes.epc.domain.epc_property_data import EpcPropertyData
|
||||
from domain.geospatial.planning_restrictions import PlanningRestrictions
|
||||
from domain.modelling.generators.heating_recommendation import recommend_heating
|
||||
from domain.modelling.generators.heating_recommendation import (
|
||||
recommend_heating,
|
||||
select_ashp_pcdb_id,
|
||||
)
|
||||
from domain.modelling.measure_type import MeasureType
|
||||
from domain.modelling.product import Product
|
||||
from domain.modelling.recommendation import Recommendation
|
||||
|
|
@ -764,3 +767,15 @@ def test_boiler_upgrade_leaves_adequate_controls_unchanged() -> None:
|
|||
).overlay.heating
|
||||
assert overlay is not None
|
||||
assert overlay.main_heating_control is None
|
||||
|
||||
|
||||
def test_ashp_sizing_selects_the_smallest_pump_meeting_the_design_heat_loss() -> None:
|
||||
# A 6 kW design heat loss needs a pump whose rated output covers it: the 7 kW
|
||||
# aroTHERM plus (PCDB 110265, ~6.40 kW), the smallest ladder rung meeting the
|
||||
# load — not the fixed 5 kW unit (4.37 kW) that would sit below the load and
|
||||
# collapse SAP's Appendix-N PSR efficiency.
|
||||
# Act
|
||||
pcdb_id = select_ashp_pcdb_id(design_heat_loss_kw=6.0)
|
||||
|
||||
# Assert — the 7 kW aroTHERM plus rung.
|
||||
assert pcdb_id == 110265
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue