Regression fix surfaced by the first-attempt cert 0350 prediction test. `_extract_extensions` in `backend/documents_parser/elmhurst_ extractor.py` builds a synthetic `WallDetails` for any extension that lodges "As Main Wall: Yes" (copying the Main bp's wall fields so the cascade gets the same wall config for the extension). Slice S0380.4 added a new `insulation_thickness_mm` field to `WallDetails` but did NOT update the inheritance code at line 559-567 — so any multi-bp cert with an "As Main Wall" extension was losing the lodged wall insulation thickness on its extension bps, regardless of cert. Cert 0350-2968-2650-2796-5255 is the first multi-bp ASHP cohort cert through the Summary path (Main + 1st Extension, both "CA Cavity / FE Filled Cavity + External / 100 mm"). The dr87 worksheet line ref (29a) lodges: Main: 19.4575 W/K (77.83 m² × 0.25 W/m²K) Ext1: 1.3025 W/K ( 5.21 m² × 0.25 W/m²K) total: 20.7600 W/K Pre-fix Summary cascade produced walls_w_per_k 22.2188 (over by +1.46 W/K) because Ext1's missing thickness defaulted to a higher U-value path. Post-fix walls_w_per_k = **20.7600 — exact match against worksheet (29a) sum**. One-line fix at `elmhurst_extractor.py:567`: + insulation_thickness_mm=main_walls.insulation_thickness_mm, Forcing function: cert 0350 first-attempt SAP moves from Δ -4.7365 to Δ -4.5829 — small +0.1536 SAP gain from walls alone. The remaining ~-4.58 SAP residual on cert 0350 has other contributors to investigate in subsequent slices (HW kWh 1206 vs predicted target, HTC 173.42 vs worksheet (39) avg — likely floor / ventilation / PV gaps not yet covered by Summary mapper). Added focused unit test `test_summary_0350_ext1_inherits_main_wall_insulation_thickness` that pins the inheritance contract directly on the mapper boundary (bp[0].wall_insulation_thickness == bp[1].wall_insulation_thickness == "100mm"). Will fail if a future field-addition to WallDetails again forgets to update the synthetic-WallDetails inheritance block. Pyright net-zero across both edited files. Regression suite: 676 pass + 10 fail (= handover baseline 669 + 10 + 7 new GREEN unit tests across Slices S0380.2..S0380.8). Spec / cohort context: - Affects ALL multi-bp Elmhurst Summary certs with "As Main Wall: Yes" extensions, not just cert 0350. None of the previously- closed cohort certs (001479, 0330) exercised this path — both single-bp dwellings. - SAP 10.2 §3.7 / Table S5 — composite filled-cavity-plus-external U-value calc, keyed on lodged insulation thickness. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
||
|---|---|---|
| .devcontainer | ||
| .github/workflows | ||
| .idea | ||
| .vscode | ||
| applications | ||
| asset_list | ||
| backend | ||
| backlog | ||
| datatypes | ||
| deployment/terraform | ||
| docs/adr | ||
| domain | ||
| epr_data_exports | ||
| etl | ||
| infrastructure | ||
| model_data/requirements | ||
| orchestration | ||
| recommendations | ||
| repositories | ||
| scripts | ||
| sfr/principal_pitch | ||
| survey_report | ||
| tests | ||
| utilities | ||
| utils | ||
| .coveragerc | ||
| .dockerignore | ||
| .gitignore | ||
| __init__.py | ||
| ara_backend_design.md | ||
| BaseUtility.py | ||
| CLAUDE.md | ||
| conftest.py | ||
| CONTEXT.md | ||
| devcontainer.sh | ||
| Dockerfile.test | ||
| Dockerfile.test.dockerignore | ||
| Makefile | ||
| MEMORY.md | ||
| package-lock.json | ||
| package.json | ||
| pyproject.toml | ||
| pyrightconfig.json | ||
| pytest.ini | ||
| README.md | ||
| run_lambda_local.sh | ||
| serverless.yml | ||
| test.requirements.txt | ||
| tox.ini | ||
| UBIQUITOUS_LANGUAGE.md | ||
Model Repository
This repository contains the code pertaining to the development of the data science and machine learning products being utilised by Hestia.
The different folders in this repository relate to services that can be used independently, or can be imported and used as part of a larger application
Getting Started
Prerequisites
Dev Container Setup
This repo uses a Docker Compose-based dev container. The model-backend service joins a shared-dev Docker network so it can communicate with other local services (e.g. a frontend container) running on your machine.
VS Code users: The initializeCommand in devcontainer.json creates the shared-dev network automatically before the container starts. No manual step required — just open the repo and select Reopen in Container.
Non-VS Code / CI workflows: Run the following once before starting the container:
make dev-setup
This is idempotent and safe to re-run if the network already exists.
Folders
backend/
This folder contains the code for the fastapi backend service, which provides an interface to much of the functionality in this repository, for the frontend
model_data/
This folder contains related to the reading and preparation of assessment model data, including pulling out epc attributes
Testing
All tests can be run, against the configuration in pytest.ini running
pytest
This will run the complete panel of tests and report on coverage in the locations specified by the pytest.ini file.
To run tests in a specific service, e.g. inside of model_data, simply run
pytest --cov-config=model_data/.coveragerc --cov=model_data
This will produce the test results and coverage reports