Commit graph

7514 commits

Author SHA1 Message Date
Khalim Conn-Kowlessar
ac2b600bbd Merge remote-tracking branch 'origin/main' into fix/ashp-size-to-dwelling-heat-loss 2026-07-03 11:02:42 +00:00
Khalim Conn-Kowlessar
30616dc427 Record ADR-0049: ASHP sized to the dwelling's design heat loss at the efficiency peak
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 11:02:13 +00:00
Khalim Conn-Kowlessar
bf240e3315 ASHP sizing targets the Appendix-N efficiency peak (realistic installed pump) 🟩
Sizing selects the aroTHERM plus rung nearest PSR ~0.8 (0.8 x design heat
loss) — the Appendix-N efficiency peak, reproducing the pump a real
installer fits — rather than the MCS PSR>=1.0 capacity target, which
oversizes. Validated against the relodged Elmhurst ASHP cert (delta 0
held at the 5 kW Vaillant); the two self-snapshot pins re-pin to their
correctly-sized larger pumps, and the orchestrator/harness thread the
calculator's design heat loss so production sizes to the dwelling. Manual
SapResult test stubs carry the new design_heat_loss_kw field.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 11:02:13 +00:00
Daniel Roth
7abf466b56
Merge pull request #1445 from Hestia-Homes/feature/abri-api-integration
Abri deal abandonment check
2026-07-03 11:48:37 +01:00
Daniel Roth
1a5368571f add typehint 2026-07-03 10:46:24 +00:00
Khalim Conn-Kowlessar
cb91954bb4 The orchestrator threads the dwelling design heat loss into ASHP sizing 🟥
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 10:31:57 +00:00
Khalim Conn-Kowlessar
b25e7bb7f9 ASHP cost sizes to the threaded design heat loss over the floor-area proxy 🟩
_ashp_option threads its sized design heat loss into ashp_cost_inputs so
the cost band and the pump's efficiency record share one figure — a leaky
dwelling's larger pump is priced on the matching band.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 10:29:50 +00:00
Khalim Conn-Kowlessar
6f70e65bc4 ASHP cost sizes to the threaded design heat loss over the floor-area proxy 🟥
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 10:29:14 +00:00
Khalim Conn-Kowlessar
2dd637a657 The ASHP bundle sizes the heat pump to the dwelling's design heat loss 🟩
_ashp_option now selects the aroTHERM plus PCDB record matching the
threaded design heat loss (floor-area proxy fallback), so the overlay's
efficiency anchor is sized to the dwelling instead of a fixed 5 kW unit.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 10:28:08 +00:00
Khalim Conn-Kowlessar
df38dda7b0 The ASHP bundle sizes the heat pump to the dwelling's design heat loss 🟥
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 10:26:35 +00:00
Daniel Roth
f4f915cfb7 Abri deal abandonment names its attempt threshold 🟪
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 10:19:06 +00:00
Daniel Roth
18989252f4 Deal differ detects number of attempts changes for db update 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 10:17:51 +00:00
Khalim Conn-Kowlessar
039df7ae87 The calculator exposes the dwelling design heat loss for heat-pump sizing 🟩
design_heat_loss_kw = annual-average HLC x 24.2 K (SAP design temperature
difference) / 1000, the quantity Appendix N's PSR divides a heat pump's
rated output by — surfaced so the ASHP recommendation can size the pump.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 10:17:42 +00:00
Khalim Conn-Kowlessar
cd4ed81185 The calculator exposes the dwelling design heat loss for heat-pump sizing 🟥
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 10:16:43 +00:00
Daniel Roth
c00ae894ee Deal differ detects number of attempts changes for db update 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 10:14:22 +00:00
Khalim Conn-Kowlessar
7707df3294 ASHP sizing caps at the largest pump for a high-heat-loss dwelling 🟩
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 10:14:10 +00:00
Daniel Roth
58ce855e0b Abri deal abandonment fires only when the deal newly becomes abandoned 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 10:13:58 +00:00
Khalim Conn-Kowlessar
b18fc3878b ASHP sizing selects the smallest pump meeting the dwelling's design heat loss 🟩
The sizing ladder (Vaillant aroTHERM plus 3.5-12 kW PCDB records) picks
the smallest rung whose rated output meets the design heat loss, so SAP
10.2 Appendix N reads the heat-pump efficiency near its PSR peak instead
of collapsing on an undersized fixed unit.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 10:13:46 +00:00
KhalimCK
f822f8a15d
Merge pull request #1443 from Hestia-Homes/fix/electric-room-heater-overlay-companions
Electric room heaters override forces its category + control (fix silent storage-companion inheritance)
2026-07-03 11:13:35 +01:00
Khalim Conn-Kowlessar
b37be6327c ASHP sizing selects the smallest pump meeting the dwelling's design heat loss 🟥
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 10:13:19 +00:00
Daniel Roth
9559f23741 Abri deal abandonment fires only when the deal newly becomes abandoned 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 10:12:59 +00:00
Daniel Roth
6de0da869e Abri deal abandonment requires a negative outcome 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 10:11:14 +00:00
Daniel Roth
41d62ce2b2 Abri deal abandonment requires a negative outcome 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 10:10:26 +00:00
Daniel Roth
88093eb7cd Abri deal abandonment requires at least three parseable attempts 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 10:10:03 +00:00
Daniel Roth
af85e0ed2b Abri deal abandonment requires at least three parseable attempts 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 10:07:38 +00:00
Daniel Roth
79423f594c Abri deal abandonment ignores deals that are not Abri condition deals 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 10:06:53 +00:00
Daniel Roth
33848a76fe Abri deal abandonment ignores deals that are not Abri condition deals 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 10:04:45 +00:00
Daniel Roth
262f22764a Abri deal abandonment triggers after three attempts with a negative outcome 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 10:03:57 +00:00
Daniel Roth
aca507cc47 Abri deal abandonment triggers after three attempts with a negative outcome 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 10:03:42 +00:00
Daniel Roth
701a6aa5cd Merge branch 'main' into feature/abri-api-integration 2026-07-03 09:40:18 +00:00
Daniel Roth
71a309ad0a
Merge pull request #1442 from Hestia-Homes/feature/abri-api-integration
Abri API Integration: check for tenant data fetch trigger
2026-07-03 10:33:44 +01:00
Khalim Conn-Kowlessar
dd30903ace Merge remote-tracking branch 'origin/main' into fix/electric-room-heater-overlay-companions 2026-07-03 09:25:11 +00:00
Khalim Conn-Kowlessar
244c5b65ed Document heating-companion coherence: category/control forced, fuel/meter deferred (ADR-0048)
ADR-0048 records why a system-replacing heating override must emit a
complete companion set — category and control archetype-forced for
coherence, fuel and meter deferred where multiple values are valid, and
an unmapped companion logged rather than silently inherited. Adds the
Heating Companion Set glossary term to CONTEXT.md.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 09:21:47 +00:00
Khalim Conn-Kowlessar
962a443ed2 A complete room-heater overlay does not log a companion gap 🟩
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 09:17:06 +00:00
Khalim Conn-Kowlessar
390e3e89d7 The overlay logs an error when it cannot complete a heating companion set 🟩
A system-replacing override whose category or control is not yet mapped
now logs an error naming the archetype and code, so the incomplete
companion set (which otherwise silently inherits the replaced system's
value) is visible for review — log-and-continue, matching flag_fuel_mismatch.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 09:16:25 +00:00
Khalim Conn-Kowlessar
ea113b58fb The overlay logs an error when it cannot complete a heating companion set 🟥
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 09:15:31 +00:00
Khalim Conn-Kowlessar
ffd21689fd An electric room heaters override sets the room-heater charge control 🟩
Control 2601 (SAP Table 4e Group 6 room-heater, +0.3 C conservative
default) now overlaid for electric room heaters, matching the gas/oil/
solid siblings, so a replaced storage heater's manual charge control
2401 (+0.7 C) no longer survives and over-warms the modelled dwelling.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 09:13:32 +00:00
Khalim Conn-Kowlessar
cfd9799500 An electric room heaters override sets the room-heater charge control 🟥
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 09:13:03 +00:00
Khalim Conn-Kowlessar
bf032d17d0 An electric room heaters override sets the room-heater heating category 🟩
Category 10 (SAP Table 4a Room heaters) now overlaid for electric room
heaters (691-701), so a replaced storage heater's category 7 no longer
survives onto the effective cert and mis-bills via the Table 12a resolver.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 09:12:19 +00:00
Khalim Conn-Kowlessar
5e7e51d8b2 An electric room heaters override sets the room-heater heating category 🟥
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 09:11:38 +00:00
Daniel Roth
05ca0bb280 move static method below non-statics 2026-07-03 08:33:10 +00:00
Daniel Roth
a36fe00132 Abri tenant data fetch resolves abri deals by associated project id 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 08:28:25 +00:00
Daniel Roth
5df1237b90 Abri tenant data fetch requires a parseable new commencement date 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 08:27:42 +00:00
Daniel Roth
47842da7b9 Abri tenant data fetch requires a parseable new commencement date 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 08:27:22 +00:00
Daniel Roth
b4d2d9cd37 Abri tenant data fetch ignores already-set commencement dates 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 08:26:20 +00:00
Daniel Roth
c18f4feb3e Abri tenant data fetch ignores already-set commencement dates 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 08:26:02 +00:00
Daniel Roth
426aa9a15e Abri tenant data fetch does not trigger for non-abri deals 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 08:25:26 +00:00
Daniel Roth
0b8f0f17a9 Abri tenant data fetch does not trigger for non-abri deals 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 08:25:07 +00:00
Daniel Roth
2f1dfaa5a6 Abri tenant data fetch triggers when commencement date is first set 🟩
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 08:24:36 +00:00
Daniel Roth
da0ef3e5e0 Abri tenant data fetch triggers when commencement date is first set 🟥
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 08:24:11 +00:00