Commit graph

8271 commits

Author SHA1 Message Date
Daniel Roth
5f3e9f893f Bill water-only heat-network DHW identically whatever plant is behind it 🟩
950 boilers / 951 CHP / 952 community heat pump differ only in plant
efficiency, which SAP 10.2 §4.3 puts in the Table 12 heat price — so the
dwelling's delivered-heat demand must not vary with it. Passes on the
previous commit's expression; verified RED against the prior impl, where
951 leaked 0.80/0.75 and 952 under-billed its DHW fuel by 3.15×.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 10:25:59 +00:00
Daniel Roth
353ebe5556 Price water-only heat-network DHW without a plant-efficiency divisor 🟩
SAP 10.2 §4.3 (p.24) puts the water-heating efficiency in the Table 12
heat price, and C4 (p.53) scopes the plant efficiency to CO2/PE only, so
worksheet (310) = (64) × (305a) × (306) carries no efficiency term. The
dwelling-side divisor was applying it a second time.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 10:24:34 +00:00
Daniel Roth
bf4af89b3a Price water-only heat-network DHW without a plant-efficiency divisor 🟥
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 10:22:37 +00:00
Daniel Roth
217dcecfa9
Merge pull request #1595 from Hestia-Homes/fix/1589-refetch-epc-is-ignored
Apply the ADR-0001 Recency Tie-Break when refetch_epc=True (#1589)
2026-07-15 11:00:56 +01:00
Daniel Roth
093e5ce041 Merge branch 'main' into fix/1589-refetch-epc-is-ignored 2026-07-15 09:45:20 +00:00
Daniel Roth
b02519320f update local trigger script 2026-07-15 09:42:24 +00:00
Daniel Roth
dcf5628029 Model the newer stored survey when refetching EPCs 🟪
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 09:40:52 +00:00
Daniel Roth
870ec68dba Model the newer stored survey when refetching EPCs 🟩
Read stored lodged EPCs whatever refetch_epc says, so a stored assessment
can win the ADR-0001 Recency Tie-Break against the gov register.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 09:40:15 +00:00
Daniel Roth
7a2f29027c Model the newer stored survey when refetching EPCs 🟥
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 09:37:35 +00:00
KhalimCK
7f68912308
Merge pull request #1591 from Hestia-Homes/feat/pashub-extractor-fixes-and-runner
PasHub extractor accuracy: Guinness cohort 12.4%→20.0% within-0.5, MAE 2.56→1.38
2026-07-15 10:36:56 +01:00
Daniel Roth
04f72e2d32 Keep the stored survey when the register has no cert or ties on date 🟩
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 09:36:21 +00:00
Daniel Roth
aeae322a4e Use the fetched gov cert when nothing is stored 🟩
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 09:35:19 +00:00
Daniel Roth
3a76bd0f7c Use the fetched gov cert when nothing is stored 🟥
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 09:35:01 +00:00
Daniel Roth
dd1ea99c3d Use the fetched gov cert when it is the newer assessment 🟩
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 09:34:37 +00:00
Daniel Roth
22bd0eadbe Use the fetched gov cert when it is the newer assessment 🟥
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 09:33:28 +00:00
Daniel Roth
ec584fc84c Prefer the newer of a stored survey and a fetched gov cert 🟩
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 09:33:06 +00:00
Daniel Roth
d1be7c2842 Prefer the newer of a stored survey and a fetched gov cert 🟥
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 09:32:50 +00:00
Khalim Conn-Kowlessar
bb7f05693c Update golden for the secondary-heating int-code + retighten pashub MAE post-#1592-revert
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 09:15:46 +00:00
Khalim Conn-Kowlessar
dc271e959a Revert the water-only heat-network calculator changes (tracked in #1592)
Backs out the WHC-950/951/952 primary-loss (d3c0b9e4) and flat-rate-charging
(fecf4f62) changes to cert_to_inputs.py: they fire on ANY cert with those
water-heating codes, regressing the gov-API RdSAP corpus
(test_api_path_sap_accuracy_on_rdsap_21_0_1_corpus MAE 0.627 -> 0.630), and an
Opus audit found the water-only branch has a pre-existing plant-efficiency
double count they flow more kWh through. The calculator work + the correct
fix (water_eff = 1.0/(DLF*1.05)) + an Elmhurst-worksheet regression are
tracked in #1592, isolated from the extractor accuracy PR. The cylinder-
insulation MAPPER fix (f5e4814b) is retained.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 09:09:18 +00:00
Khalim Conn-Kowlessar
21674d5ed0 Re-baseline the pashub gauge to 23% within-0.5 / MAE 1.41 for the orientation fix
Khalim-authorised MAE loosening: coding window orientation exposes the known
SAP-10.2-vs-lodged offset the zeroed solar gains were masking; within-0.5 is
the north-star metric and jumps 20.0% -> 23.9%.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 08:51:52 +00:00
Khalim Conn-Kowlessar
27accc6bb1 Int-code the surveyed window orientation to its SAP10 octant code 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 08:48:36 +00:00
Khalim Conn-Kowlessar
5276b45836 Int-code the surveyed window orientation to its SAP10 octant code 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 08:45:22 +00:00
Khalim Conn-Kowlessar
b208234e62 Ratchet the pashub accuracy gauge to MAE 1.371 after the common-wall fix
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 08:40:39 +00:00
Khalim Conn-Kowlessar
7c2cb6b88a Ratchet the pashub accuracy gauge to MAE 1.37 after the common-wall fix
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 08:35:56 +00:00
Khalim Conn-Kowlessar
f7b27dc519 Bill Simplified RIR common walls as common_wall at the main-wall U 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 08:33:18 +00:00
Khalim Conn-Kowlessar
27158d623d Bill Simplified RIR common walls as common_wall at the main-wall U 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 08:28:59 +00:00
Khalim Conn-Kowlessar
8a753822c8 Capture the Simplified RIR 'Roof room type' label from the survey 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 08:27:01 +00:00
Khalim Conn-Kowlessar
600262819c Capture the Simplified RIR 'Roof room type' label from the survey 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 08:25:11 +00:00
Khalim Conn-Kowlessar
948704d7b0 Record the secondary-heating-type coding fix in the accuracy ratchet note
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 00:28:40 +00:00
Khalim Conn-Kowlessar
be1e10e337 Int-code the surveyed secondary-heating label to its Table 4a room-heater code 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 00:26:51 +00:00
Khalim Conn-Kowlessar
7b04a9d5f4 Int-code the surveyed secondary-heating label to its Table 4a room-heater code 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 00:25:20 +00:00
Khalim Conn-Kowlessar
390a818587 Ratchet the pashub accuracy gauge to 19% within-0.5 / MAE 1.39
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 00:05:13 +00:00
Khalim Conn-Kowlessar
fecf4f622c Default the water-only heat network to flat-rate charging per RdSAP 10 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 23:38:49 +00:00
Khalim Conn-Kowlessar
e6525f7b31 Default the water-only heat network to flat-rate charging per RdSAP 10 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 23:36:55 +00:00
Khalim Conn-Kowlessar
d3c0b9e499 Accrue Table 3 primary-circuit loss for water-only heat-network cylinders 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 23:36:20 +00:00
Khalim Conn-Kowlessar
64207ea225 Accrue Table 3 primary-circuit loss for water-only heat-network cylinders 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 23:30:51 +00:00
Khalim Conn-Kowlessar
f5e4814bf9 Int-code the surveyed cylinder insulation label for the storage-loss cascade 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 23:25:48 +00:00
Khalim Conn-Kowlessar
87922b622a Int-code the surveyed cylinder insulation label for the storage-loss cascade 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 23:24:47 +00:00
Khalim Conn-Kowlessar
5a7ff6de1c Lodge the surveyed Wall Dry-Lined answer on the SAP building part 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 23:22:22 +00:00
Khalim Conn-Kowlessar
073e5ce30c Lodge the surveyed Wall Dry-Lined answer on the SAP building part 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 23:21:36 +00:00
Khalim Conn-Kowlessar
483b69ff41 Capture the surveyed Wall Dry-Lined answer per building part 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 23:20:36 +00:00
Khalim Conn-Kowlessar
0b47798403 Capture the surveyed Wall Dry-Lined answer per building part 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 23:20:09 +00:00
Khalim Conn-Kowlessar
1f1bb8a556 Withhold roof insulation from RIR surfaces the surveyor marked insulation-unknown 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 23:17:30 +00:00
Khalim Conn-Kowlessar
7f854e7219 Withhold roof insulation from RIR surfaces the surveyor marked insulation-unknown 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 23:17:30 +00:00
Khalim Conn-Kowlessar
8e58f7e871 Capture the per-surface RIR insulation-known answer from the survey 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 23:12:08 +00:00
Khalim Conn-Kowlessar
d743f6fb3b Capture the per-surface RIR insulation-known answer from the survey 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 23:11:09 +00:00
Khalim Conn-Kowlessar
a67473ceae Add extractor-accuracy campaign handover (state, recipe, remaining targets)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-14 22:43:24 +00:00
Khalim Conn-Kowlessar
e0b189aa6d Correct two pashub-verified pre_sap values in the accuracy manifest
Manually verified in pashub (Khalim, 2026-07-14): deal 499584755922
(9 Council Houses, CW5 8AP) is F33, not the stale D67 — our computed 34.0
was right within a point; deal 499617935574 (Brightholme, 14 North Road)
is the accredited E43, not the preliminary 53. 58 Hackle Street (D58) and
16 Bingley Close (E52) were confirmed correct, so our +7.8/+5.7 deviations
there are extraction bugs to hunt next. Harness MAE 1.684 -> 1.551; ceiling
ratcheted to 1.56.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-14 22:42:03 +00:00
Khalim Conn-Kowlessar
f45651dbc0 Lodge the heat-network SAP code and Table 12 community fuel for PasHub community heating 🟩
The extractor now captures "Heating System (Other):" and the mapper resolves
it to the Table 4a code (301, community boilers) + Table 12 community fuel
(51 via the shared _resolve_community_heating_fuel_code), so
is_heat_network_main routes the DLF / standing-charge / 80%-efficiency
branch instead of pricing the dwelling as an ordinary mains-gas boiler
(fixture 507644414148: +14.3 over-rate closes by ~8.6). Harness MAE
1.726 -> 1.684; ceiling ratcheted to 1.70.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-14 22:34:50 +00:00
Khalim Conn-Kowlessar
4d60d79cc9 Extract the PasHub community heat-source label 🟥
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-14 22:33:08 +00:00