mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-07-27 23:35:01 +00:00
Lodge explicit zero roof insulation for a surveyed "Insulation At: None" 🟩
"Insulation At: None" is the assessor recording zero loft insulation, not an unknown — with thickness left None, u_roof fell through to the age-band "assumed insulated" default (0.16 W/m²K at band J/K) instead of the Table 16 uninsulated row (2.30), understating roof loss ~14x (issue #1590 bug 2). Harness MAE 2.701 -> 2.632 (the two ~7-SAP roof over-raters correct exactly); ceiling ratcheted to 2.64. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
66e0adf619
commit
bc58cf4930
2 changed files with 12 additions and 1 deletions
|
|
@ -81,7 +81,10 @@ _MANIFEST_PATH = _FIXTURES_DIR / "manifest.json"
|
|||
# gap) — see docs/HANDOVER_PASHUB_838_PROBLEM_PROPERTIES.md. Re-baselined to the
|
||||
# full-coverage aggregate; ratchet back DOWN as those two are resolved.
|
||||
_MIN_WITHIN_HALF: float = 0.12
|
||||
_MAX_SAP_MAE: float = 2.71
|
||||
# Ratcheted 2.71 -> 2.64 by #1590 bug 2 (roof "Insulation At: None" -> explicit
|
||||
# zero thickness): observed MAE 2.632 — the two ~7-SAP roof over-raters
|
||||
# (507665533138 / 507670893756) correcting is exactly 14/205 ≈ 0.07 of MAE.
|
||||
_MAX_SAP_MAE: float = 2.64
|
||||
|
||||
_KNOWN_GAP_REASON = (
|
||||
"pashub `from_site_notes` mapper does not int-code a main-heating "
|
||||
|
|
|
|||
|
|
@ -5961,6 +5961,14 @@ def _map_roof(
|
|||
) -> tuple[Optional[str], Optional[Union[str, int]]]:
|
||||
if roof is None:
|
||||
return None, None
|
||||
# "Insulation At: None" is the assessor explicitly recording ZERO loft
|
||||
# insulation (no thickness line follows — there is nothing to measure).
|
||||
# Lodge an explicit 0 so `u_roof` takes the Table 16 uninsulated row
|
||||
# (2.30 W/m²K) instead of falling through, on thickness=None, to the
|
||||
# age-band "assumed insulated" default (issue #1590 bug 2). A blank
|
||||
# `insulation_at` stays None — "not surveyed", not "no insulation".
|
||||
if roof.insulation_at == "None":
|
||||
return roof.insulation_at, 0
|
||||
thickness: Optional[Union[str, int]] = (
|
||||
roof.insulation_thickness_mm
|
||||
if roof.insulation_thickness_mm is not None
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue