diff --git a/CONTEXT.md b/CONTEXT.md index 87f4e1eb..1435ea6a 100644 --- a/CONTEXT.md +++ b/CONTEXT.md @@ -62,9 +62,13 @@ A structured dataclass (`domain.addresses.user_address.UserAddress`) capturing a _Avoid_: user input, raw address, user_inputed_address **Comparable Properties**: -The reference cohort matched to a target Property by both geographic proximity (postcode prefix / UPRN range) and physical similarity (property type, built form, age band); used by the EPC Prediction Service for gap-filling and anomaly detection. +The reference cohort matched to a target Property, used by **EPC Prediction** for gap-filling and anomaly detection. Selected by a **filter-then-relax ladder**: hard filters on identity (property type, built form) and any known **Landlord Override** (e.g. a known solid-brick wall) while at least *k* remain, widening the geographic scope (postcode → postcode-prefix) or demoting a known field to a weight when sparse. Survivors are weighted for prediction by **geographic proximity × recency × physical similarity** — closer, newer (newer EPCs are higher quality), more-similar comparables count more. **All cert vintages are kept** as source evidence — a building's physical components (wall / roof / floor / heating fuel / age) are agnostic of the SAP methodology that rated them, so a pre-SAP10 neighbour is valid evidence; recency is a graduated **weight**, never a hard drop, and matters most for the one component that genuinely goes stale (the heating system, when a boiler is replaced). Only the **validation target** is restricted to SAP 10.2 — see [[validation-cohort]] / [[sap-spec-version]] — because performance can only be checked against a same-spec lodged figure. _Avoid_: neighbours, similar properties, peer set +**EPC Prediction**: +Producing a Property's `EpcPropertyData` picture from its **Comparable Properties** when it has no EPC (~30% of UK homes, typically long-tenure). **Deterministic** neighbour synthesis (k-NN-style — *not* ML; no trained model): take the cohort **mode** for the homogeneous categoricals (wall / roof / floor construction + insulation, construction age band), copy a single representative comparable's **structure** wholesale (building parts, per-window dimensions + orientations, floor dimensions) so the picture stays internally consistent for the calculator, then apply **Landlord Overrides** and the known inputs on top. The result is scored through **SAP10 Calculation** like any other **Effective EPC**, so a predicted Property flows through Rebaselining, Bill Derivation, and Modelling unchanged — held in a **distinct predicted-EPC slot** that coexists with any lodged EPC (so provenance is structural and the UI can flag it; see ADR-0031). A **known property type is required** — the hard cohort filter (a flat is never sized from houses) — supplied by a **Landlord Override** (or, later, an Ordnance Survey lookup); a Property whose property type is genuinely unknown is **gated out**, never predicted from a mixed-type cohort and never given a national default. The same cohort machinery also produces **EPC Anomaly Flags** for Properties that *do* have an EPC. A future learned-weighting refinement is possible but separate, as with the calculator's ML residual head. +_Avoid_: EpcPredictionService (no "service" suffix — name the operation), ML prediction (it is deterministic), EPC estimation + ### Survey documents **Ventilation Audit**: @@ -88,15 +92,15 @@ _Avoid_: patches (deprecated), corrections, manual EPC, edits ### Modelling **Effective EPC**: -The assembled `EpcPropertyData` picture the modelling pipeline scores for a single Property. Assembled from whichever source applies: Site Notes alone; or the public EPC with **Landlord Overrides** applied; or — when the EPC is **old** — its schema re-mapped to current via **Reduced-Field Synthesis** (deterministic, from the cert plus calibrated coefficients — no neighbour data); or — when there is **no EPC** — components **estimated from surrounding properties** (a separate neighbour-prediction ML mechanism, not yet implemented). Carries source-derived physical fields and originally recorded performance values; the performance scored from this picture is held separately in **Baseline Performance**. +The assembled `EpcPropertyData` picture the modelling pipeline scores for a single Property. Assembled from whichever source applies: Site Notes alone; or the public EPC with **Landlord Overrides** applied; or — when the EPC is **old** — its schema re-mapped to current via **Reduced-Field Synthesis** (deterministic, from the cert plus calibrated coefficients — no neighbour data); or — when there is **no EPC** — components **estimated from surrounding properties** via **EPC Prediction** (deterministic neighbour synthesis). Carries source-derived physical fields and originally recorded performance values; the performance scored from this picture is held separately in **Baseline Performance**. _Avoid_: modelling EPC, working EPC, resolved EPC, derived EPC **Rebaselining**: -Establishing a Property's **Effective Performance** (SAP score, EPC Band, CO2, Primary Energy Intensity, space-heating & hot-water kWh) by **assembling the Effective EPC picture and scoring it** through **SAP10 Calculation** (the deterministic `Sap10Calculator`, which superseded the old ML-API rebaseliner; an ML residual head over the calculator is future — ADR-0009/0013). The *assembly* is the substance: apply **Landlord Overrides** (e.g. boiler → ASHP, wall insulated) as a simulation on the `EpcPropertyData`; re-map an old-schema EPC to current via **Reduced-Field Synthesis** (deterministic, cert-only); estimate components from surrounding properties when there is no EPC (neighbour-prediction gap-fill — a separate ML mechanism, not yet implemented). The calculator is the **scoring engine at the tail**, not the whole of Rebaselining — so its call lives inside the Rebaseliner, after assembly. Triggered whenever the assembled picture differs from the lodged record: (a) the EPC was lodged under a methodology the calculator supersedes (`sap_version < 10.2`), (b) Overrides / Site Notes changed the physical state (walls / heating / windows / etc.), or (c) the picture is estimated or remapped rather than a real current EPC. Produces Effective Performance; Lodged Performance is preserved unchanged. The same single scoring also yields the per-end-use kWh that **Bill Derivation** prices — one scoring, two products. kWh is an ML target per ADR-0007 — see [[epc-ml-transform]]. +Establishing a Property's **Effective Performance** (SAP score, EPC Band, CO2, Primary Energy Intensity, space-heating & hot-water kWh) by **assembling the Effective EPC picture and scoring it** through **SAP10 Calculation** (the deterministic `Sap10Calculator`, which superseded the old ML-API rebaseliner; an ML residual head over the calculator is future — ADR-0009/0013). The *assembly* is the substance: apply **Landlord Overrides** (e.g. boiler → ASHP, wall insulated) as a simulation on the `EpcPropertyData`; re-map an old-schema EPC to current via **Reduced-Field Synthesis** (deterministic, cert-only); estimate components from surrounding properties when there is no EPC (**EPC Prediction** — deterministic neighbour gap-fill). The calculator is the **scoring engine at the tail**, not the whole of Rebaselining — so its call lives inside the Rebaseliner, after assembly. Triggered whenever the assembled picture differs from the lodged record: (a) the EPC was lodged under a methodology the calculator supersedes (`sap_version < 10.2`), (b) Overrides / Site Notes changed the physical state (walls / heating / windows / etc.), or (c) the picture is estimated or remapped rather than a real current EPC. Produces Effective Performance; Lodged Performance is preserved unchanged. The same single scoring also yields the per-end-use kWh that **Bill Derivation** prices — one scoring, two products. kWh is an ML target per ADR-0007 — see [[epc-ml-transform]]. _Avoid_: re-scoring, re-prediction, performance recomputation, refresh (for cache-freshness) **Reduced-Field Synthesis**: -Deterministically translating an **old / reduced-data EPC schema** into the current `EpcPropertyData`, synthesising the *measured* fields the target expects from the source's *reduced or categorical* fields, using only the cert itself plus fixed calibrated coefficients — never neighbour data. Used when re-mapping a **pre-SAP10** cert (e.g. `RdSAP-Schema-20.0.0`) as part of assembling the **Effective EPC**: e.g. a glazing-area *band* + floor area → window m²; bath/shower *room counts* → bath and shower counts. A *best attempt* with no ground truth to validate against (per the **Validation Cohort** rule, a pre-SAP10 cert has no same-spec lodged figure to check), so each synthesis assumption is recorded explicitly in code and tests to keep it debuggable. Distinct from **neighbour-prediction gap-fill** (ML estimation of genuinely-absent fields from surrounding properties — the no-EPC path, a separate mechanism not yet implemented) and from the calculator's own RdSAP Table-5 defaulting in `cert_to_inputs` (which expands `EpcPropertyData` into the full SAP input set downstream). +Deterministically translating an **old / reduced-data EPC schema** into the current `EpcPropertyData`, synthesising the *measured* fields the target expects from the source's *reduced or categorical* fields, using only the cert itself plus fixed calibrated coefficients — never neighbour data. Used when re-mapping a **pre-SAP10** cert (e.g. `RdSAP-Schema-20.0.0`) as part of assembling the **Effective EPC**: e.g. a glazing-area *band* + floor area → window m²; bath/shower *room counts* → bath and shower counts. A *best attempt* with no ground truth to validate against (per the **Validation Cohort** rule, a pre-SAP10 cert has no same-spec lodged figure to check), so each synthesis assumption is recorded explicitly in code and tests to keep it debuggable. Distinct from **EPC Prediction** (deterministic neighbour estimation of genuinely-absent fields from surrounding properties — the no-EPC path) and from the calculator's own RdSAP Table-5 defaulting in `cert_to_inputs` (which expands `EpcPropertyData` into the full SAP input set downstream). _Avoid_: gap-fill (means the neighbour-ML path), reduced-data expansion (overloaded with the calculator's Table-5 step), remapping (the schema-translation part only) **Baseline Performance**: @@ -125,6 +129,10 @@ _Avoid_: SAP version (ambiguous with the `sap_version` field on the cert, which **Validation Cohort**: The subset of corpus certs used to validate **SAP10 Calculation** against **Lodged Performance**, filtered to certs lodged after the calculator's target **SAP Spec Version** rolled out in commercial assessor software — currently `inspection_date ≥ 2025-07-01` (a buffer past 14-03-2025 to allow vendor rollout). Smaller than the full corpus but each cert is comparable under the same spec, so probe MAE is a clean signal of calculator-vs-spec correctness rather than spec-version mixture noise. ADR-0010. + +**Component Accuracy**: +The primary, **calculator-independent** measure of **EPC Prediction** quality: how closely the predicted `EpcPropertyData` *components* (heating fuel + category + controls, hot water, wall / roof / floor construction + insulation, age band, glazing, doors, floor area + geometry) match the actual ones, scored by leave-one-out over a held-out target. Categoricals score as a classification hit-rate, numerics as a residual. Load-bearing principle: **predict the components well and correct SAP / carbon / PE fall out once calculator gaps close** — so Component Accuracy is what prediction is tuned against, while `calc(predicted)` vs API-lodged SAP / carbon / PE is a secondary, **calculator-floored** end-to-end check. The held-out target must be a **SAP 10.2** cert (`sap_version == 10.2`) — the only vintage with full-fidelity lodged components — but the source **Comparable Properties** cohort keeps all vintages. Never validated by `calc(predicted)` vs `calc(actual)`: that cancels (and so hides) calculator error against a circular ground truth. +_Avoid_: prediction accuracy (vague), SAP accuracy (that is the calculator-floored end-to-end check, not the primary signal) _Avoid_: parity cohort, validation set, corpus sample **Measure Application**: @@ -361,7 +369,7 @@ _Avoid_: API key, auth token, secret - A Property's **Baseline Performance** holds two halves: **Lodged Performance** (the gov register's SAP / band / carbon / heat) and **Effective Performance** (what the modelling pipeline scored against). The two are equal unless **Rebaselining** fires. - **Rebaselining** produces **Effective Performance** by ML re-prediction across SAP score, CO2 emissions, Primary Energy Intensity, space heating kWh, and hot water kWh, when either (a) the Effective EPC was lodged under a pre-SAP10 schema, or (b) the Effective EPC's physical state diverges from the lodged EPC. **Lodged Performance** is never overwritten. - **Bill Derivation** derives **fuel split** and **bills** from kWh values (sourced from the EPC's `renewable_heat_incentive` fields for baseline SAP10 properties, or from ML when Rebaselining fires), reading current **Fuel Rates** and **Carbon Factors** from their respective repos. -- The **EPC Prediction Service** uses **Comparable Properties** for both gap-filling and producing **EPC Anomaly Flags**. +- **EPC Prediction** uses **Comparable Properties** for both gap-filling (the no-EPC path) and producing **EPC Anomaly Flags** (the has-EPC path). - Triggering the model against N **Scenarios** produces N **Plans** per Property. Each **Plan** holds one **Optimised Package** — its selected **Plan Measures** — plus the Property's post-retrofit figures. - A **Scenario Snapshot** is pinned at trigger time per (task, scenario) so mid-run edits to the live Scenario do not affect an in-flight modelling job. - A **Recommendation** references one **Measure Type** and carries property-specific cost and impact. diff --git a/applications/ara_first_run/handler.py b/applications/ara_first_run/handler.py index 8f4f9afa..acbbd74c 100644 --- a/applications/ara_first_run/handler.py +++ b/applications/ara_first_run/handler.py @@ -10,6 +10,7 @@ from sqlmodel import Session from applications.ara_first_run.ara_first_run_trigger_body import ( AraFirstRunTriggerBody, ) +from domain.epc_prediction.epc_prediction import EpcPrediction from domain.property_baseline.calculator_rebaseliner import CalculatorRebaseliner from domain.sap10_calculator.calculator import Sap10Calculator from infrastructure.postgres.config import PostgresConfig @@ -17,8 +18,10 @@ from infrastructure.postgres.engine import make_engine from orchestration.property_baseline_orchestrator import PropertyBaselineOrchestrator from orchestration.ara_first_run_pipeline import AraFirstRunPipeline from orchestration.ingestion_orchestrator import ( + ComparablesRepo, EpcFetcher, IngestionOrchestrator, + PredictionAttributesReader, SolarFetcher, ) from orchestration.modelling_orchestrator import ModellingOrchestrator @@ -65,12 +68,23 @@ def build_first_run_pipeline( epc_fetcher: EpcFetcher, geospatial_repo: GeospatialRepository, solar_fetcher: SolarFetcher, + comparables_repo: Optional[ComparablesRepo] = None, + prediction_attributes_reader: Optional[PredictionAttributesReader] = None, ) -> AraFirstRunPipeline: """Compose the real three-stage pipeline on a Unit-of-Work factory. Each stage opens its own unit(s) and commits per batch (ADR-0012); the handler no longer holds a session. The source clients are passed in because their config is not settled — see ``_source_clients_from_env``. + + EPC Prediction gap-fill (ADR-0031) is the predictor itself (pure) plus two + injected collaborators: the postcode-cohort source and the Landlord-Override + attributes reader. Both default to None, so the feature is **off** until they + are supplied — an EPC-less Property is then predicted into its predicted slot. + The cohort repo is injected (not built here) because its EPC client is the + same source client whose wiring is still pending; the attributes reader is the + `property_overrides` read adapter built separately. Until both are passed, + ingestion behaves exactly as before. """ return AraFirstRunPipeline( ingestion=IngestionOrchestrator( @@ -78,6 +92,9 @@ def build_first_run_pipeline( epc_fetcher=epc_fetcher, geospatial_repo=geospatial_repo, solar_fetcher=solar_fetcher, + comparables_repo=comparables_repo, + prediction_attributes_reader=prediction_attributes_reader, + epc_prediction=EpcPrediction(), ), baseline=PropertyBaselineOrchestrator( unit_of_work=unit_of_work, diff --git a/docs/HANDOVER_EPC_PREDICTION.md b/docs/HANDOVER_EPC_PREDICTION.md new file mode 100644 index 00000000..74b7c5f4 --- /dev/null +++ b/docs/HANDOVER_EPC_PREDICTION.md @@ -0,0 +1,144 @@ +# EPC Prediction — handover + +Branch `feature/epc-prediction` @ `d8f015fb` (37 ahead of `origin/main`; local-only, +not pushed). Tree clean. All ranked backlog (#1222–1228) closed. + +## What this is +Deterministic **neighbour synthesis** that predicts a structured `EpcPropertyData` +for an EPC-less UK home from its postcode-cohort of neighbours, so it flows through +the modelling pipeline. NOT ML. Validation methodology + harness are built; the work +is a measurable accuracy backlog. + +## READ FIRST (hold the full state) +- Memory `project_epc_prediction` — the spine: design, every commit, metrics, the + open fronts, gotchas. Read it first. +- `docs/adr/0029-…` (design, 6 forks) and `docs/adr/0030-…component-first.md` + (validation methodology — internalise: predict components, SAP/carbon/PE are a + calculator-floored *secondary* guard). +- Memory `feedback_per_component_best_method` — THE load-bearing principle this + session established (see below). +- Convention memories: `feedback_aaa_test_convention`, + `feedback_abs_diff_over_pytest_approx`, `feedback_commit_per_slice`, + `feedback_bigger_slices_for_uniform_work`. + +## The methodology (ADR-0030) +- **Component Accuracy is the PRIMARY signal** — predicted vs API-actual components, + calculator-free. SAP/CO₂/PE vs lodged is SECONDARY and calculator-floored. +- Source cohort keeps ALL cert vintages; only held-out validation TARGETS are + SAP 10.2 (`sap_version == 10.2`). +- The committed **Tier-1 gate** (`tests/domain/epc_prediction/test_component_accuracy_gate.py`) + runs the calculator-free scorer over the frozen anonymised fixture + (`tests/fixtures/epc_prediction/`, 36 SAP-10.2 targets) and asserts per-component + ratchet floors. Deterministic → exact. **Tighten-only**: when you improve a + component, bump its floor in the same commit. A *mapper or fixture change* + re-baselines floors (not a regression) — document it. + +## THE PRINCIPLE that drove this session +**Give each component its own best-fit synthesis method; never force one global +mechanism on all of them.** Validated head-to-head on the harness: +- Permanent fabric categoricals (wall, age) → **physical-similarity-weighted mode** + (size×age toward cohort centre). +- Time-varying components (roof insulation, glazing) → **recency-weighted mode**. +- Coherence-coupled cluster (heating) → **coherent whole-cluster donor**, NEVER + field-moded. +- Point-estimate scalar (floor area) → **cohort median** (MAD-minimising). +- Geo-varying components (age, wall, floor, glazing) → additionally **geo-proximity + weighted**; roof showed no geo signal → excluded. +All live in `domain/epc_prediction/epc_prediction.py` as composable weight vectors +(`_similarity_weights` × `_recency_weights` × `_geo_weights`, combined via `_combine`, +fed to `_weighted_mode`). + +## Closed this session (#1222 was done before; #1223–1228 this session) +- **#1226** per-prediction confidence (`PredictionConfidence`, compute-only; + agreement strongly predicts correctness, r=0.582). +- **#1224** physical-similarity-weighted categorical mode (wall_insul/roof/floor +1–3pp). +- **#1223** per-component, NOT a global recency template: floor-area→cohort median + + glazing→recency mode. (A global recency template was rejected — it disturbed the + coherence-coupled heating cluster.) +- **#1225** coherent heating donor (modal signature = fuel+category+cylinder, recency + tie-break). Biggest SAP lever: control 66→74%, SAP MAE 7.08→6.00 pre-merge. +- **#1228** PEI investigation — DISPROVED the unit-bug hypothesis (calc/lodged ratio + 1.06); reframed as calc floor + prediction-sensitivity. Report now surfaces CO₂/PEI + calc floors. (Open calc-branch remnant; largely closed by the main merge — see below.) +- **#1227** geo-proximity weighting — grilled, signal-checked (STRONG GO, esp. age), + built per-component. Batch `GeospatialRepository.coordinates_for_uprns`, coords + threaded onto `Comparable`/`PredictionTarget`, haversine kernel (`_GEO_SCALE_KM=0.1`, + gate-safe optimum). Intra-postcode lift modest (cohort = 1 postcode); the bigger + prize is cross-postcode expansion (deferred, needs dense corpus). +- **Corpus grown 40→150 postcodes** (`6e9f8312`); roof-insulation ±1 reporting. +- **Merged `origin/main`** (96 commits of calculator/mapper gap fixes, `0b2827e9`). + +## Current metrics (post-merge, 150-pc corpus, 514 SAP-10.2 targets) +Component Accuracy (calculator-free): wall 91.2, wall_insul 79.0, age 57.2 (±1 84.7), +roof_construction 78.2, floor_construction 79.6, heating_fuel 96.9, heating_category +95.7, heating_control 73.9, water_fuel 96.3, water_code 95.3, has_cylinder 89.7, +cylinder_insul 52.4, secondary 42.0, roof_insul 49.3 (±1 53.7), floor_insul 94.7, +room_in_roof 96.5, glazing 67.3, pv 98.8, solar 99.8. + +Floor area: **MAE 10.48 m² / MAPE 13.2% / typical (median actual) 61 m²** (cohort +median, unweighted). + +End-to-end vs lodged (SECONDARY, calculator-floored): +SAP pred MAE 6.25 / **calc floor 0.95** (was 1.57 pre-merge, orig 3.25 — the calc +fixes nearly validated the calculator, so the gap is now almost all prediction); +CO₂ 0.61 / floor 0.18; PEI 39.6 / floor 13.7. + +## Key files +- `domain/epc_prediction/epc_prediction.py` — `EpcPrediction.predict`: median floor + area + per-component weighted modes + glazing + heating donor + overrides. +- `domain/epc_prediction/comparable_properties.py` — `select_comparables` ladder; + `Comparable`/`PredictionTarget` (carry `coordinates`). +- `domain/epc_prediction/prediction_comparison.py` — `compare_prediction` (25 signals). +- `domain/epc_prediction/validation.py` — `iter_predictions` + `evaluate_component_accuracy` + (one scorer, calculator-free). +- `harness/epc_prediction_corpus.py` — `load_corpus` (+ `_coordinates.json` sidecar), + `load_coordinates`, `anonymise_payload`. +- `repositories/geospatial/` — `GeospatialRepository.coordinates_for_uprns` (batch). +- `scripts/validate_epc_prediction.py` (full report), `build_epc_prediction_fixture.py`, + `fetch_epc_prediction_corpus.py`, `fetch_corpus_coordinates.py`. + +## Open fronts (ranked) +1. **Geo-weighted floor-area median** — measured quick win: MAE 10.48→**9.77**, + MAPE 13.2→12.2%. Swap `_median_floor_area` for a geo-weighted median (reuse + `_geo_weights`); gate-check + ratchet the floor_area ceiling. Smallest next slice. +2. **Cross-postcode geo expansion** — the real geo payoff (distance-weighted cohort + beyond the single postcode). Needs a *densely-sampled* corpus (current 150 are + scattered, so a target's true geo-neighbours aren't in-corpus). Design grilled; + build a dense corpus first. +3. **Slice-5 production wiring** — `ComparableProperties` repo + the + `ModellingOrchestrator` owning the EPC *estimation* + distance calcs (a deliberate + shift from ADR-0029, which put the fallback in Ingestion). WRITE AN ADR when this + lands (it reverses where the fallback lives). Add a provenance marker + (`EpcPropertyData` has no predicted/source field yet). +4. Weak components with headroom only via NEW signals: age 57% / roof_insul 49% + (method-exhausted — confirmed recency/similarity/plain all tie-or-worse); + cylinder_insul / secondary are tiny-n. + +## How to run +- Token + S3 creds: `set -a; . backend/.env; set +a` (AWS creds mounted at `~/.aws`). +- Tests: `PYTHONPATH=. python -m pytest tests/domain/epc_prediction tests/harness/test_epc_prediction_corpus.py tests/repositories/geospatial -o addopts="" -p no:cacheprovider -q` +- Full report: `PYTHONPATH=. python scripts/validate_epc_prediction.py` (corpus + `/tmp/epc_prediction_corpus`). +- Gate is just a pytest test (deterministic, calculator-free). +- pyright strict, zero new errors, on every touched file. + +## In-flight / gotchas +- **Corpus lives in `/tmp/epc_prediction_corpus`** (gitignored; 150 pc / 3719 certs + + `_coordinates.json`). Backed up to `/workspaces/home/epc_prediction_corpus_backup` + (persistent host mount — survives container rebuild; `/tmp` does NOT). Coords backup + at `/workspaces/home/epc_prediction_corpus_coords_backup.json`. If `/tmp` is wiped, + restore from the backup before running the full report. +- **Coordinates**: OS Open-UPRN parquet is `DATA_BUCKET/spatial/` (boto3 — s3fs NOT + installed; read via `get_object`→BytesIO; `boto3.client` needs + `# pyright: ignore[reportUnknownMemberType, reportUnknownVariableType]`). The cert + payload carries `uprn` (the join key). The committed fixture ships `_coordinates.json` + (OGL OS OpenData) so the gate exercises geo without S3. +- **NEVER commit** the API token, `/tmp` corpus, or the coords cache. The + `tests/fixtures/epc_prediction` one is anonymised + intentional. +- Conventions: AAA test headers; `abs(x-y) <= tol` not `pytest.approx`; commit per + slice (stage by name, watch untracked); ADR-cite in commit messages; class is + `EpcPrediction` (no "Service"). +- Per-item workflow: implement TDD red→green on this branch → run the harness → + record before/after → ratchet gate floors → `gh issue comment` impact → close. +- The merge is **local, not pushed** — push only if asked. +- Update memory `project_epc_prediction` as state changes. diff --git a/docs/HANDOVER_EPC_PREDICTION_WIRING.md b/docs/HANDOVER_EPC_PREDICTION_WIRING.md new file mode 100644 index 00000000..789e0448 --- /dev/null +++ b/docs/HANDOVER_EPC_PREDICTION_WIRING.md @@ -0,0 +1,99 @@ +# EPC Prediction — production wiring handover (for Jun-te) + +The EPC Prediction **gap-fill** is wired end-to-end behind seams, with one real +dependency stubbed: reading an EPC-less Property's resolved Landlord Overrides. +This note is what's needed to finish it once your `property_overrides` read path +lands. Design is **ADR-0031**; terms in **CONTEXT.md** (EPC Prediction, Effective +EPC, EPC Anomaly Flag). + +## What's already built (slices 5a–5e, all on `feature/epc-prediction`) + +- **5a** `Property.predicted_epc` slot + a `"predicted"` `source_path` / + `effective_epc` branch — used only when there's no lodged EPC and no Site Notes + (a real source always wins). +- **5b** `ComparablePropertiesRepository.candidates_for(postcode)` + + `EpcComparablePropertiesRepository` adapter (postcode search → per-cert fetch → + batched UPRN→coords). Composes with `EpcClientService` + `GeospatialS3Repository`. +- **5c** EPC store `source` discriminator (`lodged` | `predicted`) so the two + coexist per property; `get_predicted_for_property` / `_for_properties`; + `PropertyPostgresRepository` hydrates `predicted_epc`. **Needs a DB migration — + see `docs/MIGRATION_NOTE_predicted_epc_source.md`.** +- **5d** `build_prediction_target(identity, coords, attributes)` + the eligibility + **gate** (unknown `property_type` → not predicted). Override attributes come + through the `PredictionTargetAttributesReader` port (the stub). +- **5e** `IngestionOrchestrator` wiring: when the three prediction collaborators + are injected, an EPC-less Property is predicted from its cohort and persisted to + the predicted slot. The collaborators are **optional** — unwired, ingestion is + unchanged. + +## Your part — three things + +### 1. Implement `PredictionTargetAttributesReader` (the stub) + +`repositories/property/prediction_target_attributes_reader.py` defines the port: +`attributes_for(property_id) -> PredictionTargetAttributes` (property_type, +built_form, wall_construction). Build the adapter as a read over the +`property_overrides` fact layer (the finaliser writes it via +`PropertyOverrideRepository.upsert_all`; you're adding the read side). + +**Code-space gotcha.** `select_comparables` filters +`comparable.epc.property_type == target.property_type`, and the cohort EPCs carry +gov **API codes** (e.g. `"0"`/`"2"`). Landlord Overrides resolve to enum *value* +strings (e.g. `"House"`). Your adapter must map override value → the API-code +space, or `property_type` will never match and every cohort comes back empty. +Same for `built_form`. (`domain/epc/property_type.py`, `built_form_type.py` are +the enums; `datatypes/epc/domain/epc_codes.csv` has the code table.) +`property_type` unresolved → return `PredictionTargetAttributes(property_type=None)` +so the gate skips the Property. + +### 2. Run the Drizzle migration + +`epc_property.source` column — full spec in +`docs/MIGRATION_NOTE_predicted_epc_source.md` (column + default `'lodged'` + +relax any `property_id` uniqueness to `(property_id, source)`). + +### 3. Pass the two collaborators at the composition root + +This is now wired: `build_first_run_pipeline` (in `applications/ara_first_run/handler.py`) +already constructs `epc_prediction=EpcPrediction()` and accepts the other two as +optional params that it threads into the `IngestionOrchestrator`. So the on-switch +is just supplying them once they exist: + +```python +build_first_run_pipeline( + ..., + comparables_repo=EpcComparablePropertiesRepository(epc_client, geospatial_repo), + prediction_attributes_reader=, # task #1 +) +``` + +`epc_client` is the same EPC source client behind `epc_fetcher` (the concrete +`EpcClientService` exposes `search_by_postcode` + `get_by_certificate_number`), +so build it alongside the other source clients in `_source_clients_from_env` +(pending #1136). Until **both** are passed, ingestion ignores prediction — no +orchestrator or handler edits needed, just the two arguments. + +## One open item — Validation Cohort exclusion + +A predicted-source Property has **no real lodged record**, so it must not be +scored as if it did (CONTEXT: Validation Cohort; ADR-0031 dec-3). There is **no +Validation-Cohort code path today** to exclude it from — when one is built (or in +any QA that compares `calc(effective_epc)` vs lodged), exclude on the structural +signal: + +```python +if prop.source_path == "predicted": + continue # predicted EPC — no ground truth to validate against +``` + +Note too: `PropertyBaselinePerformance.lodged` is derived from `effective_epc` +regardless of source (`property_baseline_orchestrator` → `lodged_performance`), so +for a predicted Property that "lodged" is synthesised, not real. Decide whether +baseline should null/flag it for predicted properties when this lands. + +## Anomaly dual-use (later, not now) + +Slice-5 is gap-fill only (`epc is None`). The slot model already supports +predicting for *every* Property to compare predicted vs lodged (**EPC Anomaly +Flags**) — see ADR-0031 dec-4. Reuses the same `ComparableProperties` repo + the +predicted slot. diff --git a/docs/MIGRATION_NOTE_predicted_epc_source.md b/docs/MIGRATION_NOTE_predicted_epc_source.md new file mode 100644 index 00000000..1abc9653 --- /dev/null +++ b/docs/MIGRATION_NOTE_predicted_epc_source.md @@ -0,0 +1,51 @@ +# Migration note — `epc_property.source` (predicted-EPC slot) + +**For the team to action before merging the EPC Prediction production-wiring +branch.** The model-side code is done and tested against the SQLModel-built test +DB; the **production Drizzle schema needs a matching column** that this repo does +not own. + +## What changed in code (this branch) + +Per **ADR-0031**, a Property can now hold a **lodged** EPC and a **predicted** EPC +(EPC Prediction gap-fill) at the same time. The two are distinguished by a new +`source` discriminator on the `epc_property` row: + +- `infrastructure/postgres/epc_property_table.py` — `EpcPropertyModel` gains + `source: str = Field(default="lodged")`. +- `repositories/epc/epc_postgres_repository.py` — `save(..., source="lodged")` + writes it; `_delete_for_property` is now per-source (idempotency no longer wipes + the other slot); `get_for_property` / `get_for_properties` filter `source = + 'lodged'`; new `get_predicted_for_property` / `get_predicted_for_properties` + read `source = 'predicted'`. + +The test database is built from the SQLModel mirrors via `create_all`, so tests +already exercise the column. **Production is not** — hence this note. + +## Required Drizzle migration + +On the `epc_property` table: + +1. **Add column** `source` — `text` (or your enum), **NOT NULL**, **default + `'lodged'`**. The default backfills every existing row as a real EPC, which is + correct (all current rows are lodged). +2. **Relax any single-row-per-property uniqueness.** If a unique constraint / + index exists on `epc_property(property_id)`, it must become + **`(property_id, source)`** — a property may now have one `lodged` row and one + `predicted` row. (Verify whether such a constraint exists; the SQLModel mirror + has none, but the production schema may.) +3. **Recommended index** `(property_id, source)` — every predicted/lodged read + filters on both columns. + +## Allowed values + +`source ∈ {'lodged', 'predicted'}` (see `EpcSource` in +`repositories/epc/epc_repository.py`). No other values are written. + +## Why + +ADR-0031: predicted EPCs are stored in their own slot rather than overwriting the +lodged `epc`, so (a) provenance is structural — the Validation Cohort excludes +predicted-sourced Properties and the UI flags them — and (b) lodged + predicted +coexist, which the planned **EPC Anomaly Flags** feature needs (compare a +Property's lodged EPC against its predicted one). diff --git a/docs/adr/0029-epc-prediction-from-comparable-properties.md b/docs/adr/0029-epc-prediction-from-comparable-properties.md new file mode 100644 index 00000000..fdd7ce73 --- /dev/null +++ b/docs/adr/0029-epc-prediction-from-comparable-properties.md @@ -0,0 +1,50 @@ +# EPC Prediction from Comparable Properties + +~30% of UK homes (typically long-tenure) have no EPC. **EPC Prediction** produces a Property's `EpcPropertyData` picture from its **Comparable Properties** so an EPC-less Property flows through the rest of the pipeline (Rebaselining, Bill Derivation, Modelling) unchanged. This records the load-bearing design decisions taken in a grill-with-docs session. + +## Status + +Accepted (design). Implementation pending. + +## Decisions + +### 1. Predict the physical picture, score it with our calculator — never a SAP scalar + +Prediction outputs a structured `EpcPropertyData` (building parts, windows, floor dimensions, construction + insulation, age band); SAP / CO2 / PEI / per-end-use kWh come from running `Sap10Calculator` on it. This is the same "assemble a picture, score once" mechanic as every other **Effective EPC** path (Landlord Overrides, Reduced-Field Synthesis), so a predicted Property is fully usable downstream (bills, measures, optimiser) — a directly-aggregated SAP scalar (legacy `SearchEpc`) would be a dead-end number. It also makes the component-classification accuracy metrics meaningful and keeps errors traceable to a wrong component rather than an opaque regression. + +### 2. Deterministic neighbour synthesis, not ML + +No trained model, no learned weights, no fit pipeline: filter a cohort, take categorical modes, copy a representative template, apply overrides. CONTEXT's prior "ML mechanism" framing is corrected — calling it ML invited the wrong architecture (training data, model artifacts, retraining). A future *learned-weighting* refinement is possible but separate, mirroring the calculator's flagged-future ML residual head. The domain class is `EpcPrediction` (no "Service" suffix, per the `BillDerivation` convention). + +### 3. Fetch-phase fallback, behind a domain service + a cohort repository port + +A pure **`EpcPrediction`** domain service (cohort of comparable `EpcPropertyData` in → predicted `EpcPropertyData` out) sits behind a **`ComparableProperties`** repository port that owns the cohort IO (postcode search → per-cert fetch, cached). It wires into `IngestionOrchestrator._fetch`: when `epc_fetcher.get_by_uprn` returns `None`, fetch the cohort and predict, persisting the picture **marked as predicted** (so the UI flags it and the Validation Cohort excludes it). Baseline and Modelling are untouched. Chosen over a fetcher-decorator (hides a heavy cohort fetch behind `get_by_uprn`) and a dedicated stage (a whole stage for "fill the gap when absent", duplicating IO ingestion already does). The heavy cohort IO stays visible in the no-unit IO phase. + +### 4. Hybrid synthesis: cohort-mode categoricals + a coherent structural template + +You cannot average a list of windows (counts differ; a mean orientation is meaningless) or building parts. So: +- **Homogeneous categoricals** (wall / roof / floor construction + insulation, age band) → cohort **mode** (robust to one oddball; drives the classification-rate metrics). +- **Structure & geometry** (building parts, per-window dimensions + orientations, floor dimensions) → copied wholesale from a **single representative comparable** chosen to be consistent with those modes and closest on geo + size (internally consistent for the calculator; drives the window-area / building-parts / floor-area residual metrics). +- **Landlord Overrides** and the known inputs are applied **on top**. + +Rejected: field-by-field aggregation (legacy — incoherent, may not score sensibly) and single-nearest-neighbour copied wholesale (one atypical neighbour sets the categoricals → weaker classification). + +### 5. Cohort selection: filter-then-relax ladder, weighted by geo × recency × similarity + +Selection hard-filters on identity (property type, built form) and any **known Landlord Override** (e.g. solid brick — the mixed-street border case) **while ≥ k comparables remain**, widening the geographic scope (postcode → postcode-prefix) or demoting a known to a strong weight when sparse. Survivors are weighted by **geographic proximity** (true coordinates via `GeospatialRepository`, not the legacy house-number proxy) **× recency** (newer EPCs are higher quality) **× physical similarity**; ~~pre-SAP10 / very old certs are dropped~~ (amended by [ADR-0030](0030-epc-prediction-validation-is-sap-version-aware-and-component-first.md): all vintages are kept — components are methodology-agnostic — with recency as a graduated weight; only the *validation target* must be SAP 10.2). So a known field acts twice: upstream on cohort selection, and again as an override on the final picture. + +### 6. Dual use: gap-fill (no EPC) and anomaly flags (has EPC) + +The same cohort + comparison machinery produces **EPC Anomaly Flags** for Properties that *do* have an EPC (e.g. "all neighbours are 1930s; this lodges 1950 — correct?") — advisory, surfaced for user review. The no-EPC gap-fill lands first; the always-on anomaly-flag wiring is a follow-on increment. + +## Validation + +> **Superseded by [ADR-0030](0030-epc-prediction-validation-is-sap-version-aware-and-component-first.md).** The SAP-version mixing in the cohort makes the lodged-SAP comparisons below (esp. the neighbour-mean baseline) invalid; validation is now component-first over SAP-10.2-only targets. The frozen-corpus leave-one-out shape stands. + +A **frozen postcode-clustered corpus** (a one-off fetch caches N postcodes × all their certs as `EpcPropertyData`) backs an offline, deterministic, repeatable **leave-one-out** harness over thousands of properties: drop a property with an EPC from its own cohort, predict it, compare predicted vs actual. Metrics: **classification rate** on wall / roof / floor construction + insulation and construction age band; **residuals** on SAP, total window area + window count, building-parts count, total floor area. SAP is reported three ways to attribute error — predicted-then-calculated vs (a) lodged SAP (end-to-end), (b) calculator-on-actual-components (isolates prediction error), (c) a direct neighbour-mean SAP baseline (proves predict-then-calculate beats naïve averaging). + +## Open (implementation-level) + +- **Provenance marker** on the picture (predicted vs real) — exact representation TBD; needed for the UI flag and Validation Cohort exclusion. +- **No-cohort fallback** when zero comparables survive even after relaxing (low-confidence national property-type + age defaults, or skip-with-flag). +- **Confidence signal** (cohort size + agreement) carried for the UI and anomaly thresholds. diff --git a/docs/adr/0030-epc-prediction-validation-is-sap-version-aware-and-component-first.md b/docs/adr/0030-epc-prediction-validation-is-sap-version-aware-and-component-first.md new file mode 100644 index 00000000..572724aa --- /dev/null +++ b/docs/adr/0030-epc-prediction-validation-is-sap-version-aware-and-component-first.md @@ -0,0 +1,53 @@ +# EPC Prediction validation is SAP-version-aware and component-first + +**Status: Accepted.** Supersedes the **Validation** section of [ADR-0029](0029-epc-prediction-from-comparable-properties.md) and amends its decision 5 (cohort selection). All other ADR-0029 decisions stand (predict a picture and score it; deterministic neighbour synthesis; fetch-phase fallback; hybrid mode + template synthesis; dual gap-fill / anomaly use). + +## Why this ADR exists + +ADR-0029's validation rested on a three-way SAP comparison, including a **neighbour-mean-of-lodged-SAP baseline** that predict-then-calculate was meant to beat. A second-order problem was invisible when that was written: the gov EPC register spans **multiple SAP spec versions**, and a property's neighbours are mostly *older* certs. In our development corpus only **~16% of certs are SAP 10.2** (`sap_version == 10.2`, schema 21.0.0 / 21.0.1); the rest were lodged under SAP 2012 (RdSAP 9.x). The same dwelling scores a *different* SAP under different spec versions, so: + +- **Averaging neighbours' lodged SAP is invalid** — it blends 2012 and 10.2 numbers to estimate a 10.2 target. The ADR-0029 "baseline" was never a fair comparator; on the real corpus it appeared to *beat* prediction purely as an artifact of this mixing. It is removed. +- **Comparing our calculator's output to a neighbour's lodged figure is only meaningful within a same-spec cohort** — the existing **SAP Spec Version** / **Validation Cohort** rule (ADR-0010) already said this for calculator validation; it applies equally here. + +Separately, measuring `calc(predicted)` against the held-out cert's **lodged** SAP conflates two unrelated errors: the *prediction* error and the calculator's own **API-path residual** (~3 SAP on random gov-API certs today — a known, *separate* workstream, since the calculator pins at 1e-4 only on the Elmhurst worksheets). A perfect prediction still scores ~3 off lodged. So lodged-SAP error is the wrong thing to tune prediction against. + +## Decisions + +### 1. The source cohort keeps all cert vintages; only the validation **target** is SAP 10.2 + +A building's physical **components** (wall / roof / floor / heating fuel / age band) are agnostic of the SAP methodology that rated them — a pre-SAP10 neighbour is valid *evidence* about the street. Dropping pre-SAP10 certs from the cohort (ADR-0029 decision 5) would discard ~84% of neighbours and gut prediction. So: **all vintages stay in the Comparable Properties cohort**, with recency as a graduated *weight* (never a hard drop), mattering most for the one component that genuinely goes stale — the heating system, when a boiler is replaced. Only the held-out **validation target** is restricted to `sap_version == 10.2`, the only vintage with full-fidelity lodged components to check against. (Target selection uses the API `sap_version` field directly, not the `inspection_date ≥ 2025-07-01` proxy.) + +### 2. **Component Accuracy** is the primary, calculator-independent signal + +Prediction is tuned against how closely the predicted `EpcPropertyData` *components* match the actual ones — **not** against any SAP score. Scored by leave-one-out over a 10.2 target: categoricals as a classification hit-rate (with `None` = not-applicable excluded from the denominator), numerics as a residual. Coverage spans the SAP-load-bearing components, led by **heating** (the proven dominant lever — ablating heating to the actual cuts the SAP error from ~7 to ~4.5): + +- **Heating** — main fuel, main category, main control, water-heating fuel/code, has-cylinder, cylinder insulation, secondary heating +- **Fabric** — wall / roof / floor construction + insulation, age band (plus a **±1-band** rate, since adjacent bands ≈ same U-value), room-in-roof +- **Glazing** — modal glazing type; window count + total-area residuals +- **Counts / geometry** — door count, building-parts count, floor area +- **Renewables** — PV presence, solar water heating + +Load-bearing principle: **predict the components well and correct SAP / carbon / PE fall out once calculator gaps close.** Component Accuracy makes progress even while the calculator moves underneath us. + +### 3. `calc(predicted)` vs **API-lodged** SAP / carbon / PE is a secondary, calculator-floored check — and two comparisons are rejected + +The end-to-end number — does the predicted picture score like the official 10.2 EPC — is reported but **not** the thing we drive to zero: it is floored by the calculator's API-path residual and improves as *both* prediction and the calculator workstream land. Carbon and PE are *more* version-sensitive than SAP (grid factors shifted sharply between SAP 2012 and 10.2), so they too are compared only on 10.2 targets. + +Rejected: +- **`calc(predicted)` vs `calc(actual)`** — cancels (and so *hides*) calculator error against a *circular* ground truth (our own calculator); a systematically wrong prediction in the calculator's blind spot would score perfectly. Not a validation signal; at most an internal attribution diagnostic. +- **neighbour-mean-of-lodged-SAP baseline** — mixes SAP versions (see above). + +No synthetic SAP-weighted Component Accuracy index: weighting components by SAP impact reintroduces the calculator. The per-component table stays flat; the end-to-end MAE *is* the holistic rollup. + +### 4. Two validation tiers, one shared scorer + +- **Tier 1 — committed CI gate.** A small, **anonymized**, frozen fixture under `tests/fixtures/` (addresses hashed — the predictor uses address only as a dedup key — `post_town` dropped; postcode + component fields retained; gov data is OGL). A **ratcheting regression gate**: each per-component floor / residual ceiling is the currently-measured value and only ever *tightens* (honouring the repo's no-tolerance-widening ethos); a regression fails the build. End-to-end SAP / carbon / PE thresholds are loose and explicitly **calculator-floored** — gross-regression guards, not targets. Gates when the fixture is present; skips with a message otherwise. +- **Tier 1.5 — S3-hosted scale run (near-term).** A few-thousand-cert anonymised corpus stored in **S3** rather than committed to git (too large to commit, but far more statistically stable than the 36-target gate fixture). The integration test pulls it to a temp dir and runs the *same* `load_corpus` + `evaluate_component_accuracy`, then reports / asserts. This is the immediate realization of "validate at scale" — it reuses the committed-fixture machinery wholesale (only the data *source* differs) and needs no bulk-export streaming. Its numbers re-baseline the Tier-1 floors. +- **Tier 2 — offline national battle-test (deferred).** Built on `harness/epc_bulk.py` (streams the gov **bulk export** via HTTP range requests, filtered by `sap_version`) and `harness/cohort.py` (offline sweep that **captures per-cert raises** instead of aborting). Streams the register and **buckets by postcode** — because bulk is the *whole* register, every postcode is dense, giving national breadth *and* dense cohorts at once. Over tens of thousands of 10.2 targets it emits the Component Accuracy table, the end-to-end MAE, **and a failure taxonomy** (unsupported-schema, mapper raise, calculator raise, no-cohort, no-10.2-target) — the battle-test half. Not committed, not CI-gated; its numbers periodically **re-baseline the Tier-1 floors**. + +All tiers run the *same* `evaluate_component_accuracy` / `compare_prediction` logic over `load_corpus` — one scorer, three data sources (committed fixture, S3 corpus, bulk stream). + +## Consequences + +- ADR-0029's "Validation" section and its decision-5 clause "pre-SAP10 / very old certs are dropped" are superseded by the above. The CONTEXT terms **Comparable Properties** (all-vintage source) and **Component Accuracy** (new) are updated to match. +- The Tier-1 fixture is the first committed gov-EPC fixture sized for *statistical* stability rather than worksheet-exact pinning — a deliberate departure from the repo's 1e-4 pin convention, justified by prediction's irreducible error. diff --git a/docs/adr/0031-epc-prediction-production-wiring.md b/docs/adr/0031-epc-prediction-production-wiring.md new file mode 100644 index 00000000..d6b21f35 --- /dev/null +++ b/docs/adr/0031-epc-prediction-production-wiring.md @@ -0,0 +1,87 @@ +# EPC Prediction production wiring + +ADR-0029 settled *how* EPC Prediction synthesises a Property's `EpcPropertyData` +from its **Comparable Properties**; this records *how it wires into the running +pipeline* — where estimation runs, how a predicted EPC is stored and told apart +from a lodged one, and which Properties are eligible. Resolved in a +grill-with-docs session after the algorithm + validation harness were built and +the accuracy backlog (#1222–1228) closed. + +## Status + +Accepted (design). Refines ADR-0029 decision 3. Implementation pending (slice 5). + +## Decisions + +### 1. Estimation runs in Ingestion — the #1227 "shift to Modelling" is dropped + +The cohort fetch + predict happens in `IngestionOrchestrator`, when +`epc_fetcher.get_by_uprn` returns `None` — upholding ADR-0029 decision 3. A +design note from issue #1227 had proposed moving estimation (and its distance +calcs) into `ModellingOrchestrator`; that is reversed here. Ingestion is already +the EPC-acquisition phase and *already resolves the Property's coordinates* +(`spatial`), so it can run the geo-weighted prediction with no new IO surface; +the First Run stages communicate **only through persisted state** (the pipeline +threads just `property_ids`, each stage reloads the `Property`), so a prediction +produced in Modelling would either have to be persisted there anyway or +recomputed every run. No rationale for the Modelling shift survived review. +Baseline and Modelling stay untouched — they read a populated `effective_epc`. + +### 2. The predicted EPC is persisted in a distinct slot, never overwriting the lodged one + +Because stages communicate via persisted state, the prediction **must be saved** +for Modelling to see it — in-memory-only would never reach stage 3. It is stored +as a **distinct predicted-EPC slot** on the Property (the EPC table reused with a +`source` discriminator — `lodged` / `predicted`), so a lodged EPC and a predicted +EPC can **coexist** on one Property. Coexistence is load-bearing: it is what lets +the same cohort machinery produce **EPC Anomaly Flags** for Properties that *do* +have an EPC (the dual-use named in ADR-0029), and it means a later real-EPC fetch +fills its own slot without the predicted one muddying provenance. Rejected: a +single EPC slot with an `is_predicted` flag — it cannot hold both, so it forecloses +anomaly detection and makes "lodged later arrives" ambiguous. + +### 3. Provenance is structural — on the Property, not on `EpcPropertyData` + +`EpcPropertyData` gains no `predicted` / `source` field. Which slot the picture +came from *is* its provenance. `Property.effective_epc` / `source_path` gain a +`"predicted"` branch, used only when there is no lodged EPC **and** no Site Notes +(the existing precedence is unchanged; a real source always wins). The +**Validation Cohort** then excludes any Property whose `effective_epc` resolves +via the predicted slot — it has no same-spec lodged ground truth — and the UI +flags it as predicted. Keeping `EpcPropertyData` clean means every downstream +consumer (calculator, generators, bill derivation) is unchanged and oblivious to +how the picture was sourced, exactly as for Landlord-Override and Reduced-Field +pictures. + +### 4. Slice 5 is gap-fill only; always-predict (anomaly) is a follow-on + +Prediction runs only when `epc is None`. Predicting for *every* Property to +compare against its lodged EPC (EPC Anomaly Flags) is real and the slot model +supports it, but it triples the ingestion cohort IO and needs its own +comparison + divergence-threshold + UI surface — so it does not ride in on the +wiring slice. The predicted-EPC slot and the `ComparableProperties` repository +this slice introduces are exactly what the anomaly capability reuses. + +### 5. A known property type is required — eligibility is gated, never defaulted + +A `PredictionTarget` needs `postcode` (from `PropertyIdentity`), `coordinates` +(geospatial), and `property_type` + `built_form` + `wall_construction` from +**Landlord Overrides**. `property_type` is the **hard** cohort filter (a flat +must not be sized from houses), so it is a **required input**: a Property whose +property type is genuinely unknown is **gated out** before prediction — flagged +un-predictable, never predicted from a mixed-type cohort and never given a +national default. (An Ordnance Survey `postcode_search` source can supply +property type more broadly than landlord input does; wiring it is a later +enhancement that widens the eligible population — out of scope here.) The +`ComparableProperties` repository port deferred by ADR-0029 is built in this +slice: it owns the cohort IO (postcode search → per-cert fetch → UPRN→coordinate +resolution) and returns candidate `Comparable`s for the domain +`select_comparables` to filter. + +## Consequences + +- A schema change: the EPC store gains a `source` discriminator (or equivalent), + and the Property repository a `get_predicted_for_property` read. +- Slice 5's reach is bounded to EPC-less Properties with a landlord-supplied + property type. The `postcode_search` integration is the lever to broaden it. +- `EpcPropertyData` stays unchanged, so no downstream consumer is touched. diff --git a/domain/epc_prediction/README.md b/domain/epc_prediction/README.md new file mode 100644 index 00000000..794785be --- /dev/null +++ b/domain/epc_prediction/README.md @@ -0,0 +1,69 @@ +# EPC Prediction + +Predict a structured `EpcPropertyData` for an **EPC-less** UK home from its +postcode neighbours, so it flows through the rest of the pipeline (Baseline, Bill +Derivation, Modelling) exactly like a home that has an EPC. It is **deterministic +neighbour synthesis** — cohort modes + a coherent template + per-component +weighting — **not ML**. ~30% of UK homes (typically long-tenure) have no EPC. + +- **Design**: [ADR-0029](../../docs/adr/0029-epc-prediction-from-comparable-properties.md) (algorithm), + [ADR-0030](../../docs/adr/0030-epc-prediction-validation-is-sap-version-aware-and-component-first.md) (validation), + [ADR-0031](../../docs/adr/0031-epc-prediction-production-wiring.md) (production wiring). +- **Glossary**: see *EPC Prediction*, *Comparable Properties*, *Component + Accuracy*, *EPC Anomaly Flag* in [CONTEXT.md](../../CONTEXT.md). + +## The flow (gap-fill) + +``` +Ingestion: a Property has no lodged EPC (epc_fetcher.get_by_uprn → None) + │ + ├─ resolve its attributes (property_type/built_form/wall) from Landlord Overrides + │ └─ property_type unknown? → GATED OUT, not predicted (no national defaults) + ├─ build a PredictionTarget (postcode + coordinates + attributes) + ├─ ComparableProperties repo: fetch the postcode cohort (search → per-cert → coords) + ├─ select_comparables(): filter to the reference cohort (type-hard, built-form-soft) + ├─ EpcPrediction.predict(): synthesise the picture (modes + template + donor + weights) + └─ persist to the Property's PREDICTED slot (source = "predicted") + │ +Modelling/Baseline: Property.effective_epc returns the predicted picture + (source_path == "predicted"), scored like any other Effective EPC. +``` + +A lodged EPC always wins — prediction is last-resort gap-fill. + +## Where the pieces live + +| Concern | File | +|---|---| +| Synthesis (modes, template, heating donor, geo/recency/similarity weights) | `epc_prediction.py` | +| Cohort selection (filter-then-relax ladder) | `comparable_properties.py` | +| Target assembly + eligibility gate | `prediction_target.py` | +| Cohort IO port + EPC-API/geospatial adapter | `repositories/comparable_properties/` | +| Predicted-EPC persistence (`source` discriminator) | `repositories/epc/` | +| `predicted` source path on the aggregate | `domain/property/property.py` | +| Ingestion wiring (gate → predict → persist) | `orchestration/ingestion_orchestrator.py` | +| Validation (leave-one-out, component-first) + ratcheting gate | `validation.py`, `tests/domain/epc_prediction/test_component_accuracy_gate.py` | + +## See it run + +`tests/e2e/test_epc_prediction_e2e.py` — the whole flow against the real DB + +repos, only the external HTTP clients faked. Start there. + +## Status + +Algorithm + validation: **built**. Production gap-fill wiring: **built behind +seams** (slices 5a–5e). Two things finish it — a DB migration and the +`property_overrides` read adapter — see +[the wiring handover](../../docs/HANDOVER_EPC_PREDICTION_WIRING.md) and +[the migration note](../../docs/MIGRATION_NOTE_predicted_epc_source.md). +**EPC Anomaly Flags** (predict for *every* home, compare to lodged) is the +designed next step the storage already supports. + +## Run the tests + +```bash +PYTHONPATH=. python -m pytest tests/e2e/test_epc_prediction_e2e.py \ + tests/domain/epc_prediction tests/orchestration/test_ingestion_prediction.py \ + tests/repositories/comparable_properties tests/repositories/epc/test_epc_predicted_slot.py \ + -o addopts="" -q +``` diff --git a/domain/epc_prediction/__init__.py b/domain/epc_prediction/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/domain/epc_prediction/comparable_properties.py b/domain/epc_prediction/comparable_properties.py new file mode 100644 index 00000000..13e33cf7 --- /dev/null +++ b/domain/epc_prediction/comparable_properties.py @@ -0,0 +1,126 @@ +"""Comparable Properties selection for EPC Prediction (ADR-0029). + +Given a `PredictionTarget` (the known inputs for an EPC-less Property) and the +raw postcode cohort of candidate `ComparableProperty` objects, `select_comparables` +chooses the reference cohort EPC Prediction synthesises from. Pure domain logic — +the cohort IO (postcode search → per-cert fetch) lives behind a repository port. +""" + +from __future__ import annotations + +from dataclasses import dataclass +from datetime import date +from typing import Callable, Optional + +from datatypes.epc.domain.epc_property_data import EpcPropertyData +from domain.epc_prediction.prediction_target import PredictionTarget +from domain.geospatial.coordinates import Coordinates + +# Default floor on the cohort: a conditioning filter (built form, a known +# override) is applied only while at least this many comparables survive it, +# else it is relaxed (ADR-0029 filter-then-relax ladder). +_DEFAULT_MINIMUM_COHORT = 5 + + +@dataclass(frozen=True) +class ComparableProperty: + """One candidate neighbour: its structured `EpcPropertyData` picture plus the + register metadata not carried on the cert (identity for leave-one-out + exclusion; recency + address for weighting + re-lodgement dedup).""" + + epc: EpcPropertyData + certificate_number: str + address: Optional[str] = None + registration_date: Optional[date] = None + # Resolved from the neighbour's UPRN at the boundary (the harness / modelling + # orchestrator), so the pure predictor can weight by physical distance to the + # target without an IO dependency. None when no UPRN/coordinate is available. + coordinates: Optional[Coordinates] = None + + +@dataclass(frozen=True) +class ComparableProperties: + """The selected reference cohort for a `PredictionTarget`.""" + + members: tuple[ComparableProperty, ...] + + +def _maybe_filter( + cohort: list[ComparableProperty], + predicate: Callable[[ComparableProperty], bool], + *, + active: bool, + minimum_cohort: int, +) -> list[ComparableProperty]: + """Apply a conditioning filter only while it leaves at least + `minimum_cohort` comparables; otherwise relax it (keep the pre-filter + cohort) — the filter-then-relax ladder (ADR-0029).""" + if not active: + return cohort + filtered = [c for c in cohort if predicate(c)] + return filtered if len(filtered) >= minimum_cohort else cohort + + +def select_comparables( + target: PredictionTarget, + candidates: list[ComparableProperty], + *, + minimum_cohort: int = _DEFAULT_MINIMUM_COHORT, +) -> ComparableProperties: + """Select the ComparableProperty Properties for `target` from the raw postcode + cohort. The register lists every historical lodgement, so first dedupe each + address to its latest cert (one comparable per real neighbour); then property + type is an always-hard filter (a flat is never a comparable for a house) and + built form is a conditioning filter on the relax ladder.""" + cohort = _dedupe_to_latest_per_address(candidates) + cohort = [ + c for c in cohort if c.epc.property_type == target.property_type + ] + cohort = _maybe_filter( + cohort, + lambda c: c.epc.built_form == target.built_form, + active=target.built_form is not None, + minimum_cohort=minimum_cohort, + ) + cohort = _maybe_filter( + cohort, + lambda c: _main_wall_construction(c) == target.wall_construction, + active=target.wall_construction is not None, + minimum_cohort=minimum_cohort, + ) + return ComparableProperties(members=tuple(cohort)) + + +def _dedupe_to_latest_per_address( + candidates: list[ComparableProperty], +) -> list[ComparableProperty]: + """Collapse the register's re-lodgements: keep one comparable per address — + the latest by registration date (ties broken by certificate number, for + determinism) — so a re-lodged neighbour does not count more than once. + Candidates with no address are passed through untouched (each is its own + neighbour). Input order is otherwise preserved.""" + latest: dict[str, ComparableProperty] = {} + passthrough: list[ComparableProperty] = [] + for c in candidates: + if c.address is None: + passthrough.append(c) + continue + incumbent = latest.get(c.address) + if incumbent is None or _recency_key(c) > _recency_key(incumbent): + latest[c.address] = c + return list(latest.values()) + passthrough + + +def _recency_key(comparable: ComparableProperty) -> tuple[date, str]: + """Sort key making the most recent (then highest cert number) win. A missing + registration date sorts oldest.""" + return ( + comparable.registration_date or date.min, + comparable.certificate_number, + ) + + +def _main_wall_construction(comparable: ComparableProperty) -> object: + """The main building part's wall construction, or None when no part lodged.""" + parts = comparable.epc.sap_building_parts + return parts[0].wall_construction if parts else None diff --git a/domain/epc_prediction/epc_prediction.py b/domain/epc_prediction/epc_prediction.py new file mode 100644 index 00000000..bcd4f1cf --- /dev/null +++ b/domain/epc_prediction/epc_prediction.py @@ -0,0 +1,546 @@ +"""EPC Prediction synthesis (ADR-0029). + +`EpcPrediction.predict` turns the selected `ComparableProperties` into a +predicted `EpcPropertyData`: copy a coherent representative template's structure +(building parts, windows, geometry), set the homogeneous categoricals to the +recency-weighted cohort mode, then apply Landlord Overrides on top. Pure domain +logic — deterministic neighbour synthesis, not ML. +""" + +from __future__ import annotations + +import copy +import math +import statistics +from collections import Counter, defaultdict +from dataclasses import dataclass +from datetime import date +from typing import Callable, Iterable, Optional, Union + +from datatypes.epc.domain.epc_property_data import ( + EpcPropertyData, + MainHeatingDetail, + SapBuildingPart, +) +from domain.epc_prediction.comparable_properties import ( + ComparableProperty, + ComparableProperties, +) +from domain.epc_prediction.prediction_target import PredictionTarget +from domain.geospatial.coordinates import Coordinates + + +@dataclass(frozen=True) +class PredictionConfidence: + """A compute-only confidence signal for a prediction (ADR-0029 open item). + + `cohort_size` is the number of ComparableProperty Properties the prediction drew on; + `component_agreement` maps a homogeneous component to the cohort's *agreement* + — the modal value's share (0..1) of the neighbours that lodge one. A small or + split cohort flags a component downstream may want to treat cautiously (e.g. + the per-dwelling fields with a low accuracy ceiling). Surfacing / persisting + this is a separate HITL follow-up; here it is computed only. + """ + + cohort_size: int + component_agreement: dict[str, float] + + def agreement(self, component: str) -> Optional[float]: + """The cohort's modal-value share for a component, or None when no + neighbour lodges one (it was not applicable).""" + return self.component_agreement.get(component) + + +class EpcPrediction: + """Synthesises a predicted `EpcPropertyData` from ComparableProperty Properties.""" + + def predict( + self, target: PredictionTarget, comparables: ComparableProperties + ) -> EpcPropertyData: + """Predict the target's EPC picture: copy a representative template's + structure (coherent for the calculator), set the predicted floor area to + the cohort median (the best point estimate of the target's size, decoupled + from the one template's own area), then set the homogeneous categoricals + to the cohort mode.""" + template: ComparableProperty = self._template(comparables) + predicted: EpcPropertyData = copy.deepcopy(template.epc) + predicted.total_floor_area_m2 = _geo_weighted_floor_area( + comparables.members, target.coordinates + ) + self._apply_categorical_modes(predicted, comparables, target.coordinates) + self._apply_glazing_mode(predicted, comparables, target.coordinates) + self._apply_heating_donor(predicted, comparables) + self._apply_overrides(predicted, target) + return predicted + + @staticmethod + def _apply_heating_donor( + predicted: EpcPropertyData, comparables: ComparableProperties + ) -> None: + """Replace the structural template's heating with a coherent donor's whole + `SapHeating` cluster (ADR-0029; issue #1225). Heating sub-fields can't be + field-moded without breaking system coherence (e.g. a fuel that doesn't + match the emitter), so the cluster is copied as a unit from a single + neighbour: the one matching the cohort's modal heating *signature* (main + fuel + category + cylinder presence), the most recent among those matches + (a recent cert reflects the current system). This makes the predicted + heating both representative and internally coherent, rather than whatever + the size-representative template happened to carry. No donor (no neighbour + lodges a main heating system) leaves the template's heating in place.""" + donor = _heating_donor(comparables.members) + if donor is None: + return + predicted.sap_heating = copy.deepcopy(donor.epc.sap_heating) + predicted.has_hot_water_cylinder = donor.epc.has_hot_water_cylinder + predicted.solar_water_heating = donor.epc.solar_water_heating + + @staticmethod + def _apply_glazing_mode( + predicted: EpcPropertyData, + comparables: ComparableProperties, + target_coordinates: Optional[Coordinates], + ) -> None: + """Set every window's glazing type to the recency- and geo-weighted cohort + mode. Glazing is retrofitted over a dwelling's life (single → double), so + a recent neighbour reflects the current state (recency, like roof + insulation); it also varies geographically (retrofit waves by street), so + a nearer neighbour counts for more. NOT the plain mode (which regressed) + or the template copy. The window geometry (size, count) is left on the + template; only the glazing categorical moves.""" + members = comparables.members + weights = _combine( + _recency_weights(members), _geo_weights(target_coordinates, members) + ) + glazing = _weighted_mode( + (_comparable_modal_glazing(c) for c in members), weights + ) + if glazing is None: + return + for window in predicted.sap_windows: + window.glazing_type = glazing + + def confidence( + self, comparables: ComparableProperties + ) -> PredictionConfidence: + """Compute the per-prediction confidence from the cohort: its size plus, + for each homogeneous categorical, the modal value's share among the + neighbours that lodge one (ADR-0029). Compute-only — it never alters the + prediction, only annotates how much the cohort agreed.""" + members: tuple[ComparableProperty, ...] = comparables.members + agreement: dict[str, float] = {} + for attr in _MAIN_PART_CATEGORICALS: + share: Optional[float] = _modal_share( + _main_part_attr(c, attr) for c in members + ) + if share is not None: + agreement[attr] = share + for attr in _FLOOR_DIM_CATEGORICALS: + floor_share: Optional[float] = _modal_share( + _main_floor_attr(c, attr) for c in members + ) + if floor_share is not None: + agreement[attr] = floor_share + return PredictionConfidence( + cohort_size=len(members), component_agreement=agreement + ) + + @staticmethod + def _template(comparables: ComparableProperties) -> ComparableProperty: + """The representative comparable whose structure seeds the prediction: + the member whose floor area is closest to the cohort median. A single + neighbour's geometry is copied wholesale, so a size-representative + template keeps the prediction off the cohort's size outliers (ADR-0029 + decision 4: closest on size).""" + members: tuple[ComparableProperty, ...] = comparables.members + median_area: float = statistics.median( + c.epc.total_floor_area_m2 for c in members + ) + return min( + members, + key=lambda c: abs(c.epc.total_floor_area_m2 - median_area), + ) + + @staticmethod + def _apply_categorical_modes( + predicted: EpcPropertyData, + comparables: ComparableProperties, + target_coordinates: Optional[Coordinates], + ) -> None: + """Override the predicted picture's homogeneous categoricals — wall / + roof / floor construction + insulation, age band — with the cohort mode + (robust to an atypical template, per ADR-0029 decision 4). The mode is + physically-similarity-weighted (decision 5): each neighbour's vote decays + with its distance from the cohort's physical centre, so the mode leans on + the most representative neighbours. The components that vary + *geographically* — age band, wall construction, floor construction (homes + built together cluster) — additionally take a geo-proximity weight, so a + nearer neighbour counts for more; the rest (e.g. roof construction, which + showed no geo signal) do not. The template still supplies the geometry; + only the categorical codes move to the mode.""" + if not predicted.sap_building_parts: + return + main: SapBuildingPart = predicted.sap_building_parts[0] + members = comparables.members + similarity: list[float] = _similarity_weights(members) + geo: list[float] = _geo_weights(target_coordinates, members) + similarity_geo: list[float] = _combine(similarity, geo) + for attr in _MAIN_PART_CATEGORICALS: + if attr in _RECENCY_WEIGHTED_CATEGORICALS: + mode = _recency_weighted_mode(members, attr) + else: + weights = ( + similarity_geo + if attr in _GEO_WEIGHTED_CATEGORICALS + else similarity + ) + mode = _weighted_mode( + (_main_part_attr(c, attr) for c in members), weights + ) + if mode is not None: + setattr(main, attr, mode) + floor_dims = main.sap_floor_dimensions + if floor_dims: + for attr in _FLOOR_DIM_CATEGORICALS: + floor_weights = ( + similarity_geo + if attr in _GEO_WEIGHTED_CATEGORICALS + else similarity + ) + floor_mode = _weighted_int_mode( + (_main_floor_attr(c, attr) for c in members), floor_weights + ) + if floor_mode is not None: + setattr(floor_dims[0], attr, floor_mode) + + @staticmethod + def _apply_overrides( + predicted: EpcPropertyData, target: PredictionTarget + ) -> None: + """Apply the known Landlord Overrides on top of the estimate — a known + value always wins over the cohort mode (ADR-0029).""" + if not predicted.sap_building_parts: + return + if target.wall_construction is not None: + predicted.sap_building_parts[0].wall_construction = ( + target.wall_construction + ) + + +# The homogeneous categoricals carried directly on the main building part. Floor +# categoricals live on the main floor dimension and glazing on the windows; both +# are handled separately. +_MAIN_PART_CATEGORICALS: tuple[str, ...] = ( + "wall_construction", + "wall_insulation_type", + "construction_age_band", + "roof_construction", + "roof_insulation_thickness", +) + +# Integer-coded categoricals on the main building part's ground-floor dimension. +_FLOOR_DIM_CATEGORICALS: tuple[str, ...] = ( + "floor_construction", + "floor_insulation", +) + +# Categoricals whose physical value CHANGES over time (e.g. loft top-ups), so a +# recent neighbour reflects the current state better than an old one — these take +# a recency-WEIGHTED mode. Permanent categoricals (wall / age) take the plain +# mode: recency-weighting them was net-negative on the validation corpus (it +# discards data that is still valid). `_RECENCY_TAU_YEARS` is the exponential +# decay constant (≈2.8-year half-life), chosen on the corpus (roof insulation +# +4pp / +12pp on the fixture). +_RECENCY_WEIGHTED_CATEGORICALS: frozenset[str] = frozenset( + {"roof_insulation_thickness"} +) +_RECENCY_TAU_YEARS: float = 4.0 +_DAYS_PER_YEAR: float = 365.0 + +# Physical-similarity weighting of the categorical mode (ADR-0029 decision 5): a +# comparable's vote decays exponentially with how far it sits from the cohort's +# physical centre — floor area from the median, construction age from the modal +# band — so an outlier-sized or outlier-era neighbour can't sway the mode. Scales +# chosen on the validation corpus (wall-insulation +2.8pp / roof +1.1pp / +# floor-construction +2.4pp / floor-insulation +1.2pp; gate-safe, no regression). +_SIMILARITY_SIZE_SCALE_M2: float = 20.0 +_SIMILARITY_AGE_WEIGHT: float = 0.5 +_AGE_BAND_ORDER: str = "ABCDEFGHIJKL" + +# Geo-proximity weighting (#1227): a neighbour's vote decays with its haversine +# distance to the target, so a closer neighbour counts for more. Applied only to +# the components that showed a clear distance signal in the corpus — age band, +# wall + floor construction, glazing (homes built / retrofitted together cluster); +# roof construction showed no decay, so it is excluded. `_GEO_SCALE_KM` is the +# kernel length-scale (chosen on the corpus). Off when the target has no +# coordinates; neutral for a neighbour with none (never penalised for missing +# data). floor_construction lives on the floor dimension but shares this set. +_GEO_SCALE_KM: float = 0.1 +_GEO_WEIGHTED_CATEGORICALS: frozenset[str] = frozenset( + {"construction_age_band", "wall_construction", "floor_construction"} +) + + +def _main_part_attr( + comparable: ComparableProperty, attr: str +) -> Optional[Union[int, str]]: + parts: list[SapBuildingPart] = comparable.epc.sap_building_parts + return getattr(parts[0], attr) if parts else None + + +def _main_floor_attr(comparable: ComparableProperty, attr: str) -> Optional[int]: + parts: list[SapBuildingPart] = comparable.epc.sap_building_parts + if not parts: + return None + dims = parts[0].sap_floor_dimensions + value: Optional[int] = getattr(dims[0], attr) if dims else None + return value + + +def _geo_weighted_floor_area( + members: tuple[ComparableProperty, ...], + target_coordinates: Optional[Coordinates], +) -> float: + """The cohort's geo-proximity-weighted median floor area — the point estimate + of the target's size. The median minimises mean absolute deviation, so it is + the best single guess for an unknown neighbour's area; geo-weighting it leans + the estimate toward the nearer neighbours, because homes built together share + a footprint (the same street signal that already weights age / wall, #1227). + Reduces exactly to the plain median when geo weighting is off (no target + coordinates ⇒ uniform weights), preserving the MAD-minimising guarantee. Set + independently of the structural template (the calculator derives heat loss + from the building-part geometry, not this scalar, so the two need not agree).""" + weights: list[float] = _geo_weights(target_coordinates, members) + return _weighted_median( + [ + (comparable.epc.total_floor_area_m2, weight) + for comparable, weight in zip(members, weights) + ] + ) + + +def _weighted_median(values_weights: list[tuple[float, float]]) -> float: + """The weighted median of (value, weight) pairs: the smallest value at which + the cumulative weight reaches half the total. When a value's weight splits the + total exactly in half, the two straddling values are averaged — so with + uniform weights this reduces exactly to `statistics.median` (including the + even-count midpoint average). Assumes a non-empty input.""" + ordered: list[tuple[float, float]] = sorted(values_weights) + half: float = sum(weight for _, weight in ordered) / 2 + cumulative: float = 0.0 + for index, (value, weight) in enumerate(ordered): + cumulative += weight + if cumulative > half: + return value + if cumulative == half and index + 1 < len(ordered): + return (value + ordered[index + 1][0]) / 2 + return ordered[-1][0] + + +def _age_band_index(comparable: ComparableProperty) -> Optional[int]: + """The main building part's construction-age-band position (A=0 … L=11), or + None when no recognisable band is lodged.""" + band = _main_part_attr(comparable, "construction_age_band") + if isinstance(band, str) and band in _AGE_BAND_ORDER: + return _AGE_BAND_ORDER.index(band) + return None + + +def _similarity_weights(members: tuple[ComparableProperty, ...]) -> list[float]: + """A physical-similarity weight per comparable (ADR-0029 decision 5): the + product of an exponential decay in its floor-area distance from the cohort + median and in its age-band distance from the cohort's modal band. A neighbour + missing a size or age contributes a neutral weight on that axis, so it is + never penalised for absent data. Aligned with `members` index-for-index.""" + if not members: + return [] + median_area: float = statistics.median( + c.epc.total_floor_area_m2 for c in members + ) + age_indices: list[Optional[int]] = [_age_band_index(c) for c in members] + present_ages: list[int] = [i for i in age_indices if i is not None] + modal_age: Optional[float] = ( + statistics.median(present_ages) if present_ages else None + ) + weights: list[float] = [] + for comparable, age_index in zip(members, age_indices): + size_term: float = math.exp( + -abs(comparable.epc.total_floor_area_m2 - median_area) + / _SIMILARITY_SIZE_SCALE_M2 + ) + age_term: float = ( + math.exp(-_SIMILARITY_AGE_WEIGHT * abs(age_index - modal_age)) + if modal_age is not None and age_index is not None + else 1.0 + ) + weights.append(size_term * age_term) + return weights + + +def _weighted_mode( + values: Iterable[Optional[Union[int, str]]], weights: list[float] +) -> Optional[Union[int, str]]: + """The value with the greatest total similarity weight (ties broken by first + appearance, matching `_mode`), or None when no non-None value is present.""" + totals: dict[Union[int, str], float] = defaultdict(float) + for value, weight in zip(values, weights): + if value is not None: + totals[value] += weight + if not totals: + return None + return max(totals, key=lambda value: totals[value]) + + +def _weighted_int_mode( + values: Iterable[Optional[int]], weights: list[float] +) -> Optional[int]: + """`_weighted_mode` narrowed to int-coded fields (keeps pyright strict happy + when the target attribute is typed `Optional[int]`).""" + totals: dict[int, float] = defaultdict(float) + for value, weight in zip(values, weights): + if value is not None: + totals[value] += weight + if not totals: + return None + return max(totals, key=lambda value: totals[value]) + + +def _modal_share( + values: Iterable[Optional[Union[int, str]]], +) -> Optional[float]: + """The most common value's share of the present (non-None) values — a 0..1 + measure of how much the cohort agrees — or None when none are present.""" + present = [v for v in values if v is not None] + if not present: + return None + modal_count: int = Counter(present).most_common(1)[0][1] + return modal_count / len(present) + + +def _combine(left: list[float], right: list[float]) -> list[float]: + """Element-wise product of two aligned weight vectors (compose weighting + factors, e.g. similarity × geo-proximity).""" + return [a * b for a, b in zip(left, right)] + + +def _haversine_km(origin: Coordinates, point: Coordinates) -> float: + """Great-circle distance in km between two WGS84 points.""" + radius_km = 6371.0 + lat1, lat2 = math.radians(origin.latitude), math.radians(point.latitude) + delta_lat = lat2 - lat1 + delta_lon = math.radians(point.longitude - origin.longitude) + h = ( + math.sin(delta_lat / 2) ** 2 + + math.cos(lat1) * math.cos(lat2) * math.sin(delta_lon / 2) ** 2 + ) + return 2 * radius_km * math.asin(min(1.0, math.sqrt(h))) + + +def _geo_weights( + target: Optional[Coordinates], members: tuple[ComparableProperty, ...] +) -> list[float]: + """A geo-proximity weight per comparable — an exponential decay in haversine + distance to the target. All-neutral (1.0) when the target has no coordinates + (geo weighting off) or a neighbour has none (never penalised for absent + data); aligned with `members` index-for-index.""" + if target is None: + return [1.0] * len(members) + weights: list[float] = [] + for comparable in members: + coordinates = comparable.coordinates + if coordinates is None: + weights.append(1.0) + else: + weights.append( + math.exp(-_haversine_km(target, coordinates) / _GEO_SCALE_KM) + ) + return weights + + +def _recency_weights(members: tuple[ComparableProperty, ...]) -> list[float]: + """A recency weight per comparable — exponential decay in the cert's age + relative to the newest in the cohort, so newer neighbours dominate. All-equal + when no registration dates are lodged. Aligned with `members`.""" + newest: date = max( + (c.registration_date or date.min for c in members), default=date.min + ) + return [ + math.exp( + -((newest - (c.registration_date or date.min)).days / _DAYS_PER_YEAR) + / _RECENCY_TAU_YEARS + ) + for c in members + ] + + +def _recency_weighted_choice( + members: tuple[ComparableProperty, ...], + value_of: Callable[[ComparableProperty], Optional[Union[int, str]]], +) -> Optional[Union[int, str]]: + """The recency-weighted cohort mode of a per-comparable value: each + neighbour's vote decays exponentially with the cert's age relative to the + newest in the cohort, so newer neighbours dominate and a stale majority can't + outvote the current state. Falls back to a plain mode when no registration + dates are lodged (all ages 0 ⇒ equal weight). Returns None when no comparable + supplies a value. Used for the time-varying components — those upgraded over a + dwelling's life (loft top-ups).""" + return _weighted_mode( + (value_of(comparable) for comparable in members), + _recency_weights(members), + ) + + +def _recency_weighted_mode( + members: tuple[ComparableProperty, ...], attr: str +) -> Optional[Union[int, str]]: + """`_recency_weighted_choice` over a main building-part attribute.""" + return _recency_weighted_choice( + members, lambda comparable: _main_part_attr(comparable, attr) + ) + + +def _comparable_modal_glazing( + comparable: ComparableProperty, +) -> Optional[Union[int, str]]: + """A comparable's modal glazing type — the most common across its windows, or + None when it lodges none. One glazing signal per neighbour, robust to a single + odd window, matching how the harness scores `modal_glazing_type`.""" + types = [window.glazing_type for window in comparable.epc.sap_windows] + return Counter(types).most_common(1)[0][0] if types else None + + +def _main_heating_detail(comparable: ComparableProperty) -> Optional[MainHeatingDetail]: + """The primary heating system's detail row, or None when none is lodged.""" + details = comparable.epc.sap_heating.main_heating_details + return details[0] if details else None + + +def _heating_signature( + comparable: ComparableProperty, +) -> Optional[tuple[Union[int, str], Optional[int], bool]]: + """The donor-matching signature — main fuel + heating category + cylinder + presence: the coarse identity of the heating system. None when no main heating + system is lodged, so the comparable is not a donor candidate.""" + detail = _main_heating_detail(comparable) + if detail is None: + return None + return ( + detail.main_fuel_type, + detail.main_heating_category, + comparable.epc.has_hot_water_cylinder, + ) + + +def _heating_donor(members: tuple[ComparableProperty, ...]) -> Optional[ComparableProperty]: + """The coherent heating donor: the comparable whose heating signature is the + cohort mode, breaking ties toward the most recent cert (then certificate + number, for determinism). None when no neighbour lodges a heating system.""" + signed = [(c, _heating_signature(c)) for c in members] + signatures = [sig for _, sig in signed if sig is not None] + if not signatures: + return None + modal = Counter(signatures).most_common(1)[0][0] + matches = [c for c, sig in signed if sig == modal] + return max( + matches, + key=lambda c: (c.registration_date or date.min, c.certificate_number), + ) diff --git a/domain/epc_prediction/prediction_comparison.py b/domain/epc_prediction/prediction_comparison.py new file mode 100644 index 00000000..391b5149 --- /dev/null +++ b/domain/epc_prediction/prediction_comparison.py @@ -0,0 +1,287 @@ +"""Per-Property prediction comparison for the EPC Prediction validation harness +(ADR-0029). + +`compare_prediction` scores a predicted `EpcPropertyData` against the actual one +on the accuracy signals the leave-one-out harness aggregates: classification +matches on the key categoricals (wall / roof / floor construction + insulation, +construction age band) and residuals on the geometry (window area + count, +building-parts count, floor area). Pure — the SAP residual is computed in the +runner, which has the calculator and the lodged SAP. +""" + +from __future__ import annotations + +from collections import Counter +from dataclasses import dataclass +from typing import Optional + +from datatypes.epc.domain.epc_property_data import ( + EpcPropertyData, + MainHeatingDetail, + SapBuildingPart, +) + + +@dataclass(frozen=True) +class PredictionComparison: + """One Property's prediction accuracy: per-component classification hits + + geometry residuals (predicted − actual). `categorical_hits` maps a component + name to its hit: True / False, or `None` ("not applicable") when the actual + lodges no value there, so the harness can keep it out of the + classification-rate denominator rather than score a free win. Keyed by name + (not flat fields) so the component set can grow without reshaping the + runner — see ADR-0030 Component Accuracy.""" + + categorical_hits: dict[str, Optional[bool]] + floor_area_residual: float + building_parts_residual: int + window_count_residual: int + total_window_area_residual: float + door_count_residual: int + + +def _main(epc: EpcPropertyData) -> SapBuildingPart: + return epc.sap_building_parts[0] + + +def _main_floor_construction(epc: EpcPropertyData) -> Optional[int]: + """The main building part's ground-floor construction code, or None when no + floor dimension is lodged.""" + dims = _main(epc).sap_floor_dimensions + return dims[0].floor_construction if dims else None + + +def _classify(predicted: object, actual: object) -> Optional[bool]: + """A categorical hit: None ("not applicable") when the actual is absent, + else whether the predicted value matches it.""" + if actual is None: + return None + return predicted == actual + + +# RdSAP construction age bands, oldest → newest. Adjacent bands carry near- +# identical U-values, so an off-by-one is treated as a (SAP-neutral) ±1 hit. +_AGE_BAND_ORDER: str = "ABCDEFGHIJKL" + + +def _age_band_within_one(predicted: object, actual: object) -> Optional[bool]: + """A ±1-band age hit: None when the actual is absent, True on an exact or + adjacent-band match, else False (issue #1222 — exact match overstates the + SAP impact of age-band misses).""" + if actual is None: + return None + if predicted == actual: + return True + if ( + isinstance(predicted, str) + and isinstance(actual, str) + and predicted in _AGE_BAND_ORDER + and actual in _AGE_BAND_ORDER + ): + return ( + abs(_AGE_BAND_ORDER.index(predicted) - _AGE_BAND_ORDER.index(actual)) + <= 1 + ) + return False + + +# RdSAP roof-insulation thickness buckets, thinnest → thickest. Uninsulated is +# lodged as either 0 or "NI" (not insulated), so both map to the bottom rung; +# "ND" (no data) is off the scale entirely. Adjacent buckets carry near-identical +# roof U-values, so an off-by-one bucket is treated as a (SAP-neutral) ±1 hit — +# the same measurement honesty as the construction age band (issue #1222). +_ROOF_THICKNESS_ORDINAL: dict[object, int] = { + 0: 0, + "NI": 0, + "12mm": 1, + "25mm": 2, + "50mm": 3, + "75mm": 4, + "100mm": 5, + "125mm": 6, + "150mm": 7, + "175mm": 8, + "200mm": 9, + "225mm": 10, + "250mm": 11, + "270mm": 12, + "300mm": 13, + "350mm": 14, + "400mm+": 15, +} + + +def _roof_insulation_within_one( + predicted: object, actual: object +) -> Optional[bool]: + """A ±1-bucket roof-insulation hit: None when the actual is absent, True on an + exact or adjacent-bucket match, else False. Off the ordered scale (e.g. the + "ND" no-data category) only an exact match counts.""" + if actual is None: + return None + if predicted == actual: + return True + pred_rung = _ROOF_THICKNESS_ORDINAL.get(predicted) + actual_rung = _ROOF_THICKNESS_ORDINAL.get(actual) + if pred_rung is None or actual_rung is None: + return False + return abs(pred_rung - actual_rung) <= 1 + + +def _main_heating_detail(epc: EpcPropertyData) -> Optional[MainHeatingDetail]: + """The primary heating system's detail row, or None when none is lodged.""" + details = epc.sap_heating.main_heating_details + return details[0] if details else None + + +def _heating_hits( + predicted: EpcPropertyData, actual: EpcPropertyData +) -> dict[str, Optional[bool]]: + """Classification hits for the heating components — the dominant SAP lever + (ADR-0030). Main-system fields come off the primary `MainHeatingDetail`; + hot-water + secondary fields off `SapHeating`.""" + pred_main = _main_heating_detail(predicted) + actual_main = _main_heating_detail(actual) + pred_h = predicted.sap_heating + actual_h = actual.sap_heating + return { + "heating_main_fuel": _classify( + getattr(pred_main, "main_fuel_type", None), + getattr(actual_main, "main_fuel_type", None), + ), + "heating_main_category": _classify( + getattr(pred_main, "main_heating_category", None), + getattr(actual_main, "main_heating_category", None), + ), + "heating_main_control": _classify( + getattr(pred_main, "main_heating_control", None), + getattr(actual_main, "main_heating_control", None), + ), + "water_heating_fuel": _classify( + pred_h.water_heating_fuel, actual_h.water_heating_fuel + ), + "water_heating_code": _classify( + pred_h.water_heating_code, actual_h.water_heating_code + ), + "has_hot_water_cylinder": _classify( + predicted.has_hot_water_cylinder, actual.has_hot_water_cylinder + ), + "cylinder_insulation_type": _classify( + pred_h.cylinder_insulation_type, actual_h.cylinder_insulation_type + ), + "secondary_heating_type": _classify( + pred_h.secondary_heating_type, actual_h.secondary_heating_type + ), + } + + +def _modal_glazing_type(epc: EpcPropertyData) -> Optional[object]: + """The most common glazing type across the dwelling's windows, or None when + none are lodged. A single dwelling-level glazing signal, robust to one + odd window.""" + types = [w.glazing_type for w in epc.sap_windows] + return Counter(types).most_common(1)[0][0] if types else None + + +def _has_pv(epc: EpcPropertyData) -> bool: + """True iff the dwelling lodges any photovoltaic supply (either path).""" + source = epc.sap_energy_source + return source.photovoltaic_supply is not None or bool( + source.photovoltaic_arrays + ) + + +def _renewables_and_fabric_hits( + predicted: EpcPropertyData, actual: EpcPropertyData +) -> dict[str, Optional[bool]]: + """Hits for the remaining fabric-insulation, glazing and renewables + components (ADR-0030). Presence flags (room-in-roof, PV, solar) are always + applicable — predicting absence when present is a real miss.""" + return { + "roof_insulation_thickness": _classify( + _main(predicted).roof_insulation_thickness, + _main(actual).roof_insulation_thickness, + ), + "roof_insulation_thickness_pm1": _roof_insulation_within_one( + _main(predicted).roof_insulation_thickness, + _main(actual).roof_insulation_thickness, + ), + "floor_insulation": _classify( + _main_floor_insulation(predicted), _main_floor_insulation(actual) + ), + "has_room_in_roof": _classify( + _main(predicted).sap_room_in_roof is not None, + _main(actual).sap_room_in_roof is not None, + ), + "modal_glazing_type": _classify( + _modal_glazing_type(predicted), _modal_glazing_type(actual) + ), + "has_pv": _classify(_has_pv(predicted), _has_pv(actual)), + "solar_water_heating": _classify( + predicted.solar_water_heating, actual.solar_water_heating + ), + } + + +def _main_floor_insulation(epc: EpcPropertyData) -> Optional[int]: + """The main building part's ground-floor insulation code, or None when no + floor dimension is lodged.""" + dims = _main(epc).sap_floor_dimensions + return dims[0].floor_insulation if dims else None + + +def _total_window_area(epc: EpcPropertyData) -> float: + return sum(w.window_width * w.window_height for w in epc.sap_windows) + + +def compare_prediction( + predicted: EpcPropertyData, actual: EpcPropertyData +) -> PredictionComparison: + """Compare a predicted picture against the actual one, field by field. All + residuals are signed, predicted − actual.""" + fabric_hits: dict[str, Optional[bool]] = { + "wall_construction": _classify( + _main(predicted).wall_construction, + _main(actual).wall_construction, + ), + "wall_insulation_type": _classify( + _main(predicted).wall_insulation_type, + _main(actual).wall_insulation_type, + ), + "construction_age_band": _classify( + _main(predicted).construction_age_band, + _main(actual).construction_age_band, + ), + "construction_age_band_pm1": _age_band_within_one( + _main(predicted).construction_age_band, + _main(actual).construction_age_band, + ), + "roof_construction": _classify( + _main(predicted).roof_construction, + _main(actual).roof_construction, + ), + "floor_construction": _classify( + _main_floor_construction(predicted), + _main_floor_construction(actual), + ), + } + return PredictionComparison( + categorical_hits={ + **fabric_hits, + **_heating_hits(predicted, actual), + **_renewables_and_fabric_hits(predicted, actual), + }, + floor_area_residual=( + predicted.total_floor_area_m2 - actual.total_floor_area_m2 + ), + building_parts_residual=( + len(predicted.sap_building_parts) - len(actual.sap_building_parts) + ), + window_count_residual=( + len(predicted.sap_windows) - len(actual.sap_windows) + ), + total_window_area_residual=( + _total_window_area(predicted) - _total_window_area(actual) + ), + door_count_residual=predicted.door_count - actual.door_count, + ) diff --git a/domain/epc_prediction/prediction_target.py b/domain/epc_prediction/prediction_target.py new file mode 100644 index 00000000..faa5bd35 --- /dev/null +++ b/domain/epc_prediction/prediction_target.py @@ -0,0 +1,68 @@ +"""Assemble an EPC-less Property's PredictionTarget, with the eligibility gate +(ADR-0031 slice-5d). + +A `PredictionTarget` needs the target's own known inputs: its postcode (to find +the cohort), coordinates (to distance-weight it), and the Landlord-Override +attributes that condition selection — `property_type` (the HARD cohort filter), +plus optional `built_form` / `wall_construction`. `property_type` is required: a +Property whose type is unknown is gated out (never sized from a mixed-type +cohort), so the builder returns None and the caller skips prediction. +""" + +from __future__ import annotations + +from dataclasses import dataclass +from typing import Optional, Union + +from domain.geospatial.coordinates import Coordinates +from domain.property.property import PropertyIdentity + + +@dataclass(frozen=True) +class PredictionTarget: + """The known inputs for the Property whose EPC we are predicting — the fields + guaranteed at ingestion (plus any Landlord Overrides, added as they're used). + `built_form` is often but not always known. + """ + + postcode: str + property_type: str + built_form: Optional[str] = None + # A known Landlord Override (e.g. solid brick) conditions cohort selection — + # matching comparables are emphasised while enough remain (ADR-0029). + wall_construction: Optional[Union[int, str]] = None + # The target Property's own coordinates (resolved from its UPRN), against + # which neighbours are distance-weighted. None disables geo-weighting. + coordinates: Optional[Coordinates] = None + + +@dataclass(frozen=True) +class PredictionTargetAttributes: + """The target Property's own attributes resolved from Landlord Overrides, + needed to find and condition its cohort. `property_type` is the code-space + value the cohort EPCs carry (e.g. "2"); None means it could not be resolved, + which gates the Property out of prediction.""" + + property_type: Optional[str] + built_form: Optional[str] = None + wall_construction: Optional[Union[int, str]] = None + + +def build_prediction_target( + identity: PropertyIdentity, + coordinates: Optional[Coordinates], + attributes: PredictionTargetAttributes, +) -> Optional[PredictionTarget]: + """The PredictionTarget for an EPC-less Property, or None when ineligible — + `property_type` is the hard cohort filter, so a Property whose type is unknown + is gated out of prediction (ADR-0031) rather than sized from a mixed-type + cohort.""" + if attributes.property_type is None: + return None + return PredictionTarget( + postcode=identity.postcode, + property_type=attributes.property_type, + built_form=attributes.built_form, + wall_construction=attributes.wall_construction, + coordinates=coordinates, + ) diff --git a/domain/epc_prediction/validation.py b/domain/epc_prediction/validation.py new file mode 100644 index 00000000..d05082f6 --- /dev/null +++ b/domain/epc_prediction/validation.py @@ -0,0 +1,160 @@ +"""Component Accuracy aggregation for EPC Prediction (ADR-0030). + +The leave-one-out scorer, calculator-FREE on purpose: it holds out each SAP 10.2 +target, predicts it from its (all-vintage) ComparableProperty Properties, and aggregates +the per-component classification hits + geometry residuals from +`compare_prediction`. This is the *primary*, calculator-independent signal — the +end-to-end SAP / carbon / PE check (which needs the calculator) is layered on top +by the runner. The same function backs both the committed ratcheting gate and the +offline national battle-test (one scorer, two harnesses). + +Pure given the loaded cohorts: corpus IO (reading + mapping cert payloads) is the +caller's job, so this is directly unit-testable. +""" + +from __future__ import annotations + +from dataclasses import dataclass, field +from datetime import date +from typing import Iterable, Iterator, Optional, Sequence + +from datatypes.epc.domain.epc_property_data import EpcPropertyData +from domain.epc_prediction.comparable_properties import ( + ComparableProperty, + select_comparables, +) +from domain.epc_prediction.epc_prediction import EpcPrediction +from domain.epc_prediction.prediction_comparison import compare_prediction +from domain.epc_prediction.prediction_target import PredictionTarget + +# Only SAP 10.2 certs are valid held-out targets (ADR-0030) — the only vintage +# with full-fidelity lodged components. The source cohort keeps all vintages. +_SAP_10_2: float = 10.2 + + +def _empty_classification() -> dict[str, list[int]]: + return {} + + +def _empty_residuals() -> dict[str, list[float]]: + return {} + + +@dataclass +class ComponentAccuracy: + """Aggregated leave-one-out Component Accuracy over a corpus. + + `classification` maps a component name to [hits, applicable-total] (a + not-applicable `None` hit is excluded from the total); `residuals` maps a + numeric component to its signed (predicted − actual) values. `targets` counts + the held-out SAP 10.2 properties scored. + """ + + classification: dict[str, list[int]] = field( + default_factory=_empty_classification + ) + residuals: dict[str, list[float]] = field(default_factory=_empty_residuals) + targets: int = 0 + + def rate(self, component: str) -> Optional[float]: + """The classification hit-rate for a component, or None when nothing was + applicable.""" + hits, total = self.classification.get(component, [0, 0]) + return hits / total if total else None + + def mean_abs_residual(self, component: str) -> Optional[float]: + """Mean absolute residual for a numeric component, or None when empty.""" + values = self.residuals.get(component, []) + return sum(abs(v) for v in values) / len(values) if values else None + + +def _recency_key(comparable: ComparableProperty) -> tuple[date, str]: + return ( + comparable.registration_date or date.min, + comparable.certificate_number, + ) + + +def _latest_per_address(cohort: Sequence[ComparableProperty]) -> list[ComparableProperty]: + """One held-out property per address — the latest cert, the best ground + truth. Comparables with no address each stand alone.""" + latest: dict[str, ComparableProperty] = {} + standalone: list[ComparableProperty] = [] + for c in cohort: + if c.address is None: + standalone.append(c) + elif c.address not in latest or _recency_key(c) > _recency_key( + latest[c.address] + ): + latest[c.address] = c + return list(latest.values()) + standalone + + +def iter_predictions( + cohorts: Iterable[Sequence[ComparableProperty]], + *, + target_sap_version: float = _SAP_10_2, +) -> Iterator[tuple[EpcPropertyData, EpcPropertyData]]: + """Yield `(predicted, actual)` for every SAP-`target_sap_version` held-out + target across the cohorts — the single leave-one-out orchestration the + Component Accuracy scorer and the runner's calculator end-to-end both consume + (ADR-0030: one scorer, two harnesses). A target is held out by whole address + (so a re-lodgement can't leak) and predicted from its all-vintage cohort.""" + predictor = EpcPrediction() + for cohort in cohorts: + for held_out in _latest_per_address(cohort): + if held_out.epc.sap_version != target_sap_version: + continue + others = [ + c + for c in cohort + if c.address is None or c.address != held_out.address + ] + actual = held_out.epc + target = PredictionTarget( + postcode=actual.postcode, + property_type=actual.property_type or "", + built_form=actual.built_form, + coordinates=held_out.coordinates, + ) + comparables = select_comparables(target, others) + if not comparables.members: + continue + yield predictor.predict(target, comparables), actual + + +def evaluate_component_accuracy( + cohorts: Iterable[Sequence[ComparableProperty]], + *, + target_sap_version: float = _SAP_10_2, +) -> ComponentAccuracy: + """Score Component Accuracy by leave-one-out over each postcode cohort — + aggregating the `compare_prediction` hits + residuals across every held-out + SAP-`target_sap_version` target. Calculator-free (the primary signal).""" + accuracy = ComponentAccuracy() + for predicted, actual in iter_predictions( + cohorts, target_sap_version=target_sap_version + ): + comparison = compare_prediction(predicted, actual) + accuracy.targets += 1 + for name, hit in comparison.categorical_hits.items(): + counter = accuracy.classification.setdefault(name, [0, 0]) + if hit is not None: + counter[1] += 1 + counter[0] += int(hit) + accuracy.residuals.setdefault("floor_area", []).append( + comparison.floor_area_residual + ) + accuracy.residuals.setdefault("window_count", []).append( + float(comparison.window_count_residual) + ) + accuracy.residuals.setdefault("total_window_area", []).append( + comparison.total_window_area_residual + ) + accuracy.residuals.setdefault("building_parts", []).append( + float(comparison.building_parts_residual) + ) + accuracy.residuals.setdefault("door_count", []).append( + float(comparison.door_count_residual) + ) + return accuracy diff --git a/domain/property/property.py b/domain/property/property.py index f6b8957d..70acd711 100644 --- a/domain/property/property.py +++ b/domain/property/property.py @@ -7,7 +7,7 @@ from datatypes.epc.domain.epc_property_data import EpcPropertyData from domain.geospatial.planning_restrictions import PlanningRestrictions from domain.property.site_notes import SiteNotes -SourcePath = Literal["site_notes", "epc_with_overlay"] +SourcePath = Literal["site_notes", "epc_with_overlay", "predicted"] @dataclass(frozen=True) @@ -38,6 +38,11 @@ class Property: identity: PropertyIdentity epc: Optional[EpcPropertyData] = None site_notes: Optional[SiteNotes] = None + # A neighbour-synthesised EpcPropertyData (EPC Prediction gap-fill, ADR-0031), + # held in its own slot so it coexists with any lodged `epc` (provenance is + # structural). Used as the Effective EPC only as a last resort — when there is + # neither a lodged EPC nor Site Notes; a real source always wins. + predicted_epc: Optional[EpcPropertyData] = None # The current open-market value (a Property Valuation) — externally sourced # and mostly absent; feeds the Plan's Valuation Uplift £ forms (ADR-0018). current_market_value: Optional[float] = None @@ -62,8 +67,11 @@ class Property: return "site_notes" if self.epc is not None: return "epc_with_overlay" + if self.predicted_epc is not None: + return "predicted" raise ValueError( - "Property has neither Site Notes nor an EPC; no source path to model from" + "Property has neither Site Notes, an EPC, nor a predicted EPC; " + "no source path to model from" ) @property @@ -71,10 +79,15 @@ class Property: """The EpcPropertyData the modelling pipeline scores against. Path 1: the Site Notes' surveyed data. Path 2: the public EPC (Landlord - Overrides overlay is a later slice — returned as-is for now). + Overrides overlay is a later slice — returned as-is for now). Path 3: a + neighbour-synthesised EPC (EPC Prediction gap-fill, ADR-0031), used only + when neither real source is present. """ if self.source_path == "site_notes": assert self.site_notes is not None return self.site_notes.to_epc_property_data() + if self.source_path == "predicted": + assert self.predicted_epc is not None + return self.predicted_epc assert self.epc is not None return self.epc diff --git a/harness/epc_prediction_corpus.py b/harness/epc_prediction_corpus.py new file mode 100644 index 00000000..47920324 --- /dev/null +++ b/harness/epc_prediction_corpus.py @@ -0,0 +1,129 @@ +"""Load a postcode-clustered EPC corpus into ComparableProperty cohorts (ADR-0030). + +The IO half of the EPC Prediction validation: read each postcode's cached cert +payloads, map them through `EpcPropertyDataMapper.from_api_response`, and build +`ComparableProperty`s carrying the register metadata (address + registration date) the +leave-one-out scorer needs to dedupe re-lodgements and hold out a whole address. +A cert the mapper rejects (unsupported schema, malformed) is skipped, never fatal. + +Shared by the committed-fixture gate, the local validation script, and the +offline national battle-test — the corpus directory differs, the loading does +not. Layout: `//.json` + `/_index.json`. +""" + +from __future__ import annotations + +import hashlib +import json +from datetime import date +from pathlib import Path +from typing import Any, Optional + +from datatypes.epc.domain.mapper import EpcPropertyDataMapper +from domain.epc_prediction.comparable_properties import ComparableProperty +from domain.geospatial.coordinates import Coordinates + +# Identifying free-text fields blanked when freezing a payload into the committed +# fixture (postcode is kept — it is coarse open data and the cohort key). +_PII_BLANK_FIELDS = ("address_line_2", "address_line_3", "post_town") + + +def load_corpus(corpus_dir: Path) -> list[list[ComparableProperty]]: + """Load every postcode cohort under `corpus_dir`. Returns one list of + Comparables per postcode (the unit the leave-one-out scorer iterates).""" + index_path = corpus_dir / "_index.json" + if not index_path.exists(): + raise FileNotFoundError( + f"no corpus index at {index_path} — run a corpus fetch first" + ) + index: dict[str, list[str]] = json.loads(index_path.read_text()) + coordinates = load_coordinates(corpus_dir) + return [ + _load_cohort(corpus_dir, postcode, certs, coordinates) + for postcode, certs in index.items() + ] + + +def _load_cohort( + corpus_dir: Path, + postcode: str, + certs: list[str], + coordinates: dict[int, Coordinates], +) -> list[ComparableProperty]: + cohort: list[ComparableProperty] = [] + for cert in certs: + path = corpus_dir / postcode / f"{cert}.json" + if not path.exists(): + continue + raw: dict[str, Any] = json.loads(path.read_text()) + try: + epc = EpcPropertyDataMapper.from_api_response(raw) + except Exception: # noqa: BLE001 — a bad cert must not abort the sweep + continue + uprn = _uprn(raw) + cohort.append( + ComparableProperty( + epc=epc, + certificate_number=cert, + address=_address(raw), + registration_date=_registration_date(raw), + coordinates=coordinates.get(uprn) if uprn is not None else None, + ) + ) + return cohort + + +def load_coordinates(corpus_dir: Path) -> dict[int, Coordinates]: + """The optional `_coordinates.json` sidecar (`{uprn: [lon, lat]}`), resolved + from the OS Open-UPRN data by `fetch_corpus_coordinates.py`. Absent for a + corpus without geo data — geo-weighting then simply stays off.""" + path = corpus_dir / "_coordinates.json" + if not path.exists(): + return {} + raw: dict[str, list[float]] = json.loads(path.read_text()) + return { + int(uprn): Coordinates(longitude=lon_lat[0], latitude=lon_lat[1]) + for uprn, lon_lat in raw.items() + } + + +def _uprn(raw: dict[str, Any]) -> Optional[int]: + value = raw.get("uprn") + return int(value) if value is not None else None + + +def stable_hash(prefix: str, value: str) -> str: + """A short, deterministic, one-way token for a free-text identifier. Stable + across re-lodgements of the same address (normalised first), so dedup still + collapses them — but the plaintext address never lands in the repo.""" + digest = hashlib.sha1(value.strip().upper().encode()).hexdigest()[:12] + return f"{prefix}-{digest}" + + +def anonymise_payload(raw: dict[str, Any]) -> dict[str, Any]: + """De-identify a cert payload for the committed fixture: hash the street + address (`address_line_1`) and certificate number into stable tokens, blank + the other free-text address lines, and keep everything else — postcode, + registration date, SAP version, lodged figures, and all component fields — + untouched (gov data is OGL; only the direct identifiers are removed).""" + out = dict(raw) + address = raw.get("address_line_1") + if address: + out["address_line_1"] = stable_hash("addr", str(address)) + cert = raw.get("certificate_number") + if cert: + out["certificate_number"] = stable_hash("cert", str(cert)) + for blank_field in _PII_BLANK_FIELDS: + if blank_field in out: + out[blank_field] = "" + return out + + +def _address(raw: dict[str, Any]) -> Optional[str]: + value = raw.get("address_line_1") + return str(value).strip().upper() if value else None + + +def _registration_date(raw: dict[str, Any]) -> Optional[date]: + value = raw.get("registration_date") + return date.fromisoformat(str(value)) if value else None diff --git a/infrastructure/postgres/epc_property_table.py b/infrastructure/postgres/epc_property_table.py index 73adcbf3..c41d797d 100644 --- a/infrastructure/postgres/epc_property_table.py +++ b/infrastructure/postgres/epc_property_table.py @@ -25,6 +25,12 @@ class EpcPropertyModel(SQLModel, table=True): property_id: Optional[int] = Field(default=None) portfolio_id: Optional[int] = Field(default=None) uploaded_file_id: Optional[int] = Field(default=None) + # Provenance of this EPC picture: "lodged" (a real public/landlord EPC) or + # "predicted" (EPC Prediction gap-fill, ADR-0031). A property may hold one of + # each, so reads filter on it. Defaults to "lodged" — every existing row is a + # real EPC. (Requires a matching `source` column in the Drizzle schema — see + # docs/handover; the SQLModel mirror is what the test DB builds from.) + source: str = Field(default="lodged") # Identity / admin uprn: Optional[int] = Field(default=None) @@ -190,6 +196,7 @@ class EpcPropertyModel(SQLModel, table=True): data: EpcPropertyData, property_id: Optional[int] = None, portfolio_id: Optional[int] = None, + source: str = "lodged", ) -> EpcPropertyModel: es = data.sap_energy_source h = data.sap_heating @@ -202,6 +209,7 @@ class EpcPropertyModel(SQLModel, table=True): return cls( property_id=property_id, portfolio_id=portfolio_id, + source=source, uprn=data.uprn, uprn_source=data.uprn_source, report_reference=data.report_reference, diff --git a/orchestration/ingestion_orchestrator.py b/orchestration/ingestion_orchestrator.py index f88f4771..0ed58145 100644 --- a/orchestration/ingestion_orchestrator.py +++ b/orchestration/ingestion_orchestrator.py @@ -5,7 +5,18 @@ from dataclasses import dataclass from typing import Any, Optional, Protocol from datatypes.epc.domain.epc_property_data import EpcPropertyData +from domain.epc_prediction.comparable_properties import ( + ComparableProperty, + select_comparables, +) +from domain.epc_prediction.epc_prediction import EpcPrediction +from domain.epc_prediction.prediction_target import ( + PredictionTargetAttributes, + build_prediction_target, +) +from domain.geospatial.coordinates import Coordinates from domain.geospatial.spatial_reference import SpatialReference +from domain.property.property import PropertyIdentity from repositories.geospatial.geospatial_repository import GeospatialRepository from repositories.unit_of_work import UnitOfWork @@ -16,6 +27,19 @@ class EpcFetcher(Protocol): def get_by_uprn(self, uprn: int) -> Optional[EpcPropertyData]: ... +class ComparablesRepo(Protocol): + """The cohort source for EPC Prediction (e.g. EpcComparablePropertiesRepository).""" + + def candidates_for(self, postcode: str) -> list[ComparableProperty]: ... + + +class PredictionAttributesReader(Protocol): + """Resolves an EPC-less Property's prediction attributes from Landlord + Overrides (e.g. the property_overrides read adapter).""" + + def attributes_for(self, property_id: int) -> PredictionTargetAttributes: ... + + class SolarFetcher(Protocol): """The slice of the Google Solar client Ingestion needs (e.g. GoogleSolarApiClient).""" @@ -24,6 +48,17 @@ class SolarFetcher(Protocol): ) -> dict[str, Any]: ... +@dataclass +class _Prep: + """A property's transactional inputs read in the unit phase, before external + IO: its identity (postcode + uprn) and, when the predictor is wired, its + resolved prediction attributes (so the no-unit fetch phase can predict).""" + + property_id: int + identity: PropertyIdentity + attributes: Optional[PredictionTargetAttributes] + + @dataclass class _Fetched: """One property's externally-fetched source data, awaiting the write phase.""" @@ -31,6 +66,7 @@ class _Fetched: property_id: int uprn: int epc: Optional[EpcPropertyData] + predicted_epc: Optional[EpcPropertyData] solar_insights: Optional[dict[str, Any]] spatial: Optional[SpatialReference] @@ -59,46 +95,104 @@ class IngestionOrchestrator: epc_fetcher: EpcFetcher, geospatial_repo: GeospatialRepository, solar_fetcher: SolarFetcher, + comparables_repo: Optional[ComparablesRepo] = None, + prediction_attributes_reader: Optional[PredictionAttributesReader] = None, + epc_prediction: Optional[EpcPrediction] = None, ) -> None: self._unit_of_work = unit_of_work self._epc_fetcher = epc_fetcher self._geospatial_repo = geospatial_repo self._solar_fetcher = solar_fetcher + # EPC Prediction gap-fill (ADR-0031): when all three are wired, an EPC-less + # Property is predicted from its postcode cohort and persisted to the + # predicted slot. When any is absent, prediction is simply off and + # ingestion behaves exactly as before. + self._comparables_repo = comparables_repo + self._prediction_attributes_reader = prediction_attributes_reader + self._epc_prediction = epc_prediction def run(self, property_ids: list[int]) -> None: - uprns = self._uprns_for(property_ids) - fetched = [self._fetch(property_id, uprn) for property_id, uprn in uprns] + preps = self._prepare(property_ids) + fetched = [self._fetch(prep) for prep in preps] self._persist(fetched) - def _uprns_for(self, property_ids: list[int]) -> list[tuple[int, int]]: + def _prepare(self, property_ids: list[int]) -> list[_Prep]: # A short read unit; properties with no UPRN (e.g. landlord_property_id - # only) are skipped — a later Site-Notes path covers them. + # only) are skipped — a later Site-Notes path covers them. Prediction + # attributes (Landlord Overrides) are resolved here, in-unit, so the + # no-unit fetch phase holds everything it needs to predict. with self._unit_of_work() as uow: properties = uow.property.get_many(property_ids) - return [ - (property_id, prop.identity.uprn) - for property_id, prop in zip(property_ids, properties, strict=True) - if prop.identity.uprn is not None - ] + preps: list[_Prep] = [] + for property_id, prop in zip(property_ids, properties, strict=True): + if prop.identity.uprn is None: + continue + attributes = ( + self._prediction_attributes_reader.attributes_for(property_id) + if self._prediction_attributes_reader is not None + else None + ) + preps.append(_Prep(property_id, prop.identity, attributes)) + return preps - def _fetch(self, property_id: int, uprn: int) -> _Fetched: + def _fetch(self, prep: _Prep) -> _Fetched: # No unit open here — this is the external-IO phase. One spatial # reference lookup yields the coordinates (which drive the Solar fetch) # and the planning protections (cached for Modelling, ADR-0020). + uprn = prep.identity.uprn + assert uprn is not None # _prepare drops UPRN-less properties epc = self._epc_fetcher.get_by_uprn(uprn) solar_insights: Optional[dict[str, Any]] = None spatial: Optional[SpatialReference] = self._geospatial_repo.spatial_for(uprn) - if spatial is not None and spatial.coordinates is not None: + coordinates = spatial.coordinates if spatial is not None else None + if coordinates is not None: solar_insights = self._solar_fetcher.get_building_insights( - spatial.coordinates.longitude, spatial.coordinates.latitude + coordinates.longitude, coordinates.latitude ) - return _Fetched(property_id, uprn, epc, solar_insights, spatial) + predicted_epc = ( + self._predict(prep.identity, coordinates, prep.attributes) + if epc is None + else None + ) + return _Fetched( + prep.property_id, uprn, epc, predicted_epc, solar_insights, spatial + ) + + def _predict( + self, + identity: PropertyIdentity, + coordinates: Optional[Coordinates], + attributes: Optional[PredictionTargetAttributes], + ) -> Optional[EpcPropertyData]: + """Synthesise the EPC-less Property's picture from its postcode cohort, or + None when the predictor is unwired, the Property is gated out (unknown + property type), or no comparables survive selection (ADR-0031).""" + if ( + self._comparables_repo is None + or self._epc_prediction is None + or attributes is None + ): + return None + target = build_prediction_target(identity, coordinates, attributes) + if target is None: + return None + candidates = self._comparables_repo.candidates_for(identity.postcode) + comparables = select_comparables(target, candidates) + if not comparables.members: + return None + return self._epc_prediction.predict(target, comparables) def _persist(self, fetched: list[_Fetched]) -> None: with self._unit_of_work() as uow: for item in fetched: if item.epc is not None: uow.epc.save(item.epc, property_id=item.property_id) + elif item.predicted_epc is not None: + uow.epc.save( + item.predicted_epc, + property_id=item.property_id, + source="predicted", + ) # The live `solar` table is keyed by UPRN and needs the fetch's # coordinates; insights are only set when those coordinates were # resolved, so spatial.coordinates is non-None alongside them. diff --git a/repositories/comparable_properties/__init__.py b/repositories/comparable_properties/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/repositories/comparable_properties/comparable_properties_repository.py b/repositories/comparable_properties/comparable_properties_repository.py new file mode 100644 index 00000000..c327df46 --- /dev/null +++ b/repositories/comparable_properties/comparable_properties_repository.py @@ -0,0 +1,24 @@ +"""The ComparableProperties repository port (ADR-0029 decision 3; ADR-0031). + +Owns the cohort IO for EPC Prediction — given a target's postcode, return the +candidate `ComparableProperty`s (the postcode's other lodged certs, mapped to +`EpcPropertyData` with their register metadata + resolved coordinates). The pure +domain `select_comparables` then filters these into the reference cohort, and +`EpcPrediction.predict` synthesises the picture. Kept a port so the orchestrator +depends on the cohort source abstractly and tests substitute a fake. +""" + +from __future__ import annotations + +from abc import ABC, abstractmethod + +from domain.epc_prediction.comparable_properties import ComparableProperty + + +class ComparablePropertiesRepository(ABC): + @abstractmethod + def candidates_for(self, postcode: str) -> list[ComparableProperty]: + """Every candidate neighbour in `postcode` — one `ComparableProperty` per lodged + cert, carrying its `EpcPropertyData`, certificate number, address, + registration date, and resolved coordinates (None when unresolvable).""" + ... diff --git a/repositories/comparable_properties/epc_comparable_properties_repository.py b/repositories/comparable_properties/epc_comparable_properties_repository.py new file mode 100644 index 00000000..3bfd92b9 --- /dev/null +++ b/repositories/comparable_properties/epc_comparable_properties_repository.py @@ -0,0 +1,82 @@ +"""EPC-API + geospatial adapter for the ComparableProperties port (ADR-0031). + +Assembles a postcode's candidate cohort: the EPC search lists the postcode's +lodged certs, each is fetched + mapped to `EpcPropertyData`, and the certs' UPRNs +are resolved to coordinates in one batched geospatial read (closely-numbered +UPRNs share a partition). Register metadata the cert itself doesn't carry +(address, registration date) is threaded off the search row. +""" + +from __future__ import annotations + +from datetime import date +from typing import Optional, Protocol + +from datatypes.epc.domain.epc_property_data import EpcPropertyData +from datatypes.epc.search.epc_search_result import EpcSearchResult +from domain.epc_prediction.comparable_properties import ComparableProperty +from domain.geospatial.coordinates import Coordinates +from repositories.comparable_properties.comparable_properties_repository import ( + ComparablePropertiesRepository, +) + + +class CohortEpcClient(Protocol): + """The slice of the EPC-API client the cohort fetch needs (e.g. + `EpcClientService`).""" + + def search_by_postcode(self, postcode: str) -> list[EpcSearchResult]: ... + + def get_by_certificate_number(self, cert_num: str) -> EpcPropertyData: ... + + +class CohortGeospatial(Protocol): + """The geospatial slice the cohort fetch needs — batch UPRN→coordinate.""" + + def coordinates_for_uprns( + self, uprns: list[int] + ) -> dict[int, Coordinates]: ... + + +class EpcComparablePropertiesRepository(ComparablePropertiesRepository): + def __init__( + self, epc_client: CohortEpcClient, geospatial: CohortGeospatial + ) -> None: + self._epc_client = epc_client + self._geospatial = geospatial + + def candidates_for(self, postcode: str) -> list[ComparableProperty]: + results: list[EpcSearchResult] = self._epc_client.search_by_postcode( + postcode + ) + uprns: list[int] = [r.uprn for r in results if r.uprn is not None] + coordinates: dict[int, Coordinates] = self._geospatial.coordinates_for_uprns( + uprns + ) + return [self._comparable(result, coordinates) for result in results] + + def _comparable( + self, result: EpcSearchResult, coordinates: dict[int, Coordinates] + ) -> ComparableProperty: + epc: EpcPropertyData = self._epc_client.get_by_certificate_number( + result.certificate_number + ) + resolved: Optional[Coordinates] = ( + coordinates.get(result.uprn) if result.uprn is not None else None + ) + return ComparableProperty( + epc=epc, + certificate_number=result.certificate_number, + address=result.address_line_1, + registration_date=_parse_date(result.registration_date), + coordinates=resolved, + ) + + +def _parse_date(value: str) -> Optional[date]: + """The register's ISO registration date, or None when unparseable (the + predictor falls back to an unweighted recency).""" + try: + return date.fromisoformat(value[:10]) + except ValueError: + return None diff --git a/repositories/epc/epc_postgres_repository.py b/repositories/epc/epc_postgres_repository.py index 525476ea..8e38c32b 100644 --- a/repositories/epc/epc_postgres_repository.py +++ b/repositories/epc/epc_postgres_repository.py @@ -45,7 +45,7 @@ from infrastructure.postgres.epc_property_table import ( EpcRenewableHeatIncentiveModel, EpcWindowModel, ) -from repositories.epc.epc_repository import EpcRepository +from repositories.epc.epc_repository import EpcRepository, EpcSource from utilities.private import private _T = TypeVar("_T") @@ -88,14 +88,16 @@ class EpcPostgresRepository(EpcRepository): data: EpcPropertyData, property_id: Optional[int] = None, portfolio_id: Optional[int] = None, + source: EpcSource = "lodged", ) -> int: - # Idempotent on property_id: a re-run replaces the property's EPC graph - # rather than duplicating it (ADR-0012). Anonymous saves (no property_id) - # always insert. + # Idempotent on (property_id, source): a re-run replaces the property's + # EPC graph for THAT source rather than duplicating it (ADR-0012), and a + # predicted save leaves the lodged one intact, and vice versa (ADR-0031). + # Anonymous saves (no property_id) always insert. if property_id is not None: - self._delete_for_property(property_id) + self._delete_for_property(property_id, source) parent = EpcPropertyModel.from_epc_property_data( - data, property_id=property_id, portfolio_id=portfolio_id + data, property_id=property_id, portfolio_id=portfolio_id, source=source ) self._session.add(parent) self._session.flush() @@ -154,15 +156,16 @@ class EpcPostgresRepository(EpcRepository): ) return epc_property_id - def _delete_for_property(self, property_id: int) -> None: - """Remove the property's existing EPC graph (parent + child tables) so a - re-save replaces rather than duplicates (ADR-0012).""" + def _delete_for_property(self, property_id: int, source: EpcSource) -> None: + """Remove the property's existing EPC graph for `source` (parent + child + tables) so a re-save replaces rather than duplicates (ADR-0012), without + disturbing the other source's slot (ADR-0031).""" epc_ids = [ i for i in self._session.exec( - select(EpcPropertyModel.id).where( - EpcPropertyModel.property_id == property_id - ) + select(EpcPropertyModel.id) + .where(EpcPropertyModel.property_id == property_id) + .where(EpcPropertyModel.source == source) ).all() if i is not None ] @@ -200,9 +203,20 @@ class EpcPostgresRepository(EpcRepository): ) def get_for_property(self, property_id: int) -> Optional[EpcPropertyData]: + return self._get_for_property(property_id, source="lodged") + + def get_predicted_for_property( + self, property_id: int + ) -> Optional[EpcPropertyData]: + return self._get_for_property(property_id, source="predicted") + + def _get_for_property( + self, property_id: int, source: EpcSource + ) -> Optional[EpcPropertyData]: row = self._session.exec( select(EpcPropertyModel) .where(EpcPropertyModel.property_id == property_id) + .where(EpcPropertyModel.source == source) .order_by(EpcPropertyModel.id) # type: ignore[arg-type] ).first() if row is None or row.id is None: @@ -212,13 +226,26 @@ class EpcPostgresRepository(EpcRepository): def get_for_properties( self, property_ids: list[int] ) -> dict[int, EpcPropertyData]: - """Bulk-hydrate a batch's EPCs in a handful of per-table IN queries - (ADR-0012), not N x per-property. Load-whole per ADR-0002.""" + """Bulk-hydrate a batch's LODGED EPCs, keyed by property_id.""" + return self._for_properties(property_ids, source="lodged") + + def get_predicted_for_properties( + self, property_ids: list[int] + ) -> dict[int, EpcPropertyData]: + """Bulk-hydrate a batch's PREDICTED EPCs (ADR-0031), keyed by property_id.""" + return self._for_properties(property_ids, source="predicted") + + def _for_properties( + self, property_ids: list[int], source: EpcSource + ) -> dict[int, EpcPropertyData]: + """Bulk-hydrate a batch's EPCs of one `source` in a handful of per-table IN + queries (ADR-0012), not N x per-property. Load-whole per ADR-0002.""" if not property_ids: return {} parents = self._session.exec( select(EpcPropertyModel) .where(col(EpcPropertyModel.property_id).in_(property_ids)) + .where(EpcPropertyModel.source == source) .order_by(EpcPropertyModel.id) # type: ignore[arg-type] ).all() parent_by_property: dict[int, EpcPropertyModel] = {} diff --git a/repositories/epc/epc_repository.py b/repositories/epc/epc_repository.py index 171d098e..e0af06c0 100644 --- a/repositories/epc/epc_repository.py +++ b/repositories/epc/epc_repository.py @@ -1,10 +1,14 @@ from __future__ import annotations from abc import ABC, abstractmethod -from typing import Optional +from typing import Literal, Optional from datatypes.epc.domain.epc_property_data import EpcPropertyData +# Provenance of a persisted EPC picture (ADR-0031): a real "lodged" EPC, or a +# "predicted" one synthesised by EPC Prediction. A property can hold one of each. +EpcSource = Literal["lodged", "predicted"] + class EpcRepository(ABC): """Persists and loads the structured EPC Property Data slice. @@ -12,7 +16,8 @@ class EpcRepository(ABC): `save` writes the `EpcPropertyData` to the `epc_property` parent row and its child tables; `get` reconstructs the persisted projection back into an `EpcPropertyData`. Round-trip fidelity over that projection is pinned by the - Slice-1 round-trip test (Hestia-Homes/Model#1129). + Slice-1 round-trip test (Hestia-Homes/Model#1129). Each EPC carries a + `source` so a lodged and a predicted picture coexist per property (ADR-0031). """ @abstractmethod @@ -21,18 +26,36 @@ class EpcRepository(ABC): data: EpcPropertyData, property_id: int | None = None, portfolio_id: int | None = None, + source: EpcSource = "lodged", ) -> int: ... @abstractmethod def get(self, epc_property_id: int) -> EpcPropertyData: ... @abstractmethod - def get_for_property(self, property_id: int) -> Optional[EpcPropertyData]: ... + def get_for_property(self, property_id: int) -> Optional[EpcPropertyData]: + """The property's LODGED EPC (the predicted slot is read separately).""" + ... + + @abstractmethod + def get_predicted_for_property( + self, property_id: int + ) -> Optional[EpcPropertyData]: + """The property's PREDICTED EPC (EPC Prediction gap-fill), or None.""" + ... @abstractmethod def get_for_properties( self, property_ids: list[int] ) -> dict[int, EpcPropertyData]: - """Bulk-hydrate a batch's EPCs, keyed by property_id (only those with an - EPC are present). A handful of per-table queries, not N per property.""" + """Bulk-hydrate a batch's LODGED EPCs, keyed by property_id (only those + with one are present). A handful of per-table queries, not N per property.""" + ... + + @abstractmethod + def get_predicted_for_properties( + self, property_ids: list[int] + ) -> dict[int, EpcPropertyData]: + """Bulk-hydrate a batch's PREDICTED EPCs (ADR-0031), keyed by property_id + (only those with one are present).""" ... diff --git a/repositories/geospatial/geospatial_repository.py b/repositories/geospatial/geospatial_repository.py index b9dbff17..b3b3098c 100644 --- a/repositories/geospatial/geospatial_repository.py +++ b/repositories/geospatial/geospatial_repository.py @@ -18,6 +18,21 @@ class GeospatialRepository(ABC): @abstractmethod def coordinates_for(self, uprn: int) -> Optional[Coordinates]: ... + def coordinates_for_uprns( + self, uprns: list[int] + ) -> dict[int, Coordinates]: + """Resolve many UPRNs at once, returning only those covered. The default + is a per-UPRN loop; adapters whose storage is partitioned (e.g. the S3 + Open-UPRN parquet) override this to read each partition once for all the + UPRNs it covers — far fewer reads when the UPRNs are co-located, as + closely-numbered UPRNs share a partition.""" + resolved: dict[int, Coordinates] = {} + for uprn in uprns: + coordinates = self.coordinates_for(uprn) + if coordinates is not None: + resolved[uprn] = coordinates + return resolved + def spatial_for(self, uprn: int) -> Optional[SpatialReference]: """The Property's coordinates and planning protections together, in one reference lookup (ADR-0020) — Ingestion uses the coordinates to drive diff --git a/repositories/geospatial/geospatial_s3_repository.py b/repositories/geospatial/geospatial_s3_repository.py index 39946f2b..64eba14c 100644 --- a/repositories/geospatial/geospatial_s3_repository.py +++ b/repositories/geospatial/geospatial_s3_repository.py @@ -1,5 +1,6 @@ from __future__ import annotations +from collections import defaultdict from collections.abc import Callable from typing import Any, Optional @@ -62,6 +63,30 @@ class GeospatialS3Repository(GeospatialRepository): reference: Optional[SpatialReference] = self.spatial_for(uprn) return reference.coordinates if reference is not None else None + def coordinates_for_uprns( + self, uprns: list[int] + ) -> dict[int, Coordinates]: + """Batch lookup that reads the meta once, groups the UPRNs by their + covering partition, and reads each partition once for all the UPRNs it + covers (co-located UPRNs share a partition, so a cohort is typically one + or two reads). Uncovered / absent UPRNs are omitted from the result.""" + meta = self._read_parquet(_META_KEY) + by_partition: dict[str, list[int]] = defaultdict(list) + for uprn in uprns: + covering = meta[(meta["lower"] <= uprn) & (meta["upper"] >= uprn)] + if not covering.empty: + by_partition[str(covering["filenames"].iloc[0])].append(uprn) + resolved: dict[int, Coordinates] = {} + for filename, partition_uprns in by_partition.items(): + partition = self._read_parquet(f"spatial/{filename}") + rows = partition[partition["UPRN"].isin(partition_uprns)] + for _, row in rows.iterrows(): + resolved[int(row["UPRN"])] = Coordinates( + longitude=float(row["LONGITUDE"]), + latitude=float(row["LATITUDE"]), + ) + return resolved + def planning_restrictions_for(self, uprn: int) -> Optional[PlanningRestrictions]: reference: Optional[SpatialReference] = self.spatial_for(uprn) return reference.restrictions if reference is not None else None diff --git a/repositories/property/prediction_target_attributes_reader.py b/repositories/property/prediction_target_attributes_reader.py new file mode 100644 index 00000000..dd271d38 --- /dev/null +++ b/repositories/property/prediction_target_attributes_reader.py @@ -0,0 +1,23 @@ +"""Read port for an EPC-less Property's prediction attributes (ADR-0031 slice-5d). + +Returns the `property_type` / `built_form` / `wall_construction` resolved from +Landlord Overrides that `build_prediction_target` needs. Kept a port because the +real adapter — a read over the `property_overrides` fact layer — is being built +separately (see docs/HANDOVER_EPC_PREDICTION_WIRING.md); the ingestion wiring +depends on this abstraction and tests substitute a fake. +""" + +from __future__ import annotations + +from abc import ABC, abstractmethod + +from domain.epc_prediction.prediction_target import PredictionTargetAttributes + + +class PredictionTargetAttributesReader(ABC): + @abstractmethod + def attributes_for(self, property_id: int) -> PredictionTargetAttributes: + """The Property's resolved prediction attributes. `property_type` is None + when it could not be resolved — which gates the Property out of + prediction (`build_prediction_target` returns None).""" + ... diff --git a/repositories/property/property_postgres_repository.py b/repositories/property/property_postgres_repository.py index af036426..3549d0fc 100644 --- a/repositories/property/property_postgres_repository.py +++ b/repositories/property/property_postgres_repository.py @@ -72,6 +72,7 @@ class PropertyPostgresRepository(PropertyRepository): return Property( identity=identity, epc=self._epc().get_for_property(property_id), + predicted_epc=self._epc().get_predicted_for_property(property_id), planning_restrictions=_restrictions_of(row.uprn, restrictions), ) @@ -83,6 +84,7 @@ class PropertyPostgresRepository(PropertyRepository): ).all() row_by_id = {row.id: row for row in rows} epcs = self._epc().get_for_properties(property_ids) + predicted_epcs = self._epc().get_predicted_for_properties(property_ids) restrictions: dict[int, PlanningRestrictions] = self._restrictions_for( [row.uprn for row in rows if row.uprn is not None] ) @@ -101,6 +103,7 @@ class PropertyPostgresRepository(PropertyRepository): landlord_property_id=row.landlord_property_id, ), epc=epcs.get(property_id), + predicted_epc=predicted_epcs.get(property_id), planning_restrictions=_restrictions_of(row.uprn, restrictions), ) ) diff --git a/scripts/build_epc_prediction_fixture.py b/scripts/build_epc_prediction_fixture.py new file mode 100644 index 00000000..5ab82554 --- /dev/null +++ b/scripts/build_epc_prediction_fixture.py @@ -0,0 +1,117 @@ +"""Freeze a small, anonymised EPC Prediction fixture for the Tier-1 gate (ADR-0030). + +Curates a deterministic subset of the local scratch corpus +(`/tmp/epc_prediction_corpus`, gitignored) into a committed fixture under +`tests/fixtures/epc_prediction/`. Selection keeps postcodes that can actually be +scored — at least one SAP 10.2 target plus a second distinct address to predict +it from. Every payload is run through `anonymise_payload` first, so the street +address + certificate number become opaque tokens and no plaintext address lands +in the repo (postcode + component data are open gov data and kept). + +The committed fixture is the deterministic basis for the ratcheting gate; the +large scratch corpus stays local for iteration + the offline battle-test. + +USAGE +----- + PYTHONPATH=. python scripts/build_epc_prediction_fixture.py + +Source: $EPC_PREDICTION_CORPUS (default /tmp/epc_prediction_corpus). +""" + +from __future__ import annotations + +import json +import os +from pathlib import Path +from typing import Any + +from harness.epc_prediction_corpus import anonymise_payload, stable_hash + +SOURCE = Path(os.environ.get("EPC_PREDICTION_CORPUS", "/tmp/epc_prediction_corpus")) +FIXTURE = Path("tests/fixtures/epc_prediction") + +_SAP_10_2 = "10.2" +_MAX_POSTCODES = 15 # keep the committed fixture small +_MAX_COHORT = 25 # cap certs per postcode to bound repo size + + +def _load_payloads( + postcode: str, certs: list[str] +) -> list[tuple[str, dict[str, Any]]]: + """The `(source cert number, payload)` pairs for a postcode — the cert + number lives in the index/filename, not the cached payload.""" + payloads: list[tuple[str, dict[str, Any]]] = [] + for cert in certs: + path = SOURCE / postcode / f"{cert}.json" + if path.exists(): + payloads.append((cert, json.loads(path.read_text()))) + return payloads + + +def _qualifies(payloads: list[tuple[str, dict[str, Any]]]) -> bool: + """A postcode is usable iff it has ≥1 SAP 10.2 cert (a valid target) and ≥2 + distinct addresses (so the target has at least one neighbour to predict it).""" + has_target = any( + str(p.get("sap_version")) == _SAP_10_2 for _, p in payloads + ) + addresses = { + str(p.get("address_line_1", "")).strip().upper() for _, p in payloads + } + return has_target and len(addresses) >= 2 + + +def main() -> None: + index: dict[str, list[str]] = json.loads( + (SOURCE / "_index.json").read_text() + ) + fixture_index: dict[str, list[str]] = {} + kept_uprns: set[str] = set() + total_certs = 0 + for postcode, certs in index.items(): + if len(fixture_index) >= _MAX_POSTCODES: + break + payloads = _load_payloads(postcode, certs) + if not _qualifies(payloads): + continue + kept: list[str] = [] + for cert, raw in payloads[:_MAX_COHORT]: + cert_token = stable_hash("cert", cert) + anon = anonymise_payload(raw) + out = FIXTURE / postcode / f"{cert_token}.json" + out.parent.mkdir(parents=True, exist_ok=True) + out.write_text(json.dumps(anon)) + kept.append(cert_token) + uprn = raw.get("uprn") + if uprn is not None: + kept_uprns.add(str(int(uprn))) + fixture_index[postcode] = kept + total_certs += len(kept) + (FIXTURE / "_index.json").parent.mkdir(parents=True, exist_ok=True) + (FIXTURE / "_index.json").write_text(json.dumps(fixture_index, indent=2)) + _write_coordinates(kept_uprns) + print( + f"wrote {len(fixture_index)} postcodes / {total_certs} anonymised certs " + f"to {FIXTURE}" + ) + + +def _write_coordinates(kept_uprns: set[str]) -> None: + """Carry the geo-proximity coordinates for the kept UPRNs into the committed + fixture (subset of the corpus `_coordinates.json`), so the gate exercises + geo-weighting without S3. Skipped when the corpus has no coordinates sidecar. + Coordinates are OS OpenData (OGL) and add no identifiability beyond the UPRN + already kept in the fixture.""" + source = SOURCE / "_coordinates.json" + if not source.exists(): + return + corpus_coords: dict[str, list[float]] = json.loads(source.read_text()) + fixture_coords = { + uprn: corpus_coords[uprn] + for uprn in kept_uprns + if uprn in corpus_coords + } + (FIXTURE / "_coordinates.json").write_text(json.dumps(fixture_coords)) + + +if __name__ == "__main__": + main() diff --git a/scripts/fetch_corpus_coordinates.py b/scripts/fetch_corpus_coordinates.py new file mode 100644 index 00000000..8dca8516 --- /dev/null +++ b/scripts/fetch_corpus_coordinates.py @@ -0,0 +1,101 @@ +"""One-time: resolve coordinates for every EPC Prediction corpus UPRN (#1227). + +Reads the OS Open-UPRN parquet from S3 (DATA_BUCKET / spatial/) via boto3 and +resolves each corpus cert's `uprn` to WGS84 lon/lat. UPRNs are grouped by their +covering partition (the same UPRN-range bucketing `GeospatialS3Repository` uses), +so each ~1.7 MB partition is read at most once — the efficient batch lookup we +intend to add to the Geospatial Repo. Caches `{uprn: [lon, lat]}` locally +(gitignored) so the validation harness can score intra-postcode distances +without S3. + +USAGE +----- + set -a; . backend/.env; set +a + PYTHONPATH=. python scripts/fetch_corpus_coordinates.py + +Source corpus: $EPC_PREDICTION_CORPUS (default /tmp/epc_prediction_corpus). +Output: /../epc_prediction_corpus_coords.json +""" + +from __future__ import annotations + +import io +import json +import os +from collections import defaultdict +from pathlib import Path +from typing import Any + +import boto3 +import pandas as pd + +CORPUS = Path(os.environ.get("EPC_PREDICTION_CORPUS", "/tmp/epc_prediction_corpus")) +# Sidecar inside the corpus dir, so `load_corpus` picks it up automatically. +OUT = CORPUS / "_coordinates.json" +_BUCKET = os.environ["DATA_BUCKET"] +_META_KEY = "spatial/filename_meta.parquet" + + +def _reader() -> Any: + # boto3.client is overloaded per-service in the installed stubs; bind to Any. + boto3_client: Any = boto3.client # pyright: ignore[reportUnknownMemberType, reportUnknownVariableType] + s3: Any = boto3_client("s3") + + def read_parquet(key: str) -> pd.DataFrame: + response: dict[str, Any] = s3.get_object(Bucket=_BUCKET, Key=key) + body: bytes = response["Body"].read() + return pd.read_parquet(io.BytesIO(body)) + + return read_parquet + + +def _corpus_uprns() -> set[int]: + index: dict[str, list[str]] = json.loads((CORPUS / "_index.json").read_text()) + uprns: set[int] = set() + for postcode, certs in index.items(): + for cert in certs: + path = CORPUS / postcode / f"{cert}.json" + if not path.exists(): + continue + raw: dict[str, Any] = json.loads(path.read_text()) + uprn = raw.get("uprn") + if uprn is not None: + uprns.add(int(uprn)) + return uprns + + +def main() -> None: + read_parquet = _reader() + uprns = _corpus_uprns() + print(f"corpus UPRNs: {len(uprns)}") + + meta = read_parquet(_META_KEY) + # Group each UPRN by its covering partition (lower <= uprn <= upper), so each + # partition file is read once for all the UPRNs it covers. + by_partition: dict[str, list[int]] = defaultdict(list) + uncovered = 0 + for uprn in uprns: + covering = meta[(meta["lower"] <= uprn) & (meta["upper"] >= uprn)] + if covering.empty: + uncovered += 1 + continue + by_partition[str(covering["filenames"].iloc[0])].append(uprn) + print(f"distinct partitions to read: {len(by_partition)}; uncovered: {uncovered}") + + coords: dict[str, list[float]] = {} + for i, (filename, part_uprns) in enumerate(sorted(by_partition.items()), 1): + partition = read_parquet(f"spatial/{filename}") + rows = partition[partition["UPRN"].isin(part_uprns)] + for _, row in rows.iterrows(): + coords[str(int(row["UPRN"]))] = [ + float(row["LONGITUDE"]), + float(row["LATITUDE"]), + ] + print(f" [{i}/{len(by_partition)}] {filename}: +{len(rows)}") + + OUT.write_text(json.dumps(coords)) + print(f"resolved {len(coords)}/{len(uprns)} UPRNs -> {OUT}") + + +if __name__ == "__main__": + main() diff --git a/scripts/fetch_epc_prediction_corpus.py b/scripts/fetch_epc_prediction_corpus.py new file mode 100644 index 00000000..14831d02 --- /dev/null +++ b/scripts/fetch_epc_prediction_corpus.py @@ -0,0 +1,162 @@ +"""Build the frozen postcode-clustered corpus for EPC Prediction validation +(ADR-0029). + +WHAT THIS IS FOR +---------------- +EPC Prediction estimates an EPC-less Property's `EpcPropertyData` from its +**ComparableProperty Properties** — the other certs in its postcode. Validating that +needs *geographic clusters* (many certs per postcode), not random certs, so the +leave-one-out harness can drop one cert and predict it from its neighbours. + +This script builds that corpus once, offline-reusable: it samples postcodes +from the register (an unbiased spread over dates/regions), then for each +postcode downloads **every** domestic cert's full schema payload — the exact +shape `EpcPropertyDataMapper.from_api_response` consumes — grouped on disk by +postcode. The validation harness then runs entirely against this cache: fast, +deterministic, no rate limits. + +Pair it with `validate_epc_prediction.py` (the leave-one-out accuracy harness). + +HOW THE SAMPLE IS DRAWN +----------------------- +Postcodes are seeded by sampling random PAGES of `/api/domestic/search` across +a past date window (the register orders by registration date, so random pages +give an unbiased postcode spread). Each seed cert contributes its postcode; we +take the first N distinct postcodes and pull each one's *entire* cohort via +`search_by_postcode` -> per-cert `/api/certificate`. + +USAGE +----- + PYTHONPATH=. python scripts/fetch_epc_prediction_corpus.py + +Resumable — re-running skips certs already cached, so it is safe to interrupt. +Token is read from `backend/.env` (`OPEN_EPC_API_TOKEN`). The register rejects +a `date_end` that includes today, so keep the window in the past. + +Cache dir defaults to `/tmp/epc_prediction_corpus`, overridable via the +`EPC_PREDICTION_CORPUS` env var. Layout: + //.json # raw API `data` payload + /_index.json # {postcode: [cert, ...]} +""" + +import json +import os +import random +import time +from pathlib import Path + +import httpx +from dotenv import load_dotenv + +load_dotenv("backend/.env") +TOKEN = os.environ["OPEN_EPC_API_TOKEN"] +BASE = "https://api.get-energy-performance-data.communities.gov.uk" +H = {"Authorization": f"Bearer {TOKEN}", "Accept": "application/json"} +CACHE = Path(os.environ.get("EPC_PREDICTION_CORPUS", "/tmp/epc_prediction_corpus")) +CACHE.mkdir(parents=True, exist_ok=True) + +# Seed-postcode sampling. `date_end` must be strictly before today. TOTAL_PAGES +# is the `totalPages` the search returns for this window at page_size=100 — +# re-probe if you change the window (it only needs to be an upper bound for the +# random page draw; out-of-range pages just return fewer rows). +WINDOW = {"date_start": "2026-01-01", "date_end": "2026-05-31"} +TOTAL_PAGES = 7402 +SEED_PAGES = 20 # random search pages → postcode seeds +N_POSTCODES = 150 # distinct postcodes to pull full cohorts for +random.seed(2026) # reproducible draw + + +def _get(url: str, params: dict[str, object], timeout: float = 20.0, tries: int = 5): + """GET with retry/backoff on 429 + 5xx (honours Retry-After).""" + r = None + for i in range(tries): + try: + r = httpx.get(url, params=params, headers=H, timeout=timeout) + except httpx.HTTPError: + time.sleep(1.5 * (i + 1)) + continue + if r.status_code == 429 or r.status_code >= 500: + ra = r.headers.get("Retry-After") + time.sleep(float(ra) if ra else 1.5 * (i + 1)) + continue + return r + return r + + +def _normalise_postcode(postcode: str) -> str: + return postcode.replace(" ", "").upper() + + +def sample_postcodes() -> list[str]: + """Draw distinct postcodes from random search pages across the window.""" + pages = sorted(random.sample(range(1, TOTAL_PAGES + 1), SEED_PAGES)) + seen: dict[str, None] = {} + for p in pages: + r = _get( + f"{BASE}/api/domestic/search", + {**WINDOW, "current_page": p, "page_size": 100}, + ) + if r is None or not r.is_success: + print(f" seed page {p} -> {getattr(r, 'status_code', 'ERR')}") + continue + for row in r.json().get("data", []): + pc = row.get("postcode") + if pc: + seen[_normalise_postcode(pc)] = None + print(f" page {p}: cumulative {len(seen)} distinct postcodes") + if len(seen) >= N_POSTCODES: + break + return list(seen)[:N_POSTCODES] + + +def cohort_cert_numbers(postcode: str) -> list[str]: + r = _get(f"{BASE}/api/domestic/search", {"postcode": postcode}) + if r is None or not r.is_success: + return [] + return [ + row["certificateNumber"] + for row in r.json().get("data", []) + if row.get("certificateNumber") + ] + + +def fetch_cert(postcode: str, cert: str) -> bool: + """Fetch + cache one cert's raw `data` payload. Returns True on success + (or already-cached).""" + out = CACHE / postcode / f"{cert}.json" + if out.exists(): + return True + r = _get(f"{BASE}/api/certificate", {"certificate_number": cert}) + if r is None or not r.is_success: + return False + try: + payload = r.json()["data"] + except (KeyError, ValueError): + return False + out.parent.mkdir(parents=True, exist_ok=True) + out.write_text(json.dumps(payload)) + return True + + +def main() -> None: + print("sampling seed postcodes ...") + postcodes = sample_postcodes() + print(f"pulling full cohorts for {len(postcodes)} postcodes into {CACHE} ...") + index: dict[str, list[str]] = {} + t0 = time.time() + total_certs = 0 + for i, pc in enumerate(postcodes, 1): + certs = cohort_cert_numbers(pc) + fetched = [c for c in certs if fetch_cert(pc, c)] + index[pc] = fetched + total_certs += len(fetched) + print(f" [{i}/{len(postcodes)}] {pc}: {len(fetched)}/{len(certs)} certs") + (CACHE / "_index.json").write_text(json.dumps(index, indent=2)) + print( + f"DONE in {time.time() - t0:.0f}s: {len(postcodes)} postcodes, " + f"{total_certs} certs cached under {CACHE}" + ) + + +if __name__ == "__main__": + main() diff --git a/scripts/fetch_epc_prediction_dense_corpus.py b/scripts/fetch_epc_prediction_dense_corpus.py new file mode 100644 index 00000000..97ed0aba --- /dev/null +++ b/scripts/fetch_epc_prediction_dense_corpus.py @@ -0,0 +1,197 @@ +"""Build a *geographically dense* postcode-clustered corpus for EPC Prediction +(cross-postcode geo expansion — follow-up to ADR-0029 / issue #1227, #1237). + +WHY A SECOND CORPUS +------------------- +`fetch_epc_prediction_corpus.py` samples *scattered* national postcodes — fine +for intra-postcode validation, but a held-out target's true geo-neighbours (the +adjacent postcodes on its street) are NOT in that corpus, so the cross-postcode +geo lever (distance-weighting a cohort that spans postcode boundaries) and +built-form-aware sizing (#1237) cannot be measured on it. + +This builds dense clusters instead: each of K reproducible seed postcodes is +expanded — via postcodes.io's nearest-postcode endpoint — into EVERY unit +postcode within `RADIUS_M`, and each of those gets its full EPC cohort pulled. +The result is a handful of dense neighbourhoods (a target's real neighbours ARE +in-corpus) spread across the country (the seeds are nationally sampled, so the +validation set stays diverse). + +postcodes.io is a CORPUS-BUILD dependency only (a free, public, OGL postcode +service) — the predictor stays pure. The gov EPC API has no area/prefix search +(a partial postcode 400s; only a full unit is accepted), which is why the +neighbour enumeration is external. + +USAGE +----- + PYTHONPATH=. python scripts/fetch_epc_prediction_dense_corpus.py # full + PYTHONPATH=. python scripts/fetch_epc_prediction_dense_corpus.py --pilot # 2 seeds + +Resumable — re-running skips cached certs. Token from `backend/.env`. Cache dir +defaults to `/tmp/epc_prediction_dense_corpus` (separate from the scattered one), +overridable via `EPC_PREDICTION_DENSE_CORPUS`. Layout matches the other corpus +(`/.json` + `_index.json`), so `load_corpus` and the +coordinate resolver consume it unchanged. +""" + +import json +import os +import random +import sys +import time +from pathlib import Path +from typing import Any, Optional + +import httpx +from dotenv import load_dotenv + +load_dotenv("backend/.env") +TOKEN = os.environ["OPEN_EPC_API_TOKEN"] +BASE = "https://api.get-energy-performance-data.communities.gov.uk" +H = {"Authorization": f"Bearer {TOKEN}", "Accept": "application/json"} +POSTCODES_IO = "https://api.postcodes.io" +CACHE = Path( + os.environ.get("EPC_PREDICTION_DENSE_CORPUS", "/tmp/epc_prediction_dense_corpus") +) +CACHE.mkdir(parents=True, exist_ok=True) + +# Seed sampling mirrors the scattered fetch (random search pages → an unbiased +# national postcode spread), then each seed is densified. `date_end` must be +# strictly before today. +WINDOW = {"date_start": "2026-01-01", "date_end": "2026-05-31"} +TOTAL_PAGES = 7402 +SEED_PAGES = 8 # random search pages → seed postcodes +N_SEEDS = 25 # dense neighbourhood clusters to build +RADIUS_M = 300 # postcodes.io nearest-postcode radius around each seed +MAX_PER_SEED = 60 # cap unit postcodes per seed (dense urban seeds can be huge) +random.seed(2026) # reproducible draw + + +def _get(url: str, params: dict[str, Any], headers: Optional[dict[str, str]] = None, + timeout: float = 20.0, tries: int = 5): + """GET with retry/backoff on 429 + 5xx (honours Retry-After).""" + r = None + for i in range(tries): + try: + r = httpx.get(url, params=params, headers=headers or {}, timeout=timeout) + except httpx.HTTPError: + time.sleep(1.5 * (i + 1)) + continue + if r.status_code == 429 or r.status_code >= 500: + ra = r.headers.get("Retry-After") + time.sleep(float(ra) if ra else 1.5 * (i + 1)) + continue + return r + return r + + +def _normalise_postcode(postcode: str) -> str: + return postcode.replace(" ", "").upper() + + +def sample_seed_postcodes(n_seeds: int) -> list[str]: + """Draw distinct seed postcodes from random search pages across the window.""" + pages = sorted(random.sample(range(1, TOTAL_PAGES + 1), SEED_PAGES)) + seen: dict[str, None] = {} + for p in pages: + r = _get( + f"{BASE}/api/domestic/search", + {**WINDOW, "current_page": p, "page_size": 100}, + headers=H, + ) + if r is None or not r.is_success: + print(f" seed page {p} -> {getattr(r, 'status_code', 'ERR')}") + continue + for row in r.json().get("data", []): + pc = row.get("postcode") + if pc: + seen[pc] = None + if len(seen) >= n_seeds: + break + return list(seen)[:n_seeds] + + +def nearby_postcodes(seed: str) -> list[str]: + """Every unit postcode within `RADIUS_M` of `seed`, via postcodes.io's + nearest-postcode endpoint (seeded on the seed's own coordinates). Returns the + seed itself plus its neighbours (deduped, capped).""" + s = _get(f"{POSTCODES_IO}/postcodes/{seed.replace(' ', '%20')}", {}) + if s is None or not s.is_success: + return [seed] + res: dict[str, Any] = s.json().get("result") or {} + lat: Any = res.get("latitude") + lon: Any = res.get("longitude") + if lat is None or lon is None: + return [seed] + r = _get( + f"{POSTCODES_IO}/postcodes", + {"lon": lon, "lat": lat, "radius": RADIUS_M, "limit": 100}, + ) + if r is None or not r.is_success: + return [seed] + items: list[dict[str, Any]] = r.json().get("result") or [] + found: list[str] = [str(x["postcode"]) for x in items if x.get("postcode")] + ordered = [seed] + [p for p in found if p != seed] + return ordered[:MAX_PER_SEED] + + +def cohort_cert_numbers(postcode: str) -> list[str]: + r = _get(f"{BASE}/api/domestic/search", {"postcode": postcode}, headers=H) + if r is None or not r.is_success: + return [] + return [ + row["certificateNumber"] + for row in r.json().get("data", []) + if row.get("certificateNumber") + ] + + +def fetch_cert(postcode_nospace: str, cert: str) -> bool: + """Fetch + cache one cert's raw `data` payload (True on success / cached).""" + out = CACHE / postcode_nospace / f"{cert}.json" + if out.exists(): + return True + r = _get(f"{BASE}/api/certificate", {"certificate_number": cert}, headers=H) + if r is None or not r.is_success: + return False + try: + payload = r.json()["data"] + except (KeyError, ValueError): + return False + out.parent.mkdir(parents=True, exist_ok=True) + out.write_text(json.dumps(payload)) + return True + + +def main() -> None: + pilot = "--pilot" in sys.argv + n_seeds = 2 if pilot else N_SEEDS + print(f"sampling {n_seeds} seed postcodes ...") + seeds = sample_seed_postcodes(n_seeds) + print(f"seeds: {seeds}") + + index: dict[str, list[str]] = {} + t0 = time.time() + total_certs = 0 + for si, seed in enumerate(seeds, 1): + neighbourhood = nearby_postcodes(seed) + print(f"\n[seed {si}/{len(seeds)}] {seed}: {len(neighbourhood)} postcodes " + f"within {RADIUS_M}m") + for pc in neighbourhood: + nospace = _normalise_postcode(pc) + if nospace in index: + continue # neighbourhoods can overlap; fetch each postcode once + certs = cohort_cert_numbers(pc) + fetched = [c for c in certs if fetch_cert(nospace, c)] + if fetched: + index[nospace] = fetched + total_certs += len(fetched) + print(f" cumulative: {len(index)} postcodes, {total_certs} certs") + (CACHE / "_index.json").write_text(json.dumps(index, indent=2)) + print( + f"\nDONE in {time.time() - t0:.0f}s: {len(seeds)} seeds, " + f"{len(index)} postcodes, {total_certs} certs under {CACHE}" + ) + + +if __name__ == "__main__": + main() diff --git a/scripts/validate_epc_prediction.py b/scripts/validate_epc_prediction.py new file mode 100644 index 00000000..2da9beca --- /dev/null +++ b/scripts/validate_epc_prediction.py @@ -0,0 +1,177 @@ +"""Leave-one-out accuracy harness for EPC Prediction (ADR-0029). + +Runs entirely against the frozen postcode-clustered corpus +(`fetch_epc_prediction_corpus.py`). For every cert that has neighbours, it +drops that cert from its postcode cohort, predicts it from the rest using only +its *guaranteed* inputs (property type + built form), and compares the predicted +`EpcPropertyData` to the actual one. + +Reports the ADR-0029 metrics: + - classification rate: main wall construction (extend as coverage grows); + - geometry residuals: floor area, window count + total window area, building + parts (mean signed + mean absolute); + - SAP reported three ways — predicted-then-calculated vs (a) the actual lodged + SAP, (b) the calculator on the actual components, (c) the neighbour-mean SAP + baseline (the number predict-then-calculate must beat). + +USAGE +----- + PYTHONPATH=. python scripts/validate_epc_prediction.py + +Corpus dir: $EPC_PREDICTION_CORPUS (default /tmp/epc_prediction_corpus). +""" + +from __future__ import annotations + +import os +import statistics +from pathlib import Path +from typing import Optional + +from datatypes.epc.domain.epc_property_data import EpcPropertyData +from domain.epc_prediction.comparable_properties import ComparableProperty +from domain.epc_prediction.validation import ( + evaluate_component_accuracy, + iter_predictions, +) +from domain.sap10_calculator.calculator import Sap10Calculator, SapResult +from harness.epc_prediction_corpus import load_corpus + +_KG_PER_TONNE: float = 1000.0 + +CORPUS = Path(os.environ.get("EPC_PREDICTION_CORPUS", "/tmp/epc_prediction_corpus")) + + +def _result( + calculator: Sap10Calculator, epc: EpcPropertyData +) -> Optional[SapResult]: + try: + return calculator.calculate(epc) + except Exception: # noqa: BLE001 — some pictures don't score; count as misses + return None + + +def _co2_tonnes(result: SapResult) -> float: + """Calculated annual CO2 in tonnes, matching the lodged `co2_emissions_current` + scale (see domain/property_baseline/performance.py).""" + return result.co2_kg_per_yr / _KG_PER_TONNE + + +def main() -> None: + cohorts = load_corpus(CORPUS) + calculator = Sap10Calculator() + + # PRIMARY signal — Component Accuracy, calculator-free (the shared scorer). + accuracy = evaluate_component_accuracy(cohorts) + + print(f"corpus: {CORPUS}") + print(f"predicted {accuracy.targets} SAP-10.2 held-out targets\n") + print("--- Component Accuracy (PRIMARY, calculator-independent) ---") + for name, (hits, total) in accuracy.classification.items(): + if total: + print(f"CLASSIFICATION {name}: {hits}/{total} = {hits / total:.1%}") + print() + _floor_area_error(cohorts) + _residual("floor_area (m2)", accuracy.residuals.get("floor_area", [])) + _residual("window_count", accuracy.residuals.get("window_count", [])) + _residual( + "total_window_area (m2)", accuracy.residuals.get("total_window_area", []) + ) + _residual("building_parts", accuracy.residuals.get("building_parts", [])) + _residual("door_count", accuracy.residuals.get("door_count", [])) + + # SECONDARY guard — end-to-end vs API-lodged, calculator-FLOORED. Re-walks the + # same held-out targets (one orchestration via iter_predictions). + sap_vs_lodged: list[float] = [] + co2_vs_lodged: list[float] = [] + pei_vs_lodged: list[float] = [] + # Calculator floors — calc(actual) vs lodged — per metric. Each is the error + # the end-to-end cannot beat (the API-path mapper/calculator residual, a + # separate workstream), so it attributes how much of a metric's pred-vs-lodged + # gap is the calculator vs the prediction. PEI carries a far larger floor than + # SAP (~16 vs ~1.6 kWh/m2 / pts), so the headline PEI MAE must not be read as + # pure prediction error (issue #1228). + sap_floor: list[float] = [] + co2_floor: list[float] = [] + pei_floor: list[float] = [] + for predicted, actual in iter_predictions(cohorts): + pred_result = _result(calculator, predicted) + actual_result = _result(calculator, actual) + lodged_sap = actual.energy_rating_current + lodged_co2 = actual.co2_emissions_current + lodged_pei = actual.energy_consumption_current + if pred_result is not None: + if lodged_sap is not None: + sap_vs_lodged.append( + abs(pred_result.sap_score_continuous - lodged_sap) + ) + if lodged_co2 is not None: + co2_vs_lodged.append(abs(_co2_tonnes(pred_result) - lodged_co2)) + if lodged_pei is not None: + pei_vs_lodged.append( + abs(pred_result.primary_energy_kwh_per_m2 - lodged_pei) + ) + if actual_result is not None: + if lodged_sap is not None: + sap_floor.append( + abs(actual_result.sap_score_continuous - lodged_sap) + ) + if lodged_co2 is not None: + co2_floor.append(abs(_co2_tonnes(actual_result) - lodged_co2)) + if lodged_pei is not None: + pei_floor.append( + abs(actual_result.primary_energy_kwh_per_m2 - lodged_pei) + ) + + print() + print("--- End-to-end vs API-lodged (SECONDARY, calculator-FLOORED) ---") + _sap_line("SAP |pred − lodged|", sap_vs_lodged) + _sap_line("CO2 (t) |pred − lodged|", co2_vs_lodged) + _sap_line("PEI (kWh/m2) |pred − lodged|", pei_vs_lodged) + _sap_line(" floor: SAP |calc(actual) − lodged|", sap_floor) + _sap_line(" floor: CO2 |calc(actual) − lodged|", co2_floor) + _sap_line(" floor: PEI |calc(actual) − lodged|", pei_floor) + + +def _floor_area_error(cohorts: list[list[ComparableProperty]]) -> None: + """Floor-area accuracy as MAE (m²) and MAPE (% of the actual), plus the + typical (median actual) size — so the absolute error can be read relative to + how big dwellings are. The predicted area is the cohort median, set + independently of the geo/similarity weighting that drives the categoricals.""" + pairs = [ + (predicted.total_floor_area_m2, actual.total_floor_area_m2) + for predicted, actual in iter_predictions(cohorts) + ] + valid = [(p, a) for p, a in pairs if a] + if not valid: + print("RESIDUAL floor_area: (none)") + return + mae = statistics.mean(abs(p - a) for p, a in valid) + mape = statistics.mean(abs(p - a) / a for p, a in valid) + typical = statistics.median(a for _, a in valid) + print( + f"RESIDUAL floor_area: MAE {mae:.2f} m2 | MAPE {mape:.1%} | " + f"typical (median actual) {typical:.0f} m2 (n={len(valid)})" + ) + + +def _residual(label: str, values: list[float]) -> None: + if not values: + print(f"RESIDUAL {label}: (none)") + return + mean_signed = statistics.mean(values) + mean_abs = statistics.mean(abs(v) for v in values) + print(f"RESIDUAL {label}: mean {mean_signed:+.2f} | mean|·| {mean_abs:.2f} " + f"(n={len(values)})") + + +def _sap_line(label: str, values: list[float]) -> None: + if not values: + print(f"{label}: (none)") + return + print(f"{label}: MAE {statistics.mean(values):.2f} | " + f"median {statistics.median(values):.2f} (n={len(values)})") + + +if __name__ == "__main__": + main() diff --git a/tests/domain/epc_prediction/__init__.py b/tests/domain/epc_prediction/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/domain/epc_prediction/test_comparable_properties.py b/tests/domain/epc_prediction/test_comparable_properties.py new file mode 100644 index 00000000..10921b7a --- /dev/null +++ b/tests/domain/epc_prediction/test_comparable_properties.py @@ -0,0 +1,173 @@ +"""Behaviour of ComparableProperty Properties selection (ADR-0029): given a prediction +target's known inputs and the raw postcode cohort, choose + weight the +comparables EPC Prediction will synthesise from. Filter-then-relax ladder: +hard filters on identity (property type, built form) + known overrides while +enough remain, weighted by recency × similarity. Pure domain logic. +""" + +from datetime import date +from typing import Optional, Union + +from datatypes.epc.domain.epc_property_data import EpcPropertyData, SapBuildingPart +from domain.epc_prediction.comparable_properties import ( + ComparableProperty, + ComparableProperties, + select_comparables, +) +from domain.epc_prediction.prediction_target import PredictionTarget + + +def _comparable( + *, + property_type: str, + certificate_number: str, + built_form: str = "1", + wall_construction: Optional[Union[int, str]] = None, + address: Optional[str] = None, + registration_date: Optional[date] = None, +) -> ComparableProperty: + """A ComparableProperty carrying only the fields under test (opaque EpcPropertyData + with property_type / built_form / main wall set — the partial-instance idiom).""" + epc: EpcPropertyData = object.__new__(EpcPropertyData) + epc.property_type = property_type + epc.built_form = built_form + main: SapBuildingPart = object.__new__(SapBuildingPart) + if wall_construction is not None: + main.wall_construction = wall_construction + epc.sap_building_parts = [main] + return ComparableProperty( + epc=epc, + certificate_number=certificate_number, + address=address, + registration_date=registration_date, + ) + + +def test_selects_only_candidates_of_the_same_property_type() -> None: + # Arrange — a target house (property_type "2"); cohort of 2 houses + 1 flat. + target = PredictionTarget(postcode="LS6 1AA", property_type="2") + candidates = [ + _comparable(property_type="2", certificate_number="A"), + _comparable(property_type="2", certificate_number="B"), + _comparable(property_type="1", certificate_number="C"), + ] + + # Act + result: ComparableProperties = select_comparables(target, candidates) + + # Assert — the flat is excluded; the two houses remain. + assert {c.certificate_number for c in result.members} == {"A", "B"} + + +def test_dedupes_re_lodgements_to_the_latest_cert_per_address() -> None: + # Arrange — a register cohort with one address (FLAT 3) lodged three times. + # Comparables are one-per-real-neighbour, so a re-lodged address must not + # count three times towards the mode; the latest cert is its current state. + target = PredictionTarget(postcode="LS6 1AA", property_type="2") + candidates = [ + _comparable( + property_type="2", + certificate_number="OLD", + address="FLAT 3", + registration_date=date(2020, 4, 6), + ), + _comparable( + property_type="2", + certificate_number="MID", + address="FLAT 3", + registration_date=date(2021, 2, 1), + ), + _comparable( + property_type="2", + certificate_number="NEW", + address="FLAT 3", + registration_date=date(2025, 1, 20), + ), + _comparable( + property_type="2", + certificate_number="OTHER", + address="FLAT 5", + registration_date=date(2024, 9, 27), + ), + ] + + # Act + result: ComparableProperties = select_comparables(target, candidates) + + # Assert — FLAT 3 collapses to its latest cert; FLAT 5 is untouched. + assert {c.certificate_number for c in result.members} == {"NEW", "OTHER"} + + +def test_filters_to_the_known_built_form_when_enough_remain() -> None: + # Arrange — a mid-terrace target (built_form "4"); cohort of 5 mid-terraces + # + 2 detached, all houses. The built form is known and leaves ≥ k, so it is + # applied as a hard filter. + target = PredictionTarget( + postcode="LS6 1AA", property_type="2", built_form="4" + ) + candidates = [ + _comparable(property_type="2", built_form="4", certificate_number=f"T{i}") + for i in range(5) + ] + [ + _comparable(property_type="2", built_form="1", certificate_number=f"D{i}") + for i in range(2) + ] + + # Act + result: ComparableProperties = select_comparables( + target, candidates, minimum_cohort=5 + ) + + # Assert — only the five mid-terraces survive. + assert {c.certificate_number for c in result.members} == { + "T0", "T1", "T2", "T3", "T4" + } + + +def test_known_wall_override_emphasises_matching_comparables() -> None: + # Arrange — a mixed street: 5 solid-brick (code 2) + 3 cavity (code 1) houses. + # We KNOW the target is solid brick (a Landlord Override), and the filter + # leaves ≥ k, so cavity neighbours are dropped (the border-property case). + target = PredictionTarget( + postcode="LS6 1AA", property_type="2", wall_construction=2 + ) + candidates = [ + _comparable(property_type="2", wall_construction=2, certificate_number=f"S{i}") + for i in range(5) + ] + [ + _comparable(property_type="2", wall_construction=1, certificate_number=f"C{i}") + for i in range(3) + ] + + # Act + result: ComparableProperties = select_comparables( + target, candidates, minimum_cohort=5 + ) + + # Assert — only the solid-brick comparables remain. + assert {c.certificate_number for c in result.members} == { + "S0", "S1", "S2", "S3", "S4" + } + + +def test_known_wall_override_relaxes_when_too_few_match() -> None: + # Arrange — only 2 solid-brick but 6 cavity houses; the override would leave + # 2 (< k=5), so it relaxes to keep the full type cohort (graceful degradation). + target = PredictionTarget( + postcode="LS6 1AA", property_type="2", wall_construction=2 + ) + candidates = [ + _comparable(property_type="2", wall_construction=2, certificate_number=f"S{i}") + for i in range(2) + ] + [ + _comparable(property_type="2", wall_construction=1, certificate_number=f"C{i}") + for i in range(6) + ] + + # Act + result: ComparableProperties = select_comparables( + target, candidates, minimum_cohort=5 + ) + + # Assert — relaxed: all eight houses retained. + assert len(result.members) == 8 diff --git a/tests/domain/epc_prediction/test_component_accuracy_gate.py b/tests/domain/epc_prediction/test_component_accuracy_gate.py new file mode 100644 index 00000000..c34bee83 --- /dev/null +++ b/tests/domain/epc_prediction/test_component_accuracy_gate.py @@ -0,0 +1,118 @@ +"""Tier-1 ratcheting Component Accuracy gate (ADR-0030). + +Runs the calculator-free leave-one-out scorer over the committed, anonymised +fixture and asserts each per-component classification rate / geometry residual is +no worse than a committed baseline. Because the prediction is deterministic and +the fixture is frozen, every run reproduces the same numbers exactly — so a +failure means a real *regression* in prediction quality, never sample noise. + +The floors / ceilings are the currently-measured values and only ever **tighten** +(the repo's no-tolerance-widening ethos applied to an aggregate): when prediction +improves, ratchet the relevant floor up in the same change. The end-to-end +SAP / carbon / PE guards are deliberately *not* here — they need the calculator, +whose API-path residual is a separate workstream; the component floors are the +real gate (ADR-0030). +""" + +from pathlib import Path + +import pytest + +from domain.epc_prediction.validation import ( + ComponentAccuracy, + evaluate_component_accuracy, +) +from harness.epc_prediction_corpus import load_corpus + +_FIXTURE = Path(__file__).parents[3] / "tests" / "fixtures" / "epc_prediction" + +# Minimum classification hit-rate per component (ratchet floors). Tighten — never +# loosen — as prediction improves. Values are the measured rates over the frozen +# 36-target fixture; a 1e-3 tolerance absorbs float rounding only. +_RATE_FLOORS: dict[str, float] = { + "wall_construction": 0.8889, + "wall_insulation_type": 0.8333, + "construction_age_band": 0.6389, + "construction_age_band_pm1": 0.8333, + "roof_construction": 0.7222, + "floor_construction": 0.8125, + "heating_main_fuel": 0.9722, + "heating_main_category": 0.9444, + "heating_main_control": 0.8056, + "water_heating_fuel": 0.9722, + "water_heating_code": 0.9444, + "has_hot_water_cylinder": 0.8889, + "cylinder_insulation_type": 0.5000, + "secondary_heating_type": 0.0000, + "roof_insulation_thickness": 0.4118, + "roof_insulation_thickness_pm1": 0.4118, + "floor_insulation": 0.9375, + "has_room_in_roof": 0.8333, + "modal_glazing_type": 0.5556, + "has_pv": 1.0000, + "solar_water_heating": 1.0000, +} + +# Maximum mean absolute residual per numeric component (ratchet ceilings). +# window_count is deliberately excluded — it is cosmetic for SAP (issue #1222): +# the predicted picture clusters at a mapper-default 4 windows while actuals +# spread 1-21, yet total_window_area (the SAP-relevant signal) stays tight. +# +# floor_area was re-baselined 11.8983 -> 12.0378 when floor-area sizing moved from +# the plain cohort median to the geo-proximity-weighted median (a *method* change, +# not a loosening). The change is a clear win on the full 514-target corpus +# (MAE 10.48 -> 9.73 / MAPE 13.2% -> 12.2%); the n=36 frozen fixture moved +0.14 +# the other way as small-sample noise (one target's shift moves an n=36 MAE more +# than that). The ceiling still pins the new deterministic value exactly, so the +# tighten-only ratchet resumes from here. +_RESIDUAL_CEILINGS: dict[str, float] = { + "floor_area": 12.0378, + "total_window_area": 4.4067, + "building_parts": 0.3333, + "door_count": 0.6389, +} + +_TOLERANCE = 1e-3 + + +@pytest.fixture(scope="module") +def accuracy() -> ComponentAccuracy: + if not (_FIXTURE / "_index.json").exists(): + pytest.skip(f"no EPC Prediction fixture at {_FIXTURE}") + return evaluate_component_accuracy(load_corpus(_FIXTURE)) + + +def test_fixture_yields_the_expected_target_count( + accuracy: ComponentAccuracy, +) -> None: + # The frozen fixture must still produce its full set of SAP-10.2 targets — a + # drop means the fixture or the target filter changed. + assert accuracy.targets >= 36 + + +@pytest.mark.parametrize("component,floor", sorted(_RATE_FLOORS.items())) +def test_classification_rate_does_not_regress( + accuracy: ComponentAccuracy, component: str, floor: float +) -> None: + # Arrange / Act + rate = accuracy.rate(component) + + # Assert — the component is still applicable and at or above its floor. + assert rate is not None, f"{component} had no applicable targets" + assert rate >= floor - _TOLERANCE, ( + f"{component} classification regressed: {rate:.4f} < floor {floor:.4f}" + ) + + +@pytest.mark.parametrize("component,ceiling", sorted(_RESIDUAL_CEILINGS.items())) +def test_residual_does_not_regress( + accuracy: ComponentAccuracy, component: str, ceiling: float +) -> None: + # Arrange / Act + mean_abs = accuracy.mean_abs_residual(component) + + # Assert — the mean absolute residual is at or below its ceiling. + assert mean_abs is not None, f"{component} had no residuals" + assert mean_abs <= ceiling + _TOLERANCE, ( + f"{component} residual regressed: {mean_abs:.4f} > ceiling {ceiling:.4f}" + ) diff --git a/tests/domain/epc_prediction/test_epc_prediction.py b/tests/domain/epc_prediction/test_epc_prediction.py new file mode 100644 index 00000000..1f1ef42f --- /dev/null +++ b/tests/domain/epc_prediction/test_epc_prediction.py @@ -0,0 +1,545 @@ +"""Behaviour of EPC Prediction synthesis (ADR-0029): turn the selected +ComparableProperty Properties into a predicted EpcPropertyData. Hybrid — copy a coherent +representative template's structure (building parts, windows, geometry), set the +homogeneous categoricals to the recency-weighted cohort mode, apply Landlord +Overrides on top. Pure domain logic. +""" + +from datetime import date +from typing import Optional, Union + +from datatypes.epc.domain.epc_property_data import ( + EpcPropertyData, + MainHeatingDetail, + SapBuildingPart, + SapFloorDimension, + SapHeating, + SapWindow, +) +from domain.geospatial.coordinates import Coordinates +from domain.epc_prediction.comparable_properties import ( + ComparableProperty, + ComparableProperties, +) +from domain.epc_prediction.epc_prediction import ( + EpcPrediction, + PredictionConfidence, +) +from domain.epc_prediction.prediction_target import PredictionTarget + + +def _epc( + *, + building_parts: int = 1, + floor_area: float = 80.0, + wall_construction: Union[int, str] = 1, + wall_insulation_type: Union[int, str] = 1, + construction_age_band: str = "K", + roof_construction: Optional[int] = 1, + roof_insulation_thickness: Optional[Union[str, int]] = 100, + floor_construction: Optional[int] = 1, + floor_insulation: Optional[int] = 1, + glazing_type: Union[int, str] = 3, + main_fuel_type: Union[int, str] = 1, + main_heating_category: Optional[int] = 1, + main_heating_control: Union[int, str] = 1, + water_heating_fuel: Optional[int] = 1, + water_heating_code: Optional[int] = 1, + has_hot_water_cylinder: bool = True, + solar_water_heating: bool = False, +) -> EpcPropertyData: + epc: EpcPropertyData = object.__new__(EpcPropertyData) + epc.property_type = "2" + epc.built_form = "4" + epc.total_floor_area_m2 = floor_area + parts: list[SapBuildingPart] = [] + for _ in range(building_parts): + part: SapBuildingPart = object.__new__(SapBuildingPart) + part.wall_construction = wall_construction + part.wall_insulation_type = wall_insulation_type + part.construction_age_band = construction_age_band + part.roof_construction = roof_construction + part.roof_insulation_thickness = roof_insulation_thickness + floor_dim: SapFloorDimension = object.__new__(SapFloorDimension) + floor_dim.floor_construction = floor_construction + floor_dim.floor_insulation = floor_insulation + part.sap_floor_dimensions = [floor_dim] + parts.append(part) + epc.sap_building_parts = parts + window: SapWindow = object.__new__(SapWindow) + window.window_width = 1.0 + window.window_height = 1.0 + window.glazing_type = glazing_type + epc.sap_windows = [window] + heating: SapHeating = object.__new__(SapHeating) + detail: MainHeatingDetail = object.__new__(MainHeatingDetail) + detail.main_fuel_type = main_fuel_type + detail.main_heating_category = main_heating_category + detail.main_heating_control = main_heating_control + heating.main_heating_details = [detail] + heating.water_heating_fuel = water_heating_fuel + heating.water_heating_code = water_heating_code + heating.cylinder_insulation_type = 1 + heating.secondary_heating_type = None + epc.sap_heating = heating + epc.has_hot_water_cylinder = has_hot_water_cylinder + epc.solar_water_heating = solar_water_heating + return epc + + +def _cohort(*epcs: EpcPropertyData) -> ComparableProperties: + return ComparableProperties( + members=tuple( + ComparableProperty(epc=e, certificate_number=str(i)) for i, e in enumerate(epcs) + ) + ) + + +def _dated_cohort( + *dated: tuple[EpcPropertyData, date], +) -> ComparableProperties: + return ComparableProperties( + members=tuple( + ComparableProperty(epc=e, certificate_number=str(i), registration_date=d) + for i, (e, d) in enumerate(dated) + ) + ) + + +def test_predicts_a_picture_by_copying_a_representative_template() -> None: + # Arrange — a single comparable with a distinctive structure (2 building + # parts, 92 m²); with nothing else to go on it is the template. + template = _epc(building_parts=2, floor_area=92.0) + target = PredictionTarget(postcode="LS6 1AA", property_type="2") + + # Act + predicted: EpcPropertyData = EpcPrediction().predict(target, _cohort(template)) + + # Assert — the structure is copied wholesale (and it is a copy, not the same + # object — the baseline must never be mutated). + assert len(predicted.sap_building_parts) == 2 + assert predicted.total_floor_area_m2 == 92.0 + assert predicted is not template + + +def test_template_is_the_member_closest_to_the_cohort_median_size() -> None: + # Arrange — the cohort spans a wide range of sizes; members[0] is an atypical + # tiny 20 m² outlier. A single neighbour's geometry is copied wholesale, so + # the template must be the size-representative member (closest to the median), + # not whoever happens to come first (ADR-0029 decision 4: closest on size). + cohort = _cohort( + _epc(floor_area=20.0), + _epc(floor_area=80.0), + _epc(floor_area=200.0), + ) + + # Act + predicted: EpcPropertyData = EpcPrediction().predict( + PredictionTarget(postcode="LS6 1AA", property_type="2"), cohort + ) + + # Assert — the 80 m² member (the median) seeds the structure, not the 20 m² + # outlier sitting at members[0]. + assert predicted.total_floor_area_m2 == 80.0 + + +def test_sets_main_wall_construction_to_the_cohort_mode() -> None: + # Arrange — the template (members[0]) is solid brick (2), but the cohort + # majority is cavity (1). The homogeneous categorical should follow the mode, + # not the one template, so the prediction is robust to an atypical template. + cohort = _cohort( + _epc(wall_construction=2), + _epc(wall_construction=1), + _epc(wall_construction=1), + _epc(wall_construction=1), + ) + + # Act + predicted: EpcPropertyData = EpcPrediction().predict( + PredictionTarget(postcode="LS6 1AA", property_type="2"), cohort + ) + + # Assert — cavity (the mode) wins over the solid-brick template. + assert predicted.sap_building_parts[0].wall_construction == 1 + + +def test_sets_the_other_homogeneous_categoricals_to_the_cohort_mode() -> None: + # Arrange — the median-size template (members[0], 80 m²) is an atypical + # outlier on every categorical; the cohort majority disagrees. Age band, + # wall insulation, roof construction and floor construction are all + # homogeneous categoricals, so each should follow its mode, not the one + # template (ADR-0029 decision 4). + cohort = _cohort( + _epc( + floor_area=80.0, + construction_age_band="A", + wall_insulation_type=9, + roof_construction=7, + floor_construction=7, + ), + _epc( + construction_age_band="K", + wall_insulation_type=1, + roof_construction=2, + floor_construction=3, + ), + _epc( + construction_age_band="K", + wall_insulation_type=1, + roof_construction=2, + floor_construction=3, + ), + ) + + # Act + predicted: EpcPropertyData = EpcPrediction().predict( + PredictionTarget(postcode="LS6 1AA", property_type="2"), cohort + ) + + # Assert — every categorical follows the cohort mode over the outlier + # template. + main = predicted.sap_building_parts[0] + assert main.construction_age_band == "K" + assert main.wall_insulation_type == 1 + assert main.roof_construction == 2 + assert main.sap_floor_dimensions[0].floor_construction == 3 + + +def test_modes_roof_and_floor_insulation() -> None: + # Arrange — the median-size template (members[0]) is an outlier on roof + # insulation thickness and floor insulation; the cohort majority disagrees. + # These are independent fabric categoricals, so each should follow its + # cohort mode like the construction categoricals do. + cohort = _cohort( + _epc(floor_area=80.0, roof_insulation_thickness=25, floor_insulation=9), + _epc(roof_insulation_thickness=300, floor_insulation=2), + _epc(roof_insulation_thickness=300, floor_insulation=2), + ) + + # Act + predicted: EpcPropertyData = EpcPrediction().predict( + PredictionTarget(postcode="LS6 1AA", property_type="2"), cohort + ) + + # Assert — each follows the cohort mode over the outlier template. + main = predicted.sap_building_parts[0] + assert main.roof_insulation_thickness == 300 + assert main.sap_floor_dimensions[0].floor_insulation == 2 + + +def test_recency_weights_roof_insulation_mode() -> None: + # Arrange — an old majority (three 2015 certs at 100 mm) and a recent + # minority (two 2025 certs at 300 mm). Roof insulation is topped up over + # time, so the recent neighbours reflect the current state: the recency- + # weighted mode must pick 300 over the plain-majority 100. + cohort = _dated_cohort( + (_epc(roof_insulation_thickness=100), date(2015, 1, 1)), + (_epc(roof_insulation_thickness=100), date(2015, 1, 1)), + (_epc(roof_insulation_thickness=100), date(2015, 1, 1)), + (_epc(roof_insulation_thickness=300), date(2025, 1, 1)), + (_epc(roof_insulation_thickness=300), date(2025, 1, 1)), + ) + + # Act + predicted: EpcPropertyData = EpcPrediction().predict( + PredictionTarget(postcode="LS6 1AA", property_type="2"), cohort + ) + + # Assert — recency overrides the stale majority. + assert predicted.sap_building_parts[0].roof_insulation_thickness == 300 + + +def test_floor_area_is_the_cohort_median_not_the_templates_own_area() -> None: + # Arrange — an even-sized cohort whose median (70) falls between members, so + # the size-representative template (the first member closest to the median, + # 60 m²) does not itself sit on the median. The predicted floor area is a + # point estimate of the target's size, best served by the cohort median (the + # MAD-minimising estimator), decoupled from whichever template seeds the + # structure. + cohort = _cohort( + _epc(floor_area=40.0), + _epc(floor_area=60.0), + _epc(floor_area=80.0), + _epc(floor_area=100.0), + ) + + # Act + predicted: EpcPropertyData = EpcPrediction().predict( + PredictionTarget(postcode="LS6 1AA", property_type="2"), cohort + ) + + # Assert — the floor area is the cohort median (70), not the template's 60. + assert predicted.total_floor_area_m2 == 70.0 + + +def test_floor_area_leans_toward_the_nearest_neighbours_size() -> None: + # Arrange — three FAR neighbours are 60 m²; one neighbour AT the target is + # 120 m². The plain median would be 60, but homes built together share a + # footprint, so the geo-proximity-weighted median leans toward the near + # neighbour's size. + here = Coordinates(longitude=0.0, latitude=0.0) + far = Coordinates(longitude=1.0, latitude=1.0) # ~150 km away + cohort = ComparableProperties( + members=( + ComparableProperty(_epc(floor_area=60.0), "1", coordinates=far), + ComparableProperty(_epc(floor_area=60.0), "2", coordinates=far), + ComparableProperty(_epc(floor_area=60.0), "3", coordinates=far), + ComparableProperty(_epc(floor_area=120.0), "4", coordinates=here), + ) + ) + target = PredictionTarget( + postcode="LS6 1AA", property_type="2", coordinates=here + ) + + # Act + predicted: EpcPropertyData = EpcPrediction().predict(target, cohort) + + # Assert — the near neighbour's size dominates the far majority. + assert predicted.total_floor_area_m2 == 120.0 + + +def test_floor_area_median_is_unweighted_without_target_coordinates() -> None: + # Arrange — identical cohort, but the target has no coordinates, so geo + # weighting is off and the floor area reduces to the plain cohort median (60). + here = Coordinates(longitude=0.0, latitude=0.0) + far = Coordinates(longitude=1.0, latitude=1.0) + cohort = ComparableProperties( + members=( + ComparableProperty(_epc(floor_area=60.0), "1", coordinates=far), + ComparableProperty(_epc(floor_area=60.0), "2", coordinates=far), + ComparableProperty(_epc(floor_area=60.0), "3", coordinates=far), + ComparableProperty(_epc(floor_area=120.0), "4", coordinates=here), + ) + ) + target = PredictionTarget(postcode="LS6 1AA", property_type="2") + + # Act + predicted: EpcPropertyData = EpcPrediction().predict(target, cohort) + + # Assert — without target coordinates, the plain median (60) wins. + assert predicted.total_floor_area_m2 == 60.0 + + +def test_categorical_mode_leans_on_size_similar_neighbours() -> None: + # Arrange — a count majority (three) carries wall-insulation 9, but two of + # them are 400 m² size outliers; the cohort centre (median 100 m²) holds + # wall-insulation 1. Physical-similarity weighting down-weights the outliers, + # so the size-representative value 1 wins over the plain-count majority 9. + cohort = _cohort( + _epc(floor_area=100.0, wall_insulation_type=1), + _epc(floor_area=100.0, wall_insulation_type=1), + _epc(floor_area=100.0, wall_insulation_type=9), + _epc(floor_area=400.0, wall_insulation_type=9), + _epc(floor_area=400.0, wall_insulation_type=9), + ) + + # Act + predicted: EpcPropertyData = EpcPrediction().predict( + PredictionTarget(postcode="LS6 1AA", property_type="2"), cohort + ) + + # Assert — the size-similar value wins over the outlier-driven majority. + assert predicted.sap_building_parts[0].wall_insulation_type == 1 + + +def test_categorical_mode_leans_on_age_similar_neighbours() -> None: + # Arrange — same size throughout (so size weighting is neutral). A count + # majority (three) carries wall-insulation 9, but two of them are age-band A + # outliers while the cohort's modal band is K. Age-similarity weighting + # down-weights the outliers, so the band-representative value 1 wins. + cohort = _cohort( + _epc(construction_age_band="K", wall_insulation_type=1), + _epc(construction_age_band="K", wall_insulation_type=1), + _epc(construction_age_band="K", wall_insulation_type=9), + _epc(construction_age_band="A", wall_insulation_type=9), + _epc(construction_age_band="A", wall_insulation_type=9), + ) + + # Act + predicted: EpcPropertyData = EpcPrediction().predict( + PredictionTarget(postcode="LS6 1AA", property_type="2"), cohort + ) + + # Assert — the age-similar value wins over the outlier-driven majority. + assert predicted.sap_building_parts[0].wall_insulation_type == 1 + + +def test_confidence_reports_cohort_size_and_unanimous_agreement() -> None: + # Arrange — a unanimous cohort: three neighbours, all cavity-walled (1). + cohort = _cohort( + _epc(wall_construction=1), + _epc(wall_construction=1), + _epc(wall_construction=1), + ) + + # Act + confidence: PredictionConfidence = EpcPrediction().confidence(cohort) + + # Assert — three neighbours, total agreement on the wall construction. + assert confidence.cohort_size == 3 + assert confidence.agreement("wall_construction") == 1.0 + + +def test_confidence_agreement_is_the_modal_share_of_the_cohort() -> None: + # Arrange — three of four neighbours are cavity (1), one is solid brick (2), + # so the cohort is split on the wall construction. + cohort = _cohort( + _epc(wall_construction=1), + _epc(wall_construction=1), + _epc(wall_construction=1), + _epc(wall_construction=2), + ) + + # Act + confidence: PredictionConfidence = EpcPrediction().confidence(cohort) + + # Assert — agreement is the modal value's share of the cohort: 3 of 4. + share: Optional[float] = confidence.agreement("wall_construction") + assert share is not None + assert abs(share - 0.75) <= 1e-9 + + +def test_confidence_excludes_absent_component_values_from_the_denominator() -> None: + # Arrange — two neighbours lodge a roof construction (both code 2); one lodges + # none. The missing value must not dilute the agreement to 2/3. + cohort = _cohort( + _epc(roof_construction=2), + _epc(roof_construction=2), + _epc(roof_construction=None), + ) + + # Act + confidence: PredictionConfidence = EpcPrediction().confidence(cohort) + + # Assert — agreement counts only the two present, unanimous values (1.0), + # while the cohort size still reflects all three neighbours. + share: Optional[float] = confidence.agreement("roof_construction") + assert share is not None + assert abs(share - 1.0) <= 1e-9 + assert confidence.cohort_size == 3 + + +def test_heating_is_a_coherent_donor_not_the_structural_template() -> None: + # Arrange — the size-representative template (median 80 m²) runs an atypical + # system (fuel 99, no cylinder), but the cohort's modal heating signature is a + # gas system (fuel 1) with a cylinder, including a recent 2024 cert. Heating + # sub-fields can't be field-moded, so the whole SapHeating cluster must be + # copied from the coherent modal donor — the most recent among the matches — + # not inherited from the structural template. + cohort = _dated_cohort( + ( + _epc( + floor_area=80.0, + main_fuel_type=99, + main_heating_control=99, + has_hot_water_cylinder=False, + ), + date(2016, 1, 1), + ), + (_epc(main_fuel_type=1, main_heating_control=5), date(2018, 1, 1)), + (_epc(main_fuel_type=1, main_heating_control=5), date(2019, 1, 1)), + (_epc(main_fuel_type=1, main_heating_control=7), date(2024, 1, 1)), + ) + + # Act + predicted: EpcPropertyData = EpcPrediction().predict( + PredictionTarget(postcode="LS6 1AA", property_type="2"), cohort + ) + + # Assert — heating comes coherently from the modal-signature donor (gas + + # cylinder), the most recent match (control 7 from 2024), not the template's + # fuel 99. + detail = predicted.sap_heating.main_heating_details[0] + assert detail.main_fuel_type == 1 + assert detail.main_heating_control == 7 + assert predicted.has_hot_water_cylinder is True + + +def test_glazing_follows_the_recency_weighted_cohort_mode() -> None: + # Arrange — an old majority single-glazed (type 1, 2015) and a recent + # minority double-glazed (type 3, 2025). Glazing is retrofitted over time + # (single → double), so the recent neighbours reflect the current state: the + # recency-weighted mode must pick double over the stale single-glazed + # majority, like roof insulation thickness. + cohort = _dated_cohort( + (_epc(glazing_type=1), date(2015, 1, 1)), + (_epc(glazing_type=1), date(2015, 1, 1)), + (_epc(glazing_type=1), date(2015, 1, 1)), + (_epc(glazing_type=3), date(2025, 1, 1)), + (_epc(glazing_type=3), date(2025, 1, 1)), + ) + + # Act + predicted: EpcPropertyData = EpcPrediction().predict( + PredictionTarget(postcode="LS6 1AA", property_type="2"), cohort + ) + + # Assert — every predicted window takes the recent glazing over the majority. + assert all(window.glazing_type == 3 for window in predicted.sap_windows) + + +def test_geo_proximity_weights_the_nearest_neighbour() -> None: + # Arrange — same size + age (so similarity weighting is uniform). Three FAR + # neighbours are cavity (1); one neighbour AT the target is solid brick (2). + # wall construction is a geo-weighted component, so the near neighbour + # outweighs the far majority. + here = Coordinates(longitude=0.0, latitude=0.0) + far = Coordinates(longitude=1.0, latitude=1.0) # ~150 km away + cohort = ComparableProperties( + members=( + ComparableProperty(_epc(wall_construction=1), "1", coordinates=far), + ComparableProperty(_epc(wall_construction=1), "2", coordinates=far), + ComparableProperty(_epc(wall_construction=1), "3", coordinates=far), + ComparableProperty(_epc(wall_construction=2), "4", coordinates=here), + ) + ) + target = PredictionTarget( + postcode="LS6 1AA", property_type="2", coordinates=here + ) + + # Act + predicted: EpcPropertyData = EpcPrediction().predict(target, cohort) + + # Assert — the near neighbour's wall wins over the far majority. + assert predicted.sap_building_parts[0].wall_construction == 2 + + +def test_geo_proximity_is_off_without_target_coordinates() -> None: + # Arrange — identical cohort, but the target has no coordinates, so geo + # weighting is disabled and the plain cohort majority (cavity, 1) wins. + here = Coordinates(longitude=0.0, latitude=0.0) + far = Coordinates(longitude=1.0, latitude=1.0) + cohort = ComparableProperties( + members=( + ComparableProperty(_epc(wall_construction=1), "1", coordinates=far), + ComparableProperty(_epc(wall_construction=1), "2", coordinates=far), + ComparableProperty(_epc(wall_construction=1), "3", coordinates=far), + ComparableProperty(_epc(wall_construction=2), "4", coordinates=here), + ) + ) + target = PredictionTarget(postcode="LS6 1AA", property_type="2") + + # Act + predicted: EpcPropertyData = EpcPrediction().predict(target, cohort) + + # Assert — without target coordinates, the majority wins (geo off). + assert predicted.sap_building_parts[0].wall_construction == 1 + + +def test_applies_a_known_wall_override_over_the_mode() -> None: + # Arrange — the cohort mode is cavity (1), but we KNOW the target is solid + # brick (2), a Landlord Override. The known value must win over the estimate. + cohort = _cohort( + _epc(wall_construction=1), + _epc(wall_construction=1), + _epc(wall_construction=1), + ) + target = PredictionTarget( + postcode="LS6 1AA", property_type="2", wall_construction=2 + ) + + # Act + predicted: EpcPropertyData = EpcPrediction().predict(target, cohort) + + # Assert — the known override overrides the cohort mode. + assert predicted.sap_building_parts[0].wall_construction == 2 diff --git a/tests/domain/epc_prediction/test_prediction_comparison.py b/tests/domain/epc_prediction/test_prediction_comparison.py new file mode 100644 index 00000000..357530bc --- /dev/null +++ b/tests/domain/epc_prediction/test_prediction_comparison.py @@ -0,0 +1,365 @@ +"""Behaviour of the per-Property prediction comparison (ADR-0029): given a +predicted EpcPropertyData and the actual one, report the accuracy signals the +validation harness aggregates — classification matches on the key categoricals +and residuals on the geometry. Pure; SAP residual is computed in the runner +(it needs the calculator + lodged SAP). +""" + +from typing import Optional, Union + +from datatypes.epc.domain.epc_property_data import ( + EpcPropertyData, + MainHeatingDetail, + PhotovoltaicSupply, + SapBuildingPart, + SapEnergySource, + SapFloorDimension, + SapHeating, + SapRoomInRoof, + SapWindow, +) +from domain.epc_prediction.prediction_comparison import compare_prediction + + +def _epc( + *, + wall_construction: int = 1, + wall_insulation_type: Union[int, str] = 1, + construction_age_band: str = "K", + roof_construction: Optional[int] = 1, + roof_insulation_thickness: Optional[Union[str, int]] = 100, + floor_construction: Optional[int] = 1, + floor_insulation: Optional[int] = 1, + has_room_in_roof: bool = False, + floor_area: float = 80.0, + building_parts: int = 1, + windows: Optional[list[tuple[float, float]]] = None, + glazing_type: Union[int, str] = 3, + door_count: int = 2, + has_pv: bool = False, + solar_water_heating: bool = False, + main_fuel_type: Union[int, str] = 20, + main_heating_category: Optional[int] = 2, + main_heating_control: Union[int, str] = 2100, + water_heating_fuel: Optional[int] = 20, + water_heating_code: Optional[int] = 901, + has_hot_water_cylinder: bool = True, + cylinder_insulation_type: Optional[Union[int, str]] = 1, + secondary_heating_type: Optional[Union[int, str]] = None, +) -> EpcPropertyData: + epc: EpcPropertyData = object.__new__(EpcPropertyData) + epc.total_floor_area_m2 = floor_area + epc.door_count = door_count + epc.solar_water_heating = solar_water_heating + parts: list[SapBuildingPart] = [] + for _ in range(building_parts): + part: SapBuildingPart = object.__new__(SapBuildingPart) + part.wall_construction = wall_construction + part.wall_insulation_type = wall_insulation_type + part.construction_age_band = construction_age_band + part.roof_construction = roof_construction + part.roof_insulation_thickness = roof_insulation_thickness + part.sap_room_in_roof = ( + object.__new__(SapRoomInRoof) if has_room_in_roof else None + ) + floor_dim: SapFloorDimension = object.__new__(SapFloorDimension) + floor_dim.floor_construction = floor_construction + floor_dim.floor_insulation = floor_insulation + part.sap_floor_dimensions = [floor_dim] + parts.append(part) + epc.sap_building_parts = parts + detail: MainHeatingDetail = object.__new__(MainHeatingDetail) + detail.main_fuel_type = main_fuel_type + detail.main_heating_category = main_heating_category + detail.main_heating_control = main_heating_control + heating: SapHeating = object.__new__(SapHeating) + heating.main_heating_details = [detail] + heating.water_heating_fuel = water_heating_fuel + heating.water_heating_code = water_heating_code + heating.cylinder_insulation_type = cylinder_insulation_type + heating.secondary_heating_type = secondary_heating_type + epc.sap_heating = heating + epc.has_hot_water_cylinder = has_hot_water_cylinder + sap_windows: list[SapWindow] = [] + for width, height in windows or []: + w: SapWindow = object.__new__(SapWindow) + w.window_width = width + w.window_height = height + w.glazing_type = glazing_type + sap_windows.append(w) + epc.sap_windows = sap_windows + energy: SapEnergySource = object.__new__(SapEnergySource) + energy.photovoltaic_supply = ( + object.__new__(PhotovoltaicSupply) if has_pv else None + ) + energy.photovoltaic_arrays = None + epc.sap_energy_source = energy + return epc + + +def test_scores_age_band_within_one_band() -> None: + # Arrange — predicted age band K, actual J (adjacent). Adjacent RdSAP age + # bands carry near-identical U-values, so an off-by-one is ~SAP-neutral: it + # misses the exact hit but counts as a ±1-band hit (issue #1222). + predicted = _epc(construction_age_band="K") + actual = _epc(construction_age_band="J") + + # Act + hits = compare_prediction(predicted, actual).categorical_hits + + # Assert + assert hits["construction_age_band"] is False + assert hits["construction_age_band_pm1"] is True + + +def test_age_band_two_apart_misses_both() -> None: + # Arrange — predicted K, actual H (three bands apart): a real miss on both. + predicted = _epc(construction_age_band="K") + actual = _epc(construction_age_band="H") + + # Act + hits = compare_prediction(predicted, actual).categorical_hits + + # Assert + assert hits["construction_age_band"] is False + assert hits["construction_age_band_pm1"] is False + + +def test_scores_roof_insulation_within_one_bucket() -> None: + # Arrange — predicted 250mm, actual 270mm (adjacent RdSAP buckets). Adjacent + # thicknesses carry near-identical roof U-values, so it misses the exact hit + # but counts as a ±1-bucket hit, like the age band (issue #1222). + predicted = _epc(roof_insulation_thickness="250mm") + actual = _epc(roof_insulation_thickness="270mm") + + # Act + hits = compare_prediction(predicted, actual).categorical_hits + + # Assert + assert hits["roof_insulation_thickness"] is False + assert hits["roof_insulation_thickness_pm1"] is True + + +def test_roof_insulation_two_buckets_apart_misses_both() -> None: + # Arrange — predicted 100mm, actual 200mm (three buckets apart: 100/150/200): + # a real miss on both exact and ±1. + predicted = _epc(roof_insulation_thickness="100mm") + actual = _epc(roof_insulation_thickness="200mm") + + # Act + hits = compare_prediction(predicted, actual).categorical_hits + + # Assert + assert hits["roof_insulation_thickness"] is False + assert hits["roof_insulation_thickness_pm1"] is False + + +def test_roof_insulation_off_scale_no_data_only_exact_counts() -> None: + # Arrange — actual is the off-scale "ND" (no-data) category; a non-equal + # prediction can't be an adjacent-bucket hit. + predicted = _epc(roof_insulation_thickness="200mm") + actual = _epc(roof_insulation_thickness="ND") + + # Act + hits = compare_prediction(predicted, actual).categorical_hits + + # Assert + assert hits["roof_insulation_thickness"] is False + assert hits["roof_insulation_thickness_pm1"] is False + + +def test_flags_a_correct_main_wall_construction_classification() -> None: + # Arrange — predicted and actual agree on cavity (1). + predicted = _epc(wall_construction=1) + actual = _epc(wall_construction=1) + + # Act + comparison = compare_prediction(predicted, actual) + + # Assert + assert comparison.categorical_hits["wall_construction"] is True + + +def test_flags_an_incorrect_main_wall_construction_classification() -> None: + # Arrange — predicted cavity (1), actual solid brick (2). + predicted = _epc(wall_construction=1) + actual = _epc(wall_construction=2) + + # Act + comparison = compare_prediction(predicted, actual) + + # Assert + assert comparison.categorical_hits["wall_construction"] is False + + +def test_classifies_the_extra_homogeneous_categoricals() -> None: + # Arrange — predicted agrees on age band, wall insulation, roof and floor + # construction with the actual; only wall insulation differs. + predicted = _epc( + construction_age_band="K", + wall_insulation_type=2, + roof_construction=3, + floor_construction=1, + ) + actual = _epc( + construction_age_band="K", + wall_insulation_type=1, + roof_construction=3, + floor_construction=1, + ) + + # Act + comparison = compare_prediction(predicted, actual) + + # Assert + assert comparison.categorical_hits["construction_age_band"] is True + assert comparison.categorical_hits["wall_insulation_type"] is False + assert comparison.categorical_hits["roof_construction"] is True + assert comparison.categorical_hits["floor_construction"] is True + + +def test_classifies_the_heating_components() -> None: + # Arrange — predicted and actual agree on everything heating except the main + # fuel (predicted oil 28, actual gas 20) and secondary heating (predicted + # none, actual a wood stove 693). Heating is the dominant SAP lever, so each + # heating component is scored (ADR-0030 Component Accuracy). + predicted = _epc( + main_fuel_type=28, + main_heating_category=2, + main_heating_control=2100, + water_heating_fuel=20, + water_heating_code=901, + has_hot_water_cylinder=True, + cylinder_insulation_type=1, + secondary_heating_type=None, + ) + actual = _epc( + main_fuel_type=20, + main_heating_category=2, + main_heating_control=2100, + water_heating_fuel=20, + water_heating_code=901, + has_hot_water_cylinder=True, + cylinder_insulation_type=1, + secondary_heating_type=693, + ) + + # Act + hits = compare_prediction(predicted, actual).categorical_hits + + # Assert + assert hits["heating_main_fuel"] is False + assert hits["heating_main_category"] is True + assert hits["heating_main_control"] is True + assert hits["water_heating_fuel"] is True + assert hits["water_heating_code"] is True + assert hits["has_hot_water_cylinder"] is True + assert hits["cylinder_insulation_type"] is True + # Secondary heating is absent in the prediction but present in the actual — + # a real miss (predicted None ≠ actual 693), not "not applicable". + assert hits["secondary_heating_type"] is False + + +def test_classifies_fabric_insulation_and_room_in_roof() -> None: + # Arrange — predicted and actual disagree on roof insulation thickness and on + # whether there's a room-in-roof, but agree on floor insulation. + predicted = _epc( + roof_insulation_thickness=100, + floor_insulation=1, + has_room_in_roof=False, + ) + actual = _epc( + roof_insulation_thickness=270, + floor_insulation=1, + has_room_in_roof=True, + ) + + # Act + hits = compare_prediction(predicted, actual).categorical_hits + + # Assert + assert hits["roof_insulation_thickness"] is False + assert hits["floor_insulation"] is True + # Room-in-roof presence is always applicable — predicting "no RR" when there + # is one is a real miss, not "not applicable". + assert hits["has_room_in_roof"] is False + + +def test_classifies_glazing_renewables_and_door_count() -> None: + # Arrange — predicted glazing type, PV and solar disagree with the actual; + # door count is over-predicted by one. + predicted = _epc( + windows=[(1.0, 1.0), (1.0, 1.0)], + glazing_type=3, + has_pv=False, + solar_water_heating=False, + door_count=3, + ) + actual = _epc( + windows=[(1.0, 1.0), (1.0, 1.0)], + glazing_type=4, + has_pv=True, + solar_water_heating=True, + door_count=2, + ) + + # Act + comparison = compare_prediction(predicted, actual) + hits = comparison.categorical_hits + + # Assert + assert hits["modal_glazing_type"] is False + assert hits["has_pv"] is False + assert hits["solar_water_heating"] is False + assert comparison.door_count_residual == 1 + + +def test_categorical_hit_is_not_applicable_when_actual_is_absent() -> None: + # Arrange — the actual lodges no roof construction (a flat under another + # dwelling). A hit there is not applicable, not a free win, so it must not + # count towards the roof classification rate. + predicted = _epc(roof_construction=3) + actual = _epc(roof_construction=None) + + # Act + comparison = compare_prediction(predicted, actual) + + # Assert + assert comparison.categorical_hits["roof_construction"] is None + + +def test_reports_the_floor_area_residual_as_predicted_minus_actual() -> None: + # Arrange — predicted 90 m², actual 100 m² (a 10 m² under-prediction). + predicted = _epc(floor_area=90.0) + actual = _epc(floor_area=100.0) + + # Act + comparison = compare_prediction(predicted, actual) + + # Assert — signed residual, predicted − actual. + assert abs(comparison.floor_area_residual - (-10.0)) <= 1e-9 + + +def test_reports_the_building_parts_count_residual() -> None: + # Arrange — predicted a single part; the actual has a main + an extension. + predicted = _epc(building_parts=1) + actual = _epc(building_parts=2) + + # Act + comparison = compare_prediction(predicted, actual) + + # Assert — predicted − actual. + assert comparison.building_parts_residual == -1 + + +def test_reports_window_count_and_total_area_residuals() -> None: + # Arrange — predicted 2 windows (3 m² total); actual 1 window (1 m²). + predicted = _epc(windows=[(1.0, 1.0), (2.0, 1.0)]) + actual = _epc(windows=[(1.0, 1.0)]) + + # Act + comparison = compare_prediction(predicted, actual) + + # Assert + assert comparison.window_count_residual == 1 + assert abs(comparison.total_window_area_residual - 2.0) <= 1e-9 diff --git a/tests/domain/epc_prediction/test_prediction_target.py b/tests/domain/epc_prediction/test_prediction_target.py new file mode 100644 index 00000000..ec21b422 --- /dev/null +++ b/tests/domain/epc_prediction/test_prediction_target.py @@ -0,0 +1,56 @@ +"""Assembling an EPC-less Property's PredictionTarget, and the eligibility gate: +a Property whose property type is unknown is not predicted (ADR-0031 slice-5d).""" + +from __future__ import annotations + +from typing import Optional + +from domain.epc_prediction.prediction_target import ( + PredictionTarget, + PredictionTargetAttributes, + build_prediction_target, +) +from domain.geospatial.coordinates import Coordinates +from domain.property.property import PropertyIdentity + + +def _identity(postcode: str = "LS6 1AA") -> PropertyIdentity: + return PropertyIdentity( + portfolio_id=1, postcode=postcode, address="1 Some Street", uprn=12345 + ) + + +def test_target_is_assembled_from_identity_coords_and_overrides() -> None: + # Arrange — a known property type + built form + wall (Landlord Overrides), + # and resolved coordinates. + here = Coordinates(longitude=-1.55, latitude=53.81) + attributes = PredictionTargetAttributes( + property_type="2", built_form="3", wall_construction=1 + ) + + # Act + target: Optional[PredictionTarget] = build_prediction_target( + _identity(), here, attributes + ) + + # Assert — every known input is threaded onto the target. + assert target is not None + assert target.postcode == "LS6 1AA" + assert target.property_type == "2" + assert target.built_form == "3" + assert target.wall_construction == 1 + assert target.coordinates is here + + +def test_an_unknown_property_type_gates_the_property_out() -> None: + # Arrange — property type is the hard cohort filter; without it the Property + # must not be predicted from a mixed-type cohort (ADR-0031). + attributes = PredictionTargetAttributes(property_type=None) + + # Act + target: Optional[PredictionTarget] = build_prediction_target( + _identity(), None, attributes + ) + + # Assert — gated out: no target to predict from. + assert target is None diff --git a/tests/domain/epc_prediction/test_validation.py b/tests/domain/epc_prediction/test_validation.py new file mode 100644 index 00000000..1e20b1b1 --- /dev/null +++ b/tests/domain/epc_prediction/test_validation.py @@ -0,0 +1,123 @@ +"""Behaviour of the Component Accuracy leave-one-out scorer (ADR-0030): given +loaded postcode cohorts, hold out each SAP 10.2 target, predict it from its +all-vintage neighbours, and aggregate the per-component hits + residuals. Pure +(no IO, no calculator) — corpus loading is the caller's job. +""" + +from datetime import date +from typing import Optional, Union + +from datatypes.epc.domain.epc_property_data import ( + EpcPropertyData, + MainHeatingDetail, + SapBuildingPart, + SapEnergySource, + SapFloorDimension, + SapHeating, +) +from domain.epc_prediction.comparable_properties import ComparableProperty +from domain.epc_prediction.validation import evaluate_component_accuracy + + +def _comparable( + *, + certificate_number: str, + address: str, + sap_version: float, + wall_construction: Union[int, str] = 1, + registration_date: Optional[date] = None, +) -> ComparableProperty: + """A ComparableProperty carrying a fully-populated opaque EpcPropertyData — every + field the predictor + comparison read (the partial-instance idiom).""" + epc: EpcPropertyData = object.__new__(EpcPropertyData) + epc.sap_version = sap_version + epc.postcode = "LS6 1AA" + epc.property_type = "2" + epc.built_form = "4" + epc.total_floor_area_m2 = 80.0 + epc.door_count = 2 + epc.solar_water_heating = False + epc.has_hot_water_cylinder = True + part: SapBuildingPart = object.__new__(SapBuildingPart) + part.wall_construction = wall_construction + part.wall_insulation_type = 1 + part.construction_age_band = "K" + part.roof_construction = 1 + part.roof_insulation_thickness = 100 + part.sap_room_in_roof = None + floor_dim: SapFloorDimension = object.__new__(SapFloorDimension) + floor_dim.floor_construction = 1 + floor_dim.floor_insulation = 1 + part.sap_floor_dimensions = [floor_dim] + epc.sap_building_parts = [part] + epc.sap_windows = [] + detail: MainHeatingDetail = object.__new__(MainHeatingDetail) + detail.main_fuel_type = 20 + detail.main_heating_category = 2 + detail.main_heating_control = 2100 + heating: SapHeating = object.__new__(SapHeating) + heating.main_heating_details = [detail] + heating.water_heating_fuel = 20 + heating.water_heating_code = 901 + heating.cylinder_insulation_type = 1 + heating.secondary_heating_type = None + epc.sap_heating = heating + energy: SapEnergySource = object.__new__(SapEnergySource) + energy.photovoltaic_supply = None + energy.photovoltaic_arrays = None + epc.sap_energy_source = energy + return ComparableProperty( + epc=epc, + certificate_number=certificate_number, + address=address, + registration_date=registration_date, + ) + + +def test_scores_only_sap_10_2_targets() -> None: + # Arrange — a cohort of two distinct addresses: one SAP 10.2, one older + # (SAP 9.94). Only the 10.2 cert is a valid held-out target; the older one + # is kept as source evidence (its components are still valid). + cohort = [ + _comparable( + certificate_number="A", address="1 THE ROW", sap_version=10.2 + ), + _comparable( + certificate_number="B", address="2 THE ROW", sap_version=9.94 + ), + ] + + # Act + accuracy = evaluate_component_accuracy([cohort]) + + # Assert — exactly one target scored (the 10.2 cert), predicted from the + # older neighbour; the older cert was never held out. + assert accuracy.targets == 1 + assert accuracy.rate("wall_construction") == 1.0 + + +def test_aggregates_a_wall_classification_miss() -> None: + # Arrange — the 10.2 target is solid brick (2); its only neighbour (the + # source) is cavity (1), so the predicted mode misses the wall. + cohort = [ + _comparable( + certificate_number="A", + address="1 THE ROW", + sap_version=10.2, + wall_construction=2, + ), + _comparable( + certificate_number="B", + address="2 THE ROW", + sap_version=10.2, + wall_construction=1, + ), + ] + + # Act + accuracy = evaluate_component_accuracy([cohort]) + + # Assert — both are 10.2 targets, and each is predicted from the other (the + # opposite wall), so wall_construction is missed both times. + assert accuracy.targets == 2 + assert accuracy.rate("wall_construction") == 0.0 diff --git a/tests/domain/property/test_property.py b/tests/domain/property/test_property.py index 01d7edfd..31cfc0ed 100644 --- a/tests/domain/property/test_property.py +++ b/tests/domain/property/test_property.py @@ -98,6 +98,44 @@ def test_effective_epc_follows_the_selected_source_path() -> None: assert epc_property.effective_epc is public_epc +def test_source_path_is_predicted_when_only_a_predicted_epc_is_present() -> None: + # Arrange — no lodged EPC, no Site Notes; just a neighbour-synthesised picture + # (EPC Prediction gap-fill, ADR-0031). + predicted = _epc() + prop = Property(identity=_identity(), predicted_epc=predicted) + + # Act / Assert — predicted is the last-resort source, not a raise + assert prop.source_path == "predicted" + assert prop.effective_epc is predicted + + +def test_a_lodged_epc_wins_over_a_predicted_epc() -> None: + # Arrange — both a real lodged EPC and a neighbour-synthesised one are present; + # the real source must win (prediction is last-resort only, ADR-0031). + lodged = _epc() + predicted = _epc() + prop = Property(identity=_identity(), epc=lodged, predicted_epc=predicted) + + # Act / Assert + assert prop.source_path == "epc_with_overlay" + assert prop.effective_epc is lodged + + +def test_site_notes_win_over_a_predicted_epc() -> None: + # Arrange — Site Notes and a predicted EPC are present; the survey wins. + survey_epc = _epc() + predicted = _epc() + prop = Property( + identity=_identity(), + site_notes=SiteNotes(surveyed_at=date(2024, 6, 1), epc=survey_epc), + predicted_epc=predicted, + ) + + # Act / Assert + assert prop.source_path == "site_notes" + assert prop.effective_epc is survey_epc + + def test_property_with_no_source_raises() -> None: # Arrange prop = Property(identity=_identity()) diff --git a/tests/e2e/__init__.py b/tests/e2e/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/e2e/test_epc_prediction_e2e.py b/tests/e2e/test_epc_prediction_e2e.py new file mode 100644 index 00000000..671ad117 --- /dev/null +++ b/tests/e2e/test_epc_prediction_e2e.py @@ -0,0 +1,177 @@ +"""END-TO-END showcase: an EPC-less Property flows through Ingestion, gets a +predicted EPC synthesised from its postcode cohort, is persisted to the predicted +slot, and comes back out of the Property repository resolving as the Effective +EPC (ADR-0031). + +This is the full production path with ONLY the external HTTP clients faked (the +EPC API, the geospatial S3 reader, the Solar API) — everything else is the real +thing: the real Postgres Unit of Work, the real EPC + Property repositories +against the test database, the real `EpcComparablePropertiesRepository`, and the +real `EpcPrediction`. It is the canonical "see the whole flow" reference; the +narrower unit tests live in: + - tests/orchestration/test_ingestion_prediction.py (orchestrator: gate / persist) + - tests/repositories/epc/test_epc_predicted_slot.py (the lodged|predicted slot) + - tests/domain/property/test_property.py (the "predicted" source path) + - tests/domain/epc_prediction/test_prediction_target.py (the eligibility gate) +""" + +from __future__ import annotations + +import json +from pathlib import Path +from typing import Any, Optional + +from sqlalchemy import Engine +from sqlmodel import Session + +from datatypes.epc.domain.epc_property_data import EpcPropertyData +from datatypes.epc.domain.mapper import EpcPropertyDataMapper +from datatypes.epc.search.epc_search_result import EpcSearchResult +from domain.epc_prediction.epc_prediction import EpcPrediction +from domain.epc_prediction.prediction_target import PredictionTargetAttributes +from domain.geospatial.coordinates import Coordinates +from domain.geospatial.planning_restrictions import PlanningRestrictions +from domain.geospatial.spatial_reference import SpatialReference +from domain.property.property import Property +from infrastructure.postgres.property_table import PropertyRow +from orchestration.ingestion_orchestrator import IngestionOrchestrator +from repositories.comparable_properties.epc_comparable_properties_repository import ( + EpcComparablePropertiesRepository, +) +from repositories.epc.epc_postgres_repository import EpcPostgresRepository +from repositories.geospatial.geospatial_repository import GeospatialRepository +from repositories.postgres_unit_of_work import PostgresUnitOfWork +from repositories.property.property_postgres_repository import ( + PropertyPostgresRepository, +) +from repositories.spatial.spatial_postgres_repository import SpatialPostgresRepository + +_JSON_SAMPLES = Path(__file__).resolve().parents[2] / "backend/epc_api/json_samples" +_POSTCODE = "LS6 1AA" + + +def _epc() -> EpcPropertyData: + raw: dict[str, Any] = json.loads( + (_JSON_SAMPLES / "RdSAP-Schema-21.0.0" / "epc.json").read_text() + ) + return EpcPropertyDataMapper.from_api_response(raw) + + +# --- fakes for the THREE external HTTP boundaries (everything else is real) ---- + + +class _FakeCohortEpcClient: + """Stands in for the live EPC API: the postcode's lodged certs + their data.""" + + def __init__(self, results: list[EpcSearchResult]) -> None: + self._results = results + + def search_by_postcode(self, postcode: str) -> list[EpcSearchResult]: + return self._results + + def get_by_certificate_number(self, cert_num: str) -> EpcPropertyData: + return _epc() + + +class _FakeGeospatialRepo(GeospatialRepository): + """Stands in for the S3 Open-UPRN reader: UPRN → coordinates.""" + + def __init__(self, coords: dict[int, Coordinates]) -> None: + self._coords = coords + + def coordinates_for(self, uprn: int) -> Optional[Coordinates]: + return self._coords.get(uprn) + + def spatial_for(self, uprn: int) -> Optional[SpatialReference]: + coordinates = self._coords.get(uprn) + if coordinates is None: + return None + return SpatialReference( + coordinates=coordinates, restrictions=PlanningRestrictions() + ) + + +class _NoEpcFetcher: + """The target Property is EPC-less — the EPC API finds nothing for its UPRN.""" + + def get_by_uprn(self, uprn: int) -> Optional[EpcPropertyData]: + return None + + +class _NoSolarFetcher: + def get_building_insights( + self, longitude: float, latitude: float + ) -> dict[str, Any]: + return {} + + +class _FakeAttributesReader: + """Stands in for Jun-te's property_overrides read adapter: the landlord-known + property type (here a House, code "0", matching the cohort).""" + + def attributes_for(self, property_id: int) -> PredictionTargetAttributes: + return PredictionTargetAttributes(property_type="0", built_form="2") + + +def _cohort_results() -> list[EpcSearchResult]: + return [ + EpcSearchResult( + certificate_number=f"CERT-{i}", + address_line_1=f"{i} Neighbour Road", + address_line_2=None, + address_line_3=None, + address_line_4=None, + postcode=_POSTCODE, + post_town="LEEDS", + uprn=20000 + i, + current_energy_efficiency_band="D", + registration_date=f"2023-0{i + 1}-01", + ) + for i in range(3) + ] + + +def test_epc_less_property_is_predicted_persisted_and_resolved_end_to_end( + db_engine: Engine, +) -> None: + # Arrange — an EPC-less Property exists in the database (postcode + UPRN known, + # no EPC lodged), plus its postcode cohort behind the faked EPC API. + with Session(db_engine) as session: + row = PropertyRow( + portfolio_id=1, postcode=_POSTCODE, address="1 Target Street", uprn=10000 + ) + session.add(row) + session.commit() + property_id = row.id + assert property_id is not None + + cohort_coords = {20000 + i: Coordinates(longitude=-1.55, latitude=53.81) for i in range(3)} + comparables_repo = EpcComparablePropertiesRepository( + _FakeCohortEpcClient(_cohort_results()), _FakeGeospatialRepo(cohort_coords) + ) + orchestrator = IngestionOrchestrator( + unit_of_work=lambda: PostgresUnitOfWork(lambda: Session(db_engine)), + epc_fetcher=_NoEpcFetcher(), + geospatial_repo=_FakeGeospatialRepo({10000: Coordinates(longitude=-1.55, latitude=53.81)}), + solar_fetcher=_NoSolarFetcher(), + comparables_repo=comparables_repo, + prediction_attributes_reader=_FakeAttributesReader(), + epc_prediction=EpcPrediction(), + ) + + # Act — run Ingestion: no lodged EPC found → predict from the cohort → persist. + orchestrator.run([property_id]) + + # Assert — reloading the Property through the real repository, its Effective + # EPC is the predicted picture, flagged by the "predicted" source path. + with Session(db_engine) as session: + epc_repo = EpcPostgresRepository(session) + prop: Property = PropertyPostgresRepository( + session, epc_repo, SpatialPostgresRepository(session) + ).get(property_id) + + assert prop.epc is None # no lodged EPC + assert prop.predicted_epc is not None # a predicted one was persisted + assert prop.source_path == "predicted" + assert prop.effective_epc is prop.predicted_epc + assert prop.effective_epc.property_type == "0" diff --git a/tests/fixtures/epc_prediction/BD24JG/cert-01f1488000e8.json b/tests/fixtures/epc_prediction/BD24JG/cert-01f1488000e8.json new file mode 100644 index 00000000..2affb8f5 --- /dev/null +++ b/tests/fixtures/epc_prediction/BD24JG/cert-01f1488000e8.json @@ -0,0 +1 @@ +{"uprn": 100051188804, "roofs": [{"description": {"value": "Pitched, limited insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": {"value": "Flat, limited insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": {"value": "Cavity wall, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": {"value": "Low energy lighting in 31% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "postcode": "BD2 4JG", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2017-03-12 16:32:09.000000", "door_count": 1, "glazed_area": 1, "glazing_gap": 12, "region_code": 3, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2104, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 8360}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Semi-detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-e1b46141f9be", "assessment_type": "RdSAP", "completion_date": "2017-03-12", "inspection_date": "2017-03-04", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 113, "transaction_type": 13, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2017-03-12", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 310, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.55, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 48.92, "quantity": "square metres"}, "party_wall_length": {"value": 6.1, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 15.09, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.55, "quantity": "metres"}, "total_floor_area": {"value": 48.92, "quantity": "square metres"}, "party_wall_length": {"value": 6.1, "quantity": "metres"}, "heat_loss_perimeter": {"value": 22.14, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "E", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}, {"identifier": "Extension", "wall_dry_lined": "N", "wall_thickness": 310, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.55, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 15.51, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 2, "heat_loss_perimeter": {"value": 11.45, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "E", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "low_energy_lighting": 31, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 1263, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 7.0, "energy_rating_average": 60, "energy_rating_current": 53, "lighting_cost_current": {"value": 116, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer and room thermostat", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 1, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 726, "currency": "GBP"}, "hot_water_cost_current": {"value": 126, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 43, "currency": "GBP"}, "indicative_cost": "\u00a3850 - \u00a31,500", "improvement_type": "A2", "improvement_details": {"improvement_number": 45}, "improvement_category": 5, "energy_performance_rating": 55, "environmental_impact_rating": 46}, {"sequence": 2, "typical_saving": {"value": 267, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 63, "environmental_impact_rating": 55}, {"sequence": 3, "typical_saving": {"value": 61, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 64, "environmental_impact_rating": 58}, {"sequence": 4, "typical_saving": {"value": 40, "currency": "GBP"}, "indicative_cost": "\u00a345", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 59}, {"sequence": 5, "typical_saving": {"value": 43, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 13}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 61}, {"sequence": 6, "typical_saving": {"value": 100, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 65}, {"sequence": 7, "typical_saving": {"value": 35, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 67}, {"sequence": 8, "typical_saving": {"value": 45, "currency": "GBP"}, "indicative_cost": "\u00a31,000 - \u00a31,400", "improvement_type": "O3", "improvement_details": {"improvement_number": 56}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 69}, {"sequence": 9, "typical_saving": {"value": 259, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a38,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 81, "environmental_impact_rating": 76}], "co2_emissions_potential": 3.0, "energy_rating_potential": 81, "lighting_cost_potential": {"value": 69, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 53, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 64, "environmental_impact_rating": 58}, {"sequence": 2, "typical_saving": {"value": 147, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 71, "environmental_impact_rating": 64}], "hot_water_cost_potential": {"value": 77, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2277, "impact_of_loft_insulation": -2671, "impact_of_cavity_insulation": -5353, "space_heating_existing_dwelling": 21713}, "energy_consumption_current": 351, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "9.0.0", "energy_consumption_potential": 147, "environmental_impact_current": 45, "fixed_lighting_outlets_count": 13, "current_energy_efficiency_band": "E", "environmental_impact_potential": 76, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 62, "low_energy_fixed_lighting_outlets_count": 4} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/BD24JG/cert-15c0ce8ea563.json b/tests/fixtures/epc_prediction/BD24JG/cert-15c0ce8ea563.json new file mode 100644 index 00000000..a8327c0d --- /dev/null +++ b/tests/fixtures/epc_prediction/BD24JG/cert-15c0ce8ea563.json @@ -0,0 +1 @@ +{"uprn": 100051188806, "roofs": [{"description": "Pitched, 150 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": "Pitched, insulated (assumed)", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": "Cavity wall, filled cavity", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Solid, insulated (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Excellent lighting efficiency", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "BD2 4JG", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2026-05-14 10:01:10", "door_count": 1, "region_code": 3, "report_type": 2, "sap_heating": {"number_baths": 1, "cylinder_size": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_outlet_type": 1}], "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 18119}], "immersion_heating_type": "NA", "secondary_heating_type": 605, "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "true", "orientation": 8, "window_type": 1, "glazing_type": 2, "window_width": 1.8, "window_height": 1.3, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 6, "window_type": 1, "glazing_type": 2, "window_width": 0.6, "window_height": 1.3, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 2, "window_type": 1, "glazing_type": 2, "window_width": 0.6, "window_height": 1.3, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 6, "window_type": 1, "glazing_type": 2, "window_width": 0.9, "window_height": 1, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 4, "window_type": 1, "glazing_type": 2, "window_width": 1.4, "window_height": 1.9, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 6, "window_type": 1, "glazing_type": 2, "window_width": 0.5, "window_height": 0.8, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 8, "window_type": 1, "glazing_type": 2, "window_width": 0.8, "window_height": 1.2, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 8, "window_type": 1, "glazing_type": 2, "window_width": 1.7, "window_height": 1.2, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 4, "window_type": 1, "glazing_type": 2, "window_width": 0.8, "window_height": 1, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 6, "window_type": 1, "glazing_type": 2, "window_width": 0.7, "window_height": 0.8, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 6, "window_type": 1, "glazing_type": 2, "window_width": 0.8, "window_height": 1.3, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Semi-detached house", "language_code": 1, "pressure_test": 4, "property_type": 0, "address_line_1": "addr-71d676a70392", "assessment_type": "RdSAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 110, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 6, "registration_date": "2026-05-14", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "false", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 2, "electricity_smart_meter_present": "false"}, "secondary_heating": {"description": "Room heaters, mains gas", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "extract_fans_count": 2, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 350, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.35, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 42.9, "quantity": "square metres"}, "party_wall_length": {"value": 7.5, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 14.7, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.45, "quantity": "metres"}, "total_floor_area": {"value": 42, "quantity": "square metres"}, "party_wall_length": {"value": 7.5, "quantity": "metres"}, "heat_loss_perimeter": {"value": 18.7, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "C", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "150mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.35, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 25, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 15, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "L", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "solar_water_heating": "N", "habitable_room_count": 6, "heating_cost_current": {"value": 1232, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.7, "energy_rating_average": 60, "energy_rating_current": 71, "lighting_cost_current": {"value": 66, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 1133, "currency": "GBP"}, "hot_water_cost_current": {"value": 197, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 92, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 99, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a310,000", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 71}, {"sequence": 2, "typical_saving": {"value": 217, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 72}], "co2_emissions_potential": 3.3, "energy_rating_potential": 77, "lighting_cost_potential": {"value": 66, "currency": "GBP"}, "schema_version_original": "21.0.1", "hot_water_cost_potential": {"value": 197, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2371.22, "space_heating_existing_dwelling": 11639.95}, "draughtproofed_door_count": 0, "energy_consumption_current": 185, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "5.02r0344", "energy_consumption_potential": 160, "environmental_impact_current": 69, "current_energy_efficiency_band": "C", "environmental_impact_potential": 72, "led_fixed_lighting_bulbs_count": 25, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 34, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/BD24JG/cert-1ef220911b4b.json b/tests/fixtures/epc_prediction/BD24JG/cert-1ef220911b4b.json new file mode 100644 index 00000000..5b92932e --- /dev/null +++ b/tests/fixtures/epc_prediction/BD24JG/cert-1ef220911b4b.json @@ -0,0 +1 @@ +{"uprn": 100051188796, "roofs": [{"description": {"value": "Pitched, 100 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": {"value": "Cavity wall, filled cavity", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in 44% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "postcode": "BD2 4JG", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2016-01-27 21:05:37.000000", "door_count": 4, "glazed_area": 1, "glazing_gap": "16+", "region_code": 3, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2111, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 10233}], "immersion_heating_type": "NA", "secondary_heating_type": 609, "has_fixed_air_conditioning": "false"}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Semi-detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-fa3c3713e0d1", "assessment_type": "RdSAP", "completion_date": "2016-01-21", "inspection_date": "2016-01-21", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 85, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2016-01-21", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Room heaters, mains gas", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 320, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.53, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 43.22, "quantity": "square metres"}, "party_wall_length": {"value": 7.47, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 19.95, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.42, "quantity": "metres"}, "total_floor_area": {"value": 42.13, "quantity": "square metres"}, "party_wall_length": {"value": 7.47, "quantity": "metres"}, "heat_loss_perimeter": {"value": 18.75, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "B", "party_wall_construction": 2, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "100mm", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 44, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 699, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.8, "energy_rating_average": 60, "energy_rating_current": 66, "lighting_cost_current": {"value": 87, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "TRVs and bypass", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 625, "currency": "GBP"}, "hot_water_cost_current": {"value": 112, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 48, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 64}, {"sequence": 2, "typical_saving": {"value": 26, "currency": "GBP"}, "indicative_cost": "\u00a325", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 65}, {"sequence": 3, "typical_saving": {"value": 32, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 14}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 67}, {"sequence": 4, "typical_saving": {"value": 36, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 69}, {"sequence": 5, "typical_saving": {"value": 256, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a38,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 81, "environmental_impact_rating": 78}], "co2_emissions_potential": 2.3, "energy_rating_potential": 81, "lighting_cost_potential": {"value": 56, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "hot_water_cost_potential": {"value": 76, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2154, "impact_of_loft_insulation": -463, "space_heating_existing_dwelling": 10482}, "energy_consumption_current": 254, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": 9.92, "energy_consumption_potential": 150, "environmental_impact_current": 62, "fixed_lighting_outlets_count": 9, "current_energy_efficiency_band": "D", "environmental_impact_potential": 78, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 45, "low_energy_fixed_lighting_outlets_count": 4} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/BD24JG/cert-208c5dfbaee2.json b/tests/fixtures/epc_prediction/BD24JG/cert-208c5dfbaee2.json new file mode 100644 index 00000000..04e31146 --- /dev/null +++ b/tests/fixtures/epc_prediction/BD24JG/cert-208c5dfbaee2.json @@ -0,0 +1 @@ +{"uprn": null, "roofs": [{"description": {"value": "(another dwelling above)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": {"value": "Cavity wall, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in all fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "BD2 4JG", "hot_water": {"description": {"value": "Community scheme", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2022-12-08 19:42:07.375926", "door_count": 0, "glazed_area": 1, "glazing_gap": "16+", "region_code": 3, "report_type": 2, "sap_heating": {"cylinder_size": 0, "water_heating_code": 901, "water_heating_fuel": 20, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 0, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 20, "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2307, "main_heating_category": 6, "main_heating_fraction": 1, "sap_main_heating_code": 301, "mcs_installed_heat_pump": "false", "central_heating_pump_age": 1, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 38}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "", "country_code": "EAW", "main_heating": [{"description": {"value": "Community scheme", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Ground-floor flat", "language": "1"}, "language_code": 1, "property_type": 2, "address_line_1": "addr-061d4c5bd46f", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2022-12-08", "inspection_date": "2022-08-22", "extensions_count": 0, "measurement_type": 1, "sap_flat_details": {"level": 1, "top_storey": "Y", "flat_location": 0, "heat_loss_corridor": 1, "unheated_corridor_length": {"value": 0, "quantity": "metres"}}, "total_floor_area": 12, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 1, "pvc_window_frames": "true", "registration_date": "2022-12-08", "sap_energy_source": {"mains_gas": "N", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 3, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.5, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 11.6, "quantity": "square metres"}, "party_wall_length": {"value": 6.8, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 6.8, "quantity": "metres"}}], "wall_insulation_type": 5, "construction_age_band": "C", "party_wall_construction": 0, "wall_thickness_measured": "N", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 1, "heating_cost_current": {"value": 190, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 1.5, "energy_rating_average": 60, "energy_rating_current": 64, "lighting_cost_current": {"value": 13, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Flat rate charging, TRVs", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 1, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 172, "currency": "GBP"}, "hot_water_cost_current": {"value": 184, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 18, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 68}], "co2_emissions_potential": 1.4, "energy_rating_potential": 65, "lighting_cost_potential": {"value": 13, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "hot_water_cost_potential": {"value": 184, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3118, "impact_of_cavity_insulation": -389, "space_heating_existing_dwelling": 1379}, "energy_consumption_current": 721, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "v94.0.1.1", "energy_consumption_potential": 673, "environmental_impact_current": 65, "fixed_lighting_outlets_count": 1, "current_energy_efficiency_band": "D", "environmental_impact_potential": 68, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "D", "co2_emissions_current_per_floor_area": 127, "low_energy_fixed_lighting_outlets_count": 1} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/BD24JG/cert-496b8c226d26.json b/tests/fixtures/epc_prediction/BD24JG/cert-496b8c226d26.json new file mode 100644 index 00000000..482a7bd1 --- /dev/null +++ b/tests/fixtures/epc_prediction/BD24JG/cert-496b8c226d26.json @@ -0,0 +1 @@ +{"uprn": 100051188801, "roofs": [{"description": "Pitched, 270 mm loft insulation", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, {"description": "Roof room(s), no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": "High performance glazing", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": "Excellent lighting efficiency", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "BD2 4JG", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "psv_count": 0, "built_form": 2, "created_at": "2026-03-11 15:26:10", "door_count": 1, "region_code": 10, "report_type": 2, "sap_heating": {"number_baths": 1, "cylinder_size": 1, "shower_outlets": [{"shower_outlet": {"shower_wwhrs": 1, "shower_outlet_type": 1}}], "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "N", "heat_emitter_type": 1, "emitter_temperature": 1, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 104, "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "true", "orientation": 5, "window_type": 1, "glazing_type": 13, "window_width": {"value": 0.8, "quantity": "m"}, "window_height": {"value": 0.5, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 5, "window_type": 1, "glazing_type": 13, "window_width": {"value": 0.8, "quantity": "m"}, "window_height": {"value": 0.5, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 13, "window_width": {"value": 0.8, "quantity": "m"}, "window_height": {"value": 0.5, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 13, "window_width": {"value": 0.8, "quantity": "m"}, "window_height": {"value": 0.5, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 13, "window_width": {"value": 0.8, "quantity": "m"}, "window_height": {"value": 0.5, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Semi-detached bungalow", "language_code": 1, "pressure_test": 4, "property_type": 1, "address_line_1": "addr-2cd29fa7a7e8", "assessment_type": "RdSAP", "completion_date": "2026-03-11", "inspection_date": "2025-05-23", "extensions_count": 0, "measurement_type": 2, "open_flues_count": 0, "total_floor_area": 95, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "other_flues_count": 0, "registration_date": "2026-03-11", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "false", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 2, "electricity_smart_meter_present": "true"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "closed_flues_count": 0, "extract_fans_count": 0, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "floor_heat_loss": 7, "sap_room_in_roof": {"floor_area": 33, "room_in_roof_type_1": {"gable_wall_type_1": 0, "gable_wall_type_2": 0, "gable_wall_length_1": 3, "gable_wall_length_2": 3}, "construction_age_band": "B"}, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.3, "floor_insulation": 1, "total_floor_area": 70, "party_wall_length": 10, "floor_construction": 2, "heat_loss_perimeter": 32}], "wall_insulation_type": 4, "construction_age_band": "D", "party_wall_construction": 0, "wall_thickness_measured": "N", "roof_insulation_location": 2, "roof_insulation_thickness": "270mm", "wall_insulation_thickness": "NI"}], "boilers_flues_count": 0, "open_chimneys_count": 0, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 1431, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.9, "energy_rating_average": 60, "energy_rating_current": 60, "lighting_cost_current": {"value": 83, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "blocked_chimneys_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 1083, "currency": "GBP"}, "hot_water_cost_current": {"value": 218, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "schema_version_current": "LIG-21.0", "suggested_improvements": [{"sequence": 1, "typical_saving": 232, "indicative_cost": "\u00a3900 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 61}, {"sequence": 2, "typical_saving": 116, "indicative_cost": "\u00a35,000 - \u00a310,000", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 65}, {"sequence": 3, "typical_saving": 267, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 67}], "co2_emissions_potential": 3.6, "energy_rating_potential": 77, "lighting_cost_potential": {"value": 83, "currency": "GBP"}, "schema_version_original": "LIG-21.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": 64, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 66, "environmental_impact_rating": 63}}], "hot_water_cost_potential": {"value": 219, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2680.87, "space_heating_existing_dwelling": 16596.26}, "draughtproofed_door_count": 1, "energy_consumption_current": 283, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "10.2.2.0", "energy_consumption_potential": 203, "environmental_impact_current": 54, "cfl_fixed_lighting_bulbs_count": 0, "current_energy_efficiency_band": "D", "environmental_impact_potential": 67, "led_fixed_lighting_bulbs_count": 10, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 52, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/BD24JG/cert-4cce4c3fb33b.json b/tests/fixtures/epc_prediction/BD24JG/cert-4cce4c3fb33b.json new file mode 100644 index 00000000..da4c01cf --- /dev/null +++ b/tests/fixtures/epc_prediction/BD24JG/cert-4cce4c3fb33b.json @@ -0,0 +1 @@ +{"uprn": 100051188769, "roofs": [{"description": {"value": "(another dwelling above)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": {"value": "Cavity wall, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in all fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "BD2 4JG", "hot_water": {"description": {"value": "Community scheme", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2022-12-08 19:42:08.076708", "door_count": 0, "glazed_area": 1, "glazing_gap": "16+", "region_code": 3, "report_type": 2, "sap_heating": {"cylinder_size": 0, "water_heating_code": 901, "water_heating_fuel": 20, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 0, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 20, "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2307, "main_heating_category": 6, "main_heating_fraction": 1, "sap_main_heating_code": 301, "mcs_installed_heat_pump": "false", "central_heating_pump_age": 1, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 38}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Address Matched", "country_code": "EAW", "main_heating": [{"description": {"value": "Community scheme", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Ground-floor flat", "language": "1"}, "language_code": 1, "property_type": 2, "address_line_1": "addr-c852674705d6", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2022-12-08", "inspection_date": "2022-08-22", "extensions_count": 0, "measurement_type": 1, "sap_flat_details": {"level": 1, "top_storey": "Y", "flat_location": 0, "heat_loss_corridor": 1, "unheated_corridor_length": {"value": 0, "quantity": "metres"}}, "total_floor_area": 9, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 1, "pvc_window_frames": "true", "registration_date": "2022-12-08", "sap_energy_source": {"mains_gas": "N", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 3, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 9.2, "quantity": "square metres"}, "party_wall_length": {"value": 8.7, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 3.3, "quantity": "metres"}}], "wall_insulation_type": 5, "construction_age_band": "C", "party_wall_construction": 0, "wall_thickness_measured": "N", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 1, "heating_cost_current": {"value": 139, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 1.2, "energy_rating_average": 60, "energy_rating_current": 67, "lighting_cost_current": {"value": 12, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Flat rate charging, TRVs", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 1, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 139, "currency": "GBP"}, "hot_water_cost_current": {"value": 184, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "co2_emissions_potential": 1.2, "energy_rating_potential": 67, "lighting_cost_potential": {"value": 12, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "hot_water_cost_potential": {"value": 184, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3118, "impact_of_cavity_insulation": -53, "space_heating_existing_dwelling": 510}, "energy_consumption_current": 736, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "v94.0.1.1", "energy_consumption_potential": 736, "environmental_impact_current": 71, "fixed_lighting_outlets_count": 1, "current_energy_efficiency_band": "D", "environmental_impact_potential": 71, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "D", "co2_emissions_current_per_floor_area": 130, "low_energy_fixed_lighting_outlets_count": 1} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/BD24JG/cert-5e427854bd6d.json b/tests/fixtures/epc_prediction/BD24JG/cert-5e427854bd6d.json new file mode 100644 index 00000000..51f0e8ad --- /dev/null +++ b/tests/fixtures/epc_prediction/BD24JG/cert-5e427854bd6d.json @@ -0,0 +1 @@ +{"uprn": 100051188788, "roofs": [{"description": "Pitched, 150 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": "Low energy lighting in 56% of fixed outlets", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "BD2 4JG", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2019-11-06 11:29:06.000000", "door_count": 2, "glazed_area": 1, "glazing_gap": "16+", "region_code": 3, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2104, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 16977}], "immersion_heating_type": "NA", "secondary_heating_type": 605, "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-19.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-06301fe1082f", "assessment_type": "RdSAP", "completion_date": "2019-11-06", "inspection_date": "2019-11-06", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 84, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 5, "pvc_window_frames": "true", "registration_date": "2019-11-06", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, mains gas", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.59, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 42.61, "quantity": "square metres"}, "party_wall_length": {"value": 7.44, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 19.56, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.39, "quantity": "metres"}, "total_floor_area": {"value": 41.81, "quantity": "square metres"}, "party_wall_length": {"value": 7.44, "quantity": "metres"}, "heat_loss_perimeter": {"value": 18.68, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "150mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 56, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 797, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.6, "energy_rating_average": 60, "energy_rating_current": 61, "lighting_cost_current": {"value": 92, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and room thermostat", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 574, "currency": "GBP"}, "hot_water_cost_current": {"value": 89, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 138, "currency": "GBP"}, "indicative_cost": "1,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 62}, {"sequence": 2, "typical_saving": {"value": 60, "currency": "GBP"}, "indicative_cost": "1,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 65}, {"sequence": 3, "typical_saving": {"value": 25, "currency": "GBP"}, "indicative_cost": 20, "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 66}, {"sequence": 4, "typical_saving": {"value": 29, "currency": "GBP"}, "indicative_cost": 450, "improvement_type": "G", "improvement_details": {"improvement_number": 13}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 67}, {"sequence": 5, "typical_saving": {"value": 28, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 69}, {"sequence": 6, "typical_saving": {"value": 293, "currency": "GBP"}, "indicative_cost": "5,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 82, "environmental_impact_rating": 78}], "co2_emissions_potential": 2.2, "energy_rating_potential": 82, "lighting_cost_potential": {"value": 63, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 75, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 69, "environmental_impact_rating": 66}}], "hot_water_cost_potential": {"value": 61, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2004, "impact_of_loft_insulation": -251, "impact_of_cavity_insulation": -2830, "space_heating_existing_dwelling": 13821}, "energy_consumption_current": 308, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.02r06", "energy_consumption_potential": 147, "environmental_impact_current": 54, "fixed_lighting_outlets_count": 9, "current_energy_efficiency_band": "D", "environmental_impact_potential": 78, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 54, "low_energy_fixed_lighting_outlets_count": 5} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/BD24JG/cert-5f4d37dacdf8.json b/tests/fixtures/epc_prediction/BD24JG/cert-5f4d37dacdf8.json new file mode 100644 index 00000000..7ff50b54 --- /dev/null +++ b/tests/fixtures/epc_prediction/BD24JG/cert-5f4d37dacdf8.json @@ -0,0 +1 @@ +{"uprn": 100051188777, "roofs": [{"description": {"value": "Pitched, 75 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": {"value": "Cavity wall, filled cavity", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "No low energy lighting", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "postcode": "BD2 4JG", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 1, "created_at": "2018-01-19 18:01:32.000000", "door_count": 2, "glazed_area": 1, "glazing_gap": "16+", "region_code": 3, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 29, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17761}], "immersion_heating_type": "NA", "secondary_heating_type": 691, "has_fixed_air_conditioning": "false"}, "sap_version": 9.93, "schema_type": "RdSAP-Schema-18.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Detached bungalow", "language": "1"}, "language_code": 1, "property_type": 1, "address_line_1": "addr-8c5a09dbfff3", "assessment_type": "RdSAP", "completion_date": "2018-01-19", "inspection_date": "2018-01-19", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 77, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2018-01-19", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.58, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 76.69, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 2, "heat_loss_perimeter": {"value": 36.2, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "C", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "75mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 0, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 757, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.0, "energy_rating_average": 60, "energy_rating_current": 59, "lighting_cost_current": {"value": 108, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 603, "currency": "GBP"}, "hot_water_cost_current": {"value": 98, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 63, "currency": "GBP"}, "indicative_cost": "\u00a3100 - \u00a3350", "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 62, "environmental_impact_rating": 60}, {"sequence": 2, "typical_saving": {"value": 99, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 65}, {"sequence": 3, "typical_saving": {"value": 46, "currency": "GBP"}, "indicative_cost": "\u00a330", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 67}, {"sequence": 4, "typical_saving": {"value": 31, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 69}, {"sequence": 5, "typical_saving": {"value": 269, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a38,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 80, "environmental_impact_rating": 79}], "co2_emissions_potential": 2.1, "energy_rating_potential": 80, "lighting_cost_potential": {"value": 54, "currency": "GBP"}, "schema_version_original": "LIG-18.0", "hot_water_cost_potential": {"value": 68, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2109, "impact_of_loft_insulation": -1120, "space_heating_existing_dwelling": 11458}, "energy_consumption_current": 300, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.1.0.0", "energy_consumption_potential": 152, "environmental_impact_current": 57, "fixed_lighting_outlets_count": 6, "windows_transmission_details": {"u_value": 2.6, "data_source": 2, "solar_transmittance": 0.76}, "current_energy_efficiency_band": "D", "environmental_impact_potential": 79, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 53, "low_energy_fixed_lighting_outlets_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/BD24JG/cert-6439eb9f1504.json b/tests/fixtures/epc_prediction/BD24JG/cert-6439eb9f1504.json new file mode 100644 index 00000000..78fe91c4 --- /dev/null +++ b/tests/fixtures/epc_prediction/BD24JG/cert-6439eb9f1504.json @@ -0,0 +1 @@ +{"uprn": 100051188809, "roofs": [{"description": "Pitched, 300 mm loft insulation", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, {"description": "Pitched, insulated (assumed)", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": "Cavity wall, filled cavity", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Solid, insulated (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Excellent lighting efficiency", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "BD2 4JG", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2025-11-18 11:36:14", "door_count": 2, "region_code": 3, "report_type": 2, "sap_heating": {"number_baths": 2, "cylinder_size": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_outlet_type": 1}, {"shower_wwhrs": 1, "shower_outlet_type": 1}], "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2104, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17905}], "immersion_heating_type": "NA", "secondary_heating_type": 613, "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "true", "orientation": 7, "window_type": 1, "glazing_type": 2, "window_width": 1.8, "window_height": 1.7, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 2, "window_width": 0.4, "window_height": 1.7, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 5, "window_type": 1, "glazing_type": 2, "window_width": 0.4, "window_height": 1.7, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 0.9, "window_height": 1, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 3, "window_type": 1, "glazing_type": 2, "window_width": 2, "window_height": 1.15, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 3, "window_type": 1, "glazing_type": 2, "window_width": 0.6, "window_height": 0.2, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 5, "window_type": 1, "glazing_type": 2, "window_width": 0.65, "window_height": 0.9, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 7, "window_type": 1, "glazing_type": 2, "window_width": 0.95, "window_height": 1.2, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 7, "window_type": 1, "glazing_type": 2, "window_width": 1.7, "window_height": 1.2, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 0.85, "window_height": 1.3, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 0.8, "window_height": 1.3, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 3, "window_type": 1, "glazing_type": 2, "window_width": 0.95, "window_height": 1.2, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Semi-detached house", "language_code": 1, "pressure_test": 4, "property_type": 0, "address_line_1": "addr-9cca6092af08", "assessment_type": "RdSAP", "completion_date": "2025-11-18", "inspection_date": "2025-11-18", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 104, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 6, "registration_date": "2025-11-18", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "false", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 2, "electricity_smart_meter_present": "false"}, "secondary_heating": {"description": "Room heaters, mains gas", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "extract_fans_count": 2, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.35, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 41.97, "quantity": "square metres"}, "party_wall_length": {"value": 7.5, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 13.8, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.45, "quantity": "metres"}, "total_floor_area": {"value": 41.25, "quantity": "square metres"}, "party_wall_length": {"value": 7.5, "quantity": "metres"}, "heat_loss_perimeter": {"value": 18.5, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "C", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "300mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.35, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 20.35, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 12.9, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "L", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "solar_water_heating": "N", "habitable_room_count": 6, "heating_cost_current": {"value": 1040, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.6, "energy_rating_average": 60, "energy_rating_current": 71, "lighting_cost_current": {"value": 63, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and room thermostat", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 911, "currency": "GBP"}, "hot_water_cost_current": {"value": 211, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 81, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a310,000", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 71}, {"sequence": 2, "typical_saving": {"value": 48, "currency": "GBP"}, "indicative_cost": "\u00a3220 - \u00a3250", "improvement_type": "G", "improvement_details": {"improvement_number": 13}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 72}, {"sequence": 3, "typical_saving": {"value": 220, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 78, "environmental_impact_rating": 73}], "co2_emissions_potential": 3.1, "energy_rating_potential": 78, "lighting_cost_potential": {"value": 63, "currency": "GBP"}, "schema_version_original": "21.0.1", "hot_water_cost_potential": {"value": 211, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2724.96, "space_heating_existing_dwelling": 12042.48}, "draughtproofed_door_count": 2, "energy_consumption_current": 189, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "5.02r0328", "energy_consumption_potential": 156, "environmental_impact_current": 69, "current_energy_efficiency_band": "C", "environmental_impact_potential": 73, "led_fixed_lighting_bulbs_count": 22, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 35, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/BD24JG/cert-75aa70bdd22a.json b/tests/fixtures/epc_prediction/BD24JG/cert-75aa70bdd22a.json new file mode 100644 index 00000000..1c831f14 --- /dev/null +++ b/tests/fixtures/epc_prediction/BD24JG/cert-75aa70bdd22a.json @@ -0,0 +1 @@ +{"uprn": 100051188771, "roofs": [{"description": {"value": "Pitched, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": {"value": "Roof room(s), insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": {"value": "Cavity wall, filled cavity", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": {"value": "Cavity wall, as built, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Low energy lighting in 56% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "BD2 4JG", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 1, "created_at": "2016-10-11 22:08:04.000000", "door_count": 1, "glazed_area": 1, "region_code": 3, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 2, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 15030}], "immersion_heating_type": "NA", "secondary_heating_type": 605, "has_fixed_air_conditioning": "false"}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Detached bungalow", "language": "1"}, "language_code": 1, "property_type": 1, "address_line_1": "addr-451c57bcc5b2", "assessment_type": "RdSAP", "completion_date": "2016-10-11", "inspection_date": "2016-10-11", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 130, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 5, "registration_date": "2016-10-11", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Room heaters, mains gas", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 340, "floor_heat_loss": 7, "sap_room_in_roof": {"floor_area": {"value": 48.83, "quantity": "square metres"}, "insulation": 0, "roof_room_connected": "N", "construction_age_band": "K", "roof_insulation_thickness": "ND"}, "roof_construction": 5, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.38, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 73.75, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 2, "heat_loss_perimeter": {"value": 31.95, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "C", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}, {"identifier": "Extension", "wall_dry_lined": "N", "wall_thickness": 330, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.77, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 7.55, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 2, "heat_loss_perimeter": {"value": 8.15, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "K", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 56, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 956, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 5.3, "energy_rating_average": 60, "energy_rating_current": 67, "lighting_cost_current": {"value": 107, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 884, "currency": "GBP"}, "hot_water_cost_current": {"value": 115, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 77, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 64}, {"sequence": 2, "typical_saving": {"value": 27, "currency": "GBP"}, "indicative_cost": "\u00a380", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 65}, {"sequence": 3, "typical_saving": {"value": 36, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 66}, {"sequence": 4, "typical_saving": {"value": 258, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a38,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 79, "environmental_impact_rating": 73}], "co2_emissions_potential": 3.7, "energy_rating_potential": 79, "lighting_cost_potential": {"value": 74, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "hot_water_cost_potential": {"value": 79, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2303, "impact_of_loft_insulation": -2494, "space_heating_existing_dwelling": 15601}, "energy_consumption_current": 229, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.0.0.0", "energy_consumption_potential": 161, "environmental_impact_current": 61, "fixed_lighting_outlets_count": 36, "windows_transmission_details": {"u_value": 2, "data_source": 2, "solar_transmittance": 0.72}, "current_energy_efficiency_band": "D", "environmental_impact_potential": 73, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 40, "low_energy_fixed_lighting_outlets_count": 20} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/BD24JG/cert-7e61d706db57.json b/tests/fixtures/epc_prediction/BD24JG/cert-7e61d706db57.json new file mode 100644 index 00000000..3ea4c639 --- /dev/null +++ b/tests/fixtures/epc_prediction/BD24JG/cert-7e61d706db57.json @@ -0,0 +1 @@ +{"uprn": 100051188779, "roofs": [{"description": {"value": "Pitched, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": {"value": "Roof room(s), insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": {"value": "Cavity wall, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in 67% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "BD2 4JG", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 1, "created_at": "2017-08-24 10:02:11.000000", "door_count": 2, "glazed_area": 1, "glazing_gap": 12, "region_code": 3, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "secondary_fuel_type": 9, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "mcs_installed_heat_pump": "false", "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 456}], "immersion_heating_type": "NA", "secondary_heating_type": 631, "has_fixed_air_conditioning": "false"}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.1", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Detached bungalow", "language": "1"}, "language_code": 1, "property_type": 1, "address_line_1": "addr-19177dfd3556", "assessment_type": "RdSAP", "completion_date": "2017-08-24", "inspection_date": "2017-08-21", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 102, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 6, "pvc_window_frames": "true", "registration_date": "2017-08-24", "sap_energy_source": {"mains_gas": "Y", "meter_type": 1, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Room heaters, dual fuel (mineral and wood)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 340, "floor_heat_loss": 7, "sap_room_in_roof": {"floor_area": {"value": 34.5, "quantity": "square metres"}, "insulation": "AB", "roof_room_connected": "N", "construction_age_band": "I"}, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.53, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 67.54, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 2, "heat_loss_perimeter": {"value": 36.3, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 67, "solar_water_heating": "N", "habitable_room_count": 6, "heating_cost_current": {"value": 1313, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 7.3, "energy_rating_average": 60, "energy_rating_current": 47, "lighting_cost_current": {"value": 96, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 909, "currency": "GBP"}, "hot_water_cost_current": {"value": 131, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 193, "currency": "GBP"}, "indicative_cost": "1,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 54, "environmental_impact_rating": 46}, {"sequence": 2, "typical_saving": {"value": 89, "currency": "GBP"}, "indicative_cost": "1,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 57, "environmental_impact_rating": 50}, {"sequence": 3, "typical_saving": {"value": 20, "currency": "GBP"}, "indicative_cost": 20, "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 57, "environmental_impact_rating": 50}, {"sequence": 4, "typical_saving": {"value": 150, "currency": "GBP"}, "indicative_cost": "3,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 62, "environmental_impact_rating": 56}, {"sequence": 5, "typical_saving": {"value": 29, "currency": "GBP"}, "indicative_cost": 900, "improvement_type": "T2", "improvement_details": {"improvement_number": 50}, "improvement_category": 5, "energy_performance_rating": 63, "environmental_impact_rating": 57}, {"sequence": 6, "typical_saving": {"value": 276, "currency": "GBP"}, "indicative_cost": "8,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 66}], "co2_emissions_potential": 4, "energy_rating_potential": 73, "lighting_cost_potential": {"value": 72, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 36, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 55, "environmental_impact_rating": 48}, {"sequence": 2, "typical_saving": {"value": 12, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 58, "environmental_impact_rating": 85}, {"sequence": 3, "typical_saving": {"value": 349, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 69, "environmental_impact_rating": 61}], "hot_water_cost_potential": {"value": 78, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2244, "impact_of_loft_insulation": -2821, "impact_of_cavity_insulation": -3193, "space_heating_existing_dwelling": 18705}, "energy_consumption_current": 390, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "1.0.x", "energy_consumption_potential": 207, "environmental_impact_current": 40, "fixed_lighting_outlets_count": 12, "current_energy_efficiency_band": "E", "environmental_impact_potential": 66, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 72, "low_energy_fixed_lighting_outlets_count": 8} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/BD24JG/cert-8d1b1e15063c.json b/tests/fixtures/epc_prediction/BD24JG/cert-8d1b1e15063c.json new file mode 100644 index 00000000..c3f9ff9c --- /dev/null +++ b/tests/fixtures/epc_prediction/BD24JG/cert-8d1b1e15063c.json @@ -0,0 +1 @@ +{"uprn": 100051188796, "roofs": [{"description": "Pitched, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": "Cavity wall, filled cavity", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": "Low energy lighting in 96% of fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "BD2 4JG", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2024-09-27 12:25:43", "door_count": 2, "glazed_area": 4, "region_code": 3, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17815}], "immersion_heating_type": "NA", "secondary_heating_type": 609, "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "sap_windows": [{"orientation": 8, "window_area": {"value": 3.8, "quantity": "square metres"}, "window_type": 1, "glazing_type": 2, "window_location": 0}, {"orientation": 2, "window_area": {"value": 0.86, "quantity": "square metres"}, "window_type": 1, "glazing_type": 2, "window_location": 0}, {"orientation": 6, "window_area": {"value": 0.86, "quantity": "square metres"}, "window_type": 1, "glazing_type": 2, "window_location": 0}, {"orientation": 2, "window_area": {"value": 0.75, "quantity": "square metres"}, "window_type": 1, "glazing_type": 2, "window_location": 0}, {"orientation": 4, "window_area": {"value": 3.72, "quantity": "square metres"}, "window_type": 1, "glazing_type": 2, "window_location": 0}, {"orientation": 8, "window_area": {"value": 2.22, "quantity": "square metres"}, "window_type": 1, "glazing_type": 2, "window_location": 0}, {"orientation": 8, "window_area": {"value": 1.04, "quantity": "square metres"}, "window_type": 1, "glazing_type": 2, "window_location": 0}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 4, "window_area": {"value": 1.13, "quantity": "square metres"}, "window_type": 1, "glazing_type": 3, "window_location": 0}, {"orientation": 2, "window_area": {"value": 1.16, "quantity": "square metres"}, "window_type": 1, "glazing_type": 2, "window_location": 0}], "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-69295bb50950", "assessment_type": "RdSAP", "completion_date": "2024-09-27", "inspection_date": "2024-09-26", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 85, "transaction_type": 13, "conservatory_type": 2, "heated_room_count": 4, "registration_date": "2024-09-27", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, mains gas", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 310, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.51, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 42.83, "quantity": "square metres"}, "party_wall_length": {"value": 7.41, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 19.67, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.4, "quantity": "metres"}, "total_floor_area": {"value": 41.89, "quantity": "square metres"}, "party_wall_length": {"value": 7.44, "quantity": "metres"}, "heat_loss_perimeter": {"value": 18.7, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "B", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 96, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 1294, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.2, "energy_rating_average": 60, "energy_rating_current": 64, "lighting_cost_current": {"value": 110, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": "ND", "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 1204, "currency": "GBP"}, "hot_water_cost_current": {"value": 185, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 90, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 61}, {"sequence": 2, "typical_saving": {"value": 58, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 63}, {"sequence": 3, "typical_saving": {"value": 478, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 72}], "co2_emissions_potential": 2.8, "energy_rating_potential": 77, "lighting_cost_potential": {"value": 110, "currency": "GBP"}, "schema_version_original": "20.0.0", "hot_water_cost_potential": {"value": 127, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2149, "impact_of_loft_insulation": -4006, "space_heating_existing_dwelling": 13158}, "energy_consumption_current": 278, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.13r0002", "energy_consumption_potential": 188, "environmental_impact_current": 58, "fixed_lighting_outlets_count": 24, "current_energy_efficiency_band": "D", "environmental_impact_potential": 72, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 49, "low_energy_fixed_lighting_outlets_count": 23} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/BD24JG/cert-cc1c722822ba.json b/tests/fixtures/epc_prediction/BD24JG/cert-cc1c722822ba.json new file mode 100644 index 00000000..f3c8e06b --- /dev/null +++ b/tests/fixtures/epc_prediction/BD24JG/cert-cc1c722822ba.json @@ -0,0 +1 @@ +{"uprn": 100051188776, "roofs": [{"description": {"value": "Pitched, 300 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Solid brick, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in 33% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "postcode": "BD2 4JG", "hot_water": {"description": {"value": "Electric immersion, standard tariff", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}, "post_town": "", "built_form": 2, "created_at": "2020-11-09 13:33:38.628056", "door_count": 2, "glazed_area": 1, "glazing_gap": "16+", "region_code": 3, "report_type": 2, "sap_heating": {"cylinder_size": 4, "water_heating_code": 903, "water_heating_fuel": 29, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 29, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 29, "heat_emitter_type": 0, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2602, "main_heating_category": 10, "main_heating_fraction": 1, "sap_main_heating_code": 691, "mcs_installed_heat_pump": "false", "main_heating_data_source": 2}], "immersion_heating_type": 2, "secondary_heating_type": 691, "cylinder_insulation_type": 2, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}], "dwelling_type": {"value": "Semi-detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-ca2014d2cc3b", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2020-11-09", "inspection_date": "2020-10-22", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 78, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2020-11-09", "sap_energy_source": {"mains_gas": "N", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 375, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.5, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 39.2, "quantity": "square metres"}, "party_wall_length": {"value": 7.4, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 18, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.3, "quantity": "metres"}, "total_floor_area": {"value": 39.2, "quantity": "square metres"}, "party_wall_length": {"value": 7.4, "quantity": "metres"}, "heat_loss_perimeter": {"value": 18, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "300mm", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 33, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 1868, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 6.9, "energy_rating_average": 60, "energy_rating_current": 24, "lighting_cost_current": {"value": 106, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Appliance thermostats", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 613, "currency": "GBP"}, "hot_water_cost_current": {"value": 520, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 715, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 42, "environmental_impact_rating": 49}, {"sequence": 2, "typical_saving": {"value": 122, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 46, "environmental_impact_rating": 52}, {"sequence": 3, "typical_saving": {"value": 72, "currency": "GBP"}, "indicative_cost": "\u00a315 - \u00a330", "improvement_type": "C", "improvement_details": {"improvement_number": 2}, "improvement_category": 5, "energy_performance_rating": 48, "environmental_impact_rating": 54}, {"sequence": 4, "typical_saving": {"value": 25, "currency": "GBP"}, "indicative_cost": "\u00a330", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 49, "environmental_impact_rating": 55}, {"sequence": 5, "typical_saving": {"value": 691, "currency": "GBP"}, "indicative_cost": "\u00a32,000 - \u00a33,000", "improvement_type": "L2", "improvement_details": {"improvement_number": 61}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 54}, {"sequence": 6, "typical_saving": {"value": 66, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 59}, {"sequence": 7, "typical_saving": {"value": 329, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 69}], "co2_emissions_potential": 3.1, "energy_rating_potential": 86, "lighting_cost_potential": {"value": 71, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 892, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 74, "environmental_impact_rating": 92}, {"sequence": 2, "typical_saving": {"value": 798, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 75, "environmental_impact_rating": 78}], "hot_water_cost_potential": {"value": 119, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2783, "impact_of_solid_wall_insulation": -3826, "space_heating_existing_dwelling": 9987}, "energy_consumption_current": 522, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "v94.0.1.1", "energy_consumption_potential": 231, "environmental_impact_current": 35, "fixed_lighting_outlets_count": 9, "current_energy_efficiency_band": "F", "environmental_impact_potential": 69, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 88, "low_energy_fixed_lighting_outlets_count": 3} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/BD24JG/cert-d1396ff56fec.json b/tests/fixtures/epc_prediction/BD24JG/cert-d1396ff56fec.json new file mode 100644 index 00000000..5448c4e1 --- /dev/null +++ b/tests/fixtures/epc_prediction/BD24JG/cert-d1396ff56fec.json @@ -0,0 +1 @@ +{"uprn": 100051188778, "roofs": [{"description": "Pitched, 200 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, filled cavity", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Low energy lighting in 50% of fixed outlets", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "BD2 4JG", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2023-10-09 14:37:20", "door_count": 2, "glazed_area": 1, "glazing_gap": "16+", "region_code": 3, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 29, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2103, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 15502}], "immersion_heating_type": "NA", "secondary_heating_type": 691, "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-d9d75cc590cc", "assessment_type": "RdSAP", "completion_date": "2023-10-09", "inspection_date": "2023-10-09", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 84, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 5, "pvc_window_frames": "true", "registration_date": "2023-10-09", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, electric", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.53, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 42.62, "quantity": "square metres"}, "party_wall_length": {"value": 7.43, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 19.83, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.41, "quantity": "metres"}, "total_floor_area": {"value": 41.42, "quantity": "square metres"}, "party_wall_length": {"value": 7.41, "quantity": "metres"}, "heat_loss_perimeter": {"value": 18.59, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "D", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "200mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 50, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 1622, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.7, "energy_rating_average": 60, "energy_rating_current": 64, "lighting_cost_current": {"value": 199, "currency": "GBP"}, "main_heating_controls": [{"description": "Room thermostat only", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 1388, "currency": "GBP"}, "hot_water_cost_current": {"value": 256, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 167, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 66}, {"sequence": 2, "typical_saving": {"value": 55, "currency": "GBP"}, "indicative_cost": "\u00a330", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 67}, {"sequence": 3, "typical_saving": {"value": 78, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 15}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 68}, {"sequence": 4, "typical_saving": {"value": 83, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 70}, {"sequence": 5, "typical_saving": {"value": 613, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 81, "environmental_impact_rating": 79}], "co2_emissions_potential": 2.1, "energy_rating_potential": 81, "lighting_cost_potential": {"value": 133, "currency": "GBP"}, "schema_version_original": "20.0.0", "hot_water_cost_potential": {"value": 174, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2144, "space_heating_existing_dwelling": 10475}, "energy_consumption_current": 253, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.13r0001", "energy_consumption_potential": 142, "environmental_impact_current": 63, "fixed_lighting_outlets_count": 12, "current_energy_efficiency_band": "D", "environmental_impact_potential": 79, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 44, "low_energy_fixed_lighting_outlets_count": 6} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/BD24JG/cert-d7e3196e1a0c.json b/tests/fixtures/epc_prediction/BD24JG/cert-d7e3196e1a0c.json new file mode 100644 index 00000000..c530bf29 --- /dev/null +++ b/tests/fixtures/epc_prediction/BD24JG/cert-d7e3196e1a0c.json @@ -0,0 +1 @@ +{"uprn": 100051188793, "roofs": [{"description": "Pitched, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": "Low energy lighting in 29% of fixed outlets", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "postcode": "BD2 4JG", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2017-06-01 22:29:54.000000", "door_count": 1, "glazed_area": 1, "glazing_gap": 12, "region_code": 3, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 15029}], "immersion_heating_type": "NA", "secondary_heating_type": 601, "has_fixed_air_conditioning": "false"}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.1", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached bungalow", "language_code": 1, "property_type": 1, "address_line_1": "addr-f4700d42e823", "assessment_type": "RdSAP", "completion_date": "2017-06-01", "inspection_date": "2017-06-01", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 77, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 5, "pvc_window_frames": "true", "registration_date": "2017-06-01", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, mains gas", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 330, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.41, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 76.98, "quantity": "square metres"}, "party_wall_length": {"value": 7.47, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 29.31, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 29, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 1040, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 5.7, "energy_rating_average": 60, "energy_rating_current": 50, "lighting_cost_current": {"value": 90, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 867, "currency": "GBP"}, "hot_water_cost_current": {"value": 102, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 60, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 119, "currency": "GBP"}, "indicative_cost": "1,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 55, "environmental_impact_rating": 48}, {"sequence": 2, "typical_saving": {"value": 59, "currency": "GBP"}, "indicative_cost": "1,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 57, "environmental_impact_rating": 50}, {"sequence": 3, "typical_saving": {"value": 32, "currency": "GBP"}, "indicative_cost": 25, "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 58, "environmental_impact_rating": 51}, {"sequence": 4, "typical_saving": {"value": 33, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 59, "environmental_impact_rating": 53}, {"sequence": 5, "typical_saving": {"value": 259, "currency": "GBP"}, "indicative_cost": "8,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 62}], "co2_emissions_potential": 3.6, "energy_rating_potential": 70, "lighting_cost_potential": {"value": 52, "currency": "GBP"}, "schema_version_original": "LIG-17.1", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 21, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 55, "environmental_impact_rating": 48}}], "hot_water_cost_potential": {"value": 69, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2080, "impact_of_loft_insulation": -6650, "impact_of_cavity_insulation": -2482, "space_heating_existing_dwelling": 18255}, "energy_consumption_current": 417, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.11r11", "energy_consumption_potential": 262, "environmental_impact_current": 43, "fixed_lighting_outlets_count": 7, "current_energy_efficiency_band": "E", "environmental_impact_potential": 62, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 74, "low_energy_fixed_lighting_outlets_count": 2} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/BD24JG/cert-dcb2c6ff3317.json b/tests/fixtures/epc_prediction/BD24JG/cert-dcb2c6ff3317.json new file mode 100644 index 00000000..74d36bdd --- /dev/null +++ b/tests/fixtures/epc_prediction/BD24JG/cert-dcb2c6ff3317.json @@ -0,0 +1 @@ +{"uprn": 100051188775, "roofs": [{"description": {"value": "Pitched, 200 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": {"value": "Cavity wall, filled cavity", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in 33% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "postcode": "BD2 4JG", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 1, "created_at": "2019-06-01 10:01:13.000000", "door_count": 2, "glazed_area": 1, "glazing_gap": 12, "region_code": 3, "report_type": 2, "sap_heating": {"cylinder_size": 3, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "secondary_fuel_type": 29, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2104, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 102, "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "secondary_heating_type": 691, "cylinder_insulation_type": 2, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 9.93, "schema_type": "RdSAP-Schema-18.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Detached bungalow", "language": "1"}, "language_code": 1, "property_type": 1, "address_line_1": "addr-9c8c74cac5a8", "assessment_type": "RdSAP", "completion_date": "2019-06-01", "inspection_date": "2019-05-31", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 77, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2019-06-01", "sap_energy_source": {"mains_gas": "Y", "meter_type": 3, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 310, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.54, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 76.66, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 2, "heat_loss_perimeter": {"value": 36.2, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "C", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "200mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 33, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 742, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.3, "energy_rating_average": 60, "energy_rating_current": 58, "lighting_cost_current": {"value": 95, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer and room thermostat", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 625, "currency": "GBP"}, "hot_water_cost_current": {"value": 160, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 106, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 62, "environmental_impact_rating": 60}, {"sequence": 2, "typical_saving": {"value": 14, "currency": "GBP"}, "indicative_cost": "\u00a315 - \u00a330", "improvement_type": "C", "improvement_details": {"improvement_number": 2}, "improvement_category": 5, "energy_performance_rating": 63, "environmental_impact_rating": 61}, {"sequence": 3, "typical_saving": {"value": 32, "currency": "GBP"}, "indicative_cost": "\u00a320", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 64, "environmental_impact_rating": 62}, {"sequence": 4, "typical_saving": {"value": 31, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 13}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 63}, {"sequence": 5, "typical_saving": {"value": 47, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 66}, {"sequence": 6, "typical_saving": {"value": 283, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 78, "environmental_impact_rating": 76}], "co2_emissions_potential": 2.3, "energy_rating_potential": 78, "lighting_cost_potential": {"value": 57, "currency": "GBP"}, "schema_version_original": "LIG-18.0", "hot_water_cost_potential": {"value": 83, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3237, "space_heating_existing_dwelling": 10612}, "energy_consumption_current": 317, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.1.0.0", "energy_consumption_potential": 167, "environmental_impact_current": 54, "fixed_lighting_outlets_count": 6, "windows_transmission_details": {"u_value": 2.8, "data_source": 2, "solar_transmittance": 0.76}, "current_energy_efficiency_band": "D", "environmental_impact_potential": 76, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 56, "low_energy_fixed_lighting_outlets_count": 2} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/BD24JG/cert-e648d6164f10.json b/tests/fixtures/epc_prediction/BD24JG/cert-e648d6164f10.json new file mode 100644 index 00000000..e484ae2f --- /dev/null +++ b/tests/fixtures/epc_prediction/BD24JG/cert-e648d6164f10.json @@ -0,0 +1 @@ +{"uprn": 100051188798, "roofs": [{"description": {"value": "Pitched, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": {"value": "Cavity wall, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": {"value": "Low energy lighting in 56% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "BD2 4JG", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2018-07-21 21:26:45.000000", "door_count": 2, "glazed_area": 2, "glazing_gap": "16+", "region_code": 3, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "secondary_fuel_type": 29, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 1, "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 16262}], "immersion_heating_type": "NA", "secondary_heating_type": 691, "has_fixed_air_conditioning": "false"}, "sap_version": 9.93, "schema_type": "RdSAP-Schema-18.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Semi-detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-d2b01bebd871", "assessment_type": "RdSAP", "completion_date": "2018-07-21", "inspection_date": "2018-07-20", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 86, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2018-07-21", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 250, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.54, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 43.37, "quantity": "square metres"}, "party_wall_length": {"value": 7.54, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 19.96, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.44, "quantity": "metres"}, "total_floor_area": {"value": 42.29, "quantity": "square metres"}, "party_wall_length": {"value": 7.54, "quantity": "metres"}, "heat_loss_perimeter": {"value": 18.76, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 56, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 1034, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 5.3, "energy_rating_average": 60, "energy_rating_current": 52, "lighting_cost_current": {"value": 87, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 844, "currency": "GBP"}, "hot_water_cost_current": {"value": 99, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 136, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 58, "environmental_impact_rating": 54}, {"sequence": 2, "typical_saving": {"value": 58, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 60, "environmental_impact_rating": 56}, {"sequence": 3, "typical_saving": {"value": 23, "currency": "GBP"}, "indicative_cost": "\u00a320", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 61, "environmental_impact_rating": 57}, {"sequence": 4, "typical_saving": {"value": 31, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 62, "environmental_impact_rating": 59}, {"sequence": 5, "typical_saving": {"value": 276, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a38,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 68}], "co2_emissions_potential": 3.3, "energy_rating_potential": 72, "lighting_cost_potential": {"value": 60, "currency": "GBP"}, "schema_version_original": "LIG-18.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 70, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 60, "environmental_impact_rating": 57}}], "hot_water_cost_potential": {"value": 69, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2156, "impact_of_loft_insulation": -3753, "impact_of_cavity_insulation": -2612, "space_heating_existing_dwelling": 16379}, "energy_consumption_current": 354, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.1.0.0", "energy_consumption_potential": 215, "environmental_impact_current": 48, "fixed_lighting_outlets_count": 9, "windows_transmission_details": {"u_value": 2.6, "data_source": 2, "solar_transmittance": 0.76}, "current_energy_efficiency_band": "E", "environmental_impact_potential": 68, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 62, "low_energy_fixed_lighting_outlets_count": 5} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/BD24JG/cert-e8c34b2323e0.json b/tests/fixtures/epc_prediction/BD24JG/cert-e8c34b2323e0.json new file mode 100644 index 00000000..29d014e8 --- /dev/null +++ b/tests/fixtures/epc_prediction/BD24JG/cert-e8c34b2323e0.json @@ -0,0 +1 @@ +{"uprn": 100051188789, "roofs": [{"description": {"value": "Pitched, 100 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": {"value": "Solid brick, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in 15% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "postcode": "BD2 4JG", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 1, "created_at": "2017-07-04 18:14:05.000000", "door_count": 2, "glazed_area": 1, "region_code": 3, "report_type": 2, "sap_heating": {"cylinder_size": 3, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 29, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2104, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 117, "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "secondary_heating_type": 691, "cylinder_insulation_type": 2, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.1", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Detached bungalow", "language": "1"}, "language_code": 1, "property_type": 1, "address_line_1": "addr-8c2aed30f5eb", "assessment_type": "RdSAP", "completion_date": "2017-07-04", "inspection_date": "2017-07-04", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 85, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 5, "pvc_window_frames": "false", "registration_date": "2017-07-04", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 310, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.52, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 85.47, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 2, "heat_loss_perimeter": {"value": 37.22, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "100mm", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 15, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 1304, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 7.3, "energy_rating_average": 60, "energy_rating_current": 39, "lighting_cost_current": {"value": 105, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer and room thermostat", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 587, "currency": "GBP"}, "hot_water_cost_current": {"value": 225, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 56, "currency": "GBP"}, "indicative_cost": "\u00a3100 - \u00a3350", "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 41, "environmental_impact_rating": 37}, {"sequence": 2, "typical_saving": {"value": 408, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 55, "environmental_impact_rating": 50}, {"sequence": 3, "typical_saving": {"value": 131, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 60, "environmental_impact_rating": 56}, {"sequence": 4, "typical_saving": {"value": 21, "currency": "GBP"}, "indicative_cost": "\u00a315 - \u00a330", "improvement_type": "C", "improvement_details": {"improvement_number": 2}, "improvement_category": 5, "energy_performance_rating": 61, "environmental_impact_rating": 57}, {"sequence": 5, "typical_saving": {"value": 38, "currency": "GBP"}, "indicative_cost": "\u00a385", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 62, "environmental_impact_rating": 58}, {"sequence": 6, "typical_saving": {"value": 38, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 13}, "improvement_category": 5, "energy_performance_rating": 64, "environmental_impact_rating": 60}, {"sequence": 7, "typical_saving": {"value": 176, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 69}, {"sequence": 8, "typical_saving": {"value": 45, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 72}, {"sequence": 9, "typical_saving": {"value": 259, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a38,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 82, "environmental_impact_rating": 81}], "co2_emissions_potential": 2.0, "energy_rating_potential": 82, "lighting_cost_potential": {"value": 57, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 143, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 69, "environmental_impact_rating": 91}, {"sequence": 2, "typical_saving": {"value": 162, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 71, "environmental_impact_rating": 74}, {"sequence": 3, "typical_saving": {"value": 263, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 73, "environmental_impact_rating": 69}], "hot_water_cost_potential": {"value": 76, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3301, "impact_of_loft_insulation": -778, "impact_of_solid_wall_insulation": -5622, "space_heating_existing_dwelling": 16421}, "energy_consumption_current": 484, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.0.0.0", "energy_consumption_potential": 130, "environmental_impact_current": 35, "fixed_lighting_outlets_count": 20, "windows_transmission_details": {"u_value": 3.1, "data_source": 2, "solar_transmittance": 0.76}, "current_energy_efficiency_band": "E", "environmental_impact_potential": 81, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 85, "low_energy_fixed_lighting_outlets_count": 3} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/BD24JG/cert-eb71d39605ae.json b/tests/fixtures/epc_prediction/BD24JG/cert-eb71d39605ae.json new file mode 100644 index 00000000..f5bde3c9 --- /dev/null +++ b/tests/fixtures/epc_prediction/BD24JG/cert-eb71d39605ae.json @@ -0,0 +1 @@ +{"uprn": 100051188787, "roofs": [{"description": "Pitched, 150 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": "Roof room(s), insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, filled cavity", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "BD2 4JG", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 1, "created_at": "2020-11-03 12:48:44.825032", "door_count": 0, "glazed_area": 1, "region_code": 3, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 2, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 1}, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 15706}], "immersion_heating_type": "NA", "secondary_heating_type": 605, "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-20faa35ec410", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2020-11-03", "inspection_date": "2020-11-03", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 123, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 5, "registration_date": "2020-11-03", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, mains gas", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "sap_room_in_roof": {"floor_area": 42.06, "insulation": "AB", "roof_room_connected": "N", "construction_age_band": "K"}, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.54, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 80.45, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 36.8, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "D", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "150mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 806, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.6, "energy_rating_average": 60, "energy_rating_current": 69, "lighting_cost_current": {"value": 87, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 701, "currency": "GBP"}, "hot_water_cost_current": {"value": 106, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 105, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 69}, {"sequence": 2, "typical_saving": {"value": 31, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 70}, {"sequence": 3, "typical_saving": {"value": 312, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 82, "environmental_impact_rating": 77}], "co2_emissions_potential": 3.0, "energy_rating_potential": 82, "lighting_cost_potential": {"value": 87, "currency": "GBP"}, "schema_version_original": "20.0.0", "hot_water_cost_potential": {"value": 75, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2293, "impact_of_loft_insulation": -250, "space_heating_existing_dwelling": 13843}, "energy_consumption_current": 215, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.06r0007", "energy_consumption_potential": 138, "environmental_impact_current": 64, "fixed_lighting_outlets_count": 23, "current_energy_efficiency_band": "C", "environmental_impact_potential": 77, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 38, "low_energy_fixed_lighting_outlets_count": 23} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/BD24JG/cert-eed1ed76757a.json b/tests/fixtures/epc_prediction/BD24JG/cert-eed1ed76757a.json new file mode 100644 index 00000000..b9cb4260 --- /dev/null +++ b/tests/fixtures/epc_prediction/BD24JG/cert-eed1ed76757a.json @@ -0,0 +1 @@ +{"uprn": 100051188776, "roofs": [{"description": {"value": "Pitched, 300 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Cavity wall, filled cavity", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "floors": [{"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in 36% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "postcode": "BD2 4JG", "hot_water": {"description": {"value": "Electric immersion, standard tariff", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}, "post_town": "", "built_form": 2, "created_at": "2022-10-19 15:06:41.338855", "door_count": 2, "glazed_area": 1, "region_code": 3, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 903, "water_heating_fuel": 29, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 29, "heat_emitter_type": 0, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2602, "main_heating_category": 10, "main_heating_fraction": 1, "sap_main_heating_code": 691, "main_heating_data_source": 2}], "immersion_heating_type": 2, "cylinder_insulation_type": 2, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 12}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}], "dwelling_type": {"value": "Semi-detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-ca2014d2cc3b", "assessment_type": "RdSAP", "completion_date": "2022-10-19", "inspection_date": "2022-10-19", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 78, "transaction_type": 13, "conservatory_type": 1, "heated_room_count": 2, "pvc_window_frames": "false", "registration_date": "2022-10-19", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Portable electric heaters (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.1, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 39.2, "quantity": "square metres"}, "party_wall_length": {"value": 7, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 37.5, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.1, "quantity": "metres"}, "total_floor_area": {"value": 39.2, "quantity": "square metres"}, "party_wall_length": {"value": 7, "quantity": "metres"}, "heat_loss_perimeter": {"value": 40.5, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "C", "party_wall_construction": 0, "wall_thickness_measured": "N", "roof_insulation_location": 2, "roof_insulation_thickness": "300mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 36, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 2059, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 7.6, "energy_rating_average": 60, "energy_rating_current": 20, "lighting_cost_current": {"value": 109, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Appliance thermostats", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 1, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 542, "currency": "GBP"}, "hot_water_cost_current": {"value": 662, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 30, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 219, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 24, "environmental_impact_rating": 35}, {"sequence": 2, "typical_saving": {"value": 178, "currency": "GBP"}, "indicative_cost": "\u00a315 - \u00a330", "improvement_type": "C", "improvement_details": {"improvement_number": 2}, "improvement_category": 5, "energy_performance_rating": 28, "environmental_impact_rating": 38}, {"sequence": 3, "typical_saving": {"value": 38, "currency": "GBP"}, "indicative_cost": "\u00a380 - \u00a3120", "improvement_type": "D", "improvement_details": {"improvement_number": 10}, "improvement_category": 5, "energy_performance_rating": 29, "environmental_impact_rating": 38}, {"sequence": 4, "typical_saving": {"value": 26, "currency": "GBP"}, "indicative_cost": "\u00a345", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 29, "environmental_impact_rating": 39}, {"sequence": 5, "typical_saving": {"value": 1662, "currency": "GBP"}, "indicative_cost": "\u00a33,000 - \u00a37,000", "improvement_type": "T", "improvement_details": {"improvement_number": 29}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 64}, {"sequence": 6, "typical_saving": {"value": 33, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 67}, {"sequence": 7, "typical_saving": {"value": 324, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 81, "environmental_impact_rating": 77}], "co2_emissions_potential": 2.3, "energy_rating_potential": 81, "lighting_cost_potential": {"value": 66, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 1423, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 65, "environmental_impact_rating": 95}, {"sequence": 2, "typical_saving": {"value": 1165, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 62, "environmental_impact_rating": 66}, {"sequence": 3, "typical_saving": {"value": 1748, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 69, "environmental_impact_rating": 62}], "hot_water_cost_potential": {"value": 67, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3407, "space_heating_existing_dwelling": 10593}, "energy_consumption_current": 570, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.1.1.0", "energy_consumption_potential": 163, "environmental_impact_current": 31, "fixed_lighting_outlets_count": 14, "windows_transmission_details": {"u_value": 3.1, "data_source": 2, "solar_transmittance": 0.76}, "current_energy_efficiency_band": "G", "environmental_impact_potential": 77, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 96, "low_energy_fixed_lighting_outlets_count": 5} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/BD24JG/cert-f089b44ae169.json b/tests/fixtures/epc_prediction/BD24JG/cert-f089b44ae169.json new file mode 100644 index 00000000..4fe01762 --- /dev/null +++ b/tests/fixtures/epc_prediction/BD24JG/cert-f089b44ae169.json @@ -0,0 +1 @@ +{"uprn": 100051188769, "roofs": [{"description": {"value": "Pitched, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": {"value": "Roof room(s), no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": {"value": "Cavity wall, filled cavity", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in 38% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "postcode": "BD2 4JG", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 1, "created_at": "2019-03-07 06:02:10.000000", "door_count": 3, "glazed_area": 1, "glazing_gap": 12, "region_code": 3, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 29, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "mcs_installed_heat_pump": "false", "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17115}], "immersion_heating_type": "NA", "secondary_heating_type": 691, "has_fixed_air_conditioning": "false"}, "sap_version": 9.93, "schema_type": "RdSAP-Schema-18.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Detached bungalow", "language": "1"}, "language_code": 1, "property_type": 1, "address_line_1": "addr-5db000b9a26f", "assessment_type": "RdSAP", "completion_date": "2019-03-07", "inspection_date": "2019-03-01", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 113, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 6, "pvc_window_frames": "true", "registration_date": "2019-03-07", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 320, "floor_heat_loss": 7, "sap_room_in_roof": {"floor_area": 28.82, "insulation": "AB", "roof_room_connected": "N", "construction_age_band": "D"}, "roof_construction": 5, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.58, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 76.3, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 30.3, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "D", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 285, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.3, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 7.41, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 2, "heat_loss_perimeter": {"value": 8.3, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "D", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "low_energy_lighting": 38, "solar_water_heating": "N", "habitable_room_count": 6, "heating_cost_current": {"value": 1509, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 7.6, "energy_rating_average": 60, "energy_rating_current": 45, "lighting_cost_current": {"value": 122, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 1022, "currency": "GBP"}, "hot_water_cost_current": {"value": 89, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 35, "currency": "GBP"}, "indicative_cost": "\u00a3850 - \u00a31,500", "improvement_type": "A2", "improvement_details": {"improvement_number": 45}, "improvement_category": 5, "energy_performance_rating": 46, "environmental_impact_rating": 42}, {"sequence": 2, "typical_saving": {"value": 361, "currency": "GBP"}, "indicative_cost": "\u00a31,500 - \u00a32,700", "improvement_type": "A3", "improvement_details": {"improvement_number": 46}, "improvement_category": 5, "energy_performance_rating": 58, "environmental_impact_rating": 53}, {"sequence": 3, "typical_saving": {"value": 98, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 61, "environmental_impact_rating": 57}, {"sequence": 4, "typical_saving": {"value": 40, "currency": "GBP"}, "indicative_cost": "\u00a350", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 62, "environmental_impact_rating": 58}, {"sequence": 5, "typical_saving": {"value": 29, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 63, "environmental_impact_rating": 59}, {"sequence": 6, "typical_saving": {"value": 283, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a38,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 67}], "co2_emissions_potential": 4.1, "energy_rating_potential": 71, "lighting_cost_potential": {"value": 75, "currency": "GBP"}, "schema_version_original": "LIG-18.0", "hot_water_cost_potential": {"value": 60, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2022, "impact_of_loft_insulation": -4001, "space_heating_existing_dwelling": 24936}, "energy_consumption_current": 385, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "v93.0.1.1", "energy_consumption_potential": 205, "environmental_impact_current": 41, "fixed_lighting_outlets_count": 16, "current_energy_efficiency_band": "E", "environmental_impact_potential": 67, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 67, "low_energy_fixed_lighting_outlets_count": 6} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/BD24JG/cert-f326c2524ab3.json b/tests/fixtures/epc_prediction/BD24JG/cert-f326c2524ab3.json new file mode 100644 index 00000000..d110ad70 --- /dev/null +++ b/tests/fixtures/epc_prediction/BD24JG/cert-f326c2524ab3.json @@ -0,0 +1 @@ +{"uprn": 100051188797, "roofs": [{"description": {"value": "Pitched, 270 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": {"value": "Cavity wall, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": {"value": "Low energy lighting in 25% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "postcode": "BD2 4JG", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 2, "created_at": "2016-06-07 14:30:52.000000", "door_count": 2, "glazed_area": 1, "region_code": 3, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 1, "fan_flue_present": "N", "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2104, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 605}], "immersion_heating_type": "NA", "secondary_heating_type": 601, "cylinder_insulation_type": 2, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Semi-detached bungalow", "language": "1"}, "language_code": 1, "property_type": 1, "address_line_1": "addr-9ec458ba9728", "assessment_type": "RdSAP", "completion_date": "2016-06-07", "inspection_date": "2016-06-07", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 77, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 5, "pvc_window_frames": "false", "registration_date": "2016-06-07", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Room heaters, mains gas", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 330, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.45, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 77.4, "quantity": "square metres"}, "party_wall_length": {"value": 7.47, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 29.01, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "270mm", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 25, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 964, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 5.7, "energy_rating_average": 60, "energy_rating_current": 50, "lighting_cost_current": {"value": 91, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer and room thermostat", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 1, "open_fireplaces_count": 1, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 553, "currency": "GBP"}, "hot_water_cost_current": {"value": 211, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 164, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 56, "environmental_impact_rating": 49}, {"sequence": 2, "typical_saving": {"value": 90, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 60, "environmental_impact_rating": 54}, {"sequence": 3, "typical_saving": {"value": 18, "currency": "GBP"}, "indicative_cost": "\u00a315 - \u00a330", "improvement_type": "C", "improvement_details": {"improvement_number": 2}, "improvement_category": 5, "energy_performance_rating": 60, "environmental_impact_rating": 54}, {"sequence": 4, "typical_saving": {"value": 31, "currency": "GBP"}, "indicative_cost": "\u00a330", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 62, "environmental_impact_rating": 55}, {"sequence": 5, "typical_saving": {"value": 38, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 13}, "improvement_category": 5, "energy_performance_rating": 63, "environmental_impact_rating": 57}, {"sequence": 6, "typical_saving": {"value": 202, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 68}, {"sequence": 7, "typical_saving": {"value": 43, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 71}, {"sequence": 8, "typical_saving": {"value": 256, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a38,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 83, "environmental_impact_rating": 80}], "co2_emissions_potential": 1.9, "energy_rating_potential": 83, "lighting_cost_potential": {"value": 52, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 32, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 58, "environmental_impact_rating": 51}, {"sequence": 2, "typical_saving": {"value": 85, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 64, "environmental_impact_rating": 91}, {"sequence": 3, "typical_saving": {"value": 52, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 63, "environmental_impact_rating": 72}, {"sequence": 4, "typical_saving": {"value": 226, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 72, "environmental_impact_rating": 67}], "hot_water_cost_potential": {"value": 75, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3011, "impact_of_cavity_insulation": -2437, "space_heating_existing_dwelling": 12589}, "energy_consumption_current": 416, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": 9.92, "energy_consumption_potential": 138, "environmental_impact_current": 43, "fixed_lighting_outlets_count": 8, "current_energy_efficiency_band": "E", "environmental_impact_potential": 80, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 73, "low_energy_fixed_lighting_outlets_count": 2} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/BD24JG/cert-f3aae3d2c3c9.json b/tests/fixtures/epc_prediction/BD24JG/cert-f3aae3d2c3c9.json new file mode 100644 index 00000000..fc699e15 --- /dev/null +++ b/tests/fixtures/epc_prediction/BD24JG/cert-f3aae3d2c3c9.json @@ -0,0 +1 @@ +{"uprn": 100051188774, "roofs": [{"description": {"value": "Pitched, 250 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": {"value": "Cavity wall, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": {"value": "Low energy lighting in 80% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "BD2 4JG", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2016-06-13 16:31:07.000000", "door_count": 2, "glazed_area": 1, "glazing_gap": "16+", "region_code": 3, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 29, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 15200}], "immersion_heating_type": "NA", "secondary_heating_type": 691, "has_fixed_air_conditioning": "false"}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Semi-detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-e89e8f5b061d", "assessment_type": "RdSAP", "completion_date": "2016-06-13", "inspection_date": "2016-06-13", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 85, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 5, "pvc_window_frames": "true", "registration_date": "2016-06-13", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.54, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 42.9, "quantity": "square metres"}, "party_wall_length": {"value": 7.45, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 19.85, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.42, "quantity": "metres"}, "total_floor_area": {"value": 41.86, "quantity": "square metres"}, "party_wall_length": {"value": 7.45, "quantity": "metres"}, "heat_loss_perimeter": {"value": 18.69, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "250mm", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 80, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 874, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.3, "energy_rating_average": 60, "energy_rating_current": 60, "lighting_cost_current": {"value": 67, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 588, "currency": "GBP"}, "hot_water_cost_current": {"value": 112, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 230, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 67}, {"sequence": 2, "typical_saving": {"value": 55, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 70}, {"sequence": 3, "typical_saving": {"value": 37, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 72}, {"sequence": 4, "typical_saving": {"value": 256, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a38,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 82, "environmental_impact_rating": 81}], "co2_emissions_potential": 2.0, "energy_rating_potential": 82, "lighting_cost_potential": {"value": 67, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 45, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 70, "environmental_impact_rating": 69}}], "hot_water_cost_potential": {"value": 76, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2149, "impact_of_cavity_insulation": -3851, "space_heating_existing_dwelling": 12588}, "energy_consumption_current": 291, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.0.0.0", "energy_consumption_potential": 130, "environmental_impact_current": 57, "fixed_lighting_outlets_count": 15, "windows_transmission_details": {"u_value": 2.6, "data_source": 2, "solar_transmittance": 0.76}, "current_energy_efficiency_band": "D", "environmental_impact_potential": 81, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 51, "low_energy_fixed_lighting_outlets_count": 12} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/BD24JG/cert-f481cd1abc1f.json b/tests/fixtures/epc_prediction/BD24JG/cert-f481cd1abc1f.json new file mode 100644 index 00000000..2544f61c --- /dev/null +++ b/tests/fixtures/epc_prediction/BD24JG/cert-f481cd1abc1f.json @@ -0,0 +1 @@ +{"uprn": 100051188780, "roofs": [{"description": "Pitched, no insulation", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"narrow_cavities": "true", "cavity_fill_recommended": "true"}, "lighting": {"description": "Excellent lighting efficiency", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "BD2 4JG", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2026-02-23 15:00:43", "door_count": 1, "region_code": 3, "report_type": 2, "sap_heating": {"number_baths": 1, "cylinder_size": 1, "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 16840}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "true", "orientation": 3, "window_type": 1, "glazing_type": 2, "window_width": 1.8, "window_height": 1.6, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 2, "window_width": 0.4, "window_height": 1.6, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 5, "window_type": 1, "glazing_type": 2, "window_width": 0.4, "window_height": 1.6, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 7, "window_type": 1, "glazing_type": 2, "window_width": 1.65, "window_height": 1.9, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 5, "window_type": 1, "glazing_type": 2, "window_width": 0.9, "window_height": 1, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 3, "window_type": 1, "glazing_type": 2, "window_width": 1, "window_height": 1.2, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 3, "window_type": 1, "glazing_type": 2, "window_width": 0.8, "window_height": 1.15, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 7, "window_type": 1, "glazing_type": 2, "window_width": 0.8, "window_height": 1.15, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 5, "window_type": 1, "glazing_type": 2, "window_width": 0.8, "window_height": 1.2, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 5, "window_type": 1, "glazing_type": 2, "window_width": 0.8, "window_height": 1.2, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Semi-detached house", "language_code": 1, "pressure_test": 4, "property_type": 0, "address_line_1": "addr-8a4e3131b9ac", "assessment_type": "RdSAP", "completion_date": "2026-02-23", "inspection_date": "2026-02-23", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 83, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 5, "registration_date": "2026-02-23", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "true", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 2, "electricity_smart_meter_present": "true"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "extract_fans_count": 1, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.35, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 41.97, "quantity": "square metres"}, "party_wall_length": {"value": 7.5, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 19.3, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.45, "quantity": "metres"}, "total_floor_area": {"value": 41.25, "quantity": "square metres"}, "party_wall_length": {"value": 7.5, "quantity": "metres"}, "heat_loss_perimeter": {"value": 18.5, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "D", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 5, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 1224, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.0, "energy_rating_average": 60, "energy_rating_current": 63, "lighting_cost_current": {"value": 53, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 671, "currency": "GBP"}, "hot_water_cost_current": {"value": 163, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 252, "currency": "GBP"}, "indicative_cost": "\u00a3900 - \u00a31,200", "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 68}, {"sequence": 2, "typical_saving": {"value": 241, "currency": "GBP"}, "indicative_cost": "\u00a3900 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 75}, {"sequence": 3, "typical_saving": {"value": 59, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a310,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 77}, {"sequence": 4, "typical_saving": {"value": 208, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 81, "environmental_impact_rating": 78}], "co2_emissions_potential": 2.1, "energy_rating_potential": 81, "lighting_cost_potential": {"value": 53, "currency": "GBP"}, "schema_version_original": "21.0.1", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 70, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 77, "environmental_impact_rating": 78}}], "hot_water_cost_potential": {"value": 163, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2185.03, "space_heating_existing_dwelling": 14512.88}, "draughtproofed_door_count": 1, "energy_consumption_current": 263, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "5.02r0332", "energy_consumption_potential": 135, "environmental_impact_current": 59, "current_energy_efficiency_band": "D", "environmental_impact_potential": 78, "led_fixed_lighting_bulbs_count": 15, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 48, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/BD24JG/cert-f52356b57b37.json b/tests/fixtures/epc_prediction/BD24JG/cert-f52356b57b37.json new file mode 100644 index 00000000..507f4c45 --- /dev/null +++ b/tests/fixtures/epc_prediction/BD24JG/cert-f52356b57b37.json @@ -0,0 +1 @@ +{"uprn": 100051188786, "roofs": [{"description": {"value": "Pitched, 150 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": {"value": "System built, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Partial double glazing", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "addendum": {"system_build": "true"}, "lighting": {"description": {"value": "Low energy lighting in all fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "BD2 4JG", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2016-06-06 15:21:35.000000", "door_count": 2, "glazed_area": 1, "region_code": 3, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 1, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 113, "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "secondary_heating_type": 601, "has_fixed_air_conditioning": "false"}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Semi-detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-8549a2355945", "assessment_type": "RdSAP", "completion_date": "2016-06-06", "inspection_date": "2016-06-06", "extensions_count": 0, "measurement_type": 2, "total_floor_area": 69, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "false", "registration_date": "2016-06-06", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 8, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.2, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 40, "quantity": "square metres"}, "party_wall_length": {"value": 8, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 18, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.3, "quantity": "metres"}, "total_floor_area": {"value": 40, "quantity": "square metres"}, "party_wall_length": {"value": 8, "quantity": "metres"}, "heat_loss_perimeter": {"value": 18, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 0, "wall_thickness_measured": "N", "roof_insulation_location": 2, "roof_insulation_thickness": "150mm", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 728, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.8, "energy_rating_average": 60, "energy_rating_current": 62, "lighting_cost_current": {"value": 47, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 668, "currency": "GBP"}, "hot_water_cost_current": {"value": 107, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 60, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 33, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 63, "environmental_impact_rating": 58}, {"sequence": 2, "typical_saving": {"value": 36, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 61}, {"sequence": 3, "typical_saving": {"value": 27, "currency": "GBP"}, "indicative_cost": "\u00a33,300 - \u00a36,500", "improvement_type": "O", "improvement_details": {"improvement_number": 8}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 62}, {"sequence": 4, "typical_saving": {"value": 256, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a38,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 78, "environmental_impact_rating": 73}], "co2_emissions_potential": 2.5, "energy_rating_potential": 78, "lighting_cost_potential": {"value": 47, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "hot_water_cost_potential": {"value": 71, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1994, "impact_of_loft_insulation": -199, "space_heating_existing_dwelling": 11822}, "energy_consumption_current": 312, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 60, "calculation_software_version": "2.0.0.0", "energy_consumption_potential": 198, "environmental_impact_current": 56, "fixed_lighting_outlets_count": 9, "windows_transmission_details": {"u_value": 3.1, "data_source": 2, "solar_transmittance": 0.76}, "current_energy_efficiency_band": "D", "environmental_impact_potential": 73, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 55, "low_energy_fixed_lighting_outlets_count": 9} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CF481ND/cert-0dd25677d889.json b/tests/fixtures/epc_prediction/CF481ND/cert-0dd25677d889.json new file mode 100644 index 00000000..73ce721b --- /dev/null +++ b/tests/fixtures/epc_prediction/CF481ND/cert-0dd25677d889.json @@ -0,0 +1 @@ +{"uprn": 100100583981, "roofs": [{"description": "Pitched, 400+ mm loft insulation", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": "High performance glazing", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "addendum": {"addendum_numbers": [15], "cavity_fill_recommended": "true"}, "lighting": {"description": "Good lighting efficiency", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "CF48 1ND", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2026-04-01 13:39:58", "door_count": 2, "region_code": 12, "report_type": 2, "sap_heating": {"number_baths": 1, "cylinder_size": 1, "shower_outlets": [{"shower_outlet": {"shower_wwhrs": 1, "shower_outlet_type": 1}}], "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 1, "main_heating_data_source": 1, "main_heating_index_number": 10244}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"orientation": 5, "window_type": 1, "glazing_type": 13, "window_width": 1.14, "window_height": 0.94, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 5, "window_type": 1, "glazing_type": 13, "window_width": 1.14, "window_height": 0.94, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 3, "window_type": 1, "glazing_type": 13, "window_width": 0.27, "window_height": 0.97, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 5, "window_type": 1, "glazing_type": 13, "window_width": 0.45, "window_height": 1.15, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 5, "window_type": 1, "glazing_type": 13, "window_width": 1.47, "window_height": 1.24, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 5, "window_type": 1, "glazing_type": 13, "window_width": 0.3, "window_height": 2.06, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 5, "window_type": 1, "glazing_type": 13, "window_width": 1.44, "window_height": 1.16, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 5, "window_type": 1, "glazing_type": 13, "window_width": 1.44, "window_height": 1.16, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 1, "window_type": 1, "glazing_type": 13, "window_width": 1.47, "window_height": 0.87, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 1, "window_type": 1, "glazing_type": 13, "window_width": 0.92, "window_height": 0.86, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "WLS", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Mid-terrace house", "language_code": 1, "pressure_test": 4, "property_type": 0, "address_line_1": "addr-dced6abdeb2a", "assessment_type": "RdSAP", "completion_date": "2026-04-01", "inspection_date": "2026-03-24", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 86, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 5, "registration_date": "2026-04-01", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "false", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 2, "electricity_smart_meter_present": "false"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "Y", "wall_thickness": 350, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.41, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 42.9, "quantity": "square metres"}, "party_wall_length": {"value": 7.15, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 19.15, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.35, "quantity": "metres"}, "total_floor_area": {"value": 42.9, "quantity": "square metres"}, "party_wall_length": {"value": 14.3, "quantity": "metres"}, "heat_loss_perimeter": {"value": 12, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "D", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "400mm+", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 868, "currency": "GBP"}, "insulated_door_count": 1, "co2_emissions_current": 2.7, "energy_rating_average": 60, "energy_rating_current": 74, "lighting_cost_current": {"value": 59, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 627, "currency": "GBP"}, "hot_water_cost_current": {"value": 217, "currency": "GBP"}, "insulated_door_u_value": 1.01, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 169, "currency": "GBP"}, "indicative_cost": "\u00a3900 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 79}, {"sequence": 2, "typical_saving": {"value": 72, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a310,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 79, "environmental_impact_rating": 81}, {"sequence": 3, "typical_saving": {"value": 216, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 83, "environmental_impact_rating": 82}], "co2_emissions_potential": 1.9, "energy_rating_potential": 83, "lighting_cost_potential": {"value": 59, "currency": "GBP"}, "schema_version_original": "21.0.1", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 69, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 79, "environmental_impact_rating": 81}}], "hot_water_cost_potential": {"value": 217, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2617.98, "space_heating_existing_dwelling": 8483.51}, "draughtproofed_door_count": 2, "energy_consumption_current": 173, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "5.02r0335", "energy_consumption_potential": 116, "environmental_impact_current": 74, "current_energy_efficiency_band": "C", "environmental_impact_potential": 82, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 31, "low_energy_fixed_lighting_bulbs_count": 9, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CF481ND/cert-3077aedcbe8b.json b/tests/fixtures/epc_prediction/CF481ND/cert-3077aedcbe8b.json new file mode 100644 index 00000000..138ab136 --- /dev/null +++ b/tests/fixtures/epc_prediction/CF481ND/cert-3077aedcbe8b.json @@ -0,0 +1 @@ +{"uprn": 100100583981, "roofs": [{"description": "Pitched, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": "Low energy lighting in 8% of fixed outlets", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "postcode": "CF48 1ND", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2019-09-12 21:50:28.000000", "door_count": 2, "glazed_area": 1, "glazing_gap": "16+", "region_code": 12, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17507}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.93, "schema_type": "RdSAP-Schema-18.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Mid-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-ef9d11b086aa", "assessment_type": "RdSAP", "completion_date": "2019-09-12", "inspection_date": "2019-09-12", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 91, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 5, "pvc_window_frames": "true", "registration_date": "2019-09-12", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 44.1, "quantity": "square metres"}, "party_wall_length": {"value": 7, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 19.6, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.4, "quantity": "metres"}, "total_floor_area": {"value": 46.9, "quantity": "square metres"}, "party_wall_length": {"value": 14, "quantity": "metres"}, "heat_loss_perimeter": {"value": 13.4, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "D", "party_wall_construction": 0, "wall_thickness_measured": "N", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 8, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 827, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.9, "energy_rating_average": 60, "energy_rating_current": 61, "lighting_cost_current": {"value": 130, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 708, "currency": "GBP"}, "hot_water_cost_current": {"value": 90, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 91, "currency": "GBP"}, "indicative_cost": "1,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 60}, {"sequence": 2, "typical_saving": {"value": 34, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 61}, {"sequence": 3, "typical_saving": {"value": 55, "currency": "GBP"}, "indicative_cost": 60, "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 63}, {"sequence": 4, "typical_saving": {"value": 29, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 65}, {"sequence": 5, "typical_saving": {"value": 315, "currency": "GBP"}, "indicative_cost": "5,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 79, "environmental_impact_rating": 73}], "co2_emissions_potential": 2.9, "energy_rating_potential": 79, "lighting_cost_potential": {"value": 67, "currency": "GBP"}, "schema_version_original": "LIG-18.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 47, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 66, "environmental_impact_rating": 62}}], "hot_water_cost_potential": {"value": 61, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2033, "impact_of_loft_insulation": -4392, "impact_of_cavity_insulation": -2346, "space_heating_existing_dwelling": 16340}, "energy_consumption_current": 303, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "3.10r02", "energy_consumption_potential": 179, "environmental_impact_current": 55, "fixed_lighting_outlets_count": 13, "current_energy_efficiency_band": "D", "environmental_impact_potential": 73, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 53, "low_energy_fixed_lighting_outlets_count": 1} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CF481ND/cert-5aad1cfe207c.json b/tests/fixtures/epc_prediction/CF481ND/cert-5aad1cfe207c.json new file mode 100644 index 00000000..e8332108 --- /dev/null +++ b/tests/fixtures/epc_prediction/CF481ND/cert-5aad1cfe207c.json @@ -0,0 +1 @@ +{"uprn": 100100583977, "roofs": [{"description": {"value": "Pitched, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": {"value": "Cavity wall, filled cavity", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "No low energy lighting", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "postcode": "CF48 1ND", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 2, "created_at": "2015-10-26 15:39:49.000000", "door_count": 2, "glazed_area": 1, "glazing_gap": 6, "region_code": 12, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 1, "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2102, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 1319}], "immersion_heating_type": "NA", "secondary_heating_type": 602, "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 25}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Semi-detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-03087b9717bc", "assessment_type": "RdSAP", "completion_date": "2015-10-26", "inspection_date": "2015-10-26", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 86, "transaction_type": 13, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2015-10-26", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Room heaters, mains gas", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.51, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 42.79, "quantity": "square metres"}, "party_wall_length": {"value": 5.66, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 20.78, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.48, "quantity": "metres"}, "total_floor_area": {"value": 42.79, "quantity": "square metres"}, "party_wall_length": {"value": 5.66, "quantity": "metres"}, "heat_loss_perimeter": {"value": 20.78, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "D", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 0, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 1239, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 7.2, "energy_rating_average": 60, "energy_rating_current": 44, "lighting_cost_current": {"value": 111, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, no room thermostat", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 796, "currency": "GBP"}, "hot_water_cost_current": {"value": 213, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 63, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 46, "environmental_impact_rating": 39}, {"sequence": 2, "typical_saving": {"value": 44, "currency": "GBP"}, "indicative_cost": "\u00a380", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 48, "environmental_impact_rating": 40}, {"sequence": 3, "typical_saving": {"value": 210, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 12}, "improvement_category": 5, "energy_performance_rating": 55, "environmental_impact_rating": 47}, {"sequence": 4, "typical_saving": {"value": 275, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 64, "environmental_impact_rating": 59}, {"sequence": 5, "typical_saving": {"value": 44, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 61}, {"sequence": 6, "typical_saving": {"value": 270, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a38,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 70}], "co2_emissions_potential": 3.1, "energy_rating_potential": 76, "lighting_cost_potential": {"value": 55, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 90, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 55, "environmental_impact_rating": 88}, {"sequence": 2, "typical_saving": {"value": 43, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 54, "environmental_impact_rating": 64}, {"sequence": 3, "typical_saving": {"value": 361, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 68, "environmental_impact_rating": 60}], "hot_water_cost_potential": {"value": 75, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2844, "impact_of_loft_insulation": -4674, "space_heating_existing_dwelling": 15645}, "energy_consumption_current": 477, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.0.0.0", "energy_consumption_potential": 204, "environmental_impact_current": 37, "fixed_lighting_outlets_count": 16, "current_energy_efficiency_band": "E", "environmental_impact_potential": 70, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 84, "low_energy_fixed_lighting_outlets_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CF481ND/cert-5b3816460805.json b/tests/fixtures/epc_prediction/CF481ND/cert-5b3816460805.json new file mode 100644 index 00000000..e6a07da4 --- /dev/null +++ b/tests/fixtures/epc_prediction/CF481ND/cert-5b3816460805.json @@ -0,0 +1 @@ +{"uprn": 100100583983, "roofs": [{"description": "Pitched, 300 mm loft insulation", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": "High performance glazing", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "addendum": {"addendum_numbers": [15], "cavity_fill_recommended": "true"}, "lighting": {"description": "Good lighting efficiency", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "CF48 1ND", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2026-03-25 12:15:50", "door_count": 2, "region_code": 12, "report_type": 2, "sap_heating": {"number_baths": 1, "cylinder_size": 1, "shower_outlets": [{"shower_outlet": {"shower_wwhrs": 1, "shower_outlet_type": 1}}], "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 1, "main_heating_data_source": 1, "main_heating_index_number": 10244}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"orientation": 5, "window_type": 1, "glazing_type": 13, "window_width": 1.93, "window_height": 1.16, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 1, "window_type": 1, "glazing_type": 13, "window_width": 0.42, "window_height": 1.17, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 1, "window_type": 1, "glazing_type": 13, "window_width": 1.43, "window_height": 1.16, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 3, "window_type": 1, "glazing_type": 13, "window_width": 0.27, "window_height": 0.92, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 5, "window_type": 1, "glazing_type": 13, "window_width": 0.33, "window_height": 2.06, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 5, "window_type": 1, "glazing_type": 13, "window_width": 1.93, "window_height": 1.16, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 5, "window_type": 1, "glazing_type": 13, "window_width": 1.93, "window_height": 1.16, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 1, "window_type": 1, "glazing_type": 13, "window_width": 1.43, "window_height": 0.86, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 1, "window_type": 1, "glazing_type": 13, "window_width": 0.95, "window_height": 0.86, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "WLS", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Mid-terrace house", "language_code": 1, "pressure_test": 4, "property_type": 0, "address_line_1": "addr-61e62274c13e", "assessment_type": "RdSAP", "completion_date": "2026-03-25", "inspection_date": "2026-03-24", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 79, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 5, "registration_date": "2026-03-25", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "false", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 2, "electricity_smart_meter_present": "false"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "Y", "wall_thickness": 350, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 39.5, "quantity": "square metres"}, "party_wall_length": {"value": 7.08, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 18.78, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.33, "quantity": "metres"}, "total_floor_area": {"value": 39.5, "quantity": "square metres"}, "party_wall_length": {"value": 11.7, "quantity": "metres"}, "heat_loss_perimeter": {"value": 14.16, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "D", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "300mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 790, "currency": "GBP"}, "insulated_door_count": 1, "co2_emissions_current": 2.7, "energy_rating_average": 60, "energy_rating_current": 73, "lighting_cost_current": {"value": 55, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 574, "currency": "GBP"}, "hot_water_cost_current": {"value": 190, "currency": "GBP"}, "insulated_door_u_value": 1.01, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 154, "currency": "GBP"}, "indicative_cost": "\u00a3900 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 78}, {"sequence": 2, "typical_saving": {"value": 62, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a310,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 78, "environmental_impact_rating": 80}, {"sequence": 3, "typical_saving": {"value": 217, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 82, "environmental_impact_rating": 81}], "co2_emissions_potential": 1.9, "energy_rating_potential": 82, "lighting_cost_potential": {"value": 55, "currency": "GBP"}, "schema_version_original": "21.0.1", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 63, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 78, "environmental_impact_rating": 80}}], "hot_water_cost_potential": {"value": 190, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2557.36, "space_heating_existing_dwelling": 8466.63}, "draughtproofed_door_count": 2, "energy_consumption_current": 186, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "5.02r0335", "energy_consumption_potential": 124, "environmental_impact_current": 73, "current_energy_efficiency_band": "C", "environmental_impact_potential": 81, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 34, "low_energy_fixed_lighting_bulbs_count": 9, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CF481ND/cert-6030fde8e888.json b/tests/fixtures/epc_prediction/CF481ND/cert-6030fde8e888.json new file mode 100644 index 00000000..87e255c1 --- /dev/null +++ b/tests/fixtures/epc_prediction/CF481ND/cert-6030fde8e888.json @@ -0,0 +1 @@ +{"uprn": 100100583980, "roofs": [{"description": {"value": "Pitched, 200 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": {"value": "Cavity wall, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"access_issues": "true", "high_exposure": "true"}, "lighting": {"description": {"value": "Low energy lighting in 11% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "postcode": "CF48 1ND", "hot_water": {"description": {"value": "From main system, no cylinder thermostat", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "post_town": "", "built_form": 4, "created_at": "2016-07-05 18:12:34.000000", "door_count": 2, "glazed_area": 1, "glazing_gap": "16+", "region_code": 12, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 1, "fan_flue_present": "N", "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2101, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 119, "mcs_installed_heat_pump": "false", "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "secondary_heating_type": 601, "cylinder_insulation_type": 2, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 12}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Mid-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-0a043994f6d1", "assessment_type": "RdSAP", "completion_date": "2016-07-05", "inspection_date": "2016-07-05", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 87, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 1, "pvc_window_frames": "true", "registration_date": "2016-07-05", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Room heaters, mains gas", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 43.67, "quantity": "square metres"}, "party_wall_length": {"value": 7.1, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 19.4, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.4, "quantity": "metres"}, "total_floor_area": {"value": 43.67, "quantity": "square metres"}, "party_wall_length": {"value": 14.2, "quantity": "metres"}, "heat_loss_perimeter": {"value": 12.3, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "D", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "200mm", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 11, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 1011, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 7, "energy_rating_average": 60, "energy_rating_current": 46, "lighting_cost_current": {"value": 109, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "No time or thermostatic control of room temperature", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 522, "currency": "GBP"}, "hot_water_cost_current": {"value": 399, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 245, "currency": "GBP"}, "indicative_cost": "1,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 54, "environmental_impact_rating": 47}, {"sequence": 2, "typical_saving": {"value": 70, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 57, "environmental_impact_rating": 49}, {"sequence": 3, "typical_saving": {"value": 93, "currency": "GBP"}, "indicative_cost": 30, "improvement_type": "C", "improvement_details": {"improvement_number": 2}, "improvement_category": 5, "energy_performance_rating": 60, "environmental_impact_rating": 53}, {"sequence": 4, "typical_saving": {"value": 40, "currency": "GBP"}, "indicative_cost": 40, "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 61, "environmental_impact_rating": 55}, {"sequence": 5, "typical_saving": {"value": 28, "currency": "GBP"}, "indicative_cost": 400, "improvement_type": "F", "improvement_details": {"improvement_number": 4}, "improvement_category": 5, "energy_performance_rating": 63, "environmental_impact_rating": 56}, {"sequence": 6, "typical_saving": {"value": 143, "currency": "GBP"}, "indicative_cost": 450, "improvement_type": "G", "improvement_details": {"improvement_number": 11}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 63}, {"sequence": 7, "typical_saving": {"value": 198, "currency": "GBP"}, "indicative_cost": "3,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 72}, {"sequence": 8, "typical_saving": {"value": 44, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 75}, {"sequence": 9, "typical_saving": {"value": 277, "currency": "GBP"}, "indicative_cost": "8,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 84}], "co2_emissions_potential": 1.8, "energy_rating_potential": 86, "lighting_cost_potential": {"value": 58, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 47, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 56, "environmental_impact_rating": 49}, {"sequence": 2, "typical_saving": {"value": 87, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 68, "environmental_impact_rating": 92}, {"sequence": 3, "typical_saving": {"value": 58, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 68, "environmental_impact_rating": 76}, {"sequence": 4, "typical_saving": {"value": 218, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 75, "environmental_impact_rating": 71}], "hot_water_cost_potential": {"value": 77, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 5210, "impact_of_cavity_insulation": -3472, "space_heating_existing_dwelling": 12473}, "energy_consumption_current": 452, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "1.0.x", "energy_consumption_potential": 112, "environmental_impact_current": 39, "fixed_lighting_outlets_count": 9, "current_energy_efficiency_band": "E", "environmental_impact_potential": 84, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 80, "low_energy_fixed_lighting_outlets_count": 1} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CF481ND/cert-6e6d1776f8b7.json b/tests/fixtures/epc_prediction/CF481ND/cert-6e6d1776f8b7.json new file mode 100644 index 00000000..abfe745c --- /dev/null +++ b/tests/fixtures/epc_prediction/CF481ND/cert-6e6d1776f8b7.json @@ -0,0 +1 @@ +{"uprn": 100100583983, "roofs": [{"description": "Pitched, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": "Low energy lighting in 83% of fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "CF48 1ND", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2019-10-20 18:09:33.000000", "door_count": 2, "glazed_area": 1, "glazing_gap": "16+", "region_code": 12, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 10244}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-19.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Mid-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-652cd7973a51", "assessment_type": "RdSAP", "completion_date": "2019-10-20", "inspection_date": "2019-10-19", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 87, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 5, "pvc_window_frames": "true", "registration_date": "2019-10-20", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 40.6, "quantity": "square metres"}, "party_wall_length": {"value": 7.1, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 19.1, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.4, "quantity": "metres"}, "total_floor_area": {"value": 46.86, "quantity": "square metres"}, "party_wall_length": {"value": 14.2, "quantity": "metres"}, "heat_loss_perimeter": {"value": 12, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "D", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 83, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 816, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.7, "energy_rating_average": 60, "energy_rating_current": 62, "lighting_cost_current": {"value": 76, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 699, "currency": "GBP"}, "hot_water_cost_current": {"value": 101, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 85, "currency": "GBP"}, "indicative_cost": "1,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 60}, {"sequence": 2, "typical_saving": {"value": 32, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 61}, {"sequence": 3, "typical_saving": {"value": 28, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 63}, {"sequence": 4, "typical_saving": {"value": 315, "currency": "GBP"}, "indicative_cost": "5,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 72}], "co2_emissions_potential": 3.0, "energy_rating_potential": 77, "lighting_cost_potential": {"value": 76, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 44, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 67, "environmental_impact_rating": 62}}], "hot_water_cost_potential": {"value": 72, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2307, "impact_of_loft_insulation": -4368, "impact_of_cavity_insulation": -2164, "space_heating_existing_dwelling": 16017}, "energy_consumption_current": 305, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.02r04", "energy_consumption_potential": 189, "environmental_impact_current": 55, "fixed_lighting_outlets_count": 12, "current_energy_efficiency_band": "D", "environmental_impact_potential": 72, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 54, "low_energy_fixed_lighting_outlets_count": 10} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CF481ND/cert-7791c2c9073d.json b/tests/fixtures/epc_prediction/CF481ND/cert-7791c2c9073d.json new file mode 100644 index 00000000..b0e888e8 --- /dev/null +++ b/tests/fixtures/epc_prediction/CF481ND/cert-7791c2c9073d.json @@ -0,0 +1 @@ +{"uprn": 100100583979, "roofs": [{"description": "Pitched, 150 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": "Low energy lighting in 8% of fixed outlets", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "postcode": "CF48 1ND", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 3, "created_at": "2019-09-12 21:47:12.000000", "door_count": 2, "glazed_area": 1, "glazing_gap": "16+", "region_code": 12, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17507}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.93, "schema_type": "RdSAP-Schema-18.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "End-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-8bd1c49629c4", "assessment_type": "RdSAP", "completion_date": "2019-09-12", "inspection_date": "2019-09-12", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 94, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 5, "pvc_window_frames": "true", "registration_date": "2019-09-12", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 46.8, "quantity": "square metres"}, "party_wall_length": {"value": 6, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 21.6, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.4, "quantity": "metres"}, "total_floor_area": {"value": 46.8, "quantity": "square metres"}, "party_wall_length": {"value": 6, "quantity": "metres"}, "heat_loss_perimeter": {"value": 21.6, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "D", "party_wall_construction": 0, "wall_thickness_measured": "N", "roof_insulation_location": 2, "roof_insulation_thickness": "150mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 8, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 726, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.3, "energy_rating_average": 60, "energy_rating_current": 65, "lighting_cost_current": {"value": 132, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 551, "currency": "GBP"}, "hot_water_cost_current": {"value": 90, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 140, "currency": "GBP"}, "indicative_cost": "1,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 68}, {"sequence": 2, "typical_saving": {"value": 43, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 70}, {"sequence": 3, "typical_saving": {"value": 56, "currency": "GBP"}, "indicative_cost": 55, "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 71}, {"sequence": 4, "typical_saving": {"value": 29, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 73}, {"sequence": 5, "typical_saving": {"value": 315, "currency": "GBP"}, "indicative_cost": "5,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 84, "environmental_impact_rating": 82}], "co2_emissions_potential": 2.1, "energy_rating_potential": 84, "lighting_cost_potential": {"value": 69, "currency": "GBP"}, "schema_version_original": "LIG-18.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 75, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 73, "environmental_impact_rating": 72}}], "hot_water_cost_potential": {"value": 61, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2046, "impact_of_loft_insulation": -290, "impact_of_cavity_insulation": -3253, "space_heating_existing_dwelling": 14025}, "energy_consumption_current": 262, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "3.10r02", "energy_consumption_potential": 122, "environmental_impact_current": 61, "fixed_lighting_outlets_count": 12, "current_energy_efficiency_band": "D", "environmental_impact_potential": 82, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 46, "low_energy_fixed_lighting_outlets_count": 1} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CF481ND/cert-8a1b88d2a80a.json b/tests/fixtures/epc_prediction/CF481ND/cert-8a1b88d2a80a.json new file mode 100644 index 00000000..9d90caac --- /dev/null +++ b/tests/fixtures/epc_prediction/CF481ND/cert-8a1b88d2a80a.json @@ -0,0 +1 @@ +{"uprn": 100100583979, "roofs": [{"description": "Pitched, 300 mm loft insulation", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"addendum_numbers": [15], "cavity_fill_recommended": "true"}, "lighting": {"description": "Good lighting efficiency", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "CF48 1ND", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 3, "created_at": "2026-04-13 11:55:01", "door_count": 2, "region_code": 12, "report_type": 2, "sap_heating": {"number_baths": 1, "cylinder_size": 1, "shower_outlets": [{"shower_outlet": {"shower_wwhrs": 1, "shower_outlet_type": 1}}], "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 10244}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 2, "window_width": 0.95, "window_height": 1.11, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 2, "window_width": 0.95, "window_height": 1.17, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 2, "window_width": 0.94, "window_height": 0.88, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 2, "window_width": 0.95, "window_height": 0.87, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 2, "window_width": 0.95, "window_height": 1.11, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 5, "window_type": 1, "glazing_type": 2, "window_width": 1.43, "window_height": 1.15, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 2, "window_width": 1.6, "window_height": 1.28, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 2, "window_width": 1.54, "window_height": 1.16, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 2, "window_width": 1.94, "window_height": 1.11, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "WLS", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "End-terrace house", "language_code": 1, "pressure_test": 4, "property_type": 0, "address_line_1": "addr-1c97797d61bf", "assessment_type": "RdSAP", "completion_date": "2026-04-13", "inspection_date": "2026-04-13", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 84, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 5, "registration_date": "2026-04-13", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "false", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 2, "electricity_smart_meter_present": "false"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "Y", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.23, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 42.07, "quantity": "square metres"}, "party_wall_length": {"value": 5.64, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 20.56, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.23, "quantity": "metres"}, "total_floor_area": {"value": 42.07, "quantity": "square metres"}, "party_wall_length": {"value": 5.64, "quantity": "metres"}, "heat_loss_perimeter": {"value": 20.56, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "D", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "300mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 1017, "currency": "GBP"}, "insulated_door_count": 1, "co2_emissions_current": 3.1, "energy_rating_average": 60, "energy_rating_current": 71, "lighting_cost_current": {"value": 56, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 739, "currency": "GBP"}, "hot_water_cost_current": {"value": 216, "currency": "GBP"}, "insulated_door_u_value": 1.1, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 201, "currency": "GBP"}, "indicative_cost": "\u00a3900 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 75}, {"sequence": 2, "typical_saving": {"value": 77, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a310,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 77}, {"sequence": 3, "typical_saving": {"value": 214, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 81, "environmental_impact_rating": 78}], "co2_emissions_potential": 2.2, "energy_rating_potential": 81, "lighting_cost_potential": {"value": 56, "currency": "GBP"}, "schema_version_original": "21.0.1", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 84, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 76, "environmental_impact_rating": 77}}], "hot_water_cost_potential": {"value": 216, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2604.35, "space_heating_existing_dwelling": 10449.03}, "draughtproofed_door_count": 2, "energy_consumption_current": 205, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "5.02r0342", "energy_consumption_potential": 140, "environmental_impact_current": 69, "current_energy_efficiency_band": "C", "environmental_impact_potential": 78, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 37, "low_energy_fixed_lighting_bulbs_count": 9, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CF481ND/cert-96d09ac53f57.json b/tests/fixtures/epc_prediction/CF481ND/cert-96d09ac53f57.json new file mode 100644 index 00000000..ea8a8f68 --- /dev/null +++ b/tests/fixtures/epc_prediction/CF481ND/cert-96d09ac53f57.json @@ -0,0 +1 @@ +{"uprn": 100100583982, "roofs": [{"description": "Pitched, 200 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, filled cavity", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "To unheated space, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Mostly double glazing", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "addendum": {"high_exposure": "true", "addendum_numbers": [8]}, "lighting": {"description": "Below average lighting efficiency", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "postcode": "CF48 1ND", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "psv_count": 1, "built_form": 4, "created_at": "2026-05-14 10:00:59", "door_count": 2, "region_code": 5, "report_type": 2, "sap_heating": {"number_baths": 1, "cylinder_size": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_outlet_type": 2}], "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 1, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 15709}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "true", "orientation": 3, "window_type": 1, "glazing_type": 5, "window_width": {"value": 0.35, "quantity": "m"}, "window_height": {"value": 0.85, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 1, "window_type": 1, "glazing_type": 3, "window_width": {"value": 1.37, "quantity": "m"}, "window_height": {"value": 1.19, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 1, "window_type": 1, "glazing_type": 3, "window_width": {"value": 0.47, "quantity": "m"}, "window_height": {"value": 1.16, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": {"value": 1.46, "quantity": "m"}, "window_height": {"value": 1.16, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": {"value": 1.46, "quantity": "m"}, "window_height": {"value": 1.16, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 1, "window_type": 1, "glazing_type": 3, "window_width": {"value": 1.45, "quantity": "m"}, "window_height": {"value": 0.89, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 1, "window_type": 1, "glazing_type": 3, "window_width": {"value": 0.95, "quantity": "m"}, "window_height": {"value": 0.87, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "WLS", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Mid-terrace house", "language_code": 1, "pressure_test": 4, "property_type": 0, "address_line_1": "addr-5b9c3a723c39", "assessment_type": "RdSAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "extensions_count": 1, "measurement_type": 1, "open_flues_count": 0, "total_floor_area": 90, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 6, "other_flues_count": 0, "registration_date": "2026-05-14", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "pv_connection": 2, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 50}}, "wind_turbines_count": 0, "gas_smart_meter_present": "false", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 2, "electricity_smart_meter_present": "false"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "closed_flues_count": 1, "extract_fans_count": 0, "lzc_energy_sources": [11], "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.4, "floor_insulation": 1, "total_floor_area": 40.58, "party_wall_length": 7.3, "floor_construction": 1, "heat_loss_perimeter": 12.6}, {"floor": 1, "room_height": 2.4, "total_floor_area": 42.34, "party_wall_length": 0, "heat_loss_perimeter": 11.6}], "wall_insulation_type": 2, "construction_age_band": "E", "party_wall_construction": 0, "wall_thickness_measured": "N", "roof_insulation_location": 2, "roof_insulation_thickness": "200mm", "wall_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "floor_heat_loss": 2, "roof_construction": 4, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.4, "floor_insulation": 1, "total_floor_area": 7.3, "party_wall_length": 7.3, "floor_construction": 3, "heat_loss_perimeter": 2}], "wall_insulation_type": 2, "construction_age_band": "E", "party_wall_construction": 0, "wall_thickness_measured": "N", "roof_insulation_location": 2, "roof_insulation_thickness": "200mm", "wall_insulation_thickness": "NI"}], "boilers_flues_count": 0, "open_chimneys_count": 0, "solar_water_heating": "N", "habitable_room_count": 6, "heating_cost_current": {"value": 897, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.5, "energy_rating_average": 60, "energy_rating_current": 78, "lighting_cost_current": {"value": 86, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "blocked_chimneys_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 897, "currency": "GBP"}, "hot_water_cost_current": {"value": 306, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 89, "schema_version_current": "LIG-21.0", "co2_emissions_potential": 2.5, "energy_rating_potential": 78, "lighting_cost_potential": {"value": 86, "currency": "GBP"}, "schema_version_original": "LIG-21.0", "hot_water_cost_potential": {"value": 306, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2171.71, "space_heating_existing_dwelling": 8990.87}, "draughtproofed_door_count": 2, "energy_consumption_current": 151, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 96, "calculation_software_version": "10.2.2.0", "energy_consumption_potential": 151, "environmental_impact_current": 77, "cfl_fixed_lighting_bulbs_count": 3, "current_energy_efficiency_band": "C", "environmental_impact_potential": 77, "led_fixed_lighting_bulbs_count": 6, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 28, "incandescent_fixed_lighting_bulbs_count": 2} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CF481ND/cert-ca16b6a09f55.json b/tests/fixtures/epc_prediction/CF481ND/cert-ca16b6a09f55.json new file mode 100644 index 00000000..a51ad681 --- /dev/null +++ b/tests/fixtures/epc_prediction/CF481ND/cert-ca16b6a09f55.json @@ -0,0 +1 @@ +{"uprn": 100100583978, "roofs": [{"description": "Pitched, 100 mm loft insulation", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "windows": [{"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "addendum": {"high_exposure": "true", "cavity_fill_recommended": "true"}, "lighting": {"description": "Low energy lighting in 38% of fixed outlets", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "postcode": "CF48 1ND", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2013-11-05 14:52:28.000000", "door_count": 2, "glazed_area": 1, "region_code": 12, "report_type": 2, "sap_heating": {"wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "boiler_index_number": 10328, "main_heating_number": 1, "main_heating_control": 2107, "main_heating_category": 2, "main_heating_fraction": 1, "main_heating_data_source": 1}], "has_fixed_air_conditioning": "false"}, "sap_version": 9.91, "schema_type": "SAP-Schema-16.2", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-4bab845cdd7d", "schema_version": "LIG-16.1", "assessment_type": "RdSAP", "completion_date": "2013-11-05", "inspection_date": "2013-11-05", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 82, "transaction_type": 9, "conservatory_type": 1, "heated_room_count": 5, "registration_date": "2013-11-05", "restricted_access": 0, "sap_energy_source": {"main_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"percent_roof_area": 0}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.56, "floor_insulation": 1, "total_floor_area": 41.1, "floor_construction": 1, "heat_loss_perimeter": 20.28}, {"floor": 1, "room_height": 2.56, "total_floor_area": 41.1, "heat_loss_perimeter": 20.28}], "wall_insulation_type": 4, "construction_age_band": "D", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "100mm"}], "low_energy_lighting": 38, "solar_water_heating": "N", "bedf_revision_number": 350, "habitable_room_count": 5, "heating_cost_current": {"value": 642, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.6, "energy_rating_average": 60, "energy_rating_current": 62, "lighting_cost_current": {"value": 78, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, TRVs and bypass", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 1, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 424, "currency": "GBP"}, "hot_water_cost_current": {"value": 92, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 161, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 69}, {"sequence": 2, "typical_saving": {"value": 38, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W", "improvement_details": {"improvement_number": 47}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 72}, {"sequence": 3, "typical_saving": {"value": 26, "currency": "GBP"}, "indicative_cost": "\u00a325", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 73}, {"sequence": 4, "typical_saving": {"value": 22, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 14}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 74}, {"sequence": 5, "typical_saving": {"value": 27, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 76}, {"sequence": 6, "typical_saving": {"value": 250, "currency": "GBP"}, "indicative_cost": "\u00a39,000 - \u00a314,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 85, "environmental_impact_rating": 85}], "co2_emissions_potential": 1.2, "energy_rating_potential": 85, "lighting_cost_potential": {"value": 48, "currency": "GBP"}, "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 32, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 71, "environmental_impact_rating": 71}}], "hot_water_cost_potential": {"value": 65, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2155, "impact_of_loft_insulation": -361, "impact_of_cavity_insulation": -3811, "space_heating_existing_dwelling": 11481}, "seller_commission_report": "Y", "energy_consumption_current": 228, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "1.12r02", "energy_consumption_potential": 71, "environmental_impact_current": 59, "fixed_lighting_outlets_count": 8, "current_energy_efficiency_band": "D", "environmental_impact_potential": 85, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 44, "low_energy_fixed_lighting_outlets_count": 3} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CF481ND/cert-e54dae311758.json b/tests/fixtures/epc_prediction/CF481ND/cert-e54dae311758.json new file mode 100644 index 00000000..3ddff269 --- /dev/null +++ b/tests/fixtures/epc_prediction/CF481ND/cert-e54dae311758.json @@ -0,0 +1 @@ +{"uprn": 100100583984, "roofs": [{"description": {"value": "Pitched, 200 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": {"value": "Cavity wall, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": {"value": "Low energy lighting in all fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "CF48 1ND", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 3, "created_at": "2022-02-08 15:37:48.597913", "door_count": 2, "glazed_area": 1, "glazing_gap": 12, "region_code": 12, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 0, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17998}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "end-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-bfdede980312", "assessment_type": "RdSAP", "completion_date": "2022-02-08", "inspection_date": "2022-02-08", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 83, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2022-02-08", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "Y", "wall_thickness": 250, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.43, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 41.4, "quantity": "square metres"}, "party_wall_length": {"value": 5.61, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 20.37, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.43, "quantity": "metres"}, "total_floor_area": {"value": 41.4, "quantity": "square metres"}, "party_wall_length": {"value": 5.61, "quantity": "metres"}, "heat_loss_perimeter": {"value": 20.37, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "D", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "200mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 610, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.6, "energy_rating_average": 60, "energy_rating_current": 68, "lighting_cost_current": {"value": 70, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 494, "currency": "GBP"}, "hot_water_cost_current": {"value": 84, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 79, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 69}, {"sequence": 2, "typical_saving": {"value": 37, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 71}, {"sequence": 3, "typical_saving": {"value": 25, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 73}, {"sequence": 4, "typical_saving": {"value": 349, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 85, "environmental_impact_rating": 82}], "co2_emissions_potential": 1.8, "energy_rating_potential": 85, "lighting_cost_potential": {"value": 70, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 66, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 74, "environmental_impact_rating": 73}}], "hot_water_cost_potential": {"value": 59, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2065, "impact_of_cavity_insulation": -1960, "space_heating_existing_dwelling": 12040}, "energy_consumption_current": 249, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.1.1.0", "energy_consumption_potential": 124, "environmental_impact_current": 64, "fixed_lighting_outlets_count": 6, "windows_transmission_details": {"u_value": 2.8, "data_source": 2, "solar_transmittance": 0.76}, "current_energy_efficiency_band": "D", "environmental_impact_potential": 82, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 44, "low_energy_fixed_lighting_outlets_count": 6} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CF481ND/cert-f5de74d7fffc.json b/tests/fixtures/epc_prediction/CF481ND/cert-f5de74d7fffc.json new file mode 100644 index 00000000..9adc30d1 --- /dev/null +++ b/tests/fixtures/epc_prediction/CF481ND/cert-f5de74d7fffc.json @@ -0,0 +1 @@ +{"uprn": 100100583982, "roofs": [{"description": "Pitched, 300+ mm loft insulation", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": "Cavity wall, filled cavity", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "windows": [{"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "lighting": {"description": "Low energy lighting in 56% of fixed outlets", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "CF48 1ND", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2014-03-22 01:03:02.000000", "door_count": 2, "glazed_area": 1, "region_code": 12, "report_type": 2, "sap_heating": {"wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "secondary_fuel_type": 29, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "boiler_index_number": 15709, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "main_heating_data_source": 1}], "secondary_heating_type": 691, "has_fixed_air_conditioning": "false"}, "sap_version": 9.91, "schema_type": "SAP-Schema-16.3", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Mid-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-36ccdeec409f", "schema_version": "LIG-16.0", "assessment_type": "RdSAP", "completion_date": "2014-03-22", "inspection_date": "2014-03-17", "extensions_count": 0, "measurement_type": 2, "total_floor_area": 71, "transaction_type": 11, "conservatory_type": 1, "heated_room_count": 5, "registration_date": "2014-03-22", "restricted_access": 1, "sap_energy_source": {"main_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"percent_roof_area": 0}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, electric", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 320, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.46, "floor_insulation": 1, "total_floor_area": 40.07, "floor_construction": 1, "heat_loss_perimeter": 20.38}, {"floor": 1, "room_height": 2.45, "total_floor_area": 45.14, "heat_loss_perimeter": 13.72}], "wall_insulation_type": 2, "construction_age_band": "D", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "300mm+"}], "low_energy_lighting": 56, "solar_water_heating": "N", "bedf_revision_number": 352, "habitable_room_count": 5, "heating_cost_current": {"value": 470, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": {"value": 2.4, "quantity": "tonnes per year"}, "energy_rating_average": 60, "energy_rating_current": 69, "lighting_cost_current": {"value": 64, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 1, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 422, "currency": "GBP"}, "hot_water_cost_current": {"value": 91, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 51, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W", "improvement_details": {"improvement_number": 47}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 74}, {"sequence": 2, "typical_saving": {"value": 16, "currency": "GBP"}, "indicative_cost": "\u00a320", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 74}, {"sequence": 3, "typical_saving": {"value": 28, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 76}, {"sequence": 4, "typical_saving": {"value": 258, "currency": "GBP"}, "indicative_cost": "\u00a39,000 - \u00a314,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 85, "environmental_impact_rating": 87}], "co2_emissions_potential": {"value": 0.9, "quantity": "tonnes per year"}, "energy_rating_potential": 85, "lighting_cost_potential": {"value": 44, "currency": "GBP"}, "hot_water_cost_potential": {"value": 64, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2021, "space_heating_existing_dwelling": 6285}, "seller_commission_report": "Y", "energy_consumption_current": 175, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": 4.3, "energy_consumption_potential": 67, "environmental_impact_current": 71, "fixed_lighting_outlets_count": 9, "current_energy_efficiency_band": "C", "environmental_impact_potential": 87, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": {"value": 33, "quantity": "kg/m2 per year"}, "low_energy_fixed_lighting_outlets_count": 5} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CV15QJ/cert-1b4b3d26f79c.json b/tests/fixtures/epc_prediction/CV15QJ/cert-1b4b3d26f79c.json new file mode 100644 index 00000000..3be30e43 --- /dev/null +++ b/tests/fixtures/epc_prediction/CV15QJ/cert-1b4b3d26f79c.json @@ -0,0 +1 @@ +{"uprn": 10023041043, "roofs": [{"description": "Pitched, no insulation", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": "Roof room(s), no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": "(other premises below)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "windows": [{"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "lighting": {"description": "Low energy lighting in 75% of fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "CV1 5QJ", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2013-02-25 19:32:18.000000", "door_count": 1, "glazed_area": 1, "region_code": 6, "report_type": 2, "sap_heating": {"wwhrs": {"rooms_with_bath_and_or_shower": 2, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 1}, "cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "boiler_index_number": 10126, "main_heating_number": 1, "main_heating_control": 2104, "main_heating_category": 2, "main_heating_fraction": 1, "main_heating_data_source": 1}], "has_fixed_air_conditioning": "false"}, "sap_version": 9.91, "schema_type": "SAP-Schema-16.2", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Top-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-aabfa9ca8950", "schema_version": "LIG-16.1", "assessment_type": "RdSAP", "completion_date": "2013-02-25", "inspection_date": "2013-02-25", "windows_u_value": 3.1, "extensions_count": 0, "measurement_type": 1, "sap_flat_details": {"level": 3, "top_storey": "Y", "flat_location": 1, "heat_loss_corridor": 0}, "total_floor_area": 94, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 4, "registration_date": "2013-02-25", "restricted_access": 0, "sap_energy_source": {"main_gas": "Y", "meter_type": 3, "photovoltaic_supply": {"percent_roof_area": 0}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "Y", "wall_thickness": 300, "floor_heat_loss": 3, "sap_room_in_roof": {"floor_area": 20.81, "insulation": 0, "roof_room_connected": "N", "construction_age_band": "A"}, "roof_construction": 5, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.76, "floor_insulation": 0, "total_floor_area": 36.61, "floor_construction": 0, "heat_loss_perimeter": 10.46}, {"floor": 1, "room_height": 2.48, "total_floor_area": 36.61, "heat_loss_perimeter": 17.46}], "wall_insulation_type": 4, "construction_age_band": "A", "wall_thickness_measured": "Y", "roof_insulation_location": 5, "roof_insulation_thickness": "NI"}], "low_energy_lighting": 75, "solar_transmittance": 0.76, "solar_water_heating": "N", "windows_data_source": 2, "bedf_revision_number": 326, "habitable_room_count": 4, "heating_cost_current": {"value": 844, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.9, "energy_rating_average": 60, "energy_rating_current": 57, "lighting_cost_current": {"value": 69, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and room thermostat", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 701, "currency": "GBP"}, "hot_water_cost_current": {"value": 92, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 114.46967742651, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 62, "environmental_impact_rating": 58}, {"sequence": 2, "typical_saving": {"value": 11.8685139099777, "currency": "GBP"}, "indicative_cost": "\u00a315", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 62, "environmental_impact_rating": 59}, {"sequence": 3, "typical_saving": {"value": 31.0103752287298, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 13}, "improvement_category": 5, "energy_performance_rating": 64, "environmental_impact_rating": 60}], "co2_emissions_potential": 4.0, "energy_rating_potential": 64, "lighting_cost_potential": {"value": 55, "currency": "GBP"}, "hot_water_cost_potential": {"value": 92, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2213, "impact_of_loft_insulation": -1222, "impact_of_solid_wall_insulation": -3026, "space_heating_existing_dwelling": 17592}, "seller_commission_report": "Y", "energy_consumption_current": 269, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "1.4.0.0", "energy_consumption_potential": 221, "environmental_impact_current": 52, "fixed_lighting_outlets_count": 12, "current_energy_efficiency_band": "D", "environmental_impact_potential": 60, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "D", "co2_emissions_current_per_floor_area": 52, "low_energy_fixed_lighting_outlets_count": 9} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CV15QJ/cert-346dc8ab15a0.json b/tests/fixtures/epc_prediction/CV15QJ/cert-346dc8ab15a0.json new file mode 100644 index 00000000..b2f3796f --- /dev/null +++ b/tests/fixtures/epc_prediction/CV15QJ/cert-346dc8ab15a0.json @@ -0,0 +1 @@ +{"uprn": 10091715280, "roofs": [{"description": "Pitched, 300+ mm loft insulation", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": "Solid brick, with internal insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Suspended, insulated", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Solid, insulated (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "windows": [{"description": "Fully double glazed", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "CV1 5QJ", "hot_water": {"description": "From main system, plus solar", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 3, "created_at": "2013-09-19 08:03:46.000000", "door_count": 2, "glazed_area": 1, "region_code": 6, "report_type": 2, "sap_heating": {"wwhrs": {"rooms_with_bath_and_or_shower": 12, "rooms_with_mixer_shower_no_bath": 12, "rooms_with_bath_and_mixer_shower": 0}, "cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 2, "main_heating_number": 1, "main_heating_control": 2110, "main_heating_category": 2, "main_heating_fraction": 0.5, "sap_main_heating_code": 104, "main_heating_data_source": 2}, {"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "main_heating_number": 2, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 0.5, "sap_main_heating_code": 104, "main_heating_data_source": 2}], "has_fixed_air_conditioning": "false"}, "sap_version": 9.91, "schema_type": "SAP-Schema-16.2", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and underfloor heating, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "End-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-47376e649033", "schema_version": "LIG-16.1", "assessment_type": "RdSAP", "completion_date": "2013-09-19", "inspection_date": "2013-09-17", "extensions_count": 1, "measurement_type": 2, "total_floor_area": 340, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 15, "registration_date": "2013-09-19", "restricted_access": 0, "sap_energy_source": {"main_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"percent_roof_area": 0}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 1}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lzc_energy_sources": [10], "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 330, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.44, "floor_insulation": 2, "total_floor_area": 102.37, "floor_construction": 2, "heat_loss_perimeter": 19.5}, {"floor": 1, "room_height": 2.48, "total_floor_area": 102.37, "heat_loss_perimeter": 19.5}, {"floor": 2, "room_height": 2.47, "total_floor_area": 102.37, "heat_loss_perimeter": 19.5}], "wall_insulation_type": 3, "construction_age_band": "B", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "300mm+", "wall_insulation_thickness": "100mm", "floor_insulation_thickness": "100mm"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 330, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.47, "floor_insulation": 1, "total_floor_area": 24.33, "floor_construction": 1, "heat_loss_perimeter": 17.5}, {"floor": 1, "room_height": 2.47, "total_floor_area": 24.33, "heat_loss_perimeter": 17.5}, {"floor": 2, "room_height": 2.47, "total_floor_area": 24.33, "heat_loss_perimeter": 17.5}], "wall_insulation_type": 4, "construction_age_band": "K", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "300mm+"}], "low_energy_lighting": 100, "solar_water_heating": "Y", "bedf_revision_number": 344, "habitable_room_count": 15, "heating_cost_current": {"value": 1157, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 6.4, "energy_rating_average": 60, "energy_rating_current": 80, "lighting_cost_current": {"value": 112, "currency": "GBP"}, "main_heating_controls": [{"description": "Time and temperature zone control", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, {"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 1157, "currency": "GBP"}, "hot_water_cost_current": {"value": 79, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 233, "currency": "GBP"}, "indicative_cost": "\u00a39,000 - \u00a314,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 83, "environmental_impact_rating": 80}], "co2_emissions_potential": 5.5, "energy_rating_potential": 83, "lighting_cost_potential": {"value": 112, "currency": "GBP"}, "hot_water_cost_potential": {"value": 79, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2423, "space_heating_existing_dwelling": 23272}, "seller_commission_report": "Y", "energy_consumption_current": 98, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "1.11r01", "energy_consumption_potential": 84, "environmental_impact_current": 77, "fixed_lighting_outlets_count": 19, "current_energy_efficiency_band": "C", "environmental_impact_potential": 80, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 19, "low_energy_fixed_lighting_outlets_count": 19} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CV15QJ/cert-526df35482d7.json b/tests/fixtures/epc_prediction/CV15QJ/cert-526df35482d7.json new file mode 100644 index 00000000..2d341ea4 --- /dev/null +++ b/tests/fixtures/epc_prediction/CV15QJ/cert-526df35482d7.json @@ -0,0 +1 @@ +{"uprn": 100071318864, "roofs": [{"description": {"value": "Pitched, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": {"value": "Pitched, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": {"value": "Solid brick, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": {"value": "Cavity wall, as built, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": {"value": "Solid, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Low energy lighting in all fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "CV1 5QJ", "hot_water": {"description": {"value": "From main system, plus solar", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 3, "created_at": "2024-06-05 11:10:08", "door_count": 1, "glazed_area": 1, "region_code": 6, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 12, "rooms_with_mixer_shower_no_bath": 12, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 2, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2506, "main_heating_category": 2, "main_heating_fraction": 1, "mcs_installed_heat_pump": "false", "main_heating_data_source": 1, "main_heating_index_number": 16432}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Address Matched", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and underfloor heating, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "End-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-47376e649033", "assessment_type": "RdSAP", "completion_date": "2024-06-05", "inspection_date": "2024-05-16", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 358, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 15, "registration_date": "2024-06-05", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lzc_energy_sources": [10], "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "Y", "wall_thickness": 330, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.42, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 92.22, "quantity": "square metres"}, "party_wall_length": {"value": 9.44, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 19.54, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.39, "quantity": "metres"}, "total_floor_area": {"value": 92.22, "quantity": "square metres"}, "party_wall_length": {"value": 9.44, "quantity": "metres"}, "heat_loss_perimeter": {"value": 19.54, "quantity": "metres"}}, {"floor": 2, "room_height": {"value": 2.6, "quantity": "metres"}, "total_floor_area": {"value": 92.22, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "heat_loss_perimeter": {"value": 28.98, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 340, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 27.12, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 1, "heat_loss_perimeter": {"value": 16.74, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.4, "quantity": "metres"}, "total_floor_area": {"value": 27.12, "quantity": "square metres"}, "party_wall_length": 0, "heat_loss_perimeter": {"value": 16.74, "quantity": "metres"}}, {"floor": 2, "room_height": 2.55, "total_floor_area": 27.12, "party_wall_length": 0, "heat_loss_perimeter": 16.74}], "wall_insulation_type": 4, "construction_age_band": "L", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "Y", "habitable_room_count": 15, "heating_cost_current": {"value": 4137, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 9.6, "energy_rating_average": 60, "energy_rating_current": 74, "lighting_cost_current": {"value": 312, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 3559, "currency": "GBP"}, "hot_water_cost_current": {"value": 310, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 578, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 70}, {"sequence": 2, "typical_saving": {"value": 651, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 80, "environmental_impact_rating": 73}], "co2_emissions_potential": 7.4, "energy_rating_potential": 80, "lighting_cost_potential": {"value": 312, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "hot_water_cost_potential": {"value": 310, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3388, "impact_of_loft_insulation": -7391, "impact_of_solid_wall_insulation": -6108, "space_heating_existing_dwelling": 36564}, "energy_consumption_current": 152, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "v94.0.2.1", "energy_consumption_potential": 117, "environmental_impact_current": 66, "fixed_lighting_outlets_count": 34, "current_energy_efficiency_band": "C", "environmental_impact_potential": 73, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 27, "low_energy_fixed_lighting_outlets_count": 34} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CV15QJ/cert-73d50930d0ac.json b/tests/fixtures/epc_prediction/CV15QJ/cert-73d50930d0ac.json new file mode 100644 index 00000000..3b5bd513 --- /dev/null +++ b/tests/fixtures/epc_prediction/CV15QJ/cert-73d50930d0ac.json @@ -0,0 +1 @@ +{"uprn": 10091715280, "roofs": [{"description": "(another dwelling above)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "(another dwelling below)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "lighting": {"description": "Good lighting efficiency", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "CV1 5QJ", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "psv_count": 2, "built_form": "NR", "created_at": "2026-05-14 10:00:09", "door_count": 2, "region_code": 6, "report_type": 2, "sap_heating": {"number_baths": 0, "cylinder_size": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_outlet_type": 1}, {"shower_wwhrs": 1, "shower_outlet_type": 1}, {"shower_wwhrs": 1, "shower_outlet_type": 1}, {"shower_wwhrs": 1, "shower_outlet_type": 1}], "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 15871}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 1, "window_height": 2, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 1, "window_height": 1, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 3, "window_type": 1, "glazing_type": 3, "window_width": 1.25, "window_height": 1, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 3, "window_type": 1, "glazing_type": 3, "window_width": 1.25, "window_height": 1, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 1, "window_height": 1, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 7, "window_type": 1, "glazing_type": 3, "window_width": 1.25, "window_height": 1, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Mid-floor flat", "language_code": 1, "pressure_test": 4, "property_type": 2, "address_line_1": "addr-d1de8bce7cb5", "address_line_2": "", "address_line_3": "", "assessment_type": "RdSAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-12", "extensions_count": 1, "measurement_type": 1, "sap_flat_details": {"level": 2, "top_storey": "N", "storey_count": 3, "flat_location": 2, "heat_loss_corridor": 1}, "total_floor_area": 94, "transaction_type": 8, "conservatory_type": 1, "has_draught_lobby": "true", "heated_room_count": 5, "registration_date": "2026-05-14", "sap_energy_source": {"mains_gas": "Y", "meter_type": 1, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "false", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 2, "electricity_smart_meter_present": "false"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "extract_fans_count": 3, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "Y", "wall_thickness": 300, "floor_heat_loss": 6, "roof_construction": 3, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.35, "quantity": "metres"}, "total_floor_area": {"value": 81, "quantity": "square metres"}, "party_wall_length": {"value": 9, "quantity": "metres"}, "heat_loss_perimeter": {"value": 18, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": "ND", "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 6, "roof_construction": 3, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.3, "quantity": "metres"}, "total_floor_area": {"value": 12.5, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "heat_loss_perimeter": {"value": 10, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "K", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": "ND", "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}], "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 470, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 1.9, "energy_rating_average": 60, "energy_rating_current": 79, "lighting_cost_current": {"value": 79, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 350, "currency": "GBP"}, "hot_water_cost_current": {"value": 339, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 118, "currency": "GBP"}, "indicative_cost": "\u00a37,500 - \u00a311,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 81, "environmental_impact_rating": 84}], "co2_emissions_potential": 1.6, "energy_rating_potential": 81, "lighting_cost_potential": {"value": 79, "currency": "GBP"}, "schema_version_original": "21.0.1", "hot_water_cost_potential": {"value": 341, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3873.12, "space_heating_existing_dwelling": 3755.81}, "draughtproofed_door_count": 2, "energy_consumption_current": 114, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "5.02r0344", "energy_consumption_potential": 95, "environmental_impact_current": 81, "current_energy_efficiency_band": "C", "environmental_impact_potential": 84, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 21, "low_energy_fixed_lighting_bulbs_count": 12, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CV15QJ/cert-8105f351163f.json b/tests/fixtures/epc_prediction/CV15QJ/cert-8105f351163f.json new file mode 100644 index 00000000..318a9235 --- /dev/null +++ b/tests/fixtures/epc_prediction/CV15QJ/cert-8105f351163f.json @@ -0,0 +1 @@ +{"uprn": 10093945833, "roofs": [{"description": {"value": "Pitched, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": {"value": "Roof room(s), no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": {"value": "Cavity wall, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": {"value": "(other premises below)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": {"value": "Low energy lighting in all fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "CV1 5QJ", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2021-04-18 12:35:07.312492", "door_count": 1, "glazed_area": 1, "glazing_gap": "16+", "region_code": 6, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2102, "main_heating_category": 2, "main_heating_fraction": 1, "mcs_installed_heat_pump": "false", "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17815}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Top-floor flat", "language": "1"}, "language_code": 1, "property_type": 2, "address_line_1": "addr-2c1f9f08074c", "address_line_2": "", "address_line_3": "", "assessment_type": "RdSAP", "completion_date": "2021-04-18", "inspection_date": "2021-04-15", "extensions_count": 0, "measurement_type": 1, "sap_flat_details": {"level": 3, "top_storey": "Y", "flat_location": 1, "heat_loss_corridor": 0}, "total_floor_area": 94, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 5, "pvc_window_frames": "true", "registration_date": "2021-04-18", "sap_energy_source": {"mains_gas": "Y", "meter_type": 1, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 290, "floor_heat_loss": 3, "sap_room_in_roof": {"floor_area": 33.52, "insulation": "AB", "roof_room_connected": "N", "construction_age_band": "C"}, "roof_construction": 5, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 3.12, "quantity": "metres"}, "total_floor_area": {"value": 60.45, "quantity": "square metres"}, "party_wall_length": {"value": 15.58, "quantity": "metres"}, "heat_loss_perimeter": {"value": 15.52, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 1117, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 6.3, "energy_rating_average": 60, "energy_rating_current": 50, "lighting_cost_current": {"value": 86, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, no room thermostat", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 597, "currency": "GBP"}, "hot_water_cost_current": {"value": 101, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 351, "currency": "GBP"}, "indicative_cost": "\u00a31,500 - \u00a32,700", "improvement_type": "A3", "improvement_details": {"improvement_number": 46}, "improvement_category": 5, "energy_performance_rating": 63, "environmental_impact_rating": 57}, {"sequence": 2, "typical_saving": {"value": 60, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 60}, {"sequence": 3, "typical_saving": {"value": 109, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 12}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 66}], "co2_emissions_potential": 3.4, "energy_rating_potential": 69, "lighting_cost_potential": {"value": 86, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 31, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 67, "environmental_impact_rating": 62}}], "hot_water_cost_potential": {"value": 102, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2208, "impact_of_loft_insulation": -2210, "impact_of_cavity_insulation": -1077, "space_heating_existing_dwelling": 21166}, "energy_consumption_current": 377, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "v94.0.1.1", "energy_consumption_potential": 207, "environmental_impact_current": 42, "fixed_lighting_outlets_count": 9, "current_energy_efficiency_band": "E", "environmental_impact_potential": 66, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 67, "low_energy_fixed_lighting_outlets_count": 9} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CV15QJ/cert-840682d5f191.json b/tests/fixtures/epc_prediction/CV15QJ/cert-840682d5f191.json new file mode 100644 index 00000000..90bf923f --- /dev/null +++ b/tests/fixtures/epc_prediction/CV15QJ/cert-840682d5f191.json @@ -0,0 +1 @@ +{"uprn": 10091715281, "roofs": [{"description": "Pitched, 300 mm loft insulation", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "(another dwelling below)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "lighting": {"description": "Good lighting efficiency", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "CV1 5QJ", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "psv_count": 2, "built_form": "NR", "created_at": "2026-05-14 10:01:40", "door_count": 2, "region_code": 6, "report_type": 2, "sap_heating": {"number_baths": 0, "cylinder_size": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_outlet_type": 1}, {"shower_wwhrs": 1, "shower_outlet_type": 1}, {"shower_wwhrs": 1, "shower_outlet_type": 1}, {"shower_wwhrs": 1, "shower_outlet_type": 1}], "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 15871}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 1, "window_height": 2, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 1, "window_height": 1, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 3, "window_type": 1, "glazing_type": 3, "window_width": 1.25, "window_height": 1, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 3, "window_type": 1, "glazing_type": 3, "window_width": 1.25, "window_height": 1, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 1, "window_height": 1, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 7, "window_type": 1, "glazing_type": 3, "window_width": 1.25, "window_height": 1, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Top-floor flat", "language_code": 1, "pressure_test": 4, "property_type": 2, "address_line_1": "addr-f373092c4df8", "address_line_2": "", "address_line_3": "", "assessment_type": "RdSAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-12", "extensions_count": 1, "measurement_type": 1, "sap_flat_details": {"level": 3, "top_storey": "Y", "storey_count": 3, "flat_location": 3, "heat_loss_corridor": 1}, "total_floor_area": 94, "transaction_type": 8, "conservatory_type": 1, "has_draught_lobby": "true", "heated_room_count": 5, "registration_date": "2026-05-14", "sap_energy_source": {"mains_gas": "Y", "meter_type": 1, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "false", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 2, "electricity_smart_meter_present": "false"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "extract_fans_count": 3, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "Y", "wall_thickness": 300, "floor_heat_loss": 6, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.35, "quantity": "metres"}, "total_floor_area": {"value": 81, "quantity": "square metres"}, "party_wall_length": {"value": 9, "quantity": "metres"}, "heat_loss_perimeter": {"value": 18, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "300mm", "wall_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 6, "roof_construction": 4, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.3, "quantity": "metres"}, "total_floor_area": {"value": 12.5, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "heat_loss_perimeter": {"value": 10, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "K", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "300mm", "wall_insulation_thickness": "NI"}], "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 585, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.2, "energy_rating_average": 60, "energy_rating_current": 76, "lighting_cost_current": {"value": 79, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 468, "currency": "GBP"}, "hot_water_cost_current": {"value": 337, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 115, "currency": "GBP"}, "indicative_cost": "\u00a37,500 - \u00a311,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 79, "environmental_impact_rating": 81}], "co2_emissions_potential": 1.9, "energy_rating_potential": 79, "lighting_cost_potential": {"value": 79, "currency": "GBP"}, "schema_version_original": "21.0.1", "hot_water_cost_potential": {"value": 339, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3873.12, "space_heating_existing_dwelling": 5145.26}, "draughtproofed_door_count": 2, "energy_consumption_current": 133, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "5.02r0344", "energy_consumption_potential": 114, "environmental_impact_current": 77, "current_energy_efficiency_band": "C", "environmental_impact_potential": 81, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 24, "low_energy_fixed_lighting_bulbs_count": 12, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CV15QJ/cert-f9dee3ea91ac.json b/tests/fixtures/epc_prediction/CV15QJ/cert-f9dee3ea91ac.json new file mode 100644 index 00000000..5e45efe5 --- /dev/null +++ b/tests/fixtures/epc_prediction/CV15QJ/cert-f9dee3ea91ac.json @@ -0,0 +1 @@ +{"uprn": 10091715279, "roofs": [{"description": "(another dwelling above)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Solid, insulated (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "lighting": {"description": "Good lighting efficiency", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "CV1 5QJ", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "psv_count": 2, "built_form": "NR", "created_at": "2026-05-14 09:57:46", "door_count": 2, "region_code": 6, "report_type": 2, "sap_heating": {"number_baths": 0, "cylinder_size": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_outlet_type": 1}, {"shower_wwhrs": 1, "shower_outlet_type": 1}, {"shower_wwhrs": 1, "shower_outlet_type": 1}, {"shower_wwhrs": 1, "shower_outlet_type": 1}], "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 15871}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 1, "window_height": 2, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 1, "window_height": 1, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 3, "window_type": 1, "glazing_type": 3, "window_width": 1.25, "window_height": 1, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 3, "window_type": 1, "glazing_type": 3, "window_width": 1.25, "window_height": 1, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 7, "window_type": 1, "glazing_type": 3, "window_width": 1, "window_height": 2, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 7, "window_type": 1, "glazing_type": 3, "window_width": 1.25, "window_height": 1, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Ground-floor flat", "language_code": 1, "pressure_test": 4, "property_type": 2, "address_line_1": "addr-d7a935fce462", "address_line_2": "", "address_line_3": "", "assessment_type": "RdSAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-12", "extensions_count": 1, "measurement_type": 1, "sap_flat_details": {"level": 1, "top_storey": "N", "storey_count": 3, "flat_location": 1, "heat_loss_corridor": 1}, "total_floor_area": 94, "transaction_type": 8, "conservatory_type": 1, "has_draught_lobby": "true", "heated_room_count": 5, "registration_date": "2026-05-14", "sap_energy_source": {"mains_gas": "Y", "meter_type": 1, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "false", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 2, "electricity_smart_meter_present": "false"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "extract_fans_count": 3, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "Y", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 3, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.35, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 81, "quantity": "square metres"}, "party_wall_length": {"value": 9, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 18, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": "ND", "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 3, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.3, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 12.5, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 10, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "K", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": "ND", "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 682, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.5, "energy_rating_average": 60, "energy_rating_current": 75, "lighting_cost_current": {"value": 77, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 520, "currency": "GBP"}, "hot_water_cost_current": {"value": 336, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 110, "currency": "GBP"}, "indicative_cost": "\u00a37,500 - \u00a311,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 78}, {"sequence": 2, "typical_saving": {"value": 50, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a310,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 78, "environmental_impact_rating": 79}], "co2_emissions_potential": 2.1, "energy_rating_potential": 78, "lighting_cost_potential": {"value": 77, "currency": "GBP"}, "schema_version_original": "21.0.1", "hot_water_cost_potential": {"value": 338, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3873.12, "space_heating_existing_dwelling": 6315.87}, "draughtproofed_door_count": 2, "energy_consumption_current": 148, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "5.02r0344", "energy_consumption_potential": 122, "environmental_impact_current": 75, "current_energy_efficiency_band": "C", "environmental_impact_potential": 79, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 27, "low_energy_fixed_lighting_bulbs_count": 12, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CV15QJ/cert-fc5fe3d2a055.json b/tests/fixtures/epc_prediction/CV15QJ/cert-fc5fe3d2a055.json new file mode 100644 index 00000000..4952df0a --- /dev/null +++ b/tests/fixtures/epc_prediction/CV15QJ/cert-fc5fe3d2a055.json @@ -0,0 +1 @@ +{"uprn": 10023041043, "roofs": [{"description": {"value": "Pitched, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": {"value": "Roof room(s), no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": {"value": "Solid brick, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": {"value": "(other premises below)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"system_build": "true"}, "lighting": {"description": {"value": "Low energy lighting in all fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "CV1 5QJ", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2023-08-29 22:03:05", "door_count": 1, "glazed_area": 2, "glazing_gap": "16+", "region_code": 6, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 2, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2101, "main_heating_category": 2, "main_heating_fraction": 1, "mcs_installed_heat_pump": "false", "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 16946}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Top-floor flat", "language": "1"}, "language_code": 1, "property_type": 2, "address_line_1": "addr-13df2ac3f160", "assessment_type": "RdSAP", "completion_date": "2023-08-29", "inspection_date": "2023-08-27", "extensions_count": 0, "measurement_type": 1, "sap_flat_details": {"level": 3, "top_storey": "Y", "flat_location": 1, "heat_loss_corridor": 0}, "total_floor_area": 93, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2023-08-29", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 250, "floor_heat_loss": 3, "sap_room_in_roof": {"floor_area": 19.02, "insulation": "AB", "roof_room_connected": "N", "construction_age_band": "B"}, "roof_construction": 5, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.74, "quantity": "metres"}, "total_floor_area": {"value": 36.78, "quantity": "square metres"}, "party_wall_length": {"value": 14.04, "quantity": "metres"}, "heat_loss_perimeter": {"value": 10.48, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.45, "quantity": "metres"}, "total_floor_area": {"value": 36.78, "quantity": "square metres"}, "party_wall_length": {"value": 8.42, "quantity": "metres"}, "heat_loss_perimeter": {"value": 16.01, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 2434, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 5.6, "energy_rating_average": 60, "energy_rating_current": 55, "lighting_cost_current": {"value": 145, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "No time or thermostatic control of room temperature", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 1111, "currency": "GBP"}, "hot_water_cost_current": {"value": 226, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 648, "currency": "GBP"}, "indicative_cost": "\u00a31,500 - \u00a32,700", "improvement_type": "A3", "improvement_details": {"improvement_number": 46}, "improvement_category": 5, "energy_performance_rating": 64, "environmental_impact_rating": 58}, {"sequence": 2, "typical_saving": {"value": 459, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 68}, {"sequence": 3, "typical_saving": {"value": 216, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 11}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 72}], "co2_emissions_potential": 2.8, "energy_rating_potential": 74, "lighting_cost_potential": {"value": 145, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "hot_water_cost_potential": {"value": 226, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1962, "impact_of_loft_insulation": -1563, "impact_of_solid_wall_insulation": -3357, "space_heating_existing_dwelling": 18779}, "energy_consumption_current": 340, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "v94.0.1.1", "energy_consumption_potential": 170, "environmental_impact_current": 46, "fixed_lighting_outlets_count": 10, "current_energy_efficiency_band": "D", "environmental_impact_potential": 72, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 60, "low_energy_fixed_lighting_outlets_count": 10} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CV78UG/cert-0246fdfa9718.json b/tests/fixtures/epc_prediction/CV78UG/cert-0246fdfa9718.json new file mode 100644 index 00000000..caf957e2 --- /dev/null +++ b/tests/fixtures/epc_prediction/CV78UG/cert-0246fdfa9718.json @@ -0,0 +1 @@ +{"der": 11.37, "ter": 11.93, "dfee": 42.7, "dper": 59.84, "tfee": 43.1, "tper": 62.41, "uprn": 10097098999, "roofs": [{"description": {"value": "Average thermal transmittance 0.09 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.24 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.11 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": 1, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Excellent lighting efficiency", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "CV7 8UG", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 1, "created_at": "2026-05-22 13:06:38", "living_area": 12.6, "orientation": 7, "region_code": 6, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_flow_rate": 8, "shower_outlet_type": 3}, {"shower_wwhrs": 1, "shower_flow_rate": 8, "shower_outlet_type": 3}], "water_fuel_type": 1, "water_heating_code": 901, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 1, "heat_emitter_type": 1, "is_flue_fan_present": "true", "main_heating_number": 1, "control_index_number": 200122, "is_condensing_boiler": "true", "main_heating_control": 2110, "is_interlocked_system": "true", "main_heating_category": 2, "main_heating_fraction": 1, "gas_or_oil_boiler_type": 2, "main_heating_flue_type": 2, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 17929, "has_separate_delayed_start": "false", "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "condensing_boiler_heat_distribution": 55, "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "false", "has_cylinder_thermostat": "true", "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "true", "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 4}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 11, "lighting_efficacy": 90}, {"lighting_power": 8, "lighting_outlets": 11, "lighting_efficacy": 100}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.6 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Detached house", "language_code": 1, "property_type": 0, "pv_connection": 2, "address_line_1": "addr-a23e38688c10", "address_line_2": "", "assessment_date": "2026-05-22", "assessment_type": "SAP", "completion_date": "2026-05-22", "inspection_date": "2026-05-22", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "wet_rooms_count": 4, "air_permeability": 4.56, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 1, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 3, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500755, "is_mechanical_vent_approved_installer_scheme": "true"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 97, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-22", "sap_energy_source": {"pv_arrays": [{"pitch": 2, "peak_power": 2.68, "orientation": 3, "overshading": 1}], "electricity_tariff": 1}, "sap_opening_types": [{"name": "front door", "type": 1, "u_value": 1.4, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "utility rear door", "type": 2, "u_value": 1.1, "data_source": 2, "glazing_type": 7, "isargonfilled": "false"}, {"name": "garage door", "type": 1, "u_value": 0.82, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "glazing", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.46}, {"name": "french door", "type": 4, "u_value": 1.3, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.71}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 50.9, "lzc_energy_sources": [11], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 50.9}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.24, "wall_type": 2, "kappa_value": 60, "total_wall_area": 145.59, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 148.1, "is_curtain_walling": "false"}, {"name": "Internal Wall (2)", "u_value": 0, "wall_type": 5, "kappa_value": 75, "total_wall_area": 22.3, "is_curtain_walling": "false"}], "sap_openings": [{"name": "front entrance", "type": "front door", "width": 2.1, "height": 1, "location": "Walls (1)", "orientation": 7}, {"name": "utility door", "type": "utility rear door", "width": 2.1, "height": 1, "location": "Walls (1)", "orientation": 1}, {"name": "front", "type": "glazing", "width": 6.25, "height": 1, "location": "Walls (1)", "orientation": 7}, {"name": "rear", "type": "glazing", "width": 4.3, "height": 1, "location": "Walls (1)", "orientation": 3}, {"name": "side", "type": "glazing", "width": 1.6, "height": 1, "location": "Walls (1)", "orientation": 1}, {"name": "rear", "type": "french door", "width": 5, "height": 1, "location": "Walls (1)", "orientation": 3}], "construction_year": 2023, "sap_thermal_bridges": {"thermal_bridges": [{"length": 6.9, "psi_value": 0.043, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 7.9, "psi_value": 0.021, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 10.3, "psi_value": 0.009, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 33.6, "psi_value": 0.014, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 31, "psi_value": 0.054, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 14.3, "psi_value": 0.08, "psi_value_source": 1, "thermal_bridge_type": "E10"}, {"length": 19.8, "psi_value": 0.048, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 27.5, "psi_value": 0.003, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 22.35, "psi_value": 0.041, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 2.39, "psi_value": -0.094, "psi_value_source": 1, "thermal_bridge_type": "E17"}, {"length": 3, "psi_value": 0.15, "psi_value_source": 4, "thermal_bridge_type": "E24"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.11, "floor_type": 2, "kappa_value": 75, "storey_height": 2.39, "heat_loss_area": 50.9, "total_floor_area": 50.9}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.6, "heat_loss_area": 0, "total_floor_area": 45.7, "kappa_value_from_below": 9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 389, "currency": "GBP"}, "co2_emissions_current": 1.1, "energy_rating_average": 60, "energy_rating_current": 93, "lighting_cost_current": {"value": 57, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 389, "currency": "GBP"}, "hot_water_cost_current": {"value": 194, "currency": "GBP"}, "user_interface_version": "3.1.57", "co2_emissions_potential": 1.1, "energy_rating_potential": 93, "gas_smart_meter_present": "true", "lighting_cost_potential": {"value": 57, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 194, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 57, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 57, "environmental_impact_current": 90, "current_energy_efficiency_band": "A", "environmental_impact_potential": 90, "electricity_smart_meter_present": "true", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 10.9} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CV78UG/cert-2e6f5943059a.json b/tests/fixtures/epc_prediction/CV78UG/cert-2e6f5943059a.json new file mode 100644 index 00000000..800d4df9 --- /dev/null +++ b/tests/fixtures/epc_prediction/CV78UG/cert-2e6f5943059a.json @@ -0,0 +1 @@ +{"der": 11.64, "ter": 12.12, "dfee": 43.1, "dper": 61.35, "tfee": 44.3, "tper": 63.46, "uprn": 10097098981, "roofs": [{"description": {"value": "Average thermal transmittance 0.09 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.24 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.12 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": 1, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Excellent lighting efficiency", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "CV7 8UG", "data_type": 2, "hot_water": {"description": {"value": "From main system, waste water heat recovery", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 1, "created_at": "2025-11-24 12:20:06", "living_area": 13.2, "orientation": 1, "region_code": 6, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 2, "shower_flow_rate": 8, "shower_outlet_type": 3}, {"shower_wwhrs": 1, "shower_flow_rate": 8, "shower_outlet_type": 3}], "water_fuel_type": 1, "water_heating_code": 901, "instantaneous_wwhrs": {"wwhrs_index_number1": 80179}, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 1, "heat_emitter_type": 1, "is_flue_fan_present": "true", "main_heating_number": 1, "control_index_number": 200122, "is_condensing_boiler": "true", "main_heating_control": 2110, "is_interlocked_system": "true", "main_heating_category": 2, "main_heating_fraction": 1, "gas_or_oil_boiler_type": 2, "main_heating_flue_type": 2, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 17929, "has_separate_delayed_start": "false", "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "condensing_boiler_heat_distribution": 55, "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "false", "has_cylinder_thermostat": "true", "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "true", "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 4}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 10, "lighting_efficacy": 90}, {"lighting_power": 8, "lighting_outlets": 12, "lighting_efficacy": 100}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.7 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Detached house", "language_code": 1, "property_type": 0, "pv_connection": 2, "address_line_1": "addr-dccb0b543799", "assessment_date": "2025-11-24", "assessment_type": "SAP", "completion_date": "2025-11-24", "inspection_date": "2025-11-24", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "wet_rooms_count": 4, "air_permeability": 4.65, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 1, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 3, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500755, "is_mechanical_vent_approved_installer_scheme": "true"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 98, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2025-11-24", "sap_energy_source": {"pv_arrays": [{"pitch": 3, "peak_power": 1.67, "orientation": 5, "overshading": 1}], "electricity_tariff": 1}, "sap_opening_types": [{"name": "front door", "type": 1, "u_value": 1.4, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "utility rear door", "type": 2, "u_value": 1.1, "data_source": 2, "glazing_type": 7, "isargonfilled": "false"}, {"name": "glazing", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.46}, {"name": "french door", "type": 4, "u_value": 1.3, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.71}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 52.6, "lzc_energy_sources": [11], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 54.5}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.24, "wall_type": 2, "kappa_value": 60, "total_wall_area": 114.89, "is_curtain_walling": "false"}, {"name": "Walls (2)", "u_value": 0.26, "wall_type": 2, "kappa_value": 60, "total_wall_area": 27.83, "is_curtain_walling": "false"}, {"name": "Walls (3)", "u_value": 0.27, "wall_type": 3, "kappa_value": 9, "total_wall_area": 20.94, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 152.3, "is_curtain_walling": "false"}, {"name": "Internal Wall (2)", "u_value": 0, "wall_type": 5, "kappa_value": 75, "total_wall_area": 17.3, "is_curtain_walling": "false"}], "sap_openings": [{"name": "front entrance", "type": "front door", "width": 2, "height": 1, "location": "Walls (1)", "orientation": 1}, {"name": "front", "type": "glazing", "width": 1.4, "height": 1, "location": "Walls (2)", "orientation": 1}, {"name": "front", "type": "glazing", "width": 3, "height": 1, "location": "Walls (1)", "orientation": 1}, {"name": "rear", "type": "glazing", "width": 3.2, "height": 1, "location": "Walls (2)", "orientation": 5}, {"name": "rear", "type": "glazing", "width": 3, "height": 1, "location": "Walls (1)", "orientation": 5}, {"name": "rear french door", "type": "french door", "width": 3.15, "height": 1, "location": "Walls (2)", "orientation": 5}, {"name": "side", "type": "glazing", "width": 0.85, "height": 1, "location": "Walls (2)", "orientation": 3}, {"name": "side", "type": "glazing", "width": 0.7, "height": 1, "location": "Walls (1)", "orientation": 3}, {"name": "side", "type": "glazing", "width": 1.55, "height": 1, "location": "Walls (2)", "orientation": 7}], "construction_year": 2023, "sap_thermal_bridges": {"thermal_bridges": [{"length": 10.4, "psi_value": 0.043, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 3.7, "psi_value": 0.021, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 11.6, "psi_value": 0.009, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 30.6, "psi_value": 0.014, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 26.6, "psi_value": 0.054, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 7.9, "psi_value": 0.29, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 7.9, "psi_value": 0.068, "psi_value_source": 1, "thermal_bridge_type": "E20"}, {"length": 7.9, "psi_value": 0.05, "psi_value_source": 1, "thermal_bridge_type": "E21"}, {"length": 17.7, "psi_value": 0.08, "psi_value_source": 1, "thermal_bridge_type": "E10"}, {"length": 19.8, "psi_value": 0.048, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 23.5, "psi_value": 0, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 24.75, "psi_value": 0.041, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 1.5, "psi_value": 0.18, "psi_value_source": 4, "thermal_bridge_type": "E16"}, {"length": 4.99, "psi_value": -0.094, "psi_value_source": 1, "thermal_bridge_type": "E17"}, {"length": 3.7, "psi_value": 0.15, "psi_value_source": 4, "thermal_bridge_type": "E24"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.12, "floor_type": 2, "kappa_value": 75, "storey_height": 2.66, "heat_loss_area": 45, "total_floor_area": 45}, {"storey": 0, "u_value": 0.12, "floor_type": 3, "kappa_value": 20, "storey_height": 2.66, "heat_loss_area": 9.1, "total_floor_area": 45}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.33, "heat_loss_area": 0, "total_floor_area": 52.6, "kappa_value_from_below": 9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 373, "currency": "GBP"}, "co2_emissions_current": 1.1, "energy_rating_average": 60, "energy_rating_current": 92, "lighting_cost_current": {"value": 59, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 373, "currency": "GBP"}, "hot_water_cost_current": {"value": 154, "currency": "GBP"}, "user_interface_version": "2.25.1", "co2_emissions_potential": 1.1, "energy_rating_potential": 92, "gas_smart_meter_present": "true", "lighting_cost_potential": {"value": 59, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 154, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 59, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "2.25.1", "energy_consumption_potential": 59, "environmental_impact_current": 90, "current_energy_efficiency_band": "A", "environmental_impact_potential": 90, "electricity_smart_meter_present": "true", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 11.2} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CV78UG/cert-7d9beea6555e.json b/tests/fixtures/epc_prediction/CV78UG/cert-7d9beea6555e.json new file mode 100644 index 00000000..eeb38367 --- /dev/null +++ b/tests/fixtures/epc_prediction/CV78UG/cert-7d9beea6555e.json @@ -0,0 +1 @@ +{"der": 10.7, "ter": 11.01, "dfee": 40.2, "dper": 56.19, "tfee": 40.8, "tper": 57.52, "uprn": 10097098980, "roofs": [{"description": {"value": "Average thermal transmittance 0.09 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.24 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.12 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": 1, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Excellent lighting efficiency", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "CV7 8UG", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 1, "created_at": "2025-12-19 15:25:17", "living_area": 16.4, "orientation": 8, "region_code": 6, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_flow_rate": 8, "shower_outlet_type": 3}, {"shower_wwhrs": 1, "shower_flow_rate": 8, "shower_outlet_type": 3}], "water_fuel_type": 1, "water_heating_code": 901, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 1, "heat_emitter_type": 1, "is_flue_fan_present": "true", "main_heating_number": 1, "control_index_number": 200122, "is_condensing_boiler": "true", "main_heating_control": 2110, "is_interlocked_system": "true", "main_heating_category": 2, "main_heating_fraction": 1, "gas_or_oil_boiler_type": 2, "main_heating_flue_type": 2, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 17929, "has_separate_delayed_start": "false", "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "condensing_boiler_heat_distribution": 55, "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "false", "has_cylinder_thermostat": "true", "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "true", "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 4}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 11, "lighting_efficacy": 90}, {"lighting_power": 8, "lighting_outlets": 11, "lighting_efficacy": 100}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.1 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Detached house", "language_code": 1, "property_type": 0, "pv_connection": 2, "address_line_1": "addr-011727993035", "assessment_date": "2025-12-19", "assessment_type": "SAP", "completion_date": "2025-12-19", "inspection_date": "2025-12-19", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "wet_rooms_count": 4, "air_permeability": 4.1, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 1, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 3, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500755, "is_mechanical_vent_approved_installer_scheme": "true"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 110, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2025-12-19", "sap_energy_source": {"pv_arrays": [{"pitch": 2, "peak_power": 2.34, "orientation": 4, "overshading": 1}], "electricity_tariff": 1}, "sap_opening_types": [{"name": "front door", "type": 1, "u_value": 1.4, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "utility rear door", "type": 2, "u_value": 1.1, "data_source": 2, "glazing_type": 7, "isargonfilled": "false"}, {"name": "garage door", "type": 1, "u_value": 0.82, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "glazing", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.46}, {"name": "french door", "type": 4, "u_value": 1.3, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.71}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 55.1, "lzc_energy_sources": [11], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 55.1}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.24, "wall_type": 2, "kappa_value": 60, "total_wall_area": 147.54, "is_curtain_walling": "false"}, {"name": "Walls (2)", "u_value": 0.26, "wall_type": 2, "kappa_value": 60, "total_wall_area": 7.65, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 174.3, "is_curtain_walling": "false"}, {"name": "Internal Wall (2)", "u_value": 0, "wall_type": 5, "kappa_value": 75, "total_wall_area": 27.6, "is_curtain_walling": "false"}], "sap_openings": [{"name": "front entrance", "type": "front door", "width": 2.1, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "utility door", "type": "utility rear door", "width": 2.1, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "front", "type": "glazing", "width": 7.85, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "rear", "type": "glazing", "width": 3, "height": 1, "location": "Walls (1)", "orientation": 4}, {"name": "side", "type": "glazing", "width": 0.7, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "rear", "type": "french door", "width": 5, "height": 1, "location": "Walls (1)", "orientation": 4}, {"name": "rear", "type": "glazing", "width": 1.85, "height": 1, "location": "Walls (2)", "orientation": 4}, {"name": "side", "type": "glazing", "width": 0.7, "height": 1, "location": "Walls (1)", "orientation": 6}], "construction_year": 2023, "sap_thermal_bridges": {"thermal_bridges": [{"length": 12.6, "psi_value": 0.043, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 3.7, "psi_value": 0.021, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 11.9, "psi_value": 0.009, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 33.6, "psi_value": 0.014, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 31.1, "psi_value": 0.054, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 11.3, "psi_value": 0.08, "psi_value_source": 1, "thermal_bridge_type": "E10"}, {"length": 19.8, "psi_value": 0.048, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 31.1, "psi_value": 0, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 29.94, "psi_value": 0.041, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 9.98, "psi_value": -0.094, "psi_value_source": 1, "thermal_bridge_type": "E17"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.12, "floor_type": 2, "kappa_value": 75, "storey_height": 2.39, "heat_loss_area": 55.1, "total_floor_area": 55.1}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.6, "heat_loss_area": 0, "total_floor_area": 55.1, "kappa_value_from_below": 9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 383, "currency": "GBP"}, "co2_emissions_current": 1.1, "energy_rating_average": 60, "energy_rating_current": 93, "lighting_cost_current": {"value": 64, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 383, "currency": "GBP"}, "hot_water_cost_current": {"value": 178, "currency": "GBP"}, "user_interface_version": "2.25.1", "co2_emissions_potential": 1.1, "energy_rating_potential": 93, "gas_smart_meter_present": "true", "lighting_cost_potential": {"value": 64, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 178, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 54, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "2.25.1", "energy_consumption_potential": 54, "environmental_impact_current": 90, "current_energy_efficiency_band": "A", "environmental_impact_potential": 90, "electricity_smart_meter_present": "true", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 10.3} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CV78UG/cert-89894e90fc9c.json b/tests/fixtures/epc_prediction/CV78UG/cert-89894e90fc9c.json new file mode 100644 index 00000000..9356e050 --- /dev/null +++ b/tests/fixtures/epc_prediction/CV78UG/cert-89894e90fc9c.json @@ -0,0 +1 @@ +{"der": 9.97, "ter": 10.29, "dfee": 34.3, "dper": 51.68, "tfee": 35.3, "tper": 53.73, "uprn": 10097098982, "roofs": [{"description": {"value": "Average thermal transmittance 0.11 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.23 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.12 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": 1, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Excellent lighting efficiency", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "CV7 8UG", "data_type": 2, "hot_water": {"description": {"value": "From main system, waste water heat recovery", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 2, "created_at": "2026-03-26 12:40:49", "living_area": 15.3, "orientation": 8, "pv_diverter": "true", "region_code": 6, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 2, "shower_flow_rate": 8, "shower_outlet_type": 3}, {"shower_wwhrs": 1, "shower_flow_rate": 8, "shower_outlet_type": 3}, {"shower_wwhrs": 1, "shower_flow_rate": 8, "shower_outlet_type": 3}], "water_fuel_type": 1, "water_heating_code": 901, "instantaneous_wwhrs": {"wwhrs_index_number1": 80179}, "hot_water_store_size": 210, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 1, "heat_emitter_type": 1, "is_flue_fan_present": "true", "main_heating_number": 1, "control_index_number": 200122, "is_condensing_boiler": "true", "main_heating_control": 2110, "is_interlocked_system": "true", "main_heating_category": 2, "main_heating_fraction": 1, "gas_or_oil_boiler_type": 1, "main_heating_flue_type": 2, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 18042, "has_separate_delayed_start": "false", "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "condensing_boiler_heat_distribution": 55, "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.48, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 4}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 11, "lighting_efficacy": 90}, {"lighting_power": 8, "lighting_outlets": 12, "lighting_efficacy": 100}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.1 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "pv_connection": 2, "address_line_1": "addr-fe73ac5a9b01", "assessment_date": "2026-03-26", "assessment_type": "SAP", "completion_date": "2026-03-26", "inspection_date": "2026-03-26", "sap_ventilation": {"psv_count": 0, "wall_type": 1, "pressure_test": 1, "wet_rooms_count": 5, "air_permeability": 4.14, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 1, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 4, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500755, "is_mechanical_vent_approved_installer_scheme": "true"}, "battery_capacity": 0, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 113, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-03-26", "sap_energy_source": {"pv_arrays": [{"pitch": 2, "peak_power": 1.67, "orientation": 4, "overshading": 1}], "electricity_tariff": 1}, "sap_opening_types": [{"name": "front door", "type": 1, "u_value": 1.4, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "glazing", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.46}, {"name": "french door", "type": 4, "u_value": 1.3, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.71}, {"name": "roof light", "type": 6, "u_value": 1.6, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.55}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 42.9, "lzc_energy_sources": [11], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 22.09}, {"name": "Roof (2)", "u_value": 0.11, "roof_type": 2, "kappa_value": 9, "total_roof_area": 8.55}, {"name": "Roof (3)", "u_value": 0.15, "roof_type": 2, "kappa_value": 9, "total_roof_area": 7.63}, {"name": "Roof (4)", "u_value": 0.16, "roof_type": 2, "kappa_value": 9, "total_roof_area": 1.8}, {"name": "Roof (5)", "u_value": 0.11, "roof_type": 2, "kappa_value": 9, "total_roof_area": 1.5}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.24, "wall_type": 2, "kappa_value": 60, "total_wall_area": 47.04, "is_curtain_walling": "false"}, {"name": "Walls (2)", "u_value": 0.26, "wall_type": 2, "kappa_value": 60, "total_wall_area": 47.06, "is_curtain_walling": "false"}, {"name": "Walls (3)", "u_value": 0.23, "wall_type": 2, "kappa_value": 9, "total_wall_area": 15.1, "is_curtain_walling": "false"}, {"name": "Walls (4)", "u_value": 0.11, "wall_type": 2, "kappa_value": 9, "total_wall_area": 10.9, "is_curtain_walling": "false"}, {"name": "Walls (5)", "u_value": 0.26, "wall_type": 2, "kappa_value": 9, "total_wall_area": 2.85, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 70, "total_wall_area": 44, "is_curtain_walling": "false"}, {"name": "Party Wall (2)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 15.1, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 132.9, "is_curtain_walling": "false"}, {"name": "Internal Wall (2)", "u_value": 0, "wall_type": 5, "kappa_value": 75, "total_wall_area": 20.2, "is_curtain_walling": "false"}], "sap_openings": [{"name": "front entrance", "type": "front door", "width": 2.1, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "Front", "type": "glazing", "width": 3.95, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "Rear", "type": "glazing", "width": 2.99, "height": 1, "location": "Walls (1)", "orientation": 4}, {"name": "French Door", "type": "french door", "width": 7.06, "height": 1, "location": "Walls (2)", "orientation": 4}, {"name": "Side", "type": "glazing", "width": 1.5, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "Side", "type": "glazing", "width": 0.85, "height": 1, "location": "Walls (1)", "orientation": 6}, {"name": "Front dormer", "type": "glazing", "width": 1.5, "height": 1, "location": "Walls (5)", "orientation": 8}], "construction_year": 2023, "sap_thermal_bridges": {"thermal_bridges": [{"length": 8.29, "psi_value": 0.043, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 4.42, "psi_value": 0.021, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 8.1, "psi_value": 0.009, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 24, "psi_value": 0.014, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 19.6, "psi_value": 0.054, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 4.85, "psi_value": 0.048, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 36.2, "psi_value": 0.003, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 10, "psi_value": 0.041, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 10, "psi_value": 0.042, "psi_value_source": 1, "thermal_bridge_type": "E18"}, {"length": 8.8, "psi_value": 0.04, "psi_value_source": 1, "thermal_bridge_type": "P1"}, {"length": 17.6, "psi_value": 0, "psi_value_source": 1, "thermal_bridge_type": "P2"}, {"length": 4.85, "psi_value": 0.037, "psi_value_source": 1, "thermal_bridge_type": "P4"}, {"length": 9.3, "psi_value": 0.047, "psi_value_source": 1, "thermal_bridge_type": "E11"}, {"length": 5.7, "psi_value": 0.041, "psi_value_source": 1, "thermal_bridge_type": "E13"}, {"length": 5.7, "psi_value": 0.07, "psi_value_source": 1, "thermal_bridge_type": "P5"}, {"length": 1.2, "psi_value": 0.029, "psi_value_source": 1, "thermal_bridge_type": "R1"}, {"length": 1.2, "psi_value": 0.071, "psi_value_source": 1, "thermal_bridge_type": "R2"}, {"length": 2.4, "psi_value": 0.033, "psi_value_source": 1, "thermal_bridge_type": "R3"}, {"length": 5.2, "psi_value": -0.022, "psi_value_source": 1, "thermal_bridge_type": "R7"}, {"length": 4.4, "psi_value": 0.029, "psi_value_source": 1, "thermal_bridge_type": "R9"}, {"length": 9.2, "psi_value": 0.031, "psi_value_source": 1, "thermal_bridge_type": "R6"}, {"length": 2.7, "psi_value": 0.15, "psi_value_source": 4, "thermal_bridge_type": "E24"}, {"length": 1.1, "psi_value": 0.12, "psi_value_source": 1, "thermal_bridge_type": "R1"}, {"length": 1.1, "psi_value": 0.11, "psi_value_source": 1, "thermal_bridge_type": "R2"}, {"length": 3.92, "psi_value": 0.04, "psi_value_source": 1, "thermal_bridge_type": "R3"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.12, "floor_type": 2, "kappa_value": 75, "storey_height": 2.39, "heat_loss_area": 42.9, "total_floor_area": 42.9}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.6, "heat_loss_area": 0, "total_floor_area": 40.9, "kappa_value_from_below": 9}, {"storey": 2, "u_value": 0, "floor_type": 3, "storey_height": 2.55, "heat_loss_area": 0, "total_floor_area": 29.2}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 337, "currency": "GBP"}, "co2_emissions_current": 1.1, "energy_rating_average": 60, "energy_rating_current": 91, "lighting_cost_current": {"value": 66, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 362, "currency": "GBP"}, "hot_water_cost_current": {"value": 165, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 35, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 93, "environmental_impact_rating": 92}], "user_interface_version": "3.1.55", "co2_emissions_potential": 1.0, "energy_rating_potential": 93, "gas_smart_meter_present": "true", "lighting_cost_potential": {"value": 66, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 138, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 50, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.55", "energy_consumption_potential": 45, "environmental_impact_current": 91, "current_energy_efficiency_band": "B", "environmental_impact_potential": 92, "electricity_smart_meter_present": "true", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 9.7} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CV78UG/cert-91dd248e55ee.json b/tests/fixtures/epc_prediction/CV78UG/cert-91dd248e55ee.json new file mode 100644 index 00000000..dde1f1f1 --- /dev/null +++ b/tests/fixtures/epc_prediction/CV78UG/cert-91dd248e55ee.json @@ -0,0 +1 @@ +{"der": 10.22, "ter": 10.54, "dfee": 35.5, "dper": 53.03, "tfee": 36.4, "tper": 55.04, "uprn": 10097098986, "roofs": [{"description": {"value": "Average thermal transmittance 0.11 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.23 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.12 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": 1, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Excellent lighting efficiency", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "CV7 8UG", "data_type": 2, "hot_water": {"description": {"value": "From main system, waste water heat recovery", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 2, "created_at": "2026-02-04 13:04:40", "living_area": 15.3, "orientation": 4, "pv_diverter": "true", "region_code": 6, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 2, "shower_flow_rate": 8, "shower_outlet_type": 3}, {"shower_wwhrs": 1, "shower_flow_rate": 8, "shower_outlet_type": 3}, {"shower_wwhrs": 1, "shower_flow_rate": 8, "shower_outlet_type": 3}], "water_fuel_type": 1, "water_heating_code": 901, "instantaneous_wwhrs": {"wwhrs_index_number1": 80179}, "hot_water_store_size": 210, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 1, "heat_emitter_type": 1, "is_flue_fan_present": "true", "main_heating_number": 1, "control_index_number": 200122, "is_condensing_boiler": "true", "main_heating_control": 2110, "is_interlocked_system": "true", "main_heating_category": 2, "main_heating_fraction": 1, "gas_or_oil_boiler_type": 1, "main_heating_flue_type": 2, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 18042, "has_separate_delayed_start": "false", "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "condensing_boiler_heat_distribution": 55, "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.48, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 4}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 11, "lighting_efficacy": 90}, {"lighting_power": 8, "lighting_outlets": 12, "lighting_efficacy": 100}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.3 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "pv_connection": 2, "address_line_1": "addr-04f0102e97e1", "assessment_date": "2026-02-04", "assessment_type": "SAP", "completion_date": "2026-02-04", "inspection_date": "2026-02-04", "sap_ventilation": {"psv_count": 0, "wall_type": 1, "pressure_test": 1, "wet_rooms_count": 5, "air_permeability": 4.3, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 1, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 4, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500755, "is_mechanical_vent_approved_installer_scheme": "true"}, "battery_capacity": 0, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 113, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-02-04", "sap_energy_source": {"pv_arrays": [{"pitch": 2, "peak_power": 1.67, "orientation": 4, "overshading": 1}], "electricity_tariff": 1}, "sap_opening_types": [{"name": "front door", "type": 1, "u_value": 1.4, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "glazing", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.46}, {"name": "french door", "type": 4, "u_value": 1.3, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.71}, {"name": "roof light", "type": 6, "u_value": 1.6, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.55}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 42.9, "lzc_energy_sources": [11], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 22.09}, {"name": "Roof (2)", "u_value": 0.11, "roof_type": 2, "kappa_value": 9, "total_roof_area": 8.55}, {"name": "Roof (3)", "u_value": 0.15, "roof_type": 2, "kappa_value": 9, "total_roof_area": 7.63}, {"name": "Roof (4)", "u_value": 0.16, "roof_type": 2, "kappa_value": 9, "total_roof_area": 1.8}, {"name": "Roof (5)", "u_value": 0.11, "roof_type": 2, "kappa_value": 9, "total_roof_area": 1.5}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.24, "wall_type": 2, "kappa_value": 60, "total_wall_area": 47.04, "is_curtain_walling": "false"}, {"name": "Walls (2)", "u_value": 0.26, "wall_type": 2, "kappa_value": 60, "total_wall_area": 47.06, "is_curtain_walling": "false"}, {"name": "Walls (3)", "u_value": 0.23, "wall_type": 2, "kappa_value": 9, "total_wall_area": 15.1, "is_curtain_walling": "false"}, {"name": "Walls (4)", "u_value": 0.11, "wall_type": 2, "kappa_value": 9, "total_wall_area": 10.9, "is_curtain_walling": "false"}, {"name": "Walls (5)", "u_value": 0.26, "wall_type": 2, "kappa_value": 9, "total_wall_area": 2.85, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 70, "total_wall_area": 44, "is_curtain_walling": "false"}, {"name": "Party Wall (2)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 15.1, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 132.9, "is_curtain_walling": "false"}, {"name": "Internal Wall (2)", "u_value": 0, "wall_type": 5, "kappa_value": 75, "total_wall_area": 20.2, "is_curtain_walling": "false"}], "sap_openings": [{"name": "front entrance", "type": "front door", "width": 2.1, "height": 1, "location": "Walls (1)", "orientation": 4}, {"name": "Front", "type": "glazing", "width": 3.95, "height": 1, "location": "Walls (1)", "orientation": 4}, {"name": "Rear", "type": "glazing", "width": 2.99, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "French Door", "type": "french door", "width": 7.06, "height": 1, "location": "Walls (2)", "orientation": 8}, {"name": "Side", "type": "glazing", "width": 1.5, "height": 1, "location": "Walls (1)", "orientation": 6}, {"name": "Side", "type": "glazing", "width": 0.85, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "Front dormer", "type": "glazing", "width": 1.5, "height": 1, "location": "Walls (5)", "orientation": 4}], "construction_year": 2023, "sap_thermal_bridges": {"thermal_bridges": [{"length": 8.29, "psi_value": 0.043, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 4.42, "psi_value": 0.021, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 8.1, "psi_value": 0.009, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 24, "psi_value": 0.014, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 19.6, "psi_value": 0.054, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 4.85, "psi_value": 0.048, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 36.2, "psi_value": 0, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 10, "psi_value": 0.041, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 10, "psi_value": 0.042, "psi_value_source": 1, "thermal_bridge_type": "E18"}, {"length": 8.8, "psi_value": 0.04, "psi_value_source": 1, "thermal_bridge_type": "P1"}, {"length": 17.6, "psi_value": 0, "psi_value_source": 1, "thermal_bridge_type": "P2"}, {"length": 4.85, "psi_value": 0.037, "psi_value_source": 1, "thermal_bridge_type": "P4"}, {"length": 9.3, "psi_value": 0.047, "psi_value_source": 1, "thermal_bridge_type": "E11"}, {"length": 5.7, "psi_value": 0.041, "psi_value_source": 1, "thermal_bridge_type": "E13"}, {"length": 5.7, "psi_value": 0.07, "psi_value_source": 1, "thermal_bridge_type": "P5"}, {"length": 1.2, "psi_value": 0.029, "psi_value_source": 1, "thermal_bridge_type": "R1"}, {"length": 1.2, "psi_value": 0.071, "psi_value_source": 1, "thermal_bridge_type": "R2"}, {"length": 2.4, "psi_value": 0.033, "psi_value_source": 1, "thermal_bridge_type": "R3"}, {"length": 5.2, "psi_value": -0.022, "psi_value_source": 1, "thermal_bridge_type": "R7"}, {"length": 4.4, "psi_value": 0.029, "psi_value_source": 1, "thermal_bridge_type": "R9"}, {"length": 9.2, "psi_value": 0.031, "psi_value_source": 1, "thermal_bridge_type": "R6"}, {"length": 2.7, "psi_value": 0.15, "psi_value_source": 4, "thermal_bridge_type": "E24"}, {"length": 1.1, "psi_value": 0.12, "psi_value_source": 1, "thermal_bridge_type": "R1"}, {"length": 1.1, "psi_value": 0.11, "psi_value_source": 1, "thermal_bridge_type": "R2"}, {"length": 3.92, "psi_value": 0.04, "psi_value_source": 1, "thermal_bridge_type": "R3"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.12, "floor_type": 2, "kappa_value": 75, "storey_height": 2.39, "heat_loss_area": 42.9, "total_floor_area": 42.9}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.6, "heat_loss_area": 0, "total_floor_area": 40.9, "kappa_value_from_below": 9}, {"storey": 2, "u_value": 0, "floor_type": 3, "storey_height": 2.55, "heat_loss_area": 0, "total_floor_area": 29.2}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 346, "currency": "GBP"}, "co2_emissions_current": 1.1, "energy_rating_average": 60, "energy_rating_current": 91, "lighting_cost_current": {"value": 66, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 371, "currency": "GBP"}, "hot_water_cost_current": {"value": 164, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 35, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 92, "environmental_impact_rating": 92}], "user_interface_version": "2.26.16", "co2_emissions_potential": 1.0, "energy_rating_potential": 92, "gas_smart_meter_present": "true", "lighting_cost_potential": {"value": 66, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 138, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 51, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "2.26.16", "energy_consumption_potential": 46, "environmental_impact_current": 91, "current_energy_efficiency_band": "B", "environmental_impact_potential": 92, "electricity_smart_meter_present": "true", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 9.9} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CV78UG/cert-924d78d64f06.json b/tests/fixtures/epc_prediction/CV78UG/cert-924d78d64f06.json new file mode 100644 index 00000000..4b33c80e --- /dev/null +++ b/tests/fixtures/epc_prediction/CV78UG/cert-924d78d64f06.json @@ -0,0 +1 @@ +{"der": 9.57, "ter": 9.81, "dfee": 42.7, "dper": 48.39, "tfee": 43.3, "tper": 51.4, "uprn": 10097098975, "roofs": [{"description": {"value": "Average thermal transmittance 0.09 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.24 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.11 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": 1, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Excelent lighting efficiency", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "CV7 8UG", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 1, "created_at": "2025-08-11 13:32:49", "living_area": 21.6, "orientation": 8, "pv_diverter": "true", "region_code": 6, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_flow_rate": 8, "shower_outlet_type": 3}, {"shower_wwhrs": 1, "shower_flow_rate": 8, "shower_outlet_type": 3}, {"shower_wwhrs": 1, "shower_flow_rate": 8, "shower_outlet_type": 3}], "water_fuel_type": 1, "water_heating_code": 901, "hot_water_store_size": 180, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 1, "heat_emitter_type": 1, "is_flue_fan_present": "true", "main_heating_number": 1, "control_index_number": 200122, "is_condensing_boiler": "true", "main_heating_control": 2110, "is_interlocked_system": "true", "main_heating_category": 2, "main_heating_fraction": 1, "gas_or_oil_boiler_type": 1, "main_heating_flue_type": 2, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 18043, "has_separate_delayed_start": "false", "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "condensing_boiler_heat_distribution": 55, "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.4, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 4}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 14, "lighting_efficacy": 90}, {"lighting_power": 8, "lighting_outlets": 26, "lighting_efficacy": 100}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.3 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Detached house", "language_code": 1, "property_type": 0, "pv_connection": 2, "address_line_1": "addr-e972da98ce68", "assessment_date": "2025-08-11", "assessment_type": "SAP", "completion_date": "2025-08-11", "inspection_date": "2025-08-11", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "wet_rooms_count": 6, "air_permeability": 4.3, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 1, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 5, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500755, "is_mechanical_vent_approved_installer_scheme": "true"}, "battery_capacity": 0, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 154, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2025-08-11", "sap_energy_source": {"pv_arrays": [{"pitch": 2, "peak_power": 2.345, "orientation": 4, "overshading": 1}, {"pitch": 2, "peak_power": 1.005, "orientation": 6, "overshading": 1}], "electricity_tariff": 1}, "sap_opening_types": [{"name": "front door", "type": 1, "u_value": 1.4, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "utility rear door", "type": 2, "u_value": 1.1, "data_source": 2, "glazing_type": 7, "isargonfilled": "false"}, {"name": "glazing", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.46}, {"name": "french door", "type": 4, "u_value": 1.3, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.71}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 76.9, "lzc_energy_sources": [11], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 76.9}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.24, "wall_type": 2, "kappa_value": 60, "total_wall_area": 189.4, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 175.3, "is_curtain_walling": "false"}, {"name": "Internal Wall (2)", "u_value": 0, "wall_type": 5, "kappa_value": 75, "total_wall_area": 64.8, "is_curtain_walling": "false"}], "sap_openings": [{"name": "front", "type": "front door", "width": 2.1, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "rear", "type": "utility rear door", "width": 2, "height": 1, "location": "Walls (1)", "orientation": 4}, {"name": "front", "type": "glazing", "width": 11.05, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "rear", "type": "glazing", "width": 3.55, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "rear french doors", "type": "french door", "width": 10, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "side", "type": "glazing", "width": 3.55, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "side", "type": "glazing", "width": 4.75, "height": 1, "location": "Walls (1)", "orientation": 6}], "construction_year": 2023, "sap_thermal_bridges": {"thermal_bridges": [{"length": 17.7, "psi_value": 0.043, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 5.55, "psi_value": 0.021, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 16.5, "psi_value": 0.009, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 42.9, "psi_value": 0.014, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 38, "psi_value": 0.054, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 20, "psi_value": 0.08, "psi_value_source": 1, "thermal_bridge_type": "E10"}, {"length": 18, "psi_value": 0.048, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 38, "psi_value": 0, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 24.95, "psi_value": 0.041, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 4.99, "psi_value": -0.094, "psi_value_source": 1, "thermal_bridge_type": "E17"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.11, "floor_type": 2, "kappa_value": 75, "storey_height": 2.39, "heat_loss_area": 76.9, "total_floor_area": 76.9}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.6, "heat_loss_area": 0, "total_floor_area": 76.9, "kappa_value_from_below": 9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 509, "currency": "GBP"}, "co2_emissions_current": 1.4, "energy_rating_average": 60, "energy_rating_current": 93, "lighting_cost_current": {"value": 74, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 535, "currency": "GBP"}, "hot_water_cost_current": {"value": 123, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 26, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 95, "environmental_impact_rating": 91}], "user_interface_version": "2.23.1", "co2_emissions_potential": 1.4, "energy_rating_potential": 95, "gas_smart_meter_present": "true", "lighting_cost_potential": {"value": 74, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 153, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 46, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "2.23.1", "energy_consumption_potential": 47, "environmental_impact_current": 90, "current_energy_efficiency_band": "A", "environmental_impact_potential": 91, "electricity_smart_meter_present": "true", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 9.2} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CV78UG/cert-94454d5d782e.json b/tests/fixtures/epc_prediction/CV78UG/cert-94454d5d782e.json new file mode 100644 index 00000000..ae093f84 --- /dev/null +++ b/tests/fixtures/epc_prediction/CV78UG/cert-94454d5d782e.json @@ -0,0 +1 @@ +{"der": 11.89, "ter": 12.26, "dfee": 43.5, "dper": 62.81, "tfee": 45.1, "tper": 64.22, "uprn": 10097098983, "roofs": [{"description": {"value": "Average thermal transmittance 0.09 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.24 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.12 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": 1, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Excellent lighting efficiency", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "CV7 8UG", "data_type": 2, "hot_water": {"description": {"value": "From main system, waste water heat recovery", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 1, "created_at": "2025-12-15 13:52:51", "living_area": 13.2, "orientation": 2, "region_code": 6, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 2, "shower_flow_rate": 8, "shower_outlet_type": 3}, {"shower_wwhrs": 1, "shower_flow_rate": 8, "shower_outlet_type": 3}], "water_fuel_type": 1, "water_heating_code": 901, "instantaneous_wwhrs": {"wwhrs_index_number1": 80179}, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 1, "heat_emitter_type": 1, "is_flue_fan_present": "true", "main_heating_number": 1, "control_index_number": 200122, "is_condensing_boiler": "true", "main_heating_control": 2110, "is_interlocked_system": "true", "main_heating_category": 2, "main_heating_fraction": 1, "gas_or_oil_boiler_type": 2, "main_heating_flue_type": 2, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 17929, "has_separate_delayed_start": "false", "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "condensing_boiler_heat_distribution": 55, "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "false", "has_cylinder_thermostat": "true", "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "true", "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 4}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 10, "lighting_efficacy": 90}, {"lighting_power": 8, "lighting_outlets": 12, "lighting_efficacy": 100}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 3.8 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Detached house", "language_code": 1, "property_type": 0, "pv_connection": 2, "address_line_1": "addr-5b148c9ccdd1", "assessment_date": "2025-12-15", "assessment_type": "SAP", "completion_date": "2025-12-15", "inspection_date": "2025-12-15", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "wet_rooms_count": 4, "air_permeability": 3.83, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 1, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 3, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500755, "is_mechanical_vent_approved_installer_scheme": "true"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 98, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2025-12-15", "sap_energy_source": {"pv_arrays": [{"pitch": 3, "peak_power": 1.67, "orientation": 6, "overshading": 1}], "electricity_tariff": 1}, "sap_opening_types": [{"name": "front door", "type": 1, "u_value": 1.4, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "utility rear door", "type": 2, "u_value": 1.1, "data_source": 2, "glazing_type": 7, "isargonfilled": "false"}, {"name": "glazing", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.46}, {"name": "french door", "type": 4, "u_value": 1.3, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.71}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 52.6, "lzc_energy_sources": [11], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 54.5}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.24, "wall_type": 2, "kappa_value": 60, "total_wall_area": 114.89, "is_curtain_walling": "false"}, {"name": "Walls (2)", "u_value": 0.26, "wall_type": 2, "kappa_value": 60, "total_wall_area": 27.83, "is_curtain_walling": "false"}, {"name": "Walls (3)", "u_value": 0.27, "wall_type": 3, "kappa_value": 9, "total_wall_area": 20.94, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 152.3, "is_curtain_walling": "false"}, {"name": "Internal Wall (2)", "u_value": 0, "wall_type": 5, "kappa_value": 75, "total_wall_area": 17.3, "is_curtain_walling": "false"}], "sap_openings": [{"name": "front entrance", "type": "front door", "width": 2, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "front", "type": "glazing", "width": 1.4, "height": 1, "location": "Walls (2)", "orientation": 2}, {"name": "front", "type": "glazing", "width": 3, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "rear", "type": "glazing", "width": 3.2, "height": 1, "location": "Walls (2)", "orientation": 6}, {"name": "rear", "type": "glazing", "width": 3, "height": 1, "location": "Walls (1)", "orientation": 6}, {"name": "rear french door", "type": "french door", "width": 3.15, "height": 1, "location": "Walls (2)", "orientation": 6}, {"name": "side", "type": "glazing", "width": 0.85, "height": 1, "location": "Walls (2)", "orientation": 4}, {"name": "side", "type": "glazing", "width": 0.7, "height": 1, "location": "Walls (1)", "orientation": 4}, {"name": "side", "type": "glazing", "width": 1.55, "height": 1, "location": "Walls (2)", "orientation": 8}], "construction_year": 2023, "sap_thermal_bridges": {"thermal_bridges": [{"length": 10.4, "psi_value": 0.043, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 3.7, "psi_value": 0.021, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 11.6, "psi_value": 0.009, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 30.6, "psi_value": 0.014, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 26.6, "psi_value": 0.054, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 7.9, "psi_value": 0.32, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 7.9, "psi_value": 0.068, "psi_value_source": 1, "thermal_bridge_type": "E20"}, {"length": 7.9, "psi_value": 0.05, "psi_value_source": 1, "thermal_bridge_type": "E21"}, {"length": 17.7, "psi_value": 0.08, "psi_value_source": 1, "thermal_bridge_type": "E10"}, {"length": 19.8, "psi_value": 0.048, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 23.5, "psi_value": 0.003, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 24.75, "psi_value": 0.041, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 1.5, "psi_value": 0.18, "psi_value_source": 4, "thermal_bridge_type": "E16"}, {"length": 4.99, "psi_value": -0.094, "psi_value_source": 1, "thermal_bridge_type": "E17"}, {"length": 3.7, "psi_value": 0.15, "psi_value_source": 4, "thermal_bridge_type": "E24"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.12, "floor_type": 2, "kappa_value": 75, "storey_height": 2.66, "heat_loss_area": 45, "total_floor_area": 45}, {"storey": 0, "u_value": 0.12, "floor_type": 3, "kappa_value": 20, "storey_height": 2.66, "heat_loss_area": 9.1, "total_floor_area": 45}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.33, "heat_loss_area": 0, "total_floor_area": 52.6, "kappa_value_from_below": 9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 378, "currency": "GBP"}, "co2_emissions_current": 1.1, "energy_rating_average": 60, "energy_rating_current": 91, "lighting_cost_current": {"value": 59, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 378, "currency": "GBP"}, "hot_water_cost_current": {"value": 154, "currency": "GBP"}, "user_interface_version": "2.25.1", "co2_emissions_potential": 1.1, "energy_rating_potential": 91, "gas_smart_meter_present": "true", "lighting_cost_potential": {"value": 59, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 154, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 61, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "2.25.1", "energy_consumption_potential": 61, "environmental_impact_current": 89, "current_energy_efficiency_band": "B", "environmental_impact_potential": 89, "electricity_smart_meter_present": "true", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 11.5} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CV78UG/cert-9b4787ad7813.json b/tests/fixtures/epc_prediction/CV78UG/cert-9b4787ad7813.json new file mode 100644 index 00000000..a3e1a323 --- /dev/null +++ b/tests/fixtures/epc_prediction/CV78UG/cert-9b4787ad7813.json @@ -0,0 +1 @@ +{"der": 10.14, "ter": 10.34, "dfee": 40.3, "dper": 53.2, "tfee": 40.9, "tper": 54.01, "uprn": 10097098977, "roofs": [{"description": {"value": "Average thermal transmittance 0.09 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.24 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.11 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": 1, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Excellent lighting efficiency", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "CV7 8UG", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 1, "created_at": "2025-11-27 16:51:29", "living_area": 22.4, "orientation": 4, "region_code": 6, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_flow_rate": 8, "shower_outlet_type": 3}, {"shower_wwhrs": 1, "shower_flow_rate": 8, "shower_outlet_type": 3}], "water_fuel_type": 1, "water_heating_code": 901, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 1, "heat_emitter_type": 1, "is_flue_fan_present": "true", "main_heating_number": 1, "control_index_number": 200122, "is_condensing_boiler": "true", "main_heating_control": 2110, "is_interlocked_system": "true", "main_heating_category": 2, "main_heating_fraction": 1, "gas_or_oil_boiler_type": 2, "main_heating_flue_type": 2, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 17929, "has_separate_delayed_start": "false", "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "condensing_boiler_heat_distribution": 55, "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "false", "has_cylinder_thermostat": "true", "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "true", "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 4}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 11, "lighting_efficacy": 90}, {"lighting_power": 8, "lighting_outlets": 13, "lighting_efficacy": 100}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.8 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Detached house", "language_code": 1, "property_type": 0, "pv_connection": 2, "address_line_1": "addr-bdfbac8dff3e", "assessment_date": "2025-11-27", "assessment_type": "SAP", "completion_date": "2025-11-27", "inspection_date": "2025-11-27", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "wet_rooms_count": 4, "air_permeability": 4.85, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 1, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 3, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500755, "is_mechanical_vent_approved_installer_scheme": "true"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 124, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2025-11-27", "sap_energy_source": {"pv_arrays": [{"pitch": 2, "peak_power": 2.68, "orientation": 6, "overshading": 1}], "electricity_tariff": 1}, "sap_opening_types": [{"name": "front door", "type": 1, "u_value": 1.4, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "utility rear door", "type": 2, "u_value": 1.1, "data_source": 2, "glazing_type": 7, "isargonfilled": "false"}, {"name": "garage door", "type": 1, "u_value": 0.82, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "glazing", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.46}, {"name": "french door", "type": 4, "u_value": 1.3, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.71}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 62.8, "lzc_energy_sources": [11], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 60.9}, {"name": "Roof (2)", "u_value": 0.14, "roof_type": 2, "kappa_value": 9, "total_roof_area": 1.4}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.24, "wall_type": 2, "kappa_value": 60, "total_wall_area": 161.77, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 152.3, "is_curtain_walling": "false"}, {"name": "Internal Wall (2)", "u_value": 0, "wall_type": 5, "kappa_value": 75, "total_wall_area": 55.2, "is_curtain_walling": "false"}], "sap_openings": [{"name": "front entrance", "type": "front door", "width": 2.1, "height": 1, "location": "Walls (1)", "orientation": 4}, {"name": "utility door", "type": "utility rear door", "width": 2.1, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "front", "type": "glazing", "width": 10.3, "height": 1, "location": "Walls (1)", "orientation": 4}, {"name": "rear", "type": "glazing", "width": 2.2, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "side", "type": "glazing", "width": 6, "height": 1, "location": "Walls (1)", "orientation": 6}, {"name": "side", "type": "glazing", "width": 4.5, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "side", "type": "french door", "width": 3.3, "height": 1, "location": "Walls (1)", "orientation": 2}], "construction_year": 2023, "sap_thermal_bridges": {"thermal_bridges": [{"length": 16.2, "psi_value": 0.043, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 5.1, "psi_value": 0.021, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 17.7, "psi_value": 0.009, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 42.9, "psi_value": 0.014, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 33.2, "psi_value": 0.054, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 18.6, "psi_value": 0.08, "psi_value_source": 1, "thermal_bridge_type": "E10"}, {"length": 13.1, "psi_value": 0.048, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 31.7, "psi_value": 0.003, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 19.96, "psi_value": 0.041, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 2.8, "psi_value": 0.15, "psi_value_source": 4, "thermal_bridge_type": "E24"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.11, "floor_type": 2, "kappa_value": 75, "storey_height": 2.39, "heat_loss_area": 62.8, "total_floor_area": 62.8}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.6, "heat_loss_area": 0, "total_floor_area": 60.9, "kappa_value_from_below": 9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 410, "currency": "GBP"}, "co2_emissions_current": 1.2, "energy_rating_average": 60, "energy_rating_current": 94, "lighting_cost_current": {"value": 66, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 410, "currency": "GBP"}, "hot_water_cost_current": {"value": 180, "currency": "GBP"}, "user_interface_version": "2.25.1", "co2_emissions_potential": 1.2, "energy_rating_potential": 94, "gas_smart_meter_present": "true", "lighting_cost_potential": {"value": 66, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 180, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 50, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "2.25.1", "energy_consumption_potential": 50, "environmental_impact_current": 90, "current_energy_efficiency_band": "A", "environmental_impact_potential": 90, "electricity_smart_meter_present": "true", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 9.6} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CV78UG/cert-9c0b5437b98b.json b/tests/fixtures/epc_prediction/CV78UG/cert-9c0b5437b98b.json new file mode 100644 index 00000000..9e2e1fd6 --- /dev/null +++ b/tests/fixtures/epc_prediction/CV78UG/cert-9c0b5437b98b.json @@ -0,0 +1 @@ +{"der": 9.18, "ter": 9.37, "dfee": 38.3, "dper": 46.33, "tfee": 38.9, "tper": 48.99, "uprn": 10097098979, "roofs": [{"description": {"value": "Average thermal transmittance 0.09 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.24 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.11 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": 1, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Excellent lighting efficiency", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "CV7 8UG", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 1, "created_at": "2025-11-26 14:37:29", "living_area": 16.9, "orientation": 2, "pv_diverter": "true", "region_code": 6, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_flow_rate": 8, "shower_outlet_type": 3}, {"shower_wwhrs": 1, "shower_flow_rate": 8, "shower_outlet_type": 3}, {"shower_wwhrs": 1, "shower_flow_rate": 8, "shower_outlet_type": 3}], "water_fuel_type": 1, "water_heating_code": 901, "hot_water_store_size": 180, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 1, "heat_emitter_type": 1, "is_flue_fan_present": "true", "main_heating_number": 1, "control_index_number": 200122, "is_condensing_boiler": "true", "main_heating_control": 2110, "is_interlocked_system": "true", "main_heating_category": 2, "main_heating_fraction": 1, "gas_or_oil_boiler_type": 1, "main_heating_flue_type": 2, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 18043, "has_separate_delayed_start": "false", "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "condensing_boiler_heat_distribution": 55, "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.4, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 4}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 14, "lighting_efficacy": 90}, {"lighting_power": 8, "lighting_outlets": 14, "lighting_efficacy": 100}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.6 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Detached house", "language_code": 1, "property_type": 0, "pv_connection": 2, "address_line_1": "addr-145c32e1d463", "assessment_date": "2025-11-26", "assessment_type": "SAP", "completion_date": "2025-11-26", "inspection_date": "2025-11-26", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "wet_rooms_count": 5, "air_permeability": 4.58, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 1, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 4, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500755, "is_mechanical_vent_approved_installer_scheme": "true"}, "battery_capacity": 0, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 138, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2025-11-26", "sap_energy_source": {"pv_arrays": [{"pitch": 2, "peak_power": 3.01, "orientation": 6, "overshading": 1}], "electricity_tariff": 1}, "sap_opening_types": [{"name": "front door", "type": 1, "u_value": 1.4, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "utility rear door", "type": 2, "u_value": 1.1, "data_source": 2, "glazing_type": 7, "isargonfilled": "false"}, {"name": "garage door", "type": 1, "u_value": 0.82, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "glazing", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.46}, {"name": "french door", "type": 4, "u_value": 1.3, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.71}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 69.1, "lzc_energy_sources": [11], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 69.1}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.24, "wall_type": 2, "kappa_value": 60, "total_wall_area": 165.34, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 183.5, "is_curtain_walling": "false"}, {"name": "Internal Wall (2)", "u_value": 0, "wall_type": 5, "kappa_value": 75, "total_wall_area": 61.2, "is_curtain_walling": "false"}], "sap_openings": [{"name": "front entrance", "type": "front door", "width": 2.1, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "utility door", "type": "utility rear door", "width": 2.1, "height": 1, "location": "Walls (1)", "orientation": 4}, {"name": "front", "type": "glazing", "width": 9.2, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "rear", "type": "glazing", "width": 6.9, "height": 1, "location": "Walls (1)", "orientation": 6}, {"name": "side", "type": "glazing", "width": 0.7, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "rear", "type": "french door", "width": 4.5, "height": 1, "location": "Walls (1)", "orientation": 6}], "construction_year": 2023, "sap_thermal_bridges": {"thermal_bridges": [{"length": 10.1, "psi_value": 0.043, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 6.9, "psi_value": 0.021, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 13.1, "psi_value": 0.009, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 40.2, "psi_value": 0.014, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 33.2, "psi_value": 0.054, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 17, "psi_value": 0.08, "psi_value_source": 1, "thermal_bridge_type": "E10"}, {"length": 16.2, "psi_value": 0.048, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 33.2, "psi_value": 0, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 19.96, "psi_value": 0.041, "psi_value_source": 1, "thermal_bridge_type": "E16"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.11, "floor_type": 2, "kappa_value": 75, "storey_height": 2.39, "heat_loss_area": 69.1, "total_floor_area": 69.1}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.6, "heat_loss_area": 0, "total_floor_area": 69.1, "kappa_value_from_below": 9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 428, "currency": "GBP"}, "co2_emissions_current": 1.2, "energy_rating_average": 60, "energy_rating_current": 93, "lighting_cost_current": {"value": 73, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 454, "currency": "GBP"}, "hot_water_cost_current": {"value": 134, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 28, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 95, "environmental_impact_rating": 92}], "user_interface_version": "2.25.1", "co2_emissions_potential": 1.1, "energy_rating_potential": 95, "gas_smart_meter_present": "true", "lighting_cost_potential": {"value": 73, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 153, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 44, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "2.25.1", "energy_consumption_potential": 44, "environmental_impact_current": 91, "current_energy_efficiency_band": "A", "environmental_impact_potential": 92, "electricity_smart_meter_present": "true", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 8.8} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CV78UG/cert-aef738e4b1c0.json b/tests/fixtures/epc_prediction/CV78UG/cert-aef738e4b1c0.json new file mode 100644 index 00000000..0516a4c8 --- /dev/null +++ b/tests/fixtures/epc_prediction/CV78UG/cert-aef738e4b1c0.json @@ -0,0 +1 @@ +{"der": 10.53, "ter": 10.72, "dfee": 42.1, "dper": 55.27, "tfee": 42.6, "tper": 56.05, "uprn": 10097098978, "roofs": [{"description": {"value": "Average thermal transmittance 0.09 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.24 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.11 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": 1, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Excellent lighting efficiency", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "CV7 8UG", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 1, "created_at": "2026-03-18 16:40:17", "living_area": 22.4, "orientation": 8, "region_code": 6, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_flow_rate": 8, "shower_outlet_type": 3}, {"shower_wwhrs": 1, "shower_flow_rate": 8, "shower_outlet_type": 3}], "water_fuel_type": 1, "water_heating_code": 901, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 1, "heat_emitter_type": 1, "is_flue_fan_present": "true", "main_heating_number": 1, "control_index_number": 200122, "is_condensing_boiler": "true", "main_heating_control": 2110, "is_interlocked_system": "true", "main_heating_category": 2, "main_heating_fraction": 1, "gas_or_oil_boiler_type": 2, "main_heating_flue_type": 2, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 17929, "has_separate_delayed_start": "false", "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "condensing_boiler_heat_distribution": 55, "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "false", "has_cylinder_thermostat": "true", "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "true", "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 4}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 11, "lighting_efficacy": 90}, {"lighting_power": 8, "lighting_outlets": 13, "lighting_efficacy": 100}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.7 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Detached house", "language_code": 1, "property_type": 0, "pv_connection": 2, "address_line_1": "addr-82d9bb86bdaa", "assessment_date": "2026-03-18", "assessment_type": "SAP", "completion_date": "2026-03-18", "inspection_date": "2026-03-18", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "wet_rooms_count": 4, "air_permeability": 4.74, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 1, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 3, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500755, "is_mechanical_vent_approved_installer_scheme": "true"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 124, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-03-18", "sap_energy_source": {"pv_arrays": [{"pitch": 2, "peak_power": 2.68, "orientation": 4, "overshading": 1}], "electricity_tariff": 1}, "sap_opening_types": [{"name": "front door", "type": 1, "u_value": 1.4, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "utility rear door", "type": 2, "u_value": 1.1, "data_source": 2, "glazing_type": 7, "isargonfilled": "false"}, {"name": "garage door", "type": 1, "u_value": 0.82, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "glazing", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.46}, {"name": "french door", "type": 4, "u_value": 1.3, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.71}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 62.8, "lzc_energy_sources": [11], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 60.9}, {"name": "Roof (2)", "u_value": 0.14, "roof_type": 2, "kappa_value": 9, "total_roof_area": 1.4}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.24, "wall_type": 2, "kappa_value": 60, "total_wall_area": 161.77, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 152.3, "is_curtain_walling": "false"}, {"name": "Internal Wall (2)", "u_value": 0, "wall_type": 5, "kappa_value": 75, "total_wall_area": 55.2, "is_curtain_walling": "false"}], "sap_openings": [{"name": "front entrance", "type": "front door", "width": 2.1, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "utility door", "type": "utility rear door", "width": 2.1, "height": 1, "location": "Walls (1)", "orientation": 4}, {"name": "front", "type": "glazing", "width": 10.3, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "rear", "type": "glazing", "width": 2.2, "height": 1, "location": "Walls (1)", "orientation": 4}, {"name": "side", "type": "glazing", "width": 6, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "side", "type": "glazing", "width": 4.5, "height": 1, "location": "Walls (1)", "orientation": 6}, {"name": "side", "type": "french door", "width": 3.3, "height": 1, "location": "Walls (1)", "orientation": 6}], "construction_year": 2023, "sap_thermal_bridges": {"thermal_bridges": [{"length": 16.2, "psi_value": 0.043, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 5.1, "psi_value": 0.021, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 17.7, "psi_value": 0.009, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 42.9, "psi_value": 0.014, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 33.2, "psi_value": 0.054, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 18.6, "psi_value": 0.08, "psi_value_source": 1, "thermal_bridge_type": "E10"}, {"length": 13.1, "psi_value": 0.048, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 31.7, "psi_value": 0, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 19.96, "psi_value": 0.041, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 2.8, "psi_value": 0.15, "psi_value_source": 4, "thermal_bridge_type": "E24"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.11, "floor_type": 2, "kappa_value": 75, "storey_height": 2.39, "heat_loss_area": 62.8, "total_floor_area": 62.8}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.6, "heat_loss_area": 0, "total_floor_area": 60.9, "kappa_value_from_below": 9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 426, "currency": "GBP"}, "co2_emissions_current": 1.2, "energy_rating_average": 60, "energy_rating_current": 94, "lighting_cost_current": {"value": 66, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 426, "currency": "GBP"}, "hot_water_cost_current": {"value": 180, "currency": "GBP"}, "user_interface_version": "2.26.17", "co2_emissions_potential": 1.2, "energy_rating_potential": 94, "gas_smart_meter_present": "true", "lighting_cost_potential": {"value": 66, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 180, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 53, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "2.26.17", "energy_consumption_potential": 53, "environmental_impact_current": 90, "current_energy_efficiency_band": "A", "environmental_impact_potential": 90, "electricity_smart_meter_present": "true", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 10.1} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CV78UG/cert-ba51394914cf.json b/tests/fixtures/epc_prediction/CV78UG/cert-ba51394914cf.json new file mode 100644 index 00000000..d4de2366 --- /dev/null +++ b/tests/fixtures/epc_prediction/CV78UG/cert-ba51394914cf.json @@ -0,0 +1 @@ +{"der": 9.66, "ter": 9.87, "dfee": 43.2, "dper": 48.91, "tfee": 43.6, "tper": 51.73, "uprn": 10097098985, "roofs": [{"description": {"value": "Average thermal transmittance 0.08 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.24 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.11 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": 1, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Excellent lighting efficiency", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "CV7 8UG", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 1, "created_at": "2025-12-08 14:33:22", "living_area": 21.6, "orientation": 2, "pv_diverter": "true", "region_code": 6, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_flow_rate": 8, "shower_outlet_type": 3}, {"shower_wwhrs": 1, "shower_flow_rate": 8, "shower_outlet_type": 3}, {"shower_wwhrs": 1, "shower_flow_rate": 8, "shower_outlet_type": 3}], "water_fuel_type": 1, "water_heating_code": 901, "hot_water_store_size": 180, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 1, "heat_emitter_type": 1, "is_flue_fan_present": "true", "main_heating_number": 1, "control_index_number": 200122, "is_condensing_boiler": "true", "main_heating_control": 2110, "is_interlocked_system": "true", "main_heating_category": 2, "main_heating_fraction": 1, "gas_or_oil_boiler_type": 1, "main_heating_flue_type": 2, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 18043, "has_separate_delayed_start": "false", "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "condensing_boiler_heat_distribution": 55, "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.4, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 4}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 14, "lighting_efficacy": 90}, {"lighting_power": 8, "lighting_outlets": 26, "lighting_efficacy": 100}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.3 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Detached house", "language_code": 1, "property_type": 0, "pv_connection": 2, "address_line_1": "addr-9c5f844e0a3e", "assessment_date": "2025-12-08", "assessment_type": "SAP", "completion_date": "2025-12-08", "inspection_date": "2025-12-08", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "wet_rooms_count": 6, "air_permeability": 4.35, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 1, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 5, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500755, "is_mechanical_vent_approved_installer_scheme": "true"}, "battery_capacity": 0, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 154, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2025-12-08", "sap_energy_source": {"pv_arrays": [{"pitch": 2, "peak_power": 2.35, "orientation": 6, "overshading": 1}, {"pitch": 2, "peak_power": 1, "orientation": 4, "overshading": 1}], "electricity_tariff": 1}, "sap_opening_types": [{"name": "front door", "type": 1, "u_value": 1.4, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "utility rear door", "type": 2, "u_value": 1.1, "data_source": 2, "glazing_type": 7, "isargonfilled": "false"}, {"name": "glazing", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.46}, {"name": "french door", "type": 4, "u_value": 1.3, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.71}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 76.9, "lzc_energy_sources": [11], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.08, "roof_type": 2, "kappa_value": 9, "total_roof_area": 76.9}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.24, "wall_type": 2, "kappa_value": 60, "total_wall_area": 189.4, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 175.3, "is_curtain_walling": "false"}, {"name": "Internal Wall (2)", "u_value": 0, "wall_type": 5, "kappa_value": 75, "total_wall_area": 64.8, "is_curtain_walling": "false"}], "sap_openings": [{"name": "front", "type": "front door", "width": 2.1, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "rear", "type": "utility rear door", "width": 2, "height": 1, "location": "Walls (1)", "orientation": 6}, {"name": "front", "type": "glazing", "width": 11.05, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "rear", "type": "glazing", "width": 3.55, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "rear french doors", "type": "french door", "width": 10, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "side", "type": "glazing", "width": 3.55, "height": 1, "location": "Walls (1)", "orientation": 4}, {"name": "side", "type": "glazing", "width": 4.75, "height": 1, "location": "Walls (1)", "orientation": 8}], "construction_year": 2023, "sap_thermal_bridges": {"thermal_bridges": [{"length": 17.7, "psi_value": 0.043, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 5.55, "psi_value": 0.021, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 16.5, "psi_value": 0.009, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 42.9, "psi_value": 0.014, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 38, "psi_value": 0.054, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 20, "psi_value": 0.08, "psi_value_source": 1, "thermal_bridge_type": "E10"}, {"length": 18, "psi_value": 0.048, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 38, "psi_value": 0.003, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 24.95, "psi_value": 0.041, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 4.99, "psi_value": 0.094, "psi_value_source": 1, "thermal_bridge_type": "E17"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.11, "floor_type": 2, "kappa_value": 75, "storey_height": 2.39, "heat_loss_area": 76.9, "total_floor_area": 76.9}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.6, "heat_loss_area": 0, "total_floor_area": 76.9, "kappa_value_from_below": 9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 514, "currency": "GBP"}, "co2_emissions_current": 1.4, "energy_rating_average": 60, "energy_rating_current": 93, "lighting_cost_current": {"value": 74, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 539, "currency": "GBP"}, "hot_water_cost_current": {"value": 123, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 26, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 95, "environmental_impact_rating": 91}], "user_interface_version": "2.25.1", "co2_emissions_potential": 1.4, "energy_rating_potential": 95, "gas_smart_meter_present": "true", "lighting_cost_potential": {"value": 74, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 153, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 47, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "2.25.1", "energy_consumption_potential": 47, "environmental_impact_current": 90, "current_energy_efficiency_band": "A", "environmental_impact_potential": 91, "electricity_smart_meter_present": "true", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 9.3} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CV78UG/cert-cd99c8b93a27.json b/tests/fixtures/epc_prediction/CV78UG/cert-cd99c8b93a27.json new file mode 100644 index 00000000..068d0447 --- /dev/null +++ b/tests/fixtures/epc_prediction/CV78UG/cert-cd99c8b93a27.json @@ -0,0 +1 @@ +{"der": 10.26, "ter": 10.54, "dfee": 35.8, "dper": 53.21, "tfee": 36.4, "tper": 55.04, "uprn": 10097098988, "roofs": [{"description": {"value": "Average thermal transmittance 0.11 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.23 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.12 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": 1, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Excellent lighting efficiency", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "CV7 8UG", "data_type": 2, "hot_water": {"description": {"value": "From main system, waste water heat recovery", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 2, "created_at": "2026-05-14 10:00:42", "living_area": 15.3, "orientation": 4, "pv_diverter": "true", "region_code": 6, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 2, "shower_flow_rate": 8, "shower_outlet_type": 3}, {"shower_wwhrs": 1, "shower_flow_rate": 8, "shower_outlet_type": 3}, {"shower_wwhrs": 1, "shower_flow_rate": 8, "shower_outlet_type": 3}], "water_fuel_type": 1, "water_heating_code": 901, "instantaneous_wwhrs": {"wwhrs_index_number1": 80179}, "hot_water_store_size": 210, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 1, "heat_emitter_type": 1, "is_flue_fan_present": "true", "main_heating_number": 1, "control_index_number": 200122, "is_condensing_boiler": "true", "main_heating_control": 2110, "is_interlocked_system": "true", "main_heating_category": 2, "main_heating_fraction": 1, "gas_or_oil_boiler_type": 1, "main_heating_flue_type": 2, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 18042, "has_separate_delayed_start": "false", "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "condensing_boiler_heat_distribution": 55, "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.48, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 4}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 11, "lighting_efficacy": 90}, {"lighting_power": 8, "lighting_outlets": 12, "lighting_efficacy": 100}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.5 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "pv_connection": 2, "address_line_1": "addr-9094c44c0add", "assessment_date": "2026-05-14", "assessment_type": "SAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "sap_ventilation": {"psv_count": 0, "wall_type": 1, "pressure_test": 1, "wet_rooms_count": 5, "air_permeability": 4.48, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 1, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 4, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500755, "is_mechanical_vent_approved_installer_scheme": "true"}, "battery_capacity": 0, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 113, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-14", "sap_energy_source": {"pv_arrays": [{"pitch": 2, "peak_power": 1.675, "orientation": 4, "overshading": 1}], "electricity_tariff": 1}, "sap_opening_types": [{"name": "front door", "type": 1, "u_value": 1.4, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "glazing", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.46}, {"name": "french door", "type": 4, "u_value": 1.3, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.71}, {"name": "roof light", "type": 6, "u_value": 1.6, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.55}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 42.9, "lzc_energy_sources": [11], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 22.09}, {"name": "Roof (2)", "u_value": 0.11, "roof_type": 2, "kappa_value": 9, "total_roof_area": 8.55}, {"name": "Roof (3)", "u_value": 0.15, "roof_type": 2, "kappa_value": 9, "total_roof_area": 7.63}, {"name": "Roof (4)", "u_value": 0.16, "roof_type": 2, "kappa_value": 9, "total_roof_area": 1.8}, {"name": "Roof (5)", "u_value": 0.11, "roof_type": 2, "kappa_value": 9, "total_roof_area": 1.5}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.24, "wall_type": 2, "kappa_value": 60, "total_wall_area": 47.04, "is_curtain_walling": "false"}, {"name": "Walls (2)", "u_value": 0.26, "wall_type": 2, "kappa_value": 60, "total_wall_area": 47.06, "is_curtain_walling": "false"}, {"name": "Walls (3)", "u_value": 0.23, "wall_type": 2, "kappa_value": 9, "total_wall_area": 15.1, "is_curtain_walling": "false"}, {"name": "Walls (4)", "u_value": 0.11, "wall_type": 2, "kappa_value": 9, "total_wall_area": 10.9, "is_curtain_walling": "false"}, {"name": "Walls (5)", "u_value": 0.26, "wall_type": 2, "kappa_value": 9, "total_wall_area": 2.85, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 70, "total_wall_area": 44, "is_curtain_walling": "false"}, {"name": "Party Wall (2)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 15.1, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 132.9, "is_curtain_walling": "false"}, {"name": "Internal Wall (2)", "u_value": 0, "wall_type": 5, "kappa_value": 75, "total_wall_area": 20.2, "is_curtain_walling": "false"}], "sap_openings": [{"name": "front entrance", "type": "front door", "width": 2.1, "height": 1, "location": "Walls (1)", "orientation": 4}, {"name": "Front", "type": "glazing", "width": 3.95, "height": 1, "location": "Walls (1)", "orientation": 4}, {"name": "Rear", "type": "glazing", "width": 2.99, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "French Door", "type": "french door", "width": 7.06, "height": 1, "location": "Walls (2)", "orientation": 8}, {"name": "Side", "type": "glazing", "width": 1.5, "height": 1, "location": "Walls (1)", "orientation": 6}, {"name": "Side", "type": "glazing", "width": 0.85, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "Front dormer", "type": "glazing", "width": 1.5, "height": 1, "location": "Walls (5)", "orientation": 4}], "construction_year": 2023, "sap_thermal_bridges": {"thermal_bridges": [{"length": 8.29, "psi_value": 0.043, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 4.42, "psi_value": 0.021, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 8.1, "psi_value": 0.009, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 24, "psi_value": 0.014, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 19.6, "psi_value": 0.054, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 4.85, "psi_value": 0.048, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 36.2, "psi_value": 0.003, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 10, "psi_value": 0.041, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 10, "psi_value": 0.042, "psi_value_source": 1, "thermal_bridge_type": "E18"}, {"length": 8.8, "psi_value": 0.04, "psi_value_source": 1, "thermal_bridge_type": "P1"}, {"length": 17.6, "psi_value": 0, "psi_value_source": 1, "thermal_bridge_type": "P2"}, {"length": 4.85, "psi_value": 0.037, "psi_value_source": 1, "thermal_bridge_type": "P4"}, {"length": 9.3, "psi_value": 0.047, "psi_value_source": 1, "thermal_bridge_type": "E11"}, {"length": 5.7, "psi_value": 0.041, "psi_value_source": 1, "thermal_bridge_type": "E13"}, {"length": 5.7, "psi_value": 0.07, "psi_value_source": 1, "thermal_bridge_type": "P5"}, {"length": 1.2, "psi_value": 0.029, "psi_value_source": 1, "thermal_bridge_type": "R1"}, {"length": 1.2, "psi_value": 0.071, "psi_value_source": 1, "thermal_bridge_type": "R2"}, {"length": 2.4, "psi_value": 0.033, "psi_value_source": 1, "thermal_bridge_type": "R3"}, {"length": 5.2, "psi_value": -0.022, "psi_value_source": 1, "thermal_bridge_type": "R7"}, {"length": 4.4, "psi_value": 0.029, "psi_value_source": 1, "thermal_bridge_type": "R9"}, {"length": 9.2, "psi_value": 0.031, "psi_value_source": 1, "thermal_bridge_type": "R6"}, {"length": 2.7, "psi_value": 0.15, "psi_value_source": 4, "thermal_bridge_type": "E24"}, {"length": 1.1, "psi_value": 0.12, "psi_value_source": 1, "thermal_bridge_type": "R1"}, {"length": 1.1, "psi_value": 0.11, "psi_value_source": 1, "thermal_bridge_type": "R2"}, {"length": 3.92, "psi_value": 0.04, "psi_value_source": 1, "thermal_bridge_type": "R3"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.12, "floor_type": 2, "kappa_value": 75, "storey_height": 2.39, "heat_loss_area": 42.9, "total_floor_area": 42.9}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.6, "heat_loss_area": 0, "total_floor_area": 40.9, "kappa_value_from_below": 9}, {"storey": 2, "u_value": 0, "floor_type": 3, "storey_height": 2.55, "heat_loss_area": 0, "total_floor_area": 29.2}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 373, "currency": "GBP"}, "co2_emissions_current": 1.1, "energy_rating_average": 60, "energy_rating_current": 91, "lighting_cost_current": {"value": 64, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 398, "currency": "GBP"}, "hot_water_cost_current": {"value": 184, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 39, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 92, "environmental_impact_rating": 92}], "user_interface_version": "3.1.57", "co2_emissions_potential": 1.0, "energy_rating_potential": 92, "gas_smart_meter_present": "true", "lighting_cost_potential": {"value": 64, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 154, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 51, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 46, "environmental_impact_current": 90, "current_energy_efficiency_band": "B", "environmental_impact_potential": 92, "electricity_smart_meter_present": "true", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 9.9} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/CV78UG/cert-e8197b1db767.json b/tests/fixtures/epc_prediction/CV78UG/cert-e8197b1db767.json new file mode 100644 index 00000000..65e87e62 --- /dev/null +++ b/tests/fixtures/epc_prediction/CV78UG/cert-e8197b1db767.json @@ -0,0 +1 @@ +{"der": 10.0, "ter": 10.29, "dfee": 34.5, "dper": 51.82, "tfee": 35.3, "tper": 53.73, "uprn": 10097098984, "roofs": [{"description": {"value": "Average thermal transmittance 0.11 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.23 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.12 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": 1, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Excellent lighting efficiency", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "CV7 8UG", "data_type": 2, "hot_water": {"description": {"value": "From main system, waste water heat recovery", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 2, "created_at": "2026-04-22 13:37:32", "living_area": 15.3, "orientation": 8, "pv_diverter": "true", "region_code": 6, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 2, "shower_flow_rate": 8, "shower_outlet_type": 3}, {"shower_wwhrs": 1, "shower_flow_rate": 8, "shower_outlet_type": 3}, {"shower_wwhrs": 1, "shower_flow_rate": 8, "shower_outlet_type": 3}], "water_fuel_type": 1, "water_heating_code": 901, "instantaneous_wwhrs": {"wwhrs_index_number1": 80179}, "hot_water_store_size": 210, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 1, "heat_emitter_type": 1, "is_flue_fan_present": "true", "main_heating_number": 1, "control_index_number": 200122, "is_condensing_boiler": "true", "main_heating_control": 2110, "is_interlocked_system": "true", "main_heating_category": 2, "main_heating_fraction": 1, "gas_or_oil_boiler_type": 1, "main_heating_flue_type": 2, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 18042, "has_separate_delayed_start": "false", "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "condensing_boiler_heat_distribution": 55, "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.48, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 4}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 11, "lighting_efficacy": 90}, {"lighting_power": 8, "lighting_outlets": 12, "lighting_efficacy": 100}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.5 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "pv_connection": 2, "address_line_1": "addr-975406041479", "assessment_date": "2026-04-22", "assessment_type": "SAP", "completion_date": "2026-04-22", "inspection_date": "2026-04-22", "sap_ventilation": {"psv_count": 0, "wall_type": 1, "pressure_test": 1, "wet_rooms_count": 5, "air_permeability": 4.48, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 1, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 4, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500755, "is_mechanical_vent_approved_installer_scheme": "true"}, "battery_capacity": 0, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 113, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-04-22", "sap_energy_source": {"pv_arrays": [{"pitch": 2, "peak_power": 1.67, "orientation": 4, "overshading": 1}], "electricity_tariff": 1}, "sap_opening_types": [{"name": "front door", "type": 1, "u_value": 1.4, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "glazing", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.46}, {"name": "french door", "type": 4, "u_value": 1.3, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.71}, {"name": "roof light", "type": 6, "u_value": 1.6, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.55}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 42.9, "lzc_energy_sources": [11], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 22.09}, {"name": "Roof (2)", "u_value": 0.11, "roof_type": 2, "kappa_value": 9, "total_roof_area": 8.55}, {"name": "Roof (3)", "u_value": 0.15, "roof_type": 2, "kappa_value": 9, "total_roof_area": 7.63}, {"name": "Roof (4)", "u_value": 0.16, "roof_type": 2, "kappa_value": 9, "total_roof_area": 1.8}, {"name": "Roof (5)", "u_value": 0.11, "roof_type": 2, "kappa_value": 9, "total_roof_area": 1.5}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.24, "wall_type": 2, "kappa_value": 60, "total_wall_area": 47.04, "is_curtain_walling": "false"}, {"name": "Walls (2)", "u_value": 0.26, "wall_type": 2, "kappa_value": 60, "total_wall_area": 47.06, "is_curtain_walling": "false"}, {"name": "Walls (3)", "u_value": 0.23, "wall_type": 2, "kappa_value": 9, "total_wall_area": 15.1, "is_curtain_walling": "false"}, {"name": "Walls (4)", "u_value": 0.11, "wall_type": 2, "kappa_value": 9, "total_wall_area": 10.9, "is_curtain_walling": "false"}, {"name": "Walls (5)", "u_value": 0.26, "wall_type": 2, "kappa_value": 9, "total_wall_area": 2.85, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 70, "total_wall_area": 44, "is_curtain_walling": "false"}, {"name": "Party Wall (2)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 15.1, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 132.9, "is_curtain_walling": "false"}, {"name": "Internal Wall (2)", "u_value": 0, "wall_type": 5, "kappa_value": 75, "total_wall_area": 20.2, "is_curtain_walling": "false"}], "sap_openings": [{"name": "front entrance", "type": "front door", "width": 2.1, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "Front", "type": "glazing", "width": 3.95, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "Rear", "type": "glazing", "width": 2.99, "height": 1, "location": "Walls (1)", "orientation": 4}, {"name": "French Door", "type": "french door", "width": 7.06, "height": 1, "location": "Walls (2)", "orientation": 4}, {"name": "Side", "type": "glazing", "width": 1.5, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "Side", "type": "glazing", "width": 0.85, "height": 1, "location": "Walls (1)", "orientation": 6}, {"name": "Front dormer", "type": "glazing", "width": 1.5, "height": 1, "location": "Walls (5)", "orientation": 8}], "construction_year": 2023, "sap_thermal_bridges": {"thermal_bridges": [{"length": 8.29, "psi_value": 0.043, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 4.42, "psi_value": 0.021, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 8.1, "psi_value": 0.009, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 24, "psi_value": 0.014, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 19.6, "psi_value": 0.054, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 4.85, "psi_value": 0.048, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 36.2, "psi_value": 0, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 10, "psi_value": 0.041, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 10, "psi_value": 0.042, "psi_value_source": 1, "thermal_bridge_type": "E18"}, {"length": 8.8, "psi_value": 0.04, "psi_value_source": 1, "thermal_bridge_type": "P1"}, {"length": 17.6, "psi_value": 0, "psi_value_source": 1, "thermal_bridge_type": "P2"}, {"length": 4.85, "psi_value": 0.037, "psi_value_source": 1, "thermal_bridge_type": "P4"}, {"length": 9.3, "psi_value": 0.047, "psi_value_source": 1, "thermal_bridge_type": "E11"}, {"length": 5.7, "psi_value": 0.041, "psi_value_source": 1, "thermal_bridge_type": "E13"}, {"length": 5.7, "psi_value": 0.07, "psi_value_source": 1, "thermal_bridge_type": "P5"}, {"length": 1.2, "psi_value": 0.029, "psi_value_source": 1, "thermal_bridge_type": "R1"}, {"length": 1.2, "psi_value": 0.071, "psi_value_source": 1, "thermal_bridge_type": "R2"}, {"length": 2.4, "psi_value": 0.033, "psi_value_source": 1, "thermal_bridge_type": "R3"}, {"length": 5.2, "psi_value": -0.022, "psi_value_source": 1, "thermal_bridge_type": "R7"}, {"length": 4.4, "psi_value": 0.029, "psi_value_source": 1, "thermal_bridge_type": "R9"}, {"length": 9.2, "psi_value": 0.031, "psi_value_source": 1, "thermal_bridge_type": "R6"}, {"length": 2.7, "psi_value": 0.15, "psi_value_source": 4, "thermal_bridge_type": "E24"}, {"length": 1.1, "psi_value": 0.12, "psi_value_source": 1, "thermal_bridge_type": "R1"}, {"length": 1.1, "psi_value": 0.11, "psi_value_source": 1, "thermal_bridge_type": "R2"}, {"length": 3.92, "psi_value": 0.04, "psi_value_source": 1, "thermal_bridge_type": "R3"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.12, "floor_type": 2, "kappa_value": 75, "storey_height": 2.39, "heat_loss_area": 42.9, "total_floor_area": 42.9}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.6, "heat_loss_area": 0, "total_floor_area": 40.9, "kappa_value_from_below": 9}, {"storey": 2, "u_value": 0, "floor_type": 3, "storey_height": 2.55, "heat_loss_area": 0, "total_floor_area": 29.2}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 363, "currency": "GBP"}, "co2_emissions_current": 1.1, "energy_rating_average": 60, "energy_rating_current": 91, "lighting_cost_current": {"value": 64, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 387, "currency": "GBP"}, "hot_water_cost_current": {"value": 184, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 39, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 93, "environmental_impact_rating": 92}], "user_interface_version": "3.1.57", "co2_emissions_potential": 1.0, "energy_rating_potential": 93, "gas_smart_meter_present": "true", "lighting_cost_potential": {"value": 64, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 154, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 50, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 45, "environmental_impact_current": 91, "current_energy_efficiency_band": "B", "environmental_impact_potential": 92, "electricity_smart_meter_present": "true", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 9.6} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/DN327BH/cert-0402dc341842.json b/tests/fixtures/epc_prediction/DN327BH/cert-0402dc341842.json new file mode 100644 index 00000000..677b35fc --- /dev/null +++ b/tests/fixtures/epc_prediction/DN327BH/cert-0402dc341842.json @@ -0,0 +1 @@ +{"uprn": 11048258, "roofs": [{"description": "Pitched, 300 mm loft insulation", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "DN32 7BH", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 3, "created_at": "2023-05-25 21:00:57", "door_count": 2, "glazed_area": 1, "glazing_gap": "16+", "region_code": 3, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17507}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "End-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-6b27735c1d23", "assessment_type": "RdSAP", "completion_date": "2023-05-25", "inspection_date": "2023-05-25", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 77, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2023-05-25", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.34, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 39.52, "quantity": "square metres"}, "party_wall_length": {"value": 4.8, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 22.2, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.36, "quantity": "metres"}, "total_floor_area": {"value": 37.92, "quantity": "square metres"}, "party_wall_length": {"value": 4.8, "quantity": "metres"}, "heat_loss_perimeter": {"value": 20.6, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "E", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "300mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 1361, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.4, "energy_rating_average": 60, "energy_rating_current": 66, "lighting_cost_current": {"value": 124, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 964, "currency": "GBP"}, "hot_water_cost_current": {"value": 213, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 303, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 70}, {"sequence": 2, "typical_saving": {"value": 94, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 72}, {"sequence": 3, "typical_saving": {"value": 75, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 74}, {"sequence": 4, "typical_saving": {"value": 688, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 84}], "co2_emissions_potential": 1.4, "energy_rating_potential": 86, "lighting_cost_potential": {"value": 124, "currency": "GBP"}, "schema_version_original": "20.0.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 163, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 75, "environmental_impact_rating": 74}}], "hot_water_cost_potential": {"value": 139, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1944, "impact_of_cavity_insulation": -2817, "space_heating_existing_dwelling": 11113}, "energy_consumption_current": 248, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.11r0005", "energy_consumption_potential": 97, "environmental_impact_current": 62, "fixed_lighting_outlets_count": 8, "current_energy_efficiency_band": "D", "environmental_impact_potential": 84, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 44, "low_energy_fixed_lighting_outlets_count": 8} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/DN327BH/cert-0c3791e9d4ff.json b/tests/fixtures/epc_prediction/DN327BH/cert-0c3791e9d4ff.json new file mode 100644 index 00000000..a30e9c3a --- /dev/null +++ b/tests/fixtures/epc_prediction/DN327BH/cert-0c3791e9d4ff.json @@ -0,0 +1 @@ +{"uprn": 11028505, "roofs": [{"description": "Pitched, 250 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Solid, limited insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Low energy lighting in 78% of fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "DN32 7BH", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 3, "created_at": "2024-12-09 18:41:00", "door_count": 2, "glazed_area": 1, "glazing_gap": 6, "region_code": 3, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2103, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17548}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "End-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-9950edfc3565", "assessment_type": "RdSAP", "completion_date": "2024-12-09", "inspection_date": "2024-12-09", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 74, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2024-12-09", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 270, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.35, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 36.99, "quantity": "square metres"}, "party_wall_length": {"value": 4.78, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 20.26, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.36, "quantity": "metres"}, "total_floor_area": {"value": 36.99, "quantity": "square metres"}, "party_wall_length": {"value": 4.78, "quantity": "metres"}, "heat_loss_perimeter": {"value": 20.26, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "I", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "250mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 78, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 614, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.6, "energy_rating_average": 60, "energy_rating_current": 72, "lighting_cost_current": {"value": 107, "currency": "GBP"}, "main_heating_controls": [{"description": "Room thermostat only", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 617, "currency": "GBP"}, "hot_water_cost_current": {"value": 179, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 60, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 73}, {"sequence": 2, "typical_saving": {"value": 468, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 85, "environmental_impact_rating": 83}], "co2_emissions_potential": 1.4, "energy_rating_potential": 85, "lighting_cost_potential": {"value": 107, "currency": "GBP"}, "schema_version_original": "20.0.0", "hot_water_cost_potential": {"value": 115, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2540, "space_heating_existing_dwelling": 6944}, "energy_consumption_current": 202, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.13r0002", "energy_consumption_potential": 106, "environmental_impact_current": 70, "fixed_lighting_outlets_count": 9, "current_energy_efficiency_band": "C", "environmental_impact_potential": 83, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 35, "low_energy_fixed_lighting_outlets_count": 7} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/DN327BH/cert-836df153600a.json b/tests/fixtures/epc_prediction/DN327BH/cert-836df153600a.json new file mode 100644 index 00000000..4dbd8540 --- /dev/null +++ b/tests/fixtures/epc_prediction/DN327BH/cert-836df153600a.json @@ -0,0 +1 @@ +{"uprn": 11010967, "roofs": [{"description": "Pitched, 300 mm loft insulation", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "DN32 7BH", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2023-05-25 21:02:57", "door_count": 2, "glazed_area": 1, "glazing_gap": "16+", "region_code": 3, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17511}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Mid-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-534b7b0d0613", "assessment_type": "RdSAP", "completion_date": "2023-05-25", "inspection_date": "2023-05-25", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 77, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2023-05-25", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.34, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 39.52, "quantity": "square metres"}, "party_wall_length": {"value": 8.1, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 18.9, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.36, "quantity": "metres"}, "total_floor_area": {"value": 37.92, "quantity": "square metres"}, "party_wall_length": {"value": 8.1, "quantity": "metres"}, "heat_loss_perimeter": {"value": 17.3, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "E", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "300mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 1231, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.1, "energy_rating_average": 60, "energy_rating_current": 69, "lighting_cost_current": {"value": 124, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 896, "currency": "GBP"}, "hot_water_cost_current": {"value": 198, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 252, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 72}, {"sequence": 2, "typical_saving": {"value": 82, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 74}, {"sequence": 3, "typical_saving": {"value": 74, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 76}, {"sequence": 4, "typical_saving": {"value": 688, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 87, "environmental_impact_rating": 86}], "co2_emissions_potential": 1.2, "energy_rating_potential": 87, "lighting_cost_potential": {"value": 124, "currency": "GBP"}, "schema_version_original": "20.0.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 134, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 76, "environmental_impact_rating": 76}}], "hot_water_cost_potential": {"value": 124, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1815, "impact_of_cavity_insulation": -2348, "space_heating_existing_dwelling": 9927}, "energy_consumption_current": 224, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.11r0005", "energy_consumption_potential": 83, "environmental_impact_current": 66, "fixed_lighting_outlets_count": 7, "current_energy_efficiency_band": "C", "environmental_impact_potential": 86, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 40, "low_energy_fixed_lighting_outlets_count": 7} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/DN327BH/cert-b2f03024d9a1.json b/tests/fixtures/epc_prediction/DN327BH/cert-b2f03024d9a1.json new file mode 100644 index 00000000..fea8c1e7 --- /dev/null +++ b/tests/fixtures/epc_prediction/DN327BH/cert-b2f03024d9a1.json @@ -0,0 +1 @@ +{"uprn": 11010968, "roofs": [{"description": "Pitched, 150 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": "Good lighting efficiency", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "DN32 7BH", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2026-05-14 10:00:17", "door_count": 2, "region_code": 3, "report_type": 2, "sap_heating": {"number_baths": 1, "cylinder_size": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_outlet_type": 2}], "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17507}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "true", "glazing_gap": 12, "orientation": 2, "window_type": 1, "glazing_type": 3, "window_width": 0.88, "window_height": 1, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 2, "window_type": 1, "glazing_type": 3, "window_width": 0.6, "window_height": 0.6, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 2, "window_type": 1, "glazing_type": 3, "window_width": 0.88, "window_height": 1, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 2, "window_type": 1, "glazing_type": 3, "window_width": 0.88, "window_height": 1, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 6, "window_type": 1, "glazing_type": 3, "window_width": 1.8, "window_height": 1, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 6, "window_type": 1, "glazing_type": 3, "window_width": 1.8, "window_height": 1, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 6, "window_type": 1, "glazing_type": 3, "window_width": 1.8, "window_height": 1.45, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 6, "window_type": 1, "glazing_type": 3, "window_width": 1.8, "window_height": 1, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 6, "window_type": 1, "glazing_type": 3, "window_width": 0.9, "window_height": 1.45, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 3, "window_type": 1, "glazing_type": 3, "window_width": 0.9, "window_height": 0.5, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Mid-terrace house", "language_code": 1, "pressure_test": 4, "property_type": 0, "address_line_1": "addr-932786858923", "assessment_type": "RdSAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-13", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 80, "transaction_type": 14, "conservatory_type": 1, "heated_room_count": 4, "registration_date": "2026-05-14", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "false", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 2, "electricity_smart_meter_present": "false"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "extract_fans_count": 2, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.34, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 40.77, "quantity": "square metres"}, "party_wall_length": {"value": 9.74, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 18.73, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.33, "quantity": "metres"}, "total_floor_area": {"value": 38.81, "quantity": "square metres"}, "party_wall_length": {"value": 9.74, "quantity": "metres"}, "heat_loss_perimeter": {"value": 15.94, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "E", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "150mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 1008, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.9, "energy_rating_average": 60, "energy_rating_current": 66, "lighting_cost_current": {"value": 53, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 737, "currency": "GBP"}, "hot_water_cost_current": {"value": 291, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 212, "currency": "GBP"}, "indicative_cost": "\u00a3900 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 75}, {"sequence": 2, "typical_saving": {"value": 59, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a310,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 77}, {"sequence": 3, "typical_saving": {"value": 231, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 78}], "co2_emissions_potential": 2.1, "energy_rating_potential": 77, "lighting_cost_potential": {"value": 53, "currency": "GBP"}, "schema_version_original": "21.0.1", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 60, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 73, "environmental_impact_rating": 77}], "hot_water_cost_potential": {"value": 291, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2112.43, "space_heating_existing_dwelling": 10406.78}, "draughtproofed_door_count": 2, "energy_consumption_current": 209, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "5.02r0344", "energy_consumption_potential": 140, "environmental_impact_current": 68, "current_energy_efficiency_band": "D", "environmental_impact_potential": 78, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 37, "low_energy_fixed_lighting_bulbs_count": 8, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/DN327BH/cert-c48e73075389.json b/tests/fixtures/epc_prediction/DN327BH/cert-c48e73075389.json new file mode 100644 index 00000000..51d51784 --- /dev/null +++ b/tests/fixtures/epc_prediction/DN327BH/cert-c48e73075389.json @@ -0,0 +1 @@ +{"uprn": 11044320, "roofs": [{"description": {"value": "Pitched, 300 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Cavity wall, as built, partial insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "floors": [{"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in 70% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "DN32 7BH", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2021-02-16 16:27:40.904043", "door_count": 2, "glazed_area": 1, "glazing_gap": 12, "region_code": 3, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "mcs_installed_heat_pump": "false", "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 9897}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 38}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Mid-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-f9478832a25f", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2021-02-16", "inspection_date": "2021-02-16", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 78, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2021-02-16", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 280, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.28, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 39.84, "quantity": "square metres"}, "party_wall_length": {"value": 9.68, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 18.44, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.32, "quantity": "metres"}, "total_floor_area": {"value": 38.28, "quantity": "square metres"}, "party_wall_length": {"value": 9.68, "quantity": "metres"}, "heat_loss_perimeter": {"value": 15.82, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "F", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "300mm", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 70, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 489, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3, "energy_rating_average": 60, "energy_rating_current": 69, "lighting_cost_current": {"value": 84, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 387, "currency": "GBP"}, "hot_water_cost_current": {"value": 121, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 72, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 71}, {"sequence": 2, "typical_saving": {"value": 33, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 73}, {"sequence": 3, "typical_saving": {"value": 18, "currency": "GBP"}, "indicative_cost": "\u00a315", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 74}, {"sequence": 4, "typical_saving": {"value": 41, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 77}, {"sequence": 5, "typical_saving": {"value": 353, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 87, "environmental_impact_rating": 86}], "co2_emissions_potential": 1.2, "energy_rating_potential": 87, "lighting_cost_potential": {"value": 65, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 12, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 73, "environmental_impact_rating": 72}}], "hot_water_cost_potential": {"value": 77, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2646, "impact_of_cavity_insulation": -1690, "space_heating_existing_dwelling": 8463}, "energy_consumption_current": 220, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "v94.0.1.1", "energy_consumption_potential": 82, "environmental_impact_current": 67, "fixed_lighting_outlets_count": 10, "current_energy_efficiency_band": "C", "environmental_impact_potential": 86, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 39, "low_energy_fixed_lighting_outlets_count": 7} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/E153FA/cert-0348cfa1f7fb.json b/tests/fixtures/epc_prediction/E153FA/cert-0348cfa1f7fb.json new file mode 100644 index 00000000..2dec0562 --- /dev/null +++ b/tests/fixtures/epc_prediction/E153FA/cert-0348cfa1f7fb.json @@ -0,0 +1 @@ +{"uprn": 10093129134, "roofs": [{"description": "Average thermal transmittance 0.17 W/m\u00b2K", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Average thermal transmittance 0.26 W/m\u00b2K", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": "Average thermal transmittance 0.13 W/m\u00b2K", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": 1, "windows": {"description": "High performance glazing", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "E15 3FA", "data_type": 5, "hot_water": {"description": "Electric immersion, standard tariff", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}, "post_town": "", "created_at": "2016-06-23 09:44:31", "living_area": 24, "orientation": 7, "region_code": 17, "report_type": 3, "sap_heating": {"water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"main_fuel_type": 39, "main_heating_code": 691, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2603, "main_heating_category": 10, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 3, "has_separate_delayed_start": "false", "load_or_weather_compensation": 0}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "sap_heating_design_water_use": 1, "hot_water_store_insulation_type": 1, "hot_water_store_insulation_thickness": 75}, "sap_version": 9.92, "schema_type": "SAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Room heaters, electric", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}], "dwelling_type": "Ground-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-f07c39bdd151", "address_line_2": "", "assessment_date": "2015-03-09", "assessment_type": "SAP", "completion_date": "2016-06-23", "inspection_date": "2015-03-09", "sap_ventilation": {"psv_count": 0, "pressure_test": 6, "draughtstripping": 3, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "true", "extract_fans_count": 3, "open_fireplaces_count": 0, "sheltered_sides_count": 2, "flueless_gas_fires_count": 0}, "design_water_use": 1, "sap_data_version": 9.92, "sap_flat_details": {"level": 1}, "total_floor_area": 46, "transaction_type": 5, "conservatory_type": 1, "registration_date": "2016-06-23", "sap_energy_source": {"electricity_tariff": 1, "wind_turbines_count": 0, "wind_turbine_terrain_type": 2, "fixed_lighting_outlets_count": 10, "low_energy_fixed_lighting_outlets_count": 10, "low_energy_fixed_lighting_outlets_percentage": 100}, "sap_opening_types": [{"name": "Windows (1)", "type": 4, "u_value": 1.29, "frame_type": 1, "data_source": 2, "description": "Data from Manufacturer", "frame_factor": 0.7, "glazing_type": 6, "solar_transmittance": 0.76}], "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"sap_roofs": [{"name": "Flat Roof", "u_value": 0.17, "roof_type": 2, "kappa_value": 9, "total_roof_area": 19.5}], "sap_walls": [{"name": "Existing Wall", "u_value": 0.26, "wall_type": 2, "kappa_value": 17, "total_wall_area": 31.2, "is_curtain_walling": "false"}, {"name": "Party Wall", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 81.9}], "identifier": "Main Dwelling", "overshading": 2, "sap_openings": [{"name": 1, "type": "Windows (1)", "width": 0, "height": 0, "location": "Existing Wall", "orientation": 7}], "construction_year": 2015, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.13, "floor_type": 2, "kappa_value": 110, "storey_height": 3.9, "heat_loss_area": 46.4, "total_floor_area": 46.4}]}], "heating_cost_current": {"value": 345, "currency": "GBP"}, "co2_emissions_current": 2.1, "energy_rating_average": 60, "energy_rating_current": 59, "lighting_cost_current": {"value": 40, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and appliance thermostats", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 345, "currency": "GBP"}, "hot_water_cost_current": {"value": 229, "currency": "GBP"}, "co2_emissions_potential": 2.1, "energy_rating_potential": 59, "lighting_cost_potential": {"value": 40, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "hot_water_cost_potential": {"value": 229, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "renewable_heat_incentive": {"rhi_existing_dwelling": {"water_heating": 1495, "space_heating_existing_dwelling": 2249}}, "seller_commission_report": "Y", "energy_consumption_current": 265, "has_fixed_air_conditioning": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "Version: 1.0.3.4", "energy_consumption_potential": 265, "environmental_impact_current": 63, "current_energy_efficiency_band": "D", "environmental_impact_potential": 63, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "D", "co2_emissions_current_per_floor_area": 45} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/E153FA/cert-05dd23b424ce.json b/tests/fixtures/epc_prediction/E153FA/cert-05dd23b424ce.json new file mode 100644 index 00000000..a4e6331a --- /dev/null +++ b/tests/fixtures/epc_prediction/E153FA/cert-05dd23b424ce.json @@ -0,0 +1 @@ +{"uprn": 10093129143, "roofs": [{"description": "(another dwelling above)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": "System built, as built, insulated (assumed)", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": "(another dwelling below)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "E15 3FA", "hot_water": {"description": "Electric immersion, off-peak", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "post_town": "", "built_form": 4, "created_at": "2025-03-19 06:49:15", "door_count": 0, "glazed_area": 1, "glazing_gap": "16+", "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 4, "water_heating_code": 903, "water_heating_fuel": 29, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 2, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 29, "heat_emitter_type": 0, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2603, "main_heating_category": 10, "main_heating_fraction": 1, "sap_main_heating_code": 691, "main_heating_data_source": 2}], "immersion_heating_type": 1, "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Room heaters, electric", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}], "dwelling_type": "Mid-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-53dbe812ea2e", "address_line_2": "", "address_line_3": "", "assessment_type": "RdSAP", "completion_date": "2025-03-19", "inspection_date": "2025-02-17", "extensions_count": 0, "measurement_type": 1, "sap_flat_details": {"level": 2, "top_storey": "N", "flat_location": 1, "heat_loss_corridor": 1}, "total_floor_area": 37, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 2, "pvc_window_frames": "true", "registration_date": "2025-03-19", "sap_energy_source": {"mains_gas": "N", "meter_type": 3, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 1}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 6, "roof_construction": 3, "wall_construction": 8, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.55, "quantity": "metres"}, "total_floor_area": {"value": 36.9, "quantity": "square metres"}, "party_wall_length": {"value": 18.26, "quantity": "metres"}, "heat_loss_perimeter": {"value": 6.04, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "L", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": "ND", "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 2, "heating_cost_current": {"value": 66, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 1.1, "energy_rating_average": 60, "energy_rating_current": 84, "lighting_cost_current": {"value": 56, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and appliance thermostats", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 39, "currency": "GBP"}, "hot_water_cost_current": {"value": 266, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 86, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "L2", "improvement_details": {"improvement_number": 62}, "improvement_category": 5, "energy_performance_rating": 87, "environmental_impact_rating": 80}], "co2_emissions_potential": 1.1, "energy_rating_potential": 87, "lighting_cost_potential": {"value": 54, "currency": "GBP"}, "schema_version_original": "20.0.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 87, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 89, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 96, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 88, "environmental_impact_rating": 89}], "hot_water_cost_potential": {"value": 210, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1668, "space_heating_existing_dwelling": 277}, "energy_consumption_current": 178, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.13r0002", "energy_consumption_potential": 178, "environmental_impact_current": 80, "fixed_lighting_outlets_count": 5, "current_energy_efficiency_band": "B", "environmental_impact_potential": 80, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 30, "low_energy_fixed_lighting_outlets_count": 5} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/E153FA/cert-0a2ed0dc5163.json b/tests/fixtures/epc_prediction/E153FA/cert-0a2ed0dc5163.json new file mode 100644 index 00000000..d18ded93 --- /dev/null +++ b/tests/fixtures/epc_prediction/E153FA/cert-0a2ed0dc5163.json @@ -0,0 +1 @@ +{"uprn": 10093129143, "roofs": [{"description": "(other premises above)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": "Average thermal transmittance 0.26 W/m\u00b2K", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": "(other premises below)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "windows": {"description": "High performance glazing", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "E15 3FA", "data_type": 5, "hot_water": {"description": "Electric immersion, standard tariff", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}, "post_town": "", "created_at": "2016-06-23 09:51:41", "living_area": 20.25, "orientation": 3, "region_code": 17, "report_type": 3, "sap_heating": {"water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"main_fuel_type": 39, "main_heating_code": 691, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2603, "main_heating_category": 10, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 3, "has_separate_delayed_start": "false", "load_or_weather_compensation": 0}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "sap_heating_design_water_use": 1, "hot_water_store_insulation_type": 1, "hot_water_store_insulation_thickness": 75}, "sap_version": 9.92, "schema_type": "SAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Room heaters, electric", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}], "dwelling_type": "Mid-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-2097f167f33e", "address_line_2": "", "assessment_date": "2015-03-09", "assessment_type": "SAP", "completion_date": "2016-06-23", "inspection_date": "2015-03-09", "sap_ventilation": {"psv_count": 0, "pressure_test": 6, "draughtstripping": 3, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "true", "extract_fans_count": 2, "open_fireplaces_count": 0, "sheltered_sides_count": 2, "flueless_gas_fires_count": 0}, "design_water_use": 1, "sap_data_version": 9.92, "sap_flat_details": {"level": 2}, "total_floor_area": 37, "transaction_type": 5, "conservatory_type": 1, "registration_date": "2016-06-23", "sap_energy_source": {"electricity_tariff": 1, "wind_turbines_count": 0, "wind_turbine_terrain_type": 2, "fixed_lighting_outlets_count": 10, "low_energy_fixed_lighting_outlets_count": 10, "low_energy_fixed_lighting_outlets_percentage": 100}, "sap_opening_types": [{"name": "Windows (1)", "type": 4, "u_value": 1.29, "frame_type": 1, "data_source": 2, "description": "Data from Manufacturer", "frame_factor": 0.7, "glazing_type": 6, "solar_transmittance": 0.76}], "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"sap_roofs": [{"name": "Exposed Roof", "u_value": 0, "roof_type": 2, "kappa_value": 0, "total_roof_area": 0}], "sap_walls": [{"name": "Existing Wall", "u_value": 0.26, "wall_type": 2, "kappa_value": 17, "total_wall_area": 26.4, "is_curtain_walling": "false"}, {"name": "Party Wall", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 56.1}], "identifier": "Main Dwelling", "overshading": 2, "sap_openings": [{"name": 1, "type": "Windows (1)", "width": 0, "height": 0, "location": "Existing Wall", "orientation": 3}], "construction_year": 2015, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1}], "heating_cost_current": {"value": 127, "currency": "GBP"}, "co2_emissions_current": 1.3, "energy_rating_average": 60, "energy_rating_current": 73, "lighting_cost_current": {"value": 28, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and appliance thermostats", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 127, "currency": "GBP"}, "hot_water_cost_current": {"value": 215, "currency": "GBP"}, "co2_emissions_potential": 1.3, "energy_rating_potential": 73, "lighting_cost_potential": {"value": 28, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "hot_water_cost_potential": {"value": 215, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "renewable_heat_incentive": {"rhi_existing_dwelling": {"water_heating": 1400, "space_heating_existing_dwelling": 829}}, "seller_commission_report": "Y", "energy_consumption_current": 199, "has_fixed_air_conditioning": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "Version: 1.0.3.4", "energy_consumption_potential": 199, "environmental_impact_current": 76, "current_energy_efficiency_band": "C", "environmental_impact_potential": 76, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 34} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/E153FA/cert-21c48aaf77bc.json b/tests/fixtures/epc_prediction/E153FA/cert-21c48aaf77bc.json new file mode 100644 index 00000000..99a21c5a --- /dev/null +++ b/tests/fixtures/epc_prediction/E153FA/cert-21c48aaf77bc.json @@ -0,0 +1 @@ +{"uprn": 10090853539, "roofs": [{"description": "(other premises above)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": "Average thermal transmittance 0.26 W/m\u00b2K", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": "Average thermal transmittance 0.13 W/m\u00b2K", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": 1, "windows": {"description": "High performance glazing", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "E15 3FA", "data_type": 5, "hot_water": {"description": "Electric immersion, standard tariff", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}, "post_town": "", "created_at": "2016-06-23 09:44:25", "living_area": 16, "orientation": 3, "region_code": 17, "report_type": 3, "sap_heating": {"water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"main_fuel_type": 39, "main_heating_code": 691, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2603, "main_heating_category": 10, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 3, "has_separate_delayed_start": "false", "load_or_weather_compensation": 0}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "sap_heating_design_water_use": 1, "hot_water_store_insulation_type": 1, "hot_water_store_insulation_thickness": 75}, "sap_version": 9.92, "schema_type": "SAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Room heaters, electric", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}], "dwelling_type": "Ground-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-ebdb101a05fe", "address_line_2": "", "assessment_date": "2015-03-09", "assessment_type": "SAP", "completion_date": "2016-06-23", "inspection_date": "2015-03-09", "sap_ventilation": {"psv_count": 0, "pressure_test": 6, "draughtstripping": 3, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "true", "extract_fans_count": 2, "open_fireplaces_count": 0, "sheltered_sides_count": 2, "flueless_gas_fires_count": 0}, "design_water_use": 1, "sap_data_version": 9.92, "sap_flat_details": {"level": 1}, "total_floor_area": 39, "transaction_type": 5, "conservatory_type": 1, "registration_date": "2016-06-23", "sap_energy_source": {"electricity_tariff": 1, "wind_turbines_count": 0, "wind_turbine_terrain_type": 2, "fixed_lighting_outlets_count": 10, "low_energy_fixed_lighting_outlets_count": 10, "low_energy_fixed_lighting_outlets_percentage": 100}, "sap_opening_types": [{"name": "Windows (1)", "type": 4, "u_value": 1.29, "frame_type": 1, "data_source": 2, "description": "Data from Manufacturer", "frame_factor": 0.7, "glazing_type": 6, "solar_transmittance": 0.76}], "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"sap_roofs": [{"name": "Exposed Roof", "u_value": 0, "roof_type": 2, "kappa_value": 0, "total_roof_area": 0}], "sap_walls": [{"name": "Existing Wall", "u_value": 0.26, "wall_type": 2, "kappa_value": 17, "total_wall_area": 31.2, "is_curtain_walling": "false"}, {"name": "Party Wall", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 74.1}], "identifier": "Main Dwelling", "overshading": 2, "sap_openings": [{"name": 1, "type": "Windows (1)", "width": 0, "height": 0, "location": "Existing Wall", "orientation": 3}], "construction_year": 2015, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.13, "floor_type": 2, "kappa_value": 110, "storey_height": 3.9, "heat_loss_area": 38.7, "total_floor_area": 38.7}]}], "heating_cost_current": {"value": 234, "currency": "GBP"}, "co2_emissions_current": 1.6, "energy_rating_average": 60, "energy_rating_current": 65, "lighting_cost_current": {"value": 29, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and appliance thermostats", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 234, "currency": "GBP"}, "hot_water_cost_current": {"value": 217, "currency": "GBP"}, "co2_emissions_potential": 1.6, "energy_rating_potential": 65, "lighting_cost_potential": {"value": 29, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "hot_water_cost_potential": {"value": 217, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "renewable_heat_incentive": {"rhi_existing_dwelling": {"water_heating": 1416, "space_heating_existing_dwelling": 1530}}, "seller_commission_report": "Y", "energy_consumption_current": 248, "has_fixed_air_conditioning": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "Version: 1.0.3.4", "energy_consumption_potential": 248, "environmental_impact_current": 69, "current_energy_efficiency_band": "D", "environmental_impact_potential": 69, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "D", "co2_emissions_current_per_floor_area": 42} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/E153FA/cert-2d0b11c96e70.json b/tests/fixtures/epc_prediction/E153FA/cert-2d0b11c96e70.json new file mode 100644 index 00000000..af364aa1 --- /dev/null +++ b/tests/fixtures/epc_prediction/E153FA/cert-2d0b11c96e70.json @@ -0,0 +1 @@ +{"uprn": 10093129133, "roofs": [{"description": "(another dwelling above)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": "System built, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": "Timber frame, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Solid, insulated (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "E15 3FA", "hot_water": {"description": "Electric immersion, off-peak", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "post_town": "", "built_form": 4, "created_at": "2025-05-16 13:49:38", "door_count": 1, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 3, "water_heating_code": 903, "water_heating_fuel": 29, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 29, "heat_emitter_type": 0, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2603, "main_heating_category": 10, "main_heating_fraction": 1, "sap_main_heating_code": 691, "main_heating_data_source": 2}], "immersion_heating_type": 1, "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Room heaters, electric", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}], "dwelling_type": "Ground-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-1ce1d93890e7", "address_line_2": "", "address_line_3": "", "assessment_type": "RdSAP", "completion_date": "2025-05-16", "inspection_date": "2025-05-14", "extensions_count": 0, "measurement_type": 1, "sap_flat_details": {"level": 1, "top_storey": "N", "flat_location": 0, "heat_loss_corridor": 2, "unheated_corridor_length": 5.18}, "total_floor_area": 65, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 3, "registration_date": "2025-05-16", "sap_energy_source": {"mains_gas": "N", "meter_type": 3, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 1}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 200, "floor_heat_loss": 7, "roof_construction": 3, "wall_construction": 8, "building_part_number": 1, "sap_alternative_wall": {"wall_area": 12.4838, "sheltered_wall": "Y", "wall_dry_lined": "N", "wall_construction": 5, "wall_insulation_type": 4, "wall_thickness_measured": "N", "wall_insulation_thickness": "NI"}, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.41, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 64.9, "quantity": "square metres"}, "party_wall_length": {"value": 25.06, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 10.36, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "J", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": "ND", "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 3, "heating_cost_current": {"value": 319, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 1.8, "energy_rating_average": 60, "energy_rating_current": 78, "lighting_cost_current": {"value": 92, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and appliance thermostats", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 190, "currency": "GBP"}, "hot_water_cost_current": {"value": 300, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 173, "currency": "GBP"}, "indicative_cost": "\u00a31,200 - \u00a31,800", "improvement_type": "L2", "improvement_details": {"improvement_number": 62}, "improvement_category": 5, "energy_performance_rating": 83, "environmental_impact_rating": 74}], "co2_emissions_potential": 1.8, "energy_rating_potential": 83, "lighting_cost_potential": {"value": 88, "currency": "GBP"}, "schema_version_original": "20.0.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 214, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 86, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 250, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 85, "environmental_impact_rating": 87}], "hot_water_cost_potential": {"value": 260, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1882, "space_heating_existing_dwelling": 1337}, "energy_consumption_current": 168, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.13r0002", "energy_consumption_potential": 168, "environmental_impact_current": 74, "fixed_lighting_outlets_count": 20, "current_energy_efficiency_band": "C", "environmental_impact_potential": 74, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 28, "low_energy_fixed_lighting_outlets_count": 20} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/E153FA/cert-2dc2ae2de152.json b/tests/fixtures/epc_prediction/E153FA/cert-2dc2ae2de152.json new file mode 100644 index 00000000..5272a6fc --- /dev/null +++ b/tests/fixtures/epc_prediction/E153FA/cert-2dc2ae2de152.json @@ -0,0 +1 @@ +{"uprn": 10093129191, "roofs": [{"description": "(another dwelling above)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": "System built, as built, insulated (assumed)", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": "(another dwelling below)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "E15 3FA", "hot_water": {"description": "Electric immersion, off-peak", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "post_town": "", "built_form": 6, "created_at": "2023-09-18 19:33:56", "door_count": 0, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 903, "water_heating_fuel": 29, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 29, "heat_emitter_type": 0, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2603, "main_heating_category": 10, "main_heating_fraction": 1, "sap_main_heating_code": 691, "main_heating_data_source": 2}], "immersion_heating_type": 1, "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Room heaters, electric", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}], "dwelling_type": "Mid-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-6580c14bc45c", "address_line_2": "", "address_line_3": "", "assessment_type": "RdSAP", "completion_date": "2023-09-18", "inspection_date": "2023-09-15", "extensions_count": 0, "measurement_type": 1, "sap_flat_details": {"level": 2, "top_storey": "N", "flat_location": 5, "heat_loss_corridor": 1}, "total_floor_area": 39, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 2, "registration_date": "2023-09-18", "sap_energy_source": {"mains_gas": "N", "meter_type": 3, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 1}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 500, "floor_heat_loss": 6, "roof_construction": 3, "wall_construction": 8, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.63, "quantity": "metres"}, "total_floor_area": {"value": 38.85, "quantity": "square metres"}, "party_wall_length": {"value": 17.69, "quantity": "metres"}, "heat_loss_perimeter": {"value": 8.11, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "L", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": "ND", "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 2, "heating_cost_current": {"value": 124, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 1.1, "energy_rating_average": 60, "energy_rating_current": 84, "lighting_cost_current": {"value": 82, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and appliance thermostats", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 60, "currency": "GBP"}, "hot_water_cost_current": {"value": 327, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 134, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "L2", "improvement_details": {"improvement_number": 62}, "improvement_category": 5, "energy_performance_rating": 87, "environmental_impact_rating": 81}], "co2_emissions_potential": 1.1, "energy_rating_potential": 87, "lighting_cost_potential": {"value": 94, "currency": "GBP"}, "schema_version_original": "20.0.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 153, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 89, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 74, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 88, "environmental_impact_rating": 89}], "hot_water_cost_potential": {"value": 245, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1484, "space_heating_existing_dwelling": 380}, "energy_consumption_current": 164, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.12r0003", "energy_consumption_potential": 164, "environmental_impact_current": 81, "fixed_lighting_outlets_count": 10, "current_energy_efficiency_band": "B", "environmental_impact_potential": 81, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 28, "low_energy_fixed_lighting_outlets_count": 10} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/E153FA/cert-347869ac4a1a.json b/tests/fixtures/epc_prediction/E153FA/cert-347869ac4a1a.json new file mode 100644 index 00000000..edaa695b --- /dev/null +++ b/tests/fixtures/epc_prediction/E153FA/cert-347869ac4a1a.json @@ -0,0 +1 @@ +{"uprn": 10093129171, "roofs": [{"description": "(other premises above)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": "Average thermal transmittance 0.26 W/m\u00b2K", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": "(other premises below)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "windows": {"description": "High performance glazing", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "E15 3FA", "data_type": 5, "hot_water": {"description": "Electric immersion, standard tariff", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}, "post_town": "", "created_at": "2016-06-23 09:57:04", "living_area": 18, "orientation": 7, "region_code": 17, "report_type": 3, "sap_heating": {"water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"main_fuel_type": 39, "main_heating_code": 691, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2603, "main_heating_category": 10, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 3, "has_separate_delayed_start": "false", "load_or_weather_compensation": 0}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "sap_heating_design_water_use": 1, "hot_water_store_insulation_type": 1, "hot_water_store_insulation_thickness": 75}, "sap_version": 9.92, "schema_type": "SAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Room heaters, electric", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}], "dwelling_type": "Mid-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-596decbe1593", "address_line_2": "", "assessment_date": "2015-03-09", "assessment_type": "SAP", "completion_date": "2016-06-23", "inspection_date": "2015-03-09", "sap_ventilation": {"psv_count": 0, "pressure_test": 6, "draughtstripping": 3, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "true", "extract_fans_count": 2, "open_fireplaces_count": 0, "sheltered_sides_count": 2, "flueless_gas_fires_count": 0}, "design_water_use": 1, "sap_data_version": 9.92, "sap_flat_details": {"level": 2}, "total_floor_area": 38, "transaction_type": 5, "conservatory_type": 1, "registration_date": "2016-06-23", "sap_energy_source": {"electricity_tariff": 1, "wind_turbines_count": 0, "wind_turbine_terrain_type": 2, "fixed_lighting_outlets_count": 10, "low_energy_fixed_lighting_outlets_count": 10, "low_energy_fixed_lighting_outlets_percentage": 100}, "sap_opening_types": [{"name": "Windows (1)", "type": 4, "u_value": 1.29, "frame_type": 1, "data_source": 2, "description": "Data from Manufacturer", "frame_factor": 0.7, "glazing_type": 6, "solar_transmittance": 0.76}], "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"sap_roofs": [{"name": "Exposed Roof", "u_value": 0, "roof_type": 2, "kappa_value": 0, "total_roof_area": 0}], "sap_walls": [{"name": "Existing Wall", "u_value": 0.26, "wall_type": 2, "kappa_value": 17, "total_wall_area": 26.4, "is_curtain_walling": "false"}, {"name": "Party Wall", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 56.1}], "identifier": "Main Dwelling", "overshading": 2, "sap_openings": [{"name": 1, "type": "Windows (1)", "width": 0, "height": 0, "location": "Existing Wall", "orientation": 7}], "construction_year": 2016, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1}], "heating_cost_current": {"value": 129, "currency": "GBP"}, "co2_emissions_current": 1.3, "energy_rating_average": 60, "energy_rating_current": 73, "lighting_cost_current": {"value": 28, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and appliance thermostats", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 129, "currency": "GBP"}, "hot_water_cost_current": {"value": 216, "currency": "GBP"}, "co2_emissions_potential": 1.3, "energy_rating_potential": 73, "lighting_cost_potential": {"value": 28, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "hot_water_cost_potential": {"value": 216, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "renewable_heat_incentive": {"rhi_existing_dwelling": {"water_heating": 1410, "space_heating_existing_dwelling": 842}}, "seller_commission_report": "Y", "energy_consumption_current": 196, "has_fixed_air_conditioning": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "Version: 1.0.3.4", "energy_consumption_potential": 196, "environmental_impact_current": 76, "current_energy_efficiency_band": "C", "environmental_impact_potential": 76, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 33} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/E153FA/cert-486444742055.json b/tests/fixtures/epc_prediction/E153FA/cert-486444742055.json new file mode 100644 index 00000000..9fb1aca8 --- /dev/null +++ b/tests/fixtures/epc_prediction/E153FA/cert-486444742055.json @@ -0,0 +1 @@ +{"uprn": 10093129155, "roofs": [{"description": "(another dwelling above)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": "System built, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "(another dwelling below)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Good lighting efficiency", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "E15 3FA", "hot_water": {"description": "Electric immersion, off-peak", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": "NR", "created_at": "2026-06-11 10:52:05", "door_count": 1, "region_code": 17, "report_type": 2, "sap_heating": {"number_baths": 1, "cylinder_size": 2, "shower_outlets": [{"shower_wwhrs": 1, "shower_outlet_type": 2}], "number_baths_wwhrs": 0, "water_heating_code": 903, "water_heating_fuel": 29, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 29, "heat_emitter_type": 0, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2603, "main_heating_category": 10, "main_heating_fraction": 1, "sap_main_heating_code": 691, "main_heating_data_source": 2}], "immersion_heating_type": 1, "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "true", "orientation": 3, "window_type": 1, "glazing_type": 2, "window_width": 0.65, "window_height": 1.68, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Room heaters, electric", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 5}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Mid-floor flat", "language_code": 1, "pressure_test": 4, "property_type": 2, "address_line_1": "addr-82638c433119", "address_line_2": "", "address_line_3": "", "assessment_type": "RdSAP", "completion_date": "2026-06-11", "inspection_date": "2026-06-09", "extensions_count": 0, "measurement_type": 1, "sap_flat_details": {"level": 2, "top_storey": "N", "storey_count": 6, "flat_location": 2, "heat_loss_corridor": 2, "unheated_corridor_length": 6.42}, "total_floor_area": 38, "transaction_type": 1, "conservatory_type": 1, "has_draught_lobby": "true", "heated_room_count": 2, "registration_date": "2026-06-11", "sap_energy_source": {"mains_gas": "Y", "meter_type": 3, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "false", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 2, "electricity_smart_meter_present": "false"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 390, "floor_heat_loss": 6, "roof_construction": 3, "wall_construction": 8, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.7, "quantity": "metres"}, "total_floor_area": {"value": 37.61, "quantity": "square metres"}, "party_wall_length": {"value": 11.39, "quantity": "metres"}, "heat_loss_perimeter": {"value": 14.67, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "L", "sap_alternative_wall_1": {"wall_area": 17.334, "sheltered_wall": "Y", "wall_dry_lined": "N", "wall_construction": 8, "wall_insulation_type": 4, "wall_thickness_measured": "N", "wall_insulation_thickness": "NI"}, "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": "ND", "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}], "solar_water_heating": "N", "habitable_room_count": 2, "heating_cost_current": {"value": 258, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 0.3, "energy_rating_average": 60, "energy_rating_current": 78, "lighting_cost_current": {"value": 39, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and appliance thermostats", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 243, "currency": "GBP"}, "hot_water_cost_current": {"value": 339, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 50, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 15, "currency": "GBP"}, "indicative_cost": "\u00a3150 - \u00a3250", "improvement_type": "D", "improvement_details": {"improvement_number": 10}, "improvement_category": 5, "energy_performance_rating": 79, "environmental_impact_rating": 94}], "co2_emissions_potential": 0.3, "energy_rating_potential": 79, "lighting_cost_potential": {"value": 39, "currency": "GBP"}, "schema_version_original": "21.0.1", "hot_water_cost_potential": {"value": 339, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1581.77, "space_heating_existing_dwelling": 702.58}, "draughtproofed_door_count": 0, "energy_consumption_current": 98, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "5.04r0013", "energy_consumption_potential": 96, "environmental_impact_current": 94, "current_energy_efficiency_band": "C", "environmental_impact_potential": 94, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 9, "low_energy_fixed_lighting_bulbs_count": 8, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/E153FA/cert-54bfdb4d1c09.json b/tests/fixtures/epc_prediction/E153FA/cert-54bfdb4d1c09.json new file mode 100644 index 00000000..407d85ea --- /dev/null +++ b/tests/fixtures/epc_prediction/E153FA/cert-54bfdb4d1c09.json @@ -0,0 +1 @@ +{"uprn": 10093129181, "roofs": [{"description": "(other premises above)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": "Average thermal transmittance 0.26 W/m\u00b2K", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": "(other premises below)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "windows": {"description": "High performance glazing", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "E15 3FA", "data_type": 5, "hot_water": {"description": "Electric immersion, standard tariff", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}, "post_town": "", "created_at": "2016-06-23 09:59:54", "living_area": 20.25, "orientation": 7, "region_code": 17, "report_type": 3, "sap_heating": {"water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"main_fuel_type": 39, "main_heating_code": 691, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2603, "main_heating_category": 10, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 3, "has_separate_delayed_start": "false", "load_or_weather_compensation": 0}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "sap_heating_design_water_use": 1, "hot_water_store_insulation_type": 1, "hot_water_store_insulation_thickness": 75}, "sap_version": 9.92, "schema_type": "SAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Room heaters, electric", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}], "dwelling_type": "Mid-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-6ff8ca9fc792", "address_line_2": "", "assessment_date": "2015-03-09", "assessment_type": "SAP", "completion_date": "2016-06-23", "inspection_date": "2015-03-09", "sap_ventilation": {"psv_count": 0, "pressure_test": 6, "draughtstripping": 3, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "true", "extract_fans_count": 2, "open_fireplaces_count": 0, "sheltered_sides_count": 2, "flueless_gas_fires_count": 0}, "design_water_use": 1, "sap_data_version": 9.92, "sap_flat_details": {"level": 2}, "total_floor_area": 39, "transaction_type": 5, "conservatory_type": 1, "registration_date": "2016-06-23", "sap_energy_source": {"electricity_tariff": 1, "wind_turbines_count": 0, "wind_turbine_terrain_type": 2, "fixed_lighting_outlets_count": 10, "low_energy_fixed_lighting_outlets_count": 10, "low_energy_fixed_lighting_outlets_percentage": 100}, "sap_opening_types": [{"name": "Windows (1)", "type": 4, "u_value": 1.29, "frame_type": 1, "data_source": 2, "description": "Data from Manufacturer", "frame_factor": 0.7, "glazing_type": 6, "solar_transmittance": 0.76}], "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"sap_roofs": [{"name": "Exposed Roof", "u_value": 0, "roof_type": 2, "kappa_value": 0, "total_roof_area": 0}], "sap_walls": [{"name": "Existing Wall", "u_value": 0.26, "wall_type": 2, "kappa_value": 17, "total_wall_area": 42.9, "is_curtain_walling": "false"}, {"name": "Party Wall", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 41.25}], "identifier": "Main Dwelling", "overshading": 2, "sap_openings": [{"name": 1, "type": "Windows (1)", "width": 0, "height": 0, "location": "Existing Wall", "orientation": 7}], "construction_year": 2016, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1}], "heating_cost_current": {"value": 172, "currency": "GBP"}, "co2_emissions_current": 1.4, "energy_rating_average": 60, "energy_rating_current": 70, "lighting_cost_current": {"value": 28, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and appliance thermostats", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 172, "currency": "GBP"}, "hot_water_cost_current": {"value": 217, "currency": "GBP"}, "co2_emissions_potential": 1.4, "energy_rating_potential": 70, "lighting_cost_potential": {"value": 28, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "hot_water_cost_potential": {"value": 217, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "renewable_heat_incentive": {"rhi_existing_dwelling": {"water_heating": 1415, "space_heating_existing_dwelling": 1124}}, "seller_commission_report": "Y", "energy_consumption_current": 217, "has_fixed_air_conditioning": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "Version: 1.0.3.4", "energy_consumption_potential": 217, "environmental_impact_current": 73, "current_energy_efficiency_band": "C", "environmental_impact_potential": 73, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 37} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/E153FA/cert-57892e818162.json b/tests/fixtures/epc_prediction/E153FA/cert-57892e818162.json new file mode 100644 index 00000000..bdaa8a06 --- /dev/null +++ b/tests/fixtures/epc_prediction/E153FA/cert-57892e818162.json @@ -0,0 +1 @@ +{"uprn": 10093129172, "roofs": [{"description": "(another dwelling above)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": "System built, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": "Timber frame, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "(another dwelling below)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "E15 3FA", "hot_water": {"description": "Electric immersion, off-peak", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "post_town": "", "built_form": 4, "created_at": "2025-05-16 13:58:57", "door_count": 1, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 3, "water_heating_code": 903, "water_heating_fuel": 29, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 29, "heat_emitter_type": 0, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2603, "main_heating_category": 10, "main_heating_fraction": 1, "sap_main_heating_code": 691, "main_heating_data_source": 2}], "immersion_heating_type": 1, "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Room heaters, electric", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}], "dwelling_type": "Mid-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-cb3241dde4dc", "address_line_2": "", "address_line_3": "", "assessment_type": "RdSAP", "completion_date": "2025-05-16", "inspection_date": "2025-05-14", "extensions_count": 0, "measurement_type": 1, "sap_flat_details": {"level": 2, "top_storey": "N", "flat_location": 3, "heat_loss_corridor": 2, "unheated_corridor_length": 5.18}, "total_floor_area": 46, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 3, "registration_date": "2025-05-16", "sap_energy_source": {"mains_gas": "N", "meter_type": 3, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 1}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 200, "floor_heat_loss": 6, "roof_construction": 3, "wall_construction": 8, "building_part_number": 1, "sap_alternative_wall": {"wall_area": 12.4838, "sheltered_wall": "Y", "wall_dry_lined": "N", "wall_construction": 5, "wall_insulation_type": 4, "wall_thickness_measured": "N", "wall_insulation_thickness": "NI"}, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.41, "quantity": "metres"}, "total_floor_area": {"value": 45.68, "quantity": "square metres"}, "party_wall_length": {"value": 17.64, "quantity": "metres"}, "heat_loss_perimeter": {"value": 10.96, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "J", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": "ND", "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 3, "heating_cost_current": {"value": 119, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 1.2, "energy_rating_average": 60, "energy_rating_current": 83, "lighting_cost_current": {"value": 68, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and appliance thermostats", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 70, "currency": "GBP"}, "hot_water_cost_current": {"value": 265, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 91, "currency": "GBP"}, "indicative_cost": "\u00a31,200 - \u00a31,800", "improvement_type": "L2", "improvement_details": {"improvement_number": 62}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 80}], "co2_emissions_potential": 1.2, "energy_rating_potential": 86, "lighting_cost_potential": {"value": 65, "currency": "GBP"}, "schema_version_original": "20.0.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 95, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 88, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 122, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 87, "environmental_impact_rating": 89}], "hot_water_cost_potential": {"value": 226, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1665, "space_heating_existing_dwelling": 499}, "energy_consumption_current": 161, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.13r0002", "energy_consumption_potential": 162, "environmental_impact_current": 80, "fixed_lighting_outlets_count": 20, "current_energy_efficiency_band": "B", "environmental_impact_potential": 80, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 27, "low_energy_fixed_lighting_outlets_count": 20} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/E153FA/cert-638aadec0643.json b/tests/fixtures/epc_prediction/E153FA/cert-638aadec0643.json new file mode 100644 index 00000000..9e22d1cc --- /dev/null +++ b/tests/fixtures/epc_prediction/E153FA/cert-638aadec0643.json @@ -0,0 +1 @@ +{"uprn": 10093129190, "roofs": [{"description": "(other premises above)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": "Average thermal transmittance 0.26 W/m\u00b2K", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": "(other premises below)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "windows": {"description": "High performance glazing", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "E15 3FA", "data_type": 5, "hot_water": {"description": "Electric immersion, standard tariff", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}, "post_town": "", "created_at": "2016-06-23 10:00:09", "living_area": 20.75, "orientation": 3, "region_code": 17, "report_type": 3, "sap_heating": {"water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"main_fuel_type": 39, "main_heating_code": 691, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2603, "main_heating_category": 10, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 3, "has_separate_delayed_start": "false", "load_or_weather_compensation": 0}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "sap_heating_design_water_use": 1, "hot_water_store_insulation_type": 1, "hot_water_store_insulation_thickness": 75}, "sap_version": 9.92, "schema_type": "SAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Room heaters, electric", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}], "dwelling_type": "Mid-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-7e14c5a464eb", "address_line_2": "", "assessment_date": "2015-03-09", "assessment_type": "SAP", "completion_date": "2016-06-23", "inspection_date": "2015-03-09", "sap_ventilation": {"psv_count": 0, "pressure_test": 6, "draughtstripping": 3, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "true", "extract_fans_count": 2, "open_fireplaces_count": 0, "sheltered_sides_count": 2, "flueless_gas_fires_count": 0}, "design_water_use": 1, "sap_data_version": 9.92, "sap_flat_details": {"level": 2}, "total_floor_area": 28, "transaction_type": 5, "conservatory_type": 1, "registration_date": "2016-06-23", "sap_energy_source": {"electricity_tariff": 1, "wind_turbines_count": 0, "wind_turbine_terrain_type": 2, "fixed_lighting_outlets_count": 10, "low_energy_fixed_lighting_outlets_count": 10, "low_energy_fixed_lighting_outlets_percentage": 100}, "sap_opening_types": [{"name": "Windows (1)", "type": 4, "u_value": 1.29, "frame_type": 1, "data_source": 2, "description": "Data from Manufacturer", "frame_factor": 0.7, "glazing_type": 6, "solar_transmittance": 0.76}], "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"sap_roofs": [{"name": "Exposed Roof", "u_value": 0, "roof_type": 2, "kappa_value": 0, "total_roof_area": 0}], "sap_walls": [{"name": "Existing Wall", "u_value": 0.26, "wall_type": 2, "kappa_value": 17, "total_wall_area": 19.8, "is_curtain_walling": "false"}, {"name": "Party Wall", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 49.5}], "identifier": "Main Dwelling", "overshading": 2, "sap_openings": [{"name": 1, "type": "Windows (1)", "width": 0, "height": 0, "location": "Existing Wall", "orientation": 3}], "construction_year": 2016, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1}], "heating_cost_current": {"value": 91, "currency": "GBP"}, "co2_emissions_current": 1.1, "energy_rating_average": 60, "energy_rating_current": 74, "lighting_cost_current": {"value": 22, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and appliance thermostats", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 91, "currency": "GBP"}, "hot_water_cost_current": {"value": 203, "currency": "GBP"}, "co2_emissions_potential": 1.1, "energy_rating_potential": 74, "lighting_cost_potential": {"value": 22, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "hot_water_cost_potential": {"value": 203, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "renewable_heat_incentive": {"rhi_existing_dwelling": {"water_heating": 1326, "space_heating_existing_dwelling": 595}}, "seller_commission_report": "Y", "energy_consumption_current": 229, "has_fixed_air_conditioning": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "Version: 1.0.3.4", "energy_consumption_potential": 229, "environmental_impact_current": 77, "current_energy_efficiency_band": "C", "environmental_impact_potential": 77, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 39} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/E153FA/cert-63aab4ceadcb.json b/tests/fixtures/epc_prediction/E153FA/cert-63aab4ceadcb.json new file mode 100644 index 00000000..90d626ec --- /dev/null +++ b/tests/fixtures/epc_prediction/E153FA/cert-63aab4ceadcb.json @@ -0,0 +1 @@ +{"uprn": 10093129146, "roofs": [{"description": "(other premises above)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": "Average thermal transmittance 0.26 W/m\u00b2K", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": "(other premises below)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "windows": {"description": "High performance glazing", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "E15 3FA", "data_type": 5, "hot_water": {"description": "Electric immersion, standard tariff", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}, "post_town": "", "created_at": "2016-06-23 09:51:47", "living_area": 18, "orientation": 7, "region_code": 17, "report_type": 3, "sap_heating": {"water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"main_fuel_type": 39, "main_heating_code": 691, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2603, "main_heating_category": 10, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 3, "has_separate_delayed_start": "false", "load_or_weather_compensation": 0}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "sap_heating_design_water_use": 1, "hot_water_store_insulation_type": 1, "hot_water_store_insulation_thickness": 75}, "sap_version": 9.92, "schema_type": "SAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Room heaters, electric", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}], "dwelling_type": "Mid-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-dfb2e351f6f5", "address_line_2": "", "assessment_date": "2015-03-09", "assessment_type": "SAP", "completion_date": "2016-06-23", "inspection_date": "2015-03-09", "sap_ventilation": {"psv_count": 0, "pressure_test": 6, "draughtstripping": 3, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "true", "extract_fans_count": 2, "open_fireplaces_count": 0, "sheltered_sides_count": 2, "flueless_gas_fires_count": 0}, "design_water_use": 1, "sap_data_version": 9.92, "sap_flat_details": {"level": 2}, "total_floor_area": 44, "transaction_type": 5, "conservatory_type": 1, "registration_date": "2016-06-23", "sap_energy_source": {"electricity_tariff": 1, "wind_turbines_count": 0, "wind_turbine_terrain_type": 2, "fixed_lighting_outlets_count": 10, "low_energy_fixed_lighting_outlets_count": 10, "low_energy_fixed_lighting_outlets_percentage": 100}, "sap_opening_types": [{"name": "Windows (1)", "type": 4, "u_value": 1.29, "frame_type": 1, "data_source": 2, "description": "Data from Manufacturer", "frame_factor": 0.7, "glazing_type": 6, "solar_transmittance": 0.76}], "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"sap_roofs": [{"name": "Exposed Roof", "u_value": 0, "roof_type": 2, "kappa_value": 0, "total_roof_area": 0}], "sap_walls": [{"name": "Existing Wall", "u_value": 0.26, "wall_type": 2, "kappa_value": 17, "total_wall_area": 37.95, "is_curtain_walling": "false"}, {"name": "Party Wall", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 37.95}], "identifier": "Main Dwelling", "overshading": 2, "sap_openings": [{"name": 1, "type": "Windows (1)", "width": 0, "height": 0, "location": "Existing Wall", "orientation": 7}], "construction_year": 2015, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1}], "heating_cost_current": {"value": 163, "currency": "GBP"}, "co2_emissions_current": 1.4, "energy_rating_average": 60, "energy_rating_current": 71, "lighting_cost_current": {"value": 32, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and appliance thermostats", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 163, "currency": "GBP"}, "hot_water_cost_current": {"value": 225, "currency": "GBP"}, "co2_emissions_potential": 1.4, "energy_rating_potential": 71, "lighting_cost_potential": {"value": 32, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "hot_water_cost_potential": {"value": 225, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "renewable_heat_incentive": {"rhi_existing_dwelling": {"water_heating": 1466, "space_heating_existing_dwelling": 1062}}, "seller_commission_report": "Y", "energy_consumption_current": 192, "has_fixed_air_conditioning": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "Version: 1.0.3.4", "energy_consumption_potential": 192, "environmental_impact_current": 74, "current_energy_efficiency_band": "C", "environmental_impact_potential": 74, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 33} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/E153FA/cert-76b6fa0e95e6.json b/tests/fixtures/epc_prediction/E153FA/cert-76b6fa0e95e6.json new file mode 100644 index 00000000..0b562c1a --- /dev/null +++ b/tests/fixtures/epc_prediction/E153FA/cert-76b6fa0e95e6.json @@ -0,0 +1 @@ +{"uprn": 10093129152, "roofs": [{"description": "(another dwelling above)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": "System built, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "(another dwelling below)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Excellent lighting efficiency", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "E15 3FA", "hot_water": {"description": "Electric immersion, off-peak", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 5}, "post_town": "", "psv_count": 0, "built_form": 5, "created_at": "2026-04-24 18:53:21", "door_count": 1, "region_code": 1, "report_type": 2, "sap_heating": {"number_baths": 1, "cylinder_size": 3, "shower_outlets": [{"shower_outlet": {"shower_wwhrs": 1, "shower_outlet_type": 1}}], "cylinder_heat_loss": 1.42, "number_baths_wwhrs": 0, "water_heating_code": 903, "water_heating_fuel": 29, "cylinder_thermostat": "Y", "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 29, "fan_flue_present": "N", "heat_emitter_type": 0, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2603, "main_heating_category": 10, "main_heating_fraction": 1, "sap_main_heating_code": 691, "main_heating_data_source": 2}], "immersion_heating_type": 1, "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "true", "orientation": 3, "window_type": 1, "glazing_type": 2, "window_width": {"value": 0.78, "quantity": "m"}, "window_height": {"value": 1.7, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 3, "window_type": 1, "glazing_type": 2, "window_width": {"value": 0.78, "quantity": "m"}, "window_height": {"value": 1.7, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 2, "window_width": {"value": 0.81, "quantity": "m"}, "window_height": {"value": 1.75, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Room heaters, electric", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 5}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Mid-floor flat", "language_code": 1, "pressure_test": 4, "property_type": 2, "address_line_1": "addr-a979a429f6f4", "address_line_2": "", "address_line_3": "", "assessment_type": "RdSAP", "completion_date": "2026-04-24", "inspection_date": "2026-04-24", "extensions_count": 0, "measurement_type": 1, "open_flues_count": 0, "sap_flat_details": {"level": 2, "top_storey": "N", "storey_count": 6, "flat_location": 1, "heat_loss_corridor": 2, "unheated_corridor_length": 2}, "total_floor_area": 40, "transaction_type": 8, "conservatory_type": 1, "has_draught_lobby": "true", "heated_room_count": 2, "other_flues_count": 0, "registration_date": "2026-04-24", "sap_energy_source": {"mains_gas": "N", "meter_type": 3, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "false", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 2, "electricity_smart_meter_present": "false"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "closed_flues_count": 0, "extract_fans_count": 2, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 400, "floor_heat_loss": 6, "roof_construction": 3, "wall_construction": 8, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.68, "floor_insulation": 0, "total_floor_area": 39.65, "party_wall_length": 11.13, "floor_construction": 0, "heat_loss_perimeter": 15.13}], "wall_insulation_type": 4, "construction_age_band": "L", "sap_alternative_wall_1": {"wall_area": 5.36, "sheltered_wall": "Y", "wall_dry_lined": "N", "wall_thickness": 220, "wall_construction": 8, "wall_insulation_type": 4, "wall_thickness_measured": "Y", "wall_insulation_thickness": "NI"}, "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": "ND", "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}], "boilers_flues_count": 0, "open_chimneys_count": 0, "solar_water_heating": "N", "habitable_room_count": 2, "heating_cost_current": {"value": 292, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 0.4, "energy_rating_average": 60, "energy_rating_current": 79, "lighting_cost_current": {"value": 33, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and appliance thermostats", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "blocked_chimneys_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 136, "currency": "GBP"}, "hot_water_cost_current": {"value": 308, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "schema_version_current": "LIG-21.0", "suggested_improvements": [{"sequence": 1, "typical_saving": 172, "indicative_cost": "\u00a3800 - \u00a31,600", "improvement_type": "L2", "improvement_details": {"improvement_number": 62}, "improvement_category": 5, "energy_performance_rating": 83, "environmental_impact_rating": 94}, {"sequence": 2, "typical_saving": 39, "indicative_cost": "\u00a3600 - \u00a31,500", "improvement_type": "Y", "improvement_details": {"improvement_number": 49}, "improvement_category": 5, "energy_performance_rating": 84, "environmental_impact_rating": 94}], "co2_emissions_potential": 0.3, "energy_rating_potential": 84, "lighting_cost_potential": {"value": 36, "currency": "GBP"}, "schema_version_original": "LIG-21.0", "hot_water_cost_potential": {"value": 250, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1743.43, "space_heating_existing_dwelling": 837.11}, "draughtproofed_door_count": 1, "energy_consumption_current": 103, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "10.2.2.0", "energy_consumption_potential": 92, "environmental_impact_current": 93, "cfl_fixed_lighting_bulbs_count": 0, "current_energy_efficiency_band": "C", "environmental_impact_potential": 94, "led_fixed_lighting_bulbs_count": 16, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 10, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/E153FA/cert-8302c7e8ef17.json b/tests/fixtures/epc_prediction/E153FA/cert-8302c7e8ef17.json new file mode 100644 index 00000000..719a43c4 --- /dev/null +++ b/tests/fixtures/epc_prediction/E153FA/cert-8302c7e8ef17.json @@ -0,0 +1 @@ +{"uprn": 10093129188, "roofs": [{"description": "(other premises above)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": "Average thermal transmittance 0.26 W/m\u00b2K", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": "(other premises below)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "windows": {"description": "High performance glazing", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "E15 3FA", "data_type": 5, "hot_water": {"description": "Electric immersion, standard tariff", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}, "post_town": "", "created_at": "2016-06-23 10:00:06", "living_area": 15.75, "orientation": 7, "region_code": 17, "report_type": 3, "sap_heating": {"water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"main_fuel_type": 39, "main_heating_code": 691, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2603, "main_heating_category": 10, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 3, "has_separate_delayed_start": "false", "load_or_weather_compensation": 0}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "sap_heating_design_water_use": 1, "hot_water_store_insulation_type": 1, "hot_water_store_insulation_thickness": 75}, "sap_version": 9.92, "schema_type": "SAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Room heaters, electric", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}], "dwelling_type": "Mid-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-61a77f72bd1d", "address_line_2": "", "assessment_date": "2015-03-09", "assessment_type": "SAP", "completion_date": "2016-06-23", "inspection_date": "2015-03-09", "sap_ventilation": {"psv_count": 0, "pressure_test": 6, "draughtstripping": 3, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "true", "extract_fans_count": 2, "open_fireplaces_count": 0, "sheltered_sides_count": 2, "flueless_gas_fires_count": 0}, "design_water_use": 1, "sap_data_version": 9.92, "sap_flat_details": {"level": 2}, "total_floor_area": 40, "transaction_type": 5, "conservatory_type": 1, "registration_date": "2016-06-23", "sap_energy_source": {"electricity_tariff": 1, "wind_turbines_count": 0, "wind_turbine_terrain_type": 2, "fixed_lighting_outlets_count": 10, "low_energy_fixed_lighting_outlets_count": 10, "low_energy_fixed_lighting_outlets_percentage": 100}, "sap_opening_types": [{"name": "Windows (1)", "type": 4, "u_value": 1.29, "frame_type": 3, "data_source": 2, "description": "Data from Manufacturer", "frame_factor": 0.8, "glazing_type": 6, "solar_transmittance": 0.63}], "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"sap_roofs": [{"name": "Exposed Roof", "u_value": 0, "roof_type": 2, "kappa_value": 0, "total_roof_area": 0}], "sap_walls": [{"name": "Existing Wall", "u_value": 0.26, "wall_type": 2, "kappa_value": 17, "total_wall_area": 46.2, "is_curtain_walling": "false"}, {"name": "Party Wall", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 42.9}], "identifier": "Main Dwelling", "overshading": 2, "sap_openings": [{"name": 1, "type": "Windows (1)", "width": 0, "height": 0, "location": "Existing Wall", "orientation": 3}], "construction_year": 2016, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1}], "heating_cost_current": {"value": 179, "currency": "GBP"}, "co2_emissions_current": 1.5, "energy_rating_average": 60, "energy_rating_current": 70, "lighting_cost_current": {"value": 32, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and appliance thermostats", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 179, "currency": "GBP"}, "hot_water_cost_current": {"value": 220, "currency": "GBP"}, "co2_emissions_potential": 1.5, "energy_rating_potential": 70, "lighting_cost_potential": {"value": 32, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "hot_water_cost_potential": {"value": 220, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "renewable_heat_incentive": {"rhi_existing_dwelling": {"water_heating": 1433, "space_heating_existing_dwelling": 1167}}, "seller_commission_report": "Y", "energy_consumption_current": 213, "has_fixed_air_conditioning": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "Version: 1.0.3.4", "energy_consumption_potential": 213, "environmental_impact_current": 73, "current_energy_efficiency_band": "C", "environmental_impact_potential": 73, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 36} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/E153FA/cert-8be823987a0d.json b/tests/fixtures/epc_prediction/E153FA/cert-8be823987a0d.json new file mode 100644 index 00000000..8a100da0 --- /dev/null +++ b/tests/fixtures/epc_prediction/E153FA/cert-8be823987a0d.json @@ -0,0 +1 @@ +{"uprn": 10093129137, "roofs": [{"description": "Average thermal transmittance 0.17 W/m\u00b2K", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Average thermal transmittance 0.26 W/m\u00b2K", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": "Average thermal transmittance 0.13 W/m\u00b2K", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": 1, "windows": {"description": "High performance glazing", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "E15 3FA", "data_type": 5, "hot_water": {"description": "Electric immersion, standard tariff", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}, "post_town": "", "created_at": "2016-06-23 09:44:37", "living_area": 20, "orientation": 7, "region_code": 17, "report_type": 3, "sap_heating": {"water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"main_fuel_type": 39, "main_heating_code": 691, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2603, "main_heating_category": 10, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 3, "has_separate_delayed_start": "false", "load_or_weather_compensation": 0}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "sap_heating_design_water_use": 1, "hot_water_store_insulation_type": 1, "hot_water_store_insulation_thickness": 75}, "sap_version": 9.92, "schema_type": "SAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Room heaters, electric", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}], "dwelling_type": "Ground-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-3b4b8f4236d4", "address_line_2": "", "assessment_date": "2015-03-09", "assessment_type": "SAP", "completion_date": "2016-06-23", "inspection_date": "2015-03-09", "sap_ventilation": {"psv_count": 0, "pressure_test": 6, "draughtstripping": 3, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "true", "extract_fans_count": 3, "open_fireplaces_count": 0, "sheltered_sides_count": 2, "flueless_gas_fires_count": 0}, "design_water_use": 1, "sap_data_version": 9.92, "sap_flat_details": {"level": 1}, "total_floor_area": 64, "transaction_type": 5, "conservatory_type": 1, "registration_date": "2016-06-23", "sap_energy_source": {"electricity_tariff": 1, "wind_turbines_count": 0, "wind_turbine_terrain_type": 2, "fixed_lighting_outlets_count": 10, "low_energy_fixed_lighting_outlets_count": 10, "low_energy_fixed_lighting_outlets_percentage": 100}, "sap_opening_types": [{"name": "Windows (1)", "type": 4, "u_value": 1.29, "frame_type": 1, "data_source": 2, "description": "Data from Manufacturer", "frame_factor": 0.7, "glazing_type": 6, "solar_transmittance": 0.76}], "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"sap_roofs": [{"name": "Flat Roof", "u_value": 0.17, "roof_type": 2, "kappa_value": 9, "total_roof_area": 27}], "sap_walls": [{"name": "Existing Wall", "u_value": 0.26, "wall_type": 2, "kappa_value": 17, "total_wall_area": 37.05, "is_curtain_walling": "false"}, {"name": "Party Wall", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 87.75}], "identifier": "Main Dwelling", "overshading": 2, "sap_openings": [{"name": 1, "type": "Windows (1)", "width": 0, "height": 0, "location": "Existing Wall", "orientation": 7}], "construction_year": 2015, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.13, "floor_type": 2, "kappa_value": 110, "storey_height": 3.9, "heat_loss_area": 63.9, "total_floor_area": 63.9}]}], "heating_cost_current": {"value": 446, "currency": "GBP"}, "co2_emissions_current": 2.6, "energy_rating_average": 60, "energy_rating_current": 57, "lighting_cost_current": {"value": 53, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and appliance thermostats", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 446, "currency": "GBP"}, "hot_water_cost_current": {"value": 258, "currency": "GBP"}, "co2_emissions_potential": 2.6, "energy_rating_potential": 57, "lighting_cost_potential": {"value": 53, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "hot_water_cost_potential": {"value": 258, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "renewable_heat_incentive": {"rhi_existing_dwelling": {"water_heating": 1684, "space_heating_existing_dwelling": 2910}}, "seller_commission_report": "Y", "energy_consumption_current": 237, "has_fixed_air_conditioning": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "Version: 1.0.3.4", "energy_consumption_potential": 237, "environmental_impact_current": 62, "current_energy_efficiency_band": "D", "environmental_impact_potential": 62, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "D", "co2_emissions_current_per_floor_area": 40} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/E153FA/cert-8ef979bd232d.json b/tests/fixtures/epc_prediction/E153FA/cert-8ef979bd232d.json new file mode 100644 index 00000000..2f115e05 --- /dev/null +++ b/tests/fixtures/epc_prediction/E153FA/cert-8ef979bd232d.json @@ -0,0 +1 @@ +{"uprn": 10093129168, "roofs": [{"description": "(another dwelling above)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": "System built, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": "(another dwelling below)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"system_build": "true"}, "lighting": {"description": "Excellent lighting efficiency", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "E15 3FA", "hot_water": {"description": "Gas boiler/circulator, no cylinder thermostat", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": "NR", "created_at": "2026-05-14 10:00:25", "door_count": 1, "region_code": 17, "report_type": 2, "sap_heating": {"number_baths": 0, "cylinder_size": 3, "shower_outlets": [{"shower_wwhrs": 1, "shower_outlet_type": 1}], "number_baths_wwhrs": 0, "water_heating_code": 911, "water_heating_fuel": 26, "cylinder_thermostat": "N", "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 29, "heat_emitter_type": 0, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2401, "main_heating_category": 7, "main_heating_fraction": 1, "sap_main_heating_code": 402, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "true", "orientation": 3, "window_type": 1, "glazing_type": 2, "window_width": 0.4, "window_height": 1.4, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 3, "window_type": 1, "glazing_type": 2, "window_width": 0.4, "window_height": 1.4, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 3, "window_type": 1, "glazing_type": 2, "window_width": 0.4, "window_height": 1.4, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 3, "window_type": 1, "glazing_type": 2, "window_width": 0.4, "window_height": 1.4, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 3, "window_type": 1, "glazing_type": 2, "window_width": 0.4, "window_height": 1.4, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Electric storage heaters", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 5}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Mid-floor flat", "language_code": 1, "pressure_test": 4, "property_type": 2, "address_line_1": "addr-1790ab750163", "address_line_2": "", "address_line_3": "", "assessment_type": "RdSAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "extensions_count": 0, "measurement_type": 1, "sap_flat_details": {"level": 2, "top_storey": "N", "storey_count": 6, "flat_location": 3, "heat_loss_corridor": 1}, "total_floor_area": 40, "transaction_type": 1, "conservatory_type": 1, "has_draught_lobby": "true", "heated_room_count": 1, "registration_date": "2026-05-14", "sap_energy_source": {"mains_gas": "Y", "meter_type": 1, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "false", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 1, "electricity_smart_meter_present": "false"}, "secondary_heating": {"description": "Portable electric heaters (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "extract_fans_count": 2, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 6, "roof_construction": 3, "wall_construction": 8, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.34, "quantity": "metres"}, "total_floor_area": {"value": 40, "quantity": "square metres"}, "party_wall_length": {"value": 16, "quantity": "metres"}, "heat_loss_perimeter": {"value": 5, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "E", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": "ND", "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}], "solar_water_heating": "N", "habitable_room_count": 1, "heating_cost_current": {"value": 218, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 1.1, "energy_rating_average": 60, "energy_rating_current": 73, "lighting_cost_current": {"value": 38, "currency": "GBP"}, "main_heating_controls": [{"description": "Manual charge control", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 192, "currency": "GBP"}, "hot_water_cost_current": {"value": 348, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 83, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 33, "currency": "GBP"}, "indicative_cost": "\u00a3130 - \u00a3180", "improvement_type": "F", "improvement_details": {"improvement_number": 4}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 85}, {"sequence": 2, "typical_saving": {"value": 145, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a310,000", "improvement_type": "T", "improvement_details": {"improvement_number": 27}, "improvement_category": 5, "energy_performance_rating": 80, "environmental_impact_rating": 86}], "co2_emissions_potential": 0.8, "energy_rating_potential": 80, "lighting_cost_potential": {"value": 33, "currency": "GBP"}, "schema_version_original": "21.0.1", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 54, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 77, "environmental_impact_rating": 80}], "hot_water_cost_potential": {"value": 201, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3088.43, "space_heating_existing_dwelling": 590.71}, "draughtproofed_door_count": 0, "energy_consumption_current": 161, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "5.02r0344", "energy_consumption_potential": 108, "environmental_impact_current": 82, "current_energy_efficiency_band": "C", "environmental_impact_potential": 86, "led_fixed_lighting_bulbs_count": 15, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 27, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/E153FA/cert-a22930e3cac6.json b/tests/fixtures/epc_prediction/E153FA/cert-a22930e3cac6.json new file mode 100644 index 00000000..9d9b3ea8 --- /dev/null +++ b/tests/fixtures/epc_prediction/E153FA/cert-a22930e3cac6.json @@ -0,0 +1 @@ +{"uprn": 10093129134, "roofs": [{"description": "(another dwelling above)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": "System built, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": "Timber frame, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Solid, insulated (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "E15 3FA", "hot_water": {"description": "Electric immersion, off-peak", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "post_town": "", "built_form": 4, "created_at": "2025-05-16 13:56:12", "door_count": 1, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 3, "water_heating_code": 903, "water_heating_fuel": 29, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 29, "heat_emitter_type": 0, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2603, "main_heating_category": 10, "main_heating_fraction": 1, "sap_main_heating_code": 691, "main_heating_data_source": 2}], "immersion_heating_type": 1, "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Room heaters, electric", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}], "dwelling_type": "Ground-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-4f46b47bf535", "address_line_2": "", "address_line_3": "", "assessment_type": "RdSAP", "completion_date": "2025-05-16", "inspection_date": "2025-05-14", "extensions_count": 0, "measurement_type": 1, "sap_flat_details": {"level": 1, "top_storey": "N", "flat_location": 0, "heat_loss_corridor": 2, "unheated_corridor_length": 5.18}, "total_floor_area": 46, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 3, "registration_date": "2025-05-16", "sap_energy_source": {"mains_gas": "N", "meter_type": 3, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 1}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 200, "floor_heat_loss": 7, "roof_construction": 3, "wall_construction": 8, "building_part_number": 1, "sap_alternative_wall": {"wall_area": 12.4838, "sheltered_wall": "Y", "wall_dry_lined": "N", "wall_construction": 5, "wall_insulation_type": 4, "wall_thickness_measured": "N", "wall_insulation_thickness": "NI"}, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.41, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 45.68, "quantity": "square metres"}, "party_wall_length": {"value": 17.64, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 10.96, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "J", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": "ND", "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 3, "heating_cost_current": {"value": 265, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 1.6, "energy_rating_average": 60, "energy_rating_current": 78, "lighting_cost_current": {"value": 68, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and appliance thermostats", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 158, "currency": "GBP"}, "hot_water_cost_current": {"value": 265, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 150, "currency": "GBP"}, "indicative_cost": "\u00a31,200 - \u00a31,800", "improvement_type": "L2", "improvement_details": {"improvement_number": 62}, "improvement_category": 5, "energy_performance_rating": 83, "environmental_impact_rating": 74}], "co2_emissions_potential": 1.6, "energy_rating_potential": 83, "lighting_cost_potential": {"value": 65, "currency": "GBP"}, "schema_version_original": "20.0.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 171, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 85, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 205, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 85, "environmental_impact_rating": 86}], "hot_water_cost_potential": {"value": 226, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1665, "space_heating_existing_dwelling": 1112}, "energy_consumption_current": 203, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.13r0002", "energy_consumption_potential": 204, "environmental_impact_current": 74, "fixed_lighting_outlets_count": 20, "current_energy_efficiency_band": "C", "environmental_impact_potential": 74, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 34, "low_energy_fixed_lighting_outlets_count": 20} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/E153FA/cert-a511bb525a56.json b/tests/fixtures/epc_prediction/E153FA/cert-a511bb525a56.json new file mode 100644 index 00000000..e4f966af --- /dev/null +++ b/tests/fixtures/epc_prediction/E153FA/cert-a511bb525a56.json @@ -0,0 +1 @@ +{"uprn": 10093129170, "roofs": [{"description": {"value": "(another dwelling above)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": {"value": "System built, as built, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "(another dwelling below)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Low energy lighting in all fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "E15 3FA", "hot_water": {"description": {"value": "Electric immersion, off-peak", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "post_town": "", "built_form": 5, "created_at": "2025-03-05 22:05:53", "door_count": 1, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 4, "water_heating_code": 903, "water_heating_fuel": 29, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 29, "heat_emitter_type": 0, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2603, "main_heating_category": 10, "main_heating_fraction": 1, "sap_main_heating_code": 691, "mcs_installed_heat_pump": "false", "main_heating_data_source": 2}], "immersion_heating_type": 1, "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}], "dwelling_type": {"value": "Mid-floor flat", "language": "1"}, "language_code": 1, "property_type": 2, "address_line_1": "addr-5a6554b06f14", "address_line_2": "", "address_line_3": "", "assessment_type": "RdSAP", "completion_date": "2025-03-05", "inspection_date": "2025-03-05", "extensions_count": 0, "measurement_type": 1, "sap_flat_details": {"level": 2, "top_storey": "N", "flat_location": 3, "heat_loss_corridor": 2, "unheated_corridor_length": {"value": 1.28, "quantity": "metres"}}, "total_floor_area": 44, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 2, "pvc_window_frames": "true", "registration_date": "2025-03-05", "sap_energy_source": {"mains_gas": "N", "meter_type": 1, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 600, "floor_heat_loss": 6, "roof_construction": 3, "wall_construction": 8, "building_part_number": 1, "sap_alternative_wall": {"wall_area": 3.379, "sheltered_wall": "Y", "wall_dry_lined": "N", "wall_construction": 8, "wall_insulation_type": 4, "wall_thickness_measured": "N", "wall_insulation_thickness": "NI"}, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.64, "quantity": "metres"}, "total_floor_area": {"value": 44.48, "quantity": "square metres"}, "party_wall_length": {"value": 12.09, "quantity": "metres"}, "heat_loss_perimeter": {"value": 14.65, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "L", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": "ND", "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 2, "heating_cost_current": {"value": 224, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 1.4, "energy_rating_average": 60, "energy_rating_current": 81, "lighting_cost_current": {"value": 92, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer and appliance thermostats", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 109, "currency": "GBP"}, "hot_water_cost_current": {"value": 358, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 237, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "L2", "improvement_details": {"improvement_number": 62}, "improvement_category": 5, "energy_performance_rating": 85, "environmental_impact_rating": 77}], "co2_emissions_potential": 1.4, "energy_rating_potential": 85, "lighting_cost_potential": {"value": 106, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 202, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 87, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 124, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 85, "environmental_impact_rating": 88}], "hot_water_cost_potential": {"value": 222, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1748, "space_heating_existing_dwelling": 686}, "energy_consumption_current": 184, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "v94.0.2.1", "energy_consumption_potential": 184, "environmental_impact_current": 77, "fixed_lighting_outlets_count": 9, "current_energy_efficiency_band": "B", "environmental_impact_potential": 77, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 31, "low_energy_fixed_lighting_outlets_count": 9} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/E153FA/cert-acbdc6227e39.json b/tests/fixtures/epc_prediction/E153FA/cert-acbdc6227e39.json new file mode 100644 index 00000000..ed0f0e12 --- /dev/null +++ b/tests/fixtures/epc_prediction/E153FA/cert-acbdc6227e39.json @@ -0,0 +1 @@ +{"uprn": 10093129196, "roofs": [{"description": "Flat, insulated", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "System built, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "(another dwelling below)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Excellent lighting efficiency", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "E15 3FA", "hot_water": {"description": "Electric immersion, off-peak", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 5}, "post_town": "", "psv_count": 0, "built_form": 4, "created_at": "2026-05-19 19:03:03", "door_count": 1, "region_code": 1, "report_type": 2, "sap_heating": {"number_baths": 1, "cylinder_size": 2, "shower_outlets": [{"shower_wwhrs": 1, "shower_outlet_type": 1}], "cylinder_heat_loss": 1.19, "number_baths_wwhrs": 0, "water_heating_code": 903, "water_heating_fuel": 29, "cylinder_thermostat": "Y", "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 29, "fan_flue_present": "N", "heat_emitter_type": 0, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2603, "main_heating_category": 10, "main_heating_fraction": 1, "sap_main_heating_code": 691, "main_heating_data_source": 2}], "immersion_heating_type": 1, "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "true", "orientation": 7, "window_type": 1, "glazing_type": 2, "window_width": {"value": 0.76, "quantity": "m"}, "window_height": {"value": 1.67, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 7, "window_type": 1, "glazing_type": 2, "window_width": {"value": 0.76, "quantity": "m"}, "window_height": {"value": 1.67, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 7, "window_type": 1, "glazing_type": 2, "window_width": {"value": 0.76, "quantity": "m"}, "window_height": {"value": 1.67, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 7, "window_type": 1, "glazing_type": 2, "window_width": {"value": 0.76, "quantity": "m"}, "window_height": {"value": 1.67, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 7, "window_type": 1, "glazing_type": 2, "window_width": {"value": 0.76, "quantity": "m"}, "window_height": {"value": 1.67, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 7, "window_type": 1, "glazing_type": 2, "window_width": {"value": 0.76, "quantity": "m"}, "window_height": {"value": 1.67, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Room heaters, electric", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 5}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Top-floor flat", "language_code": 1, "pressure_test": 4, "property_type": 2, "address_line_1": "addr-2366bef2138c", "address_line_2": "", "address_line_3": "", "assessment_type": "RdSAP", "completion_date": "2026-05-19", "inspection_date": "2026-05-19", "wet_rooms_count": 2, "extensions_count": 0, "measurement_type": 1, "open_flues_count": 0, "sap_flat_details": {"level": 3, "top_storey": "N", "storey_count": 6, "flat_location": 5, "heat_loss_corridor": 2, "unheated_corridor_length": 10.59}, "total_floor_area": 44, "transaction_type": 8, "conservatory_type": 1, "has_draught_lobby": "true", "heated_room_count": 2, "other_flues_count": 0, "registration_date": "2026-05-19", "sap_energy_source": {"mains_gas": "N", "meter_type": 3, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "false", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 2, "electricity_smart_meter_present": "false"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "closed_flues_count": 0, "extract_fans_count": 1, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 410, "floor_heat_loss": 6, "roof_construction": 1, "wall_construction": 8, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.62, "floor_insulation": 0, "total_floor_area": 43.86, "party_wall_length": 8.63, "floor_construction": 0, "heat_loss_perimeter": 20.17}], "wall_insulation_type": 4, "construction_age_band": "L", "sap_alternative_wall_1": {"wall_area": 27.746, "sheltered_wall": "Y", "wall_dry_lined": "N", "wall_thickness": 220, "wall_construction": 8, "wall_insulation_type": 4, "wall_thickness_measured": "Y", "wall_insulation_thickness": "NI"}, "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "boilers_flues_count": 0, "open_chimneys_count": 0, "solar_water_heating": "N", "habitable_room_count": 2, "heating_cost_current": {"value": 524, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 0.5, "energy_rating_average": 60, "energy_rating_current": 71, "lighting_cost_current": {"value": 32, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and appliance thermostats", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "blocked_chimneys_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 293, "currency": "GBP"}, "hot_water_cost_current": {"value": 326, "currency": "GBP"}, "mechanical_ventilation": 3, "percent_draughtproofed": 100, "schema_version_current": "LIG-21.0", "suggested_improvements": [{"sequence": 1, "typical_saving": 247, "indicative_cost": "\u00a3800 - \u00a31,600", "improvement_type": "L2", "improvement_details": {"improvement_number": 62}, "improvement_category": 5, "energy_performance_rating": 79, "environmental_impact_rating": 91}, {"sequence": 2, "typical_saving": 43, "indicative_cost": "\u00a3600 - \u00a31,500", "improvement_type": "Y", "improvement_details": {"improvement_number": 49}, "improvement_category": 5, "energy_performance_rating": 80, "environmental_impact_rating": 92}], "co2_emissions_potential": 0.5, "energy_rating_potential": 80, "lighting_cost_potential": {"value": 34, "currency": "GBP"}, "schema_version_original": "LIG-21.0", "hot_water_cost_potential": {"value": 266, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1751.17, "space_heating_existing_dwelling": 1684.55}, "draughtproofed_door_count": 1, "mechanical_vent_duct_type": 3, "energy_consumption_current": 127, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "10.2.2.0", "energy_consumption_potential": 116, "environmental_impact_current": 91, "cfl_fixed_lighting_bulbs_count": 0, "current_energy_efficiency_band": "C", "environmental_impact_potential": 92, "led_fixed_lighting_bulbs_count": 17, "mechanical_vent_duct_insulation": 1, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "mechanical_ventilation_index_number": 500031, "co2_emissions_current_per_floor_area": 12, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/E153FA/cert-aecc7219ecf0.json b/tests/fixtures/epc_prediction/E153FA/cert-aecc7219ecf0.json new file mode 100644 index 00000000..ef564d2d --- /dev/null +++ b/tests/fixtures/epc_prediction/E153FA/cert-aecc7219ecf0.json @@ -0,0 +1 @@ +{"uprn": 10093129186, "roofs": [{"description": "(other premises above)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": "Average thermal transmittance 0.26 W/m\u00b2K", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": "(other premises below)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "windows": {"description": "High performance glazing", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "E15 3FA", "data_type": 5, "hot_water": {"description": "Electric immersion, standard tariff", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}, "post_town": "", "created_at": "2016-06-23 10:00:02", "living_area": 18, "orientation": 7, "region_code": 17, "report_type": 3, "sap_heating": {"water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"main_fuel_type": 39, "main_heating_code": 691, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2603, "main_heating_category": 10, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 3, "has_separate_delayed_start": "false", "load_or_weather_compensation": 0}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "sap_heating_design_water_use": 1, "hot_water_store_insulation_type": 1, "hot_water_store_insulation_thickness": 75}, "sap_version": 9.92, "schema_type": "SAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Room heaters, electric", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}], "dwelling_type": "Mid-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-c63ccf8d57b8", "address_line_2": "", "assessment_date": "2015-03-09", "assessment_type": "SAP", "completion_date": "2016-06-23", "inspection_date": "2015-03-09", "sap_ventilation": {"psv_count": 0, "pressure_test": 6, "draughtstripping": 3, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "true", "extract_fans_count": 2, "open_fireplaces_count": 0, "sheltered_sides_count": 2, "flueless_gas_fires_count": 0}, "design_water_use": 1, "sap_data_version": 9.92, "sap_flat_details": {"level": 2}, "total_floor_area": 38, "transaction_type": 5, "conservatory_type": 1, "registration_date": "2016-06-23", "sap_energy_source": {"electricity_tariff": 1, "wind_turbines_count": 0, "wind_turbine_terrain_type": 2, "fixed_lighting_outlets_count": 10, "low_energy_fixed_lighting_outlets_count": 10, "low_energy_fixed_lighting_outlets_percentage": 100}, "sap_opening_types": [{"name": "Windows (1)", "type": 4, "u_value": 1.29, "frame_type": 1, "data_source": 2, "description": "Data from Manufacturer", "frame_factor": 0.7, "glazing_type": 6, "solar_transmittance": 0.76}], "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"sap_roofs": [{"name": "Exposed Roof", "u_value": 0, "roof_type": 2, "kappa_value": 0, "total_roof_area": 0}], "sap_walls": [{"name": "Existing Wall", "u_value": 0.26, "wall_type": 2, "kappa_value": 17, "total_wall_area": 26.4, "is_curtain_walling": "false"}, {"name": "Party Wall", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 56.1}], "identifier": "Main Dwelling", "overshading": 2, "sap_openings": [{"name": 1, "type": "Windows (1)", "width": 0, "height": 0, "location": "Existing Wall", "orientation": 7}], "construction_year": 2016, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1}], "heating_cost_current": {"value": 127, "currency": "GBP"}, "co2_emissions_current": 1.3, "energy_rating_average": 60, "energy_rating_current": 73, "lighting_cost_current": {"value": 28, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and appliance thermostats", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 127, "currency": "GBP"}, "hot_water_cost_current": {"value": 216, "currency": "GBP"}, "co2_emissions_potential": 1.3, "energy_rating_potential": 73, "lighting_cost_potential": {"value": 28, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "hot_water_cost_potential": {"value": 216, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "renewable_heat_incentive": {"rhi_existing_dwelling": {"water_heating": 1409, "space_heating_existing_dwelling": 826}}, "seller_commission_report": "Y", "energy_consumption_current": 195, "has_fixed_air_conditioning": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "Version: 1.0.3.4", "energy_consumption_potential": 195, "environmental_impact_current": 76, "current_energy_efficiency_band": "C", "environmental_impact_potential": 76, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 33} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/E153FA/cert-b1ffcc93cf6f.json b/tests/fixtures/epc_prediction/E153FA/cert-b1ffcc93cf6f.json new file mode 100644 index 00000000..49add158 --- /dev/null +++ b/tests/fixtures/epc_prediction/E153FA/cert-b1ffcc93cf6f.json @@ -0,0 +1 @@ +{"uprn": 10093129176, "roofs": [{"description": "(other premises above)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": "Average thermal transmittance 0.26 W/m\u00b2K", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": "(other premises below)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "windows": {"description": "High performance glazing", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "E15 3FA", "data_type": 5, "hot_water": {"description": "Electric immersion, standard tariff", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}, "post_town": "", "created_at": "2016-06-23 09:57:12", "living_area": 15.75, "orientation": 7, "region_code": 17, "report_type": 3, "sap_heating": {"water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"main_fuel_type": 39, "main_heating_code": 691, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2603, "main_heating_category": 10, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 3, "has_separate_delayed_start": "false", "load_or_weather_compensation": 0}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "sap_heating_design_water_use": 1, "hot_water_store_insulation_type": 1, "hot_water_store_insulation_thickness": 75}, "sap_version": 9.92, "schema_type": "SAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Room heaters, electric", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}], "dwelling_type": "Mid-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-566a432f5e88", "address_line_2": "", "assessment_date": "2015-03-09", "assessment_type": "SAP", "completion_date": "2016-06-23", "inspection_date": "2015-03-09", "sap_ventilation": {"psv_count": 0, "pressure_test": 6, "draughtstripping": 3, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "true", "extract_fans_count": 2, "open_fireplaces_count": 0, "sheltered_sides_count": 2, "flueless_gas_fires_count": 0}, "design_water_use": 1, "sap_data_version": 9.92, "sap_flat_details": {"level": 2}, "total_floor_area": 40, "transaction_type": 5, "conservatory_type": 1, "registration_date": "2016-06-23", "sap_energy_source": {"electricity_tariff": 1, "wind_turbines_count": 0, "wind_turbine_terrain_type": 2, "fixed_lighting_outlets_count": 10, "low_energy_fixed_lighting_outlets_count": 10, "low_energy_fixed_lighting_outlets_percentage": 100}, "sap_opening_types": [{"name": "Windows (1)", "type": 4, "u_value": 1.29, "frame_type": 3, "data_source": 2, "description": "Data from Manufacturer", "frame_factor": 0.8, "glazing_type": 6, "solar_transmittance": 0.63}], "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"sap_roofs": [{"name": "Exposed Roof", "u_value": 0, "roof_type": 2, "kappa_value": 0, "total_roof_area": 0}], "sap_walls": [{"name": "Existing Wall", "u_value": 0.26, "wall_type": 2, "kappa_value": 17, "total_wall_area": 46.2, "is_curtain_walling": "false"}, {"name": "Party Wall", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 42.9}], "identifier": "Main Dwelling", "overshading": 2, "sap_openings": [{"name": 1, "type": "Windows (1)", "width": 0, "height": 0, "location": "Existing Wall", "orientation": 3}], "construction_year": 2016, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1}], "heating_cost_current": {"value": 179, "currency": "GBP"}, "co2_emissions_current": 1.5, "energy_rating_average": 60, "energy_rating_current": 70, "lighting_cost_current": {"value": 32, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and appliance thermostats", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 179, "currency": "GBP"}, "hot_water_cost_current": {"value": 220, "currency": "GBP"}, "co2_emissions_potential": 1.5, "energy_rating_potential": 70, "lighting_cost_potential": {"value": 32, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "hot_water_cost_potential": {"value": 220, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "renewable_heat_incentive": {"rhi_existing_dwelling": {"water_heating": 1433, "space_heating_existing_dwelling": 1167}}, "seller_commission_report": "Y", "energy_consumption_current": 213, "has_fixed_air_conditioning": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "Version: 1.0.3.4", "energy_consumption_potential": 213, "environmental_impact_current": 73, "current_energy_efficiency_band": "C", "environmental_impact_potential": 73, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 36} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/E153FA/cert-b2ea6b08493d.json b/tests/fixtures/epc_prediction/E153FA/cert-b2ea6b08493d.json new file mode 100644 index 00000000..87037680 --- /dev/null +++ b/tests/fixtures/epc_prediction/E153FA/cert-b2ea6b08493d.json @@ -0,0 +1 @@ +{"uprn": 10093129137, "roofs": [{"description": "(another dwelling above)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": "System built, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "To unheated space, insulated (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Good lighting efficiency", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "E15 3FA", "hot_water": {"description": "Electric immersion, off-peak", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": "NR", "created_at": "2026-04-21 21:52:52", "door_count": 1, "region_code": 17, "report_type": 2, "sap_heating": {"number_baths": 1, "cylinder_size": 4, "number_baths_wwhrs": 0, "water_heating_code": 903, "water_heating_fuel": 29, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 29, "heat_emitter_type": 0, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2603, "main_heating_category": 10, "main_heating_fraction": 1, "sap_main_heating_code": 691, "main_heating_data_source": 2}], "immersion_heating_type": 1, "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 2, "window_width": 1.76, "window_height": 0.81, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 2, "window_width": 1.76, "window_height": 0.81, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 2, "window_width": 1.76, "window_height": 0.81, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 2, "window_width": 1.76, "window_height": 0.81, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 2, "window_width": 1.76, "window_height": 0.81, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Room heaters, electric", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 5}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Ground-floor flat", "language_code": 1, "pressure_test": 4, "property_type": 2, "address_line_1": "addr-9c159091c9ce", "address_line_2": "", "address_line_3": "", "assessment_type": "RdSAP", "completion_date": "2026-04-21", "inspection_date": "2026-04-17", "extensions_count": 0, "measurement_type": 1, "sap_flat_details": {"level": 1, "top_storey": "N", "storey_count": 6, "flat_location": 1, "heat_loss_corridor": 2, "unheated_corridor_length": 10.79}, "total_floor_area": 63, "transaction_type": 1, "conservatory_type": 1, "has_draught_lobby": "true", "heated_room_count": 3, "registration_date": "2026-04-21", "sap_energy_source": {"mains_gas": "N", "meter_type": 3, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "false", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 1, "electricity_smart_meter_present": "true"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "floor_heat_loss": 2, "roof_construction": 3, "wall_construction": 8, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.7, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 63.07, "quantity": "square metres"}, "party_wall_length": {"value": 13.14, "quantity": "metres"}, "floor_construction": 3, "heat_loss_perimeter": {"value": 20.24, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "L", "sap_alternative_wall_1": {"wall_area": 29.133, "sheltered_wall": "Y", "wall_dry_lined": "N", "wall_construction": 8, "wall_insulation_type": 4, "wall_thickness_measured": "N", "wall_insulation_thickness": "NI"}, "party_wall_construction": 0, "wall_thickness_measured": "N", "roof_insulation_location": "ND", "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "solar_water_heating": "N", "habitable_room_count": 3, "heating_cost_current": {"value": 623, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 0.7, "energy_rating_average": 60, "energy_rating_current": 71, "lighting_cost_current": {"value": 50, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and appliance thermostats", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 383, "currency": "GBP"}, "hot_water_cost_current": {"value": 397, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 83, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 277, "currency": "GBP"}, "indicative_cost": "\u00a31,200 - \u00a32,400", "improvement_type": "L2", "improvement_details": {"improvement_number": 62}, "improvement_category": 5, "energy_performance_rating": 80, "environmental_impact_rating": 91}], "co2_emissions_potential": 0.6, "energy_rating_potential": 80, "lighting_cost_potential": {"value": 55, "currency": "GBP"}, "schema_version_original": "21.0.1", "hot_water_cost_potential": {"value": 356, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2248.17, "space_heating_existing_dwelling": 2164.75}, "draughtproofed_door_count": 0, "energy_consumption_current": 111, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "5.02r0342", "energy_consumption_potential": 109, "environmental_impact_current": 90, "current_energy_efficiency_band": "C", "environmental_impact_potential": 91, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 10, "low_energy_fixed_lighting_bulbs_count": 9, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/E153FA/cert-be62fb9fa85e.json b/tests/fixtures/epc_prediction/E153FA/cert-be62fb9fa85e.json new file mode 100644 index 00000000..655f4f3c --- /dev/null +++ b/tests/fixtures/epc_prediction/E153FA/cert-be62fb9fa85e.json @@ -0,0 +1 @@ +{"uprn": 10093129169, "roofs": [{"description": "(another dwelling above)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": "System built, as built, insulated (assumed)", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": "(another dwelling below)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "E15 3FA", "hot_water": {"description": "Electric immersion, off-peak", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "post_town": "", "built_form": 5, "created_at": "2023-07-10 10:44:50", "door_count": 1, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 3, "water_heating_code": 903, "water_heating_fuel": 29, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 29, "heat_emitter_type": 0, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2603, "main_heating_category": 10, "main_heating_fraction": 1, "sap_main_heating_code": 691, "main_heating_data_source": 2}], "immersion_heating_type": 1, "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Room heaters, electric", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}], "dwelling_type": "Mid-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-519cb230150e", "address_line_2": "", "address_line_3": "", "assessment_type": "RdSAP", "completion_date": "2023-07-10", "inspection_date": "2023-07-07", "extensions_count": 0, "measurement_type": 1, "sap_flat_details": {"level": 2, "top_storey": "N", "flat_location": 3, "heat_loss_corridor": 2, "unheated_corridor_length": 1.06}, "total_floor_area": 40, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 2, "registration_date": "2023-07-10", "sap_energy_source": {"mains_gas": "N", "meter_type": 3, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 1}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 400, "floor_heat_loss": 6, "roof_construction": 3, "wall_construction": 8, "building_part_number": 1, "sap_alternative_wall": {"wall_area": 2.7772, "sheltered_wall": "Y", "wall_dry_lined": "N", "wall_thickness": 240, "wall_construction": 8, "wall_insulation_type": 4, "wall_thickness_measured": "Y", "wall_insulation_thickness": "NI"}, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.62, "quantity": "metres"}, "total_floor_area": {"value": 40.19, "quantity": "square metres"}, "party_wall_length": {"value": 12.27, "quantity": "metres"}, "heat_loss_perimeter": {"value": 14.45, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "L", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": "ND", "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 2, "heating_cost_current": {"value": 214, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 1.3, "energy_rating_average": 60, "energy_rating_current": 81, "lighting_cost_current": {"value": 84, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and appliance thermostats", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 104, "currency": "GBP"}, "hot_water_cost_current": {"value": 329, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 192, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "L2", "improvement_details": {"improvement_number": 62}, "improvement_category": 5, "energy_performance_rating": 85, "environmental_impact_rating": 77}], "co2_emissions_potential": 1.3, "energy_rating_potential": 85, "lighting_cost_potential": {"value": 97, "currency": "GBP"}, "schema_version_original": "20.0.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 208, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 88, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 125, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 86, "environmental_impact_rating": 88}], "hot_water_cost_potential": {"value": 234, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1605, "space_heating_existing_dwelling": 656}, "energy_consumption_current": 189, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.11r0005", "energy_consumption_potential": 189, "environmental_impact_current": 77, "fixed_lighting_outlets_count": 11, "current_energy_efficiency_band": "B", "environmental_impact_potential": 77, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 32, "low_energy_fixed_lighting_outlets_count": 11} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/E153FA/cert-c45ffd28e947.json b/tests/fixtures/epc_prediction/E153FA/cert-c45ffd28e947.json new file mode 100644 index 00000000..eba3bd4f --- /dev/null +++ b/tests/fixtures/epc_prediction/E153FA/cert-c45ffd28e947.json @@ -0,0 +1 @@ +{"uprn": 10090853539, "roofs": [{"description": "(another dwelling above)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": "System built, with external insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "E15 3FA", "hot_water": {"description": "Electric immersion, off-peak", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 2}, "post_town": "", "built_form": 3, "created_at": "2024-05-23 11:43:15", "door_count": 0, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 3, "water_heating_code": 903, "water_heating_fuel": 29, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 29, "heat_emitter_type": 0, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2402, "main_heating_category": 7, "main_heating_fraction": 1, "sap_main_heating_code": 402, "main_heating_data_source": 2}], "immersion_heating_type": 1, "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Electric storage heaters", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 1}], "dwelling_type": "Ground-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-9f72b33fbee5", "address_line_2": "", "address_line_3": "", "assessment_type": "RdSAP", "completion_date": "2024-05-23", "inspection_date": "2024-05-21", "extensions_count": 0, "measurement_type": 1, "sap_flat_details": {"level": 1, "top_storey": "N", "flat_location": 0, "heat_loss_corridor": 2, "unheated_corridor_length": 12.3}, "total_floor_area": 39, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 2, "registration_date": "2024-05-23", "sap_energy_source": {"mains_gas": "N", "meter_type": 1, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 1}, "secondary_heating": {"description": "Portable electric heaters (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 3, "wall_construction": 8, "building_part_number": 1, "sap_alternative_wall": {"wall_area": 30.75, "sheltered_wall": "Y", "wall_dry_lined": "N", "wall_construction": 8, "wall_insulation_type": 1, "wall_thickness_measured": "N", "wall_insulation_thickness": "50mm"}, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.5, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 38.69, "quantity": "square metres"}, "party_wall_length": {"value": 5.3, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 19.9, "quantity": "metres"}}], "wall_insulation_type": 1, "construction_age_band": "F", "party_wall_construction": 0, "wall_thickness_measured": "N", "roof_insulation_location": "ND", "roof_insulation_thickness": "ND", "wall_insulation_thickness": "50mm", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 2, "heating_cost_current": {"value": 565, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.6, "energy_rating_average": 60, "energy_rating_current": 70, "lighting_cost_current": {"value": 70, "currency": "GBP"}, "main_heating_controls": [{"description": "Automatic charge control", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 316, "currency": "GBP"}, "hot_water_cost_current": {"value": 253, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 176, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 62}, {"sequence": 2, "typical_saving": {"value": 74, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "L2", "improvement_details": {"improvement_number": 60}, "improvement_category": 5, "energy_performance_rating": 79, "environmental_impact_rating": 65}], "co2_emissions_potential": 1.9, "energy_rating_potential": 79, "lighting_cost_potential": {"value": 70, "currency": "GBP"}, "schema_version_original": "20.0.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 114, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 81, "environmental_impact_rating": 96}, {"sequence": 2, "typical_saving": {"value": 107, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 80, "environmental_impact_rating": 83}], "hot_water_cost_potential": {"value": 253, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1590, "space_heating_existing_dwelling": 3152}, "energy_consumption_current": 391, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.13r0001", "energy_consumption_potential": 291, "environmental_impact_current": 53, "fixed_lighting_outlets_count": 4, "current_energy_efficiency_band": "C", "environmental_impact_potential": 65, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 66, "low_energy_fixed_lighting_outlets_count": 4} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/E153FA/cert-dacaed6475e2.json b/tests/fixtures/epc_prediction/E153FA/cert-dacaed6475e2.json new file mode 100644 index 00000000..f14df27b --- /dev/null +++ b/tests/fixtures/epc_prediction/E153FA/cert-dacaed6475e2.json @@ -0,0 +1 @@ +{"uprn": 10093129157, "roofs": [{"description": "(other premises above)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": "Average thermal transmittance 0.26 W/m\u00b2K", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": "(other premises below)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "windows": {"description": "High performance glazing", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "E15 3FA", "data_type": 5, "hot_water": {"description": "Electric immersion, standard tariff", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}, "post_town": "", "created_at": "2016-06-23 09:54:54", "living_area": 20.25, "orientation": 7, "region_code": 17, "report_type": 3, "sap_heating": {"water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"main_fuel_type": 39, "main_heating_code": 691, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2603, "main_heating_category": 10, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 3, "has_separate_delayed_start": "false", "load_or_weather_compensation": 0}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "sap_heating_design_water_use": 1, "hot_water_store_insulation_type": 1, "hot_water_store_insulation_thickness": 75}, "sap_version": 9.92, "schema_type": "SAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Room heaters, electric", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}], "dwelling_type": "Mid-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-7b6e387f0e1d", "address_line_2": "", "assessment_date": "2015-03-09", "assessment_type": "SAP", "completion_date": "2016-06-23", "inspection_date": "2015-03-09", "sap_ventilation": {"psv_count": 0, "pressure_test": 6, "draughtstripping": 3, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "true", "extract_fans_count": 2, "open_fireplaces_count": 0, "sheltered_sides_count": 2, "flueless_gas_fires_count": 0}, "design_water_use": 1, "sap_data_version": 9.92, "sap_flat_details": {"level": 2}, "total_floor_area": 39, "transaction_type": 5, "conservatory_type": 1, "registration_date": "2016-06-23", "sap_energy_source": {"electricity_tariff": 1, "wind_turbines_count": 0, "wind_turbine_terrain_type": 2, "fixed_lighting_outlets_count": 10, "low_energy_fixed_lighting_outlets_count": 10, "low_energy_fixed_lighting_outlets_percentage": 100}, "sap_opening_types": [{"name": "Windows (1)", "type": 4, "u_value": 1.29, "frame_type": 1, "data_source": 2, "description": "Data from Manufacturer", "frame_factor": 0.7, "glazing_type": 6, "solar_transmittance": 0.76}], "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"sap_roofs": [{"name": "Exposed Roof", "u_value": 0, "roof_type": 2, "kappa_value": 0, "total_roof_area": 0}], "sap_walls": [{"name": "Existing Wall", "u_value": 0.26, "wall_type": 2, "kappa_value": 17, "total_wall_area": 42.9, "is_curtain_walling": "false"}, {"name": "Party Wall", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 41.25}], "identifier": "Main Dwelling", "overshading": 2, "sap_openings": [{"name": 1, "type": "Windows (1)", "width": 0, "height": 0, "location": "Existing Wall", "orientation": 7}], "construction_year": 2016, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1}], "heating_cost_current": {"value": 172, "currency": "GBP"}, "co2_emissions_current": 1.4, "energy_rating_average": 60, "energy_rating_current": 70, "lighting_cost_current": {"value": 28, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and appliance thermostats", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 172, "currency": "GBP"}, "hot_water_cost_current": {"value": 217, "currency": "GBP"}, "co2_emissions_potential": 1.4, "energy_rating_potential": 70, "lighting_cost_potential": {"value": 28, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "hot_water_cost_potential": {"value": 217, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "renewable_heat_incentive": {"rhi_existing_dwelling": {"water_heating": 1415, "space_heating_existing_dwelling": 1124}}, "seller_commission_report": "Y", "energy_consumption_current": 217, "has_fixed_air_conditioning": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "Version: 1.0.3.4", "energy_consumption_potential": 217, "environmental_impact_current": 73, "current_energy_efficiency_band": "C", "environmental_impact_potential": 73, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 37} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/EN12PU/cert-040368bb642d.json b/tests/fixtures/epc_prediction/EN12PU/cert-040368bb642d.json new file mode 100644 index 00000000..de4163f6 --- /dev/null +++ b/tests/fixtures/epc_prediction/EN12PU/cert-040368bb642d.json @@ -0,0 +1 @@ +{"uprn": 207112001, "roofs": [{"description": "Pitched, insulated (assumed)", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, {"description": "Flat, insulated", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": "Roof room(s), insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Suspended, insulated (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "lighting": {"description": "Below average lighting efficiency", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "postcode": "EN1 2PU", "hot_water": {"description": "From main system, no cylinder thermostat", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 2, "created_at": "2026-05-14 10:00:19", "door_count": 1, "region_code": 17, "report_type": 2, "sap_heating": {"number_baths": 1, "cylinder_size": 3, "shower_outlets": [{"shower_wwhrs": 1, "shower_outlet_type": 1}, {"shower_wwhrs": 1, "shower_outlet_type": 1}, {"shower_wwhrs": 1, "shower_outlet_type": 1}], "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 9599}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "true", "glazing_gap": 12, "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 1.2, "window_height": 0.85, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 1, "window_type": 1, "glazing_type": 3, "window_width": 1.77, "window_height": 1.3, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 1, "window_type": 1, "glazing_type": 3, "window_width": 1.77, "window_height": 1.3, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 7, "window_type": 1, "glazing_type": 3, "window_width": 1.77, "window_height": 1.3, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 1.87, "window_height": 1.3, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 4, "window_type": 1, "glazing_type": 3, "window_width": 0.53, "window_height": 1.3, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 3, "window_type": 1, "glazing_type": 3, "window_width": 0.53, "window_height": 1.3, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 6, "window_type": 1, "glazing_type": 3, "window_width": 0.53, "window_height": 1.3, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 7, "window_type": 1, "glazing_type": 3, "window_width": 0.53, "window_height": 1.3, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 1.87, "window_height": 1.3, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 4, "window_type": 1, "glazing_type": 3, "window_width": 0.53, "window_height": 1.3, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 3, "window_type": 1, "glazing_type": 3, "window_width": 0.53, "window_height": 1.3, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 6, "window_type": 1, "glazing_type": 3, "window_width": 0.53, "window_height": 1.3, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 7, "window_type": 1, "glazing_type": 3, "window_width": 0.53, "window_height": 1.3, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 1.77, "window_height": 1.3, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 7, "window_type": 1, "glazing_type": 3, "window_width": 0.37, "window_height": 1.15, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 1, "window_type": 1, "glazing_type": 3, "window_width": 1.77, "window_height": 1.3, "draught_proofed": "true", "window_location": 2, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 7, "window_type": 1, "glazing_type": 3, "window_width": 1.77, "window_height": 1.3, "draught_proofed": "true", "window_location": 2, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 1, "window_type": 1, "glazing_type": 3, "window_width": 2.46, "window_height": 2.1, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 9, "window_type": 2, "glazing_type": 3, "window_width": 2.46, "window_height": 0.89, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 9, "window_type": 2, "glazing_type": 3, "window_width": 0.89, "window_height": 0.89, "draught_proofed": "true", "window_location": 2, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Semi-detached house", "language_code": 1, "pressure_test": 4, "property_type": 0, "address_line_1": "addr-8a885f90bd97", "assessment_type": "RdSAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-13", "extensions_count": 2, "measurement_type": 1, "total_floor_area": 165, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 8, "registration_date": "2026-05-14", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "false", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 2, "electricity_smart_meter_present": "false"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "extract_fans_count": 2, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "Y", "wall_thickness": 270, "floor_heat_loss": 7, "sap_room_in_roof": {"floor_area": 24.55, "room_in_roof_type_1": {"gable_wall_type_1": 2, "gable_wall_type_2": 2, "gable_wall_length_1": 4.21, "gable_wall_length_2": 4.21}, "construction_age_band": "J"}, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 62.02, "quantity": "square metres"}, "party_wall_length": {"value": 6.67, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 20.28, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.4, "quantity": "metres"}, "total_floor_area": {"value": 53.39, "quantity": "square metres"}, "party_wall_length": {"value": 7.03, "quantity": "metres"}, "heat_loss_perimeter": {"value": 24.69, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "A", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 12.94, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 7.43, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "J", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}, {"identifier": "Extension 2", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 4, "building_part_number": 3, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 11.71, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 6.99, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "J", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "solar_water_heating": "N", "habitable_room_count": 8, "heating_cost_current": {"value": 1566, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 5.2, "energy_rating_average": 60, "energy_rating_current": 67, "lighting_cost_current": {"value": 116, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 1097, "currency": "GBP"}, "hot_water_cost_current": {"value": 365, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 337, "currency": "GBP"}, "indicative_cost": "\u00a37,500 - \u00a311,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 68}, {"sequence": 2, "typical_saving": {"value": 106, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a310,000", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 71}, {"sequence": 3, "typical_saving": {"value": 115, "currency": "GBP"}, "indicative_cost": "\u00a3130 - \u00a3180", "improvement_type": "F", "improvement_details": {"improvement_number": 4}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 73}, {"sequence": 4, "typical_saving": {"value": 248, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 79, "environmental_impact_rating": 74}], "co2_emissions_potential": 3.5, "energy_rating_potential": 79, "lighting_cost_potential": {"value": 116, "currency": "GBP"}, "schema_version_original": "21.0.1", "hot_water_cost_potential": {"value": 276, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3960.69, "space_heating_existing_dwelling": 16052.49}, "draughtproofed_door_count": 1, "energy_consumption_current": 172, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "5.02r0344", "energy_consumption_potential": 112, "environmental_impact_current": 61, "current_energy_efficiency_band": "D", "environmental_impact_potential": 74, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 32, "low_energy_fixed_lighting_bulbs_count": 30, "incandescent_fixed_lighting_bulbs_count": 15} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/EN12PU/cert-0660c5366da9.json b/tests/fixtures/epc_prediction/EN12PU/cert-0660c5366da9.json new file mode 100644 index 00000000..5c59e29a --- /dev/null +++ b/tests/fixtures/epc_prediction/EN12PU/cert-0660c5366da9.json @@ -0,0 +1 @@ +{"uprn": 207113821, "roofs": [{"description": "Pitched, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": "Flat, insulated (assumed)", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": "Timber frame, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Low energy lighting in 13% of fixed outlets", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "postcode": "EN1 2PU", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2019-02-06 19:28:38.000000", "door_count": 2, "glazed_area": 1, "glazing_gap": "16+", "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2107, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 10327}], "immersion_heating_type": "NA", "secondary_heating_type": 612, "has_fixed_air_conditioning": "false"}, "sap_version": 9.93, "schema_type": "RdSAP-Schema-18.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-37f0605a5ec8", "assessment_type": "RdSAP", "completion_date": "2019-02-06", "inspection_date": "2019-02-06", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 111, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 5, "pvc_window_frames": "true", "registration_date": "2019-02-06", "sap_energy_source": {"mains_gas": "Y", "meter_type": 1, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, mains gas", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 240, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.5, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 46.9, "quantity": "square metres"}, "party_wall_length": {"value": 6.2, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 17.8, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.5, "quantity": "metres"}, "total_floor_area": {"value": 46.9, "quantity": "square metres"}, "party_wall_length": {"value": 6.2, "quantity": "metres"}, "heat_loss_perimeter": {"value": 23.8, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 180, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 5, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.5, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 17.1, "quantity": "square metres"}, "party_wall_length": {"value": 1, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 30, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "H", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "low_energy_lighting": 13, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 1264, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 7.4, "energy_rating_average": 60, "energy_rating_current": 42, "lighting_cost_current": {"value": 153, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, TRVs and bypass", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 3, "open_fireplaces_count": 1, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 884, "currency": "GBP"}, "hot_water_cost_current": {"value": 104, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 264, "currency": "GBP"}, "indicative_cost": "14,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 52, "environmental_impact_rating": 44}, {"sequence": 2, "typical_saving": {"value": 89, "currency": "GBP"}, "indicative_cost": "1,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 56, "environmental_impact_rating": 48}, {"sequence": 3, "typical_saving": {"value": 61, "currency": "GBP"}, "indicative_cost": 65, "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 57, "environmental_impact_rating": 49}, {"sequence": 4, "typical_saving": {"value": 37, "currency": "GBP"}, "indicative_cost": 450, "improvement_type": "G", "improvement_details": {"improvement_number": 14}, "improvement_category": 5, "energy_performance_rating": 59, "environmental_impact_rating": 50}, {"sequence": 5, "typical_saving": {"value": 32, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 60, "environmental_impact_rating": 52}, {"sequence": 6, "typical_saving": {"value": 325, "currency": "GBP"}, "indicative_cost": "8,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 59}], "co2_emissions_potential": 4.0, "energy_rating_potential": 69, "lighting_cost_potential": {"value": 82, "currency": "GBP"}, "schema_version_original": "LIG-18.0", "hot_water_cost_potential": {"value": 73, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2276, "impact_of_loft_insulation": -3464, "impact_of_solid_wall_insulation": -4628, "space_heating_existing_dwelling": 18604}, "energy_consumption_current": 377, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "3.08r09", "energy_consumption_potential": 200, "environmental_impact_current": 35, "fixed_lighting_outlets_count": 15, "current_energy_efficiency_band": "E", "environmental_impact_potential": 59, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 66, "low_energy_fixed_lighting_outlets_count": 2} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/EN12PU/cert-08627d0739e2.json b/tests/fixtures/epc_prediction/EN12PU/cert-08627d0739e2.json new file mode 100644 index 00000000..6d96b84c --- /dev/null +++ b/tests/fixtures/epc_prediction/EN12PU/cert-08627d0739e2.json @@ -0,0 +1 @@ +{"uprn": 207113822, "roofs": [{"description": {"value": "Pitched, insulated at rafters", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": {"value": "Flat, limited insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": {"value": "Solid brick, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": {"value": "System built, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Partial double glazing", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in 64% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "EN1 2PU", "hot_water": {"description": {"value": "From main system, no cylinder thermostat", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 2, "created_at": "2020-06-23 08:57:49.000000", "door_count": 4, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "mcs_installed_heat_pump": "false", "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 2042}], "immersion_heating_type": "NA", "secondary_heating_type": 612, "cylinder_insulation_type": 2, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-19.0", "uprn_source": "Address Matched", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Semi-detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-ff699ee273c3", "assessment_type": "RdSAP", "completion_date": "2020-06-23", "inspection_date": "2020-06-17", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 112, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 6, "pvc_window_frames": "false", "registration_date": "2020-06-23", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Room heaters, mains gas", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "Y", "wall_thickness": 260, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.52, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 53.1, "quantity": "square metres"}, "party_wall_length": {"value": 6.76, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 20.86, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.45, "quantity": "metres"}, "total_floor_area": {"value": 50.98, "quantity": "square metres"}, "party_wall_length": {"value": 6.76, "quantity": "metres"}, "heat_loss_perimeter": {"value": 22.85, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 1, "wall_insulation_thickness": "NI", "rafter_insulation_thickness": "150mm"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 8, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.42, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 8.04, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 2, "heat_loss_perimeter": {"value": 7.61, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "E", "party_wall_construction": 0, "wall_thickness_measured": "N", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "low_energy_lighting": 64, "solar_water_heating": "N", "habitable_room_count": 6, "heating_cost_current": {"value": 1089, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 6.9, "energy_rating_average": 60, "energy_rating_current": 47, "lighting_cost_current": {"value": 109, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 2, "open_fireplaces_count": 1, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 655, "currency": "GBP"}, "hot_water_cost_current": {"value": 223, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 55, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 220, "currency": "GBP"}, "indicative_cost": "14,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 55, "environmental_impact_rating": 46}, {"sequence": 2, "typical_saving": {"value": 86, "currency": "GBP"}, "indicative_cost": "1,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 58, "environmental_impact_rating": 50}, {"sequence": 3, "typical_saving": {"value": 18, "currency": "GBP"}, "indicative_cost": 30, "improvement_type": "C", "improvement_details": {"improvement_number": 2}, "improvement_category": 5, "energy_performance_rating": 59, "environmental_impact_rating": 50}, {"sequence": 4, "typical_saving": {"value": 13, "currency": "GBP"}, "indicative_cost": 120, "improvement_type": "D", "improvement_details": {"improvement_number": 10}, "improvement_category": 5, "energy_performance_rating": 59, "environmental_impact_rating": 51}, {"sequence": 5, "typical_saving": {"value": 24, "currency": "GBP"}, "indicative_cost": 20, "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 60, "environmental_impact_rating": 52}, {"sequence": 6, "typical_saving": {"value": 58, "currency": "GBP"}, "indicative_cost": 400, "improvement_type": "F", "improvement_details": {"improvement_number": 4}, "improvement_category": 5, "energy_performance_rating": 62, "environmental_impact_rating": 54}, {"sequence": 7, "typical_saving": {"value": 77, "currency": "GBP"}, "indicative_cost": "3,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 58}, {"sequence": 8, "typical_saving": {"value": 40, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 60}, {"sequence": 9, "typical_saving": {"value": 45, "currency": "GBP"}, "indicative_cost": "6,500", "improvement_type": "O", "improvement_details": {"improvement_number": 8}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 62}, {"sequence": 10, "typical_saving": {"value": 27, "currency": "GBP"}, "indicative_cost": "2,000", "improvement_type": "X", "improvement_details": {"improvement_number": 48}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 64}, {"sequence": 11, "typical_saving": {"value": 333, "currency": "GBP"}, "indicative_cost": "5,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 72}], "co2_emissions_potential": 2.7, "energy_rating_potential": 77, "lighting_cost_potential": {"value": 80, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 295, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 72, "environmental_impact_rating": 66}}], "hot_water_cost_potential": {"value": 76, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3920, "impact_of_solid_wall_insulation": -3258, "space_heating_existing_dwelling": 14259}, "energy_consumption_current": 347, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 55, "calculation_software_version": "v94.0.1.1", "energy_consumption_potential": 133, "environmental_impact_current": 38, "fixed_lighting_outlets_count": 11, "current_energy_efficiency_band": "E", "environmental_impact_potential": 72, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 61, "low_energy_fixed_lighting_outlets_count": 7} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/EN12PU/cert-0ad8443821d5.json b/tests/fixtures/epc_prediction/EN12PU/cert-0ad8443821d5.json new file mode 100644 index 00000000..e31d6ee2 --- /dev/null +++ b/tests/fixtures/epc_prediction/EN12PU/cert-0ad8443821d5.json @@ -0,0 +1 @@ +{"uprn": 207112979, "roofs": [{"description": "Pitched, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": "Low energy lighting in 48% of fixed outlets", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "EN1 2PU", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2024-12-05 14:37:28", "door_count": 3, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 6, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17503}], "immersion_heating_type": "NA", "secondary_heating_type": 633, "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-fff45b758007", "assessment_type": "RdSAP", "completion_date": "2024-12-05", "inspection_date": "2024-09-20", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 99, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 5, "registration_date": "2024-12-05", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, wood logs", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lzc_energy_sources": [4], "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 250, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.519, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 49.329, "quantity": "square metres"}, "party_wall_length": {"value": 7.521, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 25.737, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.449, "quantity": "metres"}, "total_floor_area": {"value": 50.108, "quantity": "square metres"}, "party_wall_length": {"value": 6.773, "quantity": "metres"}, "heat_loss_perimeter": {"value": 25.275, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 48, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 1431, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.6, "energy_rating_average": 60, "energy_rating_current": 54, "lighting_cost_current": {"value": 155, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 964, "currency": "GBP"}, "hot_water_cost_current": {"value": 134, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 393, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 64, "environmental_impact_rating": 63}, {"sequence": 2, "typical_saving": {"value": 81, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 66}, {"sequence": 3, "typical_saving": {"value": 46, "currency": "GBP"}, "indicative_cost": "\u00a355", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 67}, {"sequence": 4, "typical_saving": {"value": 46, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 68}, {"sequence": 5, "typical_saving": {"value": 456, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 77}], "co2_emissions_potential": 2.0, "energy_rating_potential": 77, "lighting_cost_potential": {"value": 102, "currency": "GBP"}, "schema_version_original": "20.0.0", "hot_water_cost_potential": {"value": 88, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2009, "impact_of_loft_insulation": -3699, "impact_of_solid_wall_insulation": -5794, "space_heating_existing_dwelling": 17222}, "energy_consumption_current": 292, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.13r0002", "energy_consumption_potential": 131, "environmental_impact_current": 52, "fixed_lighting_outlets_count": 21, "current_energy_efficiency_band": "E", "environmental_impact_potential": 77, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 47, "low_energy_fixed_lighting_outlets_count": 10} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/EN12PU/cert-0f29be810bed.json b/tests/fixtures/epc_prediction/EN12PU/cert-0f29be810bed.json new file mode 100644 index 00000000..8402b4ce --- /dev/null +++ b/tests/fixtures/epc_prediction/EN12PU/cert-0f29be810bed.json @@ -0,0 +1 @@ +{"uprn": 207113820, "roofs": [{"description": "Pitched, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "EN1 2PU", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2025-03-01 15:48:51", "door_count": 1, "glazed_area": 1, "glazing_gap": "16+", "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 18221}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-7354c7923b33", "assessment_type": "RdSAP", "completion_date": "2025-03-01", "inspection_date": "2025-02-27", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 100, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 5, "pvc_window_frames": "true", "registration_date": "2025-03-01", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 250, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.5, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 46.99, "quantity": "square metres"}, "party_wall_length": {"value": 6.21, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 18.28, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.5, "quantity": "metres"}, "total_floor_area": {"value": 48.73, "quantity": "square metres"}, "party_wall_length": {"value": 6.85, "quantity": "metres"}, "heat_loss_perimeter": {"value": 23.59, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 250, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 3.81, "quantity": "square metres"}, "party_wall_length": {"value": 1, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 6.81, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 1222, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.9, "energy_rating_average": 60, "energy_rating_current": 58, "lighting_cost_current": {"value": 99, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 841, "currency": "GBP"}, "hot_water_cost_current": {"value": 148, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 330, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 62}, {"sequence": 2, "typical_saving": {"value": 51, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 64}, {"sequence": 3, "typical_saving": {"value": 47, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 66}, {"sequence": 4, "typical_saving": {"value": 440, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 79, "environmental_impact_rating": 74}], "co2_emissions_potential": 2.3, "energy_rating_potential": 79, "lighting_cost_potential": {"value": 99, "currency": "GBP"}, "schema_version_original": "20.0.0", "hot_water_cost_potential": {"value": 102, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2234, "impact_of_loft_insulation": -3896, "impact_of_solid_wall_insulation": -5763, "space_heating_existing_dwelling": 16830}, "energy_consumption_current": 278, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.13r0002", "energy_consumption_potential": 129, "environmental_impact_current": 50, "fixed_lighting_outlets_count": 14, "current_energy_efficiency_band": "D", "environmental_impact_potential": 74, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 49, "low_energy_fixed_lighting_outlets_count": 14} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/EN12PU/cert-19b2aea93797.json b/tests/fixtures/epc_prediction/EN12PU/cert-19b2aea93797.json new file mode 100644 index 00000000..bbd40267 --- /dev/null +++ b/tests/fixtures/epc_prediction/EN12PU/cert-19b2aea93797.json @@ -0,0 +1 @@ +{"uprn": 207112979, "roofs": [{"description": "Pitched, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "windows": [{"description": "Mostly double glazing", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "lighting": {"description": "Low energy lighting in 45% of fixed outlets", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "EN1 2PU", "hot_water": {"description": "From main system", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 2, "created_at": "2014-08-27 15:42:33.000000", "door_count": 1, "glazed_area": 2, "region_code": 17, "report_type": 2, "sap_heating": {"wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 0}, "cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "boiler_index_number": 16515, "main_heating_number": 1, "main_heating_control": 2104, "main_heating_category": 2, "main_heating_fraction": 1, "main_heating_data_source": 1}], "secondary_heating_type": 612, "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 25}, "sap_version": 9.91, "schema_type": "SAP-Schema-16.3", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-e3e776667078", "schema_version": "LIG-16.1", "assessment_type": "RdSAP", "completion_date": "2014-08-27", "inspection_date": "2014-08-27", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 116, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 5, "registration_date": "2014-08-27", "restricted_access": 0, "sap_energy_source": {"main_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"percent_roof_area": 0}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, mains gas", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 260, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.5, "floor_insulation": 1, "total_floor_area": 53.17, "floor_construction": 2, "heat_loss_perimeter": 18.3}, {"floor": 1, "room_height": 2.43, "total_floor_area": 53.17, "heat_loss_perimeter": 24.4}], "wall_insulation_type": 4, "construction_age_band": "C", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "NI"}, {"wall_dry_lined": "N", "wall_thickness": 260, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.29, "floor_insulation": 1, "total_floor_area": 9.75, "floor_construction": 2, "heat_loss_perimeter": 9.1}], "wall_insulation_type": 4, "construction_age_band": "C", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "NI"}], "low_energy_lighting": 45, "solar_water_heating": "N", "bedf_revision_number": 363, "habitable_room_count": 5, "heating_cost_current": {"value": 1808, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 9.5, "energy_rating_average": 60, "energy_rating_current": 32, "lighting_cost_current": {"value": 99, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and room thermostat", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 3, "open_fireplaces_count": 1, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 1022, "currency": "GBP"}, "hot_water_cost_current": {"value": 180, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 95, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 464, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 45, "environmental_impact_rating": 41}, {"sequence": 2, "typical_saving": {"value": 86, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W", "improvement_details": {"improvement_number": 47}, "improvement_category": 5, "energy_performance_rating": 48, "environmental_impact_rating": 43}, {"sequence": 3, "typical_saving": {"value": 27, "currency": "GBP"}, "indicative_cost": "\u00a330", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 49, "environmental_impact_rating": 44}, {"sequence": 4, "typical_saving": {"value": 70, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 13}, "improvement_category": 5, "energy_performance_rating": 52, "environmental_impact_rating": 46}, {"sequence": 5, "typical_saving": {"value": 223, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 59, "environmental_impact_rating": 53}, {"sequence": 6, "typical_saving": {"value": 41, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 60, "environmental_impact_rating": 55}, {"sequence": 7, "typical_saving": {"value": 258, "currency": "GBP"}, "indicative_cost": "\u00a39,000 - \u00a314,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 62}], "co2_emissions_potential": 4.1, "energy_rating_potential": 68, "lighting_cost_potential": {"value": 64, "currency": "GBP"}, "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 129, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 55, "environmental_impact_rating": 62}, {"sequence": 2, "typical_saving": {"value": 539, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 70, "environmental_impact_rating": 65}], "hot_water_cost_potential": {"value": 91, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2895, "impact_of_loft_insulation": -4451, "impact_of_solid_wall_insulation": -7538, "space_heating_existing_dwelling": 22911}, "seller_commission_report": "Y", "energy_consumption_current": 424, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 95, "calculation_software_version": 8.3, "energy_consumption_potential": 182, "environmental_impact_current": 29, "fixed_lighting_outlets_count": 11, "current_energy_efficiency_band": "F", "environmental_impact_potential": 62, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "D", "co2_emissions_current_per_floor_area": 82, "low_energy_fixed_lighting_outlets_count": 5} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/EN12PU/cert-1bbc01d15d4c.json b/tests/fixtures/epc_prediction/EN12PU/cert-1bbc01d15d4c.json new file mode 100644 index 00000000..97bf094d --- /dev/null +++ b/tests/fixtures/epc_prediction/EN12PU/cert-1bbc01d15d4c.json @@ -0,0 +1 @@ +{"uprn": 207113821, "roofs": [{"description": {"value": "Pitched, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": {"value": "Flat, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": {"value": "Solid brick, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": {"value": "Timber frame, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Mostly double glazing", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "No low energy lighting", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "postcode": "EN1 2PU", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2016-04-21 16:45:26.000000", "door_count": 2, "glazed_area": 1, "glazing_gap": "16+", "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2107, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 113, "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "secondary_heating_type": 612, "has_fixed_air_conditioning": "false"}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Semi-detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-37f0605a5ec8", "assessment_type": "RdSAP", "completion_date": "2016-04-21", "inspection_date": "2016-04-19", "extensions_count": 2, "measurement_type": 1, "total_floor_area": 113, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 5, "pvc_window_frames": "true", "registration_date": "2016-04-21", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Room heaters, mains gas", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 270, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.42, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 45.56, "quantity": "square metres"}, "party_wall_length": {"value": 6.82, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 13.68, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.41, "quantity": "metres"}, "total_floor_area": {"value": 45.56, "quantity": "square metres"}, "party_wall_length": {"value": 6.82, "quantity": "metres"}, "heat_loss_perimeter": {"value": 18.8, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}, {"identifier": "Extension", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.42, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 2.6, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 2, "heat_loss_perimeter": {"value": 4.52, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.41, "quantity": "metres"}, "total_floor_area": {"value": 2.8, "quantity": "square metres"}, "party_wall_length": 0, "heat_loss_perimeter": {"value": 4.55, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": "NA", "wall_thickness_measured": "N", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}, {"identifier": "Extension 2", "wall_dry_lined": "N", "wall_thickness": 180, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 5, "building_part_number": 3, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 16.08, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 1, "heat_loss_perimeter": {"value": 13.78, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "low_energy_lighting": 0, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 1643, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 8.8, "energy_rating_average": 60, "energy_rating_current": 35, "lighting_cost_current": {"value": 135, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, TRVs and bypass", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 1078, "currency": "GBP"}, "hot_water_cost_current": {"value": 122, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 89, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 84, "currency": "GBP"}, "indicative_cost": "\u00a3850 - \u00a31,500", "improvement_type": "A2", "improvement_details": {"improvement_number": 45}, "improvement_category": 5, "energy_performance_rating": 38, "environmental_impact_rating": 31}, {"sequence": 2, "typical_saving": {"value": 373, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 49, "environmental_impact_rating": 41}, {"sequence": 3, "typical_saving": {"value": 42, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 51, "environmental_impact_rating": 43}, {"sequence": 4, "typical_saving": {"value": 33, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 52, "environmental_impact_rating": 44}, {"sequence": 5, "typical_saving": {"value": 54, "currency": "GBP"}, "indicative_cost": "\u00a365", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 54, "environmental_impact_rating": 45}, {"sequence": 6, "typical_saving": {"value": 47, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 14}, "improvement_category": 5, "energy_performance_rating": 55, "environmental_impact_rating": 46}, {"sequence": 7, "typical_saving": {"value": 41, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 56, "environmental_impact_rating": 48}, {"sequence": 8, "typical_saving": {"value": 279, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a38,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 54}], "co2_emissions_potential": 4.6, "energy_rating_potential": 65, "lighting_cost_potential": {"value": 68, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "hot_water_cost_potential": {"value": 82, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2275, "impact_of_loft_insulation": -3566, "impact_of_solid_wall_insulation": -5421, "space_heating_existing_dwelling": 21425}, "energy_consumption_current": 441, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 95, "calculation_software_version": "9.0.0", "energy_consumption_potential": 227, "environmental_impact_current": 29, "fixed_lighting_outlets_count": 13, "current_energy_efficiency_band": "F", "environmental_impact_potential": 54, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "D", "co2_emissions_current_per_floor_area": 78, "low_energy_fixed_lighting_outlets_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/EN12PU/cert-20ebf6ff4e97.json b/tests/fixtures/epc_prediction/EN12PU/cert-20ebf6ff4e97.json new file mode 100644 index 00000000..95e57e46 --- /dev/null +++ b/tests/fixtures/epc_prediction/EN12PU/cert-20ebf6ff4e97.json @@ -0,0 +1 @@ +{"uprn": 207112000, "roofs": [{"description": "Pitched, insulated at rafters", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Single glazed", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "lighting": {"description": "Low energy lighting in 88% of fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "EN1 2PU", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2021-09-27 08:39:04.958553", "door_count": 1, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 4, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 3, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 2}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 18217}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-09cc7e186079", "assessment_type": "RdSAP", "completion_date": "2021-09-27", "inspection_date": "2021-09-24", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 388, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 12, "registration_date": "2021-09-27", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 260, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.41, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 112.04, "quantity": "square metres"}, "party_wall_length": {"value": 9.96, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 32.19, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.41, "quantity": "metres"}, "total_floor_area": {"value": 101.9, "quantity": "square metres"}, "party_wall_length": {"value": 9.96, "quantity": "metres"}, "heat_loss_perimeter": {"value": 31.23, "quantity": "metres"}}, {"floor": 2, "room_height": {"value": 2.41, "quantity": "metres"}, "total_floor_area": {"value": 87.53, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "heat_loss_perimeter": {"value": 42.28, "quantity": "metres"}}, {"floor": 3, "room_height": {"value": 2.39, "quantity": "metres"}, "total_floor_area": {"value": 46.79, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "heat_loss_perimeter": {"value": 30.88, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "A", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 1, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "rafter_insulation_thickness": "50mm"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 260, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 20, "quantity": "square metres"}, "party_wall_length": {"value": 5, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 10, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2, "quantity": "metres"}, "total_floor_area": {"value": 20, "quantity": "square metres"}, "party_wall_length": {"value": 5, "quantity": "metres"}, "heat_loss_perimeter": {"value": 10, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "A", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 1, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "rafter_insulation_thickness": "AB"}], "low_energy_lighting": 88, "solar_water_heating": "N", "habitable_room_count": 12, "heating_cost_current": {"value": 2390, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 14, "energy_rating_average": 60, "energy_rating_current": 61, "lighting_cost_current": {"value": 186, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": "ND", "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 1315, "currency": "GBP"}, "hot_water_cost_current": {"value": 133, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 0, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 704, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 62}, {"sequence": 2, "typical_saving": {"value": 111, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 64}, {"sequence": 3, "typical_saving": {"value": 72, "currency": "GBP"}, "indicative_cost": "\u00a380 - \u00a3120", "improvement_type": "D", "improvement_details": {"improvement_number": 10}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 66}, {"sequence": 4, "typical_saving": {"value": 183, "currency": "GBP"}, "indicative_cost": "\u00a33,300 - \u00a36,500", "improvement_type": "O", "improvement_details": {"improvement_number": 8}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 70}, {"sequence": 5, "typical_saving": {"value": 348, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 80, "environmental_impact_rating": 73}], "co2_emissions_potential": 7.3, "energy_rating_potential": 80, "lighting_cost_potential": {"value": 190, "currency": "GBP"}, "schema_version_original": "20.0.0", "hot_water_cost_potential": {"value": 134, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3100, "impact_of_solid_wall_insulation": -17034, "space_heating_existing_dwelling": 54798}, "energy_consumption_current": 210, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 0, "calculation_software_version": "4.07r0003", "energy_consumption_potential": 106, "environmental_impact_current": 49, "fixed_lighting_outlets_count": 25, "current_energy_efficiency_band": "D", "environmental_impact_potential": 73, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 37, "low_energy_fixed_lighting_outlets_count": 22} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/EN12PU/cert-60e676acb734.json b/tests/fixtures/epc_prediction/EN12PU/cert-60e676acb734.json new file mode 100644 index 00000000..3c550c41 --- /dev/null +++ b/tests/fixtures/epc_prediction/EN12PU/cert-60e676acb734.json @@ -0,0 +1 @@ +{"uprn": 207112000, "roofs": [{"description": "Pitched, insulated at rafters", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "windows": [{"description": "Single glazed", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "lighting": {"description": "No low energy lighting", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "postcode": "EN1 2PU", "hot_water": {"description": "Gas instantaneous at point of use", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2013-05-14 21:06:09.000000", "door_count": 3, "glazed_area": 4, "region_code": 17, "report_type": 2, "sap_heating": {"wwhrs": {"rooms_with_bath_and_or_shower": 3, "rooms_with_mixer_shower_no_bath": 3, "rooms_with_bath_and_mixer_shower": 0}, "cylinder_size": 1, "water_heating_code": 907, "water_heating_fuel": 26, "secondary_fuel_type": 29, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "boiler_index_number": 9720, "main_heating_number": 1, "main_heating_control": 2104, "main_heating_category": 2, "main_heating_fraction": 1, "main_heating_data_source": 1}], "secondary_heating_type": 691, "has_fixed_air_conditioning": "false"}, "sap_version": 9.91, "sap_windows": [{"orientation": 4, "window_area": 19.231, "window_type": 1, "glazing_type": 5, "window_location": 0}], "schema_type": "SAP-Schema-16.2", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-d8c6c3b09af9", "schema_version": "LIG-16.1", "assessment_type": "RdSAP", "completion_date": "2013-05-14", "inspection_date": "2013-05-14", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 362, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 13, "registration_date": "2013-05-14", "restricted_access": 0, "sap_energy_source": {"main_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"percent_roof_area": 0}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 1}, "secondary_heating": {"description": "Room heaters, electric", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 360, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.444, "floor_insulation": 1, "total_floor_area": 48.061, "floor_construction": 1, "heat_loss_perimeter": 17.848}, {"floor": 1, "room_height": 3.142, "total_floor_area": 113.76, "heat_loss_perimeter": 29.394}, {"floor": 2, "room_height": 2.897, "total_floor_area": 104.486, "heat_loss_perimeter": 26.946}, {"floor": 3, "room_height": 2.415, "total_floor_area": 76.753, "heat_loss_perimeter": 24.088}], "wall_insulation_type": 4, "construction_age_band": "B", "wall_thickness_measured": "Y", "roof_insulation_location": 1, "roof_insulation_thickness": "NI", "rafter_insulation_thickness": "NI"}, {"identifier": "Extension", "wall_dry_lined": "N", "wall_thickness": 360, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.444, "floor_insulation": 1, "total_floor_area": 6.365, "floor_construction": 1, "heat_loss_perimeter": 7.143}, {"floor": 1, "room_height": 2.38, "total_floor_area": 6.365, "heat_loss_perimeter": 7.143}, {"floor": 2, "room_height": 1.966, "total_floor_area": 6.365, "heat_loss_perimeter": 7.143}], "wall_insulation_type": 4, "construction_age_band": "B", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "NI"}], "low_energy_lighting": 0, "solar_water_heating": "N", "bedf_revision_number": 338, "habitable_room_count": 13, "heating_cost_current": {"value": 3219, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 18, "energy_rating_average": 60, "energy_rating_current": 46, "lighting_cost_current": {"value": 267, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and room thermostat", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": "ND", "open_fireplaces_count": 9, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 1848, "currency": "GBP"}, "hot_water_cost_current": {"value": 78, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 94, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 1057, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 62, "environmental_impact_rating": 58}, {"sequence": 2, "typical_saving": {"value": 152, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W", "improvement_details": {"improvement_number": 47}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 61}, {"sequence": 3, "typical_saving": {"value": 108, "currency": "GBP"}, "indicative_cost": "\u00a3145", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 62}, {"sequence": 4, "typical_saving": {"value": 117, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 13}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 64}, {"sequence": 5, "typical_saving": {"value": 68, "currency": "GBP"}, "indicative_cost": "\u00a33,300 - \u00a36,500", "improvement_type": "O", "improvement_details": {"improvement_number": 8}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 65}, {"sequence": 6, "typical_saving": {"value": 236, "currency": "GBP"}, "indicative_cost": "\u00a39,000 - \u00a314,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 68}], "co2_emissions_potential": 9.0, "energy_rating_potential": 72, "lighting_cost_potential": {"value": 136, "currency": "GBP"}, "hot_water_cost_potential": {"value": 78, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1559, "impact_of_loft_insulation": -454, "impact_of_solid_wall_insulation": -22147, "space_heating_existing_dwelling": 64000}, "seller_commission_report": "Y", "energy_consumption_current": 256, "has_fixed_air_conditioning": "false", "calculation_software_version": 8.3, "energy_consumption_potential": 130, "environmental_impact_current": 42, "fixed_lighting_outlets_count": 29, "current_energy_efficiency_band": "E", "environmental_impact_potential": 68, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 49, "low_energy_fixed_lighting_outlets_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/EN12PU/cert-fe6faf36381f.json b/tests/fixtures/epc_prediction/EN12PU/cert-fe6faf36381f.json new file mode 100644 index 00000000..6eaaca8c --- /dev/null +++ b/tests/fixtures/epc_prediction/EN12PU/cert-fe6faf36381f.json @@ -0,0 +1 @@ +{"uprn": 207112295, "roofs": [{"description": "Pitched, 25 mm loft insulation", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": "Flat, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Partial double glazing", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "lighting": {"description": "Low energy lighting in 13% of fixed outlets", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "postcode": "EN1 2PU", "hot_water": {"description": "From main system, no cylinder thermostat", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "post_town": "", "built_form": 2, "created_at": "2020-08-20 15:57:19.000000", "door_count": 2, "glazed_area": 1, "glazing_gap": 6, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2102, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 117, "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "cylinder_insulation_type": 2, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 25}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-19.0", "uprn_source": "Address Matched", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-770e5e27fc79", "assessment_type": "RdSAP", "completion_date": "2020-08-20", "inspection_date": "2020-08-20", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 108, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 5, "pvc_window_frames": "true", "registration_date": "2020-08-20", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 230, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.5, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 49.26, "quantity": "square metres"}, "party_wall_length": {"value": 7.2, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 17.8, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.5, "quantity": "metres"}, "total_floor_area": {"value": 50.26, "quantity": "square metres"}, "party_wall_length": {"value": 7.2, "quantity": "metres"}, "heat_loss_perimeter": {"value": 23.3, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "25mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 230, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.5, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 8.7, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 3.1, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "low_energy_lighting": 13, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 1200, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 8.1, "energy_rating_average": 60, "energy_rating_current": 39, "lighting_cost_current": {"value": 150, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, no room thermostat", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "multiple_glazing_type": 1, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 410, "currency": "GBP"}, "hot_water_cost_current": {"value": 315, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 67, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 108, "currency": "GBP"}, "indicative_cost": 350, "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 42, "environmental_impact_rating": 35}, {"sequence": 2, "typical_saving": {"value": 49, "currency": "GBP"}, "indicative_cost": "1,500", "improvement_type": "A2", "improvement_details": {"improvement_number": 45}, "improvement_category": 5, "energy_performance_rating": 44, "environmental_impact_rating": 37}, {"sequence": 3, "typical_saving": {"value": 378, "currency": "GBP"}, "indicative_cost": "14,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 58, "environmental_impact_rating": 50}, {"sequence": 4, "typical_saving": {"value": 61, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 60, "environmental_impact_rating": 53}, {"sequence": 5, "typical_saving": {"value": 46, "currency": "GBP"}, "indicative_cost": 30, "improvement_type": "C", "improvement_details": {"improvement_number": 2}, "improvement_category": 5, "energy_performance_rating": 62, "environmental_impact_rating": 55}, {"sequence": 6, "typical_saving": {"value": 59, "currency": "GBP"}, "indicative_cost": 70, "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 63, "environmental_impact_rating": 56}, {"sequence": 7, "typical_saving": {"value": 82, "currency": "GBP"}, "indicative_cost": 450, "improvement_type": "G", "improvement_details": {"improvement_number": 12}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 60}, {"sequence": 8, "typical_saving": {"value": 249, "currency": "GBP"}, "indicative_cost": "3,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 74}, {"sequence": 9, "typical_saving": {"value": 41, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 76}, {"sequence": 10, "typical_saving": {"value": 27, "currency": "GBP"}, "indicative_cost": "6,500", "improvement_type": "O", "improvement_details": {"improvement_number": 8}, "improvement_category": 5, "energy_performance_rating": 78, "environmental_impact_rating": 77}, {"sequence": 11, "typical_saving": {"value": 340, "currency": "GBP"}, "indicative_cost": "5,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 87, "environmental_impact_rating": 85}], "co2_emissions_potential": 1.3, "energy_rating_potential": 87, "lighting_cost_potential": {"value": 81, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 207, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 74, "environmental_impact_rating": 95}, {"sequence": 2, "typical_saving": {"value": 15, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 73, "environmental_impact_rating": 76}, {"sequence": 3, "typical_saving": {"value": 285, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 76, "environmental_impact_rating": 71}], "hot_water_cost_potential": {"value": 76, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 4508, "impact_of_loft_insulation": -1673, "impact_of_solid_wall_insulation": -5762, "space_heating_existing_dwelling": 16677}, "energy_consumption_current": 425, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 67, "calculation_software_version": "4.05r0005", "energy_consumption_potential": 68, "environmental_impact_current": 32, "fixed_lighting_outlets_count": 16, "current_energy_efficiency_band": "E", "environmental_impact_potential": 85, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 75, "low_energy_fixed_lighting_outlets_count": 2} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/GU12ND/cert-15f76098044f.json b/tests/fixtures/epc_prediction/GU12ND/cert-15f76098044f.json new file mode 100644 index 00000000..8b37e960 --- /dev/null +++ b/tests/fixtures/epc_prediction/GU12ND/cert-15f76098044f.json @@ -0,0 +1 @@ +{"uprn": 100061404233, "roofs": [{"description": "Pitched, 150 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, filled cavity", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Low energy lighting in 50% of fixed outlets", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "GU1 2ND", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 1, "created_at": "2023-10-09 10:50:18", "door_count": 0, "glazed_area": 4, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 0, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 15023}], "immersion_heating_type": "NA", "secondary_heating_type": 612, "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "sap_windows": [{"orientation": 1, "window_area": {"value": 4.6, "quantity": "square metres"}, "window_type": 1, "glazing_type": 2, "window_location": 0}, {"pvc_frame": "false", "orientation": 5, "window_area": {"value": 4.31, "quantity": "square metres"}, "window_type": 1, "glazing_type": 1, "window_location": 0}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_area": {"value": 1.23, "quantity": "square metres"}, "window_type": 1, "glazing_type": 3, "window_location": 0}, {"pvc_frame": "false", "orientation": 7, "window_area": {"value": 5.94, "quantity": "square metres"}, "window_type": 1, "glazing_type": 1, "window_location": 0}], "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Detached bungalow", "language_code": 1, "property_type": 1, "address_line_1": "addr-273ad4218170", "assessment_type": "RdSAP", "completion_date": "2023-10-09", "inspection_date": "2023-10-09", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 59, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "registration_date": "2023-10-09", "sap_energy_source": {"mains_gas": "Y", "meter_type": 3, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, mains gas", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 280, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.41, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 58.82, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 33.04, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "D", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "150mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 50, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 1309, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.2, "energy_rating_average": 60, "energy_rating_current": 60, "lighting_cost_current": {"value": 147, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": "ND", "open_fireplaces_count": 1, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 1061, "currency": "GBP"}, "hot_water_cost_current": {"value": 222, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 50, "currency": "GBP"}, "indicative_cost": "\u00a3100 - \u00a3350", "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 61, "environmental_impact_rating": 56}, {"sequence": 2, "typical_saving": {"value": 205, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 62}, {"sequence": 3, "typical_saving": {"value": 41, "currency": "GBP"}, "indicative_cost": "\u00a330", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 63}, {"sequence": 4, "typical_saving": {"value": 79, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 65}, {"sequence": 5, "typical_saving": {"value": 675, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 80, "environmental_impact_rating": 77}], "co2_emissions_potential": 1.5, "energy_rating_potential": 80, "lighting_cost_potential": {"value": 98, "currency": "GBP"}, "schema_version_original": "20.0.0", "hot_water_cost_potential": {"value": 144, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1841, "impact_of_loft_insulation": -327, "space_heating_existing_dwelling": 7426}, "energy_consumption_current": 307, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.13r0001", "energy_consumption_potential": 137, "environmental_impact_current": 55, "fixed_lighting_outlets_count": 12, "current_energy_efficiency_band": "D", "environmental_impact_potential": 77, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 54, "low_energy_fixed_lighting_outlets_count": 6} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/GU12ND/cert-2f7832c103ac.json b/tests/fixtures/epc_prediction/GU12ND/cert-2f7832c103ac.json new file mode 100644 index 00000000..e135eabb --- /dev/null +++ b/tests/fixtures/epc_prediction/GU12ND/cert-2f7832c103ac.json @@ -0,0 +1 @@ +{"uprn": 100061404211, "roofs": [{"description": {"value": "Pitched, 350 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, {"description": {"value": "Flat, limited insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": {"value": "Cavity wall, filled cavity", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Low energy lighting in 63% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "GU1 2ND", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 2, "created_at": "2014-12-15 17:56:14.000000", "door_count": 2, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 1, "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2107, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 1, "main_heating_data_source": 1, "main_heating_index_number": 16495}], "immersion_heating_type": "NA", "cylinder_insulation_type": 2, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Semi-detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-503f7ea62bdc", "assessment_type": "RdSAP", "completion_date": "2014-12-15", "inspection_date": "2014-12-15", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 71, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "registration_date": "2014-12-15", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 282, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 32.5, "quantity": "square metres"}, "party_wall_length": {"value": 6.134, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 14.12, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.42, "quantity": "metres"}, "total_floor_area": {"value": 32.663, "quantity": "square metres"}, "party_wall_length": {"value": 6.134, "quantity": "metres"}, "heat_loss_perimeter": {"value": 16.743, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "D", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "350mm", "wall_insulation_thickness": "NI"}, {"identifier": "Extension", "wall_dry_lined": "N", "wall_thickness": 282, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.41, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 6.32, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 1, "heat_loss_perimeter": {"value": 7.47, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "E", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 63, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 554, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.7, "energy_rating_average": 60, "energy_rating_current": 60, "lighting_cost_current": {"value": 63, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, TRVs and bypass", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 402, "currency": "GBP"}, "hot_water_cost_current": {"value": 215, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 40, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 61, "environmental_impact_rating": 56}, {"sequence": 2, "typical_saving": {"value": 20, "currency": "GBP"}, "indicative_cost": "\u00a315 - \u00a330", "improvement_type": "C", "improvement_details": {"improvement_number": 2}, "improvement_category": 5, "energy_performance_rating": 62, "environmental_impact_rating": 57}, {"sequence": 3, "typical_saving": {"value": 14, "currency": "GBP"}, "indicative_cost": "\u00a315", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 63, "environmental_impact_rating": 57}, {"sequence": 4, "typical_saving": {"value": 50, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 14}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 61}, {"sequence": 5, "typical_saving": {"value": 150, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 72}, {"sequence": 6, "typical_saving": {"value": 41, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 74}, {"sequence": 7, "typical_saving": {"value": 266, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a38,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 85}], "co2_emissions_potential": 1.1, "energy_rating_potential": 86, "lighting_cost_potential": {"value": 46, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 157, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 72, "environmental_impact_rating": 95}, {"sequence": 2, "typical_saving": {"value": 134, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 71, "environmental_impact_rating": 74}, {"sequence": 3, "typical_saving": {"value": 127, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 72, "environmental_impact_rating": 68}], "hot_water_cost_potential": {"value": 68, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2960, "space_heating_existing_dwelling": 6316}, "energy_consumption_current": 293, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.0.0.0", "energy_consumption_potential": 82, "environmental_impact_current": 54, "fixed_lighting_outlets_count": 8, "windows_transmission_details": {"u_value": 2, "data_source": 2, "solar_transmittance": 0.72}, "current_energy_efficiency_band": "D", "environmental_impact_potential": 85, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 52, "low_energy_fixed_lighting_outlets_count": 5} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/GU12ND/cert-30e6ad17ace1.json b/tests/fixtures/epc_prediction/GU12ND/cert-30e6ad17ace1.json new file mode 100644 index 00000000..f5d395d1 --- /dev/null +++ b/tests/fixtures/epc_prediction/GU12ND/cert-30e6ad17ace1.json @@ -0,0 +1 @@ +{"uprn": 100061404212, "roofs": [{"description": {"value": "Pitched, 150 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": {"value": "Cavity wall, filled cavity", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in 67% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "GU1 2ND", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 1, "created_at": "2017-06-08 11:33:16.000000", "door_count": 2, "glazed_area": 1, "glazing_gap": "16+", "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 3, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 29, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2104, "main_heating_category": 2, "main_heating_fraction": 1, "mcs_installed_heat_pump": "false", "central_heating_pump_age": 1, "main_heating_data_source": 1, "main_heating_index_number": 4052}], "immersion_heating_type": "NA", "secondary_heating_type": 691, "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 38}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.1", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Detached bungalow", "language": "1"}, "language_code": 1, "property_type": 1, "address_line_1": "addr-c609d53ea015", "assessment_type": "RdSAP", "completion_date": "2017-06-08", "inspection_date": "2017-06-08", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 72, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2017-06-08", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 1}, "secondary_heating": {"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 280, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.41, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 71.87, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 2, "heat_loss_perimeter": {"value": 39.64, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "D", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "150mm", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 67, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 685, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.8, "energy_rating_average": 60, "energy_rating_current": 57, "lighting_cost_current": {"value": 66, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer and room thermostat", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 1, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 488, "currency": "GBP"}, "hot_water_cost_current": {"value": 160, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 28, "currency": "GBP"}, "indicative_cost": 350, "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 58, "environmental_impact_rating": 55}, {"sequence": 2, "typical_saving": {"value": 107, "currency": "GBP"}, "indicative_cost": "1,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 63, "environmental_impact_rating": 61}, {"sequence": 3, "typical_saving": {"value": 14, "currency": "GBP"}, "indicative_cost": 20, "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 64, "environmental_impact_rating": 61}, {"sequence": 4, "typical_saving": {"value": 28, "currency": "GBP"}, "indicative_cost": 450, "improvement_type": "G", "improvement_details": {"improvement_number": 13}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 63}, {"sequence": 5, "typical_saving": {"value": 81, "currency": "GBP"}, "indicative_cost": "3,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 68}, {"sequence": 6, "typical_saving": {"value": 45, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 71}, {"sequence": 7, "typical_saving": {"value": 286, "currency": "GBP"}, "indicative_cost": "8,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 82, "environmental_impact_rating": 81}], "co2_emissions_potential": 1.4, "energy_rating_potential": 82, "lighting_cost_potential": {"value": 50, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 79, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 68, "environmental_impact_rating": 90}, {"sequence": 2, "typical_saving": {"value": 79, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 70, "environmental_impact_rating": 73}, {"sequence": 3, "typical_saving": {"value": 137, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 72, "environmental_impact_rating": 67}], "hot_water_cost_potential": {"value": 71, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2720, "impact_of_loft_insulation": -433, "space_heating_existing_dwelling": 8747}, "energy_consumption_current": 302, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "1.0.x", "energy_consumption_potential": 107, "environmental_impact_current": 53, "fixed_lighting_outlets_count": 12, "current_energy_efficiency_band": "D", "environmental_impact_potential": 81, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 53, "low_energy_fixed_lighting_outlets_count": 8} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/GU12ND/cert-3fcddd98b25e.json b/tests/fixtures/epc_prediction/GU12ND/cert-3fcddd98b25e.json new file mode 100644 index 00000000..cb46fbfa --- /dev/null +++ b/tests/fixtures/epc_prediction/GU12ND/cert-3fcddd98b25e.json @@ -0,0 +1 @@ +{"uprn": 100061404239, "roofs": [{"description": "Pitched, 250 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, filled cavity", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": "ND", "windows": [{"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "lighting": {"description": "No low energy lighting", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "postcode": "GU1 2ND", "hot_water": {"description": "From main system", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 1, "created_at": "2014-03-26 10:31:52.000000", "door_count": 2, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "boiler_index_number": 1357, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "main_heating_data_source": 1}], "secondary_heating_type": 612, "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 38}, "sap_version": 9.91, "schema_type": "SAP-Schema-16.3", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Detached bungalow", "language_code": 1, "property_type": 1, "address_line_1": "addr-aceec43c5c54", "schema_version": "LIG-16.1", "assessment_type": "RdSAP", "completion_date": "2014-03-26", "inspection_date": "2014-03-25", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 71, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "registration_date": "2014-03-26", "restricted_access": 0, "sap_energy_source": {"main_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"percent_roof_area": 0}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, mains gas", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 290, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.41, "floor_insulation": 1, "total_floor_area": 70.81, "floor_construction": 2, "heat_loss_perimeter": 39.32}], "wall_insulation_type": 2, "construction_age_band": "D", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "250mm"}], "low_energy_lighting": 0, "solar_water_heating": "N", "bedf_revision_number": 354, "habitable_room_count": 4, "heating_cost_current": {"value": 728, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.2, "energy_rating_average": 60, "energy_rating_current": 53, "lighting_cost_current": {"value": 88, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 1, "open_fireplaces_count": 1, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 545, "currency": "GBP"}, "hot_water_cost_current": {"value": 151, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 113.95, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W", "improvement_details": {"improvement_number": 47}, "improvement_category": 5, "energy_performance_rating": 58, "environmental_impact_rating": 56}, {"sequence": 2, "typical_saving": {"value": 35.13, "currency": "GBP"}, "indicative_cost": "\u00a360", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 60, "environmental_impact_rating": 57}, {"sequence": 3, "typical_saving": {"value": 119.13, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 64}, {"sequence": 4, "typical_saving": {"value": 37.53, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 67}, {"sequence": 5, "typical_saving": {"value": 250.32, "currency": "GBP"}, "indicative_cost": "\u00a39,000 - \u00a314,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 79, "environmental_impact_rating": 77}], "co2_emissions_potential": 1.7, "energy_rating_potential": 79, "lighting_cost_potential": {"value": 44, "currency": "GBP"}, "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 163.78, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 71, "environmental_impact_rating": 72}, {"sequence": 2, "typical_saving": {"value": 238.9, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 72, "environmental_impact_rating": 70}], "hot_water_cost_potential": {"value": 72, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2520, "space_heating_existing_dwelling": 8475}, "seller_commission_report": "Y", "energy_consumption_current": 310, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "1.4.1.0", "energy_consumption_potential": 124, "environmental_impact_current": 49, "fixed_lighting_outlets_count": 12, "current_energy_efficiency_band": "E", "environmental_impact_potential": 77, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 60, "low_energy_fixed_lighting_outlets_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/GU12ND/cert-4144a0a59432.json b/tests/fixtures/epc_prediction/GU12ND/cert-4144a0a59432.json new file mode 100644 index 00000000..05bd4a34 --- /dev/null +++ b/tests/fixtures/epc_prediction/GU12ND/cert-4144a0a59432.json @@ -0,0 +1 @@ +{"uprn": 100061404225, "roofs": [{"description": "Average thermal transmittance 0.15 W/m\u00b2K", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Average thermal transmittance 0.18 W/m\u00b2K", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": "Average thermal transmittance 0.14 W/m\u00b2K", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": "ND", "windows": {"description": "High performance glazing", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "GU1 2ND", "data_type": 2, "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 1, "created_at": "2019-04-02 15:32:51", "living_area": 30.18, "orientation": 1, "region_code": 17, "report_type": 3, "sap_heating": {"thermal_store": 1, "water_fuel_type": 1, "water_heating_code": 901, "hot_water_store_size": 250, "main_heating_details": [{"main_fuel_type": 1, "heat_emitter_type": 3, "emitter_temperature": 3, "is_flue_fan_present": "true", "main_heating_number": 1, "main_heating_control": 2110, "is_interlocked_system": "true", "main_heating_category": 2, "main_heating_fraction": 1, "main_heating_flue_type": 2, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 15947, "has_separate_delayed_start": "false", "load_or_weather_compensation": 0, "underfloor_heat_emitter_type": 2, "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "primary_pipework_insulation": 4, "is_hot_water_separately_timed": "true", "hot_water_store_insulation_type": 1, "hot_water_store_heat_loss_source": 3, "hot_water_store_insulation_thickness": 70}, "sap_version": 9.92, "schema_type": "SAP-Schema-17.1", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": "Boiler and underfloor heating, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "Air permeability 4.5 m\u00b3/h.m\u00b2 (as tested)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-d6b90956f717", "assessment_date": "2019-03-18", "assessment_type": "SAP", "completion_date": "2019-04-02", "inspection_date": "2019-04-02", "sap_ventilation": {"psv_count": 0, "pressure_test": 1, "air_permeability": 4.52, "open_flues_count": 0, "ventilation_type": 1, "extract_fans_count": 6, "open_fireplaces_count": 0, "sheltered_sides_count": 2, "flueless_gas_fires_count": 0}, "design_water_use": 1, "sap_data_version": 9.92, "total_floor_area": 213, "transaction_type": 6, "conservatory_type": 1, "registration_date": "2019-04-02", "sap_energy_source": {"pv_arrays": [{"pitch": 2, "peak_power": 1.1, "orientation": 5, "overshading": 1, "pv_connection": 2}], "electricity_tariff": 1, "wind_turbines_count": 0, "wind_turbine_terrain_type": 2, "fixed_lighting_outlets_count": 15, "low_energy_fixed_lighting_outlets_count": 15, "low_energy_fixed_lighting_outlets_percentage": 100}, "sap_opening_types": [{"name": "Opening Type 1", "type": 4, "u_value": 1.4, "data_source": 2, "frame_factor": 0.7, "glazing_type": 3, "solar_transmittance": 0.76}, {"name": "Opening Type 3", "type": 1, "u_value": 1, "data_source": 2, "glazing_type": 1}, {"name": "Opening Type 5", "type": 5, "u_value": 1.4, "data_source": 2, "frame_factor": 0.7, "glazing_type": 3, "solar_transmittance": 0.76}], "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lzc_energy_sources": [11], "sap_building_parts": [{"sap_roofs": [{"name": "Roof 1", "u_value": 0.14, "roof_type": 2, "description": "J Roof", "total_roof_area": 100.85}, {"name": "Roof 2", "u_value": 0.17, "roof_type": 2, "description": "R Roof", "total_roof_area": 31.82}], "sap_walls": [{"name": "External Wall 1", "u_value": 0.23, "wall_type": 2, "description": "Do cheeks", "total_wall_area": 10.91, "is_curtain_walling": "false"}, {"name": "External Wall 2", "u_value": 0.18, "wall_type": 2, "description": "Dw Wall", "total_wall_area": 29.83, "is_curtain_walling": "false"}, {"name": "External Wall 3", "u_value": 0.18, "wall_type": 2, "description": "E Wall brick", "total_wall_area": 126.64, "is_curtain_walling": "false"}, {"name": "External Wall 4", "u_value": 0.17, "wall_type": 2, "description": "E Wall rend", "total_wall_area": 64.34, "is_curtain_walling": "false"}], "identifier": "Main Dwelling", "overshading": 2, "sap_openings": [{"name": 1, "type": "Opening Type 1", "width": 2.23, "height": 1.25, "location": "External Wall 3", "orientation": 1}, {"name": 2, "type": "Opening Type 1", "width": 1.13, "height": 1.25, "location": "External Wall 3", "orientation": 1}, {"name": 3, "type": "Opening Type 3", "width": 1.01, "height": 2.1, "location": "External Wall 3", "orientation": 0}, {"name": 4, "type": "Opening Type 1", "width": 0.45, "height": 2.1, "location": "External Wall 3", "orientation": 1}, {"name": 5, "type": "Opening Type 5", "pitch": 40, "width": 0.75, "height": 1.34, "location": "Roof 2", "orientation": 1}, {"name": 6, "type": "Opening Type 1", "width": 1.14, "height": 1.15, "location": "External Wall 4", "orientation": 1}, {"name": 7, "type": "Opening Type 1", "width": 1.14, "height": 1.15, "location": "External Wall 4", "orientation": 1}, {"name": 8, "type": "Opening Type 1", "width": 1.94, "height": 2.1, "location": "External Wall 3", "orientation": 2}, {"name": 9, "type": "Opening Type 1", "width": 2.23, "height": 1.25, "location": "External Wall 3", "orientation": 2}, {"name": 10, "type": "Opening Type 1", "width": 1.13, "height": 1.15, "location": "External Wall 1", "orientation": 2}, {"name": 11, "type": "Opening Type 1", "width": 1.13, "height": 1.15, "location": "External Wall 1", "orientation": 2}, {"name": 12, "type": "Opening Type 1", "width": 1.13, "height": 1.95, "location": "External Wall 4", "orientation": 2}, {"name": 13, "type": "Opening Type 5", "pitch": 40, "width": 1.13, "height": 1.54, "location": "Roof 2", "orientation": 2}, {"name": 14, "type": "Opening Type 1", "width": 1.66, "height": 1.25, "location": "External Wall 3", "orientation": 4}, {"name": 15, "type": "Opening Type 1", "width": 1.94, "height": 2.1, "location": "External Wall 3", "orientation": 5}, {"name": 16, "type": "Opening Type 1", "width": 3.92, "height": 2.1, "location": "External Wall 3", "orientation": 5}, {"name": 17, "type": "Opening Type 1", "width": 1.13, "height": 1.15, "location": "External Wall 4", "orientation": 5}, {"name": 18, "type": "Opening Type 5", "pitch": 40, "width": 0.75, "height": 1.34, "location": "Roof 2", "orientation": 5}, {"name": 19, "type": "Opening Type 1", "width": 1.98, "height": 2.1, "location": "External Wall 3", "orientation": 6}, {"name": 20, "type": "Opening Type 1", "width": 1.66, "height": 1.25, "location": "External Wall 3", "orientation": 6}, {"name": 21, "type": "Opening Type 1", "width": 1.13, "height": 1.15, "location": "External Wall 4", "orientation": 6}, {"name": 22, "type": "Opening Type 1", "width": 1.14, "height": 1.15, "location": "External Wall 4", "orientation": 6}], "construction_year": 2018, "sap_thermal_bridges": {"thermal_bridges": [{"length": 21.28, "psi_value": 0.3, "psi_value_source": 2, "thermal_bridge_type": "E2"}, {"length": 7.94, "psi_value": 0.3, "psi_value_source": 2, "thermal_bridge_type": "E2"}, {"length": 28.21, "psi_value": 0.046, "psi_value_source": 3, "thermal_bridge_type": "E3"}, {"length": 48.6, "psi_value": 0.051, "psi_value_source": 3, "thermal_bridge_type": "E4"}, {"length": 9.1, "psi_value": 0.05, "psi_value_source": 2, "thermal_bridge_type": "E4"}, {"length": 52.77, "psi_value": 0.16, "psi_value_source": 2, "thermal_bridge_type": "E5"}, {"length": 25.78, "psi_value": 0, "psi_value_source": 3, "thermal_bridge_type": "E6"}, {"length": 21.29, "psi_value": 0.07, "psi_value_source": 2, "thermal_bridge_type": "E6"}, {"length": 30.56, "psi_value": 0.134, "psi_value_source": 3, "thermal_bridge_type": "E10"}, {"length": 19.6, "psi_value": 0.06, "psi_value_source": 2, "thermal_bridge_type": "E10"}, {"length": 14.67, "psi_value": 0.037, "psi_value_source": 3, "thermal_bridge_type": "E11"}, {"length": 4.69, "psi_value": 0.083, "psi_value_source": 3, "thermal_bridge_type": "E12"}, {"length": 4.8, "psi_value": 0.08, "psi_value_source": 3, "thermal_bridge_type": "E13"}, {"length": 24.66, "psi_value": 0.053, "psi_value_source": 3, "thermal_bridge_type": "E16"}, {"length": 22.75, "psi_value": 0.09, "psi_value_source": 2, "thermal_bridge_type": "E16"}, {"length": 11.42, "psi_value": -0.05, "psi_value_source": 3, "thermal_bridge_type": "E17"}, {"length": 10.81, "psi_value": -0.09, "psi_value_source": 2, "thermal_bridge_type": "E17"}, {"length": 2.63, "psi_value": 0.08, "psi_value_source": 4, "thermal_bridge_type": "R1"}, {"length": 2.63, "psi_value": 0.06, "psi_value_source": 4, "thermal_bridge_type": "R2"}, {"length": 8.44, "psi_value": 0.08, "psi_value_source": 4, "thermal_bridge_type": "R3"}, {"length": 4.39, "psi_value": 0.08, "psi_value_source": 4, "thermal_bridge_type": "R4"}, {"length": 1.26, "psi_value": 0.04, "psi_value_source": 4, "thermal_bridge_type": "R5"}, {"length": 24.11, "psi_value": 0.06, "psi_value_source": 4, "thermal_bridge_type": "R6"}, {"length": 13.06, "psi_value": 0.06, "psi_value_source": 4, "thermal_bridge_type": "R8"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.14, "floor_type": 2, "description": "G Floor", "storey_height": 2.4, "heat_loss_area": 123.35, "total_floor_area": 123.35}, {"storey": 1, "u_value": 0, "floor_type": 3, "storey_height": 2.56, "heat_loss_area": 0, "total_floor_area": 89.53}], "thermal_mass_parameter": 250}], "heating_cost_current": {"value": 415, "currency": "GBP"}, "co2_emissions_current": 2.2, "energy_rating_average": 60, "energy_rating_current": 89, "lighting_cost_current": {"value": 102, "currency": "GBP"}, "main_heating_controls": [{"description": "Time and temperature zone control", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 415, "currency": "GBP"}, "hot_water_cost_current": {"value": 112, "currency": "GBP"}, "co2_emissions_potential": 2.2, "energy_rating_potential": 89, "lighting_cost_potential": {"value": 102, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "hot_water_cost_potential": {"value": 112, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "renewable_heat_incentive": {"rhi_new_dwelling": {"space_heating": 7411, "water_heating": 2420}}, "seller_commission_report": "Y", "energy_consumption_current": 58, "has_fixed_air_conditioning": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "4.10r08", "energy_consumption_potential": 58, "environmental_impact_current": 87, "current_energy_efficiency_band": "B", "environmental_impact_potential": 87, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 10} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/GU12ND/cert-440a9e06b4ff.json b/tests/fixtures/epc_prediction/GU12ND/cert-440a9e06b4ff.json new file mode 100644 index 00000000..11609304 --- /dev/null +++ b/tests/fixtures/epc_prediction/GU12ND/cert-440a9e06b4ff.json @@ -0,0 +1 @@ +{"uprn": 100061404210, "roofs": [{"description": "Pitched, 150 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": "Pitched, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Solid, insulated (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "windows": [{"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": "Low energy lighting in 70% of fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "GU1 2ND", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2012-08-09 10:29:08.000000", "door_count": 1, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "boiler_index_number": 8441, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "main_heating_data_source": 1}], "has_fixed_air_conditioning": "false"}, "sap_version": 9.91, "schema_type": "SAP-Schema-16.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-b7b58b2662f9", "schema_version": "LIG-16.0", "assessment_type": "RdSAP", "completion_date": "2012-08-09", "inspection_date": "2012-08-09", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 102, "transaction_type": 4, "conservatory_type": 1, "heated_room_count": 5, "registration_date": "2012-08-09", "restricted_access": 0, "sap_energy_source": {"main_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"percent_roof_area": 0}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 290, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.4, "floor_insulation": 1, "total_floor_area": 41.62, "floor_construction": 2, "heat_loss_perimeter": 15.21}, {"floor": 1, "room_height": 2.4, "total_floor_area": 39.66, "heat_loss_perimeter": 18.73}], "wall_insulation_type": 4, "construction_age_band": "E", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "150mm"}, {"wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.4, "floor_insulation": 1, "total_floor_area": 20.69, "floor_construction": 1, "heat_loss_perimeter": 17.03}], "wall_insulation_type": 4, "construction_age_band": "J", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "NI"}], "low_energy_lighting": 70, "solar_water_heating": "N", "bedf_revision_number": 326, "habitable_room_count": 5, "heating_cost_current": {"value": 683, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.1, "energy_rating_average": 60, "energy_rating_current": 64, "lighting_cost_current": {"value": 69, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 474, "currency": "GBP"}, "hot_water_cost_current": {"value": 102, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 131, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 68}, {"sequence": 2, "typical_saving": {"value": 35, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W", "improvement_details": {"improvement_number": 47}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 70}, {"sequence": 3, "typical_saving": {"value": 14, "currency": "GBP"}, "indicative_cost": "\u00a315", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 70}, {"sequence": 4, "typical_saving": {"value": 58, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 73}, {"sequence": 5, "typical_saving": {"value": 26, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 75}, {"sequence": 6, "typical_saving": {"value": 231, "currency": "GBP"}, "indicative_cost": "\u00a39,000 - \u00a314,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 84, "environmental_impact_rating": 83}], "co2_emissions_potential": 1.6, "energy_rating_potential": 84, "lighting_cost_potential": {"value": 53, "currency": "GBP"}, "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 25, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 71, "environmental_impact_rating": 69}, {"sequence": 2, "typical_saving": {"value": 89, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 75, "environmental_impact_rating": 73}], "hot_water_cost_potential": {"value": 64, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2248, "impact_of_loft_insulation": -210, "impact_of_cavity_insulation": -3059, "space_heating_existing_dwelling": 12534}, "seller_commission_report": "Y", "energy_consumption_current": 209, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": 8.0, "energy_consumption_potential": 81, "environmental_impact_current": 60, "fixed_lighting_outlets_count": 10, "current_energy_efficiency_band": "D", "environmental_impact_potential": 83, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 40, "low_energy_fixed_lighting_outlets_count": 7} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/GU12ND/cert-49c1b9f2665b.json b/tests/fixtures/epc_prediction/GU12ND/cert-49c1b9f2665b.json new file mode 100644 index 00000000..0dd37e82 --- /dev/null +++ b/tests/fixtures/epc_prediction/GU12ND/cert-49c1b9f2665b.json @@ -0,0 +1 @@ +{"uprn": 100061404225, "roofs": [{"description": {"value": "Pitched, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": {"value": "Cavity wall, as built, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Solid, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Low energy lighting in all fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "GU1 2ND", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 1, "created_at": "2018-06-07 11:21:20.000000", "door_count": 2, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 3, "rooms_with_mixer_shower_no_bath": 2, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 15947}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 9.93, "schema_type": "RdSAP-Schema-18.0", "uprn_source": "Address Matched", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-d6b90956f717", "assessment_type": "RdSAP", "completion_date": "2018-06-07", "inspection_date": "2018-06-07", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 246, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 8, "registration_date": "2018-06-07", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 320, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.35, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 123, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 1, "heat_loss_perimeter": {"value": 53.14, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.35, "quantity": "metres"}, "total_floor_area": {"value": 123, "quantity": "square metres"}, "party_wall_length": 0, "heat_loss_perimeter": {"value": 53.14, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "J", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 8, "heating_cost_current": {"value": 790, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.7, "energy_rating_average": 60, "energy_rating_current": 80, "lighting_cost_current": {"value": 112, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 790, "currency": "GBP"}, "hot_water_cost_current": {"value": 123, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 296, "currency": "GBP"}, "indicative_cost": "8,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 84, "environmental_impact_rating": 80}], "co2_emissions_potential": 3.8, "energy_rating_potential": 84, "lighting_cost_potential": {"value": 112, "currency": "GBP"}, "schema_version_original": "LIG-18.0", "hot_water_cost_potential": {"value": 123, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2620, "space_heating_existing_dwelling": 15175}, "energy_consumption_current": 110, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.0.x", "energy_consumption_potential": 87, "environmental_impact_current": 76, "fixed_lighting_outlets_count": 14, "current_energy_efficiency_band": "C", "environmental_impact_potential": 80, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 19, "low_energy_fixed_lighting_outlets_count": 14} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/GU12ND/cert-4a32c3482c0b.json b/tests/fixtures/epc_prediction/GU12ND/cert-4a32c3482c0b.json new file mode 100644 index 00000000..0c26c4de --- /dev/null +++ b/tests/fixtures/epc_prediction/GU12ND/cert-4a32c3482c0b.json @@ -0,0 +1 @@ +{"uprn": 100061404214, "roofs": [{"description": "Pitched, 100 mm loft insulation", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, {"description": "Pitched, insulated (assumed)", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Suspended, insulated (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": "Good lighting efficiency", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "GU1 2ND", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2026-05-14 10:00:19", "door_count": 1, "region_code": 17, "report_type": 2, "sap_heating": {"number_baths": 1, "cylinder_size": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_outlet_type": 1}, {"shower_wwhrs": 1, "shower_outlet_type": 1}], "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17556}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 2.3, "window_height": 1.5, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 2.3, "window_height": 1.1, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 1, "window_type": 1, "glazing_type": 3, "window_width": 1.7, "window_height": 1.5, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 1.4, "window_height": 1.3, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 7, "window_type": 1, "glazing_type": 3, "window_width": 0.4, "window_height": 0.7, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 7, "window_type": 1, "glazing_type": 3, "window_width": 1.4, "window_height": 1.3, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 1, "window_type": 1, "glazing_type": 3, "window_width": 1.1, "window_height": 1, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 1, "window_type": 1, "glazing_type": 3, "window_width": 1.4, "window_height": 1.3, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 7, "window_type": 1, "glazing_type": 3, "window_width": 1.4, "window_height": 0.9, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Semi-detached house", "language_code": 1, "pressure_test": 4, "property_type": 0, "address_line_1": "addr-decdc8ab292c", "assessment_type": "RdSAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-13", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 108, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 6, "registration_date": "2026-05-14", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "true", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 2, "electricity_smart_meter_present": "true"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.41, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 32.44, "quantity": "square metres"}, "party_wall_length": {"value": 6.12, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 8.44, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.41, "quantity": "metres"}, "total_floor_area": {"value": 32.44, "quantity": "square metres"}, "party_wall_length": {"value": 6.12, "quantity": "metres"}, "heat_loss_perimeter": {"value": 10.99, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "E", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "100mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.41, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 28.05, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 19.05, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.41, "quantity": "metres"}, "total_floor_area": {"value": 14.93, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "heat_loss_perimeter": {"value": 16.47, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "J", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "solar_water_heating": "N", "habitable_room_count": 6, "heating_cost_current": {"value": 1020, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.2, "energy_rating_average": 60, "energy_rating_current": 71, "lighting_cost_current": {"value": 66, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 850, "currency": "GBP"}, "hot_water_cost_current": {"value": 217, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 90, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 127, "currency": "GBP"}, "indicative_cost": "\u00a3900 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 72}, {"sequence": 2, "typical_saving": {"value": 43, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a310,000", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 74}, {"sequence": 3, "typical_saving": {"value": 230, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 79, "environmental_impact_rating": 75}], "co2_emissions_potential": 2.6, "energy_rating_potential": 79, "lighting_cost_potential": {"value": 66, "currency": "GBP"}, "schema_version_original": "21.0.1", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 49, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 75, "environmental_impact_rating": 74}], "hot_water_cost_potential": {"value": 217, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2606.27, "space_heating_existing_dwelling": 10492.35}, "draughtproofed_door_count": 0, "energy_consumption_current": 161, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "5.02r0344", "energy_consumption_potential": 125, "environmental_impact_current": 69, "current_energy_efficiency_band": "C", "environmental_impact_potential": 75, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 29, "low_energy_fixed_lighting_bulbs_count": 12, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/GU12ND/cert-596f6e03bf26.json b/tests/fixtures/epc_prediction/GU12ND/cert-596f6e03bf26.json new file mode 100644 index 00000000..b3903030 --- /dev/null +++ b/tests/fixtures/epc_prediction/GU12ND/cert-596f6e03bf26.json @@ -0,0 +1 @@ +{"uprn": 100061404214, "roofs": [{"description": {"value": "Pitched, 50 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": {"value": "Pitched, 250 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": {"value": "Cavity wall, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": {"value": "Cavity wall, as built, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": {"value": "Timber frame, as built, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": {"value": "Solid, limited insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": {"value": "Solid, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": {"value": "Low energy lighting in 24% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "postcode": "GU1 2ND", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2015-05-25 23:03:12.000000", "door_count": 0, "glazed_area": 1, "region_code": 1, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 2, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 8625}], "immersion_heating_type": "NA", "secondary_heating_type": 603, "has_fixed_air_conditioning": "false"}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Semi-detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-0f8d0b47ef79", "assessment_type": "RdSAP", "completion_date": "2015-05-25", "inspection_date": "2015-05-15", "extensions_count": 3, "measurement_type": 1, "total_floor_area": 105, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 6, "registration_date": "2015-05-25", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Room heaters, mains gas", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 350, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 34.1, "quantity": "square metres"}, "party_wall_length": {"value": 5.2, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 10.1, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.4, "quantity": "metres"}, "total_floor_area": {"value": 34.1, "quantity": "square metres"}, "party_wall_length": {"value": 5.2, "quantity": "metres"}, "heat_loss_perimeter": {"value": 11.7, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "D", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "50mm", "wall_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 320, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 12.6, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 1, "heat_loss_perimeter": {"value": 10.2, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.4, "quantity": "metres"}, "total_floor_area": {"value": 6, "quantity": "square metres"}, "party_wall_length": 0, "heat_loss_perimeter": {"value": 8, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "I", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "250mm", "wall_insulation_thickness": "NI"}, {"identifier": "Extension 2", "wall_dry_lined": "N", "wall_thickness": 290, "floor_heat_loss": 7, "roof_construction": 7, "wall_construction": 4, "building_part_number": 3, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 13.64, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 1, "heat_loss_perimeter": {"value": 8.4, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "K", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": "ND", "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}, {"identifier": "Extension 3", "wall_dry_lined": "N", "wall_thickness": 240, "floor_heat_loss": 8, "roof_construction": 5, "wall_construction": 5, "building_part_number": 4, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "total_floor_area": {"value": 4.2, "quantity": "square metres"}, "party_wall_length": 0, "heat_loss_perimeter": {"value": 5.9, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "K", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 24, "solar_water_heating": "N", "habitable_room_count": 6, "heating_cost_current": {"value": 702, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.1, "energy_rating_average": 60, "energy_rating_current": 65, "lighting_cost_current": {"value": 111, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 473, "currency": "GBP"}, "hot_water_cost_current": {"value": 126, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 0, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 41, "currency": "GBP"}, "indicative_cost": "\u00a3100 - \u00a3350", "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 62}, {"sequence": 2, "typical_saving": {"value": 113, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 67}, {"sequence": 3, "typical_saving": {"value": 29, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 69}, {"sequence": 4, "typical_saving": {"value": 15, "currency": "GBP"}, "indicative_cost": "\u00a380 - \u00a3120", "improvement_type": "D", "improvement_details": {"improvement_number": 10}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 70}, {"sequence": 5, "typical_saving": {"value": 40, "currency": "GBP"}, "indicative_cost": "\u00a365", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 71}, {"sequence": 6, "typical_saving": {"value": 54, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 74}, {"sequence": 7, "typical_saving": {"value": 37, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 76}, {"sequence": 8, "typical_saving": {"value": 272, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a38,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 84}], "co2_emissions_potential": 1.5, "energy_rating_potential": 86, "lighting_cost_potential": {"value": 63, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 21, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 71, "environmental_impact_rating": 68}}], "hot_water_cost_potential": {"value": 74, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2253, "impact_of_loft_insulation": -755, "impact_of_cavity_insulation": -2103, "space_heating_existing_dwelling": 10519}, "energy_consumption_current": 220, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.0.0.0", "energy_consumption_potential": 78, "environmental_impact_current": 60, "fixed_lighting_outlets_count": 17, "current_energy_efficiency_band": "D", "environmental_impact_potential": 84, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 39, "low_energy_fixed_lighting_outlets_count": 4} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/GU12ND/cert-5ade569b7992.json b/tests/fixtures/epc_prediction/GU12ND/cert-5ade569b7992.json new file mode 100644 index 00000000..799653dc --- /dev/null +++ b/tests/fixtures/epc_prediction/GU12ND/cert-5ade569b7992.json @@ -0,0 +1 @@ +{"uprn": 100061404237, "roofs": [{"description": "Pitched, 270 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, filled cavity", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Low energy lighting in 60% of fixed outlets", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "GU1 2ND", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2019-04-26 11:25:18.000000", "door_count": 2, "glazed_area": 1, "glazing_gap": 12, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 16777}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 38}, "sap_version": 9.93, "schema_type": "RdSAP-Schema-18.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached bungalow", "language_code": 1, "property_type": 1, "address_line_1": "addr-4b14792d5504", "assessment_type": "RdSAP", "completion_date": "2019-04-26", "inspection_date": "2019-04-26", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 74, "transaction_type": 1, "conservatory_type": 2, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2019-04-26", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.41, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 73.91, "quantity": "square metres"}, "party_wall_length": {"value": 7.77, "quantity": "metres"}, "floor_construction": 3, "heat_loss_perimeter": {"value": 34.6, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "E", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "270mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 60, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 473, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.0, "energy_rating_average": 60, "energy_rating_current": 68, "lighting_cost_current": {"value": 77, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 1, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 387, "currency": "GBP"}, "hot_water_cost_current": {"value": 121, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 61, "currency": "GBP"}, "indicative_cost": "1,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 69}, {"sequence": 2, "typical_saving": {"value": 20, "currency": "GBP"}, "indicative_cost": 10, "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 69}, {"sequence": 3, "typical_saving": {"value": 42, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 72}, {"sequence": 4, "typical_saving": {"value": 31, "currency": "GBP"}, "indicative_cost": "1,400", "improvement_type": "O3", "improvement_details": {"improvement_number": 56}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 74}, {"sequence": 5, "typical_saving": {"value": 312, "currency": "GBP"}, "indicative_cost": "8,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 84}], "co2_emissions_potential": 1.2, "energy_rating_potential": 86, "lighting_cost_potential": {"value": 55, "currency": "GBP"}, "schema_version_original": "LIG-18.0", "hot_water_cost_potential": {"value": 76, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2611, "space_heating_existing_dwelling": 8186}, "energy_consumption_current": 227, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "3.09r16", "energy_consumption_potential": 89, "environmental_impact_current": 65, "fixed_lighting_outlets_count": 5, "current_energy_efficiency_band": "D", "environmental_impact_potential": 84, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 40, "low_energy_fixed_lighting_outlets_count": 3} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/GU12ND/cert-746d1470b732.json b/tests/fixtures/epc_prediction/GU12ND/cert-746d1470b732.json new file mode 100644 index 00000000..30095316 --- /dev/null +++ b/tests/fixtures/epc_prediction/GU12ND/cert-746d1470b732.json @@ -0,0 +1 @@ +{"uprn": 100061404228, "roofs": [{"description": "Pitched, 300 mm loft insulation", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, {"description": "Flat, insulated (assumed)", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": "Cavity wall, filled cavity", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "To unheated space, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "GU1 2ND", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2021-07-19 07:09:28.949998", "door_count": 1, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 2, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 1}, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17513}], "immersion_heating_type": "NA", "secondary_heating_type": 605, "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-c65067c4be04", "assessment_type": "RdSAP", "completion_date": "2021-07-19", "inspection_date": "2021-07-16", "extensions_count": 2, "measurement_type": 1, "total_floor_area": 131, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 7, "pvc_window_frames": "false", "registration_date": "2021-07-19", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, mains gas", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.41, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 52.51, "quantity": "square metres"}, "party_wall_length": {"value": 6.1, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 31.42, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.39, "quantity": "metres"}, "total_floor_area": {"value": 52.51, "quantity": "square metres"}, "party_wall_length": {"value": 6.1, "quantity": "metres"}, "heat_loss_perimeter": {"value": 29.41, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "E", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "300mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 2, "roof_construction": 4, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.39, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 16.27, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 8.23, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "E", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "300mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 2", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 4, "building_part_number": 3, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.39, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 9.56, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 6.22, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "H", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 7, "heating_cost_current": {"value": 829, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.9, "energy_rating_average": 60, "energy_rating_current": 66, "lighting_cost_current": {"value": 92, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 739, "currency": "GBP"}, "hot_water_cost_current": {"value": 84, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 91, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 63}, {"sequence": 2, "typical_saving": {"value": 352, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 70}], "co2_emissions_potential": 3.4, "energy_rating_potential": 77, "lighting_cost_potential": {"value": 92, "currency": "GBP"}, "schema_version_original": "20.0.0", "hot_water_cost_potential": {"value": 84, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2004, "space_heating_existing_dwelling": 15149}, "energy_consumption_current": 212, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.07r0002", "energy_consumption_potential": 146, "environmental_impact_current": 59, "fixed_lighting_outlets_count": 14, "current_energy_efficiency_band": "D", "environmental_impact_potential": 70, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 37, "low_energy_fixed_lighting_outlets_count": 14} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/GU12ND/cert-797f40114a59.json b/tests/fixtures/epc_prediction/GU12ND/cert-797f40114a59.json new file mode 100644 index 00000000..7c671dd4 --- /dev/null +++ b/tests/fixtures/epc_prediction/GU12ND/cert-797f40114a59.json @@ -0,0 +1 @@ +{"uprn": 100061404223, "roofs": [{"description": "Pitched, 50 mm loft insulation", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "windows": [{"description": "Fully double glazed", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": "Low energy lighting in 62% of fixed outlets", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "GU1 2ND", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2012-05-14 06:35:35.000000", "door_count": 2, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "N", "heat_emitter_type": 1, "boiler_index_number": 15169, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "main_heating_data_source": 1}], "has_fixed_air_conditioning": "false"}, "sap_version": 9.91, "schema_type": "SAP-Schema-16.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-ae6b6aaa361a", "schema_version": "LIG-16.0", "assessment_type": "RdSAP", "completion_date": "2012-05-14", "inspection_date": "2012-05-10", "windows_u_value": 2, "extensions_count": 0, "measurement_type": 1, "total_floor_area": 79, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "registration_date": "2012-05-14", "restricted_access": 0, "sap_energy_source": {"main_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"percent_roof_area": 0}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.3, "floor_insulation": 1, "total_floor_area": 39.5, "floor_construction": 2, "heat_loss_perimeter": 18.73}, {"floor": 1, "room_height": 2.3, "total_floor_area": 39.5, "heat_loss_perimeter": 18.73}], "wall_insulation_type": 4, "construction_age_band": "E", "wall_thickness_measured": "N", "roof_insulation_location": 2, "roof_insulation_thickness": "50mm"}], "low_energy_lighting": 62, "solar_transmittance": 0.72, "solar_water_heating": "N", "windows_data_source": 2, "bedf_revision_number": 316, "habitable_room_count": 4, "heating_cost_current": {"value": 530, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.1, "energy_rating_average": 60, "energy_rating_current": 66, "lighting_cost_current": {"value": 60, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 348, "currency": "GBP"}, "hot_water_cost_current": {"value": 82, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 19, "currency": "GBP"}, "indicative_cost": "\u00a3100 - \u00a3350", "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 66}, {"sequence": 2, "typical_saving": {"value": 77, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 74}, {"sequence": 3, "typical_saving": {"value": 30, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W", "improvement_details": {"improvement_number": 47}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 77}, {"sequence": 4, "typical_saving": {"value": 14, "currency": "GBP"}, "indicative_cost": "\u00a315", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 77}, {"sequence": 5, "typical_saving": {"value": 24, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 79}, {"sequence": 6, "typical_saving": {"value": 227, "currency": "GBP"}, "indicative_cost": "\u00a39,000 - \u00a314,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 88, "environmental_impact_rating": 89}], "co2_emissions_potential": 0.9, "energy_rating_potential": 88, "lighting_cost_potential": {"value": 44, "currency": "GBP"}, "alternative_improvements": [[{"improvement": {"sequence": 1, "typical_saving": {"value": 23, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 75, "environmental_impact_rating": 76}}]], "hot_water_cost_potential": {"value": 59, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2104, "impact_of_loft_insulation": -796, "space_heating_existing_dwelling": 10565}, "seller_commission_report": "Y", "energy_consumption_current": 207, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "1.4.0.0", "energy_consumption_potential": 56, "environmental_impact_current": 64, "fixed_lighting_outlets_count": 8, "current_energy_efficiency_band": "D", "environmental_impact_potential": 89, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 40, "low_energy_fixed_lighting_outlets_count": 5} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/GU12ND/cert-aea21e4564cc.json b/tests/fixtures/epc_prediction/GU12ND/cert-aea21e4564cc.json new file mode 100644 index 00000000..32d1d27f --- /dev/null +++ b/tests/fixtures/epc_prediction/GU12ND/cert-aea21e4564cc.json @@ -0,0 +1 @@ +{"uprn": 100061404226, "roofs": [{"description": {"value": "Pitched, 200 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": {"value": "Flat, limited insulation", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "walls": [{"description": {"value": "Cavity wall, filled cavity", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Low energy lighting in 58% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "GU1 2ND", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 1, "created_at": "2016-02-23 14:45:41.000000", "door_count": 3, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 2, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2104, "main_heating_category": 2, "main_heating_fraction": 1, "mcs_installed_heat_pump": "false", "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 10201}], "immersion_heating_type": "NA", "secondary_heating_type": 612, "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 25}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Detached bungalow", "language": "1"}, "language_code": 1, "property_type": 1, "address_line_1": "addr-0b764bf6d5cb", "assessment_type": "RdSAP", "completion_date": "2016-02-23", "inspection_date": "2016-02-23", "extensions_count": 2, "measurement_type": 1, "total_floor_area": 88, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 3, "registration_date": "2016-02-23", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Room heaters, mains gas", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.42, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 59.5, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 2, "heat_loss_perimeter": {"value": 27.7, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "D", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "200mm", "wall_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.42, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 20.7, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 2, "heat_loss_perimeter": {"value": 20.1, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "F", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}, {"identifier": "Extension 2", "wall_dry_lined": "N", "wall_thickness": 310, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 4, "building_part_number": 3, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.42, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 7.5, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 2, "heat_loss_perimeter": {"value": 8, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "F", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 58, "solar_water_heating": "N", "habitable_room_count": 3, "heating_cost_current": {"value": 869, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.8, "energy_rating_average": 60, "energy_rating_current": 56, "lighting_cost_current": {"value": 81, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer and room thermostat", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 2, "open_fireplaces_count": 1, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 682, "currency": "GBP"}, "hot_water_cost_current": {"value": 144, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 29, "currency": "GBP"}, "indicative_cost": "1,500", "improvement_type": "A2", "improvement_details": {"improvement_number": 45}, "improvement_category": 5, "energy_performance_rating": 57, "environmental_impact_rating": 49}, {"sequence": 2, "typical_saving": {"value": 136, "currency": "GBP"}, "indicative_cost": "1,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 62, "environmental_impact_rating": 55}, {"sequence": 3, "typical_saving": {"value": 19, "currency": "GBP"}, "indicative_cost": 25, "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 63, "environmental_impact_rating": 56}, {"sequence": 4, "typical_saving": {"value": 34, "currency": "GBP"}, "indicative_cost": 450, "improvement_type": "G", "improvement_details": {"improvement_number": 13}, "improvement_category": 5, "energy_performance_rating": 64, "environmental_impact_rating": 58}, {"sequence": 5, "typical_saving": {"value": 52, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 60}, {"sequence": 6, "typical_saving": {"value": 282, "currency": "GBP"}, "indicative_cost": "8,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 70}], "co2_emissions_potential": 2.5, "energy_rating_potential": 76, "lighting_cost_potential": {"value": 57, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "hot_water_cost_potential": {"value": 85, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2857, "impact_of_loft_insulation": -166, "space_heating_existing_dwelling": 11576}, "energy_consumption_current": 312, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "1.0.x", "energy_consumption_potential": 162, "environmental_impact_current": 48, "fixed_lighting_outlets_count": 12, "current_energy_efficiency_band": "D", "environmental_impact_potential": 70, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 55, "low_energy_fixed_lighting_outlets_count": 7} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/GU12ND/cert-b582d4837933.json b/tests/fixtures/epc_prediction/GU12ND/cert-b582d4837933.json new file mode 100644 index 00000000..757f4732 --- /dev/null +++ b/tests/fixtures/epc_prediction/GU12ND/cert-b582d4837933.json @@ -0,0 +1 @@ +{"uprn": 100061404231, "roofs": [{"description": {"value": "Pitched, 250 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": {"value": "Flat, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": {"value": "Cavity wall, filled cavity", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": {"value": "Cavity wall, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in all fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "GU1 2ND", "hot_water": {"description": {"value": "From main system, no cylinder thermostat", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 2, "created_at": "2017-03-09 19:19:29.000000", "door_count": 2, "glazed_area": 1, "glazing_gap": 12, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "mcs_installed_heat_pump": "false", "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17489}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 25}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Semi-detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-60c0da087746", "assessment_type": "RdSAP", "completion_date": "2017-03-09", "inspection_date": "2017-02-28", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 137, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 6, "pvc_window_frames": "true", "registration_date": "2017-03-09", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 270, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.35, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 68.4, "quantity": "square metres"}, "party_wall_length": {"value": 8.25, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 19.73, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.31, "quantity": "metres"}, "total_floor_area": {"value": 47.36, "quantity": "square metres"}, "party_wall_length": {"value": 8.25, "quantity": "metres"}, "heat_loss_perimeter": {"value": 24.83, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "D", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "250mm", "wall_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "Y", "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.35, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 21.04, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 1, "heat_loss_perimeter": {"value": 13.35, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "D", "party_wall_construction": 0, "wall_thickness_measured": "N", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 6, "heating_cost_current": {"value": 838, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 5, "energy_rating_average": 60, "energy_rating_current": 67, "lighting_cost_current": {"value": 77, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 646, "currency": "GBP"}, "hot_water_cost_current": {"value": 189, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 91, "currency": "GBP"}, "indicative_cost": "1,500", "improvement_type": "A2", "improvement_details": {"improvement_number": 45}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 63}, {"sequence": 2, "typical_saving": {"value": 47, "currency": "GBP"}, "indicative_cost": "1,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 65}, {"sequence": 3, "typical_saving": {"value": 44, "currency": "GBP"}, "indicative_cost": "1,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 67}, {"sequence": 4, "typical_saving": {"value": 59, "currency": "GBP"}, "indicative_cost": 400, "improvement_type": "F", "improvement_details": {"improvement_number": 4}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 69}, {"sequence": 5, "typical_saving": {"value": 53, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 71}, {"sequence": 6, "typical_saving": {"value": 286, "currency": "GBP"}, "indicative_cost": "8,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 82, "environmental_impact_rating": 78}], "co2_emissions_potential": 2.5, "energy_rating_potential": 82, "lighting_cost_potential": {"value": 77, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 47, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 72, "environmental_impact_rating": 67}}], "hot_water_cost_potential": {"value": 87, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3661, "impact_of_cavity_insulation": -922, "space_heating_existing_dwelling": 14734}, "energy_consumption_current": 208, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "1.0.x", "energy_consumption_potential": 104, "environmental_impact_current": 59, "fixed_lighting_outlets_count": 8, "current_energy_efficiency_band": "D", "environmental_impact_potential": 78, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 37, "low_energy_fixed_lighting_outlets_count": 8} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/GU12ND/cert-c6cdd21e7426.json b/tests/fixtures/epc_prediction/GU12ND/cert-c6cdd21e7426.json new file mode 100644 index 00000000..88ccc8a7 --- /dev/null +++ b/tests/fixtures/epc_prediction/GU12ND/cert-c6cdd21e7426.json @@ -0,0 +1 @@ +{"uprn": 100061404229, "roofs": [{"description": "Pitched, 100 mm loft insulation", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, {"description": "Flat, limited insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": "Cavity wall, as built, partial insulation (assumed)", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": "Low energy lighting in 54% of fixed outlets", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "GU1 2ND", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 1, "created_at": "2024-08-02 07:43:34", "door_count": 1, "glazed_area": 1, "glazing_gap": "16+", "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 2, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 15169}], "immersion_heating_type": "NA", "secondary_heating_type": 612, "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Detached bungalow", "language_code": 1, "property_type": 1, "address_line_1": "addr-3d8869382dcc", "assessment_type": "RdSAP", "completion_date": "2024-08-02", "inspection_date": "2024-08-01", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 98, "transaction_type": 1, "conservatory_type": 4, "heated_room_count": 5, "pvc_window_frames": "true", "registration_date": "2024-08-02", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, mains gas", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"floor_area": 12.39, "room_height": 1, "double_glazed": "N", "glazed_perimeter": 9.95}, {"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 280, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.41, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 71.59, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 26.37, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "D", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "100mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 280, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.41, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 14.16, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 11.64, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "F", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "low_energy_lighting": 54, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 1923, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 6.1, "energy_rating_average": 60, "energy_rating_current": 49, "lighting_cost_current": {"value": 167, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 1, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 1488, "currency": "GBP"}, "hot_water_cost_current": {"value": 191, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 70, "currency": "GBP"}, "indicative_cost": "\u00a3100 - \u00a3350", "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 51, "environmental_impact_rating": 43}, {"sequence": 2, "typical_saving": {"value": 216, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 55, "environmental_impact_rating": 47}, {"sequence": 3, "typical_saving": {"value": 157, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 59, "environmental_impact_rating": 51}, {"sequence": 4, "typical_saving": {"value": 46, "currency": "GBP"}, "indicative_cost": "\u00a330", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 59, "environmental_impact_rating": 51}, {"sequence": 5, "typical_saving": {"value": 62, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 61, "environmental_impact_rating": 53}, {"sequence": 6, "typical_saving": {"value": 527, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 61}], "co2_emissions_potential": 3.6, "energy_rating_potential": 70, "lighting_cost_potential": {"value": 114, "currency": "GBP"}, "schema_version_original": "20.0.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 87, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 57, "environmental_impact_rating": 49}}], "hot_water_cost_potential": {"value": 129, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2228, "impact_of_loft_insulation": -631, "impact_of_cavity_insulation": -1954, "space_heating_existing_dwelling": 16017}, "energy_consumption_current": 354, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.13r0001", "energy_consumption_potential": 206, "environmental_impact_current": 41, "fixed_lighting_outlets_count": 13, "current_energy_efficiency_band": "E", "environmental_impact_potential": 61, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 62, "low_energy_fixed_lighting_outlets_count": 7} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/GU12ND/cert-cd700fbba191.json b/tests/fixtures/epc_prediction/GU12ND/cert-cd700fbba191.json new file mode 100644 index 00000000..6848809f --- /dev/null +++ b/tests/fixtures/epc_prediction/GU12ND/cert-cd700fbba191.json @@ -0,0 +1 @@ +{"uprn": 100061404210, "roofs": [{"description": "Pitched, 300 mm loft insulation", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, {"description": "Pitched, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Solid, limited insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": "Low energy lighting in 92% of fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "GU1 2ND", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2023-12-04 15:07:32", "door_count": 2, "glazed_area": 1, "glazing_gap": "16+", "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17556}], "immersion_heating_type": "NA", "secondary_heating_type": 605, "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-8fe3975f7a15", "assessment_type": "RdSAP", "completion_date": "2023-12-04", "inspection_date": "2023-12-04", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 105, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 5, "pvc_window_frames": "true", "registration_date": "2023-12-04", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, mains gas", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 280, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.41, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 40.58, "quantity": "square metres"}, "party_wall_length": {"value": 6.62, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 10.64, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.41, "quantity": "metres"}, "total_floor_area": {"value": 40.58, "quantity": "square metres"}, "party_wall_length": {"value": 6.62, "quantity": "metres"}, "heat_loss_perimeter": {"value": 18.88, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "D", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "300mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.68, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 23.99, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 19.7, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "I", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 92, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 1724, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.1, "energy_rating_average": 60, "energy_rating_current": 66, "lighting_cost_current": {"value": 168, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 1399, "currency": "GBP"}, "hot_water_cost_current": {"value": 245, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 245, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 64}, {"sequence": 2, "typical_saving": {"value": 79, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 66}, {"sequence": 3, "typical_saving": {"value": 83, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 68}, {"sequence": 4, "typical_saving": {"value": 675, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 80, "environmental_impact_rating": 76}], "co2_emissions_potential": 2.3, "energy_rating_potential": 80, "lighting_cost_potential": {"value": 168, "currency": "GBP"}, "schema_version_original": "20.0.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 170, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 71, "environmental_impact_rating": 67}}], "hot_water_cost_potential": {"value": 162, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2123, "impact_of_loft_insulation": -98, "impact_of_cavity_insulation": -1925, "space_heating_existing_dwelling": 12199}, "energy_consumption_current": 223, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.13r0001", "energy_consumption_potential": 122, "environmental_impact_current": 59, "fixed_lighting_outlets_count": 13, "current_energy_efficiency_band": "D", "environmental_impact_potential": 76, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 39, "low_energy_fixed_lighting_outlets_count": 12} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/GU12ND/cert-d6940361cc43.json b/tests/fixtures/epc_prediction/GU12ND/cert-d6940361cc43.json new file mode 100644 index 00000000..3337c67a --- /dev/null +++ b/tests/fixtures/epc_prediction/GU12ND/cert-d6940361cc43.json @@ -0,0 +1 @@ +{"uprn": 100061404223, "roofs": [{"description": "Pitched, 270 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Suspended, insulated (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "GU1 2ND", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2024-06-11 13:42:44", "door_count": 1, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 2, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 1}, "secondary_fuel_type": 29, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 15169}], "immersion_heating_type": "NA", "secondary_heating_type": 691, "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-bbb23e70044b", "assessment_type": "RdSAP", "completion_date": "2024-06-11", "inspection_date": "2024-06-11", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 123, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 7, "registration_date": "2024-06-11", "sap_energy_source": {"mains_gas": "Y", "meter_type": 3, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, electric", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 280, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.35, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 41.19, "quantity": "square metres"}, "party_wall_length": {"value": 6.3, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 12.56, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.31, "quantity": "metres"}, "total_floor_area": {"value": 41.1, "quantity": "square metres"}, "party_wall_length": {"value": 6.35, "quantity": "metres"}, "heat_loss_perimeter": {"value": 13.06, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "E", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "270mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 290, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.33, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 20.46, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 12.8, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.34, "quantity": "metres"}, "total_floor_area": {"value": 20.12, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "heat_loss_perimeter": {"value": 12.81, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "L", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "270mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 7, "heating_cost_current": {"value": 1197, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.6, "energy_rating_average": 60, "energy_rating_current": 70, "lighting_cost_current": {"value": 133, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 946, "currency": "GBP"}, "hot_water_cost_current": {"value": 197, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 172, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 72}, {"sequence": 2, "typical_saving": {"value": 78, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 74}, {"sequence": 3, "typical_saving": {"value": 64, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 75}, {"sequence": 4, "typical_saving": {"value": 527, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 84, "environmental_impact_rating": 82}], "co2_emissions_potential": 1.8, "energy_rating_potential": 84, "lighting_cost_potential": {"value": 133, "currency": "GBP"}, "schema_version_original": "20.0.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 84, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 74, "environmental_impact_rating": 73}}], "hot_water_cost_potential": {"value": 134, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2294, "impact_of_cavity_insulation": -1691, "space_heating_existing_dwelling": 10201}, "energy_consumption_current": 169, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.13r0001", "energy_consumption_potential": 83, "environmental_impact_current": 68, "fixed_lighting_outlets_count": 20, "current_energy_efficiency_band": "C", "environmental_impact_potential": 82, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 30, "low_energy_fixed_lighting_outlets_count": 20} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/GU12ND/cert-f91c1d926509.json b/tests/fixtures/epc_prediction/GU12ND/cert-f91c1d926509.json new file mode 100644 index 00000000..42b307ef --- /dev/null +++ b/tests/fixtures/epc_prediction/GU12ND/cert-f91c1d926509.json @@ -0,0 +1 @@ +{"uprn": 100061404235, "roofs": [{"description": "Pitched, 270 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": "Flat, limited insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "walls": [{"description": "Cavity wall, filled cavity", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Low energy lighting in 70% of fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "GU1 2ND", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 1, "created_at": "2024-07-03 15:36:09", "door_count": 0, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 29, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 10464}], "immersion_heating_type": "NA", "secondary_heating_type": 691, "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 38}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Detached bungalow", "language_code": 1, "property_type": 1, "address_line_1": "addr-3c5c00a51458", "assessment_type": "RdSAP", "completion_date": "2024-07-03", "inspection_date": "2024-07-03", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 69, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "false", "registration_date": "2024-07-03", "sap_energy_source": {"mains_gas": "Y", "meter_type": 3, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, electric", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 280, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.38, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 59.11, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 30.17, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "C", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "270mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 280, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 9.47, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 3, "heat_loss_perimeter": {"value": 8.93, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "F", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "low_energy_lighting": 70, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 975, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.1, "energy_rating_average": 60, "energy_rating_current": 63, "lighting_cost_current": {"value": 114, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 827, "currency": "GBP"}, "hot_water_cost_current": {"value": 223, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 157, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 66}, {"sequence": 2, "typical_saving": {"value": 22, "currency": "GBP"}, "indicative_cost": "\u00a315", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 67}, {"sequence": 3, "typical_saving": {"value": 79, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 69}, {"sequence": 4, "typical_saving": {"value": 527, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 81, "environmental_impact_rating": 80}], "co2_emissions_potential": 1.4, "energy_rating_potential": 81, "lighting_cost_potential": {"value": 88, "currency": "GBP"}, "schema_version_original": "20.0.0", "hot_water_cost_potential": {"value": 139, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2562, "space_heating_existing_dwelling": 7999}, "energy_consumption_current": 257, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.13r0001", "energy_consumption_potential": 117, "environmental_impact_current": 61, "fixed_lighting_outlets_count": 10, "current_energy_efficiency_band": "D", "environmental_impact_potential": 80, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 45, "low_energy_fixed_lighting_outlets_count": 7} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/LE113PX/cert-038030a6cec7.json b/tests/fixtures/epc_prediction/LE113PX/cert-038030a6cec7.json new file mode 100644 index 00000000..833164ed --- /dev/null +++ b/tests/fixtures/epc_prediction/LE113PX/cert-038030a6cec7.json @@ -0,0 +1 @@ +{"uprn": 100030465799, "roofs": [{"description": "Pitched, 200 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": "Flat, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": "Low energy lighting in 50% of fixed outlets", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "LE11 3PX", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2022-02-11 16:04:53.726961", "door_count": 3, "glazed_area": 1, "region_code": 6, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "secondary_fuel_type": 29, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2104, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 16210}], "immersion_heating_type": "NA", "secondary_heating_type": 691, "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-71d1e49ba2c8", "assessment_type": "RdSAP", "completion_date": "2022-02-11", "inspection_date": "2022-02-10", "extensions_count": 2, "measurement_type": 1, "total_floor_area": 85, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 5, "registration_date": "2022-02-11", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, electric", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 255, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.45, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 39.31, "quantity": "square metres"}, "party_wall_length": {"value": 6.92, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 13.55, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.45, "quantity": "metres"}, "total_floor_area": {"value": 39.31, "quantity": "square metres"}, "party_wall_length": {"value": 6.92, "quantity": "metres"}, "heat_loss_perimeter": {"value": 18.28, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "200mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 255, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.28, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 1.27, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 3.15, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 2", "wall_dry_lined": "N", "wall_thickness": 100, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 3, "building_part_number": 3, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.23, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 5.15, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 6.76, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "low_energy_lighting": 50, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 886, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.5, "energy_rating_average": 60, "energy_rating_current": 56, "lighting_cost_current": {"value": 106, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and room thermostat", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 498, "currency": "GBP"}, "hot_water_cost_current": {"value": 86, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 25, "currency": "GBP"}, "indicative_cost": "\u00a3850 - \u00a31,500", "improvement_type": "A2", "improvement_details": {"improvement_number": 45}, "improvement_category": 5, "energy_performance_rating": 57, "environmental_impact_rating": 54}, {"sequence": 2, "typical_saving": {"value": 290, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 68}, {"sequence": 3, "typical_saving": {"value": 53, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 71}, {"sequence": 4, "typical_saving": {"value": 31, "currency": "GBP"}, "indicative_cost": "\u00a330", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 71}, {"sequence": 5, "typical_saving": {"value": 24, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 13}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 73}, {"sequence": 6, "typical_saving": {"value": 25, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 74}, {"sequence": 7, "typical_saving": {"value": 345, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 84, "environmental_impact_rating": 84}], "co2_emissions_potential": 1.5, "energy_rating_potential": 84, "lighting_cost_potential": {"value": 71, "currency": "GBP"}, "schema_version_original": "20.0.0", "hot_water_cost_potential": {"value": 61, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2101, "impact_of_loft_insulation": -109, "impact_of_solid_wall_insulation": -5127, "space_heating_existing_dwelling": 13600}, "energy_consumption_current": 304, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.08r0002", "energy_consumption_potential": 97, "environmental_impact_current": 52, "fixed_lighting_outlets_count": 12, "current_energy_efficiency_band": "D", "environmental_impact_potential": 84, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 53, "low_energy_fixed_lighting_outlets_count": 6} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/LE113PX/cert-0d3fbf862032.json b/tests/fixtures/epc_prediction/LE113PX/cert-0d3fbf862032.json new file mode 100644 index 00000000..6dd3654c --- /dev/null +++ b/tests/fixtures/epc_prediction/LE113PX/cert-0d3fbf862032.json @@ -0,0 +1 @@ +{"uprn": 100030465839, "roofs": [{"description": "Pitched, 250 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, filled cavity", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "windows": [{"description": "Fully double glazed", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "lighting": {"description": "Low energy lighting in 55% of fixed outlets", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "LE11 3PX", "hot_water": {"description": "From main system", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 1, "created_at": "2013-03-15 08:53:15.000000", "door_count": 2, "glazed_area": 1, "region_code": 6, "report_type": 2, "sap_heating": {"wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 1, "heat_emitter_type": 1, "boiler_index_number": 1379, "main_heating_number": 1, "main_heating_control": 2104, "main_heating_category": 2, "main_heating_fraction": 1, "main_heating_data_source": 1}], "secondary_heating_type": 603, "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 38}, "sap_version": 9.91, "schema_type": "SAP-Schema-16.2", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Detached bungalow", "language_code": 1, "property_type": 1, "address_line_1": "addr-2f28f50f6159", "schema_version": "LIG-16.1", "assessment_type": "RdSAP", "completion_date": "2013-03-15", "inspection_date": "2013-03-14", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 81, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "registration_date": "2013-03-15", "restricted_access": 0, "sap_energy_source": {"main_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"percent_roof_area": 0}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, mains gas", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.43, "floor_insulation": 1, "total_floor_area": 74.78, "floor_construction": 1, "heat_loss_perimeter": 33.23}], "wall_insulation_type": 2, "construction_age_band": "E", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "250mm"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 280, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.29, "floor_insulation": 1, "total_floor_area": 6.16, "floor_construction": 1, "heat_loss_perimeter": 7.07}], "wall_insulation_type": 4, "construction_age_band": "G", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "NI"}], "low_energy_lighting": 55, "solar_water_heating": "N", "bedf_revision_number": 335, "habitable_room_count": 4, "heating_cost_current": {"value": 632, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.0, "energy_rating_average": 60, "energy_rating_current": 60, "lighting_cost_current": {"value": 67, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and room thermostat", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 418, "currency": "GBP"}, "hot_water_cost_current": {"value": 148, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 104, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W", "improvement_details": {"improvement_number": 47}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 63}, {"sequence": 2, "typical_saving": {"value": 17, "currency": "GBP"}, "indicative_cost": "\u00a325", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 64}, {"sequence": 3, "typical_saving": {"value": 24, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 13}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 65}, {"sequence": 4, "typical_saving": {"value": 132, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 73}, {"sequence": 5, "typical_saving": {"value": 33, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 76}, {"sequence": 6, "typical_saving": {"value": 226, "currency": "GBP"}, "indicative_cost": "\u00a39,000 - \u00a314,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 85, "environmental_impact_rating": 85}], "co2_emissions_potential": 1.3, "energy_rating_potential": 85, "lighting_cost_potential": {"value": 46, "currency": "GBP"}, "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 159, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 74, "environmental_impact_rating": 73}}], "hot_water_cost_potential": {"value": 72, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2605, "space_heating_existing_dwelling": 9346}, "seller_commission_report": "Y", "energy_consumption_current": 256, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "1.07r10", "energy_consumption_potential": 82, "environmental_impact_current": 56, "fixed_lighting_outlets_count": 11, "current_energy_efficiency_band": "D", "environmental_impact_potential": 85, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 49, "low_energy_fixed_lighting_outlets_count": 6} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/LE113PX/cert-1d3b9feac3b4.json b/tests/fixtures/epc_prediction/LE113PX/cert-1d3b9feac3b4.json new file mode 100644 index 00000000..0b5bc94c --- /dev/null +++ b/tests/fixtures/epc_prediction/LE113PX/cert-1d3b9feac3b4.json @@ -0,0 +1 @@ +{"uprn": 100030465850, "roofs": [{"description": "Pitched, 270 mm loft insulation", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, {"description": "Flat, limited insulation", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": "Good lighting efficiency", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "LE11 3PX", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 1, "created_at": "2025-07-30 11:37:41", "door_count": 3, "region_code": 6, "report_type": 2, "sap_heating": {"number_baths": 1, "cylinder_size": 1, "shower_outlets": [{"shower_outlet": {"shower_wwhrs": 1, "shower_outlet_type": 2}}], "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 9505}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "true", "glazing_gap": 12, "orientation": 6, "window_type": 1, "glazing_type": 3, "window_width": 1.85, "window_height": 1.3, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 6, "window_type": 1, "glazing_type": 3, "window_width": 2, "window_height": 2, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 2, "window_type": 1, "glazing_type": 3, "window_width": 1.87, "window_height": 1.3, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 2, "window_type": 1, "glazing_type": 3, "window_width": 2.53, "window_height": 1.3, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 8, "window_type": 1, "glazing_type": 3, "window_width": 1.23, "window_height": 1.3, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 4, "window_type": 1, "glazing_type": 3, "window_width": 1.88, "window_height": 1.3, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 4, "window_type": 1, "glazing_type": 3, "window_width": 1.51, "window_height": 1.3, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Detached bungalow", "language_code": 1, "pressure_test": 4, "property_type": 1, "address_line_1": "addr-e1efb3e670c9", "assessment_type": "RdSAP", "completion_date": "2025-07-30", "inspection_date": "2025-07-30", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 84, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 6, "registration_date": "2025-07-30", "sap_energy_source": {"mains_gas": "Y", "meter_type": 1, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "true", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 2, "electricity_smart_meter_present": "true"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "Y", "wall_thickness": 290, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.42, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 72.06, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 29.76, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "E", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "270mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "Y", "wall_thickness": 290, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.42, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 12.38, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 10.14, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "E", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "solar_water_heating": "N", "habitable_room_count": 6, "heating_cost_current": {"value": 1212, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.7, "energy_rating_average": 60, "energy_rating_current": 60, "lighting_cost_current": {"value": 63, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 745, "currency": "GBP"}, "hot_water_cost_current": {"value": 323, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 70, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 50, "currency": "GBP"}, "indicative_cost": "\u00a3900 - \u00a31,200", "improvement_type": "A2", "improvement_details": {"improvement_number": 45}, "improvement_category": 5, "energy_performance_rating": 61, "environmental_impact_rating": 63}, {"sequence": 2, "typical_saving": {"value": 147, "currency": "GBP"}, "indicative_cost": "\u00a3900 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 64, "environmental_impact_rating": 68}, {"sequence": 3, "typical_saving": {"value": 117, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a310,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 71}, {"sequence": 4, "typical_saving": {"value": 180, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,500", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 75}, {"sequence": 5, "typical_saving": {"value": 270, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 76}], "co2_emissions_potential": 2.2, "energy_rating_potential": 77, "lighting_cost_potential": {"value": 63, "currency": "GBP"}, "schema_version_original": "21.0.1", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 60, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 66, "environmental_impact_rating": 70}, {"sequence": 2, "typical_saving": {"value": 131, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 69, "environmental_impact_rating": 95}, {"sequence": 3, "typical_saving": {"value": 67, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 68, "environmental_impact_rating": 68}], "hot_water_cost_potential": {"value": 296, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2322.89, "space_heating_existing_dwelling": 11919.6}, "draughtproofed_door_count": 0, "energy_consumption_current": 246, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "5.02r0290", "energy_consumption_potential": 143, "environmental_impact_current": 61, "current_energy_efficiency_band": "D", "environmental_impact_potential": 76, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 44, "low_energy_fixed_lighting_bulbs_count": 12, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/LE113PX/cert-2b41b08a0fc6.json b/tests/fixtures/epc_prediction/LE113PX/cert-2b41b08a0fc6.json new file mode 100644 index 00000000..25b59b1d --- /dev/null +++ b/tests/fixtures/epc_prediction/LE113PX/cert-2b41b08a0fc6.json @@ -0,0 +1 @@ +{"uprn": 100030465833, "roofs": [{"description": "Pitched, insulated (assumed)", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, {"description": "Roof room(s), limited insulation (assumed)", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": "Good lighting efficiency", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "LE11 3PX", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "psv_count": 0, "built_form": 2, "created_at": "2025-07-11 17:04:41", "door_count": 0, "region_code": 6, "report_type": 2, "sap_heating": {"number_baths": 1, "cylinder_size": 1, "shower_outlets": [{"shower_outlet": {"shower_wwhrs": 1, "shower_outlet_type": 1}}], "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "N", "heat_emitter_type": 1, "emitter_temperature": 1, "main_heating_number": 1, "main_heating_control": 2107, "main_heating_category": 2, "main_heating_fraction": 1, "main_heating_data_source": 1, "main_heating_index_number": 16931}], "immersion_heating_type": "NA", "secondary_heating_type": 607, "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "true", "glazing_gap": "16+", "orientation": 8, "window_type": 1, "glazing_type": 3, "window_width": {"value": 1.25, "quantity": "m"}, "window_height": {"value": 0.94, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 2, "window_type": 1, "glazing_type": 3, "window_width": {"value": 2.5, "quantity": "m"}, "window_height": {"value": 1.17, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 6, "window_type": 1, "glazing_type": 3, "window_width": {"value": 2.45, "quantity": "m"}, "window_height": {"value": 2.02, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 6, "window_type": 1, "glazing_type": 3, "window_width": {"value": 1.9, "quantity": "m"}, "window_height": {"value": 12.1, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 6, "window_type": 1, "glazing_type": 3, "window_width": {"value": 2.52, "quantity": "m"}, "window_height": {"value": 2.52, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 6, "window_type": 1, "glazing_type": 3, "window_width": {"value": 1.77, "quantity": "m"}, "window_height": {"value": 1.19, "quantity": "m"}, "draught_proofed": "false", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 6, "window_type": 1, "glazing_type": 3, "window_width": {"value": 1.77, "quantity": "m"}, "window_height": {"value": 1.19, "quantity": "m"}, "draught_proofed": "false", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 8, "window_type": 1, "glazing_type": 3, "window_width": {"value": 1.91, "quantity": "m"}, "window_height": {"value": 1.11, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 5, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 8, "window_type": 1, "glazing_type": 3, "window_width": {"value": 2.49, "quantity": "m"}, "window_height": {"value": 0.31, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 5, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 2, "window_type": 1, "glazing_type": 3, "window_width": {"value": 1.91, "quantity": "m"}, "window_height": {"value": 0.11, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 4, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 8, "window_type": 1, "glazing_type": 3, "window_width": {"value": 2.49, "quantity": "m"}, "window_height": {"value": 1.11, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 4, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Semi-detached bungalow", "language_code": 1, "pressure_test": 4, "property_type": 1, "address_line_1": "addr-49ebc5014c42", "assessment_type": "RdSAP", "completion_date": "2025-07-11", "inspection_date": "2025-07-09", "extensions_count": 1, "measurement_type": 1, "open_flues_count": 0, "total_floor_area": 124, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 5, "other_flues_count": 0, "registration_date": "2025-07-11", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "false", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 2, "electricity_smart_meter_present": "false"}, "secondary_heating": {"description": "Room heaters, mains gas", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "closed_flues_count": 0, "extract_fans_count": 2, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "sap_room_in_roof": {"floor_area": 29.29, "room_in_roof_type_1": {"gable_wall_type_1": 0, "gable_wall_type_2": 1, "gable_wall_length_1": 5.93, "gable_wall_length_2": 4.94}, "construction_age_band": "J"}, "roof_construction": 5, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.52, "floor_insulation": 1, "total_floor_area": 42.87, "party_wall_length": 12.01, "floor_construction": 1, "heat_loss_perimeter": 10.65}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "wall_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "sap_room_in_roof": {"floor_area": 29.29, "room_in_roof_type_1": {"gable_wall_type_1": 0, "gable_wall_type_2": 1, "gable_wall_length_1": 5.93, "gable_wall_length_2": 4.94}, "construction_age_band": "J"}, "roof_construction": 1, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.52, "floor_insulation": 1, "total_floor_area": 22.78, "party_wall_length": 0, "floor_construction": 1, "heat_loss_perimeter": 13.86}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "boilers_flues_count": 0, "open_chimneys_count": 0, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 1226, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.2, "energy_rating_average": 60, "energy_rating_current": 69, "lighting_cost_current": {"value": 72, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, TRVs and bypass", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "blocked_chimneys_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 960, "currency": "GBP"}, "hot_water_cost_current": {"value": 216, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 0, "schema_version_current": "LIG-21.0", "suggested_improvements": [{"sequence": 1, "typical_saving": 151, "indicative_cost": "\u00a3900 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 69}, {"sequence": 2, "typical_saving": 72, "indicative_cost": "\u00a35,000 - \u00a310,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 71}, {"sequence": 3, "typical_saving": 41, "indicative_cost": "\u00a3150 - \u00a3250", "improvement_type": "D", "improvement_details": {"improvement_number": 10}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 72}, {"sequence": 4, "typical_saving": 291, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 82, "environmental_impact_rating": 74}], "co2_emissions_potential": 3.1, "energy_rating_potential": 82, "lighting_cost_potential": {"value": 72, "currency": "GBP"}, "schema_version_original": "LIG-21.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": 41, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 72, "environmental_impact_rating": 70}}], "hot_water_cost_potential": {"value": 217, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2779.46, "space_heating_existing_dwelling": 12471.3}, "draughtproofed_door_count": 0, "energy_consumption_current": 184, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "10.2.2.0", "energy_consumption_potential": 133, "environmental_impact_current": 65, "cfl_fixed_lighting_bulbs_count": 8, "current_energy_efficiency_band": "C", "environmental_impact_potential": 74, "led_fixed_lighting_bulbs_count": 12, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 34, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/LE113PX/cert-2c24bd4c5687.json b/tests/fixtures/epc_prediction/LE113PX/cert-2c24bd4c5687.json new file mode 100644 index 00000000..791cf605 --- /dev/null +++ b/tests/fixtures/epc_prediction/LE113PX/cert-2c24bd4c5687.json @@ -0,0 +1 @@ +{"uprn": 100030465791, "roofs": [{"description": {"value": "Pitched, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": {"value": "Cavity wall, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": {"value": "Cavity wall, as built, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in 88% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "LE11 3PX", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2019-10-16 08:50:56.000000", "door_count": 2, "glazed_area": 1, "region_code": 6, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "mcs_installed_heat_pump": "false", "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 10327}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-19.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Semi-detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-055c903d6af3", "assessment_type": "RdSAP", "completion_date": "2019-10-16", "inspection_date": "2019-10-16", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 87, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 5, "pvc_window_frames": "false", "registration_date": "2019-10-16", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "Y", "wall_thickness": 270, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.46, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 42.29, "quantity": "square metres"}, "party_wall_length": {"value": 6.79, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 18.13, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.44, "quantity": "metres"}, "total_floor_area": {"value": 42.29, "quantity": "square metres"}, "party_wall_length": {"value": 6.79, "quantity": "metres"}, "heat_loss_perimeter": {"value": 20.17, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.41, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 2.76, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 1, "heat_loss_perimeter": {"value": 4.72, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "I", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 88, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 796, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.4, "energy_rating_average": 60, "energy_rating_current": 62, "lighting_cost_current": {"value": 60, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 686, "currency": "GBP"}, "hot_water_cost_current": {"value": 103, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 79, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 59}, {"sequence": 2, "typical_saving": {"value": 32, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 61}, {"sequence": 3, "typical_saving": {"value": 34, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 63}, {"sequence": 4, "typical_saving": {"value": 257, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a38,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 72}], "co2_emissions_potential": 2.7, "energy_rating_potential": 77, "lighting_cost_potential": {"value": 60, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 51, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 67, "environmental_impact_rating": 62}}], "hot_water_cost_potential": {"value": 69, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2184, "impact_of_loft_insulation": -3637, "impact_of_cavity_insulation": -1924, "space_heating_existing_dwelling": 14661}, "energy_consumption_current": 284, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "v94.0.1.1", "energy_consumption_potential": 171, "environmental_impact_current": 55, "fixed_lighting_outlets_count": 8, "current_energy_efficiency_band": "D", "environmental_impact_potential": 72, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 50, "low_energy_fixed_lighting_outlets_count": 7} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/LE113PX/cert-3ac4ad7fc9b2.json b/tests/fixtures/epc_prediction/LE113PX/cert-3ac4ad7fc9b2.json new file mode 100644 index 00000000..6871664d --- /dev/null +++ b/tests/fixtures/epc_prediction/LE113PX/cert-3ac4ad7fc9b2.json @@ -0,0 +1 @@ +{"uprn": 100030465803, "roofs": [{"description": "Pitched, 150 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Low energy lighting in 90% of fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "LE11 3PX", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2023-06-15 22:47:41", "door_count": 2, "glazed_area": 1, "glazing_gap": "16+", "region_code": 6, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 10338}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-37d376eaf35e", "assessment_type": "RdSAP", "completion_date": "2023-06-15", "inspection_date": "2023-06-15", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 77, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 5, "pvc_window_frames": "true", "registration_date": "2023-06-15", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.43, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 38.56, "quantity": "square metres"}, "party_wall_length": {"value": 6.86, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 18.1, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.44, "quantity": "metres"}, "total_floor_area": {"value": 38.56, "quantity": "square metres"}, "party_wall_length": {"value": 6.86, "quantity": "metres"}, "heat_loss_perimeter": {"value": 18.1, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "D", "party_wall_construction": 1, "wall_thickness_measured": "N", "roof_insulation_location": 2, "roof_insulation_thickness": "150mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 90, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 1370, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.5, "energy_rating_average": 60, "energy_rating_current": 65, "lighting_cost_current": {"value": 137, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 782, "currency": "GBP"}, "hot_water_cost_current": {"value": 236, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 477, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 72}, {"sequence": 2, "typical_saving": {"value": 108, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 75}, {"sequence": 3, "typical_saving": {"value": 79, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 77}, {"sequence": 4, "typical_saving": {"value": 655, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 88, "environmental_impact_rating": 87}], "co2_emissions_potential": 1.1, "energy_rating_potential": 88, "lighting_cost_potential": {"value": 137, "currency": "GBP"}, "schema_version_original": "20.0.0", "hot_water_cost_potential": {"value": 159, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2082, "impact_of_loft_insulation": -217, "impact_of_solid_wall_insulation": -4467, "space_heating_existing_dwelling": 11150}, "energy_consumption_current": 255, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.11r0005", "energy_consumption_potential": 76, "environmental_impact_current": 61, "fixed_lighting_outlets_count": 10, "current_energy_efficiency_band": "D", "environmental_impact_potential": 87, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 45, "low_energy_fixed_lighting_outlets_count": 9} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/LE113PX/cert-43357661bc7f.json b/tests/fixtures/epc_prediction/LE113PX/cert-43357661bc7f.json new file mode 100644 index 00000000..6f942b53 --- /dev/null +++ b/tests/fixtures/epc_prediction/LE113PX/cert-43357661bc7f.json @@ -0,0 +1 @@ +{"uprn": 100030465844, "roofs": [{"description": "Pitched, 250 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": "Flat, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": "Roof room(s), insulated", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "windows": [{"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": "Low energy lighting in 88% of fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "LE11 3PX", "hot_water": {"description": "From main system", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 2, "created_at": "2012-07-12 12:49:12.000000", "door_count": 3, "glazed_area": 1, "region_code": 6, "report_type": 2, "sap_heating": {"wwhrs": {"rooms_with_bath_and_or_shower": 2, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 0}, "cylinder_size": 2, "water_heating_code": 914, "water_heating_fuel": 9, "cylinder_thermostat": "Y", "secondary_fuel_type": 9, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "boiler_index_number": 10200, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "main_heating_data_source": 1}, {"has_fghrs": "N", "main_fuel_type": 9, "boiler_flue_type": 1, "heat_emitter_type": 0, "main_heating_number": 2, "main_heating_control": 2100, "main_heating_category": 2, "main_heating_fraction": 0, "sap_main_heating_code": 158, "main_heating_data_source": 2}], "secondary_heating_type": 633, "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 38}, "sap_version": 9.91, "schema_type": "SAP-Schema-16.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached bungalow", "language_code": 1, "property_type": 1, "address_line_1": "addr-45d98f8528a4", "schema_version": "LIG-16.0", "assessment_type": "RdSAP", "completion_date": "2012-07-12", "inspection_date": "2012-07-04", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 123, "transaction_type": 1, "conservatory_type": 3, "heated_room_count": 6, "registration_date": "2012-07-12", "restricted_access": 0, "sap_energy_source": {"main_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"percent_roof_area": 0}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, dual fuel (mineral and wood)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 280, "floor_heat_loss": 7, "sap_room_in_roof": {"floor_area": 34.43, "insulation": "NI", "roof_room_connected": "Y", "construction_age_band": "D", "roof_insulation_thickness": "200mm"}, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.378, "floor_insulation": 1, "total_floor_area": 69.87, "floor_construction": 2, "heat_loss_perimeter": 23.365}], "wall_insulation_type": 4, "construction_age_band": "D", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "250mm"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 280, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.284, "floor_insulation": 1, "total_floor_area": 18.852, "floor_construction": 1, "heat_loss_perimeter": 13.391}], "wall_insulation_type": 4, "construction_age_band": "D", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "NI"}], "low_energy_lighting": 88, "solar_water_heating": "N", "bedf_revision_number": 325, "habitable_room_count": 6, "heating_cost_current": {"value": 951, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 5.9, "energy_rating_average": 60, "energy_rating_current": 57, "lighting_cost_current": {"value": 68, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 650, "currency": "GBP"}, "hot_water_cost_current": {"value": 197, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 125, "currency": "GBP"}, "indicative_cost": "\u00a31,500 - \u00a32,700", "improvement_type": "A3", "improvement_details": {"improvement_number": 46}, "improvement_category": 5, "energy_performance_rating": 62, "environmental_impact_rating": 57}, {"sequence": 2, "typical_saving": {"value": 106, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 62}, {"sequence": 3, "typical_saving": {"value": 73, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W", "improvement_details": {"improvement_number": 47}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 66}, {"sequence": 4, "typical_saving": {"value": 80, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 69}, {"sequence": 5, "typical_saving": {"value": 222, "currency": "GBP"}, "indicative_cost": "\u00a39,000 - \u00a314,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 78, "environmental_impact_rating": 76}], "co2_emissions_potential": 2.9, "energy_rating_potential": 78, "lighting_cost_potential": {"value": 68, "currency": "GBP"}, "alternative_improvements": [[{"improvement": {"sequence": 1, "typical_saving": {"value": 20, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 66, "environmental_impact_rating": 63}}]], "hot_water_cost_potential": {"value": 116, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2556, "impact_of_cavity_insulation": -2450, "space_heating_existing_dwelling": 19859}, "seller_commission_report": "Y", "energy_consumption_current": 249, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "1.1.13.0", "energy_consumption_potential": 121, "environmental_impact_current": 52, "fixed_lighting_outlets_count": 16, "current_energy_efficiency_band": "D", "environmental_impact_potential": 76, "has_heated_separate_conservatory": "true", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 48, "low_energy_fixed_lighting_outlets_count": 14} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/LE113PX/cert-5b9ac305ad46.json b/tests/fixtures/epc_prediction/LE113PX/cert-5b9ac305ad46.json new file mode 100644 index 00000000..99b4b774 --- /dev/null +++ b/tests/fixtures/epc_prediction/LE113PX/cert-5b9ac305ad46.json @@ -0,0 +1 @@ +{"uprn": 100030465801, "roofs": [{"description": {"value": "Pitched, 200 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": {"value": "Flat, insulated", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": {"value": "Solid brick, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": {"value": "Cavity wall, as built, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in all fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "LE11 3PX", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2017-06-16 11:12:47.000000", "door_count": 1, "glazed_area": 1, "glazing_gap": "16+", "region_code": 1, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 15018}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 38}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.1", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Semi-detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-1b185939e7b3", "assessment_type": "RdSAP", "completion_date": "2017-06-16", "inspection_date": "2017-06-16", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 84, "transaction_type": 1, "conservatory_type": 2, "heated_room_count": 5, "pvc_window_frames": "true", "registration_date": "2017-06-16", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 220, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.34, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 40.16, "quantity": "square metres"}, "party_wall_length": {"value": 6.88, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 18.7, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.43, "quantity": "metres"}, "total_floor_area": {"value": 39, "quantity": "square metres"}, "party_wall_length": {"value": 6.88, "quantity": "metres"}, "heat_loss_perimeter": {"value": 18.22, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 2, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "200mm", "wall_insulation_thickness": "NI"}, {"identifier": "Extension", "wall_dry_lined": "N", "wall_thickness": 270, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.43, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 4.97, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 1, "heat_loss_perimeter": {"value": 6.64, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "G", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 756, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.2, "energy_rating_average": 60, "energy_rating_current": 62, "lighting_cost_current": {"value": 56, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 457, "currency": "GBP"}, "hot_water_cost_current": {"value": 133, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 261, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 69}, {"sequence": 2, "typical_saving": {"value": 40, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 71}, {"sequence": 3, "typical_saving": {"value": 47, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 73}, {"sequence": 4, "typical_saving": {"value": 276, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a38,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 85, "environmental_impact_rating": 83}], "co2_emissions_potential": 1.5, "energy_rating_potential": 85, "lighting_cost_potential": {"value": 56, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "hot_water_cost_potential": {"value": 84, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2690, "impact_of_solid_wall_insulation": -5572, "space_heating_existing_dwelling": 13631}, "energy_consumption_current": 286, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.0.0.0", "energy_consumption_potential": 100, "environmental_impact_current": 55, "fixed_lighting_outlets_count": 11, "current_energy_efficiency_band": "D", "environmental_impact_potential": 83, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 51, "low_energy_fixed_lighting_outlets_count": 11} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/LE113PX/cert-64ceff1522b9.json b/tests/fixtures/epc_prediction/LE113PX/cert-64ceff1522b9.json new file mode 100644 index 00000000..82e95511 --- /dev/null +++ b/tests/fixtures/epc_prediction/LE113PX/cert-64ceff1522b9.json @@ -0,0 +1 @@ +{"uprn": 100030465815, "roofs": [{"description": {"value": "Pitched, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": {"value": "Roof room(s), no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": {"value": "Solid brick, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": "ND", "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "No low energy lighting", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "postcode": "LE11 3PX", "hot_water": {"description": {"value": "From main system, no cylinder thermostat", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "post_town": "", "built_form": 1, "created_at": "2020-09-10 14:23:07.000000", "door_count": 2, "glazed_area": 1, "glazing_gap": "16+", "region_code": 6, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 1, "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2104, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 8063}], "immersion_heating_type": "NA", "secondary_heating_type": 601, "cylinder_insulation_type": 2, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 80}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-19.0", "uprn_source": "Address Matched", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-c009178a615d", "assessment_type": "RdSAP", "completion_date": "2020-09-10", "inspection_date": "2020-09-10", "extensions_count": 2, "measurement_type": 1, "total_floor_area": 130, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 6, "pvc_window_frames": "true", "registration_date": "2020-09-10", "sap_energy_source": {"mains_gas": "Y", "meter_type": 3, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Room heaters, mains gas", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 220, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.41, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 29.69, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 2, "heat_loss_perimeter": {"value": 15.57, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.41, "quantity": "metres"}, "total_floor_area": {"value": 30.41, "quantity": "square metres"}, "party_wall_length": 0, "heat_loss_perimeter": {"value": 17.26, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 220, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.41, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 3.24, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 1, "heat_loss_perimeter": {"value": 5.53, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 2", "wall_dry_lined": "N", "wall_thickness": 220, "floor_heat_loss": 7, "sap_room_in_roof": {"floor_area": {"value": 33.14, "quantity": "square metres"}, "insulation": "AB", "roof_room_connected": "N", "construction_age_band": "C"}, "roof_construction": 5, "wall_construction": 3, "building_part_number": 3, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.41, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 33.14, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 2, "heat_loss_perimeter": {"value": 17.17, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 0, "solar_water_heating": "N", "habitable_room_count": 6, "heating_cost_current": {"value": 1802, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 11, "energy_rating_average": 60, "energy_rating_current": 35, "lighting_cost_current": {"value": 180, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer and room thermostat", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 761, "currency": "GBP"}, "hot_water_cost_current": {"value": 222, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 373, "currency": "GBP"}, "indicative_cost": "\u00a31,500 - \u00a32,700", "improvement_type": "A3", "improvement_details": {"improvement_number": 46}, "improvement_category": 5, "energy_performance_rating": 44, "environmental_impact_rating": 36}, {"sequence": 2, "typical_saving": {"value": 388, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 56, "environmental_impact_rating": 47}, {"sequence": 3, "typical_saving": {"value": 104, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 59, "environmental_impact_rating": 51}, {"sequence": 4, "typical_saving": {"value": 77, "currency": "GBP"}, "indicative_cost": "\u00a350", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 61, "environmental_impact_rating": 52}, {"sequence": 5, "typical_saving": {"value": 85, "currency": "GBP"}, "indicative_cost": "\u00a3200 - \u00a3400", "improvement_type": "F", "improvement_details": {"improvement_number": 4}, "improvement_category": 5, "energy_performance_rating": 63, "environmental_impact_rating": 55}, {"sequence": 6, "typical_saving": {"value": 51, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 13}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 57}, {"sequence": 7, "typical_saving": {"value": 158, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 65}, {"sequence": 8, "typical_saving": {"value": 40, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 66}, {"sequence": 9, "typical_saving": {"value": 332, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 79, "environmental_impact_rating": 73}], "co2_emissions_potential": 3.3, "energy_rating_potential": 79, "lighting_cost_potential": {"value": 90, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 299, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 73, "environmental_impact_rating": 66}}], "hot_water_cost_potential": {"value": 77, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3654, "impact_of_loft_insulation": -2384, "impact_of_solid_wall_insulation": -5777, "space_heating_existing_dwelling": 28266}, "energy_consumption_current": 481, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.1.1.0", "energy_consumption_potential": 143, "environmental_impact_current": 28, "fixed_lighting_outlets_count": 10, "windows_transmission_details": {"u_value": 2.6, "data_source": 2, "solar_transmittance": 0.76}, "current_energy_efficiency_band": "F", "environmental_impact_potential": 73, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 85, "low_energy_fixed_lighting_outlets_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/LE113PX/cert-69291a9f2084.json b/tests/fixtures/epc_prediction/LE113PX/cert-69291a9f2084.json new file mode 100644 index 00000000..03db475f --- /dev/null +++ b/tests/fixtures/epc_prediction/LE113PX/cert-69291a9f2084.json @@ -0,0 +1 @@ +{"uprn": 100030465789, "roofs": [{"description": "Pitched, 200 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, as built, partial insulation (assumed)", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "LE11 3PX", "hot_water": {"description": "From main system, no cylinder thermostat", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 2, "created_at": "2023-07-10 13:30:42", "door_count": 0, "glazed_area": 1, "glazing_gap": "16+", "region_code": 6, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 2, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 16408}], "immersion_heating_type": "NA", "cylinder_insulation_type": 2, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-aed15a55709e", "assessment_type": "RdSAP", "completion_date": "2023-07-10", "inspection_date": "2023-07-06", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 150, "transaction_type": 5, "conservatory_type": 1, "heated_room_count": 8, "pvc_window_frames": "true", "registration_date": "2023-07-10", "sap_energy_source": {"mains_gas": "Y", "meter_type": 1, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 190, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.3, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 75.11, "quantity": "square metres"}, "party_wall_length": {"value": 11.49, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 23.96, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.3, "quantity": "metres"}, "total_floor_area": {"value": 75.04, "quantity": "square metres"}, "party_wall_length": {"value": 11.49, "quantity": "metres"}, "heat_loss_perimeter": {"value": 23.96, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "F", "party_wall_construction": 2, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "200mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 8, "heating_cost_current": {"value": 1812, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.9, "energy_rating_average": 60, "energy_rating_current": 71, "lighting_cost_current": {"value": 241, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 1, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 1270, "currency": "GBP"}, "hot_water_cost_current": {"value": 503, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 311, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 70}, {"sequence": 2, "typical_saving": {"value": 98, "currency": "GBP"}, "indicative_cost": "\u00a3300 - \u00a3600", "improvement_type": "B4", "improvement_details": {"improvement_number": 63}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 72}, {"sequence": 3, "typical_saving": {"value": 135, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 74}, {"sequence": 4, "typical_saving": {"value": 139, "currency": "GBP"}, "indicative_cost": "\u00a3200 - \u00a3400", "improvement_type": "F", "improvement_details": {"improvement_number": 4}, "improvement_category": 5, "energy_performance_rating": 78, "environmental_impact_rating": 76}, {"sequence": 5, "typical_saving": {"value": 142, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 79, "environmental_impact_rating": 78}, {"sequence": 6, "typical_saving": {"value": 733, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 87, "environmental_impact_rating": 84}], "co2_emissions_potential": 2.2, "energy_rating_potential": 87, "lighting_cost_potential": {"value": 241, "currency": "GBP"}, "schema_version_original": "20.0.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 55, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 76, "environmental_impact_rating": 72}}], "hot_water_cost_potential": {"value": 220, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3962, "impact_of_cavity_insulation": -2607, "space_heating_existing_dwelling": 13606}, "energy_consumption_current": 184, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.11r0005", "energy_consumption_potential": 81, "environmental_impact_current": 66, "fixed_lighting_outlets_count": 14, "current_energy_efficiency_band": "C", "environmental_impact_potential": 84, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 32, "low_energy_fixed_lighting_outlets_count": 14} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/LE113PX/cert-805962966496.json b/tests/fixtures/epc_prediction/LE113PX/cert-805962966496.json new file mode 100644 index 00000000..a6b47443 --- /dev/null +++ b/tests/fixtures/epc_prediction/LE113PX/cert-805962966496.json @@ -0,0 +1 @@ +{"uprn": 100030465837, "roofs": [{"description": "Pitched, 200 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": "Flat, insulated (assumed)", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": "Cavity wall, filled cavity", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "windows": [{"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "lighting": {"description": "Low energy lighting in 78% of fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "LE11 3PX", "hot_water": {"description": "From main system, no cylinder thermostat", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 1, "created_at": "2014-01-15 15:56:18.000000", "door_count": 2, "glazed_area": 1, "region_code": 6, "report_type": 2, "sap_heating": {"wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "boiler_index_number": 8788, "main_heating_number": 1, "main_heating_control": 2104, "main_heating_category": 2, "main_heating_fraction": 1, "main_heating_data_source": 1}], "secondary_heating_type": 605, "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 38}, "sap_version": 9.91, "schema_type": "SAP-Schema-16.2", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Detached bungalow", "language_code": 1, "property_type": 1, "address_line_1": "addr-eb1626277f84", "schema_version": "LIG-16.1", "assessment_type": "RdSAP", "completion_date": "2014-01-15", "inspection_date": "2014-01-15", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 84, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "registration_date": "2014-01-15", "restricted_access": 0, "sap_energy_source": {"main_gas": "Y", "meter_type": 1, "photovoltaic_supply": {"percent_roof_area": 0}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, mains gas", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 285, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.42, "floor_insulation": 1, "total_floor_area": 75, "floor_construction": 2, "heat_loss_perimeter": 33.1}], "wall_insulation_type": 2, "construction_age_band": "E", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "200mm"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.28, "floor_insulation": 1, "total_floor_area": 9.3, "floor_construction": 1, "heat_loss_perimeter": 9}], "wall_insulation_type": 4, "construction_age_band": "H", "wall_thickness_measured": "N", "roof_insulation_location": 4, "roof_insulation_thickness": "ND"}], "low_energy_lighting": 78, "solar_water_heating": "N", "bedf_revision_number": 352, "habitable_room_count": 4, "heating_cost_current": {"value": 740, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.3, "energy_rating_average": 60, "energy_rating_current": 58, "lighting_cost_current": {"value": 68, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and room thermostat", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 1, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 545, "currency": "GBP"}, "hot_water_cost_current": {"value": 185, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 116, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W", "improvement_details": {"improvement_number": 47}, "improvement_category": 5, "energy_performance_rating": 63, "environmental_impact_rating": 60}, {"sequence": 2, "typical_saving": {"value": 63, "currency": "GBP"}, "indicative_cost": "\u00a3200 - \u00a3400", "improvement_type": "F", "improvement_details": {"improvement_number": 4}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 64}, {"sequence": 3, "typical_saving": {"value": 29, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 13}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 65}, {"sequence": 4, "typical_saving": {"value": 57, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 68}, {"sequence": 5, "typical_saving": {"value": 36, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 70}, {"sequence": 6, "typical_saving": {"value": 253, "currency": "GBP"}, "indicative_cost": "\u00a39,000 - \u00a314,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 81, "environmental_impact_rating": 80}], "co2_emissions_potential": 1.9, "energy_rating_potential": 81, "lighting_cost_potential": {"value": 68, "currency": "GBP"}, "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 136, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 72, "environmental_impact_rating": 70}}], "hot_water_cost_potential": {"value": 79, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3372, "space_heating_existing_dwelling": 10692}, "seller_commission_report": "Y", "energy_consumption_current": 268, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "v2.1.0", "energy_consumption_potential": 112, "environmental_impact_current": 54, "fixed_lighting_outlets_count": 9, "current_energy_efficiency_band": "D", "environmental_impact_potential": 80, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 52, "low_energy_fixed_lighting_outlets_count": 7} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/LE113PX/cert-88d62becedd7.json b/tests/fixtures/epc_prediction/LE113PX/cert-88d62becedd7.json new file mode 100644 index 00000000..e425b45e --- /dev/null +++ b/tests/fixtures/epc_prediction/LE113PX/cert-88d62becedd7.json @@ -0,0 +1 @@ +{"uprn": 100030465789, "roofs": [{"description": {"value": "Pitched, limited insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "walls": [{"description": {"value": "Cavity wall, as built, partial insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "floors": [{"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": {"value": "Low energy lighting in all fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "LE11 3PX", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2019-02-04 09:48:16.000000", "door_count": 3, "glazed_area": 1, "glazing_gap": 12, "region_code": 6, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 2, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 16408}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 9.93, "schema_type": "RdSAP-Schema-18.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Semi-detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-e73d73596f26", "assessment_type": "RdSAP", "completion_date": "2019-02-04", "inspection_date": "2019-01-28", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 127, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 8, "pvc_window_frames": "true", "registration_date": "2019-02-04", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.5, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 59, "quantity": "square metres"}, "party_wall_length": {"value": 10, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 18.8, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.5, "quantity": "metres"}, "total_floor_area": {"value": 64.2, "quantity": "square metres"}, "party_wall_length": {"value": 10.2, "quantity": "metres"}, "heat_loss_perimeter": {"value": 22.8, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "F", "party_wall_construction": 2, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension", "wall_dry_lined": "N", "wall_thickness": 320, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.5, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 3.6, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 1, "heat_loss_perimeter": {"value": 5.6, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "F", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 8, "heating_cost_current": {"value": 795, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.8, "energy_rating_average": 60, "energy_rating_current": 68, "lighting_cost_current": {"value": 81, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 652, "currency": "GBP"}, "hot_water_cost_current": {"value": 126, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 107, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 67}, {"sequence": 2, "typical_saving": {"value": 38, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 68}, {"sequence": 3, "typical_saving": {"value": 41, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 70}, {"sequence": 4, "typical_saving": {"value": 301, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a38,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 81, "environmental_impact_rating": 77}], "co2_emissions_potential": 2.8, "energy_rating_potential": 81, "lighting_cost_potential": {"value": 81, "currency": "GBP"}, "schema_version_original": "LIG-18.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 18, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 72, "environmental_impact_rating": 67}}], "hot_water_cost_potential": {"value": 83, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2755, "impact_of_loft_insulation": -1480, "impact_of_cavity_insulation": -2566, "space_heating_existing_dwelling": 15633}, "energy_consumption_current": 213, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.1.0.0", "energy_consumption_potential": 124, "environmental_impact_current": 62, "fixed_lighting_outlets_count": 12, "windows_transmission_details": {"u_value": 2.8, "data_source": 2, "solar_transmittance": 0.76}, "current_energy_efficiency_band": "D", "environmental_impact_potential": 77, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 38, "low_energy_fixed_lighting_outlets_count": 12} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/LE113PX/cert-89b00a658503.json b/tests/fixtures/epc_prediction/LE113PX/cert-89b00a658503.json new file mode 100644 index 00000000..a2f84992 --- /dev/null +++ b/tests/fixtures/epc_prediction/LE113PX/cert-89b00a658503.json @@ -0,0 +1 @@ +{"uprn": 100030465799, "roofs": [{"description": "Pitched, 100 mm loft insulation", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "windows": [{"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "lighting": {"description": "Low energy lighting in 56% of fixed outlets", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "LE11 3PX", "hot_water": {"description": "From main system, no cylinder thermostat", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "post_town": "", "built_form": 2, "created_at": "2013-01-29 18:28:46.000000", "door_count": 2, "glazed_area": 1, "region_code": 6, "report_type": 2, "sap_heating": {"wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "secondary_fuel_type": 29, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 1, "heat_emitter_type": 1, "boiler_index_number": 16495, "main_heating_number": 1, "main_heating_control": 2104, "main_heating_category": 2, "main_heating_fraction": 1, "main_heating_data_source": 1}], "secondary_heating_type": 691, "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 9.91, "schema_type": "SAP-Schema-16.2", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-5d0a517cb362", "schema_version": "LIG-16.1", "assessment_type": "RdSAP", "completion_date": "2013-01-29", "inspection_date": "2013-01-29", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 78, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 5, "registration_date": "2013-01-29", "restricted_access": 0, "sap_energy_source": {"main_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"percent_roof_area": 0}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, electric", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 230, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.48, "floor_insulation": 1, "total_floor_area": 39.6, "floor_construction": 2, "heat_loss_perimeter": 18.94}, {"floor": 1, "room_height": 2.45, "total_floor_area": 38.46, "heat_loss_perimeter": 18.12}], "wall_insulation_type": 4, "construction_age_band": "C", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "100mm"}], "low_energy_lighting": 56, "solar_water_heating": "N", "bedf_revision_number": 333, "habitable_room_count": 5, "heating_cost_current": {"value": 991, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 6.0, "energy_rating_average": 60, "energy_rating_current": 40, "lighting_cost_current": {"value": 65, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and room thermostat", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 447, "currency": "GBP"}, "hot_water_cost_current": {"value": 200, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 354, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 57, "environmental_impact_rating": 54}, {"sequence": 2, "typical_saving": {"value": 64, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W", "improvement_details": {"improvement_number": 47}, "improvement_category": 5, "energy_performance_rating": 60, "environmental_impact_rating": 58}, {"sequence": 3, "typical_saving": {"value": 16, "currency": "GBP"}, "indicative_cost": "\u00a320", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 60, "environmental_impact_rating": 58}, {"sequence": 4, "typical_saving": {"value": 71, "currency": "GBP"}, "indicative_cost": "\u00a3200 - \u00a3400", "improvement_type": "F", "improvement_details": {"improvement_number": 4}, "improvement_category": 5, "energy_performance_rating": 64, "environmental_impact_rating": 63}, {"sequence": 5, "typical_saving": {"value": 28, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 13}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 65}, {"sequence": 6, "typical_saving": {"value": 129, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 73}, {"sequence": 7, "typical_saving": {"value": 33, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 75}, {"sequence": 8, "typical_saving": {"value": 226, "currency": "GBP"}, "indicative_cost": "\u00a39,000 - \u00a314,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 84, "environmental_impact_rating": 85}], "co2_emissions_potential": 1.3, "energy_rating_potential": 84, "lighting_cost_potential": {"value": 45, "currency": "GBP"}, "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 42, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 69, "environmental_impact_rating": 89}, {"sequence": 2, "typical_saving": {"value": 168, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 74, "environmental_impact_rating": 76}, {"sequence": 3, "typical_saving": {"value": 198, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 75, "environmental_impact_rating": 74}], "hot_water_cost_potential": {"value": 69, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3233, "impact_of_loft_insulation": -340, "impact_of_solid_wall_insulation": -5620, "space_heating_existing_dwelling": 13230}, "seller_commission_report": "Y", "energy_consumption_current": 403, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "1.06r10", "energy_consumption_potential": 87, "environmental_impact_current": 39, "fixed_lighting_outlets_count": 9, "current_energy_efficiency_band": "E", "environmental_impact_potential": 85, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 77, "low_energy_fixed_lighting_outlets_count": 5} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/LE113PX/cert-8d827d3ff7df.json b/tests/fixtures/epc_prediction/LE113PX/cert-8d827d3ff7df.json new file mode 100644 index 00000000..9934a8f9 --- /dev/null +++ b/tests/fixtures/epc_prediction/LE113PX/cert-8d827d3ff7df.json @@ -0,0 +1 @@ +{"uprn": 100030465811, "roofs": [{"description": "Pitched, 150 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": "Flat, insulated (assumed)", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": "Cavity wall, filled cavity", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Solid, limited insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "No low energy lighting", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "postcode": "LE11 3PX", "hot_water": {"description": "Electric immersion, off-peak", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 2}, "post_town": "", "built_form": 2, "created_at": "2017-03-10 19:13:52.000000", "door_count": 2, "glazed_area": 1, "region_code": 6, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 903, "water_heating_fuel": 29, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 29, "heat_emitter_type": 0, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2401, "main_heating_category": 7, "main_heating_fraction": 0.62, "sap_main_heating_code": 402, "main_heating_data_source": 2}, {"has_fghrs": "N", "main_fuel_type": 29, "heat_emitter_type": 0, "emitter_temperature": "NA", "main_heating_number": 2, "main_heating_control": 2401, "main_heating_category": 7, "main_heating_fraction": 0.38, "sap_main_heating_code": 401, "main_heating_data_source": 2}], "immersion_heating_type": 2, "secondary_heating_type": 605, "cylinder_insulation_type": 2, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 38}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Electric storage heaters", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 1}, {"description": "Electric storage heaters", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 1}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-726dc1fc684e", "assessment_type": "RdSAP", "completion_date": "2017-03-10", "inspection_date": "2017-03-09", "extensions_count": 3, "measurement_type": 1, "total_floor_area": 87, "transaction_type": 1, "conservatory_type": 2, "heated_room_count": 5, "pvc_window_frames": "false", "registration_date": "2017-03-10", "sap_energy_source": {"mains_gas": "Y", "meter_type": 1, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, mains gas", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 290, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.49, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 16.39, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 7.54, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.43, "quantity": "metres"}, "total_floor_area": {"value": 16.39, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "heat_loss_perimeter": {"value": 9.12, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "D", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "150mm", "wall_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 290, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.49, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 14.33, "quantity": "square metres"}, "party_wall_length": {"value": 4.28, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 6.7, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.43, "quantity": "metres"}, "total_floor_area": {"value": 14.33, "quantity": "square metres"}, "party_wall_length": {"value": 4.28, "quantity": "metres"}, "heat_loss_perimeter": {"value": 6.7, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "D", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "150mm", "wall_insulation_thickness": "NI"}, {"identifier": "Extension 2", "wall_dry_lined": "N", "wall_thickness": 240, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 3, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.2, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 9.58, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 6.9, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.44, "quantity": "metres"}, "total_floor_area": {"value": 9.58, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "heat_loss_perimeter": {"value": 9.62, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "D", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "150mm", "wall_insulation_thickness": "NI"}, {"identifier": "Extension 3", "wall_dry_lined": "N", "wall_thickness": 280, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 4, "building_part_number": 4, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.2, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 6.85, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 11.29, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "I", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "low_energy_lighting": 0, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 1256, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 9.8, "energy_rating_average": 60, "energy_rating_current": 35, "lighting_cost_current": {"value": 128, "currency": "GBP"}, "main_heating_controls": [{"description": "Manual charge control", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 932, "currency": "GBP"}, "hot_water_cost_current": {"value": 354, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 290, "currency": "GBP"}, "indicative_cost": "14,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 44, "environmental_impact_rating": 31}, {"sequence": 2, "typical_saving": {"value": 28, "currency": "GBP"}, "indicative_cost": "1,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 45, "environmental_impact_rating": 32}, {"sequence": 3, "typical_saving": {"value": 71, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 48, "environmental_impact_rating": 35}, {"sequence": 4, "typical_saving": {"value": 56, "currency": "GBP"}, "indicative_cost": 30, "improvement_type": "C", "improvement_details": {"improvement_number": 2}, "improvement_category": 5, "energy_performance_rating": 50, "environmental_impact_rating": 35}, {"sequence": 5, "typical_saving": {"value": 48, "currency": "GBP"}, "indicative_cost": 70, "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 52, "environmental_impact_rating": 36}, {"sequence": 6, "typical_saving": {"value": 136, "currency": "GBP"}, "indicative_cost": "7,000", "improvement_type": "T", "improvement_details": {"improvement_number": 27}, "improvement_category": 5, "energy_performance_rating": 56, "environmental_impact_rating": 56}, {"sequence": 7, "typical_saving": {"value": 42, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 57, "environmental_impact_rating": 58}, {"sequence": 8, "typical_saving": {"value": 276, "currency": "GBP"}, "indicative_cost": "8,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 67}], "co2_emissions_potential": 3.1, "energy_rating_potential": 67, "lighting_cost_potential": {"value": 58, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 286, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 60, "environmental_impact_rating": 72}, {"sequence": 2, "typical_saving": {"value": 282, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 61, "environmental_impact_rating": 58}, {"sequence": 3, "typical_saving": {"value": 430, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 67, "environmental_impact_rating": 55}], "hot_water_cost_potential": {"value": 76, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2568, "impact_of_loft_insulation": -320, "impact_of_solid_wall_insulation": -3878, "space_heating_existing_dwelling": 15423}, "energy_consumption_current": 657, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.10r04", "energy_consumption_potential": 201, "environmental_impact_current": 21, "fixed_lighting_outlets_count": 14, "current_energy_efficiency_band": "F", "environmental_impact_potential": 67, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "D", "co2_emissions_current_per_floor_area": 112, "low_energy_fixed_lighting_outlets_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/LE113PX/cert-a926697da348.json b/tests/fixtures/epc_prediction/LE113PX/cert-a926697da348.json new file mode 100644 index 00000000..31d24fa0 --- /dev/null +++ b/tests/fixtures/epc_prediction/LE113PX/cert-a926697da348.json @@ -0,0 +1 @@ +{"uprn": 100030465784, "roofs": [{"description": "Pitched, 50 mm loft insulation", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "walls": [{"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"addendum_numbers": [15]}, "lighting": {"description": "Good lighting efficiency", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "LE11 3PX", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "psv_count": 0, "built_form": 1, "created_at": "2026-05-14 10:00:48", "door_count": 2, "region_code": 6, "report_type": 2, "sap_heating": {"number_baths": 1, "cylinder_size": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_outlet_type": 1}], "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 1, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 10327}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "true", "orientation": 2, "window_type": 1, "glazing_type": 2, "window_width": {"value": 2.315, "quantity": "m"}, "window_height": {"value": 1.306, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 2, "window_type": 1, "glazing_type": 2, "window_width": {"value": 1.174, "quantity": "m"}, "window_height": {"value": 1.152, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 2, "window_type": 1, "glazing_type": 2, "window_width": {"value": 1.744, "quantity": "m"}, "window_height": {"value": 1.157, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 6, "window_type": 1, "glazing_type": 2, "window_width": {"value": 2.317, "quantity": "m"}, "window_height": {"value": 0.562, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 6, "window_type": 1, "glazing_type": 2, "window_width": {"value": 1.14, "quantity": "m"}, "window_height": {"value": 0.987, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 4, "window_type": 1, "glazing_type": 2, "window_width": {"value": 0.461, "quantity": "m"}, "window_height": {"value": 1.01, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 4, "window_type": 1, "glazing_type": 2, "window_width": {"value": 0.618, "quantity": "m"}, "window_height": {"value": 1.71, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 8, "window_type": 1, "glazing_type": 2, "window_width": {"value": 1.74, "quantity": "m"}, "window_height": {"value": 2.01, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 8, "window_type": 1, "glazing_type": 2, "window_width": {"value": 1.734, "quantity": "m"}, "window_height": {"value": 1.157, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Detached house", "language_code": 1, "pressure_test": 4, "property_type": 0, "address_line_1": "addr-8049560bc0b5", "assessment_type": "RdSAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-13", "extensions_count": 0, "measurement_type": 1, "open_flues_count": 0, "total_floor_area": 92, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 5, "other_flues_count": 0, "registration_date": "2026-05-14", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "true", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 2, "electricity_smart_meter_present": "true"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "closed_flues_count": 0, "extract_fans_count": 0, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 280, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.402, "floor_insulation": 1, "total_floor_area": 46.75, "party_wall_length": 0, "floor_construction": 1, "heat_loss_perimeter": 28.94}, {"floor": 1, "room_height": 2.34, "total_floor_area": 44.87, "party_wall_length": 0, "heat_loss_perimeter": 27.08}], "wall_insulation_type": 4, "construction_age_band": "H", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "50mm", "wall_insulation_thickness": "NI"}], "boilers_flues_count": 0, "open_chimneys_count": 0, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 1032, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.2, "energy_rating_average": 60, "energy_rating_current": 69, "lighting_cost_current": {"value": 57, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "blocked_chimneys_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 856, "currency": "GBP"}, "hot_water_cost_current": {"value": 230, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 82, "schema_version_current": "LIG-21.0", "suggested_improvements": [{"sequence": 1, "typical_saving": 83, "indicative_cost": "\u00a3900 - \u00a31,200", "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 70}, {"sequence": 2, "typical_saving": 93, "indicative_cost": "\u00a35,000 - \u00a310,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 72}, {"sequence": 3, "typical_saving": 273, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 83, "environmental_impact_rating": 74}], "co2_emissions_potential": 2.5, "energy_rating_potential": 83, "lighting_cost_potential": {"value": 57, "currency": "GBP"}, "schema_version_original": "LIG-21.0", "hot_water_cost_potential": {"value": 231, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2662.95, "space_heating_existing_dwelling": 10611.87}, "draughtproofed_door_count": 0, "energy_consumption_current": 193, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "10.2.2.0", "energy_consumption_potential": 146, "environmental_impact_current": 67, "cfl_fixed_lighting_bulbs_count": 2, "current_energy_efficiency_band": "C", "environmental_impact_potential": 74, "led_fixed_lighting_bulbs_count": 9, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 35, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/LE113PX/cert-ae072d6b7841.json b/tests/fixtures/epc_prediction/LE113PX/cert-ae072d6b7841.json new file mode 100644 index 00000000..47e39497 --- /dev/null +++ b/tests/fixtures/epc_prediction/LE113PX/cert-ae072d6b7841.json @@ -0,0 +1 @@ +{"uprn": 100030465803, "roofs": [{"description": {"value": "Pitched, 200 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": {"value": "Solid brick, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in 89% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "LE11 3PX", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2018-12-09 09:30:18.000000", "door_count": 3, "glazed_area": 1, "glazing_gap": 6, "region_code": 6, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17931}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.93, "schema_type": "RdSAP-Schema-18.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Semi-detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-1f40f9fa24d8", "assessment_type": "RdSAP", "completion_date": "2018-12-09", "inspection_date": "2018-12-06", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 74, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 5, "pvc_window_frames": "true", "registration_date": "2018-12-09", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 260, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 37.9, "quantity": "square metres"}, "party_wall_length": {"value": 6.8, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 18, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.4, "quantity": "metres"}, "total_floor_area": {"value": 36, "quantity": "square metres"}, "party_wall_length": {"value": 6.8, "quantity": "metres"}, "heat_loss_perimeter": {"value": 17.4, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "200mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 89, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 591, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.4, "energy_rating_average": 60, "energy_rating_current": 65, "lighting_cost_current": {"value": 60, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 373, "currency": "GBP"}, "hot_water_cost_current": {"value": 91, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 177, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 72}, {"sequence": 2, "typical_saving": {"value": 41, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 74}, {"sequence": 3, "typical_saving": {"value": 27, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 76}, {"sequence": 4, "typical_saving": {"value": 294, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a38,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 87, "environmental_impact_rating": 86}], "co2_emissions_potential": 1.1, "energy_rating_potential": 87, "lighting_cost_potential": {"value": 60, "currency": "GBP"}, "schema_version_original": "LIG-18.0", "hot_water_cost_potential": {"value": 64, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2096, "impact_of_solid_wall_insulation": -4035, "space_heating_existing_dwelling": 10881}, "energy_consumption_current": 260, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.1.0.0", "energy_consumption_potential": 82, "environmental_impact_current": 61, "fixed_lighting_outlets_count": 9, "windows_transmission_details": {"u_value": 3.1, "data_source": 2, "solar_transmittance": 0.76}, "current_energy_efficiency_band": "D", "environmental_impact_potential": 86, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 46, "low_energy_fixed_lighting_outlets_count": 8} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/LE113PX/cert-ba628e4f9cbf.json b/tests/fixtures/epc_prediction/LE113PX/cert-ba628e4f9cbf.json new file mode 100644 index 00000000..1d8be668 --- /dev/null +++ b/tests/fixtures/epc_prediction/LE113PX/cert-ba628e4f9cbf.json @@ -0,0 +1 @@ +{"uprn": 100030465795, "roofs": [{"description": {"value": "Pitched, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": {"value": "Pitched, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": {"value": "Pitched, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": {"value": "Solid brick, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": {"value": "Cavity wall, as built, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": {"value": "Solid, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Low energy lighting in 58% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "LE11 3PX", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2020-08-18 12:45:38.000000", "door_count": 2, "glazed_area": 1, "region_code": 6, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 2, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 1}, "secondary_fuel_type": 9, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "mcs_installed_heat_pump": "false", "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 16886}], "immersion_heating_type": "NA", "secondary_heating_type": 633, "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-19.0", "uprn_source": "Address Matched", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Semi-detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-b8a6f18f1027", "assessment_type": "RdSAP", "completion_date": "2020-08-18", "inspection_date": "2020-08-18", "extensions_count": 3, "measurement_type": 1, "total_floor_area": 120, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 5, "pvc_window_frames": "true", "registration_date": "2020-08-18", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Room heaters, dual fuel (mineral and wood)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 225, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 40.61, "quantity": "square metres"}, "party_wall_length": {"value": 6.95, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 8.44, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.35, "quantity": "metres"}, "total_floor_area": {"value": 39.53, "quantity": "square metres"}, "party_wall_length": {"value": 6.95, "quantity": "metres"}, "heat_loss_perimeter": {"value": 12.65, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 2.16, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 1, "heat_loss_perimeter": {"value": 2.95, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "L", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}, {"identifier": "Extension 2", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 8, "wall_construction": 4, "building_part_number": 3, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.45, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 7.96, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 1, "heat_loss_perimeter": {"value": 5.65, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "L", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 7, "wall_insulation_thickness": "NI", "sloping_ceiling_insulation_thickness": "AB"}, {"identifier": "Extension 3", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 4, "building_part_number": 4, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 14.67, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 1, "heat_loss_perimeter": {"value": 9.2, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.4, "quantity": "metres"}, "total_floor_area": {"value": 14.67, "quantity": "square metres"}, "party_wall_length": 0, "heat_loss_perimeter": {"value": 13.21, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "L", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 58, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 848, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.9, "energy_rating_average": 60, "energy_rating_current": 65, "lighting_cost_current": {"value": 121, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 725, "currency": "GBP"}, "hot_water_cost_current": {"value": 105, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 100, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 63}, {"sequence": 2, "typical_saving": {"value": 27, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 64}, {"sequence": 3, "typical_saving": {"value": 31, "currency": "GBP"}, "indicative_cost": "\u00a325", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 65}, {"sequence": 4, "typical_saving": {"value": 32, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 67}, {"sequence": 5, "typical_saving": {"value": 332, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 79, "environmental_impact_rating": 74}], "co2_emissions_potential": 3.0, "energy_rating_potential": 79, "lighting_cost_potential": {"value": 86, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "hot_water_cost_potential": {"value": 74, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2292, "impact_of_loft_insulation": -3828, "impact_of_solid_wall_insulation": -2351, "space_heating_existing_dwelling": 15388}, "energy_consumption_current": 227, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "v94.0.1.1", "energy_consumption_potential": 137, "environmental_impact_current": 58, "fixed_lighting_outlets_count": 12, "current_energy_efficiency_band": "D", "environmental_impact_potential": 74, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 41, "low_energy_fixed_lighting_outlets_count": 7} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PE71NT/cert-1d45251c4fcc.json b/tests/fixtures/epc_prediction/PE71NT/cert-1d45251c4fcc.json new file mode 100644 index 00000000..eb6e5f9f --- /dev/null +++ b/tests/fixtures/epc_prediction/PE71NT/cert-1d45251c4fcc.json @@ -0,0 +1 @@ +{"uprn": 100090075285, "roofs": [{"description": "Pitched, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Low energy lighting in 25% of fixed outlets", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "postcode": "PE7 1NT", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 3, "created_at": "2018-06-25 16:43:45.000000", "door_count": 2, "glazed_area": 1, "glazing_gap": 12, "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2107, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 2038}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 25}, "sap_version": 9.93, "schema_type": "RdSAP-Schema-18.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "End-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-52932cb4ab6d", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2018-06-25", "inspection_date": "2018-06-25", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 60, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2018-06-25", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 290, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.41, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 29.48, "quantity": "square metres"}, "party_wall_length": {"value": 7.12, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 14.38, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.41, "quantity": "metres"}, "total_floor_area": {"value": 29.48, "quantity": "square metres"}, "party_wall_length": {"value": 7.12, "quantity": "metres"}, "heat_loss_perimeter": {"value": 15.4, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "H", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 290, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 1.44, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 3.84, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "H", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 25, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 449, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.0, "energy_rating_average": 60, "energy_rating_current": 64, "lighting_cost_current": {"value": 78, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, TRVs and bypass", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 363, "currency": "GBP"}, "hot_water_cost_current": {"value": 156, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 36, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 63}, {"sequence": 2, "typical_saving": {"value": 10, "currency": "GBP"}, "indicative_cost": 30, "improvement_type": "C", "improvement_details": {"improvement_number": 3}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 64}, {"sequence": 3, "typical_saving": {"value": 29, "currency": "GBP"}, "indicative_cost": 30, "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 65}, {"sequence": 4, "typical_saving": {"value": 35, "currency": "GBP"}, "indicative_cost": 450, "improvement_type": "G", "improvement_details": {"improvement_number": 14}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 67}, {"sequence": 5, "typical_saving": {"value": 64, "currency": "GBP"}, "indicative_cost": "3,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 72}, {"sequence": 6, "typical_saving": {"value": 38, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 75}, {"sequence": 7, "typical_saving": {"value": 295, "currency": "GBP"}, "indicative_cost": "8,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 87, "environmental_impact_rating": 86}], "co2_emissions_potential": 1.0, "energy_rating_potential": 87, "lighting_cost_potential": {"value": 44, "currency": "GBP"}, "schema_version_original": "LIG-18.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 42, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 72, "environmental_impact_rating": 95}, {"sequence": 2, "typical_saving": {"value": 47, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 71, "environmental_impact_rating": 67}], "hot_water_cost_potential": {"value": 65, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2621, "impact_of_loft_insulation": -187, "space_heating_existing_dwelling": 5960}, "energy_consumption_current": 279, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "3.05r03", "energy_consumption_potential": 86, "environmental_impact_current": 61, "fixed_lighting_outlets_count": 8, "current_energy_efficiency_band": "D", "environmental_impact_potential": 86, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 49, "low_energy_fixed_lighting_outlets_count": 2} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PE71NT/cert-215907dd8cab.json b/tests/fixtures/epc_prediction/PE71NT/cert-215907dd8cab.json new file mode 100644 index 00000000..7bfac0c1 --- /dev/null +++ b/tests/fixtures/epc_prediction/PE71NT/cert-215907dd8cab.json @@ -0,0 +1 @@ +{"uprn": 100090075281, "roofs": [{"description": "Pitched, 100 mm loft insulation", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "windows": [{"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "lighting": {"description": "Low energy lighting in 56% of fixed outlets", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "PE7 1NT", "hot_water": {"description": "From main system", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 4, "created_at": "2014-01-31 08:35:07.000000", "door_count": 1, "glazed_area": 1, "region_code": 2, "report_type": 2, "sap_heating": {"wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "N", "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2107, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 101, "main_heating_data_source": 2}], "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 38}, "sap_version": 9.91, "schema_type": "SAP-Schema-16.2", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Mid-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-cd94bcabacd1", "address_line_2": "", "schema_version": "LIG-16.1", "assessment_type": "RdSAP", "completion_date": "2014-01-31", "inspection_date": "2014-01-31", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 56, "transaction_type": 1, "conservatory_type": 2, "heated_room_count": 3, "registration_date": "2014-01-31", "restricted_access": 0, "sap_energy_source": {"main_gas": "Y", "meter_type": 1, "photovoltaic_supply": {"percent_roof_area": 0}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 270, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.4, "floor_insulation": 1, "total_floor_area": 28.08, "floor_construction": 1, "heat_loss_perimeter": 7.8}, {"floor": 1, "room_height": 2.4, "total_floor_area": 28.08, "heat_loss_perimeter": 7.8}], "wall_insulation_type": 4, "construction_age_band": "H", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "100mm"}], "low_energy_lighting": 56, "solar_water_heating": "N", "bedf_revision_number": 352, "habitable_room_count": 3, "heating_cost_current": {"value": 375, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.2, "energy_rating_average": 60, "energy_rating_current": 69, "lighting_cost_current": {"value": 57, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, TRVs and bypass", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 308, "currency": "GBP"}, "hot_water_cost_current": {"value": 143, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 23.89, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W", "improvement_details": {"improvement_number": 47}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 72}, {"sequence": 2, "typical_saving": {"value": 14.91, "currency": "GBP"}, "indicative_cost": "\u00a320", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 72}, {"sequence": 3, "typical_saving": {"value": 30.84, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 14}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 74}, {"sequence": 4, "typical_saving": {"value": 54.02, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 78}, {"sequence": 5, "typical_saving": {"value": 35.6, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 81}, {"sequence": 6, "typical_saving": {"value": 265.29, "currency": "GBP"}, "indicative_cost": "\u00a39,000 - \u00a314,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 90, "environmental_impact_rating": 93}, {"sequence": 7, "typical_saving": {"value": 21.46, "currency": "GBP"}, "indicative_cost": "\u00a31,500 - \u00a34,000", "improvement_type": "V", "improvement_details": {"improvement_number": 44}, "improvement_category": 5, "energy_performance_rating": 91, "environmental_impact_rating": 94}], "co2_emissions_potential": 0.4, "energy_rating_potential": 91, "lighting_cost_potential": {"value": 40, "currency": "GBP"}, "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 80.56, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 79, "environmental_impact_rating": 80}, {"sequence": 2, "typical_saving": {"value": 26.43, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 74, "environmental_impact_rating": 74}], "hot_water_cost_potential": {"value": 68, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2364, "impact_of_loft_insulation": -317, "space_heating_existing_dwelling": 4180}, "seller_commission_report": "Y", "energy_consumption_current": 206, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "1.4.1.0", "energy_consumption_potential": 30, "environmental_impact_current": 70, "fixed_lighting_outlets_count": 9, "current_energy_efficiency_band": "C", "environmental_impact_potential": 94, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 39, "low_energy_fixed_lighting_outlets_count": 5} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PE71NT/cert-21b634bc4b59.json b/tests/fixtures/epc_prediction/PE71NT/cert-21b634bc4b59.json new file mode 100644 index 00000000..b0ce49d0 --- /dev/null +++ b/tests/fixtures/epc_prediction/PE71NT/cert-21b634bc4b59.json @@ -0,0 +1 @@ +{"uprn": 100090075261, "roofs": [{"description": "Pitched, 75 mm loft insulation", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Solid, limited insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Low energy lighting in 63% of fixed outlets", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "PE7 1NT", "hot_water": {"description": "From main system, no cylinder thermostat", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "post_town": "", "built_form": 4, "created_at": "2020-02-26 16:40:29.000000", "door_count": 1, "glazed_area": 1, "glazing_gap": "16+", "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 1, "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2107, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 115, "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 38}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-19.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Mid-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-2675a79463d5", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2020-02-26", "inspection_date": "2020-02-26", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 56, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 3, "pvc_window_frames": "true", "registration_date": "2020-02-26", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 280, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.36, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 27.63, "quantity": "square metres"}, "party_wall_length": {"value": 14.32, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 6.72, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.31, "quantity": "metres"}, "total_floor_area": {"value": 27.63, "quantity": "square metres"}, "party_wall_length": {"value": 14.32, "quantity": "metres"}, "heat_loss_perimeter": {"value": 7.72, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "I", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "75mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 280, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.36, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 1.2, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 3.4, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "I", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 63, "solar_water_heating": "N", "habitable_room_count": 3, "heating_cost_current": {"value": 400, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.0, "energy_rating_average": 60, "energy_rating_current": 63, "lighting_cost_current": {"value": 70, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, TRVs and bypass", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 1, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 303, "currency": "GBP"}, "hot_water_cost_current": {"value": 220, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 28, "currency": "GBP"}, "indicative_cost": 350, "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 64, "environmental_impact_rating": 61}, {"sequence": 2, "typical_saving": {"value": 16, "currency": "GBP"}, "indicative_cost": 15, "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 61}, {"sequence": 3, "typical_saving": {"value": 28, "currency": "GBP"}, "indicative_cost": 400, "improvement_type": "F", "improvement_details": {"improvement_number": 4}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 63}, {"sequence": 4, "typical_saving": {"value": 42, "currency": "GBP"}, "indicative_cost": 450, "improvement_type": "G", "improvement_details": {"improvement_number": 14}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 66}, {"sequence": 5, "typical_saving": {"value": 121, "currency": "GBP"}, "indicative_cost": "3,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 76}, {"sequence": 6, "typical_saving": {"value": 36, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 79}, {"sequence": 7, "typical_saving": {"value": 335, "currency": "GBP"}, "indicative_cost": "5,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 90, "environmental_impact_rating": 90}], "co2_emissions_potential": 0.6, "energy_rating_potential": 90, "lighting_cost_potential": {"value": 51, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 123, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 76, "environmental_impact_rating": 95}, {"sequence": 2, "typical_saving": {"value": 23, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 76, "environmental_impact_rating": 78}, {"sequence": 3, "typical_saving": {"value": 97, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 72, "environmental_impact_rating": 70}], "hot_water_cost_potential": {"value": 64, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3066, "impact_of_loft_insulation": -448, "space_heating_existing_dwelling": 4321}, "energy_consumption_current": 302, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.03r02", "energy_consumption_potential": 57, "environmental_impact_current": 59, "fixed_lighting_outlets_count": 8, "current_energy_efficiency_band": "D", "environmental_impact_potential": 90, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 53, "low_energy_fixed_lighting_outlets_count": 5} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PE71NT/cert-224f1ce8cb64.json b/tests/fixtures/epc_prediction/PE71NT/cert-224f1ce8cb64.json new file mode 100644 index 00000000..6bc4c929 --- /dev/null +++ b/tests/fixtures/epc_prediction/PE71NT/cert-224f1ce8cb64.json @@ -0,0 +1 @@ +{"uprn": 100090075267, "roofs": [{"description": "Pitched, 200 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "lighting": {"description": "Good lighting efficiency", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "PE7 1NT", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 3, "created_at": "2025-08-12 15:00:50", "door_count": 2, "region_code": 2, "report_type": 2, "sap_heating": {"number_baths": 1, "cylinder_size": 1, "shower_outlets": [{"shower_outlet": {"shower_wwhrs": 1, "shower_outlet_type": 2}}], "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17417}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "true", "glazing_gap": "16+", "orientation": 8, "window_type": 1, "glazing_type": 3, "window_width": 0.5, "window_height": 1.2, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 2, "window_type": 1, "glazing_type": 3, "window_width": 1.8, "window_height": 1.2, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 8, "window_type": 1, "glazing_type": 3, "window_width": 0.5, "window_height": 1.2, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 2, "window_type": 1, "glazing_type": 3, "window_width": 1.8, "window_height": 1.2, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 4, "window_type": 1, "glazing_type": 3, "window_width": 0.5, "window_height": 1.2, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 6, "window_type": 1, "glazing_type": 3, "window_width": 0.9, "window_height": 1, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 8, "window_type": 1, "glazing_type": 3, "window_width": 0.9, "window_height": 1.5, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 8, "window_type": 1, "glazing_type": 3, "window_width": 0.9, "window_height": 1, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "End-terrace house", "language_code": 1, "pressure_test": 4, "property_type": 0, "address_line_1": "addr-80b5467b46f3", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2025-08-12", "inspection_date": "2025-08-11", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 59, "transaction_type": 15, "conservatory_type": 1, "heated_room_count": 3, "registration_date": "2025-08-12", "sap_energy_source": {"mains_gas": "Y", "meter_type": 3, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "true", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 3, "electricity_smart_meter_present": "false"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "extract_fans_count": 1, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 280, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.3, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 29.98, "quantity": "square metres"}, "party_wall_length": {"value": 4.16, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 20.62, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.3, "quantity": "metres"}, "total_floor_area": {"value": 29.32, "quantity": "square metres"}, "party_wall_length": {"value": 2.8, "quantity": "metres"}, "heat_loss_perimeter": {"value": 20.46, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "H", "party_wall_construction": 2, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "200mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "solar_water_heating": "N", "habitable_room_count": 3, "heating_cost_current": {"value": 674, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.2, "energy_rating_average": 60, "energy_rating_current": 67, "lighting_cost_current": {"value": 46, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 619, "currency": "GBP"}, "hot_water_cost_current": {"value": 266, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 55, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a310,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 73}, {"sequence": 2, "typical_saving": {"value": 218, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 74}, {"sequence": 3, "typical_saving": {"value": 712, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a320,000", "improvement_type": "V2", "improvement_details": {"improvement_number": 44}, "improvement_category": 5, "energy_performance_rating": 93, "environmental_impact_rating": 79}], "co2_emissions_potential": 1.6, "energy_rating_potential": 93, "lighting_cost_potential": {"value": 46, "currency": "GBP"}, "schema_version_original": "21.0.1", "hot_water_cost_potential": {"value": 266, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2088.63, "space_heating_existing_dwelling": 7082.77}, "draughtproofed_door_count": 2, "energy_consumption_current": 209, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "5.02r0290", "energy_consumption_potential": 110, "environmental_impact_current": 71, "cfl_fixed_lighting_bulbs_count": 4, "current_energy_efficiency_band": "D", "environmental_impact_potential": 79, "led_fixed_lighting_bulbs_count": 3, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 37, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PE71NT/cert-26619d8e7f8e.json b/tests/fixtures/epc_prediction/PE71NT/cert-26619d8e7f8e.json new file mode 100644 index 00000000..79ab8429 --- /dev/null +++ b/tests/fixtures/epc_prediction/PE71NT/cert-26619d8e7f8e.json @@ -0,0 +1 @@ +{"uprn": 100090075293, "roofs": [{"description": {"value": "Pitched, 100 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": {"value": "Cavity wall, as built, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "addendum": {"addendum_numbers": [8]}, "lighting": {"description": {"value": "Low energy lighting in 50% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "PE7 1NT", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 2, "created_at": "2015-08-25 13:10:06", "door_count": 1, "glazed_area": 1, "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2107, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 115, "mcs_installed_heat_pump": "false", "central_heating_pump_age": 1, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 25}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Semi-detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-ab17a7bd7d8f", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2015-08-25", "inspection_date": "2015-08-25", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 65, "transaction_type": 1, "conservatory_type": 2, "heated_room_count": 4, "registration_date": "2015-08-25", "sap_energy_source": {"mains_gas": "Y", "meter_type": 1, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 2, "percent_roof_area": 40}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lzc_energy_sources": [11], "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 270, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.36, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 32.6, "quantity": "square metres"}, "party_wall_length": {"value": 6.8, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 16.4, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.28, "quantity": "metres"}, "total_floor_area": {"value": 32.6, "quantity": "square metres"}, "party_wall_length": {"value": 6.8, "quantity": "metres"}, "heat_loss_perimeter": {"value": 16.4, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "H", "party_wall_construction": 2, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "100mm", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 50, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 575, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.9, "energy_rating_average": 60, "energy_rating_current": 69, "lighting_cost_current": {"value": 74, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, TRVs and bypass", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 392, "currency": "GBP"}, "hot_water_cost_current": {"value": 203, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 24, "currency": "GBP"}, "indicative_cost": "\u00a3100 - \u00a3350", "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 64}, {"sequence": 2, "typical_saving": {"value": 46, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 67}, {"sequence": 3, "typical_saving": {"value": 12, "currency": "GBP"}, "indicative_cost": "\u00a315 - \u00a330", "improvement_type": "C", "improvement_details": {"improvement_number": 3}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 68}, {"sequence": 4, "typical_saving": {"value": 20, "currency": "GBP"}, "indicative_cost": "\u00a325", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 69}, {"sequence": 5, "typical_saving": {"value": 50, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 14}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 72}, {"sequence": 6, "typical_saving": {"value": 147, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 83, "environmental_impact_rating": 81}, {"sequence": 7, "typical_saving": {"value": 42, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 84, "environmental_impact_rating": 84}], "co2_emissions_potential": 1.2, "energy_rating_potential": 84, "lighting_cost_potential": {"value": 49, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 161, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 83, "environmental_impact_rating": 103}, {"sequence": 2, "typical_saving": {"value": 102, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 81, "environmental_impact_rating": 83}, {"sequence": 3, "typical_saving": {"value": 119, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 82, "environmental_impact_rating": 77}], "hot_water_cost_potential": {"value": 70, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2673, "impact_of_loft_insulation": -343, "space_heating_existing_dwelling": 6324}, "energy_consumption_current": 248, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "1.0.x", "energy_consumption_potential": 101, "environmental_impact_current": 63, "fixed_lighting_outlets_count": 10, "current_energy_efficiency_band": "C", "environmental_impact_potential": 84, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 44, "low_energy_fixed_lighting_outlets_count": 5} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PE71NT/cert-460c2d58495c.json b/tests/fixtures/epc_prediction/PE71NT/cert-460c2d58495c.json new file mode 100644 index 00000000..e00265cb --- /dev/null +++ b/tests/fixtures/epc_prediction/PE71NT/cert-460c2d58495c.json @@ -0,0 +1 @@ +{"uprn": 100090075246, "roofs": [{"description": "Pitched, 150 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PE7 1NT", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 3, "created_at": "2024-03-08 11:04:52", "door_count": 1, "glazed_area": 4, "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 1, "main_heating_data_source": 1, "main_heating_index_number": 15101}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 25}, "sap_version": 9.94, "sap_windows": [{"pvc_frame": "true", "glazing_gap": "16+", "orientation": 8, "window_area": {"value": 2.57, "quantity": "square metres"}, "window_type": 1, "glazing_type": 3, "window_location": 0}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 4, "window_area": {"value": 2.99, "quantity": "square metres"}, "window_type": 1, "glazing_type": 3, "window_location": 0}, {"orientation": 4, "window_area": {"value": 3.69, "quantity": "square metres"}, "window_type": 1, "glazing_type": 2, "window_location": 0}], "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "End-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-ebbcec3eef49", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2024-03-08", "inspection_date": "2024-03-08", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 57, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 3, "registration_date": "2024-03-08", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 270, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.38, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 29.09, "quantity": "square metres"}, "party_wall_length": {"value": 7.16, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 17.62, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.31, "quantity": "metres"}, "total_floor_area": {"value": 27.62, "quantity": "square metres"}, "party_wall_length": {"value": 7.16, "quantity": "metres"}, "heat_loss_perimeter": {"value": 14.88, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "H", "party_wall_construction": 2, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "150mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 3, "heating_cost_current": {"value": 672, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.3, "energy_rating_average": 60, "energy_rating_current": 69, "lighting_cost_current": {"value": 84, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": "ND", "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 581, "currency": "GBP"}, "hot_water_cost_current": {"value": 232, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 39, "currency": "GBP"}, "indicative_cost": "\u00a3300 - \u00a3600", "improvement_type": "B4", "improvement_details": {"improvement_number": 63}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 69}, {"sequence": 2, "typical_saving": {"value": 60, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 72}, {"sequence": 3, "typical_saving": {"value": 87, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 75}, {"sequence": 4, "typical_saving": {"value": 570, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 87, "environmental_impact_rating": 87}], "co2_emissions_potential": 0.9, "energy_rating_potential": 87, "lighting_cost_potential": {"value": 84, "currency": "GBP"}, "schema_version_original": "20.0.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 78, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 72, "environmental_impact_rating": 72}}], "hot_water_cost_potential": {"value": 137, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2580, "impact_of_loft_insulation": -177, "space_heating_existing_dwelling": 6089}, "energy_consumption_current": 235, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.13r0001", "energy_consumption_potential": 81, "environmental_impact_current": 68, "fixed_lighting_outlets_count": 8, "current_energy_efficiency_band": "C", "environmental_impact_potential": 87, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 41, "low_energy_fixed_lighting_outlets_count": 8} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PE71NT/cert-508b303ae8b9.json b/tests/fixtures/epc_prediction/PE71NT/cert-508b303ae8b9.json new file mode 100644 index 00000000..270abf97 --- /dev/null +++ b/tests/fixtures/epc_prediction/PE71NT/cert-508b303ae8b9.json @@ -0,0 +1 @@ +{"uprn": 100090075273, "roofs": [{"description": "Pitched, 100 mm loft insulation", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Solid, limited insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "addendum": {"addendum_numbers": [15]}, "lighting": {"description": "Excellent lighting efficiency", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PE7 1NT", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "psv_count": 0, "built_form": 4, "created_at": "2026-05-14 10:00:49", "door_count": 1, "region_code": 2, "report_type": 2, "sap_heating": {"number_baths": 0, "cylinder_size": 2, "shower_outlets": [{"shower_wwhrs": 1, "shower_outlet_type": 2}], "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "secondary_fuel_type": 0, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 16453}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 25}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "true", "glazing_gap": "16+", "orientation": 7, "window_type": 1, "glazing_type": 3, "window_width": 0.88, "window_height": 1.02, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 7, "window_type": 1, "glazing_type": 3, "window_width": 1.18, "window_height": 1.02, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 3, "window_type": 1, "glazing_type": 3, "window_width": 1.17, "window_height": 1.02, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 3, "window_type": 1, "glazing_type": 3, "window_width": 1.17, "window_height": 1.16, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 7, "window_type": 1, "glazing_type": 3, "window_width": 1.78, "window_height": 2.05, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 7, "window_type": 1, "glazing_type": 3, "window_width": 1, "window_height": 1.02, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Mid-terrace house", "language_code": 1, "pressure_test": 4, "property_type": 0, "address_line_1": "addr-cd7ccbfd8d21", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "extensions_count": 0, "measurement_type": 1, "open_flues_count": 0, "total_floor_area": 57, "transaction_type": 8, "conservatory_type": 1, "has_draught_lobby": "false", "heated_room_count": 3, "other_flues_count": 0, "registration_date": "2026-05-14", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "pv_diverter": "false", "pv_connection": 0, "pv_battery_count": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "true", "is_dwelling_export_capable": "true", "wind_turbines_terrain_type": 2, "electricity_smart_meter_present": "true", "is_hydro_output_connected_to_dwelling_meter": "false"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "closed_flues_count": 0, "extract_fans_count": 2, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 275, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.38, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 29.09, "quantity": "square metres"}, "party_wall_length": {"value": 14.36, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 10.18, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.31, "quantity": "metres"}, "total_floor_area": {"value": 27.86, "quantity": "square metres"}, "party_wall_length": {"value": 14.36, "quantity": "metres"}, "heat_loss_perimeter": {"value": 7.76, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "I", "party_wall_construction": 2, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "100mm", "wall_insulation_thickness": "NI"}], "boilers_flues_count": 0, "open_chimneys_count": 0, "solar_water_heating": "N", "habitable_room_count": 3, "heating_cost_current": {"value": 591, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 1.8, "energy_rating_average": 60, "energy_rating_current": 69, "lighting_cost_current": {"value": 37, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "blocked_chimneys_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 591, "currency": "GBP"}, "hot_water_cost_current": {"value": 319, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": 275, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 82, "environmental_impact_rating": 78}], "co2_emissions_potential": 1.5, "energy_rating_potential": 82, "lighting_cost_potential": {"value": 37, "currency": "GBP"}, "schema_version_original": "LIG-21.0.1", "flueless_gas_fires_count": 0, "hot_water_cost_potential": {"value": 319, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2240.37, "space_heating_existing_dwelling": 5319.27}, "draughtproofed_door_count": 1, "energy_consumption_current": 182, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.3.74", "energy_consumption_potential": 153, "environmental_impact_current": 75, "cfl_fixed_lighting_bulbs_count": 0, "current_energy_efficiency_band": "C", "environmental_impact_potential": 78, "led_fixed_lighting_bulbs_count": 8, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 31, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PE71NT/cert-54bbc1fadbf7.json b/tests/fixtures/epc_prediction/PE71NT/cert-54bbc1fadbf7.json new file mode 100644 index 00000000..f17633b3 --- /dev/null +++ b/tests/fixtures/epc_prediction/PE71NT/cert-54bbc1fadbf7.json @@ -0,0 +1 @@ +{"uprn": 100090075291, "roofs": [{"description": "Pitched, 270 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PE7 1NT", "hot_water": {"description": "From main system", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 2, "created_at": "2015-11-18 15:49:17", "door_count": 2, "glazed_area": 1, "glazing_gap": 12, "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2107, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 111, "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-9d6450b18a2a", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2015-11-18", "inspection_date": "2015-11-18", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 64, "transaction_type": 11, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2015-11-18", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 2, "percent_roof_area": 35}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lzc_energy_sources": [11], "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 285, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.36, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 31.9, "quantity": "square metres"}, "party_wall_length": {"value": 6.73, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 16.21, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.34, "quantity": "metres"}, "total_floor_area": {"value": 31.9, "quantity": "square metres"}, "party_wall_length": {"value": 6.73, "quantity": "metres"}, "heat_loss_perimeter": {"value": 16.21, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "H", "party_wall_construction": 2, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "270mm", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 580, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.8, "energy_rating_average": 60, "energy_rating_current": 69, "lighting_cost_current": {"value": 44, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, TRVs and bypass", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 1, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 394, "currency": "GBP"}, "hot_water_cost_current": {"value": 175, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 43, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 66}, {"sequence": 2, "typical_saving": {"value": 49, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 14}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 69}, {"sequence": 3, "typical_saving": {"value": 133, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 80, "environmental_impact_rating": 78}, {"sequence": 4, "typical_saving": {"value": 42, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 81, "environmental_impact_rating": 80}, {"sequence": 5, "typical_saving": {"value": 26, "currency": "GBP"}, "indicative_cost": "\u00a31,000 - \u00a31,400", "improvement_type": "O3", "improvement_details": {"improvement_number": 56}, "improvement_category": 5, "energy_performance_rating": 83, "environmental_impact_rating": 82}], "co2_emissions_potential": 1.3, "energy_rating_potential": 83, "lighting_cost_potential": {"value": 44, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 135, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 79, "environmental_impact_rating": 102}, {"sequence": 2, "typical_saving": {"value": 94, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 78, "environmental_impact_rating": 80}, {"sequence": 3, "typical_saving": {"value": 107, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 79, "environmental_impact_rating": 74}], "hot_water_cost_potential": {"value": 69, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2441, "space_heating_existing_dwelling": 6752}, "energy_consumption_current": 246, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.06r07", "energy_consumption_potential": 115, "environmental_impact_current": 63, "fixed_lighting_outlets_count": 9, "current_energy_efficiency_band": "C", "environmental_impact_potential": 82, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 44, "low_energy_fixed_lighting_outlets_count": 9} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PE71NT/cert-59bcc003ab93.json b/tests/fixtures/epc_prediction/PE71NT/cert-59bcc003ab93.json new file mode 100644 index 00000000..d5c9b559 --- /dev/null +++ b/tests/fixtures/epc_prediction/PE71NT/cert-59bcc003ab93.json @@ -0,0 +1 @@ +{"uprn": 100090075277, "roofs": [{"description": "Pitched, 100 mm loft insulation", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "windows": [{"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "lighting": {"description": "Low energy lighting in 88% of fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PE7 1NT", "hot_water": {"description": "From main system, no cylinder thermostat", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "post_town": "", "built_form": 3, "created_at": "2014-08-06 17:27:22.000000", "door_count": 2, "glazed_area": 1, "region_code": 2, "report_type": 2, "sap_heating": {"wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "N", "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2107, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 101, "main_heating_data_source": 2}], "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 12}, "sap_version": 9.91, "schema_type": "SAP-Schema-16.3", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "end-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-d715abfdf3b3", "address_line_2": "", "schema_version": "LIG-16.1", "assessment_type": "RdSAP", "completion_date": "2014-08-06", "inspection_date": "2014-08-06", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 59, "transaction_type": 9, "conservatory_type": 1, "heated_room_count": 3, "registration_date": "2014-08-06", "restricted_access": 0, "sap_energy_source": {"main_gas": "Y", "meter_type": 1, "photovoltaic_supply": {"percent_roof_area": 0}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 280, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.36, "floor_insulation": 1, "total_floor_area": 30.22, "floor_construction": 1, "heat_loss_perimeter": 17.7}, {"floor": 1, "room_height": 2.3, "total_floor_area": 28.47, "heat_loss_perimeter": 15.1}], "wall_insulation_type": 4, "construction_age_band": "H", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "100mm"}], "low_energy_lighting": 88, "solar_water_heating": "N", "bedf_revision_number": 346, "habitable_room_count": 3, "heating_cost_current": {"value": 470, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.1, "energy_rating_average": 60, "energy_rating_current": 60, "lighting_cost_current": {"value": 46, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, TRVs and bypass", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 382, "currency": "GBP"}, "hot_water_cost_current": {"value": 232, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 44.0881261140466, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W", "improvement_details": {"improvement_number": 47}, "improvement_category": 5, "energy_performance_rating": 63, "environmental_impact_rating": 62}, {"sequence": 2, "typical_saving": {"value": 31.4056839340982, "currency": "GBP"}, "indicative_cost": "\u00a315 - \u00a330", "improvement_type": "C", "improvement_details": {"improvement_number": 3}, "improvement_category": 5, "energy_performance_rating": 64, "environmental_impact_rating": 64}, {"sequence": 3, "typical_saving": {"value": 33.1691090772435, "currency": "GBP"}, "indicative_cost": "\u00a3200 - \u00a3400", "improvement_type": "F", "improvement_details": {"improvement_number": 4}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 66}, {"sequence": 4, "typical_saving": {"value": 37.3112826013398, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 14}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 68}, {"sequence": 5, "typical_saving": {"value": 73.4491558072725, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 74}, {"sequence": 6, "typical_saving": {"value": 33.311390283234, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 76}, {"sequence": 7, "typical_saving": {"value": 265.29450580574, "currency": "GBP"}, "indicative_cost": "\u00a39,000 - \u00a314,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 88}, {"sequence": 8, "typical_saving": {"value": 21.464925412419, "currency": "GBP"}, "indicative_cost": "\u00a31,500 - \u00a34,000", "improvement_type": "V", "improvement_details": {"improvement_number": 44}, "improvement_category": 5, "energy_performance_rating": 87, "environmental_impact_rating": 89}], "co2_emissions_potential": 0.8, "energy_rating_potential": 87, "lighting_cost_potential": {"value": 46, "currency": "GBP"}, "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 49.0001301938714, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 73, "environmental_impact_rating": 74}}], "hot_water_cost_potential": {"value": 67, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3824, "impact_of_loft_insulation": -315, "space_heating_existing_dwelling": 5891}, "seller_commission_report": "Y", "energy_consumption_current": 277, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "1.4.0.0", "energy_consumption_potential": 64, "environmental_impact_current": 59, "fixed_lighting_outlets_count": 8, "current_energy_efficiency_band": "D", "environmental_impact_potential": 89, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 53, "low_energy_fixed_lighting_outlets_count": 7} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PE71NT/cert-5def81fe86c4.json b/tests/fixtures/epc_prediction/PE71NT/cert-5def81fe86c4.json new file mode 100644 index 00000000..7a64dece --- /dev/null +++ b/tests/fixtures/epc_prediction/PE71NT/cert-5def81fe86c4.json @@ -0,0 +1 @@ +{"uprn": 100090075259, "roofs": [{"description": {"value": "Pitched, 270 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": {"value": "Cavity wall, as built, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in all fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PE7 1NT", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2023-09-30 11:33:05", "door_count": 1, "glazed_area": 1, "glazing_gap": "16+", "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "mcs_installed_heat_pump": "false", "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 16374}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Mid-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-6e72020adfbc", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2023-09-30", "inspection_date": "2023-09-30", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 55, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2023-09-30", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 290, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.35, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 27.56, "quantity": "square metres"}, "party_wall_length": {"value": 14.28, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 7.72, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.4, "quantity": "metres"}, "total_floor_area": {"value": 27.56, "quantity": "square metres"}, "party_wall_length": {"value": 14.28, "quantity": "metres"}, "heat_loss_perimeter": {"value": 7.72, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "H", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "270mm", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 683, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 1.8, "energy_rating_average": 60, "energy_rating_current": 74, "lighting_cost_current": {"value": 93, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 683, "currency": "GBP"}, "hot_water_cost_current": {"value": 212, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 71, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 78}, {"sequence": 2, "typical_saving": {"value": 673, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 89, "environmental_impact_rating": 90}], "co2_emissions_potential": 0.6, "energy_rating_potential": 89, "lighting_cost_potential": {"value": 93, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "hot_water_cost_potential": {"value": 141, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1834, "space_heating_existing_dwelling": 4564}, "energy_consumption_current": 181, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "v94.0.1.1", "energy_consumption_potential": 63, "environmental_impact_current": 75, "fixed_lighting_outlets_count": 10, "current_energy_efficiency_band": "C", "environmental_impact_potential": 90, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 32, "low_energy_fixed_lighting_outlets_count": 10} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PE71NT/cert-6869127bdda3.json b/tests/fixtures/epc_prediction/PE71NT/cert-6869127bdda3.json new file mode 100644 index 00000000..9bcccd77 --- /dev/null +++ b/tests/fixtures/epc_prediction/PE71NT/cert-6869127bdda3.json @@ -0,0 +1 @@ +{"uprn": 100090075275, "roofs": [{"description": "Pitched, 250 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Solid, limited insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PE7 1NT", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2020-03-18 15:25:17.000000", "door_count": 2, "glazed_area": 1, "glazing_gap": "16+", "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2107, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 15018}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 38}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-19.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Mid-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-df74f2f60711", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2020-03-18", "inspection_date": "2020-03-18", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 57, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 3, "pvc_window_frames": "true", "registration_date": "2020-03-18", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 270, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.37, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 27.71, "quantity": "square metres"}, "party_wall_length": {"value": 14.32, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 6.35, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.3, "quantity": "metres"}, "total_floor_area": {"value": 27.71, "quantity": "square metres"}, "party_wall_length": {"value": 14.32, "quantity": "metres"}, "heat_loss_perimeter": {"value": 7.74, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "I", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "250mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 250, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.37, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 1.68, "quantity": "square metres"}, "party_wall_length": {"value": 1.21, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 2.6, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "I", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 3, "heating_cost_current": {"value": 351, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.0, "energy_rating_average": 60, "energy_rating_current": 72, "lighting_cost_current": {"value": 51, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, TRVs and bypass", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 338, "currency": "GBP"}, "hot_water_cost_current": {"value": 124, "currency": "GBP"}, "mechanical_ventilation": 2, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 23, "currency": "GBP"}, "indicative_cost": 450, "improvement_type": "G", "improvement_details": {"improvement_number": 14}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 75}, {"sequence": 2, "typical_saving": {"value": 40, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 78}, {"sequence": 3, "typical_saving": {"value": 335, "currency": "GBP"}, "indicative_cost": "5,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 88, "environmental_impact_rating": 89}], "co2_emissions_potential": 0.7, "energy_rating_potential": 88, "lighting_cost_potential": {"value": 51, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "hot_water_cost_potential": {"value": 73, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2439, "impact_of_loft_insulation": -8, "space_heating_existing_dwelling": 3443}, "energy_consumption_current": 198, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.04r06", "energy_consumption_potential": 65, "environmental_impact_current": 73, "fixed_lighting_outlets_count": 8, "current_energy_efficiency_band": "C", "environmental_impact_potential": 89, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 35, "low_energy_fixed_lighting_outlets_count": 8} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PE71NT/cert-8a3078720253.json b/tests/fixtures/epc_prediction/PE71NT/cert-8a3078720253.json new file mode 100644 index 00000000..b0b39f3b --- /dev/null +++ b/tests/fixtures/epc_prediction/PE71NT/cert-8a3078720253.json @@ -0,0 +1 @@ +{"uprn": 100090075297, "roofs": [{"description": {"value": "Pitched, 250 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": {"value": "Cavity wall, as built, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in all fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PE7 1NT", "hot_water": {"description": {"value": "From main system, no cylinder thermostat", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "post_town": "", "built_form": 2, "created_at": "2017-08-04 10:47:15.000000", "door_count": 1, "glazed_area": 1, "glazing_gap": 6, "region_code": 1, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2107, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 111, "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 38}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.1", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Semi-detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-5798cc773431", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2017-08-04", "inspection_date": "2017-08-04", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 65, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2017-08-04", "sap_energy_source": {"mains_gas": "Y", "meter_type": 1, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 270, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.35, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 32.3, "quantity": "square metres"}, "party_wall_length": {"value": 6.8, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 16.3, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.35, "quantity": "metres"}, "total_floor_area": {"value": 32.3, "quantity": "square metres"}, "party_wall_length": {"value": 6.8, "quantity": "metres"}, "heat_loss_perimeter": {"value": 16.3, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "H", "party_wall_construction": 2, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "250mm", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 530, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.5, "energy_rating_average": 60, "energy_rating_current": 61, "lighting_cost_current": {"value": 50, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, TRVs and bypass", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 402, "currency": "GBP"}, "hot_water_cost_current": {"value": 225, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 42, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 63, "environmental_impact_rating": 58}, {"sequence": 2, "typical_saving": {"value": 28, "currency": "GBP"}, "indicative_cost": "\u00a3200 - \u00a3400", "improvement_type": "F", "improvement_details": {"improvement_number": 4}, "improvement_category": 5, "energy_performance_rating": 64, "environmental_impact_rating": 60}, {"sequence": 3, "typical_saving": {"value": 49, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 14}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 63}, {"sequence": 4, "typical_saving": {"value": 125, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 71}, {"sequence": 5, "typical_saving": {"value": 41, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 74}, {"sequence": 6, "typical_saving": {"value": 300, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a38,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 85}], "co2_emissions_potential": 1.1, "energy_rating_potential": 86, "lighting_cost_potential": {"value": 50, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 117, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 71, "environmental_impact_rating": 95}, {"sequence": 2, "typical_saving": {"value": 56, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 70, "environmental_impact_rating": 73}, {"sequence": 3, "typical_saving": {"value": 109, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 71, "environmental_impact_rating": 67}], "hot_water_cost_potential": {"value": 69, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3156, "space_heating_existing_dwelling": 6293}, "energy_consumption_current": 308, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.0.0.0", "energy_consumption_potential": 92, "environmental_impact_current": 55, "fixed_lighting_outlets_count": 9, "current_energy_efficiency_band": "D", "environmental_impact_potential": 85, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 54, "low_energy_fixed_lighting_outlets_count": 9} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PE71NT/cert-8abc9d149c76.json b/tests/fixtures/epc_prediction/PE71NT/cert-8abc9d149c76.json new file mode 100644 index 00000000..3d37e8c7 --- /dev/null +++ b/tests/fixtures/epc_prediction/PE71NT/cert-8abc9d149c76.json @@ -0,0 +1 @@ +{"uprn": 100090075259, "roofs": [{"description": "Pitched, 250 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "windows": [{"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "lighting": {"description": "Low energy lighting in 78% of fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PE7 1NT", "hot_water": {"description": "From main system, no cylinder thermostat", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "post_town": "", "built_form": 4, "created_at": "2013-09-13 10:11:02.000000", "door_count": 1, "glazed_area": 1, "region_code": 2, "report_type": 2, "sap_heating": {"wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2107, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 111, "main_heating_data_source": 2}], "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 38}, "sap_version": 9.91, "schema_type": "SAP-Schema-16.2", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Mid-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-6b2975d2dee5", "address_line_2": "", "schema_version": "LIG-16.1", "assessment_type": "RdSAP", "completion_date": "2013-09-13", "inspection_date": "2013-07-30", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 56, "transaction_type": 5, "conservatory_type": 1, "heated_room_count": 3, "registration_date": "2013-09-13", "restricted_access": 0, "sap_energy_source": {"main_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"percent_roof_area": 0}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.4, "floor_insulation": 1, "total_floor_area": 28.08, "floor_construction": 1, "heat_loss_perimeter": 7.8}, {"floor": 1, "room_height": 2.4, "total_floor_area": 28.08, "heat_loss_perimeter": 7.8}], "wall_insulation_type": 4, "construction_age_band": "G", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "250mm"}], "low_energy_lighting": 78, "solar_water_heating": "N", "bedf_revision_number": 344, "habitable_room_count": 3, "heating_cost_current": {"value": 352, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.4, "energy_rating_average": 60, "energy_rating_current": 67, "lighting_cost_current": {"value": 43, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, TRVs and bypass", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 1, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 281, "currency": "GBP"}, "hot_water_cost_current": {"value": 196, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 23, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W", "improvement_details": {"improvement_number": 47}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 69}, {"sequence": 2, "typical_saving": {"value": 36, "currency": "GBP"}, "indicative_cost": "\u00a3200 - \u00a3400", "improvement_type": "F", "improvement_details": {"improvement_number": 4}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 71}, {"sequence": 3, "typical_saving": {"value": 31, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 14}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 73}, {"sequence": 4, "typical_saving": {"value": 75, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 79}, {"sequence": 5, "typical_saving": {"value": 33, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 78, "environmental_impact_rating": 81}, {"sequence": 6, "typical_saving": {"value": 245, "currency": "GBP"}, "indicative_cost": "\u00a39,000 - \u00a314,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 90, "environmental_impact_rating": 94}, {"sequence": 7, "typical_saving": {"value": 19, "currency": "GBP"}, "indicative_cost": "\u00a31,500 - \u00a34,000", "improvement_type": "V", "improvement_details": {"improvement_number": 44}, "improvement_category": 5, "energy_performance_rating": 92, "environmental_impact_rating": 95}], "co2_emissions_potential": 0.3, "energy_rating_potential": 92, "lighting_cost_potential": {"value": 43, "currency": "GBP"}, "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 39, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 76, "environmental_impact_rating": 93}, {"sequence": 2, "typical_saving": {"value": 124, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 79, "environmental_impact_rating": 81}, {"sequence": 3, "typical_saving": {"value": 46, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 74, "environmental_impact_rating": 75}], "hot_water_cost_potential": {"value": 68, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3109, "space_heating_existing_dwelling": 3580}, "seller_commission_report": "Y", "energy_consumption_current": 227, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "1.10r06", "energy_consumption_potential": 26, "environmental_impact_current": 67, "fixed_lighting_outlets_count": 9, "current_energy_efficiency_band": "D", "environmental_impact_potential": 95, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 44, "low_energy_fixed_lighting_outlets_count": 7} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PE71NT/cert-8b40d6410b80.json b/tests/fixtures/epc_prediction/PE71NT/cert-8b40d6410b80.json new file mode 100644 index 00000000..9d327fc2 --- /dev/null +++ b/tests/fixtures/epc_prediction/PE71NT/cert-8b40d6410b80.json @@ -0,0 +1 @@ +{"uprn": 100090075257, "roofs": [{"description": {"value": "Pitched, 75 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": {"value": "Cavity wall, as built, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "No low energy lighting", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "postcode": "PE7 1NT", "hot_water": {"description": {"value": "From main system, no cylinder thermostat", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "post_town": "", "built_form": 3, "created_at": "2017-07-05 11:29:23.000000", "door_count": 1, "glazed_area": 1, "glazing_gap": "16+", "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2107, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 115, "central_heating_pump_age": 1, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 25}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.1", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "End-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-8ff6ee8ba9ff", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2017-07-05", "inspection_date": "2017-07-05", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 58, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 3, "pvc_window_frames": "true", "registration_date": "2017-07-05", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 275, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.37, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 29.14, "quantity": "square metres"}, "party_wall_length": {"value": 7.16, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 17.64, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.32, "quantity": "metres"}, "total_floor_area": {"value": 28.44, "quantity": "square metres"}, "party_wall_length": {"value": 7.16, "quantity": "metres"}, "heat_loss_perimeter": {"value": 15.76, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "H", "party_wall_construction": 2, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "75mm", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 0, "solar_water_heating": "N", "habitable_room_count": 3, "heating_cost_current": {"value": 541, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.9, "energy_rating_average": 60, "energy_rating_current": 54, "lighting_cost_current": {"value": 83, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, TRVs and bypass", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 376, "currency": "GBP"}, "hot_water_cost_current": {"value": 240, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 28, "currency": "GBP"}, "indicative_cost": "\u00a3100 - \u00a3350", "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 56, "environmental_impact_rating": 50}, {"sequence": 2, "typical_saving": {"value": 46, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 58, "environmental_impact_rating": 53}, {"sequence": 3, "typical_saving": {"value": 16, "currency": "GBP"}, "indicative_cost": "\u00a315 - \u00a330", "improvement_type": "C", "improvement_details": {"improvement_number": 3}, "improvement_category": 5, "energy_performance_rating": 59, "environmental_impact_rating": 54}, {"sequence": 4, "typical_saving": {"value": 35, "currency": "GBP"}, "indicative_cost": "\u00a340", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 60, "environmental_impact_rating": 55}, {"sequence": 5, "typical_saving": {"value": 28, "currency": "GBP"}, "indicative_cost": "\u00a3200 - \u00a3400", "improvement_type": "F", "improvement_details": {"improvement_number": 4}, "improvement_category": 5, "energy_performance_rating": 62, "environmental_impact_rating": 57}, {"sequence": 6, "typical_saving": {"value": 49, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 14}, "improvement_category": 5, "energy_performance_rating": 64, "environmental_impact_rating": 61}, {"sequence": 7, "typical_saving": {"value": 143, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 71}, {"sequence": 8, "typical_saving": {"value": 39, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 74}, {"sequence": 9, "typical_saving": {"value": 288, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a38,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 85}], "co2_emissions_potential": 1.0, "energy_rating_potential": 86, "lighting_cost_potential": {"value": 41, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 128, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 71, "environmental_impact_rating": 95}, {"sequence": 2, "typical_saving": {"value": 67, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 70, "environmental_impact_rating": 73}, {"sequence": 3, "typical_saving": {"value": 121, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 70, "environmental_impact_rating": 66}], "hot_water_cost_potential": {"value": 65, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3268, "impact_of_loft_insulation": -422, "space_heating_existing_dwelling": 6259}, "energy_consumption_current": 380, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "9.0.0", "energy_consumption_potential": 92, "environmental_impact_current": 49, "fixed_lighting_outlets_count": 8, "current_energy_efficiency_band": "E", "environmental_impact_potential": 85, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 67, "low_energy_fixed_lighting_outlets_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PE71NT/cert-8c68ea944ce9.json b/tests/fixtures/epc_prediction/PE71NT/cert-8c68ea944ce9.json new file mode 100644 index 00000000..d8c6f694 --- /dev/null +++ b/tests/fixtures/epc_prediction/PE71NT/cert-8c68ea944ce9.json @@ -0,0 +1 @@ +{"uprn": 100090075269, "roofs": [{"description": {"value": "Pitched, 100 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": {"value": "Cavity wall, as built, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Solid, limited insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in 38% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "postcode": "PE7 1NT", "hot_water": {"description": {"value": "From main system, no cylinder thermostat", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "post_town": "", "built_form": 4, "created_at": "2016-07-21 10:01:45.000000", "door_count": 1, "glazed_area": 1, "glazing_gap": 6, "region_code": 1, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "N", "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2107, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 101, "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 38}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Mid-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-e4a4e353214e", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2016-07-21", "inspection_date": "2016-07-21", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 57, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 3, "pvc_window_frames": "true", "registration_date": "2016-07-21", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 280, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.37, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 28.88, "quantity": "square metres"}, "party_wall_length": {"value": 9.5, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 12.6, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.37, "quantity": "metres"}, "total_floor_area": {"value": 27.88, "quantity": "square metres"}, "party_wall_length": {"value": 10.5, "quantity": "metres"}, "heat_loss_perimeter": {"value": 11.6, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "I", "party_wall_construction": 2, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "100mm", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 38, "solar_water_heating": "N", "habitable_room_count": 3, "heating_cost_current": {"value": 435, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.9, "energy_rating_average": 60, "energy_rating_current": 63, "lighting_cost_current": {"value": 70, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, TRVs and bypass", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 388, "currency": "GBP"}, "hot_water_cost_current": {"value": 208, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 22, "currency": "GBP"}, "indicative_cost": "\u00a325", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 64, "environmental_impact_rating": 61}, {"sequence": 2, "typical_saving": {"value": 26, "currency": "GBP"}, "indicative_cost": "\u00a3200 - \u00a3400", "improvement_type": "F", "improvement_details": {"improvement_number": 4}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 62}, {"sequence": 3, "typical_saving": {"value": 40, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 14}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 65}, {"sequence": 4, "typical_saving": {"value": 86, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 71}, {"sequence": 5, "typical_saving": {"value": 41, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 74}, {"sequence": 6, "typical_saving": {"value": 281, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a38,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 86}], "co2_emissions_potential": 0.9, "energy_rating_potential": 86, "lighting_cost_potential": {"value": 43, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 98, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 71, "environmental_impact_rating": 95}, {"sequence": 2, "typical_saving": {"value": 51, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 70, "environmental_impact_rating": 73}, {"sequence": 3, "typical_saving": {"value": 48, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 70, "environmental_impact_rating": 66}], "hot_water_cost_potential": {"value": 67, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3069, "impact_of_loft_insulation": -315, "space_heating_existing_dwelling": 5054}, "energy_consumption_current": 294, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.0.0.0", "energy_consumption_potential": 90, "environmental_impact_current": 60, "fixed_lighting_outlets_count": 8, "current_energy_efficiency_band": "D", "environmental_impact_potential": 86, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 52, "low_energy_fixed_lighting_outlets_count": 3} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PE71NT/cert-91fd87067727.json b/tests/fixtures/epc_prediction/PE71NT/cert-91fd87067727.json new file mode 100644 index 00000000..c5f3da8f --- /dev/null +++ b/tests/fixtures/epc_prediction/PE71NT/cert-91fd87067727.json @@ -0,0 +1 @@ +{"uprn": 100090075271, "roofs": [{"description": {"value": "Pitched, 270 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": {"value": "Cavity wall, as built, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Solid, limited insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in 33% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "postcode": "PE7 1NT", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2015-02-12 18:02:21.000000", "door_count": 1, "glazed_area": 1, "glazing_gap": "16+", "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2107, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 1, "main_heating_data_source": 1, "main_heating_index_number": 16006}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Mid-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-877703f73993", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2015-02-12", "inspection_date": "2015-02-12", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 56, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 3, "pvc_window_frames": "true", "registration_date": "2015-02-12", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 270, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.39, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 27.78, "quantity": "square metres"}, "party_wall_length": {"value": 14.32, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 7.76, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.3, "quantity": "metres"}, "total_floor_area": {"value": 27.78, "quantity": "square metres"}, "party_wall_length": {"value": 14.32, "quantity": "metres"}, "heat_loss_perimeter": {"value": 7.76, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "I", "party_wall_construction": 3, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "270mm", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 33, "solar_water_heating": "N", "habitable_room_count": 3, "heating_cost_current": {"value": 312, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 1.9, "energy_rating_average": 60, "energy_rating_current": 73, "lighting_cost_current": {"value": 68, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, TRVs and bypass", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 1, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 302, "currency": "GBP"}, "hot_water_cost_current": {"value": 123, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 23, "currency": "GBP"}, "indicative_cost": "\u00a320", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 75}, {"sequence": 2, "typical_saving": {"value": 22, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 14}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 77}, {"sequence": 3, "typical_saving": {"value": 41, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 80}, {"sequence": 4, "typical_saving": {"value": 271, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a38,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 90, "environmental_impact_rating": 91}], "co2_emissions_potential": 0.5, "energy_rating_potential": 90, "lighting_cost_potential": {"value": 41, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "hot_water_cost_potential": {"value": 73, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2349, "space_heating_existing_dwelling": 3556}, "energy_consumption_current": 192, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.0.0.0", "energy_consumption_potential": 49, "environmental_impact_current": 74, "fixed_lighting_outlets_count": 6, "current_energy_efficiency_band": "C", "environmental_impact_potential": 91, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 34, "low_energy_fixed_lighting_outlets_count": 2} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PE71NT/cert-927d8fb46c85.json b/tests/fixtures/epc_prediction/PE71NT/cert-927d8fb46c85.json new file mode 100644 index 00000000..296eac5a --- /dev/null +++ b/tests/fixtures/epc_prediction/PE71NT/cert-927d8fb46c85.json @@ -0,0 +1 @@ +{"uprn": 100090075242, "roofs": [{"description": "Pitched, 75 mm loft insulation", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "windows": [{"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "lighting": {"description": "Low energy lighting in 25% of fixed outlets", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "postcode": "PE7 1NT", "hot_water": {"description": "From main system", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 3, "created_at": "2014-03-21 14:27:04.000000", "door_count": 1, "glazed_area": 1, "region_code": 2, "report_type": 2, "sap_heating": {"wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2107, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 111, "main_heating_data_source": 2}], "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 25}, "sap_version": 9.91, "schema_type": "SAP-Schema-16.3", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "End-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-ec175794d321", "address_line_2": "", "schema_version": "LIG-16.1", "assessment_type": "RdSAP", "completion_date": "2014-03-21", "inspection_date": "2014-03-18", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 56, "transaction_type": 8, "conservatory_type": 2, "heated_room_count": 3, "registration_date": "2014-03-21", "restricted_access": 0, "sap_energy_source": {"main_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"percent_roof_area": 0}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 270, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.38, "floor_insulation": 1, "total_floor_area": 28.88, "floor_construction": 1, "heat_loss_perimeter": 17.31}, {"floor": 1, "room_height": 2.31, "total_floor_area": 27.59, "heat_loss_perimeter": 14.87}], "wall_insulation_type": 4, "construction_age_band": "H", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "75mm"}], "low_energy_lighting": 25, "solar_water_heating": "N", "bedf_revision_number": 354, "habitable_room_count": 3, "heating_cost_current": {"value": 506, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.0, "energy_rating_average": 60, "energy_rating_current": 60, "lighting_cost_current": {"value": 63, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, TRVs and bypass", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 1, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 353, "currency": "GBP"}, "hot_water_cost_current": {"value": 164, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 25, "currency": "GBP"}, "indicative_cost": "\u00a3100 - \u00a3350", "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 61, "environmental_impact_rating": 60}, {"sequence": 2, "typical_saving": {"value": 47, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W", "improvement_details": {"improvement_number": 47}, "improvement_category": 5, "energy_performance_rating": 64, "environmental_impact_rating": 64}, {"sequence": 3, "typical_saving": {"value": 11, "currency": "GBP"}, "indicative_cost": "\u00a315 - \u00a330", "improvement_type": "C", "improvement_details": {"improvement_number": 3}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 65}, {"sequence": 4, "typical_saving": {"value": 22, "currency": "GBP"}, "indicative_cost": "\u00a330", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 66}, {"sequence": 5, "typical_saving": {"value": 39, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 14}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 68}, {"sequence": 6, "typical_saving": {"value": 99, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 75}, {"sequence": 7, "typical_saving": {"value": 34, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 78}, {"sequence": 8, "typical_saving": {"value": 253, "currency": "GBP"}, "indicative_cost": "\u00a39,000 - \u00a314,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 88, "environmental_impact_rating": 90}, {"sequence": 9, "typical_saving": {"value": 20, "currency": "GBP"}, "indicative_cost": "\u00a31,500 - \u00a34,000", "improvement_type": "V", "improvement_details": {"improvement_number": 44}, "improvement_category": 5, "energy_performance_rating": 89, "environmental_impact_rating": 91}], "co2_emissions_potential": 0.6, "energy_rating_potential": 89, "lighting_cost_potential": {"value": 36, "currency": "GBP"}, "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 23, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 72, "environmental_impact_rating": 93}, {"sequence": 2, "typical_saving": {"value": 103, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 74, "environmental_impact_rating": 76}, {"sequence": 3, "typical_saving": {"value": 82, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 72, "environmental_impact_rating": 72}], "hot_water_cost_potential": {"value": 67, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2513, "impact_of_loft_insulation": -426, "space_heating_existing_dwelling": 6004}, "seller_commission_report": "Y", "energy_consumption_current": 281, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": 8.3, "energy_consumption_potential": 52, "environmental_impact_current": 59, "fixed_lighting_outlets_count": 8, "current_energy_efficiency_band": "D", "environmental_impact_potential": 91, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 54, "low_energy_fixed_lighting_outlets_count": 2} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PE71NT/cert-930bb8ec03a9.json b/tests/fixtures/epc_prediction/PE71NT/cert-930bb8ec03a9.json new file mode 100644 index 00000000..cfa3f42c --- /dev/null +++ b/tests/fixtures/epc_prediction/PE71NT/cert-930bb8ec03a9.json @@ -0,0 +1 @@ +{"uprn": 100090075273, "roofs": [{"description": "Pitched, 150 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Solid, limited insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "windows": [{"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "lighting": {"description": "Low energy lighting in 57% of fixed outlets", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "PE7 1NT", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2014-10-20 20:40:46.000000", "door_count": 1, "glazed_area": 1, "region_code": 2, "report_type": 2, "sap_heating": {"wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "boiler_index_number": 16453, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "main_heating_data_source": 1}], "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 9.91, "schema_type": "SAP-Schema-16.3", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Mid-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-85c2604a29e0", "address_line_2": "", "schema_version": "LIG-16.1", "assessment_type": "RdSAP", "completion_date": "2014-10-20", "inspection_date": "2014-10-20", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 55, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 3, "registration_date": "2014-10-20", "restricted_access": 0, "sap_energy_source": {"main_gas": "Y", "meter_type": 3, "photovoltaic_supply": {"percent_roof_area": 0}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 280, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.37, "floor_insulation": 1, "total_floor_area": 27.39, "floor_construction": 1, "heat_loss_perimeter": 7.64}, {"floor": 1, "room_height": 2.3, "total_floor_area": 27.39, "heat_loss_perimeter": 7.64}], "wall_insulation_type": 4, "construction_age_band": "I", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "150mm"}], "low_energy_lighting": 57, "solar_water_heating": "N", "bedf_revision_number": 366, "habitable_room_count": 3, "heating_cost_current": {"value": 286, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 1.5, "energy_rating_average": 60, "energy_rating_current": 76, "lighting_cost_current": {"value": 56, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 1, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 290, "currency": "GBP"}, "hot_water_cost_current": {"value": 109, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 14.61, "currency": "GBP"}, "indicative_cost": "\u00a315", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 79}, {"sequence": 2, "typical_saving": {"value": 35.99, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 78, "environmental_impact_rating": 82}, {"sequence": 3, "typical_saving": {"value": 260.66, "currency": "GBP"}, "indicative_cost": "\u00a39,000 - \u00a314,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 91, "environmental_impact_rating": 94}, {"sequence": 4, "typical_saving": {"value": 20.7, "currency": "GBP"}, "indicative_cost": "\u00a31,500 - \u00a34,000", "improvement_type": "V", "improvement_details": {"improvement_number": 44}, "improvement_category": 5, "energy_performance_rating": 92, "environmental_impact_rating": 95}], "co2_emissions_potential": 0.3, "energy_rating_potential": 92, "lighting_cost_potential": {"value": 39, "currency": "GBP"}, "hot_water_cost_potential": {"value": 72, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2276, "impact_of_loft_insulation": -177, "space_heating_existing_dwelling": 3301}, "seller_commission_report": "Y", "energy_consumption_current": 148, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "1.4.1.0", "energy_consumption_potential": 22, "environmental_impact_current": 79, "fixed_lighting_outlets_count": 7, "current_energy_efficiency_band": "C", "environmental_impact_potential": 95, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 28, "low_energy_fixed_lighting_outlets_count": 4} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PE71NT/cert-97d0dabaac20.json b/tests/fixtures/epc_prediction/PE71NT/cert-97d0dabaac20.json new file mode 100644 index 00000000..9d807578 --- /dev/null +++ b/tests/fixtures/epc_prediction/PE71NT/cert-97d0dabaac20.json @@ -0,0 +1 @@ +{"uprn": 100090075244, "roofs": [{"description": {"value": "Pitched, 100 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": {"value": "Cavity wall, as built, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in all fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PE7 1NT", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2019-09-21 12:12:55.000000", "door_count": 1, "glazed_area": 1, "glazing_gap": 12, "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17823}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 38}, "sap_version": 9.93, "schema_type": "RdSAP-Schema-18.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Mid-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-d421b037e3cc", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2019-09-21", "inspection_date": "2019-09-21", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 57, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 3, "pvc_window_frames": "true", "registration_date": "2019-09-21", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 270, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.3, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 29.08, "quantity": "square metres"}, "party_wall_length": {"value": 14.4, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 9.8, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.3, "quantity": "metres"}, "total_floor_area": {"value": 28.08, "quantity": "square metres"}, "party_wall_length": {"value": 14.4, "quantity": "metres"}, "heat_loss_perimeter": {"value": 7.8, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "G", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "100mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 3, "heating_cost_current": {"value": 330, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.0, "energy_rating_average": 60, "energy_rating_current": 73, "lighting_cost_current": {"value": 46, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 333, "currency": "GBP"}, "hot_water_cost_current": {"value": 113, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 39, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 76}, {"sequence": 2, "typical_saving": {"value": 322, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 88, "environmental_impact_rating": 87}], "co2_emissions_potential": 0.8, "energy_rating_potential": 88, "lighting_cost_potential": {"value": 46, "currency": "GBP"}, "schema_version_original": "LIG-18.0", "hot_water_cost_potential": {"value": 71, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2439, "impact_of_loft_insulation": -318, "space_heating_existing_dwelling": 4903}, "energy_consumption_current": 200, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.1.0.0", "energy_consumption_potential": 78, "environmental_impact_current": 73, "fixed_lighting_outlets_count": 7, "windows_transmission_details": {"u_value": 2.8, "data_source": 2, "solar_transmittance": 0.76}, "current_energy_efficiency_band": "C", "environmental_impact_potential": 87, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 35, "low_energy_fixed_lighting_outlets_count": 7} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PE71NT/cert-99a1e6622b01.json b/tests/fixtures/epc_prediction/PE71NT/cert-99a1e6622b01.json new file mode 100644 index 00000000..f227d097 --- /dev/null +++ b/tests/fixtures/epc_prediction/PE71NT/cert-99a1e6622b01.json @@ -0,0 +1 @@ +{"uprn": 100090075255, "roofs": [{"description": "Pitched, 270 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Low energy lighting in 63% of fixed outlets", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "PE7 1NT", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 3, "created_at": "2021-04-07 16:51:02.165197", "door_count": 1, "glazed_area": 1, "glazing_gap": "16+", "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2107, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 10163}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 25}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "End-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-57521446c7ea", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2021-04-07", "inspection_date": "2021-04-07", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 57, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 3, "pvc_window_frames": "true", "registration_date": "2021-04-07", "sap_energy_source": {"mains_gas": "Y", "meter_type": 1, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 260, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.38, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 29.34, "quantity": "square metres"}, "party_wall_length": {"value": 7.22, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 17.42, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.32, "quantity": "metres"}, "total_floor_area": {"value": 28.01, "quantity": "square metres"}, "party_wall_length": {"value": 7.22, "quantity": "metres"}, "heat_loss_perimeter": {"value": 14.98, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "H", "party_wall_construction": 2, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "270mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 63, "solar_water_heating": "N", "habitable_room_count": 3, "heating_cost_current": {"value": 425, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.6, "energy_rating_average": 60, "energy_rating_current": 66, "lighting_cost_current": {"value": 76, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, TRVs and bypass", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 355, "currency": "GBP"}, "hot_water_cost_current": {"value": 131, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 22, "currency": "GBP"}, "indicative_cost": "\u00a3300 - \u00a3600", "improvement_type": "B4", "improvement_details": {"improvement_number": 63}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 66}, {"sequence": 2, "typical_saving": {"value": 34, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 68}, {"sequence": 3, "typical_saving": {"value": 19, "currency": "GBP"}, "indicative_cost": "\u00a315", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 69}, {"sequence": 4, "typical_saving": {"value": 29, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 14}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 71}, {"sequence": 5, "typical_saving": {"value": 44, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 74}, {"sequence": 6, "typical_saving": {"value": 365, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 87, "environmental_impact_rating": 86}], "co2_emissions_potential": 0.9, "energy_rating_potential": 87, "lighting_cost_potential": {"value": 55, "currency": "GBP"}, "schema_version_original": "20.0.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 42, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 69, "environmental_impact_rating": 69}}], "hot_water_cost_potential": {"value": 74, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2587, "space_heating_existing_dwelling": 6124}, "energy_consumption_current": 261, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.07r0002", "energy_consumption_potential": 87, "environmental_impact_current": 64, "fixed_lighting_outlets_count": 8, "current_energy_efficiency_band": "D", "environmental_impact_potential": 86, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 46, "low_energy_fixed_lighting_outlets_count": 5} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PE71NT/cert-a84d17d26bad.json b/tests/fixtures/epc_prediction/PE71NT/cert-a84d17d26bad.json new file mode 100644 index 00000000..758a0c7b --- /dev/null +++ b/tests/fixtures/epc_prediction/PE71NT/cert-a84d17d26bad.json @@ -0,0 +1 @@ +{"uprn": 100090075289, "roofs": [{"description": "Pitched, 150 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Low energy lighting in 90% of fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PE7 1NT", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2023-08-23 14:24:25", "door_count": 1, "glazed_area": 1, "glazing_gap": 12, "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 15017}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 38}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-c864570211c6", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2023-08-23", "inspection_date": "2023-08-23", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 66, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2023-08-23", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 260, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.38, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 33.04, "quantity": "square metres"}, "party_wall_length": {"value": 6.77, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 17.67, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.3, "quantity": "metres"}, "total_floor_area": {"value": 33.04, "quantity": "square metres"}, "party_wall_length": {"value": 6.77, "quantity": "metres"}, "heat_loss_perimeter": {"value": 17.67, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "H", "party_wall_construction": 2, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "150mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 90, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 958, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.6, "energy_rating_average": 60, "energy_rating_current": 70, "lighting_cost_current": {"value": 121, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 883, "currency": "GBP"}, "hot_water_cost_current": {"value": 307, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 81, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 70}, {"sequence": 2, "typical_saving": {"value": 111, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 73}, {"sequence": 3, "typical_saving": {"value": 673, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 85, "environmental_impact_rating": 83}], "co2_emissions_potential": 1.2, "energy_rating_potential": 85, "lighting_cost_potential": {"value": 121, "currency": "GBP"}, "schema_version_original": "20.0.0", "hot_water_cost_potential": {"value": 189, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2536, "impact_of_loft_insulation": -198, "space_heating_existing_dwelling": 6946}, "energy_consumption_current": 222, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.12r0003", "energy_consumption_potential": 101, "environmental_impact_current": 68, "fixed_lighting_outlets_count": 10, "current_energy_efficiency_band": "C", "environmental_impact_potential": 83, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 39, "low_energy_fixed_lighting_outlets_count": 9} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PE71NT/cert-b45627ecc223.json b/tests/fixtures/epc_prediction/PE71NT/cert-b45627ecc223.json new file mode 100644 index 00000000..3a5f9d2d --- /dev/null +++ b/tests/fixtures/epc_prediction/PE71NT/cert-b45627ecc223.json @@ -0,0 +1 @@ +{"uprn": 100090075287, "roofs": [{"description": {"value": "Pitched, 100 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": {"value": "Cavity wall, as built, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in 88% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PE7 1NT", "hot_water": {"description": {"value": "From main system, no cylinder thermostat", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 2, "created_at": "2021-09-20 08:11:29.323567", "door_count": 1, "glazed_area": 1, "glazing_gap": 12, "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 1, "fan_flue_present": "N", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2107, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 114, "mcs_installed_heat_pump": "false", "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 38}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Semi-detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-5f86f641a468", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2021-09-20", "inspection_date": "2021-09-20", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 66, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2021-09-20", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 285, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.39, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 32.77, "quantity": "square metres"}, "party_wall_length": {"value": 6.87, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 16.41, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.38, "quantity": "metres"}, "total_floor_area": {"value": 32.77, "quantity": "square metres"}, "party_wall_length": {"value": 6.87, "quantity": "metres"}, "heat_loss_perimeter": {"value": 16.41, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "H", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "100mm", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 88, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 428, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.9, "energy_rating_average": 60, "energy_rating_current": 66, "lighting_cost_current": {"value": 64, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, TRVs and bypass", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 414, "currency": "GBP"}, "hot_water_cost_current": {"value": 160, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 30, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 65}, {"sequence": 2, "typical_saving": {"value": 64, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 70}, {"sequence": 3, "typical_saving": {"value": 350, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 83, "environmental_impact_rating": 81}], "co2_emissions_potential": 1.4, "energy_rating_potential": 83, "lighting_cost_potential": {"value": 64, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "hot_water_cost_potential": {"value": 80, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3166, "impact_of_loft_insulation": -340, "space_heating_existing_dwelling": 6417}, "energy_consumption_current": 254, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "v94.0.1.1", "energy_consumption_potential": 119, "environmental_impact_current": 63, "fixed_lighting_outlets_count": 8, "current_energy_efficiency_band": "D", "environmental_impact_potential": 81, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 45, "low_energy_fixed_lighting_outlets_count": 7} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PE71NT/cert-b7c9160cefd9.json b/tests/fixtures/epc_prediction/PE71NT/cert-b7c9160cefd9.json new file mode 100644 index 00000000..78463e4e --- /dev/null +++ b/tests/fixtures/epc_prediction/PE71NT/cert-b7c9160cefd9.json @@ -0,0 +1 @@ +{"uprn": 100090075295, "roofs": [{"description": "Pitched, 200 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PE7 1NT", "hot_water": {"description": "From main system", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 2, "created_at": "2016-05-26 17:06:50", "door_count": 2, "glazed_area": 1, "glazing_gap": "16+", "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2107, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 111, "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 38}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-d62804cc97b8", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2016-05-26", "inspection_date": "2016-05-25", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 65, "transaction_type": 5, "conservatory_type": 2, "heated_room_count": 3, "pvc_window_frames": "true", "registration_date": "2016-05-26", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 2, "percent_roof_area": 35}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lzc_energy_sources": [11], "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 280, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.36, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 32.33, "quantity": "square metres"}, "party_wall_length": {"value": 6.75, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 16.23, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.34, "quantity": "metres"}, "total_floor_area": {"value": 32.33, "quantity": "square metres"}, "party_wall_length": {"value": 6.75, "quantity": "metres"}, "heat_loss_perimeter": {"value": 16.23, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "H", "party_wall_construction": 2, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "200mm", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 3, "heating_cost_current": {"value": 588, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.9, "energy_rating_average": 60, "energy_rating_current": 69, "lighting_cost_current": {"value": 45, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, TRVs and bypass", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 1, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 424, "currency": "GBP"}, "hot_water_cost_current": {"value": 184, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 46, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 66}, {"sequence": 2, "typical_saving": {"value": 50, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 14}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 69}, {"sequence": 3, "typical_saving": {"value": 140, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 80, "environmental_impact_rating": 78}, {"sequence": 4, "typical_saving": {"value": 43, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 81, "environmental_impact_rating": 80}], "co2_emissions_potential": 1.5, "energy_rating_potential": 81, "lighting_cost_potential": {"value": 45, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 142, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 79, "environmental_impact_rating": 102}, {"sequence": 2, "typical_saving": {"value": 93, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 78, "environmental_impact_rating": 80}, {"sequence": 3, "typical_saving": {"value": 116, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 79, "environmental_impact_rating": 74}], "hot_water_cost_potential": {"value": 70, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2522, "space_heating_existing_dwelling": 6853}, "energy_consumption_current": 248, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.08r02", "energy_consumption_potential": 126, "environmental_impact_current": 63, "fixed_lighting_outlets_count": 8, "current_energy_efficiency_band": "C", "environmental_impact_potential": 80, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 44, "low_energy_fixed_lighting_outlets_count": 8} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PE71NT/cert-c86e5701dc90.json b/tests/fixtures/epc_prediction/PE71NT/cert-c86e5701dc90.json new file mode 100644 index 00000000..0add941e --- /dev/null +++ b/tests/fixtures/epc_prediction/PE71NT/cert-c86e5701dc90.json @@ -0,0 +1 @@ +{"uprn": 100090075253, "roofs": [{"description": "Pitched, 100 mm loft insulation", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Low energy lighting in 75% of fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PE7 1NT", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2022-01-18 14:46:29.015312", "door_count": 1, "glazed_area": 1, "glazing_gap": "16+", "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 18514}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Mid-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-eaf3abb29e4e", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2022-01-18", "inspection_date": "2022-01-18", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 57, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 3, "pvc_window_frames": "true", "registration_date": "2022-01-18", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 270, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.37, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 27.94, "quantity": "square metres"}, "party_wall_length": {"value": 14.44, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 6.65, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.31, "quantity": "metres"}, "total_floor_area": {"value": 27.94, "quantity": "square metres"}, "party_wall_length": {"value": 14.44, "quantity": "metres"}, "heat_loss_perimeter": {"value": 7.74, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "H", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "100mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 270, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.37, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 1.33, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 3.53, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "H", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 75, "solar_water_heating": "N", "habitable_room_count": 3, "heating_cost_current": {"value": 305, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 1.7, "energy_rating_average": 60, "energy_rating_current": 75, "lighting_cost_current": {"value": 64, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 305, "currency": "GBP"}, "hot_water_cost_current": {"value": 65, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 22, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 79}, {"sequence": 2, "typical_saving": {"value": 356, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 90, "environmental_impact_rating": 91}], "co2_emissions_potential": 0.6, "energy_rating_potential": 90, "lighting_cost_potential": {"value": 64, "currency": "GBP"}, "schema_version_original": "20.0.0", "hot_water_cost_potential": {"value": 42, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1582, "impact_of_loft_insulation": -329, "space_heating_existing_dwelling": 4411}, "energy_consumption_current": 169, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.08r0002", "energy_consumption_potential": 54, "environmental_impact_current": 77, "fixed_lighting_outlets_count": 8, "current_energy_efficiency_band": "C", "environmental_impact_potential": 91, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 30, "low_energy_fixed_lighting_outlets_count": 6} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PE71NT/cert-d2364db0dfd0.json b/tests/fixtures/epc_prediction/PE71NT/cert-d2364db0dfd0.json new file mode 100644 index 00000000..17849a46 --- /dev/null +++ b/tests/fixtures/epc_prediction/PE71NT/cert-d2364db0dfd0.json @@ -0,0 +1 @@ +{"uprn": 100090075283, "roofs": [{"description": "Pitched, 75 mm loft insulation", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PE7 1NT", "hot_water": {"description": "From main system, no cylinder thermostat", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 4, "created_at": "2019-07-19 15:36:07.000000", "door_count": 2, "glazed_area": 1, "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2104, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 101, "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 25}, "sap_version": 9.93, "schema_type": "RdSAP-Schema-18.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Mid-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-a958c367372f", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2019-07-19", "inspection_date": "2019-07-19", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 57, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 3, "pvc_window_frames": "false", "registration_date": "2019-07-19", "sap_energy_source": {"mains_gas": "Y", "meter_type": 1, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 265, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.37, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 28.91, "quantity": "square metres"}, "party_wall_length": {"value": 14.32, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 10.14, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.32, "quantity": "metres"}, "total_floor_area": {"value": 27.71, "quantity": "square metres"}, "party_wall_length": {"value": 14.32, "quantity": "metres"}, "heat_loss_perimeter": {"value": 7.74, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "H", "party_wall_construction": 2, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "75mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 3, "heating_cost_current": {"value": 481, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.3, "energy_rating_average": 60, "energy_rating_current": 60, "lighting_cost_current": {"value": 50, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and room thermostat", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 1, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 323, "currency": "GBP"}, "hot_water_cost_current": {"value": 200, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 25, "currency": "GBP"}, "indicative_cost": 350, "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 61, "environmental_impact_rating": 57}, {"sequence": 2, "typical_saving": {"value": 56, "currency": "GBP"}, "indicative_cost": 600, "improvement_type": "B4", "improvement_details": {"improvement_number": 63}, "improvement_category": 5, "energy_performance_rating": 64, "environmental_impact_rating": 61}, {"sequence": 3, "typical_saving": {"value": 24, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 63}, {"sequence": 4, "typical_saving": {"value": 13, "currency": "GBP"}, "indicative_cost": 30, "improvement_type": "C", "improvement_details": {"improvement_number": 3}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 64}, {"sequence": 5, "typical_saving": {"value": 52, "currency": "GBP"}, "indicative_cost": 400, "improvement_type": "F", "improvement_details": {"improvement_number": 4}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 68}, {"sequence": 6, "typical_saving": {"value": 88, "currency": "GBP"}, "indicative_cost": "3,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 74}, {"sequence": 7, "typical_saving": {"value": 35, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 77}, {"sequence": 8, "typical_saving": {"value": 339, "currency": "GBP"}, "indicative_cost": "5,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 89, "environmental_impact_rating": 89}], "co2_emissions_potential": 0.7, "energy_rating_potential": 89, "lighting_cost_potential": {"value": 50, "currency": "GBP"}, "schema_version_original": "LIG-18.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 23, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 65, "environmental_impact_rating": 63}, {"sequence": 2, "typical_saving": {"value": 77, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 74, "environmental_impact_rating": 95}, {"sequence": 3, "typical_saving": {"value": 77, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 72, "environmental_impact_rating": 69}], "hot_water_cost_potential": {"value": 64, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3257, "impact_of_loft_insulation": -445, "space_heating_existing_dwelling": 6328}, "energy_consumption_current": 330, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "3.10r02", "energy_consumption_potential": 67, "environmental_impact_current": 55, "fixed_lighting_outlets_count": 8, "current_energy_efficiency_band": "D", "environmental_impact_potential": 89, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 58, "low_energy_fixed_lighting_outlets_count": 8} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PL36BL/cert-0073289bd539.json b/tests/fixtures/epc_prediction/PL36BL/cert-0073289bd539.json new file mode 100644 index 00000000..cff016c5 --- /dev/null +++ b/tests/fixtures/epc_prediction/PL36BL/cert-0073289bd539.json @@ -0,0 +1 @@ +{"uprn": 100040471327, "roofs": [{"description": "Pitched, 200 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": "Flat, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": "Granite or whinstone, with internal insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Suspended, insulated", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "addendum": {"addendum_numbers": [8]}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PL3 6BL", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2023-05-18 15:31:52", "door_count": 2, "glazed_area": 1, "region_code": 15, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 9, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2110, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 18514}], "immersion_heating_type": "NA", "secondary_heating_type": 633, "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Mid-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-ffc9af33b304", "assessment_type": "RdSAP", "completion_date": "2023-05-18", "inspection_date": "2023-05-18", "extensions_count": 2, "measurement_type": 1, "total_floor_area": 95, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 5, "registration_date": "2023-05-18", "sap_energy_source": {"mains_gas": "Y", "meter_type": 3, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 2, "percent_roof_area": 38}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, dual fuel (mineral and wood)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lzc_energy_sources": [11], "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 360, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 1, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.78, "quantity": "metres"}, "floor_insulation": 2, "total_floor_area": {"value": 34.26, "quantity": "square metres"}, "party_wall_length": {"value": 7.82, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 12.8, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.51, "quantity": "metres"}, "total_floor_area": {"value": 33, "quantity": "square metres"}, "party_wall_length": {"value": 3.91, "quantity": "metres"}, "heat_loss_perimeter": {"value": 16.15, "quantity": "metres"}}], "wall_insulation_type": 3, "construction_age_band": "B", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "200mm", "wall_insulation_thickness": "100mm", "floor_insulation_thickness": "100mm"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 310, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 1, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.38, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 12.07, "quantity": "square metres"}, "party_wall_length": {"value": 3.03, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 4.04, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.52, "quantity": "metres"}, "total_floor_area": {"value": 12.07, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "heat_loss_perimeter": {"value": 10.7, "quantity": "metres"}}], "wall_insulation_type": 3, "construction_age_band": "B", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "100mm", "floor_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}, {"identifier": "Extension 2", "wall_dry_lined": "N", "wall_thickness": 310, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 1, "building_part_number": 3, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.38, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 3.95, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 6.41, "quantity": "metres"}}], "wall_insulation_type": 3, "construction_age_band": "B", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "100mm", "floor_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 1144, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 1.9, "energy_rating_average": 60, "energy_rating_current": 82, "lighting_cost_current": {"value": 146, "currency": "GBP"}, "main_heating_controls": [{"description": "Time and temperature zone control", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "multiple_glazing_type": 2, "open_fireplaces_count": 1, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 1014, "currency": "GBP"}, "hot_water_cost_current": {"value": 207, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 130, "currency": "GBP"}, "indicative_cost": "\u00a3850 - \u00a31,500", "improvement_type": "A2", "improvement_details": {"improvement_number": 45}, "improvement_category": 5, "energy_performance_rating": 84, "environmental_impact_rating": 81}, {"sequence": 2, "typical_saving": {"value": 78, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 85, "environmental_impact_rating": 83}], "co2_emissions_potential": 1.4, "energy_rating_potential": 85, "lighting_cost_potential": {"value": 146, "currency": "GBP"}, "schema_version_original": "20.0.0", "hot_water_cost_potential": {"value": 129, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1893, "space_heating_existing_dwelling": 8694}, "energy_consumption_current": 106, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.11r0005", "energy_consumption_potential": 78, "environmental_impact_current": 78, "fixed_lighting_outlets_count": 24, "current_energy_efficiency_band": "B", "environmental_impact_potential": 83, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 20, "low_energy_fixed_lighting_outlets_count": 24} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PL36BL/cert-0b44fb2b512e.json b/tests/fixtures/epc_prediction/PL36BL/cert-0b44fb2b512e.json new file mode 100644 index 00000000..55c22ef8 --- /dev/null +++ b/tests/fixtures/epc_prediction/PL36BL/cert-0b44fb2b512e.json @@ -0,0 +1 @@ +{"uprn": 100040471338, "roofs": [{"description": {"value": "Pitched, 300 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, {"description": {"value": "Pitched, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": {"value": "Solid brick, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": {"value": "Cavity wall, as built, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in all fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PL3 6BL", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2024-03-11 11:48:40", "door_count": 2, "glazed_area": 1, "glazing_gap": "16+", "region_code": 15, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 9, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "mcs_installed_heat_pump": "false", "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 16839}], "immersion_heating_type": "NA", "secondary_heating_type": 631, "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Mid-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-376b15e22ac6", "assessment_type": "RdSAP", "completion_date": "2024-03-11", "inspection_date": "2024-03-11", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 85, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2024-03-11", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Room heaters, dual fuel (mineral and wood)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 240, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.44, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 37.96, "quantity": "square metres"}, "party_wall_length": {"value": 15.56, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 7.21, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.42, "quantity": "metres"}, "total_floor_area": {"value": 37.96, "quantity": "square metres"}, "party_wall_length": {"value": 15.56, "quantity": "metres"}, "heat_loss_perimeter": {"value": 9.76, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "300mm", "wall_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 320, "floor_heat_loss": 7, "roof_construction": 8, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.38, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 9.18, "quantity": "square metres"}, "party_wall_length": {"value": 3.6, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 6.15, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "H", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 7, "wall_insulation_thickness": "NI", "sloping_ceiling_insulation_thickness": "AB"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 1082, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.2, "energy_rating_average": 60, "energy_rating_current": 67, "lighting_cost_current": {"value": 113, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 1, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 873, "currency": "GBP"}, "hot_water_cost_current": {"value": 163, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 144, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 68}, {"sequence": 2, "typical_saving": {"value": 65, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 69}, {"sequence": 3, "typical_saving": {"value": 59, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 71}, {"sequence": 4, "typical_saving": {"value": 602, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 83, "environmental_impact_rating": 81}], "co2_emissions_potential": 1.5, "energy_rating_potential": 83, "lighting_cost_potential": {"value": 113, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "hot_water_cost_potential": {"value": 104, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1907, "impact_of_solid_wall_insulation": -1360, "space_heating_existing_dwelling": 8711}, "energy_consumption_current": 207, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "v94.0.1.1", "energy_consumption_potential": 89, "environmental_impact_current": 63, "fixed_lighting_outlets_count": 19, "current_energy_efficiency_band": "D", "environmental_impact_potential": 81, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 38, "low_energy_fixed_lighting_outlets_count": 19} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PL36BL/cert-13ca8619948b.json b/tests/fixtures/epc_prediction/PL36BL/cert-13ca8619948b.json new file mode 100644 index 00000000..3941dae0 --- /dev/null +++ b/tests/fixtures/epc_prediction/PL36BL/cert-13ca8619948b.json @@ -0,0 +1 @@ +{"uprn": 100040471402, "roofs": [{"description": {"value": "Pitched, 200 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": {"value": "Pitched, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": {"value": "Solid brick, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Mostly double glazing", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in all fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PL3 6BL", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2020-09-18 10:55:09.000000", "door_count": 2, "glazed_area": 1, "glazing_gap": 12, "region_code": 15, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2107, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17038}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-19.0", "uprn_source": "Address Matched", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Mid-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-f3132efbeedb", "assessment_type": "RdSAP", "completion_date": "2020-09-18", "inspection_date": "2020-09-17", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 84, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2020-09-18", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "Y", "wall_thickness": 280, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 35.7, "quantity": "square metres"}, "party_wall_length": {"value": 15.3, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 5.4, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.4, "quantity": "metres"}, "total_floor_area": {"value": 35.1, "quantity": "square metres"}, "party_wall_length": {"value": 15.2, "quantity": "metres"}, "heat_loss_perimeter": {"value": 9.2, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "200mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension", "wall_dry_lined": "N", "wall_thickness": 210, "floor_heat_loss": 7, "roof_construction": 8, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 12.9, "quantity": "square metres"}, "party_wall_length": {"value": 3.2, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 7.8, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 7, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "sloping_ceiling_insulation_thickness": "AB"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 544, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.0, "energy_rating_average": 60, "energy_rating_current": 69, "lighting_cost_current": {"value": 67, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, TRVs and bypass", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 406, "currency": "GBP"}, "hot_water_cost_current": {"value": 82, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 88, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 57, "currency": "GBP"}, "indicative_cost": "\u00a3850 - \u00a31,500", "improvement_type": "A2", "improvement_details": {"improvement_number": 45}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 69}, {"sequence": 2, "typical_saving": {"value": 80, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 74}, {"sequence": 3, "typical_saving": {"value": 29, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 76}, {"sequence": 4, "typical_saving": {"value": 362, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 85}], "co2_emissions_potential": 1.1, "energy_rating_potential": 86, "lighting_cost_potential": {"value": 67, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "hot_water_cost_potential": {"value": 53, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1853, "impact_of_solid_wall_insulation": -1649, "space_heating_existing_dwelling": 8954}, "energy_consumption_current": 204, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 88, "calculation_software_version": "2.1.1.0", "energy_consumption_potential": 70, "environmental_impact_current": 65, "fixed_lighting_outlets_count": 9, "windows_transmission_details": {"u_value": 2.8, "data_source": 2, "solar_transmittance": 0.76}, "current_energy_efficiency_band": "C", "environmental_impact_potential": 85, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 36, "low_energy_fixed_lighting_outlets_count": 9} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PL36BL/cert-2cfdb30266e5.json b/tests/fixtures/epc_prediction/PL36BL/cert-2cfdb30266e5.json new file mode 100644 index 00000000..000f966c --- /dev/null +++ b/tests/fixtures/epc_prediction/PL36BL/cert-2cfdb30266e5.json @@ -0,0 +1 @@ +{"uprn": 100040471409, "roofs": [{"description": "Pitched, 300 mm loft insulation", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, {"description": "Flat, insulated (assumed)", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PL3 6BL", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2022-05-26 21:45:19.943312", "door_count": 2, "glazed_area": 1, "glazing_gap": "16+", "region_code": 15, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17985}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Mid-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-26ea8ffc3ac1", "assessment_type": "RdSAP", "completion_date": "2022-05-26", "inspection_date": "2022-05-26", "extensions_count": 2, "measurement_type": 1, "total_floor_area": 89, "transaction_type": 2, "conservatory_type": 1, "heated_room_count": 3, "pvc_window_frames": "true", "registration_date": "2022-05-26", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "Y", "wall_thickness": 290, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.77, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 36, "quantity": "square metres"}, "party_wall_length": {"value": 15, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 4.62, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.64, "quantity": "metres"}, "total_floor_area": {"value": 36, "quantity": "square metres"}, "party_wall_length": {"value": 15, "quantity": "metres"}, "heat_loss_perimeter": {"value": 7, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "300mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.27, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 7.54, "quantity": "square metres"}, "party_wall_length": {"value": 2.9, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 5.5, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.31, "quantity": "metres"}, "total_floor_area": {"value": 7.54, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "heat_loss_perimeter": {"value": 8.4, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "G", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}, {"identifier": "Extension 2", "wall_dry_lined": "Y", "wall_thickness": 290, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 3, "building_part_number": 3, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.77, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 1.45, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 3.25, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 3, "heating_cost_current": {"value": 441, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.7, "energy_rating_average": 60, "energy_rating_current": 73, "lighting_cost_current": {"value": 73, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 400, "currency": "GBP"}, "hot_water_cost_current": {"value": 87, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 41, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 73}, {"sequence": 2, "typical_saving": {"value": 26, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 75}, {"sequence": 3, "typical_saving": {"value": 376, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 84}], "co2_emissions_potential": 1.2, "energy_rating_potential": 86, "lighting_cost_potential": {"value": 73, "currency": "GBP"}, "schema_version_original": "20.0.0", "hot_water_cost_potential": {"value": 61, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2127, "impact_of_loft_insulation": -128, "impact_of_solid_wall_insulation": -1020, "space_heating_existing_dwelling": 7819}, "energy_consumption_current": 171, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.09r0002", "energy_consumption_potential": 76, "environmental_impact_current": 70, "fixed_lighting_outlets_count": 11, "current_energy_efficiency_band": "C", "environmental_impact_potential": 84, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 30, "low_energy_fixed_lighting_outlets_count": 11} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PL36BL/cert-39d5c1b47fad.json b/tests/fixtures/epc_prediction/PL36BL/cert-39d5c1b47fad.json new file mode 100644 index 00000000..e1f3aecd --- /dev/null +++ b/tests/fixtures/epc_prediction/PL36BL/cert-39d5c1b47fad.json @@ -0,0 +1 @@ +{"uprn": 100040471356, "roofs": [{"description": "Pitched, 75 mm loft insulation", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, {"description": "Pitched, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PL3 6BL", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2020-12-03 14:05:45.906167", "door_count": 2, "glazed_area": 1, "glazing_gap": "16+", "region_code": 15, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 10242}], "immersion_heating_type": "NA", "secondary_heating_type": 605, "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Mid-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-3064006261b3", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2020-12-03", "inspection_date": "2020-12-03", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 80, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 5, "pvc_window_frames": "true", "registration_date": "2020-12-03", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, mains gas", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.5, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 33.39, "quantity": "square metres"}, "party_wall_length": {"value": 13.2, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 8.7, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.5, "quantity": "metres"}, "total_floor_area": {"value": 31.68, "quantity": "square metres"}, "party_wall_length": {"value": 13.2, "quantity": "metres"}, "heat_loss_perimeter": {"value": 6.9, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 2, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "75mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.5, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 7.56, "quantity": "square metres"}, "party_wall_length": {"value": 2.8, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 5.5, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.5, "quantity": "metres"}, "total_floor_area": {"value": 7.56, "quantity": "square metres"}, "party_wall_length": {"value": 2.8, "quantity": "metres"}, "heat_loss_perimeter": {"value": 5.5, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 694, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.9, "energy_rating_average": 60, "energy_rating_current": 60, "lighting_cost_current": {"value": 65, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 2, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 559, "currency": "GBP"}, "hot_water_cost_current": {"value": 98, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 68, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 64, "environmental_impact_rating": 58}, {"sequence": 2, "typical_saving": {"value": 37, "currency": "GBP"}, "indicative_cost": "\u00a3300 - \u00a3600", "improvement_type": "B4", "improvement_details": {"improvement_number": 63}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 60}, {"sequence": 3, "typical_saving": {"value": 30, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 62}, {"sequence": 4, "typical_saving": {"value": 29, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 64}, {"sequence": 5, "typical_saving": {"value": 362, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 79, "environmental_impact_rating": 74}], "co2_emissions_potential": 2.0, "energy_rating_potential": 79, "lighting_cost_potential": {"value": 65, "currency": "GBP"}, "schema_version_original": "20.0.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 36, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 67, "environmental_impact_rating": 63}}], "hot_water_cost_potential": {"value": 69, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2206, "impact_of_loft_insulation": -954, "impact_of_cavity_insulation": -1404, "space_heating_existing_dwelling": 11580}, "energy_consumption_current": 278, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.06r0007", "energy_consumption_potential": 139, "environmental_impact_current": 54, "fixed_lighting_outlets_count": 9, "current_energy_efficiency_band": "D", "environmental_impact_potential": 74, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 49, "low_energy_fixed_lighting_outlets_count": 9} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PL36BL/cert-407fc878c72c.json b/tests/fixtures/epc_prediction/PL36BL/cert-407fc878c72c.json new file mode 100644 index 00000000..7a89f379 --- /dev/null +++ b/tests/fixtures/epc_prediction/PL36BL/cert-407fc878c72c.json @@ -0,0 +1 @@ +{"uprn": 10000796837, "roofs": [{"description": {"value": "Pitched, 12 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": {"value": "Cavity wall, as built, partial insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": {"value": "No low energy lighting", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "postcode": "PL3 6BL", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 4, "created_at": "2019-11-15 17:53:21.000000", "door_count": 2, "glazed_area": 1, "glazing_gap": 12, "region_code": 15, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "secondary_fuel_type": 29, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 118, "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "secondary_heating_type": 691, "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-19.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Mid-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-39ef3c969601", "assessment_type": "RdSAP", "completion_date": "2019-11-15", "inspection_date": "2019-11-15", "extensions_count": 0, "measurement_type": 2, "total_floor_area": 99, "transaction_type": 9, "conservatory_type": 1, "heated_room_count": 5, "pvc_window_frames": "true", "registration_date": "2019-11-15", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 310, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.5, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 58, "quantity": "square metres"}, "party_wall_length": {"value": 16, "quantity": "metres"}, "floor_construction": 3, "heat_loss_perimeter": {"value": 14, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.5, "quantity": "metres"}, "total_floor_area": {"value": 54, "quantity": "square metres"}, "party_wall_length": {"value": 14, "quantity": "metres"}, "heat_loss_perimeter": {"value": 12, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "F", "party_wall_construction": 2, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "12mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 0, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 917, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 5.2, "energy_rating_average": 60, "energy_rating_current": 52, "lighting_cost_current": {"value": 144, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 478, "currency": "GBP"}, "hot_water_cost_current": {"value": 141, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 80, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 186, "currency": "GBP"}, "indicative_cost": "\u00a3100 - \u00a3350", "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 60, "environmental_impact_rating": 55}, {"sequence": 2, "typical_saving": {"value": 74, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 63, "environmental_impact_rating": 59}, {"sequence": 3, "typical_saving": {"value": 67, "currency": "GBP"}, "indicative_cost": "\u00a3300 - \u00a3600", "improvement_type": "B4", "improvement_details": {"improvement_number": 63}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 63}, {"sequence": 4, "typical_saving": {"value": 41, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 65}, {"sequence": 5, "typical_saving": {"value": 59, "currency": "GBP"}, "indicative_cost": "\u00a350", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 66}, {"sequence": 6, "typical_saving": {"value": 121, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 73}, {"sequence": 7, "typical_saving": {"value": 33, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 75}, {"sequence": 8, "typical_saving": {"value": 340, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 84, "environmental_impact_rating": 83}], "co2_emissions_potential": 1.4, "energy_rating_potential": 84, "lighting_cost_potential": {"value": 72, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 13, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 66, "environmental_impact_rating": 63}, {"sequence": 2, "typical_saving": {"value": 87, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 73, "environmental_impact_rating": 92}, {"sequence": 3, "typical_saving": {"value": 38, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 75, "environmental_impact_rating": 78}, {"sequence": 4, "typical_saving": {"value": 219, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 76, "environmental_impact_rating": 72}], "hot_water_cost_potential": {"value": 70, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2232, "impact_of_loft_insulation": -2619, "impact_of_cavity_insulation": -1051, "space_heating_existing_dwelling": 11358}, "energy_consumption_current": 300, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.1.1.0", "energy_consumption_potential": 77, "environmental_impact_current": 47, "fixed_lighting_outlets_count": 10, "windows_transmission_details": {"u_value": 2.8, "data_source": 2, "solar_transmittance": 0.76}, "current_energy_efficiency_band": "E", "environmental_impact_potential": 83, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 53, "low_energy_fixed_lighting_outlets_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PL36BL/cert-427bab8c0ce3.json b/tests/fixtures/epc_prediction/PL36BL/cert-427bab8c0ce3.json new file mode 100644 index 00000000..2d37b493 --- /dev/null +++ b/tests/fixtures/epc_prediction/PL36BL/cert-427bab8c0ce3.json @@ -0,0 +1 @@ +{"uprn": 10000796838, "roofs": [{"description": {"value": "Pitched, 50 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "walls": [{"description": {"value": "Cavity wall, filled cavity", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in 75% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PL3 6BL", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 4, "created_at": "2021-05-17 13:29:03.849511", "door_count": 2, "glazed_area": 1, "glazing_gap": 12, "region_code": 15, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 118, "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Mid-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-03d0c7182bda", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2021-05-17", "inspection_date": "2019-12-20", "extensions_count": 0, "measurement_type": 2, "total_floor_area": 88, "transaction_type": 9, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2021-05-17", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 310, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.5, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 52, "quantity": "square metres"}, "party_wall_length": {"value": 18, "quantity": "metres"}, "floor_construction": 3, "heat_loss_perimeter": {"value": 14, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.5, "quantity": "metres"}, "total_floor_area": {"value": 48, "quantity": "square metres"}, "party_wall_length": {"value": 16, "quantity": "metres"}, "heat_loss_perimeter": {"value": 12, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "F", "party_wall_construction": 2, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "50mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 75, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 625, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.9, "energy_rating_average": 60, "energy_rating_current": 63, "lighting_cost_current": {"value": 86, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 382, "currency": "GBP"}, "hot_water_cost_current": {"value": 139, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 80, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 57, "currency": "GBP"}, "indicative_cost": "\u00a3100 - \u00a3350", "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 60}, {"sequence": 2, "typical_saving": {"value": 64, "currency": "GBP"}, "indicative_cost": "\u00a3300 - \u00a3600", "improvement_type": "B4", "improvement_details": {"improvement_number": 63}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 64}, {"sequence": 3, "typical_saving": {"value": 35, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 66}, {"sequence": 4, "typical_saving": {"value": 125, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 74}, {"sequence": 5, "typical_saving": {"value": 33, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 76}, {"sequence": 6, "typical_saving": {"value": 354, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 85}], "co2_emissions_potential": 1.1, "energy_rating_potential": 86, "lighting_cost_potential": {"value": 86, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 95, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 74, "environmental_impact_rating": 95}, {"sequence": 2, "typical_saving": {"value": 137, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 75, "environmental_impact_rating": 71}], "hot_water_cost_potential": {"value": 69, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2169, "impact_of_loft_insulation": -947, "space_heating_existing_dwelling": 8532}, "energy_consumption_current": 250, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.1.0.1", "energy_consumption_potential": 69, "environmental_impact_current": 56, "fixed_lighting_outlets_count": 8, "windows_transmission_details": {"u_value": 2.8, "data_source": 2, "solar_transmittance": 0.76}, "current_energy_efficiency_band": "D", "environmental_impact_potential": 85, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 44, "low_energy_fixed_lighting_outlets_count": 6} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PL36BL/cert-4c92c05a7872.json b/tests/fixtures/epc_prediction/PL36BL/cert-4c92c05a7872.json new file mode 100644 index 00000000..8309156e --- /dev/null +++ b/tests/fixtures/epc_prediction/PL36BL/cert-4c92c05a7872.json @@ -0,0 +1 @@ +{"uprn": 100040471400, "roofs": [{"description": "Pitched, 200 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": "Pitched, no insulation", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "lighting": {"description": "Good lighting efficiency", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "PL3 6BL", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2026-05-14 10:01:03", "door_count": 0, "region_code": 15, "report_type": 2, "sap_heating": {"number_baths": 0, "cylinder_size": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_outlet_type": 1}], "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 18219}], "immersion_heating_type": "NA", "secondary_heating_type": 612, "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 1, "window_width": 2.43, "window_height": 2.14, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 1, "window_type": 1, "glazing_type": 1, "window_width": 0.8, "window_height": 1.7, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 7, "window_type": 1, "glazing_type": 1, "window_width": 0.56, "window_height": 1.09, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 7, "window_type": 2, "glazing_type": 1, "window_width": 0.6, "window_height": 0.6, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 7, "window_type": 1, "glazing_type": 1, "window_width": 1.17, "window_height": 0.37, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 1, "window_type": 1, "glazing_type": 1, "window_width": 0.38, "window_height": 0.45, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 1, "window_type": 1, "glazing_type": 1, "window_width": 0.72, "window_height": 1.64, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 1, "window_width": 1.02, "window_height": 1.85, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 1, "window_type": 1, "glazing_type": 1, "window_width": 1, "window_height": 1.85, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 1, "window_width": 0.8, "window_height": 1.73, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Mid-terrace house", "language_code": 1, "pressure_test": 4, "property_type": 0, "address_line_1": "addr-e8a3a0574a67", "assessment_type": "RdSAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-13", "extensions_count": 1, "measurement_type": 2, "total_floor_area": 85, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 5, "registration_date": "2026-05-14", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "false", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 2, "electricity_smart_meter_present": "true"}, "secondary_heating": {"description": "Room heaters, mains gas", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "extract_fans_count": 1, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.75, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 42.65, "quantity": "square metres"}, "party_wall_length": {"value": 16.22, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 7.14, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.66, "quantity": "metres"}, "total_floor_area": {"value": 41.36, "quantity": "square metres"}, "party_wall_length": {"value": 16.22, "quantity": "metres"}, "heat_loss_perimeter": {"value": 10.2, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "200mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 250, "floor_heat_loss": 7, "roof_construction": 8, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.19, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 12.62, "quantity": "square metres"}, "party_wall_length": {"value": 3.17, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 8.31, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 7, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "sloping_ceiling_insulation_thickness": "AB"}], "open_chimneys_count": 2, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 1347, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.1, "energy_rating_average": 60, "energy_rating_current": 59, "lighting_cost_current": {"value": 60, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 957, "currency": "GBP"}, "hot_water_cost_current": {"value": 206, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 97, "currency": "GBP"}, "indicative_cost": "\u00a3900 - \u00a31,200", "improvement_type": "A2", "improvement_details": {"improvement_number": 45}, "improvement_category": 5, "energy_performance_rating": 62, "environmental_impact_rating": 57}, {"sequence": 2, "typical_saving": {"value": 232, "currency": "GBP"}, "indicative_cost": "\u00a37,500 - \u00a311,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 65}, {"sequence": 3, "typical_saving": {"value": 60, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a310,000", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 67}, {"sequence": 4, "typical_saving": {"value": 225, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 68}], "co2_emissions_potential": 2.8, "energy_rating_potential": 73, "lighting_cost_potential": {"value": 60, "currency": "GBP"}, "schema_version_original": "21.0.1", "hot_water_cost_potential": {"value": 207, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2397.59, "space_heating_existing_dwelling": 10790.19}, "draughtproofed_door_count": 0, "energy_consumption_current": 262, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "5.02r0344", "energy_consumption_potential": 177, "environmental_impact_current": 54, "cfl_fixed_lighting_bulbs_count": 4, "current_energy_efficiency_band": "D", "environmental_impact_potential": 68, "led_fixed_lighting_bulbs_count": 26, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 48, "incandescent_fixed_lighting_bulbs_count": 2} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PL36BL/cert-55420d5fff65.json b/tests/fixtures/epc_prediction/PL36BL/cert-55420d5fff65.json new file mode 100644 index 00000000..d2b6874c --- /dev/null +++ b/tests/fixtures/epc_prediction/PL36BL/cert-55420d5fff65.json @@ -0,0 +1 @@ +{"uprn": 10000796835, "roofs": [{"description": {"value": "Pitched, 50 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "walls": [{"description": {"value": "Cavity wall, filled cavity", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in 80% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PL3 6BL", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 4, "created_at": "2021-05-17 13:27:29.093070", "door_count": 2, "glazed_area": 1, "glazing_gap": 12, "region_code": 15, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 118, "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Mid-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-0e5e1753c458", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2021-05-17", "inspection_date": "2019-12-20", "extensions_count": 0, "measurement_type": 2, "total_floor_area": 87, "transaction_type": 9, "conservatory_type": 1, "heated_room_count": 5, "pvc_window_frames": "true", "registration_date": "2021-05-17", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 310, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.5, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 52, "quantity": "square metres"}, "party_wall_length": {"value": 18, "quantity": "metres"}, "floor_construction": 3, "heat_loss_perimeter": {"value": 15, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.5, "quantity": "metres"}, "total_floor_area": {"value": 48, "quantity": "square metres"}, "party_wall_length": {"value": 17, "quantity": "metres"}, "heat_loss_perimeter": {"value": 13, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "F", "party_wall_construction": 2, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "50mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 80, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 631, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.9, "energy_rating_average": 60, "energy_rating_current": 62, "lighting_cost_current": {"value": 82, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 386, "currency": "GBP"}, "hot_water_cost_current": {"value": 139, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 80, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 55, "currency": "GBP"}, "indicative_cost": "\u00a3100 - \u00a3350", "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 59}, {"sequence": 2, "typical_saving": {"value": 64, "currency": "GBP"}, "indicative_cost": "\u00a3300 - \u00a3600", "improvement_type": "B4", "improvement_details": {"improvement_number": 63}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 64}, {"sequence": 3, "typical_saving": {"value": 36, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 66}, {"sequence": 4, "typical_saving": {"value": 126, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 74}, {"sequence": 5, "typical_saving": {"value": 32, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 76}, {"sequence": 6, "typical_saving": {"value": 354, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 85}], "co2_emissions_potential": 1.1, "energy_rating_potential": 86, "lighting_cost_potential": {"value": 82, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 95, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 74, "environmental_impact_rating": 95}, {"sequence": 2, "typical_saving": {"value": 139, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 75, "environmental_impact_rating": 71}], "hot_water_cost_potential": {"value": 69, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2167, "impact_of_loft_insulation": -921, "space_heating_existing_dwelling": 8625}, "energy_consumption_current": 252, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.1.0.1", "energy_consumption_potential": 70, "environmental_impact_current": 56, "fixed_lighting_outlets_count": 10, "windows_transmission_details": {"u_value": 2.8, "data_source": 2, "solar_transmittance": 0.76}, "current_energy_efficiency_band": "D", "environmental_impact_potential": 85, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 44, "low_energy_fixed_lighting_outlets_count": 8} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PL36BL/cert-57002765c222.json b/tests/fixtures/epc_prediction/PL36BL/cert-57002765c222.json new file mode 100644 index 00000000..21f97482 --- /dev/null +++ b/tests/fixtures/epc_prediction/PL36BL/cert-57002765c222.json @@ -0,0 +1 @@ +{"uprn": 10000796833, "roofs": [{"description": {"value": "Pitched, 50 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "walls": [{"description": {"value": "Cavity wall, filled cavity", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in 75% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PL3 6BL", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 4, "created_at": "2021-05-17 13:18:59.587711", "door_count": 2, "glazed_area": 1, "glazing_gap": 12, "region_code": 15, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 118, "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Mid-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-8e687c4c8329", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2021-05-17", "inspection_date": "2019-12-20", "extensions_count": 0, "measurement_type": 2, "total_floor_area": 76, "transaction_type": 9, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2021-05-17", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 310, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.5, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 46, "quantity": "square metres"}, "party_wall_length": {"value": 16, "quantity": "metres"}, "floor_construction": 3, "heat_loss_perimeter": {"value": 14, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.5, "quantity": "metres"}, "total_floor_area": {"value": 42, "quantity": "square metres"}, "party_wall_length": {"value": 14, "quantity": "metres"}, "heat_loss_perimeter": {"value": 12, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "F", "party_wall_construction": 2, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "50mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 75, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 572, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.5, "energy_rating_average": 60, "energy_rating_current": 62, "lighting_cost_current": {"value": 77, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 357, "currency": "GBP"}, "hot_water_cost_current": {"value": 133, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 80, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 49, "currency": "GBP"}, "indicative_cost": "\u00a3100 - \u00a3350", "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 60}, {"sequence": 2, "typical_saving": {"value": 55, "currency": "GBP"}, "indicative_cost": "\u00a3300 - \u00a3600", "improvement_type": "B4", "improvement_details": {"improvement_number": 63}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 64}, {"sequence": 3, "typical_saving": {"value": 34, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 66}, {"sequence": 4, "typical_saving": {"value": 114, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 74}, {"sequence": 5, "typical_saving": {"value": 31, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 76}, {"sequence": 6, "typical_saving": {"value": 354, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 87, "environmental_impact_rating": 86}], "co2_emissions_potential": 0.9, "energy_rating_potential": 87, "lighting_cost_potential": {"value": 77, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 92, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 74, "environmental_impact_rating": 95}, {"sequence": 2, "typical_saving": {"value": 115, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 74, "environmental_impact_rating": 70}], "hot_water_cost_potential": {"value": 65, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2072, "impact_of_loft_insulation": -815, "space_heating_existing_dwelling": 7654}, "energy_consumption_current": 261, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.1.0.1", "energy_consumption_potential": 66, "environmental_impact_current": 56, "fixed_lighting_outlets_count": 8, "windows_transmission_details": {"u_value": 2.8, "data_source": 2, "solar_transmittance": 0.76}, "current_energy_efficiency_band": "D", "environmental_impact_potential": 86, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 46, "low_energy_fixed_lighting_outlets_count": 6} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PL36BL/cert-7748ba172c7d.json b/tests/fixtures/epc_prediction/PL36BL/cert-7748ba172c7d.json new file mode 100644 index 00000000..e40bb24d --- /dev/null +++ b/tests/fixtures/epc_prediction/PL36BL/cert-7748ba172c7d.json @@ -0,0 +1 @@ +{"uprn": 100040471383, "roofs": [{"description": {"value": "Pitched, 50 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "walls": [{"description": {"value": "Solid brick, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Mostly double glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Low energy lighting in all fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PL3 6BL", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2021-03-13 12:02:46.724783", "door_count": 2, "glazed_area": 1, "region_code": 15, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17507}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Mid-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-7d325926c33a", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2021-03-13", "inspection_date": "2021-03-13", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 85, "transaction_type": 1, "conservatory_type": 4, "heated_room_count": 5, "registration_date": "2021-03-13", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"floor_area": {"value": 4.1, "quantity": "square metres"}, "room_height": 1.5, "double_glazed": "Y", "glazed_perimeter": {"value": 2.1, "quantity": "metres"}}, {"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 220, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.6, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 35.9, "quantity": "square metres"}, "party_wall_length": {"value": 14.8, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 4.9, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.6, "quantity": "metres"}, "total_floor_area": {"value": 36, "quantity": "square metres"}, "party_wall_length": {"value": 14.7, "quantity": "metres"}, "heat_loss_perimeter": {"value": 9.8, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "50mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension", "wall_dry_lined": "Y", "wall_thickness": 340, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.5, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 8.6, "quantity": "square metres"}, "party_wall_length": {"value": 3.1, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 3.8, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "50mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 479, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.7, "energy_rating_average": 60, "energy_rating_current": 71, "lighting_cost_current": {"value": 68, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 378, "currency": "GBP"}, "hot_water_cost_current": {"value": 87, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 89, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 37, "currency": "GBP"}, "indicative_cost": "\u00a3100 - \u00a3350", "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 70}, {"sequence": 2, "typical_saving": {"value": 64, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 75}, {"sequence": 3, "typical_saving": {"value": 29, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 76}, {"sequence": 4, "typical_saving": {"value": 366, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 87, "environmental_impact_rating": 86}], "co2_emissions_potential": 1.0, "energy_rating_potential": 87, "lighting_cost_potential": {"value": 68, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "hot_water_cost_potential": {"value": 58, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1996, "impact_of_loft_insulation": -861, "impact_of_solid_wall_insulation": -1490, "space_heating_existing_dwelling": 8297}, "energy_consumption_current": 184, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 85, "calculation_software_version": "2.1.1.0", "energy_consumption_potential": 64, "environmental_impact_current": 68, "fixed_lighting_outlets_count": 9, "windows_transmission_details": {"u_value": 2, "data_source": 2, "solar_transmittance": 0.72}, "current_energy_efficiency_band": "C", "environmental_impact_potential": 86, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 32, "low_energy_fixed_lighting_outlets_count": 9} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PL36BL/cert-7857da83454e.json b/tests/fixtures/epc_prediction/PL36BL/cert-7857da83454e.json new file mode 100644 index 00000000..961fbef1 --- /dev/null +++ b/tests/fixtures/epc_prediction/PL36BL/cert-7857da83454e.json @@ -0,0 +1 @@ +{"uprn": 100040471389, "roofs": [{"description": "Pitched, no insulation", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": "Pitched, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": "Timber frame, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PL3 6BL", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2020-10-01 19:45:09.512664", "door_count": 1, "glazed_area": 1, "glazing_gap": "16+", "region_code": 15, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 18218}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Address Matched", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Mid-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-5c9ffe8708d9", "assessment_type": "RdSAP", "completion_date": "2020-10-01", "inspection_date": "2020-09-30", "extensions_count": 2, "measurement_type": 1, "total_floor_area": 84, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2020-10-01", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 350, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.7, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 36.61, "quantity": "square metres"}, "party_wall_length": {"value": 14.92, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 5.61, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.6, "quantity": "metres"}, "total_floor_area": {"value": 35.3, "quantity": "square metres"}, "party_wall_length": {"value": 14.92, "quantity": "metres"}, "heat_loss_perimeter": {"value": 9.46, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 5, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 200, "floor_heat_loss": 7, "roof_construction": 8, "wall_construction": 5, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 9.05, "quantity": "square metres"}, "party_wall_length": {"value": 3.09, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 4.27, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 7, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "sloping_ceiling_insulation_thickness": "AB"}, {"identifier": "Extension 2", "wall_dry_lined": "N", "wall_thickness": 160, "floor_heat_loss": 7, "roof_construction": 8, "wall_construction": 3, "building_part_number": 3, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.7, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 3.1, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 3.52, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 7, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "sloping_ceiling_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 660, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.8, "energy_rating_average": 60, "energy_rating_current": 63, "lighting_cost_current": {"value": 67, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 1, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 416, "currency": "GBP"}, "hot_water_cost_current": {"value": 98, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 80, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 123, "currency": "GBP"}, "indicative_cost": "\u00a3100 - \u00a3350", "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 64}, {"sequence": 2, "typical_saving": {"value": 37, "currency": "GBP"}, "indicative_cost": "\u00a3850 - \u00a31,500", "improvement_type": "A2", "improvement_details": {"improvement_number": 45}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 67}, {"sequence": 3, "typical_saving": {"value": 84, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 72}, {"sequence": 4, "typical_saving": {"value": 31, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 74}, {"sequence": 5, "typical_saving": {"value": 362, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 85, "environmental_impact_rating": 84}], "co2_emissions_potential": 1.2, "energy_rating_potential": 85, "lighting_cost_potential": {"value": 67, "currency": "GBP"}, "schema_version_original": "20.0.0", "hot_water_cost_potential": {"value": 67, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2144, "impact_of_loft_insulation": -2822, "impact_of_solid_wall_insulation": -1864, "space_heating_existing_dwelling": 12325}, "energy_consumption_current": 253, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.06r0006", "energy_consumption_potential": 80, "environmental_impact_current": 56, "fixed_lighting_outlets_count": 14, "current_energy_efficiency_band": "D", "environmental_impact_potential": 84, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 45, "low_energy_fixed_lighting_outlets_count": 14} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PL36BL/cert-85ef6b6fb9d7.json b/tests/fixtures/epc_prediction/PL36BL/cert-85ef6b6fb9d7.json new file mode 100644 index 00000000..a5c0f625 --- /dev/null +++ b/tests/fixtures/epc_prediction/PL36BL/cert-85ef6b6fb9d7.json @@ -0,0 +1 @@ +{"uprn": 100040471411, "roofs": [{"description": "Pitched, 75 mm loft insulation", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PL3 6BL", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2024-10-29 13:51:54", "door_count": 2, "glazed_area": 1, "region_code": 15, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 19018}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Mid-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-2e445487644b", "assessment_type": "RdSAP", "completion_date": "2024-10-29", "inspection_date": "2024-10-21", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 87, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "registration_date": "2024-10-29", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 230, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.74, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 43.79, "quantity": "square metres"}, "party_wall_length": {"value": 17.92, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 13.31, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.7, "quantity": "metres"}, "total_floor_area": {"value": 43.38, "quantity": "square metres"}, "party_wall_length": {"value": 17.92, "quantity": "metres"}, "heat_loss_perimeter": {"value": 12.56, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "75mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 779, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.1, "energy_rating_average": 60, "energy_rating_current": 69, "lighting_cost_current": {"value": 93, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 481, "currency": "GBP"}, "hot_water_cost_current": {"value": 141, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 38, "currency": "GBP"}, "indicative_cost": "\u00a3100 - \u00a3350", "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 67}, {"sequence": 2, "typical_saving": {"value": 197, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 75}, {"sequence": 3, "typical_saving": {"value": 63, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 78, "environmental_impact_rating": 78}, {"sequence": 4, "typical_saving": {"value": 46, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 79, "environmental_impact_rating": 80}, {"sequence": 5, "typical_saving": {"value": 485, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 89, "environmental_impact_rating": 89}], "co2_emissions_potential": 0.8, "energy_rating_potential": 89, "lighting_cost_potential": {"value": 93, "currency": "GBP"}, "schema_version_original": "20.0.0", "hot_water_cost_potential": {"value": 95, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2112, "impact_of_loft_insulation": -571, "impact_of_solid_wall_insulation": -2996, "space_heating_existing_dwelling": 9499}, "energy_consumption_current": 199, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.13r0002", "energy_consumption_potential": 49, "environmental_impact_current": 66, "fixed_lighting_outlets_count": 8, "current_energy_efficiency_band": "C", "environmental_impact_potential": 89, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 35, "low_energy_fixed_lighting_outlets_count": 8} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PL36BL/cert-886e9a131657.json b/tests/fixtures/epc_prediction/PL36BL/cert-886e9a131657.json new file mode 100644 index 00000000..6433c412 --- /dev/null +++ b/tests/fixtures/epc_prediction/PL36BL/cert-886e9a131657.json @@ -0,0 +1 @@ +{"uprn": 100040471417, "roofs": [{"description": {"value": "Pitched, 200 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": {"value": "Solid brick, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in 78% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PL3 6BL", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2022-10-05 10:05:19.027616", "door_count": 1, "glazed_area": 1, "glazing_gap": "16+", "region_code": 15, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 10108}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Semi-detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-452bd9047ec8", "assessment_type": "RdSAP", "completion_date": "2022-10-05", "inspection_date": "2022-10-05", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 91, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 3, "pvc_window_frames": "true", "registration_date": "2022-10-05", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Portable electric heaters (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 260, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.72, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 35.6, "quantity": "square metres"}, "party_wall_length": {"value": 7.5, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 14.6, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.71, "quantity": "metres"}, "total_floor_area": {"value": 34.5, "quantity": "square metres"}, "party_wall_length": {"value": 7.5, "quantity": "metres"}, "heat_loss_perimeter": {"value": 13.8, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "200mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension", "wall_dry_lined": "N", "wall_thickness": 260, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.39, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 10.44, "quantity": "square metres"}, "party_wall_length": {"value": 3.6, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 6.5, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.4, "quantity": "metres"}, "total_floor_area": {"value": 10.44, "quantity": "square metres"}, "party_wall_length": {"value": 3.6, "quantity": "metres"}, "heat_loss_perimeter": {"value": 6.5, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "200mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 78, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 813, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.3, "energy_rating_average": 60, "energy_rating_current": 57, "lighting_cost_current": {"value": 91, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 1, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 480, "currency": "GBP"}, "hot_water_cost_current": {"value": 110, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 279, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 68}, {"sequence": 2, "typical_saving": {"value": 53, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 71}, {"sequence": 3, "typical_saving": {"value": 30, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 72}, {"sequence": 4, "typical_saving": {"value": 376, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 82, "environmental_impact_rating": 81}], "co2_emissions_potential": 1.5, "energy_rating_potential": 82, "lighting_cost_potential": {"value": 91, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "hot_water_cost_potential": {"value": 81, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2504, "impact_of_solid_wall_insulation": -4921, "space_heating_existing_dwelling": 12059}, "energy_consumption_current": 269, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.1.1.0", "energy_consumption_potential": 91, "environmental_impact_current": 53, "fixed_lighting_outlets_count": 9, "windows_transmission_details": {"u_value": 2.6, "data_source": 2, "solar_transmittance": 0.76}, "current_energy_efficiency_band": "D", "environmental_impact_potential": 81, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 47, "low_energy_fixed_lighting_outlets_count": 7} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PL36BL/cert-89e434c273da.json b/tests/fixtures/epc_prediction/PL36BL/cert-89e434c273da.json new file mode 100644 index 00000000..f74955f1 --- /dev/null +++ b/tests/fixtures/epc_prediction/PL36BL/cert-89e434c273da.json @@ -0,0 +1 @@ +{"uprn": 10000796836, "roofs": [{"description": "Pitched, 200 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, as built, partial insulation (assumed)", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": "Good lighting efficiency", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "PL3 6BL", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2026-06-02 15:43:11", "door_count": 2, "region_code": 15, "report_type": 2, "sap_heating": {"number_baths": 1, "cylinder_size": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_outlet_type": 2}], "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17959}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "true", "glazing_gap": 12, "orientation": 3, "window_type": 1, "glazing_type": 3, "window_width": 0.41, "window_height": 0.91, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 1, "window_type": 1, "glazing_type": 3, "window_width": 1.31, "window_height": 1, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 1, "window_type": 1, "glazing_type": 3, "window_width": 0.64, "window_height": 0.76, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 1, "window_type": 1, "glazing_type": 3, "window_width": 1.11, "window_height": 1.13, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 1.32, "window_height": 1.13, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 0.64, "window_height": 1.11, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 1.31, "window_height": 1, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Mid-terrace house", "language_code": 1, "pressure_test": 4, "property_type": 0, "address_line_1": "addr-ced1d14e437b", "assessment_type": "RdSAP", "completion_date": "2026-06-02", "inspection_date": "2026-06-02", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 85, "transaction_type": 5, "conservatory_type": 1, "heated_room_count": 3, "registration_date": "2026-06-02", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "false", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 2, "electricity_smart_meter_present": "false"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "extract_fans_count": 3, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 320, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.41, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 40.42, "quantity": "square metres"}, "party_wall_length": {"value": 15.7, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 8.65, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.38, "quantity": "metres"}, "total_floor_area": {"value": 40.42, "quantity": "square metres"}, "party_wall_length": {"value": 15.7, "quantity": "metres"}, "heat_loss_perimeter": {"value": 10.3, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "F", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "200mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 320, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.41, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 4.04, "quantity": "square metres"}, "party_wall_length": {"value": 2.45, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 4.1, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "F", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "solar_water_heating": "N", "habitable_room_count": 3, "heating_cost_current": {"value": 775, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.2, "energy_rating_average": 60, "energy_rating_current": 71, "lighting_cost_current": {"value": 65, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 704, "currency": "GBP"}, "hot_water_cost_current": {"value": 267, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 89, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 71, "currency": "GBP"}, "indicative_cost": "\u00a3900 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 77}, {"sequence": 2, "typical_saving": {"value": 243, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 78, "environmental_impact_rating": 78}], "co2_emissions_potential": 1.9, "energy_rating_potential": 78, "lighting_cost_potential": {"value": 65, "currency": "GBP"}, "schema_version_original": "21.0.1", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 41, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 74, "environmental_impact_rating": 78}], "hot_water_cost_potential": {"value": 267, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1734.73, "space_heating_existing_dwelling": 7551.25}, "draughtproofed_door_count": 1, "energy_consumption_current": 149, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "5.02r0344", "energy_consumption_potential": 121, "environmental_impact_current": 75, "current_energy_efficiency_band": "C", "environmental_impact_potential": 78, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 26, "low_energy_fixed_lighting_bulbs_count": 10, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PL36BL/cert-9ba483c38571.json b/tests/fixtures/epc_prediction/PL36BL/cert-9ba483c38571.json new file mode 100644 index 00000000..67d805b8 --- /dev/null +++ b/tests/fixtures/epc_prediction/PL36BL/cert-9ba483c38571.json @@ -0,0 +1 @@ +{"uprn": 100040471338, "roofs": [{"description": {"value": "Pitched, 100 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, {"description": {"value": "Pitched, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": {"value": "Solid brick, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": {"value": "Cavity wall, as built, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in all fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PL3 6BL", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2023-11-13 14:25:27", "door_count": 2, "glazed_area": 1, "glazing_gap": "16+", "region_code": 15, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 9, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "mcs_installed_heat_pump": "false", "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 16839}], "immersion_heating_type": "NA", "secondary_heating_type": 631, "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Mid-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-376b15e22ac6", "assessment_type": "RdSAP", "completion_date": "2023-11-13", "inspection_date": "2023-11-08", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 85, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2023-11-13", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Room heaters, dual fuel (mineral and wood)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 240, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.44, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 37.96, "quantity": "square metres"}, "party_wall_length": {"value": 15.56, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 7.21, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.42, "quantity": "metres"}, "total_floor_area": {"value": 37.96, "quantity": "square metres"}, "party_wall_length": {"value": 15.56, "quantity": "metres"}, "heat_loss_perimeter": {"value": 9.76, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "100mm", "wall_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 320, "floor_heat_loss": 7, "roof_construction": 8, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.38, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 9.18, "quantity": "square metres"}, "party_wall_length": {"value": 3.6, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 6.15, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "H", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 7, "wall_insulation_thickness": "NI", "sloping_ceiling_insulation_thickness": "AB"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 1365, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.3, "energy_rating_average": 60, "energy_rating_current": 66, "lighting_cost_current": {"value": 134, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 1, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 1109, "currency": "GBP"}, "hot_water_cost_current": {"value": 219, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 177, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 66}, {"sequence": 2, "typical_saving": {"value": 79, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 68}, {"sequence": 3, "typical_saving": {"value": 82, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 70}, {"sequence": 4, "typical_saving": {"value": 711, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 82, "environmental_impact_rating": 79}], "co2_emissions_potential": 1.6, "energy_rating_potential": 82, "lighting_cost_potential": {"value": 134, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "hot_water_cost_potential": {"value": 138, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1907, "impact_of_loft_insulation": -349, "impact_of_solid_wall_insulation": -1359, "space_heating_existing_dwelling": 9089}, "energy_consumption_current": 214, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "v94.0.1.1", "energy_consumption_potential": 97, "environmental_impact_current": 62, "fixed_lighting_outlets_count": 19, "current_energy_efficiency_band": "D", "environmental_impact_potential": 79, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 39, "low_energy_fixed_lighting_outlets_count": 19} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PL36BL/cert-a59856f2585e.json b/tests/fixtures/epc_prediction/PL36BL/cert-a59856f2585e.json new file mode 100644 index 00000000..e2ed7843 --- /dev/null +++ b/tests/fixtures/epc_prediction/PL36BL/cert-a59856f2585e.json @@ -0,0 +1 @@ +{"uprn": 100040471368, "roofs": [{"description": {"value": "Pitched, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": {"value": "Solid brick, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in 23% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "postcode": "PL3 6BL", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2024-01-26 12:35:05", "door_count": 2, "glazed_area": 1, "glazing_gap": "16+", "region_code": 15, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "mcs_installed_heat_pump": "false", "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 10241}], "immersion_heating_type": "NA", "secondary_heating_type": 605, "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Mid-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-d26acc147f55", "assessment_type": "RdSAP", "completion_date": "2024-01-26", "inspection_date": "2024-01-26", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 80, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 5, "pvc_window_frames": "true", "registration_date": "2024-01-26", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Room heaters, mains gas", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 270, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.62, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 36.64, "quantity": "square metres"}, "party_wall_length": {"value": 15.02, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 7.69, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.6, "quantity": "metres"}, "total_floor_area": {"value": 36.16, "quantity": "square metres"}, "party_wall_length": {"value": 14.97, "quantity": "metres"}, "heat_loss_perimeter": {"value": 9.67, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 250, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.26, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 6.96, "quantity": "square metres"}, "party_wall_length": {"value": 2.73, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 5.33, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 23, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 1222, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4, "energy_rating_average": 60, "energy_rating_current": 59, "lighting_cost_current": {"value": 190, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 996, "currency": "GBP"}, "hot_water_cost_current": {"value": 194, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 185, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 64, "environmental_impact_rating": 59}, {"sequence": 2, "typical_saving": {"value": 51, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 60}, {"sequence": 3, "typical_saving": {"value": 72, "currency": "GBP"}, "indicative_cost": "\u00a350", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 62}, {"sequence": 4, "typical_saving": {"value": 58, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 63}, {"sequence": 5, "typical_saving": {"value": 602, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 78, "environmental_impact_rating": 73}], "co2_emissions_potential": 2, "energy_rating_potential": 78, "lighting_cost_potential": {"value": 107, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "hot_water_cost_potential": {"value": 135, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2255, "impact_of_loft_insulation": -3360, "impact_of_solid_wall_insulation": -2197, "space_heating_existing_dwelling": 11199}, "energy_consumption_current": 283, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "v94.0.1.1", "energy_consumption_potential": 140, "environmental_impact_current": 53, "fixed_lighting_outlets_count": 13, "current_energy_efficiency_band": "D", "environmental_impact_potential": 73, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 50, "low_energy_fixed_lighting_outlets_count": 3} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PL36BL/cert-b7159c96c56a.json b/tests/fixtures/epc_prediction/PL36BL/cert-b7159c96c56a.json new file mode 100644 index 00000000..b4c21f30 --- /dev/null +++ b/tests/fixtures/epc_prediction/PL36BL/cert-b7159c96c56a.json @@ -0,0 +1 @@ +{"uprn": 10000796832, "roofs": [{"description": {"value": "Pitched, 50 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "walls": [{"description": {"value": "Cavity wall, filled cavity", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in 75% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PL3 6BL", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 4, "created_at": "2021-05-17 13:17:32.714500", "door_count": 2, "glazed_area": 1, "glazing_gap": 12, "region_code": 15, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 118, "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Mid-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-37e5ac832ffc", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2021-05-17", "inspection_date": "2019-12-20", "extensions_count": 0, "measurement_type": 2, "total_floor_area": 88, "transaction_type": 9, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2021-05-17", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 310, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.5, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 52, "quantity": "square metres"}, "party_wall_length": {"value": 18, "quantity": "metres"}, "floor_construction": 3, "heat_loss_perimeter": {"value": 14, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.5, "quantity": "metres"}, "total_floor_area": {"value": 48, "quantity": "square metres"}, "party_wall_length": {"value": 16, "quantity": "metres"}, "heat_loss_perimeter": {"value": 12, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "F", "party_wall_construction": 2, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "50mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 75, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 625, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.9, "energy_rating_average": 60, "energy_rating_current": 63, "lighting_cost_current": {"value": 86, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 382, "currency": "GBP"}, "hot_water_cost_current": {"value": 139, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 80, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 57, "currency": "GBP"}, "indicative_cost": "\u00a3100 - \u00a3350", "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 60}, {"sequence": 2, "typical_saving": {"value": 64, "currency": "GBP"}, "indicative_cost": "\u00a3300 - \u00a3600", "improvement_type": "B4", "improvement_details": {"improvement_number": 63}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 64}, {"sequence": 3, "typical_saving": {"value": 35, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 66}, {"sequence": 4, "typical_saving": {"value": 125, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 74}, {"sequence": 5, "typical_saving": {"value": 33, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 76}, {"sequence": 6, "typical_saving": {"value": 354, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 85}], "co2_emissions_potential": 1.1, "energy_rating_potential": 86, "lighting_cost_potential": {"value": 86, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 95, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 74, "environmental_impact_rating": 95}, {"sequence": 2, "typical_saving": {"value": 137, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 75, "environmental_impact_rating": 71}], "hot_water_cost_potential": {"value": 69, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2169, "impact_of_loft_insulation": -947, "space_heating_existing_dwelling": 8532}, "energy_consumption_current": 250, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.1.0.1", "energy_consumption_potential": 69, "environmental_impact_current": 56, "fixed_lighting_outlets_count": 8, "windows_transmission_details": {"u_value": 2.8, "data_source": 2, "solar_transmittance": 0.76}, "current_energy_efficiency_band": "D", "environmental_impact_potential": 85, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 44, "low_energy_fixed_lighting_outlets_count": 6} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PL36BL/cert-b84d67cbebb2.json b/tests/fixtures/epc_prediction/PL36BL/cert-b84d67cbebb2.json new file mode 100644 index 00000000..c1ed1af4 --- /dev/null +++ b/tests/fixtures/epc_prediction/PL36BL/cert-b84d67cbebb2.json @@ -0,0 +1 @@ +{"uprn": 100040471329, "roofs": [{"description": "Pitched, 150 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": "Pitched, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PL3 6BL", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2024-04-04 19:54:07", "door_count": 2, "glazed_area": 1, "glazing_gap": "16+", "region_code": 15, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2107, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 16848}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Mid-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-a4a74761209e", "assessment_type": "RdSAP", "completion_date": "2024-04-04", "inspection_date": "2024-04-03", "extensions_count": 1, "measurement_type": 2, "total_floor_area": 79, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 5, "pvc_window_frames": "true", "registration_date": "2024-04-04", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 270, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.75, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 42.08, "quantity": "square metres"}, "party_wall_length": {"value": 15.22, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 9.13, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.3, "quantity": "metres"}, "total_floor_area": {"value": 40.64, "quantity": "square metres"}, "party_wall_length": {"value": 11.61, "quantity": "metres"}, "heat_loss_perimeter": {"value": 14.29, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "A", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "150mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 270, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.3, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 6.8, "quantity": "square metres"}, "party_wall_length": {"value": 3.25, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 5.6, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "A", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 988, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.1, "energy_rating_average": 60, "energy_rating_current": 66, "lighting_cost_current": {"value": 106, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, TRVs and bypass", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 1, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 645, "currency": "GBP"}, "hot_water_cost_current": {"value": 189, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 246, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 71}, {"sequence": 2, "typical_saving": {"value": 56, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 72}, {"sequence": 3, "typical_saving": {"value": 40, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 14}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 74}, {"sequence": 4, "typical_saving": {"value": 63, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 76}, {"sequence": 5, "typical_saving": {"value": 602, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 87, "environmental_impact_rating": 85}], "co2_emissions_potential": 1.0, "energy_rating_potential": 87, "lighting_cost_potential": {"value": 106, "currency": "GBP"}, "schema_version_original": "20.0.0", "hot_water_cost_potential": {"value": 128, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2125, "impact_of_loft_insulation": -664, "impact_of_solid_wall_insulation": -2829, "space_heating_existing_dwelling": 9143}, "energy_consumption_current": 227, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.13r0001", "energy_consumption_potential": 69, "environmental_impact_current": 62, "fixed_lighting_outlets_count": 8, "current_energy_efficiency_band": "D", "environmental_impact_potential": 85, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 40, "low_energy_fixed_lighting_outlets_count": 8} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PL36BL/cert-be94d604163d.json b/tests/fixtures/epc_prediction/PL36BL/cert-be94d604163d.json new file mode 100644 index 00000000..0f78b276 --- /dev/null +++ b/tests/fixtures/epc_prediction/PL36BL/cert-be94d604163d.json @@ -0,0 +1 @@ +{"uprn": 100040471385, "roofs": [{"description": "Pitched, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": "Roof room(s), no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": "Granite or whinstone, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"stone_walls": "true"}, "lighting": {"description": "No low energy lighting", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "postcode": "PL3 6BL", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2021-08-11 14:56:40.253455", "door_count": 0, "glazed_area": 1, "glazing_gap": 12, "region_code": 15, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 29, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2107, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 8216}], "immersion_heating_type": "NA", "secondary_heating_type": 691, "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Mid-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-7a9f4ba1e490", "assessment_type": "RdSAP", "completion_date": "2021-08-11", "inspection_date": "2021-08-11", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 111, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 5, "pvc_window_frames": "true", "registration_date": "2021-08-11", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, electric", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 500, "floor_heat_loss": 7, "sap_room_in_roof": {"floor_area": 24.91, "insulation": "AB", "roof_room_connected": "N", "construction_age_band": "B"}, "roof_construction": 5, "wall_construction": 1, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.6, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 35.37, "quantity": "square metres"}, "party_wall_length": {"value": 14.4, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 8.8, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.6, "quantity": "metres"}, "total_floor_area": {"value": 33.84, "quantity": "square metres"}, "party_wall_length": {"value": 14.4, "quantity": "metres"}, "heat_loss_perimeter": {"value": 7, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 240, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.5, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 8.64, "quantity": "square metres"}, "party_wall_length": {"value": 3.6, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 6, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.5, "quantity": "metres"}, "total_floor_area": {"value": 8.64, "quantity": "square metres"}, "party_wall_length": {"value": 3.6, "quantity": "metres"}, "heat_loss_perimeter": {"value": 6, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 0, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 1259, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 7.1, "energy_rating_average": 60, "energy_rating_current": 42, "lighting_cost_current": {"value": 168, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, TRVs and bypass", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 637, "currency": "GBP"}, "hot_water_cost_current": {"value": 178, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 335, "currency": "GBP"}, "indicative_cost": "\u00a31,500 - \u00a32,700", "improvement_type": "A3", "improvement_details": {"improvement_number": 46}, "improvement_category": 5, "energy_performance_rating": 54, "environmental_impact_rating": 49}, {"sequence": 2, "typical_saving": {"value": 226, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 63, "environmental_impact_rating": 58}, {"sequence": 3, "typical_saving": {"value": 29, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 64, "environmental_impact_rating": 60}, {"sequence": 4, "typical_saving": {"value": 72, "currency": "GBP"}, "indicative_cost": "\u00a350", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 61}, {"sequence": 5, "typical_saving": {"value": 31, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 14}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 63}, {"sequence": 6, "typical_saving": {"value": 92, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 68}, {"sequence": 7, "typical_saving": {"value": 31, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 70}, {"sequence": 8, "typical_saving": {"value": 370, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 80, "environmental_impact_rating": 77}], "co2_emissions_potential": 2.1, "energy_rating_potential": 80, "lighting_cost_potential": {"value": 84, "currency": "GBP"}, "schema_version_original": "20.0.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 290, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 74, "environmental_impact_rating": 69}}], "hot_water_cost_potential": {"value": 69, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3571, "impact_of_loft_insulation": -1400, "impact_of_solid_wall_insulation": -3196, "space_heating_existing_dwelling": 17425}, "energy_consumption_current": 362, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.07r0003", "energy_consumption_potential": 106, "environmental_impact_current": 38, "fixed_lighting_outlets_count": 10, "current_energy_efficiency_band": "E", "environmental_impact_potential": 77, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 64, "low_energy_fixed_lighting_outlets_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PL36BL/cert-c3b3c1b65da2.json b/tests/fixtures/epc_prediction/PL36BL/cert-c3b3c1b65da2.json new file mode 100644 index 00000000..9dfbd59c --- /dev/null +++ b/tests/fixtures/epc_prediction/PL36BL/cert-c3b3c1b65da2.json @@ -0,0 +1 @@ +{"uprn": 100040471336, "roofs": [{"description": "Pitched, 150 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "lighting": {"description": "Excellent lighting efficiency", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PL3 6BL", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2026-02-17 20:50:16", "door_count": 3, "region_code": 15, "report_type": 2, "sap_heating": {"number_baths": 0, "cylinder_size": 1, "shower_outlets": [{"shower_outlet": {"shower_wwhrs": 1, "shower_outlet_type": 2}}], "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 16839}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "true", "glazing_gap": "16+", "orientation": 6, "window_type": 1, "glazing_type": 3, "window_width": 0.6, "window_height": 1.91, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 1.17, "window_height": 1.91, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 4, "window_type": 1, "glazing_type": 3, "window_width": 0.6, "window_height": 1.91, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 1, "window_type": 1, "glazing_type": 3, "window_width": 0.99, "window_height": 1.88, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 1, "window_type": 1, "glazing_type": 3, "window_width": 0.59, "window_height": 1.23, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 1, "window_type": 1, "glazing_type": 3, "window_width": 0.98, "window_height": 1.71, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 0.97, "window_height": 1.67, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 0.8, "window_height": 1.92, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Mid-terrace house", "language_code": 1, "pressure_test": 4, "property_type": 0, "address_line_1": "addr-0654b81f55f0", "assessment_type": "RdSAP", "completion_date": "2026-02-17", "inspection_date": "2026-02-17", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 77, "transaction_type": 1, "conservatory_type": 1, "has_draught_lobby": "true", "heated_room_count": 1, "registration_date": "2026-02-17", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "false", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 2, "electricity_smart_meter_present": "true"}, "secondary_heating": {"description": "Portable electric heaters (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "extract_fans_count": 1, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 350, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.72, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 39.32, "quantity": "square metres"}, "party_wall_length": {"value": 14.94, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 10.7, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.77, "quantity": "metres"}, "total_floor_area": {"value": 37.73, "quantity": "square metres"}, "party_wall_length": {"value": 14.94, "quantity": "metres"}, "heat_loss_perimeter": {"value": 10.1, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "150mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 854, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.1, "energy_rating_average": 60, "energy_rating_current": 66, "lighting_cost_current": {"value": 50, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 579, "currency": "GBP"}, "hot_water_cost_current": {"value": 286, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 170, "currency": "GBP"}, "indicative_cost": "\u00a37,500 - \u00a311,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 80}, {"sequence": 2, "typical_saving": {"value": 68, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a310,000", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 81}, {"sequence": 3, "typical_saving": {"value": 36, "currency": "GBP"}, "indicative_cost": "\u00a32,700 - \u00a33,600", "improvement_type": "X", "improvement_details": {"improvement_number": 48}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 83}, {"sequence": 4, "typical_saving": {"value": 254, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 78, "environmental_impact_rating": 84}], "co2_emissions_potential": 1.3, "energy_rating_potential": 78, "lighting_cost_potential": {"value": 50, "currency": "GBP"}, "schema_version_original": "21.0.1", "hot_water_cost_potential": {"value": 286, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1712.68, "space_heating_existing_dwelling": 7421.09}, "draughtproofed_door_count": 3, "energy_consumption_current": 163, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "5.02r0332", "energy_consumption_potential": 97, "environmental_impact_current": 74, "current_energy_efficiency_band": "D", "environmental_impact_potential": 84, "led_fixed_lighting_bulbs_count": 28, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 27, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PL36BL/cert-d143c59c1539.json b/tests/fixtures/epc_prediction/PL36BL/cert-d143c59c1539.json new file mode 100644 index 00000000..b7d98871 --- /dev/null +++ b/tests/fixtures/epc_prediction/PL36BL/cert-d143c59c1539.json @@ -0,0 +1 @@ +{"uprn": 100040471395, "roofs": [{"description": {"value": "Pitched, 100 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, {"description": {"value": "Pitched, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": {"value": "Flat, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": {"value": "Solid brick, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": {"value": "Timber frame, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "No low energy lighting", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "postcode": "PL3 6BL", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2021-07-05 12:54:19.006020", "door_count": 2, "glazed_area": 1, "glazing_gap": "16+", "region_code": 15, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "N", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2107, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 104, "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Mid-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-d22644e44bcd", "assessment_type": "RdSAP", "completion_date": "2021-07-05", "inspection_date": "2021-07-05", "extensions_count": 3, "measurement_type": 1, "total_floor_area": 91, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2021-07-05", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 280, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.45, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 37.39, "quantity": "square metres"}, "party_wall_length": {"value": 15.08, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 9, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.5, "quantity": "metres"}, "total_floor_area": {"value": 35.47, "quantity": "square metres"}, "party_wall_length": {"value": 15.08, "quantity": "metres"}, "heat_loss_perimeter": {"value": 7.8, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "A", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "100mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 280, "floor_heat_loss": 7, "roof_construction": 7, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.35, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 6.2, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 1, "heat_loss_perimeter": {"value": 4, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "A", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": "ND", "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 2", "wall_dry_lined": "N", "wall_thickness": 200, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 3, "building_part_number": 3, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.35, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 5.27, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 1, "heat_loss_perimeter": {"value": 6.5, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "A", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 3", "wall_dry_lined": "N", "wall_thickness": 180, "floor_heat_loss": 8, "roof_construction": 1, "wall_construction": 5, "building_part_number": 4, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.25, "quantity": "metres"}, "total_floor_area": {"value": 6.2, "quantity": "square metres"}, "party_wall_length": 0, "heat_loss_perimeter": {"value": 7.5, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "low_energy_lighting": 0, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 684, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.2, "energy_rating_average": 60, "energy_rating_current": 60, "lighting_cost_current": {"value": 144, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, TRVs and bypass", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 483, "currency": "GBP"}, "hot_water_cost_current": {"value": 105, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 23, "currency": "GBP"}, "indicative_cost": "\u00a3850 - \u00a31,500", "improvement_type": "A2", "improvement_details": {"improvement_number": 45}, "improvement_category": 5, "energy_performance_rating": 61, "environmental_impact_rating": 55}, {"sequence": 2, "typical_saving": {"value": 124, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 63}, {"sequence": 3, "typical_saving": {"value": 31, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 65}, {"sequence": 4, "typical_saving": {"value": 64, "currency": "GBP"}, "indicative_cost": "\u00a355", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 66}, {"sequence": 5, "typical_saving": {"value": 30, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 14}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 68}, {"sequence": 6, "typical_saving": {"value": 34, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 70}, {"sequence": 7, "typical_saving": {"value": 366, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 82, "environmental_impact_rating": 79}], "co2_emissions_potential": 1.7, "energy_rating_potential": 82, "lighting_cost_potential": {"value": 72, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "hot_water_cost_potential": {"value": 72, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2189, "impact_of_loft_insulation": -739, "impact_of_solid_wall_insulation": -2564, "space_heating_existing_dwelling": 11470}, "energy_consumption_current": 264, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.1.0.1", "energy_consumption_potential": 103, "environmental_impact_current": 54, "fixed_lighting_outlets_count": 11, "windows_transmission_details": {"u_value": 2.6, "data_source": 2, "solar_transmittance": 0.76}, "current_energy_efficiency_band": "D", "environmental_impact_potential": 79, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 46, "low_energy_fixed_lighting_outlets_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PL36BL/cert-d2d80ec7d995.json b/tests/fixtures/epc_prediction/PL36BL/cert-d2d80ec7d995.json new file mode 100644 index 00000000..a1067013 --- /dev/null +++ b/tests/fixtures/epc_prediction/PL36BL/cert-d2d80ec7d995.json @@ -0,0 +1 @@ +{"uprn": 100040471350, "roofs": [{"description": {"value": "Pitched, 200 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": {"value": "Flat, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": {"value": "Solid brick, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in 80% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PL3 6BL", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2019-11-14 00:42:58.000000", "door_count": 0, "glazed_area": 1, "glazing_gap": "16+", "region_code": 15, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 104, "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "secondary_heating_type": 605, "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-19.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Mid-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-0891d3de5052", "assessment_type": "RdSAP", "completion_date": "2019-11-14", "inspection_date": "2019-11-11", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 85, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2019-11-14", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Room heaters, mains gas", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 260, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.7, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 36.91, "quantity": "square metres"}, "party_wall_length": {"value": 15.02, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 7.89, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.8, "quantity": "metres"}, "total_floor_area": {"value": 35.45, "quantity": "square metres"}, "party_wall_length": {"value": 15.02, "quantity": "metres"}, "heat_loss_perimeter": {"value": 9.44, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "200mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.3, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 12.98, "quantity": "square metres"}, "party_wall_length": {"value": 2.39, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 11.32, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "low_energy_lighting": 80, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 680, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.0, "energy_rating_average": 60, "energy_rating_current": 61, "lighting_cost_current": {"value": 77, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 403, "currency": "GBP"}, "hot_water_cost_current": {"value": 105, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 80, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 52, "currency": "GBP"}, "indicative_cost": "\u00a3850 - \u00a31,500", "improvement_type": "A2", "improvement_details": {"improvement_number": 45}, "improvement_category": 5, "energy_performance_rating": 64, "environmental_impact_rating": 58}, {"sequence": 2, "typical_saving": {"value": 168, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 69}, {"sequence": 3, "typical_saving": {"value": 35, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 71}, {"sequence": 4, "typical_saving": {"value": 21, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 72}, {"sequence": 5, "typical_saving": {"value": 35, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 74}, {"sequence": 6, "typical_saving": {"value": 340, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 85, "environmental_impact_rating": 83}], "co2_emissions_potential": 1.3, "energy_rating_potential": 85, "lighting_cost_potential": {"value": 77, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "hot_water_cost_potential": {"value": 71, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2154, "impact_of_solid_wall_insulation": -3121, "space_heating_existing_dwelling": 10849}, "energy_consumption_current": 265, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.1.0.1", "energy_consumption_potential": 81, "environmental_impact_current": 54, "fixed_lighting_outlets_count": 10, "windows_transmission_details": {"u_value": 2.6, "data_source": 2, "solar_transmittance": 0.76}, "current_energy_efficiency_band": "D", "environmental_impact_potential": 83, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 47, "low_energy_fixed_lighting_outlets_count": 8} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PL36BL/cert-dc4bd2310e04.json b/tests/fixtures/epc_prediction/PL36BL/cert-dc4bd2310e04.json new file mode 100644 index 00000000..66756547 --- /dev/null +++ b/tests/fixtures/epc_prediction/PL36BL/cert-dc4bd2310e04.json @@ -0,0 +1 @@ +{"uprn": 10000796839, "roofs": [{"description": {"value": "Pitched, 25 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "walls": [{"description": {"value": "Cavity wall, filled cavity", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in 83% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PL3 6BL", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 3, "created_at": "2021-05-17 13:30:34.671550", "door_count": 2, "glazed_area": 1, "glazing_gap": 12, "region_code": 15, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 118, "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "end-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-d989c8cb971a", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2021-05-17", "inspection_date": "2019-12-20", "extensions_count": 0, "measurement_type": 2, "total_floor_area": 96, "transaction_type": 9, "conservatory_type": 1, "heated_room_count": 6, "pvc_window_frames": "true", "registration_date": "2021-05-17", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 310, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.5, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 58, "quantity": "square metres"}, "party_wall_length": {"value": 9, "quantity": "metres"}, "floor_construction": 3, "heat_loss_perimeter": {"value": 24, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.5, "quantity": "metres"}, "total_floor_area": {"value": 54, "quantity": "square metres"}, "party_wall_length": {"value": 9, "quantity": "metres"}, "heat_loss_perimeter": {"value": 22, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "F", "party_wall_construction": 2, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "25mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 83, "solar_water_heating": "N", "habitable_room_count": 6, "heating_cost_current": {"value": 714, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.4, "energy_rating_average": 60, "energy_rating_current": 61, "lighting_cost_current": {"value": 85, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 429, "currency": "GBP"}, "hot_water_cost_current": {"value": 142, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 80, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 96, "currency": "GBP"}, "indicative_cost": "\u00a3100 - \u00a3350", "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 59}, {"sequence": 2, "typical_saving": {"value": 32, "currency": "GBP"}, "indicative_cost": "\u00a3300 - \u00a3600", "improvement_type": "B4", "improvement_details": {"improvement_number": 63}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 61}, {"sequence": 3, "typical_saving": {"value": 54, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 64}, {"sequence": 4, "typical_saving": {"value": 142, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 73}, {"sequence": 5, "typical_saving": {"value": 33, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 75}, {"sequence": 6, "typical_saving": {"value": 354, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 85, "environmental_impact_rating": 83}], "co2_emissions_potential": 1.4, "energy_rating_potential": 85, "lighting_cost_potential": {"value": 85, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 98, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 73, "environmental_impact_rating": 95}, {"sequence": 2, "typical_saving": {"value": 166, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 75, "environmental_impact_rating": 70}], "hot_water_cost_potential": {"value": 71, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2219, "impact_of_loft_insulation": -1605, "space_heating_existing_dwelling": 10014}, "energy_consumption_current": 257, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.1.0.1", "energy_consumption_potential": 78, "environmental_impact_current": 54, "fixed_lighting_outlets_count": 12, "windows_transmission_details": {"u_value": 2.8, "data_source": 2, "solar_transmittance": 0.76}, "current_energy_efficiency_band": "D", "environmental_impact_potential": 83, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 45, "low_energy_fixed_lighting_outlets_count": 10} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/PL36BL/cert-e5caf6a54908.json b/tests/fixtures/epc_prediction/PL36BL/cert-e5caf6a54908.json new file mode 100644 index 00000000..8bfc0162 --- /dev/null +++ b/tests/fixtures/epc_prediction/PL36BL/cert-e5caf6a54908.json @@ -0,0 +1 @@ +{"uprn": 10000796837, "roofs": [{"description": {"value": "Pitched, 12 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": {"value": "Cavity wall, filled cavity", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in 80% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "PL3 6BL", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 4, "created_at": "2021-05-13 15:04:31.766649", "door_count": 2, "glazed_area": 1, "glazing_gap": 12, "region_code": 15, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 118, "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Mid-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-83d067d9aac6", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2021-05-13", "inspection_date": "2019-12-19", "extensions_count": 0, "measurement_type": 2, "total_floor_area": 99, "transaction_type": 9, "conservatory_type": 1, "heated_room_count": 5, "pvc_window_frames": "true", "registration_date": "2021-05-13", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 310, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.5, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 58, "quantity": "square metres"}, "party_wall_length": {"value": 16, "quantity": "metres"}, "floor_construction": 3, "heat_loss_perimeter": {"value": 14, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.5, "quantity": "metres"}, "total_floor_area": {"value": 54, "quantity": "square metres"}, "party_wall_length": {"value": 14, "quantity": "metres"}, "heat_loss_perimeter": {"value": 12, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "F", "party_wall_construction": 2, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "12mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 80, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 746, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.5, "energy_rating_average": 60, "energy_rating_current": 60, "lighting_cost_current": {"value": 90, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 399, "currency": "GBP"}, "hot_water_cost_current": {"value": 142, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 80, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 162, "currency": "GBP"}, "indicative_cost": "\u00a3100 - \u00a3350", "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 62}, {"sequence": 2, "typical_saving": {"value": 57, "currency": "GBP"}, "indicative_cost": "\u00a3300 - \u00a3600", "improvement_type": "B4", "improvement_details": {"improvement_number": 63}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 65}, {"sequence": 3, "typical_saving": {"value": 34, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 67}, {"sequence": 4, "typical_saving": {"value": 132, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 75}, {"sequence": 5, "typical_saving": {"value": 33, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 77}, {"sequence": 6, "typical_saving": {"value": 354, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 87, "environmental_impact_rating": 85}], "co2_emissions_potential": 1.2, "energy_rating_potential": 87, "lighting_cost_potential": {"value": 90, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 98, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 75, "environmental_impact_rating": 95}, {"sequence": 2, "typical_saving": {"value": 150, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 76, "environmental_impact_rating": 72}], "hot_water_cost_potential": {"value": 71, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2232, "impact_of_loft_insulation": -2705, "space_heating_existing_dwelling": 10538}, "energy_consumption_current": 260, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.1.0.1", "energy_consumption_potential": 68, "environmental_impact_current": 53, "fixed_lighting_outlets_count": 10, "windows_transmission_details": {"u_value": 2.8, "data_source": 2, "solar_transmittance": 0.76}, "current_energy_efficiency_band": "D", "environmental_impact_potential": 85, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 46, "low_energy_fixed_lighting_outlets_count": 8} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RG13NS/cert-012fa6bcc804.json b/tests/fixtures/epc_prediction/RG13NS/cert-012fa6bcc804.json new file mode 100644 index 00000000..21e6280f --- /dev/null +++ b/tests/fixtures/epc_prediction/RG13NS/cert-012fa6bcc804.json @@ -0,0 +1 @@ +{"der": 6.84, "dfee": 18.7, "dper": 72.21, "uprn": 310091576, "roofs": [{"description": {"value": "(other premises above)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": {"value": "Average thermal transmittance 0.3 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "(other premises below)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "RG1 3NS", "data_type": 4, "hot_water": {"description": {"value": "Electric immersion, standard tariff", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 4, "created_at": "2026-05-14 00:26:46", "living_area": 16.5, "orientation": 1, "region_code": 17, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_flow_rate": 9.3, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "main_heating_code": 691, "main_heating_number": 1, "is_condensing_boiler": "false", "main_heating_control": 2602, "main_heating_category": 10, "main_heating_fraction": 1, "main_heating_data_source": 3, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false"}], "has_hot_water_cylinder": "true", "immersion_heating_type": 2, "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.2, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "false", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 21, "lighting_efficacy": 89.56}]], "terrain_type": 1, "air_tightness": {"description": {"value": "Air permeability [AP50] = 3.8 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Ground-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-377df279c38a", "address_line_2": "", "assessment_date": "2026-05-14", "assessment_type": "SAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "air_permeability": 3.8, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 3, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "flueless_gas_fires_count": 0, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "sap_flat_details": {"level": 1, "storeys": 5}, "total_floor_area": 77, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-14", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Windows", "type": 4, "u_value": 1.4, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 76.9, "sap_building_parts": [{"sap_roofs": [{"name": "Party roof 1", "u_value": 0, "roof_type": 4, "kappa_value": 90, "total_roof_area": 76.9}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.3, "wall_type": 2, "kappa_value": 70, "total_wall_area": 27, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 62, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 0, "total_wall_area": 169.52, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Windows", "width": 1.8, "height": 2.5, "location": "Walls (1)", "orientation": 5}, {"name": "Opening", "type": "Windows", "width": 2, "height": 2.5, "location": "Walls (1)", "orientation": 5}, {"name": "Opening", "type": "Windows", "width": 2, "height": 2.5, "location": "Walls (1)", "orientation": 5}], "construction_year": 2025, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0, "floor_type": 4, "kappa_value": 40, "storey_height": 2.6, "heat_loss_area": 0, "total_floor_area": 76.9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 188, "currency": "GBP"}, "co2_emissions_current": 0.5, "energy_rating_average": 60, "energy_rating_current": 72, "lighting_cost_current": {"value": 49, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Appliance thermostats", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 188, "currency": "GBP"}, "hot_water_cost_current": {"value": 673, "currency": "GBP"}, "user_interface_version": "3.1.57", "co2_emissions_potential": 0.5, "energy_rating_potential": 72, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 49, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 673, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 66, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 66, "environmental_impact_current": 94, "current_energy_efficiency_band": "C", "environmental_impact_potential": 94, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 6.2} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RG13NS/cert-219c647f317c.json b/tests/fixtures/epc_prediction/RG13NS/cert-219c647f317c.json new file mode 100644 index 00000000..26ecf88e --- /dev/null +++ b/tests/fixtures/epc_prediction/RG13NS/cert-219c647f317c.json @@ -0,0 +1 @@ +{"der": 9.11, "dfee": 17.1, "dper": 96.96, "uprn": 310091584, "roofs": [{"description": {"value": "(other premises above)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": {"value": "Average thermal transmittance 0.3 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "(other premises below)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "RG1 3NS", "data_type": 4, "hot_water": {"description": {"value": "Electric immersion, standard tariff", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 4, "created_at": "2026-05-14 00:34:23", "living_area": 25, "orientation": 5, "region_code": 17, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_flow_rate": 11, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "main_heating_code": 691, "main_heating_number": 1, "is_condensing_boiler": "false", "main_heating_control": 2602, "main_heating_category": 10, "main_heating_fraction": 1, "main_heating_data_source": 3, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false"}], "has_hot_water_cylinder": "true", "immersion_heating_type": 2, "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.2, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "false", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 21, "lighting_efficacy": 89.56}]], "terrain_type": 1, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.5 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Mid-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-d6d210ad2d2b", "address_line_2": "", "assessment_date": "2026-05-14", "assessment_type": "SAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "air_permeability": 4.5, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 2, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "flueless_gas_fires_count": 0, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "sap_flat_details": {"level": 2, "storeys": 5}, "total_floor_area": 42, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-14", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Windows", "type": 4, "u_value": 1.4, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 42.2, "sap_building_parts": [{"sap_roofs": [{"name": "Party roof 1", "u_value": 0, "roof_type": 4, "kappa_value": 90, "total_roof_area": 42.2}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.3, "wall_type": 2, "kappa_value": 70, "total_wall_area": 13.9, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 55.25, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 0, "total_wall_area": 43.4, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Windows", "width": 1.4, "height": 1.8, "location": "Walls (1)", "orientation": 1}], "construction_year": 2025, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 1, "u_value": 0, "floor_type": 4, "kappa_value": 40, "storey_height": 2.6, "heat_loss_area": 0, "total_floor_area": 42.2}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 82, "currency": "GBP"}, "co2_emissions_current": 0.4, "energy_rating_average": 60, "energy_rating_current": 71, "lighting_cost_current": {"value": 39, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Appliance thermostats", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 82, "currency": "GBP"}, "hot_water_cost_current": {"value": 571, "currency": "GBP"}, "user_interface_version": "3.1.57", "co2_emissions_potential": 0.4, "energy_rating_potential": 71, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 39, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 571, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 91, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 91, "environmental_impact_current": 94, "current_energy_efficiency_band": "C", "environmental_impact_potential": 94, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 8.5} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RG13NS/cert-275720156db0.json b/tests/fixtures/epc_prediction/RG13NS/cert-275720156db0.json new file mode 100644 index 00000000..5b6a44d4 --- /dev/null +++ b/tests/fixtures/epc_prediction/RG13NS/cert-275720156db0.json @@ -0,0 +1 @@ +{"der": 10.41, "dfee": 32.9, "dper": 109.6, "uprn": 310091564, "roofs": [{"description": {"value": "(other premises above)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": {"value": "Average thermal transmittance 0.3 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "(other premises below)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "RG1 3NS", "data_type": 4, "hot_water": {"description": {"value": "Electric immersion, standard tariff, waste water heat recovery", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 3, "created_at": "2026-05-14 00:16:14", "living_area": 30, "orientation": 1, "region_code": 17, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 2, "shower_flow_rate": 9.3, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 903, "instantaneous_wwhrs": {"wwhrs_index_number1": 80074}, "hot_water_store_size": 150, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "main_heating_code": 691, "main_heating_number": 1, "is_condensing_boiler": "false", "main_heating_control": 2602, "main_heating_category": 10, "main_heating_fraction": 1, "main_heating_data_source": 3, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false"}], "has_hot_water_cylinder": "true", "immersion_heating_type": 2, "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.2, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "false", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 18, "lighting_efficacy": 89.56}]], "terrain_type": 1, "air_tightness": {"description": {"value": "Air permeability [AP50] = 3.0 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Ground-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-1ce1d93890e7", "address_line_2": "", "assessment_date": "2026-05-14", "assessment_type": "SAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "air_permeability": 3, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 2, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "flueless_gas_fires_count": 0, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "sap_flat_details": {"level": 1, "storeys": 5}, "total_floor_area": 38, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-14", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Windows", "type": 4, "u_value": 1.6, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 38.3, "sap_building_parts": [{"sap_roofs": [{"name": "Party roof 1", "u_value": 0, "roof_type": 4, "kappa_value": 90, "total_roof_area": 38.3}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.3, "wall_type": 2, "kappa_value": 70, "total_wall_area": 27.15, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 36.4, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 0, "total_wall_area": 41.6, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Windows", "width": 1.8, "height": 2.5, "location": "Walls (1)", "orientation": 5}, {"name": "Opening 1", "type": "Windows", "width": 1.8, "height": 2.5, "location": "Walls (1)", "orientation": 5}, {"name": "Opening 2", "type": "Windows", "width": 1.9, "height": 1.8, "location": "Walls (1)", "orientation": 7}], "construction_year": 2025, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0, "floor_type": 4, "kappa_value": 40, "storey_height": 2.55, "heat_loss_area": 0, "total_floor_area": 38.3}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 185, "currency": "GBP"}, "co2_emissions_current": 0.4, "energy_rating_average": 60, "energy_rating_current": 69, "lighting_cost_current": {"value": 28, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Appliance thermostats", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 185, "currency": "GBP"}, "hot_water_cost_current": {"value": 473, "currency": "GBP"}, "user_interface_version": "3.1.57", "co2_emissions_potential": 0.4, "energy_rating_potential": 69, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 28, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 473, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 100, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 100, "environmental_impact_current": 94, "current_energy_efficiency_band": "C", "environmental_impact_potential": 94, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 9.4} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RG13NS/cert-2f49ca73f5bd.json b/tests/fixtures/epc_prediction/RG13NS/cert-2f49ca73f5bd.json new file mode 100644 index 00000000..ae878a1f --- /dev/null +++ b/tests/fixtures/epc_prediction/RG13NS/cert-2f49ca73f5bd.json @@ -0,0 +1 @@ +{"der": 8.05, "dfee": 28.0, "dper": 84.48, "uprn": 310091570, "roofs": [{"description": {"value": "(other premises above)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": {"value": "Average thermal transmittance 0.44 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "(other premises below)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "RG1 3NS", "data_type": 4, "hot_water": {"description": {"value": "Electric immersion, standard tariff", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 4, "created_at": "2026-05-14 00:21:54", "living_area": 18, "orientation": 1, "region_code": 17, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_flow_rate": 9, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "main_heating_code": 691, "main_heating_number": 1, "is_condensing_boiler": "false", "main_heating_control": 2602, "main_heating_category": 10, "main_heating_fraction": 1, "main_heating_data_source": 3, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false"}], "has_hot_water_cylinder": "true", "immersion_heating_type": 2, "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.1, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "false", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 21, "lighting_efficacy": 89.56}]], "terrain_type": 1, "air_tightness": {"description": {"value": "Air permeability [AP50] = 3.6 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Ground-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-d76b99e2b4e6", "address_line_2": "", "assessment_date": "2026-05-14", "assessment_type": "SAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "air_permeability": 3.6, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 2, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 2, "blocked_chimneys_count": 0, "flueless_gas_fires_count": 0, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "sap_flat_details": {"level": 1, "storeys": 5}, "total_floor_area": 71, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-14", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Windows", "type": 4, "u_value": 1.4, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 71.3, "sap_building_parts": [{"sap_roofs": [{"name": "Party roof 1", "u_value": 0, "roof_type": 4, "kappa_value": 90, "total_roof_area": 71.3}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.3, "wall_type": 2, "kappa_value": 70, "total_wall_area": 26.7, "is_curtain_walling": "false"}, {"name": "Walls (2)", "u_value": 0.52, "wall_type": 2, "kappa_value": 190, "total_wall_area": 12.25, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 53.69, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 0, "total_wall_area": 140.9, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Windows", "width": 2, "height": 2.5, "location": "Walls (1)", "orientation": 5}, {"name": "Opening 1", "type": "Windows", "width": 2, "height": 2.5, "location": "Walls (1)", "orientation": 5}, {"name": "Opening", "type": "Windows", "width": 1.9, "height": 2.5, "location": "Walls (1)", "orientation": 3}, {"name": "Opening", "type": "Windows", "width": 1.9, "height": 2.5, "location": "Walls (1)", "orientation": 3}], "construction_year": 2025, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0, "floor_type": 4, "kappa_value": 40, "storey_height": 2.5, "heat_loss_area": 0, "total_floor_area": 71.3}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 287, "currency": "GBP"}, "co2_emissions_current": 0.5, "energy_rating_average": 60, "energy_rating_current": 69, "lighting_cost_current": {"value": 45, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Appliance thermostats", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 287, "currency": "GBP"}, "hot_water_cost_current": {"value": 638, "currency": "GBP"}, "user_interface_version": "3.1.57", "co2_emissions_potential": 0.5, "energy_rating_potential": 69, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 45, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 638, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 76, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 76, "environmental_impact_current": 94, "current_energy_efficiency_band": "C", "environmental_impact_potential": 94, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 7.2} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RG13NS/cert-30dc65e9be56.json b/tests/fixtures/epc_prediction/RG13NS/cert-30dc65e9be56.json new file mode 100644 index 00000000..c6b122b8 --- /dev/null +++ b/tests/fixtures/epc_prediction/RG13NS/cert-30dc65e9be56.json @@ -0,0 +1 @@ +{"der": 9.14, "dfee": 27.0, "dper": 96.26, "uprn": 310091583, "roofs": [{"description": {"value": "(other premises above)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": {"value": "Average thermal transmittance 0.3 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "(other premises below)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "RG1 3NS", "data_type": 4, "hot_water": {"description": {"value": "Electric immersion, standard tariff", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 3, "created_at": "2026-05-14 00:33:50", "living_area": 25, "orientation": 5, "region_code": 17, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_flow_rate": 9, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "main_heating_code": 691, "main_heating_number": 1, "is_condensing_boiler": "false", "main_heating_control": 2602, "main_heating_category": 10, "main_heating_fraction": 1, "main_heating_data_source": 3, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false"}], "has_hot_water_cylinder": "true", "immersion_heating_type": 2, "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.2, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "false", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 21, "lighting_efficacy": 89.56}]], "terrain_type": 1, "air_tightness": {"description": {"value": "Air permeability [AP50] = 3.6 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Mid-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-a979a429f6f4", "address_line_2": "", "assessment_date": "2026-05-14", "assessment_type": "SAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "air_permeability": 3.6, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 2, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "flueless_gas_fires_count": 0, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "sap_flat_details": {"level": 2, "storeys": 5}, "total_floor_area": 52, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-14", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Windows", "type": 4, "u_value": 1.6, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 51.7, "sap_building_parts": [{"sap_roofs": [{"name": "Party roof 1", "u_value": 0, "roof_type": 4, "kappa_value": 90, "total_roof_area": 51.7}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.3, "wall_type": 2, "kappa_value": 70, "total_wall_area": 27.6, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 49.27, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 0, "total_wall_area": 83.95, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Windows", "width": 1.4, "height": 1.8, "location": "Walls (1)", "orientation": 1}, {"name": "Opening 1", "type": "Windows", "width": 1.4, "height": 1.8, "location": "Walls (1)", "orientation": 1}, {"name": "Opening 2", "type": "Windows", "width": 1.5, "height": 1.8, "location": "Walls (1)", "orientation": 7}], "construction_year": 2025, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 1, "u_value": 0, "floor_type": 4, "kappa_value": 40, "storey_height": 2.5, "heat_loss_area": 0, "total_floor_area": 51.7}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 214, "currency": "GBP"}, "co2_emissions_current": 0.4, "energy_rating_average": 60, "energy_rating_current": 69, "lighting_cost_current": {"value": 36, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Appliance thermostats", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 214, "currency": "GBP"}, "hot_water_cost_current": {"value": 561, "currency": "GBP"}, "user_interface_version": "3.1.57", "co2_emissions_potential": 0.4, "energy_rating_potential": 69, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 36, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 561, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 87, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 87, "environmental_impact_current": 94, "current_energy_efficiency_band": "C", "environmental_impact_potential": 94, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 8.3} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RG13NS/cert-3711c927db34.json b/tests/fixtures/epc_prediction/RG13NS/cert-3711c927db34.json new file mode 100644 index 00000000..3a7e532e --- /dev/null +++ b/tests/fixtures/epc_prediction/RG13NS/cert-3711c927db34.json @@ -0,0 +1 @@ +{"der": 7.39, "dfee": 23.9, "dper": 77.69, "uprn": 310091577, "roofs": [{"description": {"value": "(other premises above)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": {"value": "Average thermal transmittance 0.3 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "(other premises below)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "RG1 3NS", "data_type": 4, "hot_water": {"description": {"value": "Electric immersion, standard tariff", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 4, "created_at": "2026-05-14 00:27:56", "living_area": 29, "orientation": 1, "region_code": 17, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_flow_rate": 9.3, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "main_heating_code": 691, "main_heating_number": 1, "is_condensing_boiler": "false", "main_heating_control": 2602, "main_heating_category": 10, "main_heating_fraction": 1, "main_heating_data_source": 3, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false"}], "has_hot_water_cylinder": "true", "immersion_heating_type": 2, "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.2, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "false", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 21, "lighting_efficacy": 89.56}]], "terrain_type": 1, "air_tightness": {"description": {"value": "Air permeability [AP50] = 3.8 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Ground-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-e2ee92618dc0", "address_line_2": "", "assessment_date": "2026-05-14", "assessment_type": "SAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "air_permeability": 3.8, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 2, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "flueless_gas_fires_count": 0, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "sap_flat_details": {"level": 1, "storeys": 5}, "total_floor_area": 78, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-14", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Windows", "type": 4, "u_value": 1.4, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 77.5, "sap_building_parts": [{"sap_roofs": [{"name": "Party roof 1", "u_value": 0, "roof_type": 4, "kappa_value": 90, "total_roof_area": 77.5}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.3, "wall_type": 2, "kappa_value": 70, "total_wall_area": 36.53, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 58.35, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 0, "total_wall_area": 115.7, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Windows", "width": 2, "height": 2.5, "location": "Walls (1)", "orientation": 5}, {"name": "Opening 1", "type": "Windows", "width": 2, "height": 2.5, "location": "Walls (1)", "orientation": 5}, {"name": "Opening 1", "type": "Windows", "width": 2, "height": 2.5, "location": "Walls (1)", "orientation": 5}, {"name": "Opening", "type": "Windows", "width": 1.9, "height": 2.6, "location": "Walls (1)", "orientation": 7}], "construction_year": 2025, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0, "floor_type": 4, "kappa_value": 40, "storey_height": 2.55, "heat_loss_area": 0, "total_floor_area": 77.5}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 256, "currency": "GBP"}, "co2_emissions_current": 0.5, "energy_rating_average": 60, "energy_rating_current": 70, "lighting_cost_current": {"value": 48, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Appliance thermostats", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 256, "currency": "GBP"}, "hot_water_cost_current": {"value": 675, "currency": "GBP"}, "user_interface_version": "3.1.57", "co2_emissions_potential": 0.5, "energy_rating_potential": 70, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 48, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 675, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 70, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 70, "environmental_impact_current": 94, "current_energy_efficiency_band": "C", "environmental_impact_potential": 94, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 6.7} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RG13NS/cert-4b7df9c37060.json b/tests/fixtures/epc_prediction/RG13NS/cert-4b7df9c37060.json new file mode 100644 index 00000000..3694157f --- /dev/null +++ b/tests/fixtures/epc_prediction/RG13NS/cert-4b7df9c37060.json @@ -0,0 +1 @@ +{"der": 8.19, "dfee": 21.4, "dper": 86.59, "uprn": 310091585, "roofs": [{"description": {"value": "(other premises above)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": {"value": "Average thermal transmittance 0.3 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "(other premises below)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "RG1 3NS", "data_type": 4, "hot_water": {"description": {"value": "Electric immersion, standard tariff", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 4, "created_at": "2026-05-14 00:34:57", "living_area": 26.5, "orientation": 5, "region_code": 17, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_flow_rate": 9.1, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "main_heating_code": 691, "main_heating_number": 1, "is_condensing_boiler": "false", "main_heating_control": 2602, "main_heating_category": 10, "main_heating_fraction": 1, "main_heating_data_source": 3, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false"}], "has_hot_water_cylinder": "true", "immersion_heating_type": 2, "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.2, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "false", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 21, "lighting_efficacy": 89.56}]], "terrain_type": 1, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.5 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Mid-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-cd435dfdc23e", "address_line_2": "", "assessment_date": "2026-05-14", "assessment_type": "SAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "air_permeability": 4.5, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 2, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "flueless_gas_fires_count": 0, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "sap_flat_details": {"level": 2, "storeys": 5}, "total_floor_area": 54, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-14", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Windows", "type": 4, "u_value": 1.4, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 54.5, "sap_building_parts": [{"sap_roofs": [{"name": "Party roof 1", "u_value": 0, "roof_type": 4, "kappa_value": 90, "total_roof_area": 54.5}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.3, "wall_type": 2, "kappa_value": 70, "total_wall_area": 17.8, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 59.93, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 0, "total_wall_area": 68.65, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Windows", "width": 3.2, "height": 2.5, "location": "Walls (1)", "orientation": 1}], "construction_year": 2025, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 1, "u_value": 0, "floor_type": 4, "kappa_value": 40, "storey_height": 2.5, "heat_loss_area": 0, "total_floor_area": 54.5}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 159, "currency": "GBP"}, "co2_emissions_current": 0.4, "energy_rating_average": 60, "energy_rating_current": 71, "lighting_cost_current": {"value": 38, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Appliance thermostats", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 159, "currency": "GBP"}, "hot_water_cost_current": {"value": 577, "currency": "GBP"}, "user_interface_version": "3.1.57", "co2_emissions_potential": 0.4, "energy_rating_potential": 71, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 38, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 577, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 79, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 79, "environmental_impact_current": 94, "current_energy_efficiency_band": "C", "environmental_impact_potential": 94, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 7.4} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RG13NS/cert-4e21bc8153e8.json b/tests/fixtures/epc_prediction/RG13NS/cert-4e21bc8153e8.json new file mode 100644 index 00000000..77551d51 --- /dev/null +++ b/tests/fixtures/epc_prediction/RG13NS/cert-4e21bc8153e8.json @@ -0,0 +1 @@ +{"der": 7.92, "dfee": 17.8, "dper": 83.99, "uprn": 310091581, "roofs": [{"description": {"value": "(other premises above)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": {"value": "Average thermal transmittance 0.3 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "(other premises below)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "RG1 3NS", "data_type": 4, "hot_water": {"description": {"value": "Electric immersion, standard tariff", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 4, "created_at": "2026-05-14 00:31:34", "living_area": 17, "orientation": 1, "region_code": 17, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_flow_rate": 9.3, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "main_heating_code": 691, "main_heating_number": 1, "is_condensing_boiler": "false", "main_heating_control": 2602, "main_heating_category": 10, "main_heating_fraction": 1, "main_heating_data_source": 3, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false"}], "has_hot_water_cylinder": "true", "immersion_heating_type": 2, "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.2, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "false", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 18, "lighting_efficacy": 89.56}]], "terrain_type": 1, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.5 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Mid-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-b544bde28cbd", "address_line_2": "", "assessment_date": "2026-05-14", "assessment_type": "SAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "air_permeability": 4.5, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 2, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "flueless_gas_fires_count": 0, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "sap_flat_details": {"level": 2, "storeys": 5}, "total_floor_area": 52, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-14", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Windows", "type": 4, "u_value": 1.6, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 51.6, "sap_building_parts": [{"sap_roofs": [{"name": "Party roof 1", "u_value": 0, "roof_type": 4, "kappa_value": 90, "total_roof_area": 51.6}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.3, "wall_type": 2, "kappa_value": 70, "total_wall_area": 18.85, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 68.4, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 0, "total_wall_area": 88.4, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Windows", "width": 1.8, "height": 1.7, "location": "Walls (1)", "orientation": 5}, {"name": "Opening 1", "type": "Windows", "width": 1.8, "height": 1.7, "location": "Walls (1)", "orientation": 5}], "construction_year": 2025, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 1, "u_value": 0, "floor_type": 4, "kappa_value": 40, "storey_height": 2.6, "heat_loss_area": 0, "total_floor_area": 51.6}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 114, "currency": "GBP"}, "co2_emissions_current": 0.4, "energy_rating_average": 60, "energy_rating_current": 73, "lighting_cost_current": {"value": 38, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Appliance thermostats", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 114, "currency": "GBP"}, "hot_water_cost_current": {"value": 569, "currency": "GBP"}, "user_interface_version": "3.1.57", "co2_emissions_potential": 0.4, "energy_rating_potential": 73, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 38, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 569, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 77, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 77, "environmental_impact_current": 94, "current_energy_efficiency_band": "C", "environmental_impact_potential": 94, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 7.3} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RG13NS/cert-57f30bfdbe7b.json b/tests/fixtures/epc_prediction/RG13NS/cert-57f30bfdbe7b.json new file mode 100644 index 00000000..c996ccd1 --- /dev/null +++ b/tests/fixtures/epc_prediction/RG13NS/cert-57f30bfdbe7b.json @@ -0,0 +1 @@ +{"der": 7.91, "dfee": 34.1, "dper": 82.53, "uprn": 310091569, "roofs": [{"description": {"value": "(other premises above)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": {"value": "Average thermal transmittance 0.28 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "(other premises below)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "RG1 3NS", "data_type": 4, "hot_water": {"description": {"value": "Electric immersion, standard tariff, waste water heat recovery", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 3, "created_at": "2026-05-14 00:20:16", "living_area": 24, "orientation": 5, "region_code": 17, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 2, "shower_flow_rate": 9, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 903, "instantaneous_wwhrs": {"wwhrs_index_number1": 80199}, "hot_water_store_size": 150, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "main_heating_code": 691, "main_heating_number": 1, "is_condensing_boiler": "false", "main_heating_control": 2602, "main_heating_category": 10, "main_heating_fraction": 1, "main_heating_data_source": 3, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false"}], "has_hot_water_cylinder": "true", "immersion_heating_type": 2, "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.2, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "false", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 21, "lighting_efficacy": 89.56}]], "terrain_type": 1, "air_tightness": {"description": {"value": "Air permeability [AP50] = 3.6 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Ground-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-a893c0b1760a", "address_line_2": "", "assessment_date": "2026-05-14", "assessment_type": "SAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "air_permeability": 3.6, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 2, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 2, "blocked_chimneys_count": 0, "flueless_gas_fires_count": 0, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "sap_flat_details": {"level": 1, "storeys": 5}, "total_floor_area": 72, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-14", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Windows", "type": 4, "u_value": 1.4, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 72.2, "sap_building_parts": [{"sap_roofs": [{"name": "Party roof 1", "u_value": 0, "roof_type": 4, "kappa_value": 90, "total_roof_area": 72.2}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.28, "wall_type": 2, "kappa_value": 70, "total_wall_area": 41, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 44.45, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 0, "total_wall_area": 136.5, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Windows", "width": 2, "height": 2.5, "location": "Walls (1)", "orientation": 1}, {"name": "Opening 1", "type": "Windows", "width": 2, "height": 2.5, "location": "Walls (1)", "orientation": 1}, {"name": "Opening 1", "type": "Windows", "width": 2, "height": 2.5, "location": "Walls (1)", "orientation": 1}, {"name": "Opening", "type": "Windows", "width": 1.9, "height": 2.5, "location": "Walls (1)", "orientation": 3}, {"name": "Opening", "type": "Windows", "width": 1.9, "height": 2.5, "location": "Walls (1)", "orientation": 3}], "construction_year": 2025, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0, "floor_type": 4, "kappa_value": 40, "storey_height": 2.4, "heat_loss_area": 0, "total_floor_area": 72.2}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 392, "currency": "GBP"}, "co2_emissions_current": 0.5, "energy_rating_average": 60, "energy_rating_current": 70, "lighting_cost_current": {"value": 46, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Appliance thermostats", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 392, "currency": "GBP"}, "hot_water_cost_current": {"value": 505, "currency": "GBP"}, "user_interface_version": "3.1.57", "co2_emissions_potential": 0.5, "energy_rating_potential": 70, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 46, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 505, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 73, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 73, "environmental_impact_current": 94, "current_energy_efficiency_band": "C", "environmental_impact_potential": 94, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 7.0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RG13NS/cert-61d34287b460.json b/tests/fixtures/epc_prediction/RG13NS/cert-61d34287b460.json new file mode 100644 index 00000000..83da28af --- /dev/null +++ b/tests/fixtures/epc_prediction/RG13NS/cert-61d34287b460.json @@ -0,0 +1 @@ +{"der": 8.3, "dfee": 19.9, "dper": 87.9, "uprn": 310091568, "roofs": [{"description": {"value": "(other premises above)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": {"value": "Average thermal transmittance 0.3 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "(other premises below)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "RG1 3NS", "data_type": 4, "hot_water": {"description": {"value": "Electric immersion, standard tariff", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 4, "created_at": "2026-05-14 00:19:38", "living_area": 23, "orientation": 5, "region_code": 17, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_flow_rate": 9.3, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "main_heating_code": 691, "main_heating_number": 1, "is_condensing_boiler": "false", "main_heating_control": 2602, "main_heating_category": 10, "main_heating_fraction": 1, "main_heating_data_source": 3, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false"}], "has_hot_water_cylinder": "true", "immersion_heating_type": 2, "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.2, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "false", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 21, "lighting_efficacy": 89.56}]], "terrain_type": 1, "air_tightness": {"description": {"value": "Air permeability [AP50] = 3.6 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Ground-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-9c159091c9ce", "address_line_2": "", "assessment_date": "2026-05-14", "assessment_type": "SAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "air_permeability": 3.6, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 2, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "flueless_gas_fires_count": 0, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "sap_flat_details": {"level": 1, "storeys": 5}, "total_floor_area": 51, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-14", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Windows", "type": 4, "u_value": 1.6, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 51, "sap_building_parts": [{"sap_roofs": [{"name": "Party roof 1", "u_value": 0, "roof_type": 4, "kappa_value": 90, "total_roof_area": 51}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.3, "wall_type": 2, "kappa_value": 70, "total_wall_area": 16.9, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 58.25, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 0, "total_wall_area": 98.8, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Windows", "width": 2, "height": 2.5, "location": "Walls (1)", "orientation": 1}], "construction_year": 2025, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0, "floor_type": 4, "kappa_value": 40, "storey_height": 2.6, "heat_loss_area": 0, "total_floor_area": 51}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 139, "currency": "GBP"}, "co2_emissions_current": 0.4, "energy_rating_average": 60, "energy_rating_current": 72, "lighting_cost_current": {"value": 39, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Appliance thermostats", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 139, "currency": "GBP"}, "hot_water_cost_current": {"value": 566, "currency": "GBP"}, "user_interface_version": "3.1.57", "co2_emissions_potential": 0.4, "energy_rating_potential": 72, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 39, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 566, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 81, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 81, "environmental_impact_current": 94, "current_energy_efficiency_band": "C", "environmental_impact_potential": 94, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 7.6} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RG13NS/cert-68447442fa47.json b/tests/fixtures/epc_prediction/RG13NS/cert-68447442fa47.json new file mode 100644 index 00000000..4a48a56a --- /dev/null +++ b/tests/fixtures/epc_prediction/RG13NS/cert-68447442fa47.json @@ -0,0 +1 @@ +{"der": 9.33, "dfee": 21.5, "dper": 99.0, "uprn": 310091575, "roofs": [{"description": {"value": "(other premises above)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": {"value": "Average thermal transmittance 0.3 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "(other premises below)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "RG1 3NS", "data_type": 4, "hot_water": {"description": {"value": "Electric immersion, standard tariff", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 4, "created_at": "2026-05-14 00:25:55", "living_area": 31, "orientation": 1, "region_code": 17, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_flow_rate": 9.3, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "main_heating_code": 691, "main_heating_number": 1, "is_condensing_boiler": "false", "main_heating_control": 2602, "main_heating_category": 10, "main_heating_fraction": 1, "main_heating_data_source": 3, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false"}], "has_hot_water_cylinder": "true", "immersion_heating_type": 2, "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.2, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "false", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 21, "lighting_efficacy": 89.56}]], "terrain_type": 1, "air_tightness": {"description": {"value": "Air permeability [AP50] = 3.8 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Ground-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-eb369a055b68", "address_line_2": "", "assessment_date": "2026-05-14", "assessment_type": "SAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "air_permeability": 3.8, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 2, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "flueless_gas_fires_count": 0, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "sap_flat_details": {"level": 1, "storeys": 5}, "total_floor_area": 38, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-14", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Windows", "type": 4, "u_value": 1.4, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 38.2, "sap_building_parts": [{"sap_roofs": [{"name": "Party roof 1", "u_value": 0, "roof_type": 4, "kappa_value": 90, "total_roof_area": 38.2}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.3, "wall_type": 2, "kappa_value": 70, "total_wall_area": 16, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 58.25, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 0, "total_wall_area": 52.5, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening", "type": "Windows", "width": 2, "height": 2.5, "location": "Walls (1)", "orientation": 5}, {"name": "Opening", "type": "Windows", "width": 2, "height": 2.5, "location": "Walls (1)", "orientation": 5}], "construction_year": 2025, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0, "floor_type": 4, "kappa_value": 40, "storey_height": 2.6, "heat_loss_area": 0, "total_floor_area": 38.2}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 92, "currency": "GBP"}, "co2_emissions_current": 0.3, "energy_rating_average": 60, "energy_rating_current": 72, "lighting_cost_current": {"value": 29, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Appliance thermostats", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 92, "currency": "GBP"}, "hot_water_cost_current": {"value": 510, "currency": "GBP"}, "user_interface_version": "3.1.57", "co2_emissions_potential": 0.3, "energy_rating_potential": 72, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 29, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 510, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 92, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 92, "environmental_impact_current": 94, "current_energy_efficiency_band": "C", "environmental_impact_potential": 94, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 8.6} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RG13NS/cert-7e14aa2076f0.json b/tests/fixtures/epc_prediction/RG13NS/cert-7e14aa2076f0.json new file mode 100644 index 00000000..ecbf637d --- /dev/null +++ b/tests/fixtures/epc_prediction/RG13NS/cert-7e14aa2076f0.json @@ -0,0 +1 @@ +{"der": 8.34, "dfee": 22.1, "dper": 88.15, "uprn": 310091567, "roofs": [{"description": {"value": "(other premises above)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": {"value": "Average thermal transmittance 0.3 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "(other premises below)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "RG1 3NS", "data_type": 4, "hot_water": {"description": {"value": "Electric immersion, standard tariff", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 4, "created_at": "2026-05-14 00:18:48", "living_area": 26.5, "orientation": 5, "region_code": 17, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_flow_rate": 9.3, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "main_heating_code": 691, "main_heating_number": 1, "is_condensing_boiler": "false", "main_heating_control": 2602, "main_heating_category": 10, "main_heating_fraction": 1, "main_heating_data_source": 3, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false"}], "has_hot_water_cylinder": "true", "immersion_heating_type": 2, "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.2, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "false", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 21, "lighting_efficacy": 89.56}]], "terrain_type": 1, "air_tightness": {"description": {"value": "Air permeability [AP50] = 3.6 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Ground-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-1496a34ccd25", "address_line_2": "", "assessment_date": "2026-05-14", "assessment_type": "SAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "air_permeability": 3.6, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 2, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "flueless_gas_fires_count": 0, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "sap_flat_details": {"level": 1, "storeys": 5}, "total_floor_area": 54, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-14", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Windows", "type": 4, "u_value": 1.4, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 54.5, "sap_building_parts": [{"sap_roofs": [{"name": "Party roof 1", "u_value": 0, "roof_type": 4, "kappa_value": 90, "total_roof_area": 54.5}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.3, "wall_type": 2, "kappa_value": 70, "total_wall_area": 18.6, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 59.93, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 0, "total_wall_area": 68.65, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Windows", "width": 3.2, "height": 2.5, "location": "Walls (1)", "orientation": 1}], "construction_year": 2025, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0, "floor_type": 4, "kappa_value": 40, "storey_height": 2.6, "heat_loss_area": 0, "total_floor_area": 54.5}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 169, "currency": "GBP"}, "co2_emissions_current": 0.4, "energy_rating_average": 60, "energy_rating_current": 71, "lighting_cost_current": {"value": 38, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Appliance thermostats", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 169, "currency": "GBP"}, "hot_water_cost_current": {"value": 583, "currency": "GBP"}, "user_interface_version": "3.1.57", "co2_emissions_potential": 0.4, "energy_rating_potential": 71, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 38, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 583, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 80, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 80, "environmental_impact_current": 94, "current_energy_efficiency_band": "C", "environmental_impact_potential": 94, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 7.6} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RG13NS/cert-83fa2282454e.json b/tests/fixtures/epc_prediction/RG13NS/cert-83fa2282454e.json new file mode 100644 index 00000000..8bd8daa8 --- /dev/null +++ b/tests/fixtures/epc_prediction/RG13NS/cert-83fa2282454e.json @@ -0,0 +1 @@ +{"der": 9.2, "dfee": 27.9, "dper": 96.88, "uprn": 310091565, "roofs": [{"description": {"value": "(other premises above)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": {"value": "Average thermal transmittance 0.28 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "(other premises below)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "RG1 3NS", "data_type": 4, "hot_water": {"description": {"value": "Electric immersion, standard tariff", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 3, "created_at": "2026-05-14 00:17:23", "living_area": 25, "orientation": 5, "region_code": 17, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_flow_rate": 9, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "main_heating_code": 691, "main_heating_number": 1, "is_condensing_boiler": "false", "main_heating_control": 2602, "main_heating_category": 10, "main_heating_fraction": 1, "main_heating_data_source": 3, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false"}], "has_hot_water_cylinder": "true", "immersion_heating_type": 2, "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.2, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "false", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 21, "lighting_efficacy": 89.56}]], "terrain_type": 1, "air_tightness": {"description": {"value": "Air permeability [AP50] = 3.0 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Ground-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-4f46b47bf535", "address_line_2": "", "assessment_date": "2026-05-14", "assessment_type": "SAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "air_permeability": 3, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 2, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "flueless_gas_fires_count": 0, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "sap_flat_details": {"level": 1, "storeys": 5}, "total_floor_area": 52, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-14", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Windows", "type": 4, "u_value": 1.6, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 51.7, "sap_building_parts": [{"sap_roofs": [{"name": "Party roof 1", "u_value": 0, "roof_type": 4, "kappa_value": 90, "total_roof_area": 51.7}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.28, "wall_type": 2, "kappa_value": 70, "total_wall_area": 27.5, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 49.27, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 0, "total_wall_area": 83.95, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Windows", "width": 2, "height": 2.5, "location": "Walls (1)", "orientation": 1}, {"name": "Opening 2", "type": "Windows", "width": 1.9, "height": 2.5, "location": "Walls (1)", "orientation": 7}], "construction_year": 2025, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0, "floor_type": 4, "kappa_value": 40, "storey_height": 2.5, "heat_loss_area": 0, "total_floor_area": 51.7}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 220, "currency": "GBP"}, "co2_emissions_current": 0.4, "energy_rating_average": 60, "energy_rating_current": 69, "lighting_cost_current": {"value": 35, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Appliance thermostats", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 220, "currency": "GBP"}, "hot_water_cost_current": {"value": 561, "currency": "GBP"}, "user_interface_version": "3.1.57", "co2_emissions_potential": 0.4, "energy_rating_potential": 69, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 35, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 561, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 88, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 88, "environmental_impact_current": 94, "current_energy_efficiency_band": "C", "environmental_impact_potential": 94, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 8.3} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RG13NS/cert-8978dcc72852.json b/tests/fixtures/epc_prediction/RG13NS/cert-8978dcc72852.json new file mode 100644 index 00000000..f0cc8364 --- /dev/null +++ b/tests/fixtures/epc_prediction/RG13NS/cert-8978dcc72852.json @@ -0,0 +1 @@ +{"der": 8.11, "dfee": 31.9, "dper": 84.83, "uprn": 310091573, "roofs": [{"description": {"value": "(other premises above)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": {"value": "Average thermal transmittance 0.28 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "(other premises below)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "RG1 3NS", "data_type": 4, "hot_water": {"description": {"value": "Electric immersion, standard tariff, waste water heat recovery", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 4, "created_at": "2026-05-14 00:24:37", "living_area": 16.5, "orientation": 5, "region_code": 17, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 2, "shower_flow_rate": 9.3, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 903, "instantaneous_wwhrs": {"wwhrs_index_number1": 80011}, "hot_water_store_size": 150, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "main_heating_code": 691, "main_heating_number": 1, "is_condensing_boiler": "false", "main_heating_control": 2602, "main_heating_category": 10, "main_heating_fraction": 1, "main_heating_data_source": 3, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false"}], "has_hot_water_cylinder": "true", "immersion_heating_type": 2, "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.2, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "false", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 21, "lighting_efficacy": 89.56}]], "terrain_type": 1, "air_tightness": {"description": {"value": "Air permeability [AP50] = 3.8 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Ground-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-1b762366cdf7", "address_line_2": "", "assessment_date": "2026-05-14", "assessment_type": "SAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "air_permeability": 3.8, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 2, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 2, "blocked_chimneys_count": 0, "flueless_gas_fires_count": 0, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "sap_flat_details": {"level": 1, "storeys": 5}, "total_floor_area": 72, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-14", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Windows", "type": 4, "u_value": 1.6, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 72, "sap_building_parts": [{"sap_roofs": [{"name": "Party roof 1", "u_value": 0, "roof_type": 4, "kappa_value": 90, "total_roof_area": 72}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.28, "wall_type": 2, "kappa_value": 70, "total_wall_area": 34, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 60.71, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 0, "total_wall_area": 129, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening", "type": "Windows", "width": 2, "height": 2.5, "location": "Walls (1)", "orientation": 1}, {"name": "Opening", "type": "Windows", "width": 2, "height": 2.5, "location": "Walls (1)", "orientation": 1}, {"name": "Opening", "type": "Windows", "width": 1.9, "height": 2.5, "location": "Walls (1)", "orientation": 3}, {"name": "Opening", "type": "Windows", "width": 1.9, "height": 2.5, "location": "Walls (1)", "orientation": 3}], "construction_year": 2025, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0, "floor_type": 4, "kappa_value": 40, "storey_height": 2.5, "heat_loss_area": 0, "total_floor_area": 72}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 360, "currency": "GBP"}, "co2_emissions_current": 0.5, "energy_rating_average": 60, "energy_rating_current": 69, "lighting_cost_current": {"value": 46, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Appliance thermostats", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 360, "currency": "GBP"}, "hot_water_cost_current": {"value": 569, "currency": "GBP"}, "user_interface_version": "3.1.57", "co2_emissions_potential": 0.5, "energy_rating_potential": 69, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 46, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 569, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 76, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 76, "environmental_impact_current": 94, "current_energy_efficiency_band": "C", "environmental_impact_potential": 94, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 7.2} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RG13NS/cert-89bd9a976d69.json b/tests/fixtures/epc_prediction/RG13NS/cert-89bd9a976d69.json new file mode 100644 index 00000000..46a27394 --- /dev/null +++ b/tests/fixtures/epc_prediction/RG13NS/cert-89bd9a976d69.json @@ -0,0 +1 @@ +{"der": 9.81, "dfee": 42.7, "dper": 107.89, "uprn": 310091654, "roofs": [{"description": {"value": "Average thermal transmittance 0.16 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.28 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "(other premises below)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "RG1 3NS", "data_type": 4, "hot_water": {"description": {"value": "Electric immersion, off-peak", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 4, "created_at": "2026-05-14 11:57:26", "living_area": 27, "orientation": 3, "region_code": 17, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_flow_rate": 10, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 903, "secondary_fuel_type": 39, "hot_water_store_size": 150, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "storage_heaters": [{"index_number": 230004, "number_of_heaters": 2, "high_heat_retention": "true"}], "main_heating_code": 409, "main_heating_number": 1, "is_condensing_boiler": "false", "main_heating_control": 2404, "main_heating_category": 7, "main_heating_fraction": 1, "main_heating_data_source": 3, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false"}], "has_hot_water_cylinder": "true", "immersion_heating_type": 2, "secondary_heating_code": 691, "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.1, "has_fixed_air_conditioning": "false", "secondary_heating_category": 10, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "false", "secondary_heating_data_source": 3, "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Electric storage heaters", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 21, "lighting_efficacy": 89.56}]], "terrain_type": 1, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.2 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Top-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-ab1d36435a7d", "address_line_2": "", "assessment_date": "2026-05-14", "assessment_type": "SAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "air_permeability": 4.2, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 3, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "flueless_gas_fires_count": 0, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "sap_flat_details": {"level": 3, "storeys": 5}, "total_floor_area": 81, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-14", "sap_energy_source": {"electricity_tariff": 2}, "sap_opening_types": [{"name": "Windows", "type": 4, "u_value": 1.4, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 81.2, "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.16, "roof_type": 2, "kappa_value": 9, "total_roof_area": 81.2}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.28, "wall_type": 2, "kappa_value": 70, "total_wall_area": 42, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 56.4, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 0, "total_wall_area": 199.4, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Windows", "width": 5.9, "height": 1.8, "location": "Walls (1)", "orientation": 7}], "construction_year": 2025, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 1, "u_value": 0, "floor_type": 4, "kappa_value": 40, "storey_height": 2.55, "heat_loss_area": 0, "total_floor_area": 81.2}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 450, "currency": "GBP"}, "co2_emissions_current": 0.7, "energy_rating_average": 60, "energy_rating_current": 69, "lighting_cost_current": {"value": 63, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Controls for high heat retention storage heaters", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 450, "currency": "GBP"}, "hot_water_cost_current": {"value": 526, "currency": "GBP"}, "user_interface_version": "3.1.57", "co2_emissions_potential": 0.7, "energy_rating_potential": 69, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 63, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 526, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 98, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 98, "environmental_impact_current": 92, "current_energy_efficiency_band": "C", "environmental_impact_potential": 92, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 8.9} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RG13NS/cert-9cff43efea45.json b/tests/fixtures/epc_prediction/RG13NS/cert-9cff43efea45.json new file mode 100644 index 00000000..f3f8d9ed --- /dev/null +++ b/tests/fixtures/epc_prediction/RG13NS/cert-9cff43efea45.json @@ -0,0 +1 @@ +{"der": 8.02, "dfee": 20.3, "dper": 84.84, "uprn": 310091572, "roofs": [{"description": {"value": "(other premises above)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": {"value": "Average thermal transmittance 0.3 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "(other premises below)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "RG1 3NS", "data_type": 4, "hot_water": {"description": {"value": "Electric immersion, standard tariff", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 4, "created_at": "2026-05-14 00:24:03", "living_area": 35, "orientation": 7, "region_code": 17, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_flow_rate": 9.3, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "main_heating_code": 691, "main_heating_number": 1, "is_condensing_boiler": "false", "main_heating_control": 2602, "main_heating_category": 10, "main_heating_fraction": 1, "main_heating_data_source": 3, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false"}], "has_hot_water_cylinder": "true", "immersion_heating_type": 2, "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.2, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "false", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 21, "lighting_efficacy": 89.56}]], "terrain_type": 1, "air_tightness": {"description": {"value": "Air permeability [AP50] = 3.8 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Ground-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-14c2ab85e2c2", "address_line_2": "", "assessment_date": "2026-05-14", "assessment_type": "SAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "air_permeability": 3.8, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 2, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "flueless_gas_fires_count": 0, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "sap_flat_details": {"level": 1, "storeys": 5}, "total_floor_area": 55, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-14", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Windows", "type": 4, "u_value": 1.4, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 55, "sap_building_parts": [{"sap_roofs": [{"name": "Party roof 1", "u_value": 0, "roof_type": 4, "kappa_value": 90, "total_roof_area": 55}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.3, "wall_type": 2, "kappa_value": 70, "total_wall_area": 19.11, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 78.5, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 0, "total_wall_area": 95.4, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening", "type": "Windows", "width": 1.45, "height": 2.5, "location": "Walls (1)", "orientation": 3}, {"name": "Opening", "type": "Windows", "width": 1.45, "height": 2.5, "location": "Walls (1)", "orientation": 3}], "construction_year": 2025, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0, "floor_type": 4, "kappa_value": 40, "storey_height": 2.6, "heat_loss_area": 0, "total_floor_area": 55}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 146, "currency": "GBP"}, "co2_emissions_current": 0.4, "energy_rating_average": 60, "energy_rating_current": 72, "lighting_cost_current": {"value": 39, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Appliance thermostats", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 146, "currency": "GBP"}, "hot_water_cost_current": {"value": 585, "currency": "GBP"}, "user_interface_version": "3.1.57", "co2_emissions_potential": 0.4, "energy_rating_potential": 72, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 39, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 585, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 78, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 78, "environmental_impact_current": 94, "current_energy_efficiency_band": "C", "environmental_impact_potential": 94, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 7.3} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RG13NS/cert-a97a2552889a.json b/tests/fixtures/epc_prediction/RG13NS/cert-a97a2552889a.json new file mode 100644 index 00000000..e0a8c056 --- /dev/null +++ b/tests/fixtures/epc_prediction/RG13NS/cert-a97a2552889a.json @@ -0,0 +1 @@ +{"der": 11.44, "dfee": 45.5, "dper": 126.34, "uprn": 310091653, "roofs": [{"description": {"value": "Average thermal transmittance 0.16 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.28 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "(other premises below)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "RG1 3NS", "data_type": 4, "hot_water": {"description": {"value": "Electric immersion, off-peak", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 4, "created_at": "2026-05-14 11:55:55", "living_area": 27, "orientation": 3, "region_code": 17, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_flow_rate": 10, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 903, "secondary_fuel_type": 39, "hot_water_store_size": 150, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "storage_heaters": [{"index_number": 230004, "number_of_heaters": 2, "high_heat_retention": "true"}], "main_heating_code": 409, "main_heating_number": 1, "is_condensing_boiler": "false", "main_heating_control": 2404, "main_heating_category": 7, "main_heating_fraction": 1, "main_heating_data_source": 3, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false"}], "has_hot_water_cylinder": "true", "immersion_heating_type": 2, "secondary_heating_code": 691, "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.1, "has_fixed_air_conditioning": "false", "secondary_heating_category": 10, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "false", "secondary_heating_data_source": 3, "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Electric storage heaters", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 21, "lighting_efficacy": 89.56}]], "terrain_type": 1, "air_tightness": {"description": {"value": "(not tested)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Top-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-1ce09f64e3f1", "address_line_2": "", "assessment_date": "2026-05-14", "assessment_type": "SAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 3, "air_permeability": 15, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 2, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "flueless_gas_fires_count": 0, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "sap_flat_details": {"level": 3, "storeys": 5}, "total_floor_area": 52, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-14", "sap_energy_source": {"electricity_tariff": 2}, "sap_opening_types": [{"name": "Windows", "type": 4, "u_value": 1.4, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 51.9, "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.16, "roof_type": 2, "kappa_value": 9, "total_roof_area": 51.9}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.28, "wall_type": 2, "kappa_value": 70, "total_wall_area": 13, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 45.5, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 0, "total_wall_area": 66.3, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Windows", "width": 1.5, "height": 1.8, "location": "Walls (1)", "orientation": 7}, {"name": "Opening 1", "type": "Windows", "width": 1.5, "height": 1.8, "location": "Walls (1)", "orientation": 7}], "construction_year": 2025, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 1, "u_value": 0, "floor_type": 4, "kappa_value": 40, "storey_height": 2.5, "heat_loss_area": 0, "total_floor_area": 51.9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 288, "currency": "GBP"}, "co2_emissions_current": 0.5, "energy_rating_average": 60, "energy_rating_current": 70, "lighting_cost_current": {"value": 45, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Controls for high heat retention storage heaters", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 288, "currency": "GBP"}, "hot_water_cost_current": {"value": 422, "currency": "GBP"}, "user_interface_version": "3.1.57", "co2_emissions_potential": 0.5, "energy_rating_potential": 70, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 45, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 422, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 112, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 112, "environmental_impact_current": 92, "current_energy_efficiency_band": "C", "environmental_impact_potential": 92, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 10.2} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RG13NS/cert-b3dda6bae036.json b/tests/fixtures/epc_prediction/RG13NS/cert-b3dda6bae036.json new file mode 100644 index 00000000..c071f10b --- /dev/null +++ b/tests/fixtures/epc_prediction/RG13NS/cert-b3dda6bae036.json @@ -0,0 +1 @@ +{"der": 7.73, "dfee": 16.7, "dper": 82.0, "uprn": 310091580, "roofs": [{"description": {"value": "(other premises above)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": {"value": "Average thermal transmittance 0.3 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "(other premises below)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "RG1 3NS", "data_type": 4, "hot_water": {"description": {"value": "Electric immersion, standard tariff", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 4, "created_at": "2026-05-14 00:30:03", "living_area": 27, "orientation": 3, "region_code": 17, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_flow_rate": 9.3, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "main_heating_code": 691, "main_heating_number": 1, "is_condensing_boiler": "false", "main_heating_control": 2602, "main_heating_category": 10, "main_heating_fraction": 1, "main_heating_data_source": 3, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false"}], "has_hot_water_cylinder": "true", "immersion_heating_type": 2, "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.2, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "false", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 18, "lighting_efficacy": 89.56}]], "terrain_type": 1, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.2 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Mid-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-0fde446f2fc3", "address_line_2": "", "assessment_date": "2026-05-14", "assessment_type": "SAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "air_permeability": 4.2, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 2, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "flueless_gas_fires_count": 0, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "sap_flat_details": {"level": 2, "storeys": 5}, "total_floor_area": 52, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-14", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Windows", "type": 4, "u_value": 1.6, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 52.1, "sap_building_parts": [{"sap_roofs": [{"name": "Party roof 1", "u_value": 0, "roof_type": 4, "kappa_value": 90, "total_roof_area": 52.1}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.3, "wall_type": 2, "kappa_value": 70, "total_wall_area": 11.95, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 63.7, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 0, "total_wall_area": 72, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Windows", "width": 1.4, "height": 1.8, "location": "Walls (1)", "orientation": 7}, {"name": "Opening 1", "type": "Windows", "width": 1.4, "height": 1.8, "location": "Walls (1)", "orientation": 7}], "construction_year": 2025, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 1, "u_value": 0, "floor_type": 4, "kappa_value": 40, "storey_height": 2.6, "heat_loss_area": 0, "total_floor_area": 52.1}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 103, "currency": "GBP"}, "co2_emissions_current": 0.4, "energy_rating_average": 60, "energy_rating_current": 73, "lighting_cost_current": {"value": 40, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Appliance thermostats", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 103, "currency": "GBP"}, "hot_water_cost_current": {"value": 572, "currency": "GBP"}, "user_interface_version": "3.1.57", "co2_emissions_potential": 0.4, "energy_rating_potential": 73, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 40, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 572, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 76, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 76, "environmental_impact_current": 95, "current_energy_efficiency_band": "C", "environmental_impact_potential": 95, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 7.1} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RG13NS/cert-e54b3a80a018.json b/tests/fixtures/epc_prediction/RG13NS/cert-e54b3a80a018.json new file mode 100644 index 00000000..8031b44d --- /dev/null +++ b/tests/fixtures/epc_prediction/RG13NS/cert-e54b3a80a018.json @@ -0,0 +1 @@ +{"der": 7.7, "dfee": 16.5, "dper": 81.71, "uprn": 310091579, "roofs": [{"description": {"value": "(other premises above)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": {"value": "Average thermal transmittance 0.3 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "(other premises below)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "RG1 3NS", "data_type": 4, "hot_water": {"description": {"value": "Electric immersion, standard tariff", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 4, "created_at": "2026-05-14 00:29:22", "living_area": 27, "orientation": 3, "region_code": 17, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_flow_rate": 9.3, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "main_heating_code": 691, "main_heating_number": 1, "is_condensing_boiler": "false", "main_heating_control": 2602, "main_heating_category": 10, "main_heating_fraction": 1, "main_heating_data_source": 3, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false"}], "has_hot_water_cylinder": "true", "immersion_heating_type": 2, "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.2, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "false", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 21, "lighting_efficacy": 89.56}]], "terrain_type": 1, "air_tightness": {"description": {"value": "Air permeability [AP50] = 3.8 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Ground-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-c2bf1031b108", "address_line_2": "", "assessment_date": "2026-05-14", "assessment_type": "SAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "air_permeability": 3.8, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 2, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "flueless_gas_fires_count": 0, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "sap_flat_details": {"level": 1, "storeys": 5}, "total_floor_area": 52, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-14", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Windows", "type": 4, "u_value": 1.4, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 51.9, "sap_building_parts": [{"sap_roofs": [{"name": "Party roof 1", "u_value": 0, "roof_type": 4, "kappa_value": 90, "total_roof_area": 51.9}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.3, "wall_type": 2, "kappa_value": 70, "total_wall_area": 13, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 45.5, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 0, "total_wall_area": 66.3, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Windows", "width": 1.5, "height": 1.8, "location": "Walls (1)", "orientation": 7}, {"name": "Opening 1", "type": "Windows", "width": 1.5, "height": 1.8, "location": "Walls (1)", "orientation": 7}], "construction_year": 2025, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0, "floor_type": 4, "kappa_value": 40, "storey_height": 2.6, "heat_loss_area": 0, "total_floor_area": 51.9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 101, "currency": "GBP"}, "co2_emissions_current": 0.4, "energy_rating_average": 60, "energy_rating_current": 73, "lighting_cost_current": {"value": 39, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Appliance thermostats", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 101, "currency": "GBP"}, "hot_water_cost_current": {"value": 571, "currency": "GBP"}, "user_interface_version": "3.1.57", "co2_emissions_potential": 0.4, "energy_rating_potential": 73, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 39, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 571, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 76, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 76, "environmental_impact_current": 95, "current_energy_efficiency_band": "C", "environmental_impact_potential": 95, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 7.1} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RG13NS/cert-e5d8f7fa5244.json b/tests/fixtures/epc_prediction/RG13NS/cert-e5d8f7fa5244.json new file mode 100644 index 00000000..5b484bea --- /dev/null +++ b/tests/fixtures/epc_prediction/RG13NS/cert-e5d8f7fa5244.json @@ -0,0 +1 @@ +{"der": 7.49, "dfee": 18.6, "dper": 79.26, "uprn": 310091571, "roofs": [{"description": {"value": "(other premises above)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": {"value": "Average thermal transmittance 0.3 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "(other premises below)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "RG1 3NS", "data_type": 4, "hot_water": {"description": {"value": "Electric immersion, standard tariff", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 4, "created_at": "2026-05-14 00:23:12", "living_area": 35, "orientation": 7, "region_code": 17, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_flow_rate": 9.3, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "main_heating_code": 691, "main_heating_number": 1, "is_condensing_boiler": "false", "main_heating_control": 2602, "main_heating_category": 10, "main_heating_fraction": 1, "main_heating_data_source": 3, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false"}], "has_hot_water_cylinder": "true", "immersion_heating_type": 2, "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.2, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "false", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 21, "lighting_efficacy": 89.56}]], "terrain_type": 1, "air_tightness": {"description": {"value": "Air permeability [AP50] = 3.8 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Ground-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-3269922b6d66", "address_line_2": "", "assessment_date": "2026-05-14", "assessment_type": "SAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "air_permeability": 3.8, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 2, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "flueless_gas_fires_count": 0, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "sap_flat_details": {"level": 1, "storeys": 5}, "total_floor_area": 62, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-14", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Windows", "type": 4, "u_value": 1.4, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 62, "sap_building_parts": [{"sap_roofs": [{"name": "Party roof 1", "u_value": 0, "roof_type": 4, "kappa_value": 90, "total_roof_area": 62}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.3, "wall_type": 2, "kappa_value": 70, "total_wall_area": 18.7, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 70.6, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 0, "total_wall_area": 95.4, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening", "type": "Windows", "width": 1.45, "height": 2.5, "location": "Walls (1)", "orientation": 3}, {"name": "Opening", "type": "Windows", "width": 1.45, "height": 2.5, "location": "Walls (1)", "orientation": 3}], "construction_year": 2025, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0, "floor_type": 4, "kappa_value": 40, "storey_height": 2.6, "heat_loss_area": 0, "total_floor_area": 62}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 152, "currency": "GBP"}, "co2_emissions_current": 0.4, "energy_rating_average": 60, "energy_rating_current": 72, "lighting_cost_current": {"value": 45, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Appliance thermostats", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 152, "currency": "GBP"}, "hot_water_cost_current": {"value": 616, "currency": "GBP"}, "user_interface_version": "3.1.57", "co2_emissions_potential": 0.4, "energy_rating_potential": 72, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 45, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 616, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 73, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 73, "environmental_impact_current": 94, "current_energy_efficiency_band": "C", "environmental_impact_potential": 94, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 6.8} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RG13NS/cert-e65f100dfd90.json b/tests/fixtures/epc_prediction/RG13NS/cert-e65f100dfd90.json new file mode 100644 index 00000000..e97bcd9f --- /dev/null +++ b/tests/fixtures/epc_prediction/RG13NS/cert-e65f100dfd90.json @@ -0,0 +1 @@ +{"der": 9.33, "dfee": 21.5, "dper": 99.0, "uprn": 310091574, "roofs": [{"description": {"value": "(other premises above)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": {"value": "Average thermal transmittance 0.3 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "(other premises below)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "RG1 3NS", "data_type": 4, "hot_water": {"description": {"value": "Electric immersion, standard tariff", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 4, "created_at": "2026-05-14 00:25:16", "living_area": 31, "orientation": 1, "region_code": 17, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_flow_rate": 9.3, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "main_heating_code": 691, "main_heating_number": 1, "is_condensing_boiler": "false", "main_heating_control": 2602, "main_heating_category": 10, "main_heating_fraction": 1, "main_heating_data_source": 3, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false"}], "has_hot_water_cylinder": "true", "immersion_heating_type": 2, "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.2, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "false", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 21, "lighting_efficacy": 89.56}]], "terrain_type": 1, "air_tightness": {"description": {"value": "Air permeability [AP50] = 3.8 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Ground-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-53dbe812ea2e", "address_line_2": "", "assessment_date": "2026-05-14", "assessment_type": "SAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "air_permeability": 3.8, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 2, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "flueless_gas_fires_count": 0, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "sap_flat_details": {"level": 1, "storeys": 5}, "total_floor_area": 38, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-14", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Windows", "type": 4, "u_value": 1.4, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 38.2, "sap_building_parts": [{"sap_roofs": [{"name": "Party roof 1", "u_value": 0, "roof_type": 4, "kappa_value": 90, "total_roof_area": 38.2}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.3, "wall_type": 2, "kappa_value": 70, "total_wall_area": 16, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 58.25, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 0, "total_wall_area": 52.5, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening", "type": "Windows", "width": 2, "height": 2.5, "location": "Walls (1)", "orientation": 5}, {"name": "Opening", "type": "Windows", "width": 2, "height": 2.5, "location": "Walls (1)", "orientation": 5}], "construction_year": 2025, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0, "floor_type": 4, "kappa_value": 40, "storey_height": 2.6, "heat_loss_area": 0, "total_floor_area": 38.2}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 92, "currency": "GBP"}, "co2_emissions_current": 0.3, "energy_rating_average": 60, "energy_rating_current": 72, "lighting_cost_current": {"value": 29, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Appliance thermostats", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 92, "currency": "GBP"}, "hot_water_cost_current": {"value": 510, "currency": "GBP"}, "user_interface_version": "3.1.57", "co2_emissions_potential": 0.3, "energy_rating_potential": 72, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 29, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 510, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 92, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 92, "environmental_impact_current": 94, "current_energy_efficiency_band": "C", "environmental_impact_potential": 94, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 8.6} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RG13NS/cert-e67ca51531ad.json b/tests/fixtures/epc_prediction/RG13NS/cert-e67ca51531ad.json new file mode 100644 index 00000000..d8138efd --- /dev/null +++ b/tests/fixtures/epc_prediction/RG13NS/cert-e67ca51531ad.json @@ -0,0 +1 @@ +{"der": 10.59, "dfee": 29.3, "dper": 111.74, "uprn": 310091582, "roofs": [{"description": {"value": "(other premises above)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": {"value": "Average thermal transmittance 0.3 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "(other premises below)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "RG1 3NS", "data_type": 4, "hot_water": {"description": {"value": "Electric immersion, standard tariff", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 3, "created_at": "2026-05-14 00:32:51", "living_area": 30, "orientation": 1, "region_code": 17, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_flow_rate": 9.3, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "main_heating_code": 691, "main_heating_number": 1, "is_condensing_boiler": "false", "main_heating_control": 2602, "main_heating_category": 10, "main_heating_fraction": 1, "main_heating_data_source": 3, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false"}], "has_hot_water_cylinder": "true", "immersion_heating_type": 2, "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.2, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "false", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 18, "lighting_efficacy": 89.56}]], "terrain_type": 1, "air_tightness": {"description": {"value": "Air permeability [AP50] = 3.6 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Mid-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-f34101cb30b9", "address_line_2": "", "assessment_date": "2026-05-14", "assessment_type": "SAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "air_permeability": 3.6, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 2, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "flueless_gas_fires_count": 0, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "sap_flat_details": {"level": 2, "storeys": 5}, "total_floor_area": 38, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-14", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Windows", "type": 4, "u_value": 1.6, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 38.3, "sap_building_parts": [{"sap_roofs": [{"name": "Party roof 1", "u_value": 0, "roof_type": 4, "kappa_value": 90, "total_roof_area": 38.3}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.3, "wall_type": 2, "kappa_value": 70, "total_wall_area": 27.95, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 36.4, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 0, "total_wall_area": 41.6, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Windows", "width": 1.7, "height": 1.3, "location": "Walls (1)", "orientation": 5}, {"name": "Opening 1", "type": "Windows", "width": 1.7, "height": 1.3, "location": "Walls (1)", "orientation": 5}, {"name": "Opening 2", "type": "Windows", "width": 1.7, "height": 1.3, "location": "Walls (1)", "orientation": 7}], "construction_year": 2025, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 1, "u_value": 0, "floor_type": 4, "kappa_value": 80, "storey_height": 2.6, "heat_loss_area": 0, "total_floor_area": 38.3}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 159, "currency": "GBP"}, "co2_emissions_current": 0.4, "energy_rating_average": 60, "energy_rating_current": 69, "lighting_cost_current": {"value": 28, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Appliance thermostats", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 159, "currency": "GBP"}, "hot_water_cost_current": {"value": 511, "currency": "GBP"}, "user_interface_version": "3.1.57", "co2_emissions_potential": 0.4, "energy_rating_potential": 69, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 28, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 511, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 101, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 101, "environmental_impact_current": 94, "current_energy_efficiency_band": "C", "environmental_impact_potential": 94, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 9.5} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RG13NS/cert-ec11e653a063.json b/tests/fixtures/epc_prediction/RG13NS/cert-ec11e653a063.json new file mode 100644 index 00000000..07e922a7 --- /dev/null +++ b/tests/fixtures/epc_prediction/RG13NS/cert-ec11e653a063.json @@ -0,0 +1 @@ +{"der": 8.93, "dfee": 25.9, "dper": 94.22, "uprn": 310091578, "roofs": [{"description": {"value": "(other premises above)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": {"value": "Average thermal transmittance 0.3 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "(other premises below)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "RG1 3NS", "data_type": 4, "hot_water": {"description": {"value": "Electric immersion, standard tariff", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 4, "created_at": "2026-05-14 00:28:31", "living_area": 18.8, "orientation": 5, "region_code": 17, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_flow_rate": 9.3, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "main_heating_code": 691, "main_heating_number": 1, "is_condensing_boiler": "false", "main_heating_control": 2602, "main_heating_category": 10, "main_heating_fraction": 1, "main_heating_data_source": 3, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false"}], "has_hot_water_cylinder": "true", "immersion_heating_type": 2, "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.2, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "false", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 21, "lighting_efficacy": 89.56}]], "terrain_type": 1, "air_tightness": {"description": {"value": "Air permeability [AP50] = 3.8 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Ground-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-73cda45e82c1", "address_line_2": "", "assessment_date": "2026-05-14", "assessment_type": "SAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "air_permeability": 3.8, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 2, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 2, "blocked_chimneys_count": 0, "flueless_gas_fires_count": 0, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "sap_flat_details": {"level": 1, "storeys": 5}, "total_floor_area": 52, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-14", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Windows", "type": 4, "u_value": 1.4, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 51.5, "sap_building_parts": [{"sap_roofs": [{"name": "Party roof 1", "u_value": 0, "roof_type": 4, "kappa_value": 90, "total_roof_area": 51.5}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.3, "wall_type": 2, "kappa_value": 70, "total_wall_area": 20.15, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 56.42, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 0, "total_wall_area": 74, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Windows", "width": 2, "height": 1.8, "location": "Walls (1)", "orientation": 1}, {"name": "Opening 1", "type": "Windows", "width": 2, "height": 1.8, "location": "Walls (1)", "orientation": 1}, {"name": "Opening", "type": "Windows", "width": 2, "height": 2, "location": "Walls (1)", "orientation": 7}], "construction_year": 2025, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0, "floor_type": 4, "kappa_value": 40, "storey_height": 2.6, "heat_loss_area": 0, "total_floor_area": 51.5}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 189, "currency": "GBP"}, "co2_emissions_current": 0.4, "energy_rating_average": 60, "energy_rating_current": 70, "lighting_cost_current": {"value": 34, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Appliance thermostats", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 189, "currency": "GBP"}, "hot_water_cost_current": {"value": 569, "currency": "GBP"}, "user_interface_version": "3.1.57", "co2_emissions_potential": 0.4, "energy_rating_potential": 70, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 34, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 569, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 85, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 85, "environmental_impact_current": 94, "current_energy_efficiency_band": "C", "environmental_impact_potential": 94, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 8.1} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RG13NS/cert-fc680ac36a75.json b/tests/fixtures/epc_prediction/RG13NS/cert-fc680ac36a75.json new file mode 100644 index 00000000..888da3f4 --- /dev/null +++ b/tests/fixtures/epc_prediction/RG13NS/cert-fc680ac36a75.json @@ -0,0 +1 @@ +{"der": 8.85, "dfee": 19.4, "dper": 93.96, "uprn": 310091566, "roofs": [{"description": {"value": "(other premises above)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": {"value": "Average thermal transmittance 0.3 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "(other premises below)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "RG1 3NS", "data_type": 4, "hot_water": {"description": {"value": "Electric immersion, standard tariff", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 4, "created_at": "2026-05-14 00:18:02", "living_area": 25, "orientation": 5, "region_code": 17, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_flow_rate": 9.3, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "main_heating_code": 691, "main_heating_number": 1, "is_condensing_boiler": "false", "main_heating_control": 2602, "main_heating_category": 10, "main_heating_fraction": 1, "main_heating_data_source": 3, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false"}], "has_hot_water_cylinder": "true", "immersion_heating_type": 2, "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.2, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "false", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 21, "lighting_efficacy": 89.56}]], "terrain_type": 1, "air_tightness": {"description": {"value": "Air permeability [AP50] = 3.0 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Ground-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-24fe9f95ec4d", "address_line_2": "", "assessment_date": "2026-05-14", "assessment_type": "SAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "air_permeability": 3, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 2, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "flueless_gas_fires_count": 0, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "sap_flat_details": {"level": 1, "storeys": 5}, "total_floor_area": 42, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-14", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Windows", "type": 4, "u_value": 1.4, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 42.2, "sap_building_parts": [{"sap_roofs": [{"name": "Party roof 1", "u_value": 0, "roof_type": 4, "kappa_value": 90, "total_roof_area": 42.2}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.3, "wall_type": 2, "kappa_value": 70, "total_wall_area": 13.9, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 55.25, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 0, "total_wall_area": 43.4, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Windows", "width": 2, "height": 2.5, "location": "Walls (1)", "orientation": 1}], "construction_year": 2025, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0, "floor_type": 4, "kappa_value": 40, "storey_height": 2.6, "heat_loss_area": 0, "total_floor_area": 42.2}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 101, "currency": "GBP"}, "co2_emissions_current": 0.3, "energy_rating_average": 60, "energy_rating_current": 72, "lighting_cost_current": {"value": 34, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Appliance thermostats", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 101, "currency": "GBP"}, "hot_water_cost_current": {"value": 527, "currency": "GBP"}, "user_interface_version": "3.1.57", "co2_emissions_potential": 0.3, "energy_rating_potential": 72, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 34, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 527, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 87, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 87, "environmental_impact_current": 94, "current_energy_efficiency_band": "C", "environmental_impact_potential": 94, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 8.2} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RG13NS/cert-fe6e513ab355.json b/tests/fixtures/epc_prediction/RG13NS/cert-fe6e513ab355.json new file mode 100644 index 00000000..afed9d8b --- /dev/null +++ b/tests/fixtures/epc_prediction/RG13NS/cert-fe6e513ab355.json @@ -0,0 +1 @@ +{"der": 9.19, "dfee": 26.6, "dper": 96.88, "uprn": 310091601, "roofs": [{"description": {"value": "(other premises above)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "walls": [{"description": {"value": "Average thermal transmittance 0.28 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "(other premises below)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "RG1 3NS", "data_type": 4, "hot_water": {"description": {"value": "Electric immersion, standard tariff", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 3, "created_at": "2026-05-14 12:33:07", "living_area": 25, "orientation": 5, "region_code": 17, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_flow_rate": 9.5, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 903, "hot_water_store_size": 150, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "main_heating_code": 691, "main_heating_number": 1, "is_condensing_boiler": "false", "main_heating_control": 2602, "main_heating_category": 10, "main_heating_fraction": 1, "main_heating_data_source": 3, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false"}], "has_hot_water_cylinder": "true", "immersion_heating_type": 2, "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.2, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "is_hot_water_separately_timed": "false", "hot_water_store_heat_loss_source": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 9, "lighting_outlets": 21, "lighting_efficacy": 89.56}]], "terrain_type": 1, "air_tightness": {"description": {"value": "Air permeability [AP50] = 3.3 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Mid-floor flat", "language_code": 1, "property_type": 2, "address_line_1": "addr-5a6554b06f14", "address_line_2": "", "assessment_date": "2026-05-14", "assessment_type": "SAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "air_permeability": 3.3, "open_flues_count": 0, "ventilation_type": 1, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 2, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "flueless_gas_fires_count": 0, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "sap_flat_details": {"level": 2, "storeys": 5}, "total_floor_area": 52, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-14", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Windows", "type": 4, "u_value": 1.6, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 51.7, "sap_building_parts": [{"sap_roofs": [{"name": "Party roof 1", "u_value": 0, "roof_type": 4, "kappa_value": 90, "total_roof_area": 51.7}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.28, "wall_type": 2, "kappa_value": 70, "total_wall_area": 27, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 49.27, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 0, "total_wall_area": 83.95, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Windows", "width": 1.4, "height": 1.8, "location": "Walls (1)", "orientation": 1}, {"name": "Opening 1", "type": "Windows", "width": 1.4, "height": 1.8, "location": "Walls (1)", "orientation": 1}, {"name": "Opening 2", "type": "Windows", "width": 1.5, "height": 1.8, "location": "Walls (1)", "orientation": 7}], "construction_year": 2025, "sap_thermal_bridges": {"thermal_bridge_code": 1}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 1, "u_value": 0, "floor_type": 4, "kappa_value": 40, "storey_height": 2.55, "heat_loss_area": 0, "total_floor_area": 51.7}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 208, "currency": "GBP"}, "co2_emissions_current": 0.4, "energy_rating_average": 60, "energy_rating_current": 69, "lighting_cost_current": {"value": 36, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Appliance thermostats", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 208, "currency": "GBP"}, "hot_water_cost_current": {"value": 575, "currency": "GBP"}, "user_interface_version": "3.1.57", "co2_emissions_potential": 0.4, "energy_rating_potential": 69, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 36, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 575, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 88, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "false", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 88, "environmental_impact_current": 94, "current_energy_efficiency_band": "C", "environmental_impact_potential": 94, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 8.3} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RM143YU/cert-06dd4ab9474a.json b/tests/fixtures/epc_prediction/RM143YU/cert-06dd4ab9474a.json new file mode 100644 index 00000000..c51b15df --- /dev/null +++ b/tests/fixtures/epc_prediction/RM143YU/cert-06dd4ab9474a.json @@ -0,0 +1 @@ +{"uprn": 100021408529, "roofs": [{"description": "Pitched, 300 mm loft insulation", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": "Cavity wall, as built, partial insulation (assumed)", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "RM14 3YU", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2021-08-28 21:16:04.697725", "door_count": 2, "glazed_area": 1, "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 2, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 29, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 18221}], "immersion_heating_type": "NA", "secondary_heating_type": 691, "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-2749160b9f01", "assessment_type": "RdSAP", "completion_date": "2021-08-28", "inspection_date": "2021-08-26", "extensions_count": 1, "measurement_type": 2, "total_floor_area": 119, "transaction_type": 1, "conservatory_type": 2, "heated_room_count": 6, "registration_date": "2021-08-28", "sap_energy_source": {"mains_gas": "Y", "meter_type": 3, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, electric", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 290, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.47, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 46.89, "quantity": "square metres"}, "party_wall_length": {"value": 7.51, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 12.63, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.39, "quantity": "metres"}, "total_floor_area": {"value": 46.89, "quantity": "square metres"}, "party_wall_length": {"value": 7.51, "quantity": "metres"}, "heat_loss_perimeter": {"value": 12.63, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "D", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "300mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 290, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.48, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 20.88, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 13.07, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.41, "quantity": "metres"}, "total_floor_area": {"value": 20.88, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "heat_loss_perimeter": {"value": 13.07, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "F", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "300mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 6, "heating_cost_current": {"value": 810, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.1, "energy_rating_average": 60, "energy_rating_current": 66, "lighting_cost_current": {"value": 88, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 578, "currency": "GBP"}, "hot_water_cost_current": {"value": 99, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 161, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 69}, {"sequence": 2, "typical_saving": {"value": 71, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 72}, {"sequence": 3, "typical_saving": {"value": 30, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 74}, {"sequence": 4, "typical_saving": {"value": 352, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 83, "environmental_impact_rating": 81}], "co2_emissions_potential": 1.9, "energy_rating_potential": 83, "lighting_cost_potential": {"value": 88, "currency": "GBP"}, "schema_version_original": "20.0.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 57, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 73, "environmental_impact_rating": 71}}], "hot_water_cost_potential": {"value": 70, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2288, "impact_of_cavity_insulation": -2863, "space_heating_existing_dwelling": 12136}, "energy_consumption_current": 199, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.07r0003", "energy_consumption_potential": 89, "environmental_impact_current": 62, "fixed_lighting_outlets_count": 17, "current_energy_efficiency_band": "D", "environmental_impact_potential": 81, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 35, "low_energy_fixed_lighting_outlets_count": 17} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RM143YU/cert-10c9fc509969.json b/tests/fixtures/epc_prediction/RM143YU/cert-10c9fc509969.json new file mode 100644 index 00000000..d6f9929b --- /dev/null +++ b/tests/fixtures/epc_prediction/RM143YU/cert-10c9fc509969.json @@ -0,0 +1 @@ +{"uprn": 100021408549, "roofs": [{"description": "Pitched, limited insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": "Flat, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": "Roof room(s), insulated (assumed)", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Solid, insulated (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "RM14 3YU", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2021-04-08 15:10:46.858480", "door_count": 2, "glazed_area": 1, "glazing_gap": "16+", "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 2, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 10327}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-01f4738663ec", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2021-04-08", "inspection_date": "2021-04-08", "extensions_count": 2, "measurement_type": 1, "total_floor_area": 141, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 6, "pvc_window_frames": "true", "registration_date": "2021-04-08", "sap_energy_source": {"mains_gas": "Y", "meter_type": 3, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 360, "floor_heat_loss": 7, "sap_room_in_roof": {"floor_area": 25.8, "insulation": "AB", "roof_room_connected": "N", "construction_age_band": "L"}, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.53, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 38.64, "quantity": "square metres"}, "party_wall_length": {"value": 7, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 9.95, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.46, "quantity": "metres"}, "total_floor_area": {"value": 38.64, "quantity": "square metres"}, "party_wall_length": {"value": 7, "quantity": "metres"}, "heat_loss_perimeter": {"value": 18.04, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "E", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 360, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.53, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 28.35, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 15.06, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "L", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}, {"identifier": "Extension 2", "wall_dry_lined": "N", "wall_thickness": 360, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 4, "building_part_number": 3, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.5, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 9.28, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 6.74, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "L", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 6, "heating_cost_current": {"value": 713, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.2, "energy_rating_average": 60, "energy_rating_current": 71, "lighting_cost_current": {"value": 95, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 637, "currency": "GBP"}, "hot_water_cost_current": {"value": 105, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 75, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 70}, {"sequence": 2, "typical_saving": {"value": 348, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 81, "environmental_impact_rating": 76}], "co2_emissions_potential": 2.8, "energy_rating_potential": 81, "lighting_cost_potential": {"value": 95, "currency": "GBP"}, "schema_version_original": "20.0.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 37, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 75, "environmental_impact_rating": 71}}], "hot_water_cost_potential": {"value": 105, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2314, "impact_of_loft_insulation": -711, "impact_of_cavity_insulation": -1785, "space_heating_existing_dwelling": 13652}, "energy_consumption_current": 170, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.07r0002", "energy_consumption_potential": 113, "environmental_impact_current": 66, "fixed_lighting_outlets_count": 19, "current_energy_efficiency_band": "C", "environmental_impact_potential": 76, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 30, "low_energy_fixed_lighting_outlets_count": 19} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RM143YU/cert-13b0e4c085a1.json b/tests/fixtures/epc_prediction/RM143YU/cert-13b0e4c085a1.json new file mode 100644 index 00000000..e07639f0 --- /dev/null +++ b/tests/fixtures/epc_prediction/RM143YU/cert-13b0e4c085a1.json @@ -0,0 +1 @@ +{"uprn": 100021408537, "roofs": [{"description": "Pitched, 100 mm loft insulation", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "High performance glazing", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "addendum": {"addendum_numbers": [15]}, "lighting": {"description": "Good lighting efficiency", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "RM14 3YU", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2026-05-14 10:00:17", "door_count": 2, "region_code": 2, "report_type": 2, "sap_heating": {"number_baths": 1, "cylinder_size": 1, "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17974}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"orientation": 5, "window_type": 1, "glazing_type": 13, "window_width": 0.61, "window_height": 0.81, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 5, "window_type": 1, "glazing_type": 13, "window_width": 0.61, "window_height": 0.81, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 5, "window_type": 1, "glazing_type": 13, "window_width": 0.77, "window_height": 0.81, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 5, "window_type": 1, "glazing_type": 13, "window_width": 0.77, "window_height": 0.81, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 3, "window_type": 1, "glazing_type": 13, "window_width": 0.42, "window_height": 0.5, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 3, "window_type": 1, "glazing_type": 13, "window_width": 0.44, "window_height": 1.1, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 1, "window_type": 1, "glazing_type": 13, "window_width": 0.44, "window_height": 0.79, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 1, "window_type": 1, "glazing_type": 13, "window_width": 0.64, "window_height": 0.81, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 1, "window_type": 1, "glazing_type": 13, "window_width": 0.64, "window_height": 0.81, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 5, "window_type": 1, "glazing_type": 13, "window_width": 0.59, "window_height": 1.09, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 5, "window_type": 1, "glazing_type": 13, "window_width": 0.59, "window_height": 1.09, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 1, "window_type": 1, "glazing_type": 13, "window_width": 0.43, "window_height": 1.14, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 1, "window_type": 1, "glazing_type": 13, "window_width": 0.43, "window_height": 1.14, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 2, "window_type": 1, "glazing_type": 13, "window_width": 0.42, "window_height": 0.79, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 2, "window_type": 1, "glazing_type": 13, "window_width": 0.42, "window_height": 0.79, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 1, "window_type": 1, "glazing_type": 13, "window_width": 0.44, "window_height": 0.82, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Semi-detached house", "language_code": 1, "pressure_test": 4, "property_type": 0, "address_line_1": "addr-fc8f9fdb56ec", "assessment_type": "RdSAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-13", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 80, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 5, "registration_date": "2026-05-14", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "true", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 2, "electricity_smart_meter_present": "true"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 40.17, "quantity": "square metres"}, "party_wall_length": {"value": 7.05, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 18.45, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.4, "quantity": "metres"}, "total_floor_area": {"value": 40.17, "quantity": "square metres"}, "party_wall_length": {"value": 7.05, "quantity": "metres"}, "heat_loss_perimeter": {"value": 18.45, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "D", "party_wall_construction": 0, "wall_thickness_measured": "N", "roof_insulation_location": 2, "roof_insulation_thickness": "100mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 1022, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.2, "energy_rating_average": 60, "energy_rating_current": 65, "lighting_cost_current": {"value": 65, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 587, "currency": "GBP"}, "hot_water_cost_current": {"value": 211, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 353, "currency": "GBP"}, "indicative_cost": "\u00a37,500 - \u00a311,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 74}, {"sequence": 2, "typical_saving": {"value": 80, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a310,000", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 77}, {"sequence": 3, "typical_saving": {"value": 215, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 81, "environmental_impact_rating": 78}], "co2_emissions_potential": 1.8, "energy_rating_potential": 81, "lighting_cost_potential": {"value": 65, "currency": "GBP"}, "schema_version_original": "21.0.1", "hot_water_cost_potential": {"value": 213, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2460.69, "space_heating_existing_dwelling": 10569.29}, "draughtproofed_door_count": 2, "energy_consumption_current": 215, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "5.02r0344", "energy_consumption_potential": 117, "environmental_impact_current": 63, "cfl_fixed_lighting_bulbs_count": 1, "current_energy_efficiency_band": "D", "environmental_impact_potential": 78, "led_fixed_lighting_bulbs_count": 6, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 39, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RM143YU/cert-20ba6a050f47.json b/tests/fixtures/epc_prediction/RM143YU/cert-20ba6a050f47.json new file mode 100644 index 00000000..0444dcda --- /dev/null +++ b/tests/fixtures/epc_prediction/RM143YU/cert-20ba6a050f47.json @@ -0,0 +1 @@ +{"uprn": 100021408551, "roofs": [{"description": "Pitched, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": "Flat, limited insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "walls": [{"description": "Cavity wall, filled cavity", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, {"description": "Timber frame, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Low energy lighting in 82% of fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "RM14 3YU", "hot_water": {"description": "From main system, no cylinder thermostat", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "post_town": "", "built_form": 2, "created_at": "2022-04-19 13:55:31.531148", "door_count": 2, "glazed_area": 1, "glazing_gap": "16+", "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 117, "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "cylinder_insulation_type": 2, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 80}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-9b3a2161dc3b", "assessment_type": "RdSAP", "completion_date": "2022-04-19", "inspection_date": "2022-04-19", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 100, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 6, "pvc_window_frames": "true", "registration_date": "2022-04-19", "sap_energy_source": {"mains_gas": "Y", "meter_type": 3, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.39, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 43.95, "quantity": "square metres"}, "party_wall_length": {"value": 7.59, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 15.17, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.38, "quantity": "metres"}, "total_floor_area": {"value": 43.95, "quantity": "square metres"}, "party_wall_length": {"value": 7.59, "quantity": "metres"}, "heat_loss_perimeter": {"value": 19.2, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "D", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 5, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.47, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 11.68, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 9.75, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "F", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "low_energy_lighting": 82, "solar_water_heating": "N", "habitable_room_count": 6, "heating_cost_current": {"value": 814, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 5.8, "energy_rating_average": 60, "energy_rating_current": 52, "lighting_cost_current": {"value": 94, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 587, "currency": "GBP"}, "hot_water_cost_current": {"value": 231, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 48, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 54, "environmental_impact_rating": 46}, {"sequence": 2, "typical_saving": {"value": 92, "currency": "GBP"}, "indicative_cost": "\u00a3200 - \u00a3400", "improvement_type": "F", "improvement_details": {"improvement_number": 4}, "improvement_category": 5, "energy_performance_rating": 58, "environmental_impact_rating": 50}, {"sequence": 3, "typical_saving": {"value": 214, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 62}, {"sequence": 4, "typical_saving": {"value": 36, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 65}, {"sequence": 5, "typical_saving": {"value": 358, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 78, "environmental_impact_rating": 73}], "co2_emissions_potential": 2.5, "energy_rating_potential": 78, "lighting_cost_potential": {"value": 94, "currency": "GBP"}, "schema_version_original": "20.0.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 309, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 69, "environmental_impact_rating": 61}}], "hot_water_cost_potential": {"value": 69, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3592, "impact_of_loft_insulation": -3707, "space_heating_existing_dwelling": 11683}, "energy_consumption_current": 331, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.09r0002", "energy_consumption_potential": 140, "environmental_impact_current": 44, "fixed_lighting_outlets_count": 11, "current_energy_efficiency_band": "E", "environmental_impact_potential": 73, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 58, "low_energy_fixed_lighting_outlets_count": 9} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RM143YU/cert-46231289c9c8.json b/tests/fixtures/epc_prediction/RM143YU/cert-46231289c9c8.json new file mode 100644 index 00000000..af3e34a7 --- /dev/null +++ b/tests/fixtures/epc_prediction/RM143YU/cert-46231289c9c8.json @@ -0,0 +1 @@ +{"uprn": 100021408551, "roofs": [{"description": {"value": "Pitched, 100 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, {"description": {"value": "Flat, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": {"value": "Cavity wall, filled cavity", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, {"description": {"value": "Timber frame, as built, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Low energy lighting in all fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "RM14 3YU", "hot_water": {"description": {"value": "From main system, no cylinder thermostat", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "post_town": "", "built_form": 2, "created_at": "2022-04-29 15:10:40.677183", "door_count": 2, "glazed_area": 1, "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 101, "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "cylinder_insulation_type": 2, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 38}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Semi-detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-9b3a2161dc3b", "assessment_type": "RdSAP", "completion_date": "2022-04-29", "inspection_date": "2022-04-26", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 100, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "registration_date": "2022-04-29", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.36, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 42, "quantity": "square metres"}, "party_wall_length": {"value": 7, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 19, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.36, "quantity": "metres"}, "total_floor_area": {"value": 42, "quantity": "square metres"}, "party_wall_length": {"value": 7, "quantity": "metres"}, "heat_loss_perimeter": {"value": 19, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "C", "party_wall_construction": 0, "wall_thickness_measured": "N", "roof_insulation_location": 2, "roof_insulation_thickness": "100mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 5, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.33, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 16, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 1, "heat_loss_perimeter": {"value": 6, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "H", "party_wall_construction": 0, "wall_thickness_measured": "N", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 571, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.3, "energy_rating_average": 60, "energy_rating_current": 63, "lighting_cost_current": {"value": 79, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 455, "currency": "GBP"}, "hot_water_cost_current": {"value": 233, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 51, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 59}, {"sequence": 2, "typical_saving": {"value": 29, "currency": "GBP"}, "indicative_cost": "\u00a315 - \u00a330", "improvement_type": "C", "improvement_details": {"improvement_number": 2}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 61}, {"sequence": 3, "typical_saving": {"value": 60, "currency": "GBP"}, "indicative_cost": "\u00a3200 - \u00a3400", "improvement_type": "F", "improvement_details": {"improvement_number": 4}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 65}, {"sequence": 4, "typical_saving": {"value": 103, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 71}, {"sequence": 5, "typical_saving": {"value": 36, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 73}, {"sequence": 6, "typical_saving": {"value": 358, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 84, "environmental_impact_rating": 81}], "co2_emissions_potential": 1.7, "energy_rating_potential": 84, "lighting_cost_potential": {"value": 79, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 165, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 74, "environmental_impact_rating": 69}}], "hot_water_cost_potential": {"value": 70, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 4099, "impact_of_loft_insulation": -430, "space_heating_existing_dwelling": 8442}, "energy_consumption_current": 245, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.1.1.0", "energy_consumption_potential": 93, "environmental_impact_current": 56, "fixed_lighting_outlets_count": 8, "windows_transmission_details": {"u_value": 2, "data_source": 2, "solar_transmittance": 0.72}, "current_energy_efficiency_band": "D", "environmental_impact_potential": 81, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 43, "low_energy_fixed_lighting_outlets_count": 8} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RM143YU/cert-599e37dc5fcc.json b/tests/fixtures/epc_prediction/RM143YU/cert-599e37dc5fcc.json new file mode 100644 index 00000000..680dac21 --- /dev/null +++ b/tests/fixtures/epc_prediction/RM143YU/cert-599e37dc5fcc.json @@ -0,0 +1 @@ +{"uprn": 100021408547, "roofs": [{"description": {"value": "Pitched, 25 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": {"value": "Flat, limited insulation", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "walls": [{"description": {"value": "Cavity wall, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": {"value": "Solid brick, as built, partial insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "floors": [{"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": {"value": "No low energy lighting", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "postcode": "RM14 3YU", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 2, "created_at": "2017-01-30 21:19:58.000000", "door_count": 2, "glazed_area": 1, "glazing_gap": "16+", "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 3, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2104, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 290}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Semi-detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-26deb9a8fabe", "assessment_type": "RdSAP", "completion_date": "2017-01-30", "inspection_date": "2017-01-29", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 91, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2017-01-30", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.37, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 42.18, "quantity": "square metres"}, "party_wall_length": {"value": 7.4, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 16.5, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.41, "quantity": "metres"}, "total_floor_area": {"value": 42.18, "quantity": "square metres"}, "party_wall_length": {"value": 7.4, "quantity": "metres"}, "heat_loss_perimeter": {"value": 18.8, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "D", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "25mm", "wall_insulation_thickness": "NI"}, {"identifier": "Extension", "wall_dry_lined": "N", "wall_thickness": 120, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.3, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 6.91, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 1, "heat_loss_perimeter": {"value": 10.5, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "F", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "low_energy_lighting": 0, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 940, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 5.7, "energy_rating_average": 60, "energy_rating_current": 50, "lighting_cost_current": {"value": 120, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer and room thermostat", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 420, "currency": "GBP"}, "hot_water_cost_current": {"value": 188, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 87, "currency": "GBP"}, "indicative_cost": "\u00a3100 - \u00a3350", "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 53, "environmental_impact_rating": 46}, {"sequence": 2, "typical_saving": {"value": 205, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 61, "environmental_impact_rating": 55}, {"sequence": 3, "typical_saving": {"value": 46, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 63, "environmental_impact_rating": 57}, {"sequence": 4, "typical_saving": {"value": 69, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 61}, {"sequence": 5, "typical_saving": {"value": 49, "currency": "GBP"}, "indicative_cost": "\u00a345", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 63}, {"sequence": 6, "typical_saving": {"value": 27, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 13}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 64}, {"sequence": 7, "typical_saving": {"value": 160, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 73}, {"sequence": 8, "typical_saving": {"value": 48, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 76}, {"sequence": 9, "typical_saving": {"value": 286, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a38,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 84}], "co2_emissions_potential": 1.3, "energy_rating_potential": 86, "lighting_cost_potential": {"value": 60, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 41, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 65, "environmental_impact_rating": 60}, {"sequence": 2, "typical_saving": {"value": 154, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 74, "environmental_impact_rating": 95}, {"sequence": 3, "typical_saving": {"value": 94, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 73, "environmental_impact_rating": 76}, {"sequence": 4, "typical_saving": {"value": 151, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 75, "environmental_impact_rating": 70}], "hot_water_cost_potential": {"value": 76, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2766, "impact_of_loft_insulation": -1373, "impact_of_cavity_insulation": -3245, "impact_of_solid_wall_insulation": -733, "space_heating_existing_dwelling": 13063}, "energy_consumption_current": 354, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.0.0.0", "energy_consumption_potential": 77, "environmental_impact_current": 42, "fixed_lighting_outlets_count": 9, "windows_transmission_details": {"u_value": 2.6, "data_source": 2, "solar_transmittance": 0.76}, "current_energy_efficiency_band": "E", "environmental_impact_potential": 84, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 63, "low_energy_fixed_lighting_outlets_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RM143YU/cert-6bde4cfcf10f.json b/tests/fixtures/epc_prediction/RM143YU/cert-6bde4cfcf10f.json new file mode 100644 index 00000000..c47162c2 --- /dev/null +++ b/tests/fixtures/epc_prediction/RM143YU/cert-6bde4cfcf10f.json @@ -0,0 +1 @@ +{"uprn": 100021408541, "roofs": [{"description": "Pitched, 25 mm loft insulation", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": "Flat, limited insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": "Solid brick, as built, partial insulation (assumed)", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": "Low energy lighting in 44% of fixed outlets", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "postcode": "RM14 3YU", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2018-05-08 14:19:42.000000", "door_count": 1, "glazed_area": 1, "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 2, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 29, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2104, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 1966}], "immersion_heating_type": "NA", "secondary_heating_type": 691, "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 25}, "sap_version": 9.93, "schema_type": "RdSAP-Schema-18.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-a132b05fe9fb", "assessment_type": "RdSAP", "completion_date": "2018-05-08", "inspection_date": "2018-05-04", "extensions_count": 2, "measurement_type": 2, "total_floor_area": 115, "transaction_type": 1, "conservatory_type": 2, "heated_room_count": 4, "pvc_window_frames": "false", "registration_date": "2018-05-08", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, electric", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 290, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.38, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 52.08, "quantity": "square metres"}, "party_wall_length": {"value": 7.61, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 10.69, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.39, "quantity": "metres"}, "total_floor_area": {"value": 52.08, "quantity": "square metres"}, "party_wall_length": {"value": 7.61, "quantity": "metres"}, "heat_loss_perimeter": {"value": 21.55, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "25mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 230, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.39, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 18.35, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 9.09, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "F", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}, {"identifier": "Extension 2", "wall_dry_lined": "N", "wall_thickness": 210, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 3, "building_part_number": 3, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.16, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 9.2, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 10.57, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "F", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "low_energy_lighting": 44, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 1079, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 6.0, "energy_rating_average": 60, "energy_rating_current": 52, "lighting_cost_current": {"value": 113, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and room thermostat", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 1, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 589, "currency": "GBP"}, "hot_water_cost_current": {"value": 165, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 100, "currency": "GBP"}, "indicative_cost": 350, "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 56, "environmental_impact_rating": 50}, {"sequence": 2, "typical_saving": {"value": 33, "currency": "GBP"}, "indicative_cost": "1,500", "improvement_type": "A2", "improvement_details": {"improvement_number": 45}, "improvement_category": 5, "energy_performance_rating": 57, "environmental_impact_rating": 51}, {"sequence": 3, "typical_saving": {"value": 131, "currency": "GBP"}, "indicative_cost": "1,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 61, "environmental_impact_rating": 56}, {"sequence": 4, "typical_saving": {"value": 78, "currency": "GBP"}, "indicative_cost": "14,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 64, "environmental_impact_rating": 60}, {"sequence": 5, "typical_saving": {"value": 71, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 63}, {"sequence": 6, "typical_saving": {"value": 33, "currency": "GBP"}, "indicative_cost": 70, "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 64}, {"sequence": 7, "typical_saving": {"value": 35, "currency": "GBP"}, "indicative_cost": 450, "improvement_type": "G", "improvement_details": {"improvement_number": 13}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 65}, {"sequence": 8, "typical_saving": {"value": 98, "currency": "GBP"}, "indicative_cost": "3,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 70}, {"sequence": 9, "typical_saving": {"value": 42, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 72}, {"sequence": 10, "typical_saving": {"value": 297, "currency": "GBP"}, "indicative_cost": "8,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 81, "environmental_impact_rating": 80}], "co2_emissions_potential": 2.0, "energy_rating_potential": 81, "lighting_cost_potential": {"value": 72, "currency": "GBP"}, "schema_version_original": "LIG-18.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 69, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 64, "environmental_impact_rating": 59}, {"sequence": 2, "typical_saving": {"value": 45, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 70, "environmental_impact_rating": 91}, {"sequence": 3, "typical_saving": {"value": 42, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 72, "environmental_impact_rating": 75}, {"sequence": 4, "typical_saving": {"value": 218, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 76, "environmental_impact_rating": 71}], "hot_water_cost_potential": {"value": 76, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2955, "impact_of_loft_insulation": -1574, "impact_of_cavity_insulation": -2041, "impact_of_solid_wall_insulation": -1211, "space_heating_existing_dwelling": 15177}, "energy_consumption_current": 298, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "3.05r04", "energy_consumption_potential": 98, "environmental_impact_current": 47, "fixed_lighting_outlets_count": 25, "current_energy_efficiency_band": "E", "environmental_impact_potential": 80, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 52, "low_energy_fixed_lighting_outlets_count": 11} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RM143YU/cert-6f28f47a317d.json b/tests/fixtures/epc_prediction/RM143YU/cert-6f28f47a317d.json new file mode 100644 index 00000000..522e0edd --- /dev/null +++ b/tests/fixtures/epc_prediction/RM143YU/cert-6f28f47a317d.json @@ -0,0 +1 @@ +{"uprn": 100021408552, "roofs": [{"description": "Pitched, 75 mm loft insulation", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "windows": [{"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": "No low energy lighting", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "postcode": "RM14 3YU", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2014-07-11 15:47:56", "door_count": 1, "glazed_area": 1, "region_code": 2, "report_type": 2, "sap_heating": {"wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "boiler_index_number": 10328, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "main_heating_data_source": 1}], "has_fixed_air_conditioning": "false"}, "sap_version": 9.91, "schema_type": "SAP-Schema-16.3", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-69ebc64f9bf6", "schema_version": "LIG-16.1", "assessment_type": "RdSAP", "completion_date": "2014-07-11", "inspection_date": "2014-07-11", "windows_u_value": 3.1, "extensions_count": 0, "measurement_type": 2, "total_floor_area": 83, "transaction_type": 11, "conservatory_type": 1, "heated_room_count": 4, "registration_date": "2014-07-11", "restricted_access": 0, "sap_energy_source": {"main_gas": "Y", "meter_type": 2, "photovoltaic_supply": [[{"pitch": 3, "peak_power": 2, "orientation": 5, "overshading": 1}], [{"pitch": 3, "peak_power": 1.5, "orientation": 3, "overshading": 1}]], "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lzc_energy_sources": [11], "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 280, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.411, "floor_insulation": 0, "total_floor_area": 47.05, "floor_construction": 2, "heat_loss_perimeter": 21.5}, {"floor": 1, "room_height": 2.423, "total_floor_area": 48.8, "heat_loss_perimeter": 20.2}], "wall_insulation_type": 4, "construction_age_band": "D", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "75mm"}], "low_energy_lighting": 0, "solar_transmittance": 0.76, "solar_water_heating": "N", "windows_data_source": 2, "bedf_revision_number": 359, "habitable_room_count": 4, "heating_cost_current": {"value": 659, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.1, "energy_rating_average": 60, "energy_rating_current": 79, "lighting_cost_current": {"value": 100, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 1, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 483, "currency": "GBP"}, "hot_water_cost_current": {"value": 97, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 24.24, "currency": "GBP"}, "indicative_cost": "\u00a3100 - \u00a3350", "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 80, "environmental_impact_rating": 77}, {"sequence": 2, "typical_saving": {"value": 158.54, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 87, "environmental_impact_rating": 86}, {"sequence": 3, "typical_saving": {"value": 43.32, "currency": "GBP"}, "indicative_cost": "\u00a3270", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 89, "environmental_impact_rating": 88}, {"sequence": 4, "typical_saving": {"value": 28.54, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 90, "environmental_impact_rating": 89}], "co2_emissions_potential": 0.9, "energy_rating_potential": 90, "lighting_cost_potential": {"value": 50, "currency": "GBP"}, "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 30.99, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 88, "environmental_impact_rating": 88}}], "hot_water_cost_potential": {"value": 69, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2158, "impact_of_loft_insulation": -568, "impact_of_cavity_insulation": -3714, "space_heating_existing_dwelling": 12120}, "seller_commission_report": "Y", "energy_consumption_current": 129, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "1.4.1.0", "energy_consumption_potential": 50, "environmental_impact_current": 76, "fixed_lighting_outlets_count": 54, "current_energy_efficiency_band": "C", "environmental_impact_potential": 89, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 26, "low_energy_fixed_lighting_outlets_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RM143YU/cert-720d5771bfd7.json b/tests/fixtures/epc_prediction/RM143YU/cert-720d5771bfd7.json new file mode 100644 index 00000000..f8c4658e --- /dev/null +++ b/tests/fixtures/epc_prediction/RM143YU/cert-720d5771bfd7.json @@ -0,0 +1 @@ +{"uprn": 100021408545, "roofs": [{"description": {"value": "Pitched, 150 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": {"value": "Flat, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": {"value": "Cavity wall, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": {"value": "Cavity wall, as built, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": {"value": "Solid, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": {"value": "Low energy lighting in all fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "RM14 3YU", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2019-11-06 11:33:42.000000", "door_count": 2, "glazed_area": 1, "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "secondary_fuel_type": 15, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 104, "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "secondary_heating_type": 631, "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-19.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Semi-detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-84e4761a679d", "assessment_type": "RdSAP", "completion_date": "2019-11-06", "inspection_date": "2019-11-06", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 107, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 5, "registration_date": "2019-11-06", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Room heaters, smokeless fuel", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 42.75, "quantity": "square metres"}, "party_wall_length": {"value": 7.5, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 8.4, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.4, "quantity": "metres"}, "total_floor_area": {"value": 42.75, "quantity": "square metres"}, "party_wall_length": {"value": 7.5, "quantity": "metres"}, "heat_loss_perimeter": {"value": 18.9, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "D", "party_wall_construction": 1, "wall_thickness_measured": "N", "roof_insulation_location": 2, "roof_insulation_thickness": "150mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 21.63, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 1, "heat_loss_perimeter": {"value": 75.8, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "J", "party_wall_construction": 0, "wall_thickness_measured": "N", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 869, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 5.7, "energy_rating_average": 60, "energy_rating_current": 59, "lighting_cost_current": {"value": 75, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 2, "open_fireplaces_count": 1, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 776, "currency": "GBP"}, "hot_water_cost_current": {"value": 111, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 93, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 63, "environmental_impact_rating": 51}, {"sequence": 2, "typical_saving": {"value": 35, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 64, "environmental_impact_rating": 52}, {"sequence": 3, "typical_saving": {"value": 324, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 60}], "co2_emissions_potential": 3.9, "energy_rating_potential": 73, "lighting_cost_potential": {"value": 75, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 48, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 65, "environmental_impact_rating": 53}}], "hot_water_cost_potential": {"value": 76, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2261, "impact_of_loft_insulation": -230, "impact_of_cavity_insulation": -1608, "space_heating_existing_dwelling": 12912}, "energy_consumption_current": 252, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.1.1.0", "energy_consumption_potential": 163, "environmental_impact_current": 46, "fixed_lighting_outlets_count": 14, "windows_transmission_details": {"u_value": 2, "data_source": 2, "solar_transmittance": 0.72}, "current_energy_efficiency_band": "D", "environmental_impact_potential": 60, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 53, "low_energy_fixed_lighting_outlets_count": 14} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RM143YU/cert-728a620566a1.json b/tests/fixtures/epc_prediction/RM143YU/cert-728a620566a1.json new file mode 100644 index 00000000..0e1009d1 --- /dev/null +++ b/tests/fixtures/epc_prediction/RM143YU/cert-728a620566a1.json @@ -0,0 +1 @@ +{"uprn": 100021408553, "roofs": [{"description": "Pitched, 75 mm loft insulation", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": "Pitched, 150 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "windows": [{"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "addendum": {"narrow_cavities": "true"}, "lighting": {"description": "No low energy lighting", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "postcode": "RM14 3YU", "hot_water": {"description": "From main system", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 1, "created_at": "2014-03-25 17:15:30.000000", "door_count": 2, "glazed_area": 1, "region_code": 2, "report_type": 2, "sap_heating": {"wwhrs": {"rooms_with_bath_and_or_shower": 2, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 1}, "cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "N", "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2107, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 117, "main_heating_data_source": 2}], "secondary_heating_type": 605, "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 12}, "sap_version": 9.91, "schema_type": "SAP-Schema-16.3", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 3}], "dwelling_type": "Detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-ad1b388293df", "schema_version": "LIG-16.1", "assessment_type": "RdSAP", "completion_date": "2014-03-25", "inspection_date": "2014-03-25", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 126, "transaction_type": 5, "conservatory_type": 1, "heated_room_count": 5, "registration_date": "2014-03-25", "restricted_access": 0, "sap_energy_source": {"main_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"percent_roof_area": 0}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, mains gas", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 320, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.48, "floor_insulation": 1, "total_floor_area": 41.35, "floor_construction": 2, "heat_loss_perimeter": 20.42}, {"floor": 1, "room_height": 2.45, "total_floor_area": 40.39, "heat_loss_perimeter": 19.98}], "wall_insulation_type": 4, "construction_age_band": "D", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "75mm"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 270, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.48, "floor_insulation": 1, "total_floor_area": 24.45, "floor_construction": 1, "heat_loss_perimeter": 14.24}, {"floor": 1, "room_height": 2.45, "total_floor_area": 19.99, "heat_loss_perimeter": 13.83}], "wall_insulation_type": 4, "construction_age_band": "G", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "150mm"}], "low_energy_lighting": 0, "solar_water_heating": "N", "bedf_revision_number": 346, "habitable_room_count": 5, "heating_cost_current": {"value": 1332, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 7.9, "energy_rating_average": 60, "energy_rating_current": 46, "lighting_cost_current": {"value": 133, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, TRVs and bypass", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 1, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 732, "currency": "GBP"}, "hot_water_cost_current": {"value": 223, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 44.5440286992623, "currency": "GBP"}, "indicative_cost": "\u00a3100 - \u00a3350", "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 47, "environmental_impact_rating": 42}, {"sequence": 2, "typical_saving": {"value": 257.15883129179, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 56, "environmental_impact_rating": 50}, {"sequence": 3, "typical_saving": {"value": 106.640247199958, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W", "improvement_details": {"improvement_number": 47}, "improvement_category": 5, "energy_performance_rating": 59, "environmental_impact_rating": 54}, {"sequence": 4, "typical_saving": {"value": 24.5120361726345, "currency": "GBP"}, "indicative_cost": "\u00a315 - \u00a330", "improvement_type": "C", "improvement_details": {"improvement_number": 3}, "improvement_category": 5, "energy_performance_rating": 60, "environmental_impact_rating": 55}, {"sequence": 5, "typical_saving": {"value": 52.0764405357982, "currency": "GBP"}, "indicative_cost": "\u00a3145", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 61, "environmental_impact_rating": 56}, {"sequence": 6, "typical_saving": {"value": 73.3022344750348, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 14}, "improvement_category": 5, "energy_performance_rating": 64, "environmental_impact_rating": 59}, {"sequence": 7, "typical_saving": {"value": 216.109178066975, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 68}, {"sequence": 8, "typical_saving": {"value": 38.3245175036501, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 70}, {"sequence": 9, "typical_saving": {"value": 252.73011835245, "currency": "GBP"}, "indicative_cost": "\u00a39,000 - \u00a314,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 79, "environmental_impact_rating": 77}], "co2_emissions_potential": 2.8, "energy_rating_potential": 79, "lighting_cost_potential": {"value": 67, "currency": "GBP"}, "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 49.163355573198, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 57, "environmental_impact_rating": 52}, {"sequence": 2, "typical_saving": {"value": 133.706166948364, "currency": "GBP"}, "improvement_type": "Z1", "improvement_details": {"improvement_number": 51}, "improvement_category": 6, "energy_performance_rating": 70, "environmental_impact_rating": 71}], "hot_water_cost_potential": {"value": 78, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3291, "impact_of_loft_insulation": -675, "space_heating_existing_dwelling": 17995}, "seller_commission_report": "Y", "energy_consumption_current": 324, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "1.4.0.0", "energy_consumption_potential": 114, "environmental_impact_current": 41, "fixed_lighting_outlets_count": 29, "current_energy_efficiency_band": "E", "environmental_impact_potential": 77, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 62, "low_energy_fixed_lighting_outlets_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RM143YU/cert-73504c02d38b.json b/tests/fixtures/epc_prediction/RM143YU/cert-73504c02d38b.json new file mode 100644 index 00000000..af0b7c08 --- /dev/null +++ b/tests/fixtures/epc_prediction/RM143YU/cert-73504c02d38b.json @@ -0,0 +1 @@ +{"uprn": 100021408528, "roofs": [{"description": {"value": "Pitched, 270 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": {"value": "Flat, limited insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "walls": [{"description": {"value": "Cavity wall, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": {"value": "Cavity wall, as built, partial insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": {"value": "Low energy lighting in 41% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "postcode": "RM14 3YU", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 1, "created_at": "2022-06-02 15:43:47.746228", "door_count": 1, "glazed_area": 1, "glazing_gap": "16+", "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2104, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 101, "mcs_installed_heat_pump": "false", "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "secondary_heating_type": 605, "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 25}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-457249785853", "assessment_type": "RdSAP", "completion_date": "2022-06-02", "inspection_date": "2022-05-31", "extensions_count": 2, "measurement_type": 1, "total_floor_area": 108, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 5, "pvc_window_frames": "true", "registration_date": "2022-06-02", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Room heaters, mains gas", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 295, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.47, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 33.04, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 15.75, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.41, "quantity": "metres"}, "total_floor_area": {"value": 33.04, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "heat_loss_perimeter": {"value": 20.52, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "D", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "270mm", "wall_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 295, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.45, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 26.34, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 1, "heat_loss_perimeter": {"value": 21.74, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "F", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}, {"identifier": "Extension 2", "wall_dry_lined": "N", "wall_thickness": 295, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 3, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.47, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 7.88, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 1, "heat_loss_perimeter": {"value": 3.09, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.41, "quantity": "metres"}, "total_floor_area": {"value": 7.88, "quantity": "square metres"}, "party_wall_length": 0, "heat_loss_perimeter": {"value": 5.64, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "D", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "270mm", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 41, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 1049, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 6.7, "energy_rating_average": 60, "energy_rating_current": 48, "lighting_cost_current": {"value": 131, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer and room thermostat", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 590, "currency": "GBP"}, "hot_water_cost_current": {"value": 157, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 26, "currency": "GBP"}, "indicative_cost": "\u00a3850 - \u00a31,500", "improvement_type": "A2", "improvement_details": {"improvement_number": 45}, "improvement_category": 5, "energy_performance_rating": 49, "environmental_impact_rating": 41}, {"sequence": 2, "typical_saving": {"value": 232, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 58, "environmental_impact_rating": 50}, {"sequence": 3, "typical_saving": {"value": 47, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 60, "environmental_impact_rating": 53}, {"sequence": 4, "typical_saving": {"value": 51, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 62, "environmental_impact_rating": 55}, {"sequence": 5, "typical_saving": {"value": 42, "currency": "GBP"}, "indicative_cost": "\u00a350", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 63, "environmental_impact_rating": 56}, {"sequence": 6, "typical_saving": {"value": 39, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 13}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 58}, {"sequence": 7, "typical_saving": {"value": 118, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 65}, {"sequence": 8, "typical_saving": {"value": 37, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 67}, {"sequence": 9, "typical_saving": {"value": 352, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 80, "environmental_impact_rating": 75}], "co2_emissions_potential": 2.4, "energy_rating_potential": 80, "lighting_cost_potential": {"value": 83, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 106, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 62, "environmental_impact_rating": 55}, {"sequence": 2, "typical_saving": {"value": 244, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 73, "environmental_impact_rating": 66}], "hot_water_cost_potential": {"value": 72, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2940, "impact_of_cavity_insulation": -4160, "space_heating_existing_dwelling": 16833}, "energy_consumption_current": 350, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "v94.0.1.1", "energy_consumption_potential": 125, "environmental_impact_current": 40, "fixed_lighting_outlets_count": 17, "current_energy_efficiency_band": "E", "environmental_impact_potential": 75, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 62, "low_energy_fixed_lighting_outlets_count": 7} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RM143YU/cert-7bc8560fb4f5.json b/tests/fixtures/epc_prediction/RM143YU/cert-7bc8560fb4f5.json new file mode 100644 index 00000000..ede5401f --- /dev/null +++ b/tests/fixtures/epc_prediction/RM143YU/cert-7bc8560fb4f5.json @@ -0,0 +1 @@ +{"uprn": 100021408559, "roofs": [{"description": {"value": "Pitched, 250 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": {"value": "Flat, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": {"value": "Cavity wall, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": {"value": "Cavity wall, as built, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in all fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "RM14 3YU", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2017-05-25 09:03:35.000000", "door_count": 2, "glazed_area": 1, "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 2, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "mcs_installed_heat_pump": "false", "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 9895}], "immersion_heating_type": "NA", "secondary_heating_type": 612, "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 25}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.1", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Semi-detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-26ba7949b90b", "assessment_type": "RdSAP", "completion_date": "2017-05-25", "inspection_date": "2017-05-23", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 92, "transaction_type": 1, "conservatory_type": 3, "heated_room_count": 5, "pvc_window_frames": "false", "registration_date": "2017-05-25", "sap_energy_source": {"mains_gas": "Y", "meter_type": 1, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Room heaters, mains gas", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.46, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 37.93, "quantity": "square metres"}, "party_wall_length": {"value": 6.92, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 8.58, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.39, "quantity": "metres"}, "total_floor_area": {"value": 37.93, "quantity": "square metres"}, "party_wall_length": {"value": 6.92, "quantity": "metres"}, "heat_loss_perimeter": {"value": 18.07, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "250mm", "wall_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 16.43, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 1, "heat_loss_perimeter": {"value": 11.5, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "G", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 744, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.2, "energy_rating_average": 60, "energy_rating_current": 61, "lighting_cost_current": {"value": 66, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 568, "currency": "GBP"}, "hot_water_cost_current": {"value": 141, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 155, "currency": "GBP"}, "indicative_cost": "1,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 63}, {"sequence": 2, "typical_saving": {"value": 27, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 64}, {"sequence": 3, "typical_saving": {"value": 50, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 67}, {"sequence": 4, "typical_saving": {"value": 302, "currency": "GBP"}, "indicative_cost": "8,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 80, "environmental_impact_rating": 75}], "co2_emissions_potential": 2.1, "energy_rating_potential": 80, "lighting_cost_potential": {"value": 66, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 30, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 68, "environmental_impact_rating": 64}}], "hot_water_cost_potential": {"value": 85, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2882, "impact_of_cavity_insulation": -2231, "space_heating_existing_dwelling": 9983}, "energy_consumption_current": 260, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "1.0.x", "energy_consumption_potential": 124, "environmental_impact_current": 54, "fixed_lighting_outlets_count": 9, "current_energy_efficiency_band": "D", "environmental_impact_potential": 75, "has_heated_separate_conservatory": "true", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 46, "low_energy_fixed_lighting_outlets_count": 9} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RM143YU/cert-854f49ab70db.json b/tests/fixtures/epc_prediction/RM143YU/cert-854f49ab70db.json new file mode 100644 index 00000000..b49b8801 --- /dev/null +++ b/tests/fixtures/epc_prediction/RM143YU/cert-854f49ab70db.json @@ -0,0 +1 @@ +{"uprn": 100021408552, "roofs": [{"description": {"value": "Pitched, 100 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": {"value": "Cavity wall, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"addendum_numbers": [8], "cavity_fill_recommended": "true"}, "lighting": {"description": {"value": "Low energy lighting in all fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "RM14 3YU", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2019-08-14 11:46:31", "door_count": 2, "glazed_area": 1, "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 10328}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.93, "schema_type": "RdSAP-Schema-18.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Semi-detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-69ebc64f9bf6", "assessment_type": "RdSAP", "completion_date": "2019-08-14", "inspection_date": "2019-07-26", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 84, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "false", "registration_date": "2019-08-14", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 2, "percent_roof_area": 45}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lzc_energy_sources": [11], "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 42, "quantity": "square metres"}, "party_wall_length": {"value": 7.5, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 18.7, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.4, "quantity": "metres"}, "total_floor_area": {"value": 42, "quantity": "square metres"}, "party_wall_length": {"value": 7.5, "quantity": "metres"}, "heat_loss_perimeter": {"value": 18.7, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "D", "party_wall_construction": 1, "wall_thickness_measured": "N", "roof_insulation_location": 2, "roof_insulation_thickness": "100mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 582, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.3, "energy_rating_average": 60, "energy_rating_current": 78, "lighting_cost_current": {"value": 64, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 1, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 438, "currency": "GBP"}, "hot_water_cost_current": {"value": 99, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 103, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 82, "environmental_impact_rating": 78}, {"sequence": 2, "typical_saving": {"value": 40, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 84, "environmental_impact_rating": 81}, {"sequence": 3, "typical_saving": {"value": 32, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 85, "environmental_impact_rating": 83}], "co2_emissions_potential": 1.3, "energy_rating_potential": 85, "lighting_cost_potential": {"value": 64, "currency": "GBP"}, "schema_version_original": "LIG-18.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 55, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 84, "environmental_impact_rating": 81}}], "hot_water_cost_potential": {"value": 68, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2163, "impact_of_loft_insulation": -387, "impact_of_cavity_insulation": -2386, "space_heating_existing_dwelling": 10608}, "energy_consumption_current": 153, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.1.0.0", "energy_consumption_potential": 87, "environmental_impact_current": 72, "fixed_lighting_outlets_count": 12, "windows_transmission_details": {"u_value": 3.1, "data_source": 2, "solar_transmittance": 0.76}, "current_energy_efficiency_band": "C", "environmental_impact_potential": 83, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 28, "low_energy_fixed_lighting_outlets_count": 12} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RM143YU/cert-86b54caf4ff4.json b/tests/fixtures/epc_prediction/RM143YU/cert-86b54caf4ff4.json new file mode 100644 index 00000000..6c379ee8 --- /dev/null +++ b/tests/fixtures/epc_prediction/RM143YU/cert-86b54caf4ff4.json @@ -0,0 +1 @@ +{"uprn": 100021408533, "roofs": [{"description": {"value": "Pitched, 250 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": {"value": "Flat, limited insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": {"value": "Pitched, 200 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": {"value": "Cavity wall, filled cavity", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in 50% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "RM14 3YU", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2022-01-29 14:01:35.915555", "door_count": 1, "glazed_area": 1, "glazing_gap": "16+", "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "mcs_installed_heat_pump": "false", "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 10462}], "immersion_heating_type": "NA", "secondary_heating_type": 612, "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 38}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Semi-detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-6d7e93b70fb3", "assessment_type": "RdSAP", "completion_date": "2022-01-29", "inspection_date": "2022-01-26", "extensions_count": 2, "measurement_type": 1, "total_floor_area": 107, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2022-01-29", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "Room heaters, mains gas", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 290, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.49, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 32.94, "quantity": "square metres"}, "party_wall_length": {"value": 6.91, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 9.87, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.39, "quantity": "metres"}, "total_floor_area": {"value": 32.94, "quantity": "square metres"}, "party_wall_length": {"value": 6.91, "quantity": "metres"}, "heat_loss_perimeter": {"value": 12.8, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "D", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "250mm", "wall_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 260, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.5, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 25.64, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 1, "heat_loss_perimeter": {"value": 17.01, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "E", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}, {"identifier": "Extension 2", "wall_dry_lined": "N", "wall_thickness": 290, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 3, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.49, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 7.63, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 1, "heat_loss_perimeter": {"value": 1, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.39, "quantity": "metres"}, "total_floor_area": {"value": 7.63, "quantity": "square metres"}, "party_wall_length": 0, "heat_loss_perimeter": {"value": 5.54, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "D", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "200mm", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 50, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 765, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.8, "energy_rating_average": 60, "energy_rating_current": 60, "lighting_cost_current": {"value": 123, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 1, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 621, "currency": "GBP"}, "hot_water_cost_current": {"value": 123, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 78, "currency": "GBP"}, "indicative_cost": "\u00a3850 - \u00a31,500", "improvement_type": "A2", "improvement_details": {"improvement_number": 45}, "improvement_category": 5, "energy_performance_rating": 63, "environmental_impact_rating": 57}, {"sequence": 2, "typical_saving": {"value": 37, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 59}, {"sequence": 3, "typical_saving": {"value": 37, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 61}, {"sequence": 4, "typical_saving": {"value": 36, "currency": "GBP"}, "indicative_cost": "\u00a340", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 62}, {"sequence": 5, "typical_saving": {"value": 40, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 64}, {"sequence": 6, "typical_saving": {"value": 352, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 78, "environmental_impact_rating": 72}], "co2_emissions_potential": 2.6, "energy_rating_potential": 78, "lighting_cost_potential": {"value": 82, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "hot_water_cost_potential": {"value": 80, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2791, "space_heating_existing_dwelling": 11375}, "energy_consumption_current": 256, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "v94.0.1.1", "energy_consumption_potential": 138, "environmental_impact_current": 53, "fixed_lighting_outlets_count": 16, "current_energy_efficiency_band": "D", "environmental_impact_potential": 72, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 45, "low_energy_fixed_lighting_outlets_count": 8} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RM143YU/cert-8c6945676927.json b/tests/fixtures/epc_prediction/RM143YU/cert-8c6945676927.json new file mode 100644 index 00000000..851f1ed2 --- /dev/null +++ b/tests/fixtures/epc_prediction/RM143YU/cert-8c6945676927.json @@ -0,0 +1 @@ +{"uprn": 100021408557, "roofs": [{"description": "Pitched, no insulation", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": "Roof room(s), insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "addendum": {"addendum_numbers": [15], "cavity_fill_recommended": "true"}, "lighting": {"description": "Good lighting efficiency", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "RM14 3YU", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2026-04-30 19:20:25", "door_count": 4, "region_code": 2, "report_type": 2, "sap_heating": {"number_baths": 2, "cylinder_size": 4, "shower_outlets": [{"shower_outlet": {"shower_wwhrs": 1, "shower_outlet_type": 1}}], "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 19130}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "true", "orientation": 5, "window_type": 1, "glazing_type": 2, "window_width": 1.06, "window_height": 0.55, "draught_proofed": "true", "window_location": 0, "window_wall_type": 4, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 2, "window_width": 0.52, "window_height": 0.76, "draught_proofed": "true", "window_location": 0, "window_wall_type": 4, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 0.45, "window_height": 0.88, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 0.46, "window_height": 0.3, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 0.45, "window_height": 0.88, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 0.46, "window_height": 0.88, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 0.46, "window_height": 0.33, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 0.46, "window_height": 0.33, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 0.46, "window_height": 0.88, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 1, "window_type": 1, "glazing_type": 3, "window_width": 0.49, "window_height": 0.65, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 1, "window_type": 1, "glazing_type": 3, "window_width": 0.49, "window_height": 0.65, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 1, "window_type": 1, "glazing_type": 3, "window_width": 0.49, "window_height": 0.28, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 1, "window_type": 1, "glazing_type": 3, "window_width": 0.49, "window_height": 0.28, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 1, "window_type": 1, "glazing_type": 3, "window_width": 0.49, "window_height": 0.65, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 1, "window_type": 1, "glazing_type": 3, "window_width": 0.49, "window_height": 0.65, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 1, "window_type": 1, "glazing_type": 3, "window_width": 0.49, "window_height": 0.28, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 0.44, "window_height": 0.52, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 0.42, "window_height": 0.32, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 0.42, "window_height": 0.88, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 0.42, "window_height": 0.88, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 0.42, "window_height": 0.32, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 0.42, "window_height": 0.32, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Semi-detached house", "language_code": 1, "pressure_test": 4, "property_type": 0, "address_line_1": "addr-a767ecb05c85", "assessment_type": "RdSAP", "completion_date": "2026-04-30", "inspection_date": "2026-04-30", "extensions_count": 3, "measurement_type": 1, "total_floor_area": 148, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 7, "registration_date": "2026-04-30", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "false", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 2, "electricity_smart_meter_present": "false"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "floor_heat_loss": 7, "sap_room_in_roof": {"floor_area": 27.16, "room_in_roof_type_1": {"gable_wall_type_1": 1, "gable_wall_type_2": 0, "gable_wall_length_1": 1.71, "gable_wall_length_2": 1.71}, "construction_age_band": "L"}, "roof_construction": 8, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 39.93, "quantity": "square metres"}, "party_wall_length": {"value": 7.03, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 4.61, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.4, "quantity": "metres"}, "total_floor_area": {"value": 39.93, "quantity": "square metres"}, "party_wall_length": {"value": 7.03, "quantity": "metres"}, "heat_loss_perimeter": {"value": 6.38, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": 0, "wall_thickness_measured": "N", "roof_insulation_location": 7, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "sloping_ceiling_insulation_thickness": "AB"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 8, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 2.04, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 4.09, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": "NA", "wall_thickness_measured": "N", "roof_insulation_location": 7, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "sloping_ceiling_insulation_thickness": "AB"}, {"identifier": "Extension 2", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 8, "wall_construction": 4, "building_part_number": 3, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.5, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 23.26, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 13.15, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": "NA", "wall_thickness_measured": "N", "roof_insulation_location": 7, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "sloping_ceiling_insulation_thickness": "AB"}, {"identifier": "Extension 3", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 8, "wall_construction": 4, "building_part_number": 4, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 15.22, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 11.67, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "C", "party_wall_construction": "NA", "wall_thickness_measured": "N", "roof_insulation_location": 7, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "sloping_ceiling_insulation_thickness": "AB"}], "solar_water_heating": "N", "habitable_room_count": 7, "heating_cost_current": {"value": 1833, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 5.7, "energy_rating_average": 60, "energy_rating_current": 63, "lighting_cost_current": {"value": 112, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 991, "currency": "GBP"}, "hot_water_cost_current": {"value": 278, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 404, "currency": "GBP"}, "indicative_cost": "\u00a3900 - \u00a31,200", "improvement_type": "A2", "improvement_details": {"improvement_number": 45}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 65}, {"sequence": 2, "typical_saving": {"value": 213, "currency": "GBP"}, "indicative_cost": "\u00a3900 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 69}, {"sequence": 3, "typical_saving": {"value": 98, "currency": "GBP"}, "indicative_cost": "\u00a37,500 - \u00a311,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 71}, {"sequence": 4, "typical_saving": {"value": 125, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a310,000", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 74}, {"sequence": 5, "typical_saving": {"value": 246, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 79, "environmental_impact_rating": 75}], "co2_emissions_potential": 3.2, "energy_rating_potential": 79, "lighting_cost_potential": {"value": 112, "currency": "GBP"}, "schema_version_original": "21.0.1", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 59, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 73, "environmental_impact_rating": 71}}], "hot_water_cost_potential": {"value": 280, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3237.23, "space_heating_existing_dwelling": 20368.71}, "draughtproofed_door_count": 4, "energy_consumption_current": 211, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "5.02r0344", "energy_consumption_potential": 114, "environmental_impact_current": 56, "current_energy_efficiency_band": "D", "environmental_impact_potential": 75, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 39, "low_energy_fixed_lighting_bulbs_count": 56, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RM143YU/cert-9124910a43bd.json b/tests/fixtures/epc_prediction/RM143YU/cert-9124910a43bd.json new file mode 100644 index 00000000..3c69415d --- /dev/null +++ b/tests/fixtures/epc_prediction/RM143YU/cert-9124910a43bd.json @@ -0,0 +1 @@ +{"uprn": 100021408534, "roofs": [{"description": "Pitched, 250 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": "Pitched, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": "No low energy lighting", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "postcode": "RM14 3YU", "hot_water": {"description": "From main system", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "post_town": "", "built_form": 2, "created_at": "2022-04-26 13:48:44.211199", "door_count": 2, "glazed_area": 4, "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "secondary_fuel_type": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2104, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 105, "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "secondary_heating_type": 601, "cylinder_insulation_type": 2, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 38}, "sap_version": 9.94, "sap_windows": [{"pvc_frame": "true", "glazing_gap": "16+", "orientation": 8, "window_area": {"value": 7.36, "quantity": "square metres"}, "window_type": 2, "glazing_type": 3, "window_location": 1}], "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-1e2cfc4b7eb1", "assessment_type": "RdSAP", "completion_date": "2022-04-26", "inspection_date": "2022-04-26", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 87, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "registration_date": "2022-04-26", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, mains gas", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "Y", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 39.86, "quantity": "square metres"}, "party_wall_length": {"value": 6.75, "quantity": "metres"}, "floor_construction": 3, "heat_loss_perimeter": {"value": 16.05, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.41, "quantity": "metres"}, "total_floor_area": {"value": 39.86, "quantity": "square metres"}, "party_wall_length": {"value": 6.75, "quantity": "metres"}, "heat_loss_perimeter": {"value": 17.65, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "D", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "250mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "Y", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 8, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.42, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 7.36, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 9.19, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "D", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 7, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "sloping_ceiling_insulation_thickness": "AB"}], "low_energy_lighting": 0, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 694, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 5.0, "energy_rating_average": 60, "energy_rating_current": 54, "lighting_cost_current": {"value": 164, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and room thermostat", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": "ND", "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 457, "currency": "GBP"}, "hot_water_cost_current": {"value": 180, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 120, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 59, "environmental_impact_rating": 53}, {"sequence": 2, "typical_saving": {"value": 39, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 61, "environmental_impact_rating": 56}, {"sequence": 3, "typical_saving": {"value": 21, "currency": "GBP"}, "indicative_cost": "\u00a315 - \u00a330", "improvement_type": "C", "improvement_details": {"improvement_number": 2}, "improvement_category": 5, "energy_performance_rating": 62, "environmental_impact_rating": 57}, {"sequence": 4, "typical_saving": {"value": 72, "currency": "GBP"}, "indicative_cost": "\u00a350", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 64, "environmental_impact_rating": 58}, {"sequence": 5, "typical_saving": {"value": 27, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 13}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 60}, {"sequence": 6, "typical_saving": {"value": 118, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 68}, {"sequence": 7, "typical_saving": {"value": 35, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 70}, {"sequence": 8, "typical_saving": {"value": 358, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 82, "environmental_impact_rating": 79}], "co2_emissions_potential": 1.7, "energy_rating_potential": 82, "lighting_cost_potential": {"value": 82, "currency": "GBP"}, "schema_version_original": "20.0.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 104, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 64, "environmental_impact_rating": 60}, {"sequence": 2, "typical_saving": {"value": 196, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 72, "environmental_impact_rating": 67}], "hot_water_cost_potential": {"value": 68, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 3243, "impact_of_cavity_insulation": -2249, "space_heating_existing_dwelling": 10503}, "energy_consumption_current": 324, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.09r0002", "energy_consumption_potential": 107, "environmental_impact_current": 47, "fixed_lighting_outlets_count": 10, "current_energy_efficiency_band": "E", "environmental_impact_potential": 79, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 57, "low_energy_fixed_lighting_outlets_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RM143YU/cert-b9251277c24d.json b/tests/fixtures/epc_prediction/RM143YU/cert-b9251277c24d.json new file mode 100644 index 00000000..d7c9a647 --- /dev/null +++ b/tests/fixtures/epc_prediction/RM143YU/cert-b9251277c24d.json @@ -0,0 +1 @@ +{"uprn": 100021408542, "roofs": [{"description": "Pitched, 250 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": "Flat, insulated (assumed)", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": "Cavity wall, filled cavity", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "windows": [{"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "RM14 3YU", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2014-01-08 14:42:23.000000", "door_count": 3, "glazed_area": 1, "region_code": 2, "report_type": 2, "sap_heating": {"wwhrs": {"rooms_with_bath_and_or_shower": 2, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 0}, "cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "boiler_index_number": 10327, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "main_heating_data_source": 1}], "has_fixed_air_conditioning": "false"}, "sap_version": 9.91, "schema_type": "SAP-Schema-16.2", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-b4fc3b543340", "schema_version": "LIG-16.1", "assessment_type": "RdSAP", "completion_date": "2014-01-08", "inspection_date": "2014-01-08", "extensions_count": 2, "measurement_type": 1, "total_floor_area": 120, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 7, "registration_date": "2014-01-08", "restricted_access": 0, "sap_energy_source": {"main_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"percent_roof_area": 0}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.5, "floor_insulation": 1, "total_floor_area": 41.8, "floor_construction": 1, "heat_loss_perimeter": 10.4}, {"floor": 1, "room_height": 2.4, "total_floor_area": 41.8, "heat_loss_perimeter": 12}], "wall_insulation_type": 2, "construction_age_band": "D", "wall_thickness_measured": "N", "roof_insulation_location": 2, "roof_insulation_thickness": "250mm"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.5, "floor_insulation": 1, "total_floor_area": 14.3, "floor_construction": 1, "heat_loss_perimeter": 10.7}], "wall_insulation_type": 4, "construction_age_band": "G", "wall_thickness_measured": "N", "roof_insulation_location": 4, "roof_insulation_thickness": "NI"}, {"identifier": "Extension 2", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 3, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.4, "floor_insulation": 1, "total_floor_area": 6, "floor_construction": 1, "heat_loss_perimeter": 7}, {"floor": 1, "room_height": 2.5, "total_floor_area": 15.7, "heat_loss_perimeter": 114}], "wall_insulation_type": 2, "construction_age_band": "F", "wall_thickness_measured": "N", "roof_insulation_location": 2, "roof_insulation_thickness": "250mm"}], "low_energy_lighting": 100, "solar_water_heating": "N", "bedf_revision_number": 352, "habitable_room_count": 7, "heating_cost_current": {"value": 921, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.9, "energy_rating_average": 60, "energy_rating_current": 64, "lighting_cost_current": {"value": 64, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 1, "open_fireplaces_count": 1, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 863, "currency": "GBP"}, "hot_water_cost_current": {"value": 103, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 57.7, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W", "improvement_details": {"improvement_number": 47}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 62}, {"sequence": 2, "typical_saving": {"value": 252.73, "currency": "GBP"}, "indicative_cost": "\u00a39,000 - \u00a314,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 69}], "co2_emissions_potential": 3.6, "energy_rating_potential": 73, "lighting_cost_potential": {"value": 64, "currency": "GBP"}, "hot_water_cost_potential": {"value": 103, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2296, "space_heating_existing_dwelling": 18255}, "seller_commission_report": "Y", "energy_consumption_current": 212, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "1.4.1.0", "energy_consumption_potential": 155, "environmental_impact_current": 59, "fixed_lighting_outlets_count": 13, "current_energy_efficiency_band": "D", "environmental_impact_potential": 69, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 41, "low_energy_fixed_lighting_outlets_count": 13} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RM143YU/cert-c93fcb1d9cf7.json b/tests/fixtures/epc_prediction/RM143YU/cert-c93fcb1d9cf7.json new file mode 100644 index 00000000..d7536f91 --- /dev/null +++ b/tests/fixtures/epc_prediction/RM143YU/cert-c93fcb1d9cf7.json @@ -0,0 +1 @@ +{"uprn": 100021408554, "roofs": [{"description": "Pitched, 25 mm loft insulation", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": "Pitched, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Solid, insulated (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "windows": [{"description": "Fully double glazed", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "lighting": {"description": "Low energy lighting in 40% of fixed outlets", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "postcode": "RM14 3YU", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2014-08-12 05:58:55.000000", "door_count": 2, "glazed_area": 2, "region_code": 2, "report_type": 2, "sap_heating": {"wwhrs": {"rooms_with_bath_and_or_shower": 2, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 1}, "cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "boiler_index_number": 10327, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "main_heating_data_source": 1}], "has_fixed_air_conditioning": "false"}, "sap_version": 9.91, "schema_type": "SAP-Schema-16.3", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-6cb8cf247890", "schema_version": "LIG-16.1", "assessment_type": "RdSAP", "completion_date": "2014-08-12", "inspection_date": "2014-08-12", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 126, "transaction_type": 5, "conservatory_type": 1, "heated_room_count": 5, "registration_date": "2014-08-12", "restricted_access": 0, "sap_energy_source": {"main_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"percent_roof_area": 0}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.45, "floor_insulation": 1, "total_floor_area": 41.78, "floor_construction": 1, "heat_loss_perimeter": 5.7}, {"floor": 1, "room_height": 2.45, "total_floor_area": 41.78, "heat_loss_perimeter": 18.73}], "wall_insulation_type": 4, "construction_age_band": "D", "wall_thickness_measured": "N", "roof_insulation_location": 2, "roof_insulation_thickness": "25mm"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.63, "floor_insulation": 1, "total_floor_area": 42.46, "floor_construction": 1, "heat_loss_perimeter": 21.04}], "wall_insulation_type": 4, "construction_age_band": "K", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "NI"}], "low_energy_lighting": 40, "solar_water_heating": "N", "bedf_revision_number": 346, "habitable_room_count": 5, "heating_cost_current": {"value": 710, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.8, "energy_rating_average": 60, "energy_rating_current": 71, "lighting_cost_current": {"value": 107, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 547, "currency": "GBP"}, "hot_water_cost_current": {"value": 109, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 69.9204397752441, "currency": "GBP"}, "indicative_cost": "\u00a3100 - \u00a3350", "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 72}, {"sequence": 2, "typical_saving": {"value": 98.255650010857, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 76}, {"sequence": 3, "typical_saving": {"value": 34.2017052907536, "currency": "GBP"}, "indicative_cost": "\u00a375", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 77}, {"sequence": 4, "typical_saving": {"value": 260.661716949552, "currency": "GBP"}, "indicative_cost": "\u00a39,000 - \u00a314,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 85, "environmental_impact_rating": 84}], "co2_emissions_potential": 1.9, "energy_rating_potential": 85, "lighting_cost_potential": {"value": 67, "currency": "GBP"}, "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 18.4567923421866, "currency": "GBP"}, "improvement_type": "Q2", "improvement_details": {"improvement_number": 55}, "improvement_category": 6, "energy_performance_rating": 77, "environmental_impact_rating": 77}}], "hot_water_cost_potential": {"value": 109, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2305, "impact_of_loft_insulation": -1558, "space_heating_existing_dwelling": 12713}, "seller_commission_report": "Y", "energy_consumption_current": 158, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "1.4.0.0", "energy_consumption_potential": 77, "environmental_impact_current": 69, "fixed_lighting_outlets_count": 25, "current_energy_efficiency_band": "C", "environmental_impact_potential": 84, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 30, "low_energy_fixed_lighting_outlets_count": 10} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RM143YU/cert-d32b112ed162.json b/tests/fixtures/epc_prediction/RM143YU/cert-d32b112ed162.json new file mode 100644 index 00000000..fe878b19 --- /dev/null +++ b/tests/fixtures/epc_prediction/RM143YU/cert-d32b112ed162.json @@ -0,0 +1 @@ +{"uprn": 100021408530, "roofs": [{"description": {"value": "Pitched, 250 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": {"value": "Cavity wall, filled cavity", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "Low energy lighting in all fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "RM14 3YU", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2019-10-25 12:49:49.000000", "door_count": 2, "glazed_area": 1, "glazing_gap": 12, "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 16842}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-19.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Semi-detached house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-65e4d20dce7d", "assessment_type": "RdSAP", "completion_date": "2019-10-25", "inspection_date": "2019-10-25", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 81, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "true", "registration_date": "2019-10-25", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 41, "quantity": "square metres"}, "party_wall_length": {"value": 7.1, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 18.8, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.4, "quantity": "metres"}, "total_floor_area": {"value": 40.3, "quantity": "square metres"}, "party_wall_length": {"value": 7.1, "quantity": "metres"}, "heat_loss_perimeter": {"value": 18.3, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "D", "party_wall_construction": 1, "wall_thickness_measured": "N", "roof_insulation_location": 2, "roof_insulation_thickness": "250mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 449, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.6, "energy_rating_average": 60, "energy_rating_current": 72, "lighting_cost_current": {"value": 62, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 408, "currency": "GBP"}, "hot_water_cost_current": {"value": 84, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 80, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 41, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 73}, {"sequence": 2, "typical_saving": {"value": 29, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 74}, {"sequence": 3, "typical_saving": {"value": 324, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 84}], "co2_emissions_potential": 1.2, "energy_rating_potential": 86, "lighting_cost_potential": {"value": 62, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "hot_water_cost_potential": {"value": 55, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1903, "space_heating_existing_dwelling": 7629}, "energy_consumption_current": 179, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.1.1.0", "energy_consumption_potential": 81, "environmental_impact_current": 70, "fixed_lighting_outlets_count": 12, "windows_transmission_details": {"u_value": 2.8, "data_source": 2, "solar_transmittance": 0.76}, "current_energy_efficiency_band": "C", "environmental_impact_potential": 84, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 31, "low_energy_fixed_lighting_outlets_count": 12} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RM143YU/cert-e0092f52f8d0.json b/tests/fixtures/epc_prediction/RM143YU/cert-e0092f52f8d0.json new file mode 100644 index 00000000..1e2b3a91 --- /dev/null +++ b/tests/fixtures/epc_prediction/RM143YU/cert-e0092f52f8d0.json @@ -0,0 +1 @@ +{"uprn": 100021408541, "roofs": [{"description": "Pitched, 200 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": "Flat, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, with external insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Suspended, insulated (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "RM14 3YU", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2022-03-09 19:13:54.782838", "door_count": 0, "glazed_area": 1, "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 2, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 1, "fan_flue_present": "Y", "heat_emitter_type": 2, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2110, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 101, "central_heating_pump_age": 2, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and underfloor heating, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-71ac21fce4c6", "assessment_type": "RdSAP", "completion_date": "2022-03-09", "inspection_date": "2022-03-09", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 110, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 14, "registration_date": "2022-03-09", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 340, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.2, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 43.49, "quantity": "square metres"}, "party_wall_length": {"value": 7.7, "quantity": "metres"}, "floor_construction": 3, "heat_loss_perimeter": {"value": 9.03, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.2, "quantity": "metres"}, "total_floor_area": {"value": 43.49, "quantity": "square metres"}, "party_wall_length": {"value": 7.7, "quantity": "metres"}, "heat_loss_perimeter": {"value": 18.97, "quantity": "metres"}}], "wall_insulation_type": 1, "construction_age_band": "E", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "200mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 340, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.2, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 22.73, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 3, "heat_loss_perimeter": {"value": 17.71, "quantity": "metres"}}], "wall_insulation_type": 1, "construction_age_band": "L", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 14, "heating_cost_current": {"value": 408, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.9, "energy_rating_average": 60, "energy_rating_current": 75, "lighting_cost_current": {"value": 84, "currency": "GBP"}, "main_heating_controls": [{"description": "Time and temperature zone control", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 348, "currency": "GBP"}, "hot_water_cost_current": {"value": 144, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 97, "currency": "GBP"}, "indicative_cost": "\u00a32,200 - \u00a33,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 79, "environmental_impact_rating": 78}, {"sequence": 2, "typical_saving": {"value": 37, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 80, "environmental_impact_rating": 80}, {"sequence": 3, "typical_saving": {"value": 358, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 89, "environmental_impact_rating": 88}], "co2_emissions_potential": 1.1, "energy_rating_potential": 89, "lighting_cost_potential": {"value": 84, "currency": "GBP"}, "schema_version_original": "20.0.0", "alternative_improvements": [{"improvement": {"sequence": 1, "typical_saving": {"value": 123, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 78, "environmental_impact_rating": 74}}], "hot_water_cost_potential": {"value": 71, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2726, "space_heating_existing_dwelling": 6092}, "energy_consumption_current": 150, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.08r0002", "energy_consumption_potential": 56, "environmental_impact_current": 72, "fixed_lighting_outlets_count": 14, "current_energy_efficiency_band": "C", "environmental_impact_potential": 88, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 26, "low_energy_fixed_lighting_outlets_count": 14} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RM143YU/cert-ef7108c2ef93.json b/tests/fixtures/epc_prediction/RM143YU/cert-ef7108c2ef93.json new file mode 100644 index 00000000..0c7642d1 --- /dev/null +++ b/tests/fixtures/epc_prediction/RM143YU/cert-ef7108c2ef93.json @@ -0,0 +1 @@ +{"uprn": 100021408531, "roofs": [{"description": "Pitched, 270 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": "Flat, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Cavity wall, filled cavity", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Solid, insulated (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": "Low energy lighting in 50% of fixed outlets", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "RM14 3YU", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2020-10-07 11:24:35.252364", "door_count": 2, "glazed_area": 1, "region_code": 2, "report_type": 2, "sap_heating": {"cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "secondary_fuel_type": 29, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 10201}], "immersion_heating_type": "NA", "secondary_heating_type": 691, "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-e328fd3e7f43", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2020-10-07", "inspection_date": "2020-10-01", "extensions_count": 1, "measurement_type": 2, "total_floor_area": 97, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 5, "registration_date": "2020-10-07", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "Room heaters, electric", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 270, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.46, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 46.87, "quantity": "square metres"}, "party_wall_length": {"value": 7.43, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 15.85, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.39, "quantity": "metres"}, "total_floor_area": {"value": 46.87, "quantity": "square metres"}, "party_wall_length": {"value": 7.43, "quantity": "metres"}, "heat_loss_perimeter": {"value": 20.27, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "C", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "270mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 270, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.13, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 18.59, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 16, "quantity": "metres"}}], "wall_insulation_type": 2, "construction_age_band": "J", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "low_energy_lighting": 50, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 587, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.2, "energy_rating_average": 60, "energy_rating_current": 68, "lighting_cost_current": {"value": 112, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 546, "currency": "GBP"}, "hot_water_cost_current": {"value": 125, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 48, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 69}, {"sequence": 2, "typical_saving": {"value": 32, "currency": "GBP"}, "indicative_cost": "\u00a340", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 70}, {"sequence": 3, "typical_saving": {"value": 40, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 72}, {"sequence": 4, "typical_saving": {"value": 345, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 82, "environmental_impact_rating": 80}], "co2_emissions_potential": 1.7, "energy_rating_potential": 82, "lighting_cost_potential": {"value": 75, "currency": "GBP"}, "schema_version_original": "20.0.0", "hot_water_cost_potential": {"value": 82, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2686, "space_heating_existing_dwelling": 8005}, "energy_consumption_current": 190, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.06r0006", "energy_consumption_potential": 99, "environmental_impact_current": 66, "fixed_lighting_outlets_count": 16, "current_energy_efficiency_band": "D", "environmental_impact_potential": 80, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 33, "low_energy_fixed_lighting_outlets_count": 8} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/RM143YU/cert-fc5e9d928216.json b/tests/fixtures/epc_prediction/RM143YU/cert-fc5e9d928216.json new file mode 100644 index 00000000..a83ce246 --- /dev/null +++ b/tests/fixtures/epc_prediction/RM143YU/cert-fc5e9d928216.json @@ -0,0 +1 @@ +{"uprn": 100021408550, "roofs": [{"description": "Pitched, 300+ mm loft insulation", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, {"description": "Flat, insulated (assumed)", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": "Cavity wall, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "windows": [{"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "addendum": {"cavity_fill_recommended": "true"}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "RM14 3YU", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 2, "created_at": "2014-11-22 14:33:06.000000", "door_count": 2, "glazed_area": 1, "region_code": 2, "report_type": 2, "sap_heating": {"wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "cylinder_size": 2, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "boiler_index_number": 15018, "main_heating_number": 1, "main_heating_control": 2104, "main_heating_category": 2, "main_heating_fraction": 1, "main_heating_data_source": 1}], "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 9.91, "schema_type": "SAP-Schema-16.3", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-f651e443c727", "schema_version": "LIG-16.1", "assessment_type": "RdSAP", "completion_date": "2014-11-22", "inspection_date": "2014-11-07", "extensions_count": 2, "measurement_type": 1, "total_floor_area": 102, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "registration_date": "2014-11-22", "restricted_access": 0, "sap_energy_source": {"main_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"percent_roof_area": 0}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 4, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.4, "floor_insulation": 1, "total_floor_area": 39.6, "floor_construction": 2, "heat_loss_perimeter": 9.1}, {"floor": 1, "room_height": 2.4, "total_floor_area": 39.6, "heat_loss_perimeter": 18.2}], "wall_insulation_type": 4, "construction_age_band": "D", "wall_thickness_measured": "N", "roof_insulation_location": 2, "roof_insulation_thickness": "300mm+"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 4, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.3, "floor_insulation": 1, "total_floor_area": 12.6, "floor_construction": 1, "heat_loss_perimeter": 9.8}], "wall_insulation_type": 4, "construction_age_band": "G", "wall_thickness_measured": "N", "roof_insulation_location": 4, "roof_insulation_thickness": "NI"}, {"identifier": "Extension 2", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 4, "building_part_number": 3, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.4, "floor_insulation": 1, "total_floor_area": 10, "floor_construction": 1, "heat_loss_perimeter": 9.2}], "wall_insulation_type": 4, "construction_age_band": "H", "wall_thickness_measured": "N", "roof_insulation_location": 4, "roof_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "bedf_revision_number": 367, "habitable_room_count": 4, "heating_cost_current": {"value": 749, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.9, "energy_rating_average": 60, "energy_rating_current": 66, "lighting_cost_current": {"value": 60, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and room thermostat", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 1, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 570, "currency": "GBP"}, "hot_water_cost_current": {"value": 126, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 114.8, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a31,500", "improvement_type": "B", "improvement_details": {"improvement_number": 6}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 69}, {"sequence": 2, "typical_saving": {"value": 65.55, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W", "improvement_details": {"improvement_number": 47}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 72}, {"sequence": 3, "typical_saving": {"value": 40.99, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 74}, {"sequence": 4, "typical_saving": {"value": 260.66, "currency": "GBP"}, "indicative_cost": "\u00a39,000 - \u00a314,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 83, "environmental_impact_rating": 82}], "co2_emissions_potential": 1.9, "energy_rating_potential": 83, "lighting_cost_potential": {"value": 60, "currency": "GBP"}, "hot_water_cost_potential": {"value": 83, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2641, "impact_of_cavity_insulation": -2547, "space_heating_existing_dwelling": 13507}, "seller_commission_report": "Y", "energy_consumption_current": 199, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "1.4.1.0", "energy_consumption_potential": 92, "environmental_impact_current": 63, "fixed_lighting_outlets_count": 13, "current_energy_efficiency_band": "D", "environmental_impact_potential": 82, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 38, "low_energy_fixed_lighting_outlets_count": 13} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/W104HL/cert-006fcca19e8e.json b/tests/fixtures/epc_prediction/W104HL/cert-006fcca19e8e.json new file mode 100644 index 00000000..7c0dfc58 --- /dev/null +++ b/tests/fixtures/epc_prediction/W104HL/cert-006fcca19e8e.json @@ -0,0 +1 @@ +{"uprn": 100022784900, "roofs": [{"description": "Pitched, 50 mm loft insulation", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Partial double glazing", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "lighting": {"description": "Low energy lighting in 33% of fixed outlets", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "postcode": "W10 4HL", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2018-11-16 16:10:03.000000", "door_count": 0, "glazed_area": 1, "glazing_gap": "16+", "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 103, "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.93, "schema_type": "RdSAP-Schema-18.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Mid-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-bee30d6e6d5a", "assessment_type": "RdSAP", "completion_date": "2018-11-16", "inspection_date": "2018-11-15", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 77, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 3, "pvc_window_frames": "true", "registration_date": "2018-11-16", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 260, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.79, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 38.28, "quantity": "square metres"}, "party_wall_length": {"value": 17.45, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 11.91, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.79, "quantity": "metres"}, "total_floor_area": {"value": 38.28, "quantity": "square metres"}, "party_wall_length": {"value": 17.45, "quantity": "metres"}, "heat_loss_perimeter": {"value": 11.91, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "A", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "50mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 33, "solar_water_heating": "N", "habitable_room_count": 3, "heating_cost_current": {"value": 618, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.8, "energy_rating_average": 60, "energy_rating_current": 58, "lighting_cost_current": {"value": 92, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 1, "open_fireplaces_count": 1, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 294, "currency": "GBP"}, "hot_water_cost_current": {"value": 117, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 40, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 39, "currency": "GBP"}, "indicative_cost": 350, "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 60, "environmental_impact_rating": 54}, {"sequence": 2, "typical_saving": {"value": 155, "currency": "GBP"}, "indicative_cost": "14,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 64}, {"sequence": 3, "typical_saving": {"value": 38, "currency": "GBP"}, "indicative_cost": "1,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 67}, {"sequence": 4, "typical_saving": {"value": 12, "currency": "GBP"}, "indicative_cost": 120, "improvement_type": "D", "improvement_details": {"improvement_number": 10}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 69}, {"sequence": 5, "typical_saving": {"value": 32, "currency": "GBP"}, "indicative_cost": 30, "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 70}, {"sequence": 6, "typical_saving": {"value": 67, "currency": "GBP"}, "indicative_cost": "3,000", "improvement_type": "I", "improvement_details": {"improvement_number": 20}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 74}, {"sequence": 7, "typical_saving": {"value": 31, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 77}, {"sequence": 8, "typical_saving": {"value": 37, "currency": "GBP"}, "indicative_cost": "6,500", "improvement_type": "O", "improvement_details": {"improvement_number": 8}, "improvement_category": 5, "energy_performance_rating": 78, "environmental_impact_rating": 79}, {"sequence": 9, "typical_saving": {"value": 296, "currency": "GBP"}, "indicative_cost": "8,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 89, "environmental_impact_rating": 89}], "co2_emissions_potential": 0.7, "energy_rating_potential": 89, "lighting_cost_potential": {"value": 55, "currency": "GBP"}, "schema_version_original": "LIG-18.0", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 51, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 75, "environmental_impact_rating": 95}, {"sequence": 2, "typical_saving": {"value": 53, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 74, "environmental_impact_rating": 71}], "hot_water_cost_potential": {"value": 65, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2076, "impact_of_loft_insulation": -735, "impact_of_solid_wall_insulation": -2932, "space_heating_existing_dwelling": 9460}, "energy_consumption_current": 280, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 45, "calculation_software_version": "3.08r07", "energy_consumption_potential": 46, "environmental_impact_current": 52, "fixed_lighting_outlets_count": 9, "current_energy_efficiency_band": "D", "environmental_impact_potential": 89, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 49, "low_energy_fixed_lighting_outlets_count": 3} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/W104HL/cert-030dfe4e4da3.json b/tests/fixtures/epc_prediction/W104HL/cert-030dfe4e4da3.json new file mode 100644 index 00000000..4461db26 --- /dev/null +++ b/tests/fixtures/epc_prediction/W104HL/cert-030dfe4e4da3.json @@ -0,0 +1 @@ +{"uprn": 100022784850, "roofs": [{"description": "Pitched, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "W10 4HL", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2016-03-18 16:44:11.000000", "door_count": 2, "glazed_area": 1, "glazing_gap": 12, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2107, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 16840}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Mid-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-e2c7c375ba51", "assessment_type": "RdSAP", "completion_date": "2016-03-18", "inspection_date": "2016-03-18", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 77, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 3, "pvc_window_frames": "true", "registration_date": "2016-03-18", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 260, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.6, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 29.01, "quantity": "square metres"}, "party_wall_length": {"value": 12.68, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 6.34, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.74, "quantity": "metres"}, "total_floor_area": {"value": 29.28, "quantity": "square metres"}, "party_wall_length": {"value": 13.28, "quantity": "metres"}, "heat_loss_perimeter": {"value": 6.05, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 280, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.3, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 9.49, "quantity": "square metres"}, "party_wall_length": {"value": 2.66, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 6.23, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.2, "quantity": "metres"}, "total_floor_area": {"value": 9.49, "quantity": "square metres"}, "party_wall_length": {"value": 2.66, "quantity": "metres"}, "heat_loss_perimeter": {"value": 6.23, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 3, "heating_cost_current": {"value": 739, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.8, "energy_rating_average": 60, "energy_rating_current": 59, "lighting_cost_current": {"value": 52, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, TRVs and bypass", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 563, "currency": "GBP"}, "hot_water_cost_current": {"value": 88, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 144, "currency": "GBP"}, "indicative_cost": "14,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 61}, {"sequence": 2, "typical_saving": {"value": 32, "currency": "GBP"}, "indicative_cost": 450, "improvement_type": "G", "improvement_details": {"improvement_number": 14}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 63}, {"sequence": 3, "typical_saving": {"value": 33, "currency": "GBP"}, "indicative_cost": "6,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 65}, {"sequence": 4, "typical_saving": {"value": 274, "currency": "GBP"}, "indicative_cost": "8,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 79, "environmental_impact_rating": 75}], "co2_emissions_potential": 1.8, "energy_rating_potential": 79, "lighting_cost_potential": {"value": 52, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "hot_water_cost_potential": {"value": 55, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1812, "impact_of_loft_insulation": -2969, "impact_of_solid_wall_insulation": -3126, "space_heating_existing_dwelling": 12064}, "energy_consumption_current": 278, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.06r14", "energy_consumption_potential": 130, "environmental_impact_current": 52, "fixed_lighting_outlets_count": 10, "current_energy_efficiency_band": "D", "environmental_impact_potential": 75, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 49, "low_energy_fixed_lighting_outlets_count": 10} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/W104HL/cert-12e3aec4db53.json b/tests/fixtures/epc_prediction/W104HL/cert-12e3aec4db53.json new file mode 100644 index 00000000..96ca02fb --- /dev/null +++ b/tests/fixtures/epc_prediction/W104HL/cert-12e3aec4db53.json @@ -0,0 +1 @@ +{"uprn": 100022784860, "roofs": [{"description": {"value": "Pitched, 270 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": {"value": "Solid brick, with internal insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": {"value": "Single glazed", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "lighting": {"description": {"value": "Low energy lighting in 60% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "W10 4HL", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2025-01-14 16:54:53", "door_count": 2, "glazed_area": 2, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "mcs_installed_heat_pump": "false", "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17507}], "immersion_heating_type": "NA", "cylinder_insulation_type": 0, "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Mid-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-82d3507b139c", "assessment_type": "RdSAP", "completion_date": "2025-01-14", "inspection_date": "2025-01-11", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 74, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "false", "registration_date": "2025-01-14", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 1}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.6, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 37, "quantity": "square metres"}, "party_wall_length": {"value": 16.88, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 12.1, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.7, "quantity": "metres"}, "total_floor_area": {"value": 36.61, "quantity": "square metres"}, "party_wall_length": {"value": 16.7, "quantity": "metres"}, "heat_loss_perimeter": {"value": 12.1, "quantity": "metres"}}], "wall_insulation_type": 3, "construction_age_band": "B", "party_wall_construction": 0, "wall_thickness_measured": "N", "roof_insulation_location": 2, "roof_insulation_thickness": "270mm", "wall_insulation_thickness": "100mm"}], "low_energy_lighting": 60, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 639, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.5, "energy_rating_average": 60, "energy_rating_current": 69, "lighting_cost_current": {"value": 114, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": "ND", "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 472, "currency": "GBP"}, "hot_water_cost_current": {"value": 128, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 0, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 41, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 68}, {"sequence": 2, "typical_saving": {"value": 17, "currency": "GBP"}, "indicative_cost": "\u00a380 - \u00a3120", "improvement_type": "D", "improvement_details": {"improvement_number": 10}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 70}, {"sequence": 3, "typical_saving": {"value": 29, "currency": "GBP"}, "indicative_cost": "\u00a320", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 70}, {"sequence": 4, "typical_saving": {"value": 43, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 72}, {"sequence": 5, "typical_saving": {"value": 112, "currency": "GBP"}, "indicative_cost": "\u00a33,300 - \u00a36,500", "improvement_type": "O", "improvement_details": {"improvement_number": 8}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 77}, {"sequence": 6, "typical_saving": {"value": 480, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 88, "environmental_impact_rating": 88}], "co2_emissions_potential": 0.8, "energy_rating_potential": 88, "lighting_cost_potential": {"value": 81, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "hot_water_cost_potential": {"value": 85, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1911, "space_heating_existing_dwelling": 7368}, "energy_consumption_current": 196, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 0, "calculation_software_version": "v94.0.2.1", "energy_consumption_potential": 57, "environmental_impact_current": 66, "fixed_lighting_outlets_count": 10, "current_energy_efficiency_band": "C", "environmental_impact_potential": 88, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 35, "low_energy_fixed_lighting_outlets_count": 6} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/W104HL/cert-17063430c61f.json b/tests/fixtures/epc_prediction/W104HL/cert-17063430c61f.json new file mode 100644 index 00000000..ab38229b --- /dev/null +++ b/tests/fixtures/epc_prediction/W104HL/cert-17063430c61f.json @@ -0,0 +1 @@ +{"uprn": 100022784890, "roofs": [{"description": {"value": "Pitched, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": {"value": "Roof room(s), no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": {"value": "Solid brick, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": {"value": "Cavity wall, as built, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": {"value": "Solid, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Fully double glazed", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "lighting": {"description": {"value": "No low energy lighting", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "postcode": "W10 4HL", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2015-04-09 10:52:02.000000", "door_count": 1, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "N", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2104, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 10612}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Mid-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-2372c3fe6279", "assessment_type": "RdSAP", "completion_date": "2015-04-09", "inspection_date": "2015-04-08", "extensions_count": 2, "measurement_type": 1, "total_floor_area": 90, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 5, "pvc_window_frames": "false", "registration_date": "2015-04-09", "sap_energy_source": {"mains_gas": "Y", "meter_type": 3, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 260, "floor_heat_loss": 7, "sap_room_in_roof": {"floor_area": {"value": 12.16, "quantity": "square metres"}, "insulation": 0, "roof_room_connected": "N", "construction_age_band": "B", "roof_insulation_thickness": "ND"}, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.73, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 28.6, "quantity": "square metres"}, "party_wall_length": {"value": 13.3, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 5.7, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.73, "quantity": "metres"}, "total_floor_area": {"value": 28.6, "quantity": "square metres"}, "party_wall_length": {"value": 13.3, "quantity": "metres"}, "heat_loss_perimeter": {"value": 5.7, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 260, "floor_heat_loss": 7, "roof_construction": 8, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.3, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 8.28, "quantity": "square metres"}, "party_wall_length": {"value": 3.6, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 3.5, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.3, "quantity": "metres"}, "total_floor_area": {"value": 8.28, "quantity": "square metres"}, "party_wall_length": {"value": 3.6, "quantity": "metres"}, "heat_loss_perimeter": {"value": 5.9, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}, {"identifier": "Extension 2", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 8, "wall_construction": 4, "building_part_number": 3, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.5, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 4.5, "quantity": "square metres"}, "party_wall_length": 0, "floor_construction": 1, "heat_loss_perimeter": {"value": 4.5, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "L", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 0, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 805, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.5, "energy_rating_average": 60, "energy_rating_current": 57, "lighting_cost_current": {"value": 113, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer and room thermostat", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 3, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 672, "currency": "GBP"}, "hot_water_cost_current": {"value": 107, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 103, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 61, "environmental_impact_rating": 55}, {"sequence": 2, "typical_saving": {"value": 49, "currency": "GBP"}, "indicative_cost": "\u00a360", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 63, "environmental_impact_rating": 56}, {"sequence": 3, "typical_saving": {"value": 37, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 13}, "improvement_category": 5, "energy_performance_rating": 64, "environmental_impact_rating": 58}, {"sequence": 4, "typical_saving": {"value": 35, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 60}, {"sequence": 5, "typical_saving": {"value": 265, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a38,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 69}], "co2_emissions_potential": 2.5, "energy_rating_potential": 75, "lighting_cost_potential": {"value": 56, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "hot_water_cost_potential": {"value": 72, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2188, "impact_of_loft_insulation": -1147, "impact_of_solid_wall_insulation": -2356, "space_heating_existing_dwelling": 14413}, "energy_consumption_current": 283, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "2.0.0.0", "energy_consumption_potential": 154, "environmental_impact_current": 50, "fixed_lighting_outlets_count": 12, "windows_transmission_details": {"u_value": 3.1, "data_source": 2, "solar_transmittance": 0.76}, "current_energy_efficiency_band": "D", "environmental_impact_potential": 69, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 50, "low_energy_fixed_lighting_outlets_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/W104HL/cert-319c92383e50.json b/tests/fixtures/epc_prediction/W104HL/cert-319c92383e50.json new file mode 100644 index 00000000..9f7c7a97 --- /dev/null +++ b/tests/fixtures/epc_prediction/W104HL/cert-319c92383e50.json @@ -0,0 +1 @@ +{"uprn": 100022784848, "roofs": [{"description": "Pitched, insulated at rafters", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": "Roof room(s), insulated (assumed)", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "W10 4HL", "hot_water": {"description": "Gas boiler/circulator, no cylinder thermostat", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "post_town": "", "built_form": 4, "created_at": "2025-03-12 17:54:02", "door_count": 2, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 0, "water_heating_code": 911, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2104, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 10326}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Mid-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-6b9c7d486b36", "assessment_type": "RdSAP", "completion_date": "2025-03-12", "inspection_date": "2025-03-12", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 90, "transaction_type": 5, "conservatory_type": 1, "heated_room_count": 6, "registration_date": "2025-03-12", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 1}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 250, "floor_heat_loss": 7, "sap_room_in_roof": {"floor_area": 11, "insulation": 0, "roof_room_connected": "N", "construction_age_band": "L", "roof_insulation_thickness": "ND"}, "roof_construction": 5, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.55, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 39, "quantity": "square metres"}, "party_wall_length": {"value": 17.2, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 13.1, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.43, "quantity": "metres"}, "total_floor_area": {"value": 40, "quantity": "square metres"}, "party_wall_length": {"value": 17.9, "quantity": "metres"}, "heat_loss_perimeter": {"value": 12.3, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "A", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 1, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "rafter_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 6, "heating_cost_current": {"value": 804, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.5, "energy_rating_average": 60, "energy_rating_current": 58, "lighting_cost_current": {"value": 92, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and room thermostat", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 2, "open_fireplaces_count": 1, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 620, "currency": "GBP"}, "hot_water_cost_current": {"value": 461, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 156, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 63, "environmental_impact_rating": 56}, {"sequence": 2, "typical_saving": {"value": 50, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 59}, {"sequence": 3, "typical_saving": {"value": 36, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 13}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 60}, {"sequence": 4, "typical_saving": {"value": 251, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 70}, {"sequence": 5, "typical_saving": {"value": 432, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 82, "environmental_impact_rating": 78}], "co2_emissions_potential": 1.7, "energy_rating_potential": 82, "lighting_cost_potential": {"value": 92, "currency": "GBP"}, "schema_version_original": "20.0.0", "hot_water_cost_potential": {"value": 152, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 5225, "impact_of_solid_wall_insulation": -2447, "space_heating_existing_dwelling": 10184}, "energy_consumption_current": 281, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.13r0002", "energy_consumption_potential": 103, "environmental_impact_current": 51, "fixed_lighting_outlets_count": 14, "current_energy_efficiency_band": "D", "environmental_impact_potential": 78, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 50, "low_energy_fixed_lighting_outlets_count": 14} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/W104HL/cert-334412a166a0.json b/tests/fixtures/epc_prediction/W104HL/cert-334412a166a0.json new file mode 100644 index 00000000..0a58f56c --- /dev/null +++ b/tests/fixtures/epc_prediction/W104HL/cert-334412a166a0.json @@ -0,0 +1 @@ +{"uprn": 100022784886, "roofs": [{"description": {"value": "Pitched, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": {"value": "Pitched, limited insulation", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": {"value": "Solid brick, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": {"value": "Single glazed", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "lighting": {"description": {"value": "No low energy lighting", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "postcode": "W10 4HL", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 3, "created_at": "2018-02-22 21:06:36.000000", "door_count": 1, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2107, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 10445}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.93, "schema_type": "RdSAP-Schema-18.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "End-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-ef2399cd1782", "assessment_type": "RdSAP", "completion_date": "2018-02-22", "inspection_date": "2018-02-22", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 77, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 3, "registration_date": "2018-02-22", "sap_energy_source": {"mains_gas": "Y", "meter_type": 3, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 240, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.6, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 30.1, "quantity": "square metres"}, "party_wall_length": {"value": 14, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 13.2, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.8, "quantity": "metres"}, "total_floor_area": {"value": 30.1, "quantity": "square metres"}, "party_wall_length": {"value": 14, "quantity": "metres"}, "heat_loss_perimeter": {"value": 13.2, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "A", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 8, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.6, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 8.4, "quantity": "square metres"}, "party_wall_length": {"value": 3.5, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 5.9, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.5, "quantity": "metres"}, "total_floor_area": {"value": 8.4, "quantity": "square metres"}, "party_wall_length": {"value": 3.5, "quantity": "metres"}, "heat_loss_perimeter": {"value": 5.9, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "A", "party_wall_construction": 0, "wall_thickness_measured": "N", "roof_insulation_location": 7, "wall_insulation_thickness": "NI", "sloping_ceiling_insulation_thickness": "AB"}], "low_energy_lighting": 0, "solar_water_heating": "N", "habitable_room_count": 3, "heating_cost_current": {"value": 820, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.8, "energy_rating_average": 60, "energy_rating_current": 50, "lighting_cost_current": {"value": 108, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, TRVs and bypass", "language": "1"}, "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": "ND", "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 431, "currency": "GBP"}, "hot_water_cost_current": {"value": 97, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 0, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 35, "currency": "GBP"}, "indicative_cost": "\u00a3850 - \u00a31,500", "improvement_type": "A2", "improvement_details": {"improvement_number": 45}, "improvement_category": 5, "energy_performance_rating": 51, "environmental_impact_rating": 44}, {"sequence": 2, "typical_saving": {"value": 206, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 61, "environmental_impact_rating": 56}, {"sequence": 3, "typical_saving": {"value": 30, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 63, "environmental_impact_rating": 58}, {"sequence": 4, "typical_saving": {"value": 12, "currency": "GBP"}, "indicative_cost": "\u00a380 - \u00a3120", "improvement_type": "D", "improvement_details": {"improvement_number": 10}, "improvement_category": 5, "energy_performance_rating": 64, "environmental_impact_rating": 59}, {"sequence": 5, "typical_saving": {"value": 48, "currency": "GBP"}, "indicative_cost": "\u00a340", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 61}, {"sequence": 6, "typical_saving": {"value": 62, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 14}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 65}, {"sequence": 7, "typical_saving": {"value": 32, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 67}, {"sequence": 8, "typical_saving": {"value": 49, "currency": "GBP"}, "indicative_cost": "\u00a33,300 - \u00a36,500", "improvement_type": "O", "improvement_details": {"improvement_number": 8}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 71}, {"sequence": 9, "typical_saving": {"value": 288, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a38,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 83, "environmental_impact_rating": 81}], "co2_emissions_potential": 1.4, "energy_rating_potential": 83, "lighting_cost_potential": {"value": 54, "currency": "GBP"}, "schema_version_original": "LIG-18.0", "hot_water_cost_potential": {"value": 66, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2081, "impact_of_loft_insulation": -2270, "impact_of_solid_wall_insulation": -4436, "space_heating_existing_dwelling": 14764}, "energy_consumption_current": 350, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 0, "calculation_software_version": "2.0.x", "energy_consumption_potential": 99, "environmental_impact_current": 43, "fixed_lighting_outlets_count": 8, "current_energy_efficiency_band": "E", "environmental_impact_potential": 81, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 62, "low_energy_fixed_lighting_outlets_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/W104HL/cert-4783505481c9.json b/tests/fixtures/epc_prediction/W104HL/cert-4783505481c9.json new file mode 100644 index 00000000..7d6100bd --- /dev/null +++ b/tests/fixtures/epc_prediction/W104HL/cert-4783505481c9.json @@ -0,0 +1 @@ +{"uprn": 100022784858, "roofs": [{"description": "Pitched, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": "Roof room(s), no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Partial double glazing", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "W10 4HL", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2023-10-09 13:49:40", "door_count": 2, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 3, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "Y", "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2104, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17964}], "immersion_heating_type": "NA", "cylinder_insulation_type": 1, "has_fixed_air_conditioning": "false", "cylinder_insulation_thickness": 50}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Mid-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-99509a679421", "assessment_type": "RdSAP", "completion_date": "2023-10-09", "inspection_date": "2023-10-09", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 92, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "registration_date": "2023-10-09", "sap_energy_source": {"mains_gas": "Y", "meter_type": 1, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "sap_room_in_roof": {"floor_area": 13.77, "insulation": "AB", "roof_room_connected": "N", "construction_age_band": "A"}, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.62, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 29.62, "quantity": "square metres"}, "party_wall_length": {"value": 13.62, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 6.3, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.69, "quantity": "metres"}, "total_floor_area": {"value": 29.62, "quantity": "square metres"}, "party_wall_length": {"value": 13.62, "quantity": "metres"}, "heat_loss_perimeter": {"value": 6.3, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "A", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 230, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.62, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 9.31, "quantity": "square metres"}, "party_wall_length": {"value": 3.88, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 6.28, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.69, "quantity": "metres"}, "total_floor_area": {"value": 9.31, "quantity": "square metres"}, "party_wall_length": {"value": 3.88, "quantity": "metres"}, "heat_loss_perimeter": {"value": 6.28, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "A", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 1922, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.7, "energy_rating_average": 60, "energy_rating_current": 56, "lighting_cost_current": {"value": 175, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer and room thermostat", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 992, "currency": "GBP"}, "hot_water_cost_current": {"value": 328, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 42, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 378, "currency": "GBP"}, "indicative_cost": "\u00a31,500 - \u00a32,700", "improvement_type": "A3", "improvement_details": {"improvement_number": 46}, "improvement_category": 5, "energy_performance_rating": 62, "environmental_impact_rating": 56}, {"sequence": 2, "typical_saving": {"value": 292, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 63}, {"sequence": 3, "typical_saving": {"value": 76, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 65}, {"sequence": 4, "typical_saving": {"value": 24, "currency": "GBP"}, "indicative_cost": "\u00a380 - \u00a3120", "improvement_type": "D", "improvement_details": {"improvement_number": 10}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 66}, {"sequence": 5, "typical_saving": {"value": 66, "currency": "GBP"}, "indicative_cost": "\u00a3350 - \u00a3450", "improvement_type": "G", "improvement_details": {"improvement_number": 13}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 67}, {"sequence": 6, "typical_saving": {"value": 114, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 70}, {"sequence": 7, "typical_saving": {"value": 97, "currency": "GBP"}, "indicative_cost": "\u00a33,300 - \u00a36,500", "improvement_type": "O", "improvement_details": {"improvement_number": 8}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 72}, {"sequence": 8, "typical_saving": {"value": 737, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 84, "environmental_impact_rating": 81}], "co2_emissions_potential": 1.5, "energy_rating_potential": 84, "lighting_cost_potential": {"value": 176, "currency": "GBP"}, "schema_version_original": "20.0.0", "hot_water_cost_potential": {"value": 209, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2768, "impact_of_loft_insulation": -1747, "impact_of_solid_wall_insulation": -2406, "space_heating_existing_dwelling": 15460}, "energy_consumption_current": 288, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 42, "calculation_software_version": "4.13r0001", "energy_consumption_potential": 90, "environmental_impact_current": 48, "fixed_lighting_outlets_count": 13, "current_energy_efficiency_band": "D", "environmental_impact_potential": 81, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 51, "low_energy_fixed_lighting_outlets_count": 13} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/W104HL/cert-62b545a4a1aa.json b/tests/fixtures/epc_prediction/W104HL/cert-62b545a4a1aa.json new file mode 100644 index 00000000..a82e482f --- /dev/null +++ b/tests/fixtures/epc_prediction/W104HL/cert-62b545a4a1aa.json @@ -0,0 +1 @@ +{"uprn": 100022784902, "roofs": [{"description": "Pitched, insulated at rafters", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": "Flat, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "W10 4HL", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 3, "created_at": "2024-12-11 10:14:12", "door_count": 1, "glazed_area": 2, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 18225}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "End-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-2a6b350c1a76", "assessment_type": "RdSAP", "completion_date": "2024-12-11", "inspection_date": "2024-12-10", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 81, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 5, "registration_date": "2024-12-11", "sap_energy_source": {"mains_gas": "Y", "meter_type": 3, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "Y", "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.59, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 39.5, "quantity": "square metres"}, "party_wall_length": {"value": 6.95, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 16.97, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.72, "quantity": "metres"}, "total_floor_area": {"value": 37.32, "quantity": "square metres"}, "party_wall_length": {"value": 6.82, "quantity": "metres"}, "heat_loss_perimeter": {"value": 20.82, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "A", "party_wall_construction": 1, "wall_thickness_measured": "N", "roof_insulation_location": 1, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "rafter_insulation_thickness": "50mm"}, {"identifier": "Extension 1", "wall_dry_lined": "Y", "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.75, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 4.52, "quantity": "square metres"}, "party_wall_length": {"value": 3.01, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 1.5, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "A", "party_wall_construction": 0, "wall_thickness_measured": "N", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 817, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.2, "energy_rating_average": 60, "energy_rating_current": 66, "lighting_cost_current": {"value": 88, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 556, "currency": "GBP"}, "hot_water_cost_current": {"value": 147, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 214, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 70}, {"sequence": 2, "typical_saving": {"value": 46, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "W2", "improvement_details": {"improvement_number": 58}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 72}, {"sequence": 3, "typical_saving": {"value": 47, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 74}, {"sequence": 4, "typical_saving": {"value": 448, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 84}], "co2_emissions_potential": 1.1, "energy_rating_potential": 86, "lighting_cost_potential": {"value": 88, "currency": "GBP"}, "schema_version_original": "20.0.0", "hot_water_cost_potential": {"value": 100, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2122, "impact_of_solid_wall_insulation": -3260, "space_heating_existing_dwelling": 10068}, "energy_consumption_current": 223, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.13r0002", "energy_consumption_potential": 77, "environmental_impact_current": 61, "fixed_lighting_outlets_count": 21, "current_energy_efficiency_band": "D", "environmental_impact_potential": 84, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 39, "low_energy_fixed_lighting_outlets_count": 21} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/W104HL/cert-784f6ac96b11.json b/tests/fixtures/epc_prediction/W104HL/cert-784f6ac96b11.json new file mode 100644 index 00000000..8ff2b93f --- /dev/null +++ b/tests/fixtures/epc_prediction/W104HL/cert-784f6ac96b11.json @@ -0,0 +1 @@ +{"uprn": 100022784892, "roofs": [{"description": "Pitched, 270 mm loft insulation", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": "Single glazed", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "addendum": {"addendum_numbers": [8, 15]}, "lighting": {"description": "Good lighting efficiency", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "W10 4HL", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "psv_count": 3, "built_form": 4, "created_at": "2026-05-04 21:18:08", "door_count": 2, "region_code": 17, "report_type": 2, "sap_heating": {"number_baths": 1, "cylinder_size": 1, "shower_outlets": [{"shower_outlet": {"shower_wwhrs": 1, "shower_outlet_type": 1}}], "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 18908}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 5, "window_width": 1.27, "window_height": 1.79, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "Y", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 5, "window_width": 1.1, "window_height": 1.81, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "Y", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 5, "window_width": 1.27, "window_height": 1.79, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "Y", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 5, "window_type": 1, "glazing_type": 5, "window_width": 1.19, "window_height": 1.79, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "Y", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 5, "window_type": 1, "glazing_type": 5, "window_width": 1.12, "window_height": 1.31, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "Y", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 5, "window_type": 1, "glazing_type": 5, "window_width": 1.71, "window_height": 1.8, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "Y", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Mid-terrace house", "language_code": 1, "pressure_test": 4, "property_type": 0, "address_line_1": "addr-dd816c70a95d", "assessment_type": "RdSAP", "completion_date": "2026-05-04", "inspection_date": "2026-04-29", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 84, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 4, "registration_date": "2026-05-04", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "pv_connection": 2, "photovoltaic_supply": {"pv_arrays": [{"pitch": 2, "peak_power": 3.64, "orientation": 5, "overshading": 1}]}, "wind_turbines_count": 0, "gas_smart_meter_present": "false", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 2, "electricity_smart_meter_present": "false"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "extract_fans_count": 1, "lzc_energy_sources": [11], "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "Y", "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.62, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 42.05, "quantity": "square metres"}, "party_wall_length": {"value": 19.49, "quantity": "metres"}, "floor_construction": 0, "heat_loss_perimeter": {"value": 12.87, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.62, "quantity": "metres"}, "total_floor_area": {"value": 42.05, "quantity": "square metres"}, "party_wall_length": {"value": 19.49, "quantity": "metres"}, "heat_loss_perimeter": {"value": 12.87, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 1, "wall_thickness_measured": "N", "roof_insulation_location": 2, "roof_insulation_thickness": "270mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 817, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.4, "energy_rating_average": 60, "energy_rating_current": 76, "lighting_cost_current": {"value": 55, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 566, "currency": "GBP"}, "hot_water_cost_current": {"value": 196, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 25, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 173, "currency": "GBP"}, "indicative_cost": "\u00a37,500 - \u00a311,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 80, "environmental_impact_rating": 76}, {"sequence": 2, "typical_saving": {"value": 26, "currency": "GBP"}, "indicative_cost": "\u00a3150 - \u00a3250", "improvement_type": "D", "improvement_details": {"improvement_number": 10}, "improvement_category": 5, "energy_performance_rating": 81, "environmental_impact_rating": 77}, {"sequence": 3, "typical_saving": {"value": 52, "currency": "GBP"}, "indicative_cost": "\u00a34,500 - \u00a36,000", "improvement_type": "O", "improvement_details": {"improvement_number": 8}, "improvement_category": 5, "energy_performance_rating": 83, "environmental_impact_rating": 79}, {"sequence": 4, "typical_saving": {"value": 220, "currency": "GBP"}, "indicative_cost": "\u00a3500 - \u00a35,000", "improvement_type": "U1", "improvement_details": {"improvement_number": 72}, "improvement_category": 5, "energy_performance_rating": 87, "environmental_impact_rating": 80}], "co2_emissions_potential": 1.6, "energy_rating_potential": 87, "lighting_cost_potential": {"value": 56, "currency": "GBP"}, "schema_version_original": "21.0.1", "hot_water_cost_potential": {"value": 196, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2371.37, "space_heating_existing_dwelling": 8050.43}, "draughtproofed_door_count": 2, "energy_consumption_current": 146, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 0, "calculation_software_version": "5.02r0344", "energy_consumption_potential": 86, "environmental_impact_current": 70, "current_energy_efficiency_band": "C", "environmental_impact_potential": 80, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 28, "low_energy_fixed_lighting_bulbs_count": 12, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/W104HL/cert-7cb4490ee346.json b/tests/fixtures/epc_prediction/W104HL/cert-7cb4490ee346.json new file mode 100644 index 00000000..c740310b --- /dev/null +++ b/tests/fixtures/epc_prediction/W104HL/cert-7cb4490ee346.json @@ -0,0 +1 @@ +{"uprn": 100022784888, "roofs": [{"description": {"value": "Pitched, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": {"value": "Roof room(s), insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": {"value": "Solid brick, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": {"value": "Solid, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": {"value": "Solid, insulated (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Partial double glazing", "language": "1"}, "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "lighting": {"description": {"value": "Low energy lighting in all fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "W10 4HL", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2023-06-15 13:35:14", "door_count": 1, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "secondary_fuel_type": 29, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 10244}], "immersion_heating_type": "NA", "secondary_heating_type": 691, "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Mid-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-31901b41e493", "assessment_type": "RdSAP", "completion_date": "2023-06-15", "inspection_date": "2023-06-14", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 107, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "registration_date": "2023-06-15", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 1}, "secondary_heating": {"description": {"value": "Room heaters, electric", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "floor_heat_loss": 7, "sap_room_in_roof": {"floor_area": {"value": 25.61, "quantity": "square metres"}, "insulation": "AB", "roof_room_connected": "N", "construction_age_band": "K"}, "roof_construction": 8, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.35, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 37.58, "quantity": "square metres"}, "party_wall_length": {"value": 16.59, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 7.09, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.35, "quantity": "metres"}, "total_floor_area": {"value": 37.58, "quantity": "square metres"}, "party_wall_length": {"value": 16.59, "quantity": "metres"}, "heat_loss_perimeter": {"value": 11.87, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "A", "party_wall_construction": 1, "wall_thickness_measured": "N", "roof_insulation_location": 7, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "sloping_ceiling_insulation_thickness": "AB"}, {"identifier": "Extension", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 8, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.35, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 6.46, "quantity": "square metres"}, "party_wall_length": {"value": 3.65, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 1.77, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "K", "party_wall_construction": 1, "wall_thickness_measured": "N", "roof_insulation_location": 7, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "sloping_ceiling_insulation_thickness": "AB"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 1416, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.4, "energy_rating_average": 60, "energy_rating_current": 68, "lighting_cost_current": {"value": 156, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 852, "currency": "GBP"}, "hot_water_cost_current": {"value": 247, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 40, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 161, "currency": "GBP"}, "indicative_cost": "\u00a3850 - \u00a31,500", "improvement_type": "A2", "improvement_details": {"improvement_number": 45}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 69}, {"sequence": 2, "typical_saving": {"value": 217, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 73}, {"sequence": 3, "typical_saving": {"value": 29, "currency": "GBP"}, "indicative_cost": "\u00a380 - \u00a3120", "improvement_type": "D", "improvement_details": {"improvement_number": 10}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 74}, {"sequence": 4, "typical_saving": {"value": 77, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 75}, {"sequence": 5, "typical_saving": {"value": 154, "currency": "GBP"}, "indicative_cost": "\u00a33,300 - \u00a36,500", "improvement_type": "O", "improvement_details": {"improvement_number": 8}, "improvement_category": 5, "energy_performance_rating": 78, "environmental_impact_rating": 79}, {"sequence": 6, "typical_saving": {"value": 658, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 87, "environmental_impact_rating": 86}], "co2_emissions_potential": 1.1, "energy_rating_potential": 87, "lighting_cost_potential": {"value": 158, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "hot_water_cost_potential": {"value": 171, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2264, "impact_of_solid_wall_insulation": -1555, "space_heating_existing_dwelling": 9322}, "energy_consumption_current": 178, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 40, "calculation_software_version": "2.1.1.0", "energy_consumption_potential": 58, "environmental_impact_current": 65, "fixed_lighting_outlets_count": 16, "windows_transmission_details": {"u_value": 2, "data_source": 2, "solar_transmittance": 0.72}, "current_energy_efficiency_band": "D", "environmental_impact_potential": 86, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 31, "low_energy_fixed_lighting_outlets_count": 16} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/W104HL/cert-7f13ce574386.json b/tests/fixtures/epc_prediction/W104HL/cert-7f13ce574386.json new file mode 100644 index 00000000..a70a4651 --- /dev/null +++ b/tests/fixtures/epc_prediction/W104HL/cert-7f13ce574386.json @@ -0,0 +1 @@ +{"uprn": 100022784897, "roofs": [{"description": "Pitched, insulated (assumed)", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, {"description": "Pitched, limited insulation", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": "Roof room(s), limited insulation (assumed)", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": "Solid brick, as built, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Partial double glazing", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "lighting": {"description": "Below average lighting efficiency", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "postcode": "W10 4HL", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "psv_count": 0, "built_form": 4, "created_at": "2026-01-30 20:23:32", "door_count": 1, "region_code": 1, "report_type": 2, "sap_heating": {"number_baths": 1, "cylinder_size": 1, "shower_outlets": [{"shower_wwhrs": 1, "shower_outlet_type": 1}, {"shower_wwhrs": 1, "shower_outlet_type": 1}], "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "N", "heat_emitter_type": 1, "emitter_temperature": 1, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17503}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "false", "orientation": 1, "window_type": 1, "glazing_type": 5, "window_width": {"value": 1.06, "quantity": "m"}, "window_height": {"value": 1.7, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "false", "orientation": 1, "window_type": 1, "glazing_type": 5, "window_width": {"value": 0.89, "quantity": "m"}, "window_height": {"value": 1.7, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "false", "orientation": 1, "window_type": 1, "glazing_type": 5, "window_width": {"value": 0.89, "quantity": "m"}, "window_height": {"value": 1.7, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 9, "window_type": 2, "glazing_type": 3, "window_width": {"value": 1, "quantity": "m"}, "window_height": {"value": 1, "quantity": "m"}, "draught_proofed": "true", "window_location": 2, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "false", "orientation": 5, "window_type": 1, "glazing_type": 5, "window_width": {"value": 1.78, "quantity": "m"}, "window_height": {"value": 1.02, "quantity": "m"}, "draught_proofed": "false", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "false", "orientation": 5, "window_type": 1, "glazing_type": 5, "window_width": {"value": 0.98, "quantity": "m"}, "window_height": {"value": 1.64, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "false", "orientation": 7, "window_type": 1, "glazing_type": 5, "window_width": {"value": 0.59, "quantity": "m"}, "window_height": {"value": 0.71, "quantity": "m"}, "draught_proofed": "false", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": {"value": 1.09, "quantity": "m"}, "window_height": {"value": 1.45, "quantity": "m"}, "draught_proofed": "true", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 2, "window_width": {"value": 0.86, "quantity": "m"}, "window_height": {"value": 0.96, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 2, "window_width": {"value": 0.96, "quantity": "m"}, "window_height": {"value": 1.33, "quantity": "m"}, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Mid-terrace house", "language_code": 1, "pressure_test": 4, "property_type": 0, "address_line_1": "addr-de8952203bf9", "assessment_type": "RdSAP", "completion_date": "2026-01-30", "inspection_date": "2026-01-28", "extensions_count": 2, "measurement_type": 1, "open_flues_count": 0, "total_floor_area": 103, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "other_flues_count": 0, "registration_date": "2026-01-30", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "true", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 2, "electricity_smart_meter_present": "true"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "closed_flues_count": 0, "extract_fans_count": 2, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 260, "floor_heat_loss": 7, "sap_room_in_roof": {"floor_area": 19.4, "room_in_roof_type_1": {"gable_wall_type_1": 2, "gable_wall_type_2": 2, "gable_wall_length_1": 4.6, "gable_wall_length_2": 4.6}, "construction_age_band": "L"}, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.62, "floor_insulation": 1, "total_floor_area": 28.57, "party_wall_length": 13.56, "floor_construction": 2, "heat_loss_perimeter": 4.21}, {"floor": 1, "room_height": 2.34, "total_floor_area": 28.49, "party_wall_length": 13.51, "heat_loss_perimeter": 5.37}], "wall_insulation_type": 4, "construction_age_band": "A", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "NI", "wall_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 250, "floor_heat_loss": 7, "roof_construction": 8, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.37, "floor_insulation": 1, "total_floor_area": 11.24, "party_wall_length": 3.62, "floor_construction": 1, "heat_loss_perimeter": 3.11}, {"floor": 1, "room_height": 2.34, "total_floor_area": 11.06, "party_wall_length": 3.62, "heat_loss_perimeter": 6.72}], "wall_insulation_type": 4, "construction_age_band": "A", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 7, "wall_insulation_thickness": "NI", "sloping_ceiling_insulation_thickness": "AB"}, {"identifier": "Extension 2", "wall_dry_lined": "N", "wall_thickness": 370, "floor_heat_loss": 7, "roof_construction": 8, "wall_construction": 3, "building_part_number": 3, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.32, "floor_insulation": 1, "total_floor_area": 4, "party_wall_length": 0, "floor_construction": 1, "heat_loss_perimeter": 4.72}], "wall_insulation_type": 4, "construction_age_band": "L", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 7, "wall_insulation_thickness": "NI", "sloping_ceiling_insulation_thickness": "AB"}], "boilers_flues_count": 0, "open_chimneys_count": 0, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 952, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.3, "energy_rating_average": 60, "energy_rating_current": 67, "lighting_cost_current": {"value": 142, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "blocked_chimneys_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 610, "currency": "GBP"}, "hot_water_cost_current": {"value": 185, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 36, "schema_version_current": "LIG-21.0", "suggested_improvements": [{"sequence": 1, "typical_saving": 73, "indicative_cost": "\u00a3900 - \u00a31,200", "improvement_type": "A2", "improvement_details": {"improvement_number": 45}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 67}, {"sequence": 2, "typical_saving": 179, "indicative_cost": "\u00a37,500 - \u00a311,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 73}, {"sequence": 3, "typical_saving": 22, "indicative_cost": "\u00a3150 - \u00a3250", "improvement_type": "D", "improvement_details": {"improvement_number": 10}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 74}, {"sequence": 4, "typical_saving": 57, "indicative_cost": "\u00a3810 - \u00a3945", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 74}, {"sequence": 5, "typical_saving": 73, "indicative_cost": "\u00a34,500 - \u00a36,000", "improvement_type": "O", "improvement_details": {"improvement_number": 8}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 77}, {"sequence": 6, "typical_saving": 285, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 79}], "co2_emissions_potential": 1.9, "energy_rating_potential": 86, "lighting_cost_potential": {"value": 79, "currency": "GBP"}, "schema_version_original": "LIG-21.0", "hot_water_cost_potential": {"value": 185, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2490.09, "space_heating_existing_dwelling": 10924.11}, "draughtproofed_door_count": 0, "energy_consumption_current": 175, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 35, "calculation_software_version": "10.2.2.0", "energy_consumption_potential": 99, "environmental_impact_current": 65, "cfl_fixed_lighting_bulbs_count": 0, "current_energy_efficiency_band": "D", "environmental_impact_potential": 79, "led_fixed_lighting_bulbs_count": 16, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 32, "incandescent_fixed_lighting_bulbs_count": 27} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/W104HL/cert-7f945fa04966.json b/tests/fixtures/epc_prediction/W104HL/cert-7f945fa04966.json new file mode 100644 index 00000000..97dd96db --- /dev/null +++ b/tests/fixtures/epc_prediction/W104HL/cert-7f945fa04966.json @@ -0,0 +1 @@ +{"uprn": 100022784866, "roofs": [{"description": "Pitched, 100 mm loft insulation", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, {"description": "Pitched, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": "Roof room(s), insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Suspended, insulated (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "W10 4HL", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2024-01-04 14:43:14", "door_count": 1, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 2, "rooms_with_mixer_shower_no_bath": 1, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 18219}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Mid-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-e1b2567f0a27", "assessment_type": "RdSAP", "completion_date": "2024-01-04", "inspection_date": "2024-01-03", "extensions_count": 2, "measurement_type": 1, "total_floor_area": 101, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "registration_date": "2024-01-04", "sap_energy_source": {"mains_gas": "Y", "meter_type": 3, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 1}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "Y", "wall_thickness": 300, "floor_heat_loss": 7, "sap_room_in_roof": {"floor_area": 15, "insulation": "AB", "roof_room_connected": "N", "construction_age_band": "H"}, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.57, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 30.01, "quantity": "square metres"}, "party_wall_length": {"value": 13.96, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 4.3, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.72, "quantity": "metres"}, "total_floor_area": {"value": 30.01, "quantity": "square metres"}, "party_wall_length": {"value": 13.96, "quantity": "metres"}, "heat_loss_perimeter": {"value": 6.29, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "A", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "100mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "Y", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.23, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 9.05, "quantity": "square metres"}, "party_wall_length": {"value": 3.92, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 2.31, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.35, "quantity": "metres"}, "total_floor_area": {"value": 9.05, "quantity": "square metres"}, "party_wall_length": {"value": 3.92, "quantity": "metres"}, "heat_loss_perimeter": {"value": 6.23, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "A", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 2", "wall_dry_lined": "N", "wall_thickness": 260, "floor_heat_loss": 7, "roof_construction": 8, "wall_construction": 4, "building_part_number": 3, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.46, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 7.8, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 5.91, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "L", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 7, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "sloping_ceiling_insulation_thickness": "AB"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 1130, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.9, "energy_rating_average": 60, "energy_rating_current": 72, "lighting_cost_current": {"value": 151, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 978, "currency": "GBP"}, "hot_water_cost_current": {"value": 267, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 151, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 72}, {"sequence": 2, "typical_saving": {"value": 87, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 74}, {"sequence": 3, "typical_saving": {"value": 656, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 85, "environmental_impact_rating": 82}], "co2_emissions_potential": 1.5, "energy_rating_potential": 85, "lighting_cost_potential": {"value": 151, "currency": "GBP"}, "schema_version_original": "20.0.0", "hot_water_cost_potential": {"value": 180, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2240, "impact_of_loft_insulation": -949, "impact_of_solid_wall_insulation": -1385, "space_heating_existing_dwelling": 8538}, "energy_consumption_current": 163, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "4.13r0001", "energy_consumption_potential": 80, "environmental_impact_current": 69, "fixed_lighting_outlets_count": 9, "current_energy_efficiency_band": "C", "environmental_impact_potential": 82, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 29, "low_energy_fixed_lighting_outlets_count": 9} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/W104HL/cert-80729c033186.json b/tests/fixtures/epc_prediction/W104HL/cert-80729c033186.json new file mode 100644 index 00000000..f7132183 --- /dev/null +++ b/tests/fixtures/epc_prediction/W104HL/cert-80729c033186.json @@ -0,0 +1 @@ +{"uprn": 100022784872, "roofs": [{"description": "Pitched, 150 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Partial multiple glazing", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "addendum": {"addendum_numbers": [15]}, "lighting": {"description": "Below average lighting efficiency", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "postcode": "W10 4HL", "hot_water": {"description": "Gas multipoint", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2026-05-14 10:01:16", "door_count": 1, "region_code": 17, "report_type": 2, "sap_heating": {"number_baths": 1, "cylinder_size": 1, "number_baths_wwhrs": 0, "water_heating_code": 908, "water_heating_fuel": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 29, "heat_emitter_type": 0, "emitter_temperature": "NA", "main_heating_number": 1, "main_heating_control": 2601, "main_heating_category": 10, "main_heating_fraction": 1, "sap_main_heating_code": 691, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"orientation": 5, "window_type": 1, "glazing_type": 4, "window_width": 0.9, "window_height": 1.62, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 5, "window_type": 1, "glazing_type": 4, "window_width": 0.9, "window_height": 1.62, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 1, "window_type": 1, "glazing_type": 4, "window_width": 0.97, "window_height": 1.66, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 1, "window_type": 1, "glazing_type": 4, "window_width": 0.9, "window_height": 1.51, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"orientation": 5, "window_type": 1, "glazing_type": 4, "window_width": 1.02, "window_height": 1.69, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 5, "window_width": 1.03, "window_height": 1.62, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 7, "window_type": 1, "glazing_type": 3, "window_width": 0.55, "window_height": 0.94, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 5, "window_width": 0.8, "window_height": 1.18, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 1, "window_type": 1, "glazing_type": 3, "window_width": 0.7, "window_height": 0.66, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Room heaters, electric", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 5}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Mid-terrace house", "language_code": 1, "pressure_test": 4, "property_type": 0, "address_line_1": "addr-1a34f8522bd9", "assessment_type": "RdSAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-13", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 80, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 1, "registration_date": "2026-05-14", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "false", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 1, "electricity_smart_meter_present": "false"}, "secondary_heating": {"description": "Portable electric heaters (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 260, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.41, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 39.31, "quantity": "square metres"}, "party_wall_length": {"value": 16.9, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 12.99, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.41, "quantity": "metres"}, "total_floor_area": {"value": 40.42, "quantity": "square metres"}, "party_wall_length": {"value": 17.42, "quantity": "metres"}, "heat_loss_perimeter": {"value": 12.91, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 0, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "150mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 2619, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.0, "energy_rating_average": 60, "energy_rating_current": 26, "lighting_cost_current": {"value": 61, "currency": "GBP"}, "main_heating_controls": [{"description": "No thermostatic control of room temperature", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 533, "currency": "GBP"}, "hot_water_cost_current": {"value": 209, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 70, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 56, "currency": "GBP"}, "indicative_cost": "\u00a3900 - \u00a31,200", "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 27, "environmental_impact_rating": 76}, {"sequence": 2, "typical_saving": {"value": 787, "currency": "GBP"}, "indicative_cost": "\u00a37,500 - \u00a311,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 42, "environmental_impact_rating": 81}, {"sequence": 3, "typical_saving": {"value": 197, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a310,000", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 47, "environmental_impact_rating": 82}, {"sequence": 4, "typical_saving": {"value": 22, "currency": "GBP"}, "indicative_cost": "\u00a3150 - \u00a3250", "improvement_type": "D", "improvement_details": {"improvement_number": 10}, "improvement_category": 5, "energy_performance_rating": 48, "environmental_impact_rating": 82}, {"sequence": 5, "typical_saving": {"value": 1054, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a310,000", "improvement_type": "T", "improvement_details": {"improvement_number": 29}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 79}, {"sequence": 6, "typical_saving": {"value": 208, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 82, "environmental_impact_rating": 80}], "co2_emissions_potential": 1.6, "energy_rating_potential": 82, "lighting_cost_potential": {"value": 61, "currency": "GBP"}, "schema_version_original": "21.0.1", "alternative_improvements": [{"sequence": 1, "typical_saving": {"value": 1183, "currency": "GBP"}, "improvement_type": "J2", "improvement_details": {"improvement_number": 54}, "improvement_category": 6, "energy_performance_rating": 77, "environmental_impact_rating": 96}, {"sequence": 2, "typical_saving": {"value": 869, "currency": "GBP"}, "improvement_type": "Z3", "improvement_details": {"improvement_number": 53}, "improvement_category": 6, "energy_performance_rating": 73, "environmental_impact_rating": 70}], "hot_water_cost_potential": {"value": 180, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1855.18, "space_heating_existing_dwelling": 9073.28}, "draughtproofed_door_count": 0, "energy_consumption_current": 223, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 77, "calculation_software_version": "5.02r0344", "energy_consumption_potential": 104, "environmental_impact_current": 75, "cfl_fixed_lighting_bulbs_count": 7, "current_energy_efficiency_band": "F", "environmental_impact_potential": 80, "led_fixed_lighting_bulbs_count": 2, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 25, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/W104HL/cert-82f19e8a1d12.json b/tests/fixtures/epc_prediction/W104HL/cert-82f19e8a1d12.json new file mode 100644 index 00000000..53f6129a --- /dev/null +++ b/tests/fixtures/epc_prediction/W104HL/cert-82f19e8a1d12.json @@ -0,0 +1 @@ +{"uprn": 100022784850, "roofs": [{"description": "Pitched, 175 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": "Fully double glazed", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "lighting": {"description": "Excellent lighting efficiency", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "W10 4HL", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2026-03-05 13:15:59", "door_count": 0, "region_code": 17, "report_type": 2, "sap_heating": {"number_baths": 1, "cylinder_size": 1, "shower_outlets": [{"shower_outlet": {"shower_wwhrs": 1, "shower_outlet_type": 1}}], "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 16840}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "true", "glazing_gap": 12, "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 1.2, "window_height": 1.8, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 1, "window_height": 1.8, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 5, "window_type": 1, "glazing_type": 3, "window_width": 1, "window_height": 1.8, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 1, "window_type": 1, "glazing_type": 3, "window_width": 0.9, "window_height": 1.78, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": 12, "orientation": 1, "window_type": 1, "glazing_type": 3, "window_width": 0.9, "window_height": 1.78, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 3, "window_type": 1, "glazing_type": 3, "window_width": 0.9, "window_height": 2.2, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 3, "window_type": 1, "glazing_type": 3, "window_width": 0.5, "window_height": 0.6, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 1, "window_type": 1, "glazing_type": 3, "window_width": 1.8, "window_height": 1, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "glazing_gap": "16+", "orientation": 1, "window_type": 1, "glazing_type": 3, "window_width": 0.8, "window_height": 0.9, "draught_proofed": "true", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Mid-terrace house", "language_code": 1, "pressure_test": 4, "property_type": 0, "address_line_1": "addr-581da56220c3", "assessment_type": "RdSAP", "completion_date": "2026-03-05", "inspection_date": "2026-03-05", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 81, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 5, "registration_date": "2026-03-05", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "false", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 2, "electricity_smart_meter_present": "false"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "extract_fans_count": 1, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 280, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.87, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 40.55, "quantity": "square metres"}, "party_wall_length": {"value": 17.9, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 12.7, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.85, "quantity": "metres"}, "total_floor_area": {"value": 40.55, "quantity": "square metres"}, "party_wall_length": {"value": 17.9, "quantity": "metres"}, "heat_loss_perimeter": {"value": 12.7, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "A", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "175mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "solar_water_heating": "N", "habitable_room_count": 5, "heating_cost_current": {"value": 722, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.4, "energy_rating_average": 60, "energy_rating_current": 71, "lighting_cost_current": {"value": 53, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 477, "currency": "GBP"}, "hot_water_cost_current": {"value": 170, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 193, "currency": "GBP"}, "indicative_cost": "\u00a37,500 - \u00a311,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 77}, {"sequence": 2, "typical_saving": {"value": 52, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a310,000", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 78, "environmental_impact_rating": 79}, {"sequence": 3, "typical_saving": {"value": 216, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 82, "environmental_impact_rating": 80}], "co2_emissions_potential": 1.5, "energy_rating_potential": 82, "lighting_cost_potential": {"value": 53, "currency": "GBP"}, "schema_version_original": "21.0.1", "hot_water_cost_potential": {"value": 170, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2280.19, "space_heating_existing_dwelling": 7732.6}, "draughtproofed_door_count": 0, "energy_consumption_current": 164, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "5.02r0334", "energy_consumption_potential": 98, "environmental_impact_current": 70, "current_energy_efficiency_band": "C", "environmental_impact_potential": 80, "led_fixed_lighting_bulbs_count": 9, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 30, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/W104HL/cert-840b1ec0da75.json b/tests/fixtures/epc_prediction/W104HL/cert-840b1ec0da75.json new file mode 100644 index 00000000..5fb7beab --- /dev/null +++ b/tests/fixtures/epc_prediction/W104HL/cert-840b1ec0da75.json @@ -0,0 +1 @@ +{"uprn": 100022784868, "roofs": [{"description": "Pitched, 50 mm loft insulation", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, {"description": "Pitched, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "windows": [{"description": "Single glazed", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "lighting": {"description": "Low energy lighting in 33% of fixed outlets", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "postcode": "W10 4HL", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2013-08-01 16:11:34.000000", "door_count": 1, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "boiler_index_number": 10265, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "main_heating_data_source": 1}], "has_fixed_air_conditioning": "false"}, "sap_version": 9.91, "schema_type": "SAP-Schema-16.2", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Mid-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-9bb5e6b9fa1b", "schema_version": "LIG-16.1", "assessment_type": "RdSAP", "completion_date": "2013-08-01", "inspection_date": "2013-07-31", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 78, "transaction_type": 9, "conservatory_type": 1, "heated_room_count": 3, "registration_date": "2013-08-01", "restricted_access": 0, "sap_energy_source": {"main_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"percent_roof_area": 0}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 240, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.61, "floor_insulation": 1, "total_floor_area": 30.1, "floor_construction": 1, "heat_loss_perimeter": 6.1}, {"floor": 1, "room_height": 2.73, "total_floor_area": 30.1, "heat_loss_perimeter": 6.1}], "wall_insulation_type": 4, "construction_age_band": "A", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "50mm"}, {"wall_dry_lined": "N", "wall_thickness": 240, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.26, "floor_insulation": 1, "total_floor_area": 8.75, "floor_construction": 1, "heat_loss_perimeter": 6}, {"floor": 1, "room_height": 2.33, "total_floor_area": 8.75, "heat_loss_perimeter": 6}], "wall_insulation_type": 4, "construction_age_band": "A", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "NI"}], "low_energy_lighting": 33, "solar_water_heating": "N", "bedf_revision_number": 341, "habitable_room_count": 3, "heating_cost_current": {"value": 578, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.2, "energy_rating_average": 60, "energy_rating_current": 64, "lighting_cost_current": {"value": 77, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 5, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 330, "currency": "GBP"}, "hot_water_cost_current": {"value": 88, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 90, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 25, "currency": "GBP"}, "indicative_cost": "\u00a3100 - \u00a3350", "improvement_type": "A", "improvement_details": {"improvement_number": 5}, "improvement_category": 5, "energy_performance_rating": 66, "environmental_impact_rating": 64}, {"sequence": 2, "typical_saving": {"value": 134, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 73}, {"sequence": 3, "typical_saving": {"value": 24, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W", "improvement_details": {"improvement_number": 47}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 74}, {"sequence": 4, "typical_saving": {"value": 27, "currency": "GBP"}, "indicative_cost": "\u00a340", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 75}, {"sequence": 5, "typical_saving": {"value": 26, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 77}, {"sequence": 6, "typical_saving": {"value": 68, "currency": "GBP"}, "indicative_cost": "\u00a33,300 - \u00a36,500", "improvement_type": "O", "improvement_details": {"improvement_number": 8}, "improvement_category": 5, "energy_performance_rating": 79, "environmental_impact_rating": 81}, {"sequence": 7, "typical_saving": {"value": 243, "currency": "GBP"}, "indicative_cost": "\u00a39,000 - \u00a314,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 89, "environmental_impact_rating": 91}], "co2_emissions_potential": 0.7, "energy_rating_potential": 89, "lighting_cost_potential": {"value": 46, "currency": "GBP"}, "hot_water_cost_potential": {"value": 63, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2091, "impact_of_loft_insulation": -1354, "impact_of_solid_wall_insulation": -3432, "space_heating_existing_dwelling": 10795}, "seller_commission_report": "Y", "energy_consumption_current": 217, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 0, "calculation_software_version": 8.3, "energy_consumption_potential": 42, "environmental_impact_current": 63, "fixed_lighting_outlets_count": 12, "current_energy_efficiency_band": "D", "environmental_impact_potential": 91, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 42, "low_energy_fixed_lighting_outlets_count": 4} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/W104HL/cert-b180ada05905.json b/tests/fixtures/epc_prediction/W104HL/cert-b180ada05905.json new file mode 100644 index 00000000..01a98eeb --- /dev/null +++ b/tests/fixtures/epc_prediction/W104HL/cert-b180ada05905.json @@ -0,0 +1 @@ +{"uprn": 100022784860, "roofs": [{"description": "Pitched, insulated (assumed)", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": "Solid brick, with internal insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": "Full secondary glazing", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "lighting": {"description": "Excellent lighting efficiency", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "W10 4HL", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "psv_count": 0, "built_form": 4, "created_at": "2025-09-22 17:14:30", "door_count": 2, "region_code": 1, "report_type": 2, "sap_heating": {"number_baths": 1, "cylinder_size": 1, "shower_outlets": [{"shower_outlet": {"shower_wwhrs": 1, "shower_outlet_type": 2}}], "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 1, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 1, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17507}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "false", "orientation": 1, "window_type": 1, "glazing_type": 4, "window_width": {"value": 1.8, "quantity": "m"}, "window_height": {"value": 1, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "false", "orientation": 1, "window_type": 1, "glazing_type": 4, "window_width": {"value": 1.1, "quantity": "m"}, "window_height": {"value": 1.7, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "false", "orientation": 5, "window_type": 1, "glazing_type": 4, "window_width": {"value": 1.1, "quantity": "m"}, "window_height": {"value": 1.7, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "false", "orientation": 1, "window_type": 1, "glazing_type": 4, "window_width": {"value": 1.5, "quantity": "m"}, "window_height": {"value": 1, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "false", "orientation": 1, "window_type": 1, "glazing_type": 4, "window_width": {"value": 1.1, "quantity": "m"}, "window_height": {"value": 1.7, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "false", "orientation": 7, "window_type": 1, "glazing_type": 4, "window_width": {"value": 0.6, "quantity": "m"}, "window_height": {"value": 0.9, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "false", "orientation": 5, "window_type": 1, "glazing_type": 4, "window_width": {"value": 1.1, "quantity": "m"}, "window_height": {"value": 1.7, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "false", "orientation": 1, "window_type": 1, "glazing_type": 4, "window_width": {"value": 1.1, "quantity": "m"}, "window_height": {"value": 1.7, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Mid-terrace house", "language_code": 1, "pressure_test": 4, "property_type": 0, "address_line_1": "addr-82d3507b139c", "assessment_type": "RdSAP", "completion_date": "2025-09-22", "inspection_date": "2025-09-04", "extensions_count": 0, "measurement_type": 1, "open_flues_count": 0, "total_floor_area": 74, "transaction_type": 5, "conservatory_type": 1, "heated_room_count": 4, "other_flues_count": 0, "registration_date": "2025-09-22", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "false", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 1, "electricity_smart_meter_present": "false"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "closed_flues_count": 0, "extract_fans_count": 0, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 270, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.6, "floor_insulation": 1, "total_floor_area": 37, "party_wall_length": 16.88, "floor_construction": 2, "heat_loss_perimeter": 12.1}, {"floor": 1, "room_height": 2.7, "total_floor_area": 36.61, "party_wall_length": 16.7, "heat_loss_perimeter": 12.1}], "wall_insulation_type": 3, "construction_age_band": "B", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "NI", "wall_insulation_thickness": "NI"}], "boilers_flues_count": 0, "open_chimneys_count": 0, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 560, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 1.8, "energy_rating_average": 60, "energy_rating_current": 72, "lighting_cost_current": {"value": 46, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "blocked_chimneys_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 501, "currency": "GBP"}, "hot_water_cost_current": {"value": 274, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 0, "schema_version_current": "LIG-21.0", "suggested_improvements": [{"sequence": 1, "typical_saving": 42, "indicative_cost": "\u00a35,000 - \u00a310,000", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 78}, {"sequence": 2, "typical_saving": 17, "indicative_cost": "\u00a3150 - \u00a3250", "improvement_type": "D", "improvement_details": {"improvement_number": 10}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 79}, {"sequence": 3, "typical_saving": 282, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 85, "environmental_impact_rating": 82}], "co2_emissions_potential": 1.4, "energy_rating_potential": 85, "lighting_cost_potential": {"value": 46, "currency": "GBP"}, "schema_version_original": "LIG-21.0", "hot_water_cost_potential": {"value": 274, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2058.59, "space_heating_existing_dwelling": 5263.12}, "draughtproofed_door_count": 0, "energy_consumption_current": 141, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "10.2.2.0", "energy_consumption_potential": 104, "environmental_impact_current": 76, "cfl_fixed_lighting_bulbs_count": 0, "current_energy_efficiency_band": "C", "environmental_impact_potential": 82, "led_fixed_lighting_bulbs_count": 10, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 24, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/W104HL/cert-b58783a23f96.json b/tests/fixtures/epc_prediction/W104HL/cert-b58783a23f96.json new file mode 100644 index 00000000..993ef5f7 --- /dev/null +++ b/tests/fixtures/epc_prediction/W104HL/cert-b58783a23f96.json @@ -0,0 +1 @@ +{"uprn": 100022784868, "roofs": [{"description": "Pitched, 270 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": "Pitched, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": "Pitched, insulated (assumed)", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, {"description": "Cavity wall, as built, insulated (assumed)", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Solid, insulated (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Some double glazing", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "lighting": {"description": "Low energy lighting in 25% of fixed outlets", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}, "postcode": "W10 4HL", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2024-01-15 16:10:46", "door_count": 1, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 10265}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Mid-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-7407e2657444", "assessment_type": "RdSAP", "completion_date": "2024-01-15", "inspection_date": "2024-01-15", "extensions_count": 2, "measurement_type": 1, "total_floor_area": 86, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "registration_date": "2024-01-15", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 220, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.7, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 30.96, "quantity": "square metres"}, "party_wall_length": {"value": 14.4, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 4.3, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.7, "quantity": "metres"}, "total_floor_area": {"value": 30.96, "quantity": "square metres"}, "party_wall_length": {"value": 14.4, "quantity": "metres"}, "heat_loss_perimeter": {"value": 6, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "270mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 220, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 8.64, "quantity": "square metres"}, "party_wall_length": {"value": 3.6, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 2.4, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.4, "quantity": "metres"}, "total_floor_area": {"value": 8.64, "quantity": "square metres"}, "party_wall_length": {"value": 3.6, "quantity": "metres"}, "heat_loss_perimeter": {"value": 6, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 2", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 4, "building_part_number": 3, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.4, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 6.84, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 5.5, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "L", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 25, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 839, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.9, "energy_rating_average": 60, "energy_rating_current": 69, "lighting_cost_current": {"value": 198, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": 2, "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 599, "currency": "GBP"}, "hot_water_cost_current": {"value": 192, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 156, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 71}, {"sequence": 2, "typical_saving": {"value": 75, "currency": "GBP"}, "indicative_cost": "\u00a330", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 72}, {"sequence": 3, "typical_saving": {"value": 62, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 74}, {"sequence": 4, "typical_saving": {"value": 93, "currency": "GBP"}, "indicative_cost": "\u00a33,300 - \u00a36,500", "improvement_type": "O", "improvement_details": {"improvement_number": 8}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 77}, {"sequence": 5, "typical_saving": {"value": 555, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 87, "environmental_impact_rating": 86}], "co2_emissions_potential": 1.0, "energy_rating_potential": 87, "lighting_cost_potential": {"value": 114, "currency": "GBP"}, "schema_version_original": "20.0.0", "hot_water_cost_potential": {"value": 131, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2159, "impact_of_loft_insulation": -725, "impact_of_solid_wall_insulation": -1910, "space_heating_existing_dwelling": 8103}, "energy_consumption_current": 192, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 29, "calculation_software_version": "4.13r0001", "energy_consumption_potential": 61, "environmental_impact_current": 66, "fixed_lighting_outlets_count": 8, "current_energy_efficiency_band": "C", "environmental_impact_potential": 86, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 34, "low_energy_fixed_lighting_outlets_count": 2} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/W104HL/cert-c1c558b665e4.json b/tests/fixtures/epc_prediction/W104HL/cert-c1c558b665e4.json new file mode 100644 index 00000000..3aa6ce66 --- /dev/null +++ b/tests/fixtures/epc_prediction/W104HL/cert-c1c558b665e4.json @@ -0,0 +1 @@ +{"uprn": 100022784864, "roofs": [{"description": {"value": "Pitched, 250 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": {"value": "Solid brick, with internal insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": {"value": "Single glazed", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "lighting": {"description": {"value": "Low energy lighting in 50% of fixed outlets", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "W10 4HL", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2025-01-14 16:53:09", "door_count": 2, "glazed_area": 2, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "mcs_installed_heat_pump": "false", "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17507}], "immersion_heating_type": "NA", "cylinder_insulation_type": 0, "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Mid-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-8e99b09098b9", "assessment_type": "RdSAP", "completion_date": "2025-01-14", "inspection_date": "2025-01-11", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 74, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 4, "pvc_window_frames": "false", "registration_date": "2025-01-14", "sap_energy_source": {"mains_gas": "N", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 1}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.62, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 37, "quantity": "square metres"}, "party_wall_length": {"value": 16.88, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 12.1, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.7, "quantity": "metres"}, "total_floor_area": {"value": 36.61, "quantity": "square metres"}, "party_wall_length": {"value": 16.7, "quantity": "metres"}, "heat_loss_perimeter": {"value": 12.1, "quantity": "metres"}}], "wall_insulation_type": 3, "construction_age_band": "B", "party_wall_construction": 0, "wall_thickness_measured": "N", "roof_insulation_location": 2, "roof_insulation_thickness": "250mm", "wall_insulation_thickness": "100mm"}], "low_energy_lighting": 50, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 640, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.6, "energy_rating_average": 60, "energy_rating_current": 69, "lighting_cost_current": {"value": 122, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": "ND", "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 474, "currency": "GBP"}, "hot_water_cost_current": {"value": 128, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 0, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 41, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 68}, {"sequence": 2, "typical_saving": {"value": 17, "currency": "GBP"}, "indicative_cost": "\u00a380 - \u00a3120", "improvement_type": "D", "improvement_details": {"improvement_number": 10}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 69}, {"sequence": 3, "typical_saving": {"value": 36, "currency": "GBP"}, "indicative_cost": "\u00a325", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 70}, {"sequence": 4, "typical_saving": {"value": 43, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 72}, {"sequence": 5, "typical_saving": {"value": 111, "currency": "GBP"}, "indicative_cost": "\u00a33,300 - \u00a36,500", "improvement_type": "O", "improvement_details": {"improvement_number": 8}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 77}, {"sequence": 6, "typical_saving": {"value": 480, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 88, "environmental_impact_rating": 88}], "co2_emissions_potential": 0.8, "energy_rating_potential": 88, "lighting_cost_potential": {"value": 81, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "hot_water_cost_potential": {"value": 85, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 1911, "space_heating_existing_dwelling": 7384}, "energy_consumption_current": 198, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 0, "calculation_software_version": "v94.0.2.1", "energy_consumption_potential": 57, "environmental_impact_current": 66, "fixed_lighting_outlets_count": 10, "current_energy_efficiency_band": "C", "environmental_impact_potential": 88, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 35, "low_energy_fixed_lighting_outlets_count": 5} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/W104HL/cert-c99dbb94e07d.json b/tests/fixtures/epc_prediction/W104HL/cert-c99dbb94e07d.json new file mode 100644 index 00000000..2582950d --- /dev/null +++ b/tests/fixtures/epc_prediction/W104HL/cert-c99dbb94e07d.json @@ -0,0 +1 @@ +{"uprn": 100022784874, "roofs": [{"description": "Pitched, insulated (assumed)", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": "Solid brick, with internal insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": "Full secondary glazing", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "lighting": {"description": "Excellent lighting efficiency", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "W10 4HL", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "psv_count": 0, "built_form": 4, "created_at": "2025-09-22 17:16:01", "door_count": 1, "region_code": 1, "report_type": 2, "sap_heating": {"number_baths": 1, "cylinder_size": 1, "shower_outlets": [{"shower_outlet": {"shower_wwhrs": 1, "shower_outlet_type": 2}}], "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 1, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 1, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 10243}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "false", "orientation": 1, "window_type": 1, "glazing_type": 4, "window_width": {"value": 1.8, "quantity": "m"}, "window_height": {"value": 1, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "false", "orientation": 1, "window_type": 1, "glazing_type": 4, "window_width": {"value": 1.1, "quantity": "m"}, "window_height": {"value": 1.7, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "false", "orientation": 5, "window_type": 1, "glazing_type": 4, "window_width": {"value": 1.1, "quantity": "m"}, "window_height": {"value": 1.7, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "false", "orientation": 1, "window_type": 1, "glazing_type": 4, "window_width": {"value": 1, "quantity": "m"}, "window_height": {"value": 1.5, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "false", "orientation": 3, "window_type": 1, "glazing_type": 4, "window_width": {"value": 0.6, "quantity": "m"}, "window_height": {"value": 0.9, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "false", "orientation": 1, "window_type": 1, "glazing_type": 4, "window_width": {"value": 1.1, "quantity": "m"}, "window_height": {"value": 1.7, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "false", "orientation": 5, "window_type": 1, "glazing_type": 4, "window_width": {"value": 1.1, "quantity": "m"}, "window_height": {"value": 1.7, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "false", "orientation": 5, "window_type": 1, "glazing_type": 4, "window_width": {"value": 1.1, "quantity": "m"}, "window_height": {"value": 1.7, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Mid-terrace house", "language_code": 1, "pressure_test": 4, "property_type": 0, "address_line_1": "addr-6f0fdb53aeac", "assessment_type": "RdSAP", "completion_date": "2025-09-22", "inspection_date": "2025-09-04", "extensions_count": 0, "measurement_type": 1, "open_flues_count": 0, "total_floor_area": 74, "transaction_type": 5, "conservatory_type": 1, "heated_room_count": 4, "other_flues_count": 0, "registration_date": "2025-09-22", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "false", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 1, "electricity_smart_meter_present": "false"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "closed_flues_count": 0, "extract_fans_count": 0, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 260, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.65, "floor_insulation": 1, "total_floor_area": 37.12, "party_wall_length": 16.77, "floor_construction": 2, "heat_loss_perimeter": 12.35}, {"floor": 1, "room_height": 2.72, "total_floor_area": 36.72, "party_wall_length": 16.6, "heat_loss_perimeter": 12.2}], "wall_insulation_type": 3, "construction_age_band": "B", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "NI", "wall_insulation_thickness": "NI"}], "boilers_flues_count": 0, "open_chimneys_count": 0, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 548, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 1.8, "energy_rating_average": 60, "energy_rating_current": 72, "lighting_cost_current": {"value": 46, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "blocked_chimneys_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 488, "currency": "GBP"}, "hot_water_cost_current": {"value": 286, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 0, "schema_version_current": "LIG-21.0", "suggested_improvements": [{"sequence": 1, "typical_saving": 42, "indicative_cost": "\u00a35,000 - \u00a310,000", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 78}, {"sequence": 2, "typical_saving": 18, "indicative_cost": "\u00a3150 - \u00a3250", "improvement_type": "D", "improvement_details": {"improvement_number": 10}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 79}, {"sequence": 3, "typical_saving": 282, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 85, "environmental_impact_rating": 82}], "co2_emissions_potential": 1.4, "energy_rating_potential": 85, "lighting_cost_potential": {"value": 46, "currency": "GBP"}, "schema_version_original": "LIG-21.0", "hot_water_cost_potential": {"value": 286, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2221.19, "space_heating_existing_dwelling": 5084.77}, "draughtproofed_door_count": 0, "energy_consumption_current": 140, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "10.2.2.0", "energy_consumption_potential": 104, "environmental_impact_current": 76, "cfl_fixed_lighting_bulbs_count": 0, "current_energy_efficiency_band": "C", "environmental_impact_potential": 82, "led_fixed_lighting_bulbs_count": 10, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 24, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/W104HL/cert-da229c5051b4.json b/tests/fixtures/epc_prediction/W104HL/cert-da229c5051b4.json new file mode 100644 index 00000000..5d91902a --- /dev/null +++ b/tests/fixtures/epc_prediction/W104HL/cert-da229c5051b4.json @@ -0,0 +1 @@ +{"uprn": 100022784892, "roofs": [{"description": "Pitched, 270 mm loft insulation", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, {"description": "Pitched, 12 mm loft insulation", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": "Single glazed", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "lighting": {"description": "Good lighting efficiency", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "W10 4HL", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "psv_count": 4, "built_form": 4, "created_at": "2026-03-30 11:27:34", "door_count": 2, "region_code": 17, "report_type": 2, "sap_heating": {"number_baths": 1, "cylinder_size": 1, "shower_outlets": [{"shower_outlet": {"shower_wwhrs": 1, "shower_outlet_type": 1}}], "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 18908}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "true", "orientation": 5, "window_type": 1, "glazing_type": 5, "window_width": 1.71, "window_height": 1.8, "draught_proofed": "false", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 5, "window_type": 1, "glazing_type": 5, "window_width": 1.19, "window_height": 1.8, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 5, "window_width": 1.27, "window_height": 1.79, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 5, "window_type": 1, "glazing_type": 5, "window_width": 1.19, "window_height": 1.79, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 5, "window_width": 1.1, "window_height": 1.81, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 1, "window_type": 1, "glazing_type": 5, "window_width": 1.1, "window_height": 1.81, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "true", "orientation": 5, "window_type": 1, "glazing_type": 5, "window_width": 1.12, "window_height": 1.31, "draught_proofed": "false", "window_location": 1, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Mid-terrace house", "language_code": 1, "pressure_test": 4, "property_type": 0, "address_line_1": "addr-dd816c70a95d", "assessment_type": "RdSAP", "completion_date": "2026-03-30", "inspection_date": "2025-12-20", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 82, "transaction_type": 5, "conservatory_type": 1, "heated_room_count": 4, "registration_date": "2026-03-30", "sap_energy_source": {"mains_gas": "Y", "meter_type": 1, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "false", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 1, "electricity_smart_meter_present": "true"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "extract_fans_count": 2, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 270, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.6, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 29.94, "quantity": "square metres"}, "party_wall_length": {"value": 7.42, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 13.17, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.77, "quantity": "metres"}, "total_floor_area": {"value": 31.02, "quantity": "square metres"}, "party_wall_length": {"value": 7.42, "quantity": "metres"}, "heat_loss_perimeter": {"value": 13.39, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "270mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 270, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.6, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 10.76, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 11.59, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.7, "quantity": "metres"}, "total_floor_area": {"value": 10.76, "quantity": "square metres"}, "party_wall_length": {"value": 0, "quantity": "metres"}, "heat_loss_perimeter": {"value": 11.59, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": "NA", "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "12mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 1209, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.0, "energy_rating_average": 60, "energy_rating_current": 57, "lighting_cost_current": {"value": 62, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 644, "currency": "GBP"}, "hot_water_cost_current": {"value": 174, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 0, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 399, "currency": "GBP"}, "indicative_cost": "\u00a37,500 - \u00a311,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 66}, {"sequence": 2, "typical_saving": {"value": 49, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a310,000", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 69, "environmental_impact_rating": 68}, {"sequence": 3, "typical_saving": {"value": 27, "currency": "GBP"}, "indicative_cost": "\u00a3150 - \u00a3250", "improvement_type": "D", "improvement_details": {"improvement_number": 10}, "improvement_category": 5, "energy_performance_rating": 70, "environmental_impact_rating": 69}, {"sequence": 4, "typical_saving": {"value": 89, "currency": "GBP"}, "indicative_cost": "\u00a34,500 - \u00a36,000", "improvement_type": "O", "improvement_details": {"improvement_number": 8}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 73}, {"sequence": 5, "typical_saving": {"value": 250, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 78, "environmental_impact_rating": 74}], "co2_emissions_potential": 2.1, "energy_rating_potential": 78, "lighting_cost_potential": {"value": 63, "currency": "GBP"}, "schema_version_original": "21.0.1", "hot_water_cost_potential": {"value": 175, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2357.32, "space_heating_existing_dwelling": 14254.17}, "draughtproofed_door_count": 0, "energy_consumption_current": 263, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 0, "calculation_software_version": "5.02r0335", "energy_consumption_potential": 131, "environmental_impact_current": 51, "current_energy_efficiency_band": "D", "environmental_impact_potential": 74, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 48, "low_energy_fixed_lighting_bulbs_count": 8, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/W104HL/cert-db58af092f54.json b/tests/fixtures/epc_prediction/W104HL/cert-db58af092f54.json new file mode 100644 index 00000000..4e686c84 --- /dev/null +++ b/tests/fixtures/epc_prediction/W104HL/cert-db58af092f54.json @@ -0,0 +1 @@ +{"uprn": 100022784892, "roofs": [{"description": "Pitched, 150 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": "Single glazed", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "lighting": {"description": "Low energy lighting in all fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "W10 4HL", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2023-10-25 12:36:27", "door_count": 2, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 0}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 104, "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Mid-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-dd816c70a95d", "assessment_type": "RdSAP", "completion_date": "2023-10-25", "inspection_date": "2023-10-24", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 72, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "registration_date": "2023-10-25", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 225, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.5, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 36, "quantity": "square metres"}, "party_wall_length": {"value": 16, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 9, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.5, "quantity": "metres"}, "total_floor_area": {"value": 36, "quantity": "square metres"}, "party_wall_length": {"value": 16, "quantity": "metres"}, "heat_loss_perimeter": {"value": 9, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "150mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 1006, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.6, "energy_rating_average": 60, "energy_rating_current": 69, "lighting_cost_current": {"value": 117, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": "ND", "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 579, "currency": "GBP"}, "hot_water_cost_current": {"value": 259, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 100, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 187, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 71}, {"sequence": 2, "typical_saving": {"value": 61, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 73}, {"sequence": 3, "typical_saving": {"value": 90, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 75, "environmental_impact_rating": 75}, {"sequence": 4, "typical_saving": {"value": 177, "currency": "GBP"}, "indicative_cost": "\u00a33,300 - \u00a36,500", "improvement_type": "O", "improvement_details": {"improvement_number": 8}, "improvement_category": 5, "energy_performance_rating": 79, "environmental_impact_rating": 80}, {"sequence": 5, "typical_saving": {"value": 656, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 90, "environmental_impact_rating": 90}], "co2_emissions_potential": 0.6, "energy_rating_potential": 90, "lighting_cost_potential": {"value": 117, "currency": "GBP"}, "schema_version_original": "20.0.0", "hot_water_cost_potential": {"value": 172, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2026, "impact_of_loft_insulation": -193, "impact_of_solid_wall_insulation": -1554, "space_heating_existing_dwelling": 6919}, "energy_consumption_current": 203, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 0, "calculation_software_version": "4.13r0001", "energy_consumption_potential": 41, "environmental_impact_current": 66, "fixed_lighting_outlets_count": 6, "current_energy_efficiency_band": "C", "environmental_impact_potential": 90, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 36, "low_energy_fixed_lighting_outlets_count": 6} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/W104HL/cert-e2c4a36966b6.json b/tests/fixtures/epc_prediction/W104HL/cert-e2c4a36966b6.json new file mode 100644 index 00000000..b3f7cead --- /dev/null +++ b/tests/fixtures/epc_prediction/W104HL/cert-e2c4a36966b6.json @@ -0,0 +1 @@ +{"uprn": 100022784899, "roofs": [{"description": "Pitched, 150 mm loft insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, {"description": "Flat, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": "Solid brick, as built, no insulation (assumed)", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, {"description": "Solid, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 3, "window": {"description": "Single glazed", "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "lighting": {"description": "Low energy lighting in 75% of fixed outlets", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "W10 4HL", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2021-03-22 16:57:03.337205", "door_count": 1, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 10265}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": "Mid-terrace house", "language_code": 1, "property_type": 0, "address_line_1": "addr-2ac303e9acf4", "address_line_2": "", "assessment_type": "RdSAP", "completion_date": "2021-03-22", "inspection_date": "2021-03-19", "extensions_count": 1, "measurement_type": 1, "total_floor_area": 75, "transaction_type": 8, "conservatory_type": 2, "heated_room_count": 4, "registration_date": "2021-03-22", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 2}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 240, "floor_heat_loss": 7, "roof_construction": 4, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.59, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 28.42, "quantity": "square metres"}, "party_wall_length": {"value": 13.52, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 6.05, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.72, "quantity": "metres"}, "total_floor_area": {"value": 28.42, "quantity": "square metres"}, "party_wall_length": {"value": 13.52, "quantity": "metres"}, "heat_loss_perimeter": {"value": 6.05, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "A", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 2, "roof_insulation_thickness": "150mm", "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI"}, {"identifier": "Extension 1", "wall_dry_lined": "N", "wall_thickness": 240, "floor_heat_loss": 7, "roof_construction": 1, "wall_construction": 3, "building_part_number": 2, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.26, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 9.01, "quantity": "square metres"}, "party_wall_length": {"value": 3.8, "quantity": "metres"}, "floor_construction": 1, "heat_loss_perimeter": {"value": 6.17, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.25, "quantity": "metres"}, "total_floor_area": {"value": 9.01, "quantity": "square metres"}, "party_wall_length": {"value": 3.8, "quantity": "metres"}, "heat_loss_perimeter": {"value": 6.17, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "A", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 6, "wall_insulation_thickness": "NI", "floor_insulation_thickness": "NI", "flat_roof_insulation_thickness": "AB"}], "low_energy_lighting": 75, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 513, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 3.0, "energy_rating_average": 60, "energy_rating_current": 65, "lighting_cost_current": {"value": 78, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": "ND", "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 289, "currency": "GBP"}, "hot_water_cost_current": {"value": 93, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 0, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 29, "currency": "GBP"}, "indicative_cost": "\u00a3850 - \u00a31,500", "improvement_type": "A2", "improvement_details": {"improvement_number": 45}, "improvement_category": 5, "energy_performance_rating": 67, "environmental_impact_rating": 63}, {"sequence": 2, "typical_saving": {"value": 103, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 70}, {"sequence": 3, "typical_saving": {"value": 17, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 72}, {"sequence": 4, "typical_saving": {"value": 12, "currency": "GBP"}, "indicative_cost": "\u00a380 - \u00a3120", "improvement_type": "D", "improvement_details": {"improvement_number": 10}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 73}, {"sequence": 5, "typical_saving": {"value": 14, "currency": "GBP"}, "indicative_cost": "\u00a310", "improvement_type": "E", "improvement_details": {"improvement_number": 35}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 74}, {"sequence": 6, "typical_saving": {"value": 29, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 76, "environmental_impact_rating": 76}, {"sequence": 7, "typical_saving": {"value": 63, "currency": "GBP"}, "indicative_cost": "\u00a33,300 - \u00a36,500", "improvement_type": "O", "improvement_details": {"improvement_number": 8}, "improvement_category": 5, "energy_performance_rating": 79, "environmental_impact_rating": 80}, {"sequence": 8, "typical_saving": {"value": 338, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 90, "environmental_impact_rating": 90}], "co2_emissions_potential": 0.6, "energy_rating_potential": 90, "lighting_cost_potential": {"value": 62, "currency": "GBP"}, "schema_version_original": "20.0.0", "hot_water_cost_potential": {"value": 65, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2058, "impact_of_loft_insulation": -142, "impact_of_solid_wall_insulation": -2365, "space_heating_existing_dwelling": 9079}, "energy_consumption_current": 226, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 0, "calculation_software_version": "4.07r0002", "energy_consumption_potential": 42, "environmental_impact_current": 61, "fixed_lighting_outlets_count": 8, "current_energy_efficiency_band": "D", "environmental_impact_potential": 90, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 40, "low_energy_fixed_lighting_outlets_count": 6} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/W104HL/cert-f8f650d8a598.json b/tests/fixtures/epc_prediction/W104HL/cert-f8f650d8a598.json new file mode 100644 index 00000000..63d05007 --- /dev/null +++ b/tests/fixtures/epc_prediction/W104HL/cert-f8f650d8a598.json @@ -0,0 +1 @@ +{"uprn": 100022784874, "roofs": [{"description": {"value": "Pitched, 270 mm loft insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "walls": [{"description": {"value": "Solid brick, with internal insulation", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": {"value": "Single glazed", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "lighting": {"description": {"value": "Low energy lighting in all fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "W10 4HL", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2025-01-14 16:57:35", "door_count": 1, "glazed_area": 2, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 1, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 1}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "mcs_installed_heat_pump": "false", "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 10243}], "immersion_heating_type": "NA", "cylinder_insulation_type": 0, "has_fixed_air_conditioning": "false"}, "sap_version": 9.94, "schema_type": "RdSAP-Schema-20.0.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Mid-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-6f0fdb53aeac", "assessment_type": "RdSAP", "completion_date": "2025-01-14", "inspection_date": "2025-01-11", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 74, "transaction_type": 8, "conservatory_type": 1, "heated_room_count": 4, "registration_date": "2025-01-14", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 1}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.65, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 37.12, "quantity": "square metres"}, "party_wall_length": {"value": 16.77, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 12.35, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.72, "quantity": "metres"}, "total_floor_area": {"value": 36.72, "quantity": "square metres"}, "party_wall_length": {"value": 16.6, "quantity": "metres"}, "heat_loss_perimeter": {"value": 12.2, "quantity": "metres"}}], "wall_insulation_type": 3, "construction_age_band": "B", "party_wall_construction": 0, "wall_thickness_measured": "N", "roof_insulation_location": 2, "roof_insulation_thickness": "270mm", "wall_insulation_thickness": "100mm"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 637, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 2.5, "energy_rating_average": 60, "energy_rating_current": 69, "lighting_cost_current": {"value": 81, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": "ND", "open_fireplaces_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 464, "currency": "GBP"}, "hot_water_cost_current": {"value": 139, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 0, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 43, "currency": "GBP"}, "indicative_cost": "\u00a3800 - \u00a31,200", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 71, "environmental_impact_rating": 69}, {"sequence": 2, "typical_saving": {"value": 18, "currency": "GBP"}, "indicative_cost": "\u00a380 - \u00a3120", "improvement_type": "D", "improvement_details": {"improvement_number": 10}, "improvement_category": 5, "energy_performance_rating": 72, "environmental_impact_rating": 70}, {"sequence": 3, "typical_saving": {"value": 43, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 72}, {"sequence": 4, "typical_saving": {"value": 113, "currency": "GBP"}, "indicative_cost": "\u00a33,300 - \u00a36,500", "improvement_type": "O", "improvement_details": {"improvement_number": 8}, "improvement_category": 5, "energy_performance_rating": 77, "environmental_impact_rating": 77}, {"sequence": 5, "typical_saving": {"value": 480, "currency": "GBP"}, "indicative_cost": "\u00a33,500 - \u00a35,500", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 88, "environmental_impact_rating": 88}], "co2_emissions_potential": 0.8, "energy_rating_potential": 88, "lighting_cost_potential": {"value": 81, "currency": "GBP"}, "schema_version_original": "LIG-19.0", "hot_water_cost_potential": {"value": 96, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2074, "space_heating_existing_dwelling": 7311}, "energy_consumption_current": 193, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 0, "calculation_software_version": "v94.0.2.1", "energy_consumption_potential": 57, "environmental_impact_current": 67, "fixed_lighting_outlets_count": 10, "current_energy_efficiency_band": "C", "environmental_impact_potential": 88, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 34, "low_energy_fixed_lighting_outlets_count": 10} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/W104HL/cert-f96b9b6f471b.json b/tests/fixtures/epc_prediction/W104HL/cert-f96b9b6f471b.json new file mode 100644 index 00000000..af090b8d --- /dev/null +++ b/tests/fixtures/epc_prediction/W104HL/cert-f96b9b6f471b.json @@ -0,0 +1 @@ +{"uprn": 100022784876, "roofs": [{"description": {"value": "Pitched, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "walls": [{"description": {"value": "Solid brick, as built, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}], "floors": [{"description": {"value": "Suspended, no insulation (assumed)", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 1, "window": {"description": {"value": "Single glazed", "language": "1"}, "energy_efficiency_rating": 1, "environmental_efficiency_rating": 1}, "lighting": {"description": {"value": "Low energy lighting in all fixed outlets", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "W10 4HL", "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "built_form": 4, "created_at": "2016-07-06 14:41:12.000000", "door_count": 2, "glazed_area": 1, "region_code": 17, "report_type": 2, "sap_heating": {"cylinder_size": 1, "water_heating_code": 901, "water_heating_fuel": 26, "instantaneous_wwhrs": {"rooms_with_bath_and_or_shower": 4, "rooms_with_mixer_shower_no_bath": 0, "rooms_with_bath_and_mixer_shower": 4}, "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 2, "fan_flue_present": "N", "heat_emitter_type": 1, "emitter_temperature": 0, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "sap_main_heating_code": 104, "central_heating_pump_age": 0, "main_heating_data_source": 2}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 9.92, "schema_type": "RdSAP-Schema-17.0", "uprn_source": "Energy Assessor", "country_code": "EAW", "main_heating": [{"description": {"value": "Boiler and radiators, mains gas", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "dwelling_type": {"value": "Mid-terrace house", "language": "1"}, "language_code": 1, "property_type": 0, "address_line_1": "addr-1b5de7d6b912", "assessment_type": "RdSAP", "completion_date": "2016-07-06", "inspection_date": "2016-07-06", "extensions_count": 0, "measurement_type": 1, "total_floor_area": 89, "transaction_type": 1, "conservatory_type": 1, "heated_room_count": 4, "registration_date": "2016-07-06", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "photovoltaic_supply": {"none_or_no_details": {"pv_connection": 0, "percent_roof_area": 0}}, "wind_turbines_count": 0, "wind_turbines_terrain_type": 1}, "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "wall_thickness": 300, "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": {"value": 2.64, "quantity": "metres"}, "floor_insulation": 1, "total_floor_area": {"value": 38.02, "quantity": "square metres"}, "party_wall_length": {"value": 17.21, "quantity": "metres"}, "floor_construction": 2, "heat_loss_perimeter": {"value": 12.26, "quantity": "metres"}}, {"floor": 1, "room_height": {"value": 2.71, "quantity": "metres"}, "total_floor_area": {"value": 38.02, "quantity": "square metres"}, "party_wall_length": {"value": 17.21, "quantity": "metres"}, "heat_loss_perimeter": {"value": 12.26, "quantity": "metres"}}, {"floor": 2, "room_height": {"value": 1.95, "quantity": "metres"}, "total_floor_area": {"value": 12.71, "quantity": "square metres"}, "party_wall_length": {"value": 8.12, "quantity": "metres"}, "heat_loss_perimeter": {"value": 6.26, "quantity": "metres"}}], "wall_insulation_type": 4, "construction_age_band": "B", "party_wall_construction": 1, "wall_thickness_measured": "Y", "roof_insulation_location": 4, "roof_insulation_thickness": "ND", "wall_insulation_thickness": "NI"}], "low_energy_lighting": 100, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 880, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 4.7, "energy_rating_average": 60, "energy_rating_current": 55, "lighting_cost_current": {"value": 57, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Programmer, room thermostat and TRVs", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "multiple_glazing_type": "ND", "open_fireplaces_count": 2, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 593, "currency": "GBP"}, "hot_water_cost_current": {"value": 117, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 0, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 195, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a314,000", "improvement_type": "Q", "improvement_details": {"improvement_number": 7}, "improvement_category": 5, "energy_performance_rating": 62, "environmental_impact_rating": 56}, {"sequence": 2, "typical_saving": {"value": 23, "currency": "GBP"}, "indicative_cost": "\u00a380 - \u00a3120", "improvement_type": "D", "improvement_details": {"improvement_number": 10}, "improvement_category": 5, "energy_performance_rating": 64, "environmental_impact_rating": 57}, {"sequence": 3, "typical_saving": {"value": 39, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a36,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 65, "environmental_impact_rating": 59}, {"sequence": 4, "typical_saving": {"value": 68, "currency": "GBP"}, "indicative_cost": "\u00a33,300 - \u00a36,500", "improvement_type": "O", "improvement_details": {"improvement_number": 8}, "improvement_category": 5, "energy_performance_rating": 68, "environmental_impact_rating": 63}, {"sequence": 5, "typical_saving": {"value": 274, "currency": "GBP"}, "indicative_cost": "\u00a35,000 - \u00a38,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 78, "environmental_impact_rating": 72}], "co2_emissions_potential": 2.1, "energy_rating_potential": 78, "lighting_cost_potential": {"value": 58, "currency": "GBP"}, "schema_version_original": "LIG-17.0", "hot_water_cost_potential": {"value": 78, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2178, "impact_of_loft_insulation": -2789, "impact_of_solid_wall_insulation": -4029, "space_heating_existing_dwelling": 14908}, "energy_consumption_current": 298, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 0, "calculation_software_version": "2.0.0.0", "energy_consumption_potential": 132, "environmental_impact_current": 46, "fixed_lighting_outlets_count": 24, "windows_transmission_details": {"u_value": 4.8, "data_source": 2, "solar_transmittance": 0.85}, "current_energy_efficiency_band": "D", "environmental_impact_potential": 72, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "C", "co2_emissions_current_per_floor_area": 53, "low_energy_fixed_lighting_outlets_count": 24} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/W104HL/cert-fdb7d8dcc402.json b/tests/fixtures/epc_prediction/W104HL/cert-fdb7d8dcc402.json new file mode 100644 index 00000000..e90d7dcc --- /dev/null +++ b/tests/fixtures/epc_prediction/W104HL/cert-fdb7d8dcc402.json @@ -0,0 +1 @@ +{"uprn": 100022784864, "roofs": [{"description": "Pitched, insulated (assumed)", "energy_efficiency_rating": 3, "environmental_efficiency_rating": 3}], "walls": [{"description": "Solid brick, with internal insulation", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "floors": [{"description": "Suspended, no insulation (assumed)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}], "status": "entered", "tenure": 2, "window": {"description": "Full secondary glazing", "energy_efficiency_rating": 2, "environmental_efficiency_rating": 2}, "lighting": {"description": "Excellent lighting efficiency", "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "W10 4HL", "hot_water": {"description": "From main system", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "post_town": "", "psv_count": 0, "built_form": 4, "created_at": "2025-09-22 17:15:07", "door_count": 2, "region_code": 1, "report_type": 2, "sap_heating": {"number_baths": 1, "cylinder_size": 1, "shower_outlets": [{"shower_outlet": {"shower_wwhrs": 1, "shower_outlet_type": 2}}], "number_baths_wwhrs": 0, "water_heating_code": 901, "water_heating_fuel": 26, "cylinder_thermostat": "N", "main_heating_details": [{"has_fghrs": "N", "main_fuel_type": 26, "boiler_flue_type": 1, "fan_flue_present": "Y", "heat_emitter_type": 1, "emitter_temperature": 1, "main_heating_number": 1, "main_heating_control": 2106, "main_heating_category": 2, "main_heating_fraction": 1, "central_heating_pump_age": 0, "main_heating_data_source": 1, "main_heating_index_number": 17507}], "immersion_heating_type": "NA", "has_fixed_air_conditioning": "false"}, "sap_version": 10.2, "sap_windows": [{"pvc_frame": "false", "orientation": 1, "window_type": 1, "glazing_type": 4, "window_width": {"value": 1.8, "quantity": "m"}, "window_height": {"value": 1, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "false", "orientation": 1, "window_type": 1, "glazing_type": 4, "window_width": {"value": 1.1, "quantity": "m"}, "window_height": {"value": 1.7, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "false", "orientation": 5, "window_type": 1, "glazing_type": 4, "window_width": {"value": 1.1, "quantity": "m"}, "window_height": {"value": 1.7, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "false", "orientation": 1, "window_type": 1, "glazing_type": 4, "window_width": {"value": 1.5, "quantity": "m"}, "window_height": {"value": 1, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "false", "orientation": 1, "window_type": 1, "glazing_type": 4, "window_width": {"value": 1.1, "quantity": "m"}, "window_height": {"value": 1.7, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "false", "orientation": 7, "window_type": 1, "glazing_type": 4, "window_width": {"value": 0.6, "quantity": "m"}, "window_height": {"value": 0.7, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "false", "orientation": 5, "window_type": 1, "glazing_type": 4, "window_width": {"value": 1.1, "quantity": "m"}, "window_height": {"value": 1.7, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}, {"pvc_frame": "false", "orientation": 5, "window_type": 1, "glazing_type": 4, "window_width": {"value": 1.1, "quantity": "m"}, "window_height": {"value": 1.7, "quantity": "m"}, "draught_proofed": "false", "window_location": 0, "window_wall_type": 1, "permanent_shutters_present": "N", "permanent_shutters_insulated": "N"}], "schema_type": "RdSAP-Schema-21.0.1", "uprn_source": "Energy Assessor", "country_code": "ENG", "main_heating": [{"description": "Boiler and radiators, mains gas", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "air_tightness": {"description": "(not tested)", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "dwelling_type": "Mid-terrace house", "language_code": 1, "pressure_test": 4, "property_type": 0, "address_line_1": "addr-8e99b09098b9", "assessment_type": "RdSAP", "completion_date": "2025-09-22", "inspection_date": "2025-09-04", "extensions_count": 0, "measurement_type": 1, "open_flues_count": 0, "total_floor_area": 74, "transaction_type": 5, "conservatory_type": 1, "heated_room_count": 4, "other_flues_count": 0, "registration_date": "2025-09-22", "sap_energy_source": {"mains_gas": "Y", "meter_type": 2, "pv_connection": 0, "photovoltaic_supply": {"none_or_no_details": {"percent_roof_area": 0}}, "wind_turbines_count": 0, "gas_smart_meter_present": "false", "is_dwelling_export_capable": "false", "wind_turbines_terrain_type": 1, "electricity_smart_meter_present": "false"}, "secondary_heating": {"description": "None", "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "closed_flues_count": 0, "extract_fans_count": 0, "sap_building_parts": [{"identifier": "Main Dwelling", "wall_dry_lined": "N", "floor_heat_loss": 7, "roof_construction": 5, "wall_construction": 3, "building_part_number": 1, "sap_floor_dimensions": [{"floor": 0, "room_height": 2.62, "floor_insulation": 1, "total_floor_area": 37, "party_wall_length": 16.88, "floor_construction": 2, "heat_loss_perimeter": 12.1}, {"floor": 1, "room_height": 2.7, "total_floor_area": 36.61, "party_wall_length": 16.7, "heat_loss_perimeter": 12.1}], "wall_insulation_type": 3, "construction_age_band": "B", "party_wall_construction": 1, "wall_thickness_measured": "N", "roof_insulation_location": 4, "roof_insulation_thickness": "NI", "wall_insulation_thickness": "NI"}], "boilers_flues_count": 0, "open_chimneys_count": 0, "solar_water_heating": "N", "habitable_room_count": 4, "heating_cost_current": {"value": 554, "currency": "GBP"}, "insulated_door_count": 0, "co2_emissions_current": 1.8, "energy_rating_average": 60, "energy_rating_current": 72, "lighting_cost_current": {"value": 46, "currency": "GBP"}, "main_heating_controls": [{"description": "Programmer, room thermostat and TRVs", "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}], "blocked_chimneys_count": 0, "has_hot_water_cylinder": "false", "heating_cost_potential": {"value": 495, "currency": "GBP"}, "hot_water_cost_current": {"value": 274, "currency": "GBP"}, "mechanical_ventilation": 0, "percent_draughtproofed": 0, "schema_version_current": "LIG-21.0", "suggested_improvements": [{"sequence": 1, "typical_saving": 42, "indicative_cost": "\u00a35,000 - \u00a310,000", "improvement_type": "W1", "improvement_details": {"improvement_number": 57}, "improvement_category": 5, "energy_performance_rating": 73, "environmental_impact_rating": 78}, {"sequence": 2, "typical_saving": 17, "indicative_cost": "\u00a3150 - \u00a3250", "improvement_type": "D", "improvement_details": {"improvement_number": 10}, "improvement_category": 5, "energy_performance_rating": 74, "environmental_impact_rating": 79}, {"sequence": 3, "typical_saving": 282, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 82}], "co2_emissions_potential": 1.4, "energy_rating_potential": 86, "lighting_cost_potential": {"value": 46, "currency": "GBP"}, "schema_version_original": "LIG-21.0", "hot_water_cost_potential": {"value": 274, "currency": "GBP"}, "renewable_heat_incentive": {"water_heating": 2058.59, "space_heating_existing_dwelling": 5182.27}, "draughtproofed_door_count": 0, "energy_consumption_current": 139, "has_fixed_air_conditioning": "false", "multiple_glazed_proportion": 100, "calculation_software_version": "10.2.2.0", "energy_consumption_potential": 103, "environmental_impact_current": 76, "cfl_fixed_lighting_bulbs_count": 0, "current_energy_efficiency_band": "C", "environmental_impact_potential": 82, "led_fixed_lighting_bulbs_count": 10, "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 24, "incandescent_fixed_lighting_bulbs_count": 0} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/WA53GF/cert-030ab0b24dfb.json b/tests/fixtures/epc_prediction/WA53GF/cert-030ab0b24dfb.json new file mode 100644 index 00000000..61370f36 --- /dev/null +++ b/tests/fixtures/epc_prediction/WA53GF/cert-030ab0b24dfb.json @@ -0,0 +1 @@ +{"der": 3.38, "ter": 10.79, "dfee": 35.8, "dper": 35.27, "tfee": 36.5, "tper": 56.4, "uprn": 10097320596, "roofs": [{"description": {"value": "Average thermal transmittance 0.13 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.19 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.11 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": "ND", "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "WA5 3GF", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 2, "created_at": "2025-12-04 15:39:34", "living_area": 16.7, "orientation": 3, "region_code": 19, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_power": 9.3, "shower_wwhrs": 1, "shower_flow_rate": 6, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 901, "hot_water_store_size": 210, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2207, "main_heating_category": 4, "main_heating_fraction": 1, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 107682, "heat_pump_heat_distribution": 45, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.55, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_heat_pump_installed_to_mis": "true", "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "hot_water_store_heat_transfer_area": 3, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Air source heat pump, radiators, electric", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 10, "lighting_outlets": 14, "lighting_efficacy": 75}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.8 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-fc0df43fa4e6", "assessment_date": "2025-12-04", "assessment_type": "SAP", "completion_date": "2025-12-04", "inspection_date": "2025-12-04", "sap_ventilation": {"psv_count": 0, "wall_type": 1, "pressure_test": 1, "wet_rooms_count": 4, "air_permeability": 4.85, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 3, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500776, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 108, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2025-12-04", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Door", "type": 1, "u_value": 1, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "Windows", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.43}, {"name": "Half Glazed Door", "type": 2, "u_value": 1.1, "data_source": 4, "glazing_type": 7, "isargonfilled": "false"}, {"name": "French Door", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.38}, {"name": "Roof Light", "type": 5, "u_value": 1.3, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 40.44, "lzc_energy_sources": [9], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 19.66}, {"name": "Roof (2)", "u_value": 0.16, "roof_type": 2, "kappa_value": 9, "total_roof_area": 24.85}, {"name": "Roof (3)", "u_value": 0.12, "roof_type": 2, "kappa_value": 9, "total_roof_area": 13.45}, {"name": "Roof (4)", "u_value": 0.16, "roof_type": 2, "kappa_value": 9, "total_roof_area": 13.35}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.19, "wall_type": 2, "kappa_value": 60, "total_wall_area": 99.23, "is_curtain_walling": "false"}, {"name": "Walls (2)", "u_value": 0.23, "wall_type": 2, "kappa_value": 18, "total_wall_area": 15.83, "is_curtain_walling": "false"}, {"name": "Walls (3)", "u_value": 0.12, "wall_type": 2, "kappa_value": 18, "total_wall_area": 14.82, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 110, "total_wall_area": 47.04, "is_curtain_walling": "false"}, {"name": "Party Wall (2)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 15.83, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 193.57, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Door", "width": 2.14, "height": 1, "location": "Walls (1)", "orientation": 3}, {"name": "Opening 2", "type": "Windows", "width": 5.25, "height": 1, "location": "Walls (1)", "orientation": 3}, {"name": "Opening", "type": "Roof Light", "pitch": 40, "width": 1.78, "height": 1, "location": "Roof (2)", "orientation": 3}, {"name": "Opening", "type": "Windows", "width": 1.54, "height": 1, "location": "Walls (1)", "orientation": 5}, {"name": "Opening", "type": "French Door", "width": 3.8, "height": 1, "location": "Walls (1)", "orientation": 7}, {"name": "Opening", "type": "Windows", "width": 1.4, "height": 1, "location": "Walls (1)", "orientation": 7}, {"name": "Opening", "type": "Roof Light", "pitch": 40, "width": 1.78, "height": 1, "location": "Roof (2)", "orientation": 7}], "construction_year": 2022, "sap_thermal_bridges": {"thermal_bridges": [{"length": 6.84, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 5.82, "psi_value": 0.022, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 16.68, "psi_value": 0.0296, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 18.18, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 24.39, "psi_value": 0.002, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 6.73, "psi_value": 0.0419, "psi_value_source": 1, "thermal_bridge_type": "E11"}, {"length": 4.51, "psi_value": 0.057, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 11.7, "psi_value": 0.047, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 8.4, "psi_value": 0.1, "psi_value_source": 4, "thermal_bridge_type": "E4"}, {"length": 1.81, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 11.7, "psi_value": 0.0343, "psi_value_source": 1, "thermal_bridge_type": "E18"}, {"length": 9.29, "psi_value": 0.06, "psi_value_source": 1, "thermal_bridge_type": "P1"}, {"length": 9.29, "psi_value": 0, "psi_value_source": 4, "thermal_bridge_type": "P2"}, {"length": 4.51, "psi_value": 0.033, "psi_value_source": 1, "thermal_bridge_type": "P4"}, {"length": 5.74, "psi_value": 0.094, "psi_value_source": 1, "thermal_bridge_type": "E13"}, {"length": 4.81, "psi_value": 0.04, "psi_value_source": 1, "thermal_bridge_type": "P5"}, {"length": 8.72, "psi_value": 0.019, "psi_value_source": 1, "thermal_bridge_type": "R6"}, {"length": 2.72, "psi_value": 0.115, "psi_value_source": 1, "thermal_bridge_type": "R1"}, {"length": 2.72, "psi_value": 0.113, "psi_value_source": 1, "thermal_bridge_type": "R2"}, {"length": 5.56, "psi_value": 0.041, "psi_value_source": 1, "thermal_bridge_type": "R3"}, {"length": 1.27, "psi_value": 0.15, "psi_value_source": 4, "thermal_bridge_type": "E11"}, {"length": 3.85, "psi_value": 0.12, "psi_value_source": 4, "thermal_bridge_type": "R5"}, {"length": 2.94, "psi_value": 0.12, "psi_value_source": 4, "thermal_bridge_type": "R4"}, {"length": 3.69, "psi_value": 0.25, "psi_value_source": 4, "thermal_bridge_type": "E13"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.11, "floor_type": 2, "kappa_value": 160, "storey_height": 2.38, "heat_loss_area": 40.44, "total_floor_area": 40.44}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.69, "heat_loss_area": 0, "total_floor_area": 40.44, "kappa_value_from_below": 9}, {"storey": 2, "u_value": 0, "floor_type": 3, "storey_height": 2.27, "heat_loss_area": 0, "total_floor_area": 26.99}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 282, "currency": "GBP"}, "co2_emissions_current": 0.3, "energy_rating_average": 60, "energy_rating_current": 85, "lighting_cost_current": {"value": 73, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 305, "currency": "GBP"}, "hot_water_cost_current": {"value": 301, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 51, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 343, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 93, "environmental_impact_rating": 99}], "user_interface_version": "2.25.1", "co2_emissions_potential": 0.1, "energy_rating_potential": 93, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 73, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 227, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 33, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "2.25.1", "energy_consumption_potential": 15, "environmental_impact_current": 97, "current_energy_efficiency_band": "B", "environmental_impact_potential": 99, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 3.2} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/WA53GF/cert-0b3aada57a2b.json b/tests/fixtures/epc_prediction/WA53GF/cert-0b3aada57a2b.json new file mode 100644 index 00000000..be51662a --- /dev/null +++ b/tests/fixtures/epc_prediction/WA53GF/cert-0b3aada57a2b.json @@ -0,0 +1 @@ +{"der": 3.53, "ter": 11.06, "dfee": 33.2, "dper": 37.12, "tfee": 35.2, "tper": 57.75, "uprn": 10097320611, "roofs": [{"description": {"value": "Average thermal transmittance 0.09 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.19 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.12 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": "ND", "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "WA5 3GF", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 2, "created_at": "2026-04-09 11:05:07", "living_area": 16.12, "orientation": 2, "region_code": 19, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_power": 9.3, "shower_wwhrs": 1, "shower_flow_rate": 6, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 901, "hot_water_store_size": 180, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2207, "main_heating_category": 4, "main_heating_fraction": 1, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 107682, "heat_pump_heat_distribution": 45, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.39, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_heat_pump_installed_to_mis": "false", "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "hot_water_store_heat_transfer_area": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Air source heat pump, radiators, electric", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 10, "lighting_outlets": 9, "lighting_efficacy": 75}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.9 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-0d9617d8cbf1", "assessment_date": "2026-04-09", "assessment_type": "SAP", "completion_date": "2026-04-09", "inspection_date": "2026-04-09", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "wet_rooms_count": 3, "air_permeability": 4.93, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 2, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500776, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 82, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-04-09", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Door", "type": 1, "u_value": 1, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "Windows", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.43}, {"name": "Half Glazed Door", "type": 2, "u_value": 1.1, "data_source": 4, "glazing_type": 7, "isargonfilled": "false"}, {"name": "French Door", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.38}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 40.82, "lzc_energy_sources": [9], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 40.81999969482422}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.19, "wall_type": 2, "kappa_value": 60, "total_wall_area": 91.61, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 110, "total_wall_area": 45.36, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 138.25, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Door", "width": 2.14, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "Opening 2", "type": "Windows", "width": 4.67, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "Opening 5", "type": "Windows", "width": 1.44, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "Opening 6", "type": "Windows", "width": 1.4, "height": 1, "location": "Walls (1)", "orientation": 6}, {"name": "French Doors", "type": "French Door", "width": 3.8, "height": 1, "location": "Walls (1)", "orientation": 6}], "construction_year": 2022, "sap_thermal_bridges": {"thermal_bridges": [{"length": 4.9, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 3.88, "psi_value": 0.022, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 13.06, "psi_value": 0.0296, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 18.07, "psi_value": 0.076, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 18.07, "psi_value": 0.002, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 8.95, "psi_value": 0.0383, "psi_value_source": 1, "thermal_bridge_type": "E10"}, {"length": 9.12, "psi_value": 0.057, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 10.14, "psi_value": 0.047, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 8.4, "psi_value": 0.1, "psi_value_source": 4, "thermal_bridge_type": "E4"}, {"length": 1.81, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 10.14, "psi_value": 0.0343, "psi_value_source": 1, "thermal_bridge_type": "E18"}, {"length": 8.95, "psi_value": 0.06, "psi_value_source": 1, "thermal_bridge_type": "P1"}, {"length": 8.95, "psi_value": 0, "psi_value_source": 4, "thermal_bridge_type": "P2"}, {"length": 8.95, "psi_value": 0.033, "psi_value_source": 1, "thermal_bridge_type": "P4"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.12, "floor_type": 2, "kappa_value": 160, "storey_height": 2.38, "heat_loss_area": 40.82, "total_floor_area": 40.82}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.69, "heat_loss_area": 0, "total_floor_area": 40.82, "kappa_value_from_below": 9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 174, "currency": "GBP"}, "co2_emissions_current": 0.3, "energy_rating_average": 60, "energy_rating_current": 86, "lighting_cost_current": {"value": 63, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 197, "currency": "GBP"}, "hot_water_cost_current": {"value": 272, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 48, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 87, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 323, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 95, "environmental_impact_rating": 100}], "user_interface_version": "3.1.55", "co2_emissions_potential": 0.0, "energy_rating_potential": 95, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 63, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 201, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 35, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.55", "energy_consumption_potential": 12, "environmental_impact_current": 97, "current_energy_efficiency_band": "B", "environmental_impact_potential": 100, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 3.3} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/WA53GF/cert-0bcbc7bf951d.json b/tests/fixtures/epc_prediction/WA53GF/cert-0bcbc7bf951d.json new file mode 100644 index 00000000..45d7aa3a --- /dev/null +++ b/tests/fixtures/epc_prediction/WA53GF/cert-0bcbc7bf951d.json @@ -0,0 +1 @@ +{"der": 3.51, "ter": 11.3, "dfee": 34.4, "dper": 36.87, "tfee": 36.4, "tper": 59.05, "uprn": 10097320589, "roofs": [{"description": {"value": "Average thermal transmittance 0.09 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.19 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.12 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": "ND", "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Excellent lighting efficiency", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}, "postcode": "WA5 3GF", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 2, "created_at": "2026-03-13 13:19:52", "living_area": 16.12, "orientation": 3, "region_code": 19, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_power": 9.3, "shower_wwhrs": 1, "shower_flow_rate": 6, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 901, "hot_water_store_size": 180, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2207, "main_heating_category": 4, "main_heating_fraction": 1, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 107682, "heat_pump_heat_distribution": 45, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.39, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_heat_pump_installed_to_mis": "false", "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "hot_water_store_heat_transfer_area": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Air source heat pump, radiators, electric", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 10, "lighting_outlets": 4, "lighting_efficacy": 75}, {"lighting_power": 10, "lighting_outlets": 12, "lighting_efficacy": 96}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.9 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-779245ddda67", "assessment_date": "2026-03-13", "assessment_type": "SAP", "completion_date": "2026-03-13", "inspection_date": "2026-03-13", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "wet_rooms_count": 3, "air_permeability": 4.92, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 2, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 2, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500776, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 82, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-03-13", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Door", "type": 1, "u_value": 1, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "Windows", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.43}, {"name": "Half Glazed Door", "type": 2, "u_value": 1.1, "data_source": 4, "glazing_type": 7, "isargonfilled": "false"}, {"name": "French Door", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.38}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 40.82, "lzc_energy_sources": [9], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 40.81999969482422}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.19, "wall_type": 2, "kappa_value": 60, "total_wall_area": 91.61, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 110, "total_wall_area": 45.36, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 138.25, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Door", "width": 2.14, "height": 1, "location": "Walls (1)", "orientation": 3}, {"name": "Opening 2", "type": "Windows", "width": 4.67, "height": 1, "location": "Walls (1)", "orientation": 3}, {"name": "Opening 5", "type": "Windows", "width": 1.44, "height": 1, "location": "Walls (1)", "orientation": 1}, {"name": "Opening 6", "type": "Windows", "width": 1.4, "height": 1, "location": "Walls (1)", "orientation": 7}, {"name": "French Doors", "type": "French Door", "width": 3.8, "height": 1, "location": "Walls (1)", "orientation": 7}], "construction_year": 2022, "sap_thermal_bridges": {"thermal_bridges": [{"length": 4.9, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 3.88, "psi_value": 0.022, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 13.06, "psi_value": 0.0296, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 18.07, "psi_value": 0.076, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 18.07, "psi_value": 0.002, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 8.95, "psi_value": 0.0383, "psi_value_source": 1, "thermal_bridge_type": "E10"}, {"length": 9.12, "psi_value": 0.057, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 10.14, "psi_value": 0.047, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 8.4, "psi_value": 0.1, "psi_value_source": 4, "thermal_bridge_type": "E4"}, {"length": 1.81, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 10.14, "psi_value": 0.0343, "psi_value_source": 1, "thermal_bridge_type": "E18"}, {"length": 8.95, "psi_value": 0.06, "psi_value_source": 1, "thermal_bridge_type": "P1"}, {"length": 8.95, "psi_value": 0, "psi_value_source": 4, "thermal_bridge_type": "P2"}, {"length": 8.95, "psi_value": 0.033, "psi_value_source": 1, "thermal_bridge_type": "P4"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.12, "floor_type": 2, "kappa_value": 160, "storey_height": 2.38, "heat_loss_area": 40.82, "total_floor_area": 40.82}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.69, "heat_loss_area": 0, "total_floor_area": 40.82, "kappa_value_from_below": 9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 184, "currency": "GBP"}, "co2_emissions_current": 0.3, "energy_rating_average": 60, "energy_rating_current": 86, "lighting_cost_current": {"value": 55, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 207, "currency": "GBP"}, "hot_water_cost_current": {"value": 279, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 49, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 87, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 330, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 96, "environmental_impact_rating": 100}], "user_interface_version": "2.26.17", "co2_emissions_potential": 0.0, "energy_rating_potential": 96, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 55, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 207, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 34, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "2.26.17", "energy_consumption_potential": 12, "environmental_impact_current": 97, "current_energy_efficiency_band": "B", "environmental_impact_potential": 100, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 3.3} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/WA53GF/cert-10e5f1e68812.json b/tests/fixtures/epc_prediction/WA53GF/cert-10e5f1e68812.json new file mode 100644 index 00000000..5935461b --- /dev/null +++ b/tests/fixtures/epc_prediction/WA53GF/cert-10e5f1e68812.json @@ -0,0 +1 @@ +{"der": 1.59, "ter": 10.8, "dfee": 33.8, "dper": 21.75, "tfee": 36.5, "tper": 56.31, "uprn": 10097320587, "roofs": [{"description": {"value": "Average thermal transmittance 0.09 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.19 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.12 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": "ND", "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "WA5 3GF", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 2, "created_at": "2026-02-25 15:48:58", "living_area": 18.61, "orientation": 4, "region_code": 19, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_power": 9.3, "shower_wwhrs": 1, "shower_flow_rate": 6, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 901, "hot_water_store_size": 150, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2207, "main_heating_category": 4, "main_heating_fraction": 1, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 107682, "heat_pump_heat_distribution": 45, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.29, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_heat_pump_installed_to_mis": "false", "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "hot_water_store_heat_transfer_area": 3, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Air source heat pump, radiators, electric", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 10, "lighting_outlets": 13, "lighting_efficacy": 75}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.9 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "pv_connection": 2, "address_line_1": "addr-4469789c0a6d", "assessment_date": "2026-02-25", "assessment_type": "SAP", "completion_date": "2026-02-25", "inspection_date": "2026-02-25", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "wet_rooms_count": 4, "air_permeability": 4.86, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 4, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 3, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500776, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 91, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-02-25", "sap_energy_source": {"pv_arrays": [{"pitch": 2, "peak_power": 2.2, "orientation": 2, "overshading": 1}], "electricity_tariff": 1}, "sap_opening_types": [{"name": "Door", "type": 1, "u_value": 1, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "Windows", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.43}, {"name": "Half Glazed Door", "type": 2, "u_value": 1.1, "data_source": 4, "glazing_type": 7, "isargonfilled": "false"}, {"name": "French Door", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.38}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 44.73, "lzc_energy_sources": [9, 11], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 45.849998474121094}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.19, "wall_type": 2, "kappa_value": 60, "total_wall_area": 98.82, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 110, "total_wall_area": 43.97, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 179.99, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Door", "width": 2.14, "height": 1, "location": "Walls (1)", "orientation": 4}, {"name": "Opening 2", "type": "Windows", "width": 5.96, "height": 1, "location": "Walls (1)", "orientation": 4}, {"name": "Opening 5", "type": "Windows", "width": 0.72, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "Opening 6", "type": "Windows", "width": 4.11, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "French Doors", "type": "French Door", "width": 3.8, "height": 1, "location": "Walls (1)", "orientation": 8}], "construction_year": 2022, "sap_thermal_bridges": {"thermal_bridges": [{"length": 9.33, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 8.31, "psi_value": 0.023, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 17.42, "psi_value": 0.0296, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 19.82, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 17.41, "psi_value": 0.002, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 8.95, "psi_value": 0.0383, "psi_value_source": 1, "thermal_bridge_type": "E10"}, {"length": 10.23, "psi_value": 0.057, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 12.83, "psi_value": 0.047, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 8.4, "psi_value": 0.1, "psi_value_source": 4, "thermal_bridge_type": "E4"}, {"length": 1.81, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 10.14, "psi_value": 0.0343, "psi_value_source": 1, "thermal_bridge_type": "E18"}, {"length": 8.33, "psi_value": 0.06, "psi_value_source": 1, "thermal_bridge_type": "P1"}, {"length": 8.95, "psi_value": 0, "psi_value_source": 4, "thermal_bridge_type": "P2"}, {"length": 8.95, "psi_value": 0.033, "psi_value_source": 1, "thermal_bridge_type": "P4"}, {"length": 2.41, "psi_value": 0.32, "psi_value_source": 4, "thermal_bridge_type": "E20"}, {"length": 2.41, "psi_value": 0.025, "psi_value_source": 1, "thermal_bridge_type": "E21"}, {"length": 2.38, "psi_value": -0.091, "psi_value_source": 1, "thermal_bridge_type": "E17"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.12, "floor_type": 2, "kappa_value": 160, "storey_height": 2.38, "heat_loss_area": 44.73, "total_floor_area": 44.73}, {"storey": 0, "u_value": 0.12, "floor_type": 3, "kappa_value": 20, "storey_height": 2.38, "heat_loss_area": 1.12, "total_floor_area": 44.73}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.69, "heat_loss_area": 0, "total_floor_area": 45.85, "kappa_value_from_below": 9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 218, "currency": "GBP"}, "co2_emissions_current": 0.1, "energy_rating_average": 60, "energy_rating_current": 92, "lighting_cost_current": {"value": 62, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 241, "currency": "GBP"}, "hot_water_cost_current": {"value": 286, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 45, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 93, "environmental_impact_rating": 99}], "user_interface_version": "2.26.17", "co2_emissions_potential": 0.1, "energy_rating_potential": 93, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 62, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 213, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 20, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "2.26.17", "energy_consumption_potential": 17, "environmental_impact_current": 99, "current_energy_efficiency_band": "A", "environmental_impact_potential": 99, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 1.4} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/WA53GF/cert-18249db041df.json b/tests/fixtures/epc_prediction/WA53GF/cert-18249db041df.json new file mode 100644 index 00000000..fa973e07 --- /dev/null +++ b/tests/fixtures/epc_prediction/WA53GF/cert-18249db041df.json @@ -0,0 +1 @@ +{"der": 3.43, "ter": 10.95, "dfee": 36.6, "dper": 35.78, "tfee": 37.2, "tper": 57.26, "uprn": 10097320580, "roofs": [{"description": {"value": "Average thermal transmittance 0.13 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.19 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.11 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": "ND", "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "WA5 3GF", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 2, "created_at": "2026-03-19 09:35:19", "living_area": 16.7, "orientation": 7, "region_code": 19, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_power": 9.3, "shower_wwhrs": 1, "shower_flow_rate": 6, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 901, "hot_water_store_size": 210, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2207, "main_heating_category": 4, "main_heating_fraction": 1, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 107682, "heat_pump_heat_distribution": 45, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.55, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_heat_pump_installed_to_mis": "true", "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "hot_water_store_heat_transfer_area": 3, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Air source heat pump, radiators, electric", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 10, "lighting_outlets": 14, "lighting_efficacy": 75}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.7 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-7e3a817ef025", "assessment_date": "2026-03-19", "assessment_type": "SAP", "completion_date": "2026-03-19", "inspection_date": "2026-03-19", "sap_ventilation": {"psv_count": 0, "wall_type": 1, "pressure_test": 1, "wet_rooms_count": 4, "air_permeability": 4.73, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 3, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500776, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 108, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-03-19", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Door", "type": 1, "u_value": 1, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "Windows", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.43}, {"name": "Half Glazed Door", "type": 2, "u_value": 1.1, "data_source": 4, "glazing_type": 7, "isargonfilled": "false"}, {"name": "French Door", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.38}, {"name": "Roof Light", "type": 5, "u_value": 1.3, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 40.44, "lzc_energy_sources": [9], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 19.66}, {"name": "Roof (2)", "u_value": 0.16, "roof_type": 2, "kappa_value": 9, "total_roof_area": 24.85}, {"name": "Roof (3)", "u_value": 0.12, "roof_type": 2, "kappa_value": 9, "total_roof_area": 13.45}, {"name": "Roof (4)", "u_value": 0.16, "roof_type": 2, "kappa_value": 9, "total_roof_area": 13.35}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.19, "wall_type": 2, "kappa_value": 60, "total_wall_area": 99.23, "is_curtain_walling": "false"}, {"name": "Walls (2)", "u_value": 0.23, "wall_type": 2, "kappa_value": 18, "total_wall_area": 15.83, "is_curtain_walling": "false"}, {"name": "Walls (3)", "u_value": 0.12, "wall_type": 2, "kappa_value": 18, "total_wall_area": 14.82, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 110, "total_wall_area": 47.04, "is_curtain_walling": "false"}, {"name": "Party Wall (2)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 15.83, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 193.57, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Door", "width": 2.14, "height": 1, "location": "Walls (1)", "orientation": 7}, {"name": "Opening 2", "type": "Windows", "width": 5.25, "height": 1, "location": "Walls (1)", "orientation": 7}, {"name": "Opening", "type": "Roof Light", "pitch": 40, "width": 1.78, "height": 1, "location": "Roof (2)", "orientation": 7}, {"name": "Opening", "type": "Windows", "width": 1.54, "height": 1, "location": "Walls (1)", "orientation": 1}, {"name": "Opening", "type": "French Door", "width": 3.8, "height": 1, "location": "Walls (1)", "orientation": 3}, {"name": "Opening", "type": "Windows", "width": 1.4, "height": 1, "location": "Walls (1)", "orientation": 3}, {"name": "Opening", "type": "Roof Light", "pitch": 40, "width": 1.78, "height": 1, "location": "Roof (2)", "orientation": 3}], "construction_year": 2022, "sap_thermal_bridges": {"thermal_bridges": [{"length": 6.84, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 5.82, "psi_value": 0.022, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 16.68, "psi_value": 0.0296, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 18.18, "psi_value": 0.076, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 24.39, "psi_value": 0.002, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 6.73, "psi_value": 0.0419, "psi_value_source": 1, "thermal_bridge_type": "E11"}, {"length": 4.51, "psi_value": 0.057, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 11.7, "psi_value": 0.047, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 8.4, "psi_value": 0.1, "psi_value_source": 4, "thermal_bridge_type": "E4"}, {"length": 1.81, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 11.7, "psi_value": 0.0343, "psi_value_source": 1, "thermal_bridge_type": "E18"}, {"length": 9.29, "psi_value": 0.06, "psi_value_source": 1, "thermal_bridge_type": "P1"}, {"length": 9.29, "psi_value": 0, "psi_value_source": 4, "thermal_bridge_type": "P2"}, {"length": 4.51, "psi_value": 0.033, "psi_value_source": 1, "thermal_bridge_type": "P4"}, {"length": 5.74, "psi_value": 0.094, "psi_value_source": 1, "thermal_bridge_type": "E13"}, {"length": 4.81, "psi_value": 0.04, "psi_value_source": 1, "thermal_bridge_type": "P5"}, {"length": 8.72, "psi_value": 0.019, "psi_value_source": 1, "thermal_bridge_type": "R6"}, {"length": 2.72, "psi_value": 0.115, "psi_value_source": 1, "thermal_bridge_type": "R1"}, {"length": 2.72, "psi_value": 0.113, "psi_value_source": 1, "thermal_bridge_type": "R2"}, {"length": 5.56, "psi_value": 0.041, "psi_value_source": 1, "thermal_bridge_type": "R3"}, {"length": 1.27, "psi_value": 0.15, "psi_value_source": 4, "thermal_bridge_type": "E11"}, {"length": 3.85, "psi_value": 0.12, "psi_value_source": 4, "thermal_bridge_type": "R5"}, {"length": 2.94, "psi_value": 0.12, "psi_value_source": 4, "thermal_bridge_type": "R4"}, {"length": 3.69, "psi_value": 0.25, "psi_value_source": 4, "thermal_bridge_type": "E13"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.11, "floor_type": 2, "kappa_value": 160, "storey_height": 2.38, "heat_loss_area": 40.44, "total_floor_area": 40.44}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.69, "heat_loss_area": 0, "total_floor_area": 40.44, "kappa_value_from_below": 9}, {"storey": 2, "u_value": 0, "floor_type": 3, "storey_height": 2.27, "heat_loss_area": 0, "total_floor_area": 26.99}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 291, "currency": "GBP"}, "co2_emissions_current": 0.3, "energy_rating_average": 60, "energy_rating_current": 85, "lighting_cost_current": {"value": 73, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 314, "currency": "GBP"}, "hot_water_cost_current": {"value": 301, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 51, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 343, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 93, "environmental_impact_rating": 99}], "user_interface_version": "2.26.17", "co2_emissions_potential": 0.1, "energy_rating_potential": 93, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 73, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 227, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 34, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "2.26.17", "energy_consumption_potential": 16, "environmental_impact_current": 97, "current_energy_efficiency_band": "B", "environmental_impact_potential": 99, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 3.2} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/WA53GF/cert-1940f1e78ab9.json b/tests/fixtures/epc_prediction/WA53GF/cert-1940f1e78ab9.json new file mode 100644 index 00000000..3f3fe567 --- /dev/null +++ b/tests/fixtures/epc_prediction/WA53GF/cert-1940f1e78ab9.json @@ -0,0 +1 @@ +{"der": 3.66, "ter": 11.55, "dfee": 38.2, "dper": 38.21, "tfee": 40.7, "tper": 60.37, "uprn": 10097320591, "roofs": [{"description": {"value": "Average thermal transmittance 0.09 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.19 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.11 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": "ND", "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "WA5 3GF", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 1, "created_at": "2026-03-13 10:33:03", "living_area": 12.61, "orientation": 3, "region_code": 19, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_power": 9.3, "shower_wwhrs": 1, "shower_flow_rate": 6, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 901, "hot_water_store_size": 210, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2207, "main_heating_category": 4, "main_heating_fraction": 1, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 107682, "heat_pump_heat_distribution": 45, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.5, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_heat_pump_installed_to_mis": "false", "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "hot_water_store_heat_transfer_area": 3, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Air source heat pump, radiators, electric", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 10, "lighting_outlets": 13, "lighting_efficacy": 75}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.9 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-2f79d1bab24d", "assessment_date": "2026-03-13", "assessment_type": "SAP", "completion_date": "2026-03-13", "inspection_date": "2026-03-13", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "wet_rooms_count": 4, "air_permeability": 4.9, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 3, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500776, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 96, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-03-13", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Door", "type": 1, "u_value": 1, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "Windows", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.43}, {"name": "Half Glazed Door", "type": 2, "u_value": 1.1, "data_source": 4, "glazing_type": 7, "isargonfilled": "false"}, {"name": "French Door", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.38}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 47.07, "lzc_energy_sources": [9], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 49.029998779296875}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.19, "wall_type": 2, "kappa_value": 60, "total_wall_area": 146.32, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 136.79, "is_curtain_walling": "false"}, {"name": "Internal Wall (2)", "u_value": 0, "wall_type": 5, "kappa_value": 75, "total_wall_area": 50.12, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Door", "width": 2.14, "height": 1, "location": "Walls (1)", "orientation": 3}, {"name": "Opening 2", "type": "Windows", "width": 5.95, "height": 1, "location": "Walls (1)", "orientation": 3}, {"name": "Opening 5", "type": "Windows", "width": 0.72, "height": 1, "location": "Walls (1)", "orientation": 5}, {"name": "Opening 6", "type": "Windows", "width": 4.11, "height": 1, "location": "Walls (1)", "orientation": 7}, {"name": "French Doors", "type": "French Door", "width": 3.8, "height": 1, "location": "Walls (1)", "orientation": 7}], "construction_year": 2022, "sap_thermal_bridges": {"thermal_bridges": [{"length": 9.32, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 8.31, "psi_value": 0.022, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 17.38, "psi_value": 0.0296, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 28.86, "psi_value": 0.076, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 26.11, "psi_value": 0.002, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 17.92, "psi_value": 0.0383, "psi_value_source": 1, "thermal_bridge_type": "E10"}, {"length": 10.94, "psi_value": 0.057, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 22.66, "psi_value": 0.047, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 8.4, "psi_value": 0.1, "psi_value_source": 4, "thermal_bridge_type": "E4"}, {"length": 2.69, "psi_value": -0.091, "psi_value_source": 1, "thermal_bridge_type": "E17"}, {"length": 2.75, "psi_value": 0.32, "psi_value_source": 4, "thermal_bridge_type": "E20"}, {"length": 2.75, "psi_value": 0.025, "psi_value_source": 1, "thermal_bridge_type": "E21"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.11, "floor_type": 2, "kappa_value": 160, "storey_height": 2.38, "heat_loss_area": 47.07, "total_floor_area": 47.07}, {"storey": 0, "u_value": 0.11, "floor_type": 3, "kappa_value": 20, "storey_height": 2.38, "heat_loss_area": 1.96, "total_floor_area": 47.07}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.69, "heat_loss_area": 0, "total_floor_area": 49.03, "kappa_value_from_below": 9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 270, "currency": "GBP"}, "co2_emissions_current": 0.3, "energy_rating_average": 60, "energy_rating_current": 84, "lighting_cost_current": {"value": 67, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 293, "currency": "GBP"}, "hot_water_cost_current": {"value": 294, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 50, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 339, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 93, "environmental_impact_rating": 99}], "user_interface_version": "2.26.17", "co2_emissions_potential": 0.1, "energy_rating_potential": 93, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 67, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 221, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 36, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "2.26.17", "energy_consumption_potential": 16, "environmental_impact_current": 97, "current_energy_efficiency_band": "B", "environmental_impact_potential": 99, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 3.4} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/WA53GF/cert-2cff3dfaefbd.json b/tests/fixtures/epc_prediction/WA53GF/cert-2cff3dfaefbd.json new file mode 100644 index 00000000..41d9391d --- /dev/null +++ b/tests/fixtures/epc_prediction/WA53GF/cert-2cff3dfaefbd.json @@ -0,0 +1 @@ +{"der": 3.43, "ter": 10.83, "dfee": 36.2, "dper": 35.78, "tfee": 36.7, "tper": 56.64, "uprn": 10097320581, "roofs": [{"description": {"value": "Average thermal transmittance 0.13 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.19 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.11 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": "ND", "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "WA5 3GF", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 2, "created_at": "2026-04-20 15:21:40", "living_area": 16.7, "orientation": 7, "region_code": 19, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_power": 9.3, "shower_wwhrs": 1, "shower_flow_rate": 6, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 901, "hot_water_store_size": 210, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2207, "main_heating_category": 4, "main_heating_fraction": 1, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 107682, "heat_pump_heat_distribution": 45, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.55, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_heat_pump_installed_to_mis": "true", "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "hot_water_store_heat_transfer_area": 3, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Air source heat pump, radiators, electric", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 10, "lighting_outlets": 14, "lighting_efficacy": 75}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.8 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-1ae92722f53d", "assessment_date": "2026-04-20", "assessment_type": "SAP", "completion_date": "2026-04-20", "inspection_date": "2026-04-20", "sap_ventilation": {"psv_count": 0, "wall_type": 1, "pressure_test": 1, "wet_rooms_count": 4, "air_permeability": 4.81, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 4, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 3, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500776, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 108, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-04-20", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Door", "type": 1, "u_value": 1, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "Windows", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.43}, {"name": "Half Glazed Door", "type": 2, "u_value": 1.1, "data_source": 4, "glazing_type": 7, "isargonfilled": "false"}, {"name": "French Door", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.38}, {"name": "Roof Light", "type": 5, "u_value": 1.3, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 40.44, "lzc_energy_sources": [9], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 19.66}, {"name": "Roof (2)", "u_value": 0.16, "roof_type": 2, "kappa_value": 9, "total_roof_area": 24.85}, {"name": "Roof (3)", "u_value": 0.12, "roof_type": 2, "kappa_value": 9, "total_roof_area": 13.45}, {"name": "Roof (4)", "u_value": 0.16, "roof_type": 2, "kappa_value": 9, "total_roof_area": 13.35}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.19, "wall_type": 2, "kappa_value": 60, "total_wall_area": 99.23, "is_curtain_walling": "false"}, {"name": "Walls (2)", "u_value": 0.23, "wall_type": 2, "kappa_value": 18, "total_wall_area": 15.83, "is_curtain_walling": "false"}, {"name": "Walls (3)", "u_value": 0.12, "wall_type": 2, "kappa_value": 18, "total_wall_area": 14.82, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 110, "total_wall_area": 47.04, "is_curtain_walling": "false"}, {"name": "Party Wall (2)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 15.83, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 193.57, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Door", "width": 2.14, "height": 1, "location": "Walls (1)", "orientation": 7}, {"name": "Opening 2", "type": "Windows", "width": 5.25, "height": 1, "location": "Walls (1)", "orientation": 7}, {"name": "Opening", "type": "Roof Light", "pitch": 40, "width": 1.78, "height": 1, "location": "Roof (2)", "orientation": 7}, {"name": "Opening", "type": "Windows", "width": 1.54, "height": 1, "location": "Walls (1)", "orientation": 1}, {"name": "Opening", "type": "French Door", "width": 3.8, "height": 1, "location": "Walls (1)", "orientation": 3}, {"name": "Opening", "type": "Windows", "width": 1.4, "height": 1, "location": "Walls (1)", "orientation": 3}, {"name": "Opening", "type": "Roof Light", "pitch": 40, "width": 1.78, "height": 1, "location": "Roof (2)", "orientation": 3}], "construction_year": 2022, "sap_thermal_bridges": {"thermal_bridges": [{"length": 6.84, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 5.82, "psi_value": 0.022, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 16.68, "psi_value": 0.0296, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 18.18, "psi_value": 0.076, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 24.39, "psi_value": 0.002, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 6.73, "psi_value": 0.0419, "psi_value_source": 1, "thermal_bridge_type": "E11"}, {"length": 4.51, "psi_value": 0.057, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 11.7, "psi_value": 0.047, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 8.4, "psi_value": 0.1, "psi_value_source": 4, "thermal_bridge_type": "E4"}, {"length": 1.81, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 11.7, "psi_value": 0.0343, "psi_value_source": 1, "thermal_bridge_type": "E18"}, {"length": 9.29, "psi_value": 0.06, "psi_value_source": 1, "thermal_bridge_type": "P1"}, {"length": 9.29, "psi_value": 0, "psi_value_source": 4, "thermal_bridge_type": "P2"}, {"length": 4.51, "psi_value": 0.033, "psi_value_source": 1, "thermal_bridge_type": "P4"}, {"length": 5.74, "psi_value": 0.094, "psi_value_source": 1, "thermal_bridge_type": "E13"}, {"length": 4.81, "psi_value": 0.04, "psi_value_source": 1, "thermal_bridge_type": "P5"}, {"length": 8.72, "psi_value": 0.019, "psi_value_source": 1, "thermal_bridge_type": "R6"}, {"length": 2.72, "psi_value": 0.115, "psi_value_source": 1, "thermal_bridge_type": "R1"}, {"length": 2.72, "psi_value": 0.113, "psi_value_source": 1, "thermal_bridge_type": "R2"}, {"length": 5.56, "psi_value": 0.041, "psi_value_source": 1, "thermal_bridge_type": "R3"}, {"length": 1.27, "psi_value": 0.15, "psi_value_source": 4, "thermal_bridge_type": "E11"}, {"length": 3.85, "psi_value": 0.12, "psi_value_source": 4, "thermal_bridge_type": "R5"}, {"length": 2.94, "psi_value": 0.12, "psi_value_source": 4, "thermal_bridge_type": "R4"}, {"length": 3.69, "psi_value": 0.25, "psi_value_source": 4, "thermal_bridge_type": "E13"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.11, "floor_type": 2, "kappa_value": 160, "storey_height": 2.38, "heat_loss_area": 40.44, "total_floor_area": 40.44}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.69, "heat_loss_area": 0, "total_floor_area": 40.44, "kappa_value_from_below": 9}, {"storey": 2, "u_value": 0, "floor_type": 3, "storey_height": 2.27, "heat_loss_area": 0, "total_floor_area": 26.99}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 283, "currency": "GBP"}, "co2_emissions_current": 0.3, "energy_rating_average": 60, "energy_rating_current": 85, "lighting_cost_current": {"value": 71, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 305, "currency": "GBP"}, "hot_water_cost_current": {"value": 293, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 49, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 336, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 93, "environmental_impact_rating": 99}], "user_interface_version": "3.1.55", "co2_emissions_potential": 0.1, "energy_rating_potential": 93, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 71, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 221, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 34, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.55", "energy_consumption_potential": 16, "environmental_impact_current": 97, "current_energy_efficiency_band": "B", "environmental_impact_potential": 99, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 3.2} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/WA53GF/cert-35933f8fabe9.json b/tests/fixtures/epc_prediction/WA53GF/cert-35933f8fabe9.json new file mode 100644 index 00000000..fa0849a0 --- /dev/null +++ b/tests/fixtures/epc_prediction/WA53GF/cert-35933f8fabe9.json @@ -0,0 +1 @@ +{"der": 3.36, "ter": 10.67, "dfee": 38.4, "dper": 35.03, "tfee": 41.1, "tper": 55.87, "uprn": 10097320614, "roofs": [{"description": {"value": "Average thermal transmittance 0.09 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.19 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.11 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": "ND", "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "WA5 3GF", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 1, "created_at": "2026-03-25 11:46:32", "living_area": 18.33, "orientation": 8, "region_code": 19, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_power": 9.3, "shower_wwhrs": 1, "shower_flow_rate": 6, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 901, "hot_water_store_size": 250, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2207, "main_heating_category": 4, "main_heating_fraction": 1, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 107698, "heat_pump_heat_distribution": 45, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.55, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_heat_pump_installed_to_mis": "false", "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "hot_water_store_heat_transfer_area": 3, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Air source heat pump, radiators, electric", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 10, "lighting_outlets": 15, "lighting_efficacy": 75}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.6 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-37fa84df596e", "assessment_date": "2026-03-25", "assessment_type": "SAP", "completion_date": "2026-03-25", "inspection_date": "2026-03-25", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "wet_rooms_count": 4, "air_permeability": 4.59, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 3, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500776, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 120, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-03-25", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Door", "type": 1, "u_value": 1, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "Windows", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.43}, {"name": "Half Glazed Door", "type": 2, "u_value": 1.1, "data_source": 4, "glazing_type": 7, "isargonfilled": "false"}, {"name": "French Door", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.38}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 59.24, "lzc_energy_sources": [9], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 60.58000183105469}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.19, "wall_type": 2, "kappa_value": 60, "total_wall_area": 169.55, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 160.26, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Door", "width": 2.14, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "Opening 2", "type": "Windows", "width": 6.85, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "Opening 5", "type": "Windows", "width": 1.54, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "Opening 6", "type": "Windows", "width": 4.11, "height": 1, "location": "Walls (1)", "orientation": 4}, {"name": "French Doors", "type": "French Door", "width": 3.8, "height": 1, "location": "Walls (1)", "orientation": 4}], "construction_year": 2022, "sap_thermal_bridges": {"thermal_bridges": [{"length": 10.58, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 9.56, "psi_value": 0.022, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 21.02, "psi_value": 0.0296, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 31.99, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 29.85, "psi_value": 0.002, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 18.78, "psi_value": 0.0383, "psi_value_source": 1, "thermal_bridge_type": "E10"}, {"length": 13.21, "psi_value": 0.057, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 29.11, "psi_value": 0.047, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 8.4, "psi_value": 0.1, "psi_value_source": 4, "thermal_bridge_type": "E4"}, {"length": 7.91, "psi_value": -0.091, "psi_value_source": 1, "thermal_bridge_type": "E17"}, {"length": 2.41, "psi_value": 0.32, "psi_value_source": 4, "thermal_bridge_type": "E20"}, {"length": 2.41, "psi_value": 0.025, "psi_value_source": 1, "thermal_bridge_type": "E21"}, {"length": 1.81, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.11, "floor_type": 2, "kappa_value": 160, "storey_height": 2.61, "heat_loss_area": 59.24, "total_floor_area": 59.24}, {"storey": 0, "u_value": 0.11, "floor_type": 3, "kappa_value": 20, "storey_height": 2.61, "heat_loss_area": 1.34, "total_floor_area": 59.24}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.69, "heat_loss_area": 0, "total_floor_area": 60.58, "kappa_value_from_below": 9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 340, "currency": "GBP"}, "co2_emissions_current": 0.4, "energy_rating_average": 60, "energy_rating_current": 85, "lighting_cost_current": {"value": 80, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 363, "currency": "GBP"}, "hot_water_cost_current": {"value": 304, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 50, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 348, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 92, "environmental_impact_rating": 99}], "user_interface_version": "3.1.55", "co2_emissions_potential": 0.1, "energy_rating_potential": 92, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 80, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 230, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 33, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.55", "energy_consumption_potential": 17, "environmental_impact_current": 97, "current_energy_efficiency_band": "B", "environmental_impact_potential": 99, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 3.1} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/WA53GF/cert-3619d642221c.json b/tests/fixtures/epc_prediction/WA53GF/cert-3619d642221c.json new file mode 100644 index 00000000..28b03f8a --- /dev/null +++ b/tests/fixtures/epc_prediction/WA53GF/cert-3619d642221c.json @@ -0,0 +1 @@ +{"der": 3.42, "ter": 10.83, "dfee": 36.1, "dper": 35.68, "tfee": 36.7, "tper": 56.64, "uprn": 10097320583, "roofs": [{"description": {"value": "Average thermal transmittance 0.13 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.19 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.11 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": "ND", "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "WA5 3GF", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 2, "created_at": "2025-12-10 14:52:24", "living_area": 16.7, "orientation": 7, "region_code": 19, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_power": 9.3, "shower_wwhrs": 1, "shower_flow_rate": 6, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 901, "hot_water_store_size": 210, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2207, "main_heating_category": 4, "main_heating_fraction": 1, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 107682, "heat_pump_heat_distribution": 45, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.5, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_heat_pump_installed_to_mis": "true", "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "hot_water_store_heat_transfer_area": 3, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Air source heat pump, radiators, electric", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 10, "lighting_outlets": 14, "lighting_efficacy": 75}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 5.0 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-24e128a9b9e0", "assessment_date": "2025-12-10", "assessment_type": "SAP", "completion_date": "2025-12-10", "inspection_date": "2025-12-10", "sap_ventilation": {"psv_count": 0, "wall_type": 1, "pressure_test": 1, "wet_rooms_count": 4, "air_permeability": 4.95, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 4, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 3, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500776, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 108, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2025-12-10", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Door", "type": 1, "u_value": 1, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "Windows", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.43}, {"name": "Half Glazed Door", "type": 2, "u_value": 1.1, "data_source": 4, "glazing_type": 7, "isargonfilled": "false"}, {"name": "French Door", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.38}, {"name": "Roof Light", "type": 5, "u_value": 1.3, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 40.44, "lzc_energy_sources": [9], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 19.66}, {"name": "Roof (2)", "u_value": 0.16, "roof_type": 2, "kappa_value": 9, "total_roof_area": 24.85}, {"name": "Roof (3)", "u_value": 0.12, "roof_type": 2, "kappa_value": 9, "total_roof_area": 13.45}, {"name": "Roof (4)", "u_value": 0.16, "roof_type": 2, "kappa_value": 9, "total_roof_area": 13.35}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.19, "wall_type": 2, "kappa_value": 60, "total_wall_area": 99.23, "is_curtain_walling": "false"}, {"name": "Walls (2)", "u_value": 0.23, "wall_type": 2, "kappa_value": 18, "total_wall_area": 15.83, "is_curtain_walling": "false"}, {"name": "Walls (3)", "u_value": 0.12, "wall_type": 2, "kappa_value": 18, "total_wall_area": 14.82, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 110, "total_wall_area": 47.04, "is_curtain_walling": "false"}, {"name": "Party Wall (2)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 15.83, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 193.57, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Door", "width": 2.14, "height": 1, "location": "Walls (1)", "orientation": 7}, {"name": "Opening 2", "type": "Windows", "width": 5.25, "height": 1, "location": "Walls (1)", "orientation": 7}, {"name": "Opening", "type": "Roof Light", "pitch": 40, "width": 1.78, "height": 1, "location": "Roof (2)", "orientation": 7}, {"name": "Opening", "type": "Windows", "width": 1.54, "height": 1, "location": "Walls (1)", "orientation": 1}, {"name": "Opening", "type": "French Door", "width": 3.8, "height": 1, "location": "Walls (1)", "orientation": 3}, {"name": "Opening", "type": "Windows", "width": 1.4, "height": 1, "location": "Walls (1)", "orientation": 3}, {"name": "Opening", "type": "Roof Light", "pitch": 40, "width": 1.78, "height": 1, "location": "Roof (2)", "orientation": 3}], "construction_year": 2022, "sap_thermal_bridges": {"thermal_bridges": [{"length": 6.84, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 5.82, "psi_value": 0.022, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 16.68, "psi_value": 0.0296, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 18.18, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 24.39, "psi_value": 0.002, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 6.73, "psi_value": 0.0419, "psi_value_source": 1, "thermal_bridge_type": "E11"}, {"length": 4.51, "psi_value": 0.057, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 11.7, "psi_value": 0.047, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 8.4, "psi_value": 0.1, "psi_value_source": 4, "thermal_bridge_type": "E4"}, {"length": 1.81, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 11.7, "psi_value": 0.0343, "psi_value_source": 1, "thermal_bridge_type": "E18"}, {"length": 9.29, "psi_value": 0.06, "psi_value_source": 1, "thermal_bridge_type": "P1"}, {"length": 9.29, "psi_value": 0, "psi_value_source": 4, "thermal_bridge_type": "P2"}, {"length": 4.51, "psi_value": 0.033, "psi_value_source": 1, "thermal_bridge_type": "P4"}, {"length": 5.74, "psi_value": 0.094, "psi_value_source": 1, "thermal_bridge_type": "E13"}, {"length": 4.81, "psi_value": 0.04, "psi_value_source": 1, "thermal_bridge_type": "P5"}, {"length": 8.72, "psi_value": 0.019, "psi_value_source": 1, "thermal_bridge_type": "R6"}, {"length": 2.72, "psi_value": 0.115, "psi_value_source": 1, "thermal_bridge_type": "R1"}, {"length": 2.72, "psi_value": 0.113, "psi_value_source": 1, "thermal_bridge_type": "R2"}, {"length": 5.56, "psi_value": 0.041, "psi_value_source": 1, "thermal_bridge_type": "R3"}, {"length": 1.27, "psi_value": 0.15, "psi_value_source": 4, "thermal_bridge_type": "E11"}, {"length": 3.85, "psi_value": 0.12, "psi_value_source": 4, "thermal_bridge_type": "R5"}, {"length": 2.94, "psi_value": 0.12, "psi_value_source": 4, "thermal_bridge_type": "R4"}, {"length": 3.69, "psi_value": 0.25, "psi_value_source": 4, "thermal_bridge_type": "E13"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.11, "floor_type": 2, "kappa_value": 160, "storey_height": 2.38, "heat_loss_area": 40.44, "total_floor_area": 40.44}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.69, "heat_loss_area": 0, "total_floor_area": 40.44, "kappa_value_from_below": 9}, {"storey": 2, "u_value": 0, "floor_type": 3, "storey_height": 2.27, "heat_loss_area": 0, "total_floor_area": 26.99}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 290, "currency": "GBP"}, "co2_emissions_current": 0.3, "energy_rating_average": 60, "energy_rating_current": 85, "lighting_cost_current": {"value": 73, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 313, "currency": "GBP"}, "hot_water_cost_current": {"value": 300, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 50, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 343, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 93, "environmental_impact_rating": 99}], "user_interface_version": "2.25.1", "co2_emissions_potential": 0.1, "energy_rating_potential": 93, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 73, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 226, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 33, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "2.25.1", "energy_consumption_potential": 16, "environmental_impact_current": 97, "current_energy_efficiency_band": "B", "environmental_impact_potential": 99, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 3.2} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/WA53GF/cert-3a7004baf858.json b/tests/fixtures/epc_prediction/WA53GF/cert-3a7004baf858.json new file mode 100644 index 00000000..db47ffac --- /dev/null +++ b/tests/fixtures/epc_prediction/WA53GF/cert-3a7004baf858.json @@ -0,0 +1 @@ +{"der": 3.8, "ter": 12.63, "dfee": 42.9, "dper": 39.6, "tfee": 45.8, "tper": 66.26, "uprn": 10097320604, "roofs": [{"description": {"value": "Average thermal transmittance 0.09 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.19 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.11 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": "ND", "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "WA5 3GF", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 1, "created_at": "2026-05-14 10:03:51", "living_area": 12.81, "orientation": 2, "region_code": 19, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_power": 9.3, "shower_wwhrs": 1, "shower_flow_rate": 6, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 901, "hot_water_store_size": 210, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2207, "main_heating_category": 4, "main_heating_fraction": 1, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 107682, "heat_pump_heat_distribution": 45, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.55, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_heat_pump_installed_to_mis": "false", "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "hot_water_store_heat_transfer_area": 3, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Air source heat pump, radiators, electric", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 10, "lighting_outlets": 13, "lighting_efficacy": 75}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.8 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-6adfa2eb4d3d", "assessment_date": "2026-05-14", "assessment_type": "SAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "wet_rooms_count": 4, "air_permeability": 4.82, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 2, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 3, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500776, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 106, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-14", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Door", "type": 1, "u_value": 1, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "Windows", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.41}, {"name": "Half Glazed Door", "type": 2, "u_value": 1.1, "data_source": 4, "glazing_type": 7, "isargonfilled": "false"}, {"name": "French Door", "type": 4, "u_value": 1.4, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.37}, {"name": "Roof Window", "type": 5, "u_value": 1.3, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 44.82, "lzc_energy_sources": [9], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 60.85}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.19, "wall_type": 2, "kappa_value": 60, "total_wall_area": 167.44, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 168.14, "is_curtain_walling": "false"}, {"name": "Internal Wall (2)", "u_value": 0, "wall_type": 5, "kappa_value": 75, "total_wall_area": 23.61, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Door", "width": 2.14, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "Opening 2", "type": "Windows", "width": 7.68, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "Opening 5", "type": "Windows", "width": 0.72, "height": 1, "location": "Walls (1)", "orientation": 4}, {"name": "Opening 6", "type": "Windows", "width": 2.84, "height": 1, "location": "Walls (1)", "orientation": 6}, {"name": "French Doors", "type": "French Door", "width": 3.8, "height": 1, "location": "Walls (1)", "orientation": 6}, {"name": "Opening", "type": "Half Glazed Door", "width": 2.14, "height": 1, "location": "Walls (1)", "orientation": 8}], "construction_year": 2022, "sap_thermal_bridges": {"thermal_bridges": [{"length": 10.13, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 8.09, "psi_value": 0.022, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 18.3, "psi_value": 0.0296, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 33.09, "psi_value": 0.076, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 22.91, "psi_value": 0.002, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 17.88, "psi_value": 0.057, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 25.3, "psi_value": 0.047, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 12.6, "psi_value": 0.1, "psi_value_source": 4, "thermal_bridge_type": "E4"}, {"length": 1.81, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 5.06, "psi_value": -0.088, "psi_value_source": 1, "thermal_bridge_type": "E17"}, {"length": 8.47, "psi_value": 0.32, "psi_value_source": 4, "thermal_bridge_type": "E20"}, {"length": 8.47, "psi_value": 0.0251, "psi_value_source": 1, "thermal_bridge_type": "E21"}, {"length": 15.2, "psi_value": 0.0383, "psi_value_source": 1, "thermal_bridge_type": "E10"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.11, "floor_type": 2, "kappa_value": 160, "storey_height": 2.66, "heat_loss_area": 44.82, "total_floor_area": 44.82}, {"storey": 1, "u_value": 0.11, "floor_type": 3, "kappa_value": 18, "storey_height": 2.4, "heat_loss_area": 16.03, "total_floor_area": 60.85, "kappa_value_from_below": 9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 335, "currency": "GBP"}, "co2_emissions_current": 0.4, "energy_rating_average": 60, "energy_rating_current": 83, "lighting_cost_current": {"value": 73, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 357, "currency": "GBP"}, "hot_water_cost_current": {"value": 292, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 49, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 84, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 336, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 92, "environmental_impact_rating": 99}], "user_interface_version": "3.1.57", "co2_emissions_potential": 0.1, "energy_rating_potential": 92, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 73, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 220, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 37, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 19, "environmental_impact_current": 97, "current_energy_efficiency_band": "B", "environmental_impact_potential": 99, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 3.5} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/WA53GF/cert-43145c5e02b8.json b/tests/fixtures/epc_prediction/WA53GF/cert-43145c5e02b8.json new file mode 100644 index 00000000..20f53277 --- /dev/null +++ b/tests/fixtures/epc_prediction/WA53GF/cert-43145c5e02b8.json @@ -0,0 +1 @@ +{"der": 3.04, "ter": 10.02, "dfee": 41.6, "dper": 31.51, "tfee": 42.7, "tper": 52.64, "uprn": 10097320590, "roofs": [{"description": {"value": "Average thermal transmittance 0.11 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.19 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.11 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": "ND", "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "WA5 3GF", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 1, "created_at": "2026-05-14 13:33:53", "living_area": 16.78, "orientation": 3, "region_code": 19, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_power": 9.3, "shower_wwhrs": 1, "shower_flow_rate": 6, "shower_outlet_type": 3}, {"shower_power": 9.3, "shower_wwhrs": 1, "shower_flow_rate": 6, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 901, "hot_water_store_size": 300, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2207, "main_heating_category": 4, "main_heating_fraction": 1, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 107714, "heat_pump_heat_distribution": 45, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 2.29, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_heat_pump_installed_to_mis": "false", "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "hot_water_store_heat_transfer_area": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Air source heat pump, radiators, electric", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 10, "lighting_outlets": 13, "lighting_efficacy": 75}, {"lighting_power": 5, "lighting_outlets": 33, "lighting_efficacy": 96}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.8 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-d74c9c904a23", "assessment_date": "2026-05-14", "assessment_type": "SAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "sap_ventilation": {"psv_count": 0, "wall_type": 1, "pressure_test": 1, "wet_rooms_count": 5, "air_permeability": 4.79, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 2, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 4, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500776, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 191, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-14", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Door", "type": 1, "u_value": 1, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "Windows", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.41}, {"name": "Half Glazed Door", "type": 2, "u_value": 1.1, "data_source": 4, "glazing_type": 7, "isargonfilled": "false"}, {"name": "French Door", "type": 4, "u_value": 1.4, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.37}, {"name": "Roof Window", "type": 5, "u_value": 1.3, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 72.66, "lzc_energy_sources": [9], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 37.3}, {"name": "Roof (2)", "u_value": 0.16, "roof_type": 2, "kappa_value": 9, "total_roof_area": 17.12}, {"name": "Roof (3)", "u_value": 0.12, "roof_type": 2, "kappa_value": 9, "total_roof_area": 21.96}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.19, "wall_type": 2, "kappa_value": 60, "total_wall_area": 193.42, "is_curtain_walling": "false"}, {"name": "Walls (2)", "u_value": 0.23, "wall_type": 2, "kappa_value": 18, "total_wall_area": 40.07, "is_curtain_walling": "false"}, {"name": "Walls (3)", "u_value": 0.12, "wall_type": 2, "kappa_value": 18, "total_wall_area": 41.04, "is_curtain_walling": "false"}, {"name": "Walls (4)", "u_value": 0.23, "wall_type": 2, "kappa_value": 110, "total_wall_area": 21.38, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 200.6, "is_curtain_walling": "false"}, {"name": "Internal Wall (2)", "u_value": 0, "wall_type": 5, "kappa_value": 75, "total_wall_area": 120.91, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Door", "width": 2.14, "height": 1, "location": "Walls (1)", "orientation": 3}, {"name": "Opening 2", "type": "Windows", "width": 10.11, "height": 1, "location": "Walls (1)", "orientation": 3}, {"name": "Opening", "type": "Windows", "width": 2.64, "height": 1, "location": "Walls (2)", "orientation": 3}, {"name": "Opening", "type": "Windows", "width": 1.08, "height": 1, "location": "Walls (2)", "orientation": 5}, {"name": "Opening", "type": "French Door", "width": 3.8, "height": 1, "location": "Walls (1)", "orientation": 7}, {"name": "Opening", "type": "Windows", "width": 6.02, "height": 1, "location": "Walls (1)", "orientation": 7}, {"name": "Opening", "type": "Roof Window", "pitch": 45, "width": 0.87, "height": 1, "location": "Roof (2)", "orientation": 7}], "construction_year": 2022, "sap_thermal_bridges": {"thermal_bridges": [{"length": 15.77, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 14.3, "psi_value": 0.022, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 17.1, "psi_value": 0.0296, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 35.17, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 37.99, "psi_value": 0.002, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 12.16, "psi_value": 0.068, "psi_value_source": 1, "thermal_bridge_type": "E11"}, {"length": 8.38, "psi_value": 0.057, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 32, "psi_value": 0.047, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 8.4, "psi_value": 0.1, "psi_value_source": 4, "thermal_bridge_type": "E4"}, {"length": 1.81, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 10.48, "psi_value": 0.094, "psi_value_source": 1, "thermal_bridge_type": "E13"}, {"length": 0.78, "psi_value": 0.115, "psi_value_source": 1, "thermal_bridge_type": "R1"}, {"length": 0.78, "psi_value": 0.113, "psi_value_source": 1, "thermal_bridge_type": "R2"}, {"length": 2.22, "psi_value": 0.041, "psi_value_source": 1, "thermal_bridge_type": "R3"}, {"length": 2.18, "psi_value": 0.057, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 6.36, "psi_value": 0.094, "psi_value_source": 1, "thermal_bridge_type": "E13"}, {"length": 3.08, "psi_value": 0.18, "psi_value_source": 4, "thermal_bridge_type": "E16"}, {"length": 17.5, "psi_value": 0.019, "psi_value_source": 1, "thermal_bridge_type": "R6"}, {"length": 1.56, "psi_value": 0.068, "psi_value_source": 1, "thermal_bridge_type": "E11"}, {"length": 10.6, "psi_value": -0.091, "psi_value_source": 1, "thermal_bridge_type": "E17"}, {"length": 3.07, "psi_value": 0, "psi_value_source": 4, "thermal_bridge_type": "E17"}, {"length": 7.51, "psi_value": 0.32, "psi_value_source": 4, "thermal_bridge_type": "E20"}, {"length": 7.51, "psi_value": 0.0254, "psi_value_source": 1, "thermal_bridge_type": "E21"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.11, "floor_type": 2, "kappa_value": 160, "storey_height": 2.61, "heat_loss_area": 63.53, "total_floor_area": 63.53}, {"storey": 0, "u_value": 0.11, "floor_type": 3, "kappa_value": 20, "storey_height": 2.61, "heat_loss_area": 9.13, "total_floor_area": 63.53}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.69, "heat_loss_area": 0, "total_floor_area": 74.65, "kappa_value_from_below": 9}, {"storey": 2, "u_value": 0, "floor_type": 3, "storey_height": 2.16, "heat_loss_area": 0, "total_floor_area": 52.69}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 597, "currency": "GBP"}, "co2_emissions_current": 0.5, "energy_rating_average": 60, "energy_rating_current": 85, "lighting_cost_current": {"value": 90, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 597, "currency": "GBP"}, "hot_water_cost_current": {"value": 318, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 309, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 90, "environmental_impact_rating": 98}], "user_interface_version": "3.1.57", "co2_emissions_potential": 0.3, "energy_rating_potential": 90, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 90, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 318, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 30, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 20, "environmental_impact_current": 97, "current_energy_efficiency_band": "B", "environmental_impact_potential": 98, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "B", "co2_emissions_current_per_floor_area": 2.9} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/WA53GF/cert-4e0af0241416.json b/tests/fixtures/epc_prediction/WA53GF/cert-4e0af0241416.json new file mode 100644 index 00000000..14728de3 --- /dev/null +++ b/tests/fixtures/epc_prediction/WA53GF/cert-4e0af0241416.json @@ -0,0 +1 @@ +{"der": 3.42, "ter": 10.83, "dfee": 36.2, "dper": 35.74, "tfee": 36.7, "tper": 56.64, "uprn": 10097320582, "roofs": [{"description": {"value": "Average thermal transmittance 0.13 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.19 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.11 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": "ND", "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "WA5 3GF", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 2, "created_at": "2026-02-05 10:49:34", "living_area": 16.7, "orientation": 7, "region_code": 19, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_power": 9.3, "shower_wwhrs": 1, "shower_flow_rate": 6, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 901, "hot_water_store_size": 210, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2207, "main_heating_category": 4, "main_heating_fraction": 1, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 107682, "heat_pump_heat_distribution": 45, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.5, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_heat_pump_installed_to_mis": "true", "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "hot_water_store_heat_transfer_area": 3, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Air source heat pump, radiators, electric", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 10, "lighting_outlets": 14, "lighting_efficacy": 75}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.9 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-7fe118ed5582", "assessment_date": "2026-02-05", "assessment_type": "SAP", "completion_date": "2026-02-05", "inspection_date": "2026-02-05", "sap_ventilation": {"psv_count": 0, "wall_type": 1, "pressure_test": 1, "wet_rooms_count": 4, "air_permeability": 4.89, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 4, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 3, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500776, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 108, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-02-05", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Door", "type": 1, "u_value": 1, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "Windows", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.43}, {"name": "Half Glazed Door", "type": 2, "u_value": 1.1, "data_source": 4, "glazing_type": 7, "isargonfilled": "false"}, {"name": "French Door", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.38}, {"name": "Roof Light", "type": 5, "u_value": 1.3, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 40.44, "lzc_energy_sources": [9], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 19.66}, {"name": "Roof (2)", "u_value": 0.16, "roof_type": 2, "kappa_value": 9, "total_roof_area": 24.85}, {"name": "Roof (3)", "u_value": 0.12, "roof_type": 2, "kappa_value": 9, "total_roof_area": 13.45}, {"name": "Roof (4)", "u_value": 0.16, "roof_type": 2, "kappa_value": 9, "total_roof_area": 13.35}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.19, "wall_type": 2, "kappa_value": 60, "total_wall_area": 99.23, "is_curtain_walling": "false"}, {"name": "Walls (2)", "u_value": 0.23, "wall_type": 2, "kappa_value": 18, "total_wall_area": 15.83, "is_curtain_walling": "false"}, {"name": "Walls (3)", "u_value": 0.12, "wall_type": 2, "kappa_value": 18, "total_wall_area": 14.82, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 110, "total_wall_area": 47.04, "is_curtain_walling": "false"}, {"name": "Party Wall (2)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 15.83, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 193.57, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Door", "width": 2.14, "height": 1, "location": "Walls (1)", "orientation": 7}, {"name": "Opening 2", "type": "Windows", "width": 5.25, "height": 1, "location": "Walls (1)", "orientation": 7}, {"name": "Opening", "type": "Roof Light", "pitch": 40, "width": 1.78, "height": 1, "location": "Roof (2)", "orientation": 7}, {"name": "Opening", "type": "Windows", "width": 1.54, "height": 1, "location": "Walls (1)", "orientation": 1}, {"name": "Opening", "type": "French Door", "width": 3.8, "height": 1, "location": "Walls (1)", "orientation": 3}, {"name": "Opening", "type": "Windows", "width": 1.4, "height": 1, "location": "Walls (1)", "orientation": 3}, {"name": "Opening", "type": "Roof Light", "pitch": 40, "width": 1.78, "height": 1, "location": "Roof (2)", "orientation": 3}], "construction_year": 2022, "sap_thermal_bridges": {"thermal_bridges": [{"length": 6.84, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 5.82, "psi_value": 0.022, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 16.68, "psi_value": 0.0296, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 18.18, "psi_value": 0.076, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 24.39, "psi_value": 0.002, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 6.73, "psi_value": 0.0419, "psi_value_source": 1, "thermal_bridge_type": "E11"}, {"length": 4.51, "psi_value": 0.057, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 11.7, "psi_value": 0.047, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 8.4, "psi_value": 0.1, "psi_value_source": 4, "thermal_bridge_type": "E4"}, {"length": 1.81, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 11.7, "psi_value": 0.0343, "psi_value_source": 1, "thermal_bridge_type": "E18"}, {"length": 9.29, "psi_value": 0.06, "psi_value_source": 1, "thermal_bridge_type": "P1"}, {"length": 9.29, "psi_value": 0, "psi_value_source": 4, "thermal_bridge_type": "P2"}, {"length": 4.51, "psi_value": 0.033, "psi_value_source": 1, "thermal_bridge_type": "P4"}, {"length": 5.74, "psi_value": 0.094, "psi_value_source": 1, "thermal_bridge_type": "E13"}, {"length": 4.81, "psi_value": 0.04, "psi_value_source": 1, "thermal_bridge_type": "P5"}, {"length": 8.72, "psi_value": 0.019, "psi_value_source": 1, "thermal_bridge_type": "R6"}, {"length": 2.72, "psi_value": 0.115, "psi_value_source": 1, "thermal_bridge_type": "R1"}, {"length": 2.72, "psi_value": 0.113, "psi_value_source": 1, "thermal_bridge_type": "R2"}, {"length": 5.56, "psi_value": 0.041, "psi_value_source": 1, "thermal_bridge_type": "R3"}, {"length": 1.27, "psi_value": 0.15, "psi_value_source": 4, "thermal_bridge_type": "E11"}, {"length": 3.85, "psi_value": 0.12, "psi_value_source": 4, "thermal_bridge_type": "R5"}, {"length": 2.94, "psi_value": 0.12, "psi_value_source": 4, "thermal_bridge_type": "R4"}, {"length": 3.69, "psi_value": 0.25, "psi_value_source": 4, "thermal_bridge_type": "E13"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.11, "floor_type": 2, "kappa_value": 160, "storey_height": 2.38, "heat_loss_area": 40.44, "total_floor_area": 40.44}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.69, "heat_loss_area": 0, "total_floor_area": 40.44, "kappa_value_from_below": 9}, {"storey": 2, "u_value": 0, "floor_type": 3, "storey_height": 2.27, "heat_loss_area": 0, "total_floor_area": 26.99}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 291, "currency": "GBP"}, "co2_emissions_current": 0.3, "energy_rating_average": 60, "energy_rating_current": 85, "lighting_cost_current": {"value": 73, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 314, "currency": "GBP"}, "hot_water_cost_current": {"value": 300, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 50, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 343, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 93, "environmental_impact_rating": 99}], "user_interface_version": "2.26.16", "co2_emissions_potential": 0.1, "energy_rating_potential": 93, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 73, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 226, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 33, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "2.26.16", "energy_consumption_potential": 16, "environmental_impact_current": 97, "current_energy_efficiency_band": "B", "environmental_impact_potential": 99, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 3.2} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/WA53GF/cert-5b0beaa2d6f7.json b/tests/fixtures/epc_prediction/WA53GF/cert-5b0beaa2d6f7.json new file mode 100644 index 00000000..f7e9ecf7 --- /dev/null +++ b/tests/fixtures/epc_prediction/WA53GF/cert-5b0beaa2d6f7.json @@ -0,0 +1 @@ +{"der": 3.55, "ter": 11.19, "dfee": 33.9, "dper": 37.31, "tfee": 35.8, "tper": 58.45, "uprn": 10097320612, "roofs": [{"description": {"value": "Average thermal transmittance 0.09 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.19 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.12 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": "ND", "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "WA5 3GF", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 2, "created_at": "2026-04-09 11:03:18", "living_area": 16.12, "orientation": 2, "region_code": 19, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_power": 9.3, "shower_wwhrs": 1, "shower_flow_rate": 6, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 901, "hot_water_store_size": 180, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2207, "main_heating_category": 4, "main_heating_fraction": 1, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 107682, "heat_pump_heat_distribution": 45, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.39, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_heat_pump_installed_to_mis": "false", "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "hot_water_store_heat_transfer_area": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Air source heat pump, radiators, electric", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 10, "lighting_outlets": 9, "lighting_efficacy": 75}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 5.0 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-4eff85e3da4b", "assessment_date": "2026-04-09", "assessment_type": "SAP", "completion_date": "2026-04-09", "inspection_date": "2026-04-09", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "wet_rooms_count": 3, "air_permeability": 4.98, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 2, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 2, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500776, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 82, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-04-09", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Door", "type": 1, "u_value": 1, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "Windows", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.43}, {"name": "Half Glazed Door", "type": 2, "u_value": 1.1, "data_source": 4, "glazing_type": 7, "isargonfilled": "false"}, {"name": "French Door", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.38}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 40.82, "lzc_energy_sources": [9], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 40.81999969482422}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.19, "wall_type": 2, "kappa_value": 60, "total_wall_area": 91.61, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 110, "total_wall_area": 45.36, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 138.25, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Door", "width": 2.14, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "Opening 2", "type": "Windows", "width": 4.67, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "Opening 5", "type": "Windows", "width": 1.44, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "Opening 6", "type": "Windows", "width": 1.4, "height": 1, "location": "Walls (1)", "orientation": 6}, {"name": "French Doors", "type": "French Door", "width": 3.8, "height": 1, "location": "Walls (1)", "orientation": 6}], "construction_year": 2022, "sap_thermal_bridges": {"thermal_bridges": [{"length": 4.9, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 3.88, "psi_value": 0.022, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 13.06, "psi_value": 0.0296, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 18.07, "psi_value": 0.076, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 18.07, "psi_value": 0.002, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 8.95, "psi_value": 0.0383, "psi_value_source": 1, "thermal_bridge_type": "E10"}, {"length": 9.12, "psi_value": 0.057, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 10.14, "psi_value": 0.047, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 8.4, "psi_value": 0.1, "psi_value_source": 4, "thermal_bridge_type": "E4"}, {"length": 1.81, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 10.14, "psi_value": 0.0343, "psi_value_source": 1, "thermal_bridge_type": "E18"}, {"length": 8.95, "psi_value": 0.06, "psi_value_source": 1, "thermal_bridge_type": "P1"}, {"length": 8.95, "psi_value": 0, "psi_value_source": 4, "thermal_bridge_type": "P2"}, {"length": 8.95, "psi_value": 0.033, "psi_value_source": 1, "thermal_bridge_type": "P4"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.12, "floor_type": 2, "kappa_value": 160, "storey_height": 2.38, "heat_loss_area": 40.82, "total_floor_area": 40.82}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.69, "heat_loss_area": 0, "total_floor_area": 40.82, "kappa_value_from_below": 9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 174, "currency": "GBP"}, "co2_emissions_current": 0.3, "energy_rating_average": 60, "energy_rating_current": 85, "lighting_cost_current": {"value": 63, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 197, "currency": "GBP"}, "hot_water_cost_current": {"value": 272, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 48, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 87, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 323, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 95, "environmental_impact_rating": 100}], "user_interface_version": "3.1.55", "co2_emissions_potential": 0.0, "energy_rating_potential": 95, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 63, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 201, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 35, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.55", "energy_consumption_potential": 12, "environmental_impact_current": 97, "current_energy_efficiency_band": "B", "environmental_impact_potential": 100, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 3.3} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/WA53GF/cert-70557e2087a0.json b/tests/fixtures/epc_prediction/WA53GF/cert-70557e2087a0.json new file mode 100644 index 00000000..989e11b8 --- /dev/null +++ b/tests/fixtures/epc_prediction/WA53GF/cert-70557e2087a0.json @@ -0,0 +1 @@ +{"der": 3.59, "ter": 11.2, "dfee": 40.2, "dper": 37.48, "tfee": 42.2, "tper": 58.55, "uprn": 10097320584, "roofs": [{"description": {"value": "Average thermal transmittance 0.09 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.19 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.11 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": "ND", "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "WA5 3GF", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 1, "created_at": "2026-01-29 11:10:55", "living_area": 18.4, "orientation": 8, "region_code": 19, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_power": 9.3, "shower_wwhrs": 1, "shower_flow_rate": 6, "shower_outlet_type": 3}, {"shower_power": 9.3, "shower_wwhrs": 1, "shower_flow_rate": 6, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 901, "hot_water_store_size": 180, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2207, "main_heating_category": 4, "main_heating_fraction": 1, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 107682, "heat_pump_heat_distribution": 45, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.39, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_heat_pump_installed_to_mis": "false", "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "hot_water_store_heat_transfer_area": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Air source heat pump, radiators, electric", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 10, "lighting_outlets": 12, "lighting_efficacy": 75}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 5.0 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-df278f9677fd", "assessment_date": "2026-01-29", "assessment_type": "SAP", "completion_date": "2026-01-29", "inspection_date": "2026-01-29", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "wet_rooms_count": 4, "air_permeability": 5, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 2, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 3, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500776, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 107, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-01-29", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Door", "type": 1, "u_value": 1, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "Windows", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.43}, {"name": "Half Glazed Door", "type": 2, "u_value": 1.1, "data_source": 4, "glazing_type": 7, "isargonfilled": "false"}, {"name": "French Door", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.38}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 53.61, "lzc_energy_sources": [9], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 53.61000061035156}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.19, "wall_type": 2, "kappa_value": 60, "total_wall_area": 153.52, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 138.05, "is_curtain_walling": "false"}, {"name": "Internal Wall (2)", "u_value": 0, "wall_type": 5, "kappa_value": 75, "total_wall_area": 55.97, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening", "type": "Door", "width": 2.14, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "Opening", "type": "Windows", "width": 9.51, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "Opening", "type": "Windows", "width": 5.67, "height": 1, "location": "Walls (1)", "orientation": 6}, {"name": "Opening", "type": "French Door", "width": 3.8, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "Opening", "type": "Windows", "width": 0.72, "height": 1, "location": "Walls (1)", "orientation": 6}], "construction_year": 2022, "sap_thermal_bridges": {"thermal_bridges": [{"length": 11.75, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 10.73, "psi_value": 0.022, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 30.9, "psi_value": 0.0296, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 30.22, "psi_value": 0.076, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 30.22, "psi_value": 0.002, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 16.28, "psi_value": 0.0383, "psi_value_source": 1, "thermal_bridge_type": "E10"}, {"length": 13.94, "psi_value": 0.057, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 20.32, "psi_value": 0.047, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 8.4, "psi_value": 0.1, "psi_value_source": 4, "thermal_bridge_type": "E4"}, {"length": 1.81, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.11, "floor_type": 2, "kappa_value": 160, "storey_height": 2.39, "heat_loss_area": 53.61, "total_floor_area": 53.61}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.69, "heat_loss_area": 0, "total_floor_area": 53.61, "kappa_value_from_below": 9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 314, "currency": "GBP"}, "co2_emissions_current": 0.4, "energy_rating_average": 60, "energy_rating_current": 84, "lighting_cost_current": {"value": 74, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 337, "currency": "GBP"}, "hot_water_cost_current": {"value": 297, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 50, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 85, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 343, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 93, "environmental_impact_rating": 99}], "user_interface_version": "2.26.13", "co2_emissions_potential": 0.1, "energy_rating_potential": 93, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 74, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 224, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 35, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "2.26.13", "energy_consumption_potential": 17, "environmental_impact_current": 97, "current_energy_efficiency_band": "B", "environmental_impact_potential": 99, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 3.3} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/WA53GF/cert-8e82fef5b13d.json b/tests/fixtures/epc_prediction/WA53GF/cert-8e82fef5b13d.json new file mode 100644 index 00000000..b8f1c7b9 --- /dev/null +++ b/tests/fixtures/epc_prediction/WA53GF/cert-8e82fef5b13d.json @@ -0,0 +1 @@ +{"der": 3.56, "ter": 11.17, "dfee": 33.8, "dper": 37.37, "tfee": 35.8, "tper": 58.34, "uprn": 10097320588, "roofs": [{"description": {"value": "Average thermal transmittance 0.09 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.19 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.12 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": "ND", "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "WA5 3GF", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 2, "created_at": "2026-03-05 12:31:07", "living_area": 16.12, "orientation": 3, "region_code": 19, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_power": 9.3, "shower_wwhrs": 1, "shower_flow_rate": 6, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 901, "hot_water_store_size": 180, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2207, "main_heating_category": 4, "main_heating_fraction": 1, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 107682, "heat_pump_heat_distribution": 45, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.39, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_heat_pump_installed_to_mis": "false", "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "hot_water_store_heat_transfer_area": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Air source heat pump, radiators, electric", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 10, "lighting_outlets": 9, "lighting_efficacy": 75}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 5.0 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-4f55ca6bebfc", "assessment_date": "2026-03-05", "assessment_type": "SAP", "completion_date": "2026-03-05", "inspection_date": "2026-03-05", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "wet_rooms_count": 3, "air_permeability": 4.99, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 2, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500776, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 82, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-03-05", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Door", "type": 1, "u_value": 1, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "Windows", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.43}, {"name": "Half Glazed Door", "type": 2, "u_value": 1.1, "data_source": 4, "glazing_type": 7, "isargonfilled": "false"}, {"name": "French Door", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.38}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 40.82, "lzc_energy_sources": [9], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 40.81999969482422}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.19, "wall_type": 2, "kappa_value": 60, "total_wall_area": 91.61, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 110, "total_wall_area": 45.36, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 138.25, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Door", "width": 2.14, "height": 1, "location": "Walls (1)", "orientation": 3}, {"name": "Opening 2", "type": "Windows", "width": 4.67, "height": 1, "location": "Walls (1)", "orientation": 3}, {"name": "Opening 5", "type": "Windows", "width": 1.44, "height": 1, "location": "Walls (1)", "orientation": 1}, {"name": "Opening 6", "type": "Windows", "width": 1.4, "height": 1, "location": "Walls (1)", "orientation": 7}, {"name": "French Doors", "type": "French Door", "width": 3.8, "height": 1, "location": "Walls (1)", "orientation": 7}], "construction_year": 2022, "sap_thermal_bridges": {"thermal_bridges": [{"length": 4.9, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 3.88, "psi_value": 0.022, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 13.06, "psi_value": 0.0296, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 18.07, "psi_value": 0.076, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 18.07, "psi_value": 0.002, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 8.95, "psi_value": 0.0383, "psi_value_source": 1, "thermal_bridge_type": "E10"}, {"length": 9.12, "psi_value": 0.057, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 10.14, "psi_value": 0.047, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 8.4, "psi_value": 0.1, "psi_value_source": 4, "thermal_bridge_type": "E4"}, {"length": 1.81, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 10.14, "psi_value": 0.0343, "psi_value_source": 1, "thermal_bridge_type": "E18"}, {"length": 8.95, "psi_value": 0.06, "psi_value_source": 1, "thermal_bridge_type": "P1"}, {"length": 8.95, "psi_value": 0, "psi_value_source": 4, "thermal_bridge_type": "P2"}, {"length": 8.95, "psi_value": 0.033, "psi_value_source": 1, "thermal_bridge_type": "P4"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.12, "floor_type": 2, "kappa_value": 160, "storey_height": 2.38, "heat_loss_area": 40.82, "total_floor_area": 40.82}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.69, "heat_loss_area": 0, "total_floor_area": 40.82, "kappa_value_from_below": 9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 182, "currency": "GBP"}, "co2_emissions_current": 0.3, "energy_rating_average": 60, "energy_rating_current": 85, "lighting_cost_current": {"value": 65, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 205, "currency": "GBP"}, "hot_water_cost_current": {"value": 279, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 49, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 87, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 330, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 95, "environmental_impact_rating": 100}], "user_interface_version": "2.26.17", "co2_emissions_potential": 0.0, "energy_rating_potential": 95, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 65, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 207, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 35, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "2.26.17", "energy_consumption_potential": 12, "environmental_impact_current": 97, "current_energy_efficiency_band": "B", "environmental_impact_potential": 100, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 3.3} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/WA53GF/cert-a008344b0613.json b/tests/fixtures/epc_prediction/WA53GF/cert-a008344b0613.json new file mode 100644 index 00000000..713d810b --- /dev/null +++ b/tests/fixtures/epc_prediction/WA53GF/cert-a008344b0613.json @@ -0,0 +1 @@ +{"der": 3.47, "ter": 10.69, "dfee": 33.7, "dper": 36.32, "tfee": 35.7, "tper": 55.72, "uprn": 10097320606, "roofs": [{"description": {"value": "Average thermal transmittance 0.09 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.19 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.12 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": "ND", "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "WA5 3GF", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 2, "created_at": "2026-05-14 10:01:19", "living_area": 18.61, "orientation": 2, "region_code": 19, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_power": 9.3, "shower_wwhrs": 1, "shower_flow_rate": 6, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 901, "hot_water_store_size": 180, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2207, "main_heating_category": 4, "main_heating_fraction": 1, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 107682, "heat_pump_heat_distribution": 45, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.39, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_heat_pump_installed_to_mis": "false", "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "hot_water_store_heat_transfer_area": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Air source heat pump, radiators, electric", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 10, "lighting_outlets": 13, "lighting_efficacy": 75}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 5.0 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-bd484747f387", "assessment_date": "2026-05-14", "assessment_type": "SAP", "completion_date": "2026-05-14", "inspection_date": "2026-05-14", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "wet_rooms_count": 4, "air_permeability": 4.95, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 4, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 3, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500776, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 91, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-05-14", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Door", "type": 1, "u_value": 1, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "Windows", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.41}, {"name": "Half Glazed Door", "type": 2, "u_value": 1.1, "data_source": 4, "glazing_type": 7, "isargonfilled": "false"}, {"name": "French Door", "type": 4, "u_value": 1.4, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.37}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 44.73, "lzc_energy_sources": [9], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 45.849998474121094}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.19, "wall_type": 2, "kappa_value": 60, "total_wall_area": 98.82, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 110, "total_wall_area": 43.97, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 179.99, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Door", "width": 2.14, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "Opening 2", "type": "Windows", "width": 5.96, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "Opening 5", "type": "Windows", "width": 0.72, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "Opening 6", "type": "Windows", "width": 4.11, "height": 1, "location": "Walls (1)", "orientation": 6}, {"name": "French Doors", "type": "French Door", "width": 3.8, "height": 1, "location": "Walls (1)", "orientation": 6}], "construction_year": 2022, "sap_thermal_bridges": {"thermal_bridges": [{"length": 9.33, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 8.31, "psi_value": 0.023, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 17.42, "psi_value": 0.0296, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 19.82, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 17.41, "psi_value": 0.002, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 8.95, "psi_value": 0.0383, "psi_value_source": 1, "thermal_bridge_type": "E10"}, {"length": 10.23, "psi_value": 0.057, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 12.83, "psi_value": 0.047, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 8.4, "psi_value": 0.1, "psi_value_source": 4, "thermal_bridge_type": "E4"}, {"length": 1.81, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 10.14, "psi_value": 0.0343, "psi_value_source": 1, "thermal_bridge_type": "E18"}, {"length": 8.33, "psi_value": 0.06, "psi_value_source": 1, "thermal_bridge_type": "P1"}, {"length": 8.95, "psi_value": 0, "psi_value_source": 4, "thermal_bridge_type": "P2"}, {"length": 8.95, "psi_value": 0.033, "psi_value_source": 1, "thermal_bridge_type": "P4"}, {"length": 2.41, "psi_value": 0.32, "psi_value_source": 4, "thermal_bridge_type": "E20"}, {"length": 2.41, "psi_value": 0.025, "psi_value_source": 1, "thermal_bridge_type": "E21"}, {"length": 2.38, "psi_value": -0.091, "psi_value_source": 1, "thermal_bridge_type": "E17"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.12, "floor_type": 2, "kappa_value": 160, "storey_height": 2.38, "heat_loss_area": 44.73, "total_floor_area": 44.73}, {"storey": 0, "u_value": 0.12, "floor_type": 3, "kappa_value": 20, "storey_height": 2.38, "heat_loss_area": 1.12, "total_floor_area": 44.73}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.69, "heat_loss_area": 0, "total_floor_area": 45.85, "kappa_value_from_below": 9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 211, "currency": "GBP"}, "co2_emissions_current": 0.3, "energy_rating_average": 60, "energy_rating_current": 85, "lighting_cost_current": {"value": 60, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 233, "currency": "GBP"}, "hot_water_cost_current": {"value": 280, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 49, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 87, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 328, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 95, "environmental_impact_rating": 99}], "user_interface_version": "3.1.57", "co2_emissions_potential": 0.1, "energy_rating_potential": 95, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 60, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 209, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 34, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 13, "environmental_impact_current": 97, "current_energy_efficiency_band": "B", "environmental_impact_potential": 99, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 3.2} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/WA53GF/cert-b45e259b2219.json b/tests/fixtures/epc_prediction/WA53GF/cert-b45e259b2219.json new file mode 100644 index 00000000..b925da38 --- /dev/null +++ b/tests/fixtures/epc_prediction/WA53GF/cert-b45e259b2219.json @@ -0,0 +1 @@ +{"der": 3.53, "ter": 11.06, "dfee": 33.3, "dper": 37.12, "tfee": 35.2, "tper": 57.75, "uprn": 10097320609, "roofs": [{"description": {"value": "Average thermal transmittance 0.09 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.19 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.12 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": "ND", "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "WA5 3GF", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 2, "created_at": "2026-04-09 12:21:24", "living_area": 16.12, "orientation": 2, "region_code": 19, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_power": 9.3, "shower_wwhrs": 1, "shower_flow_rate": 6, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 901, "hot_water_store_size": 180, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2207, "main_heating_category": 4, "main_heating_fraction": 1, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 107682, "heat_pump_heat_distribution": 45, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.39, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_heat_pump_installed_to_mis": "false", "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "hot_water_store_heat_transfer_area": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Air source heat pump, radiators, electric", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 10, "lighting_outlets": 9, "lighting_efficacy": 75}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 5.0 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-a434723a894a", "assessment_date": "2026-04-09", "assessment_type": "SAP", "completion_date": "2026-04-09", "inspection_date": "2026-04-09", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "wet_rooms_count": 3, "air_permeability": 4.95, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 2, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500776, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 82, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-04-09", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Door", "type": 1, "u_value": 1, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "Windows", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.43}, {"name": "Half Glazed Door", "type": 2, "u_value": 1.1, "data_source": 4, "glazing_type": 7, "isargonfilled": "false"}, {"name": "French Door", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.38}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 40.82, "lzc_energy_sources": [9], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 40.81999969482422}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.19, "wall_type": 2, "kappa_value": 60, "total_wall_area": 91.61, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 110, "total_wall_area": 45.36, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 138.25, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Door", "width": 2.14, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "Opening 2", "type": "Windows", "width": 4.67, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "Opening 5", "type": "Windows", "width": 1.44, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "Opening 6", "type": "Windows", "width": 1.4, "height": 1, "location": "Walls (1)", "orientation": 6}, {"name": "French Doors", "type": "French Door", "width": 3.8, "height": 1, "location": "Walls (1)", "orientation": 6}], "construction_year": 2022, "sap_thermal_bridges": {"thermal_bridges": [{"length": 4.9, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 3.88, "psi_value": 0.022, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 13.06, "psi_value": 0.0296, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 18.07, "psi_value": 0.076, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 18.07, "psi_value": 0.002, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 8.95, "psi_value": 0.0383, "psi_value_source": 1, "thermal_bridge_type": "E10"}, {"length": 9.12, "psi_value": 0.057, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 10.14, "psi_value": 0.047, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 8.4, "psi_value": 0.1, "psi_value_source": 4, "thermal_bridge_type": "E4"}, {"length": 1.81, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 10.14, "psi_value": 0.0343, "psi_value_source": 1, "thermal_bridge_type": "E18"}, {"length": 8.95, "psi_value": 0.06, "psi_value_source": 1, "thermal_bridge_type": "P1"}, {"length": 8.95, "psi_value": 0, "psi_value_source": 4, "thermal_bridge_type": "P2"}, {"length": 8.95, "psi_value": 0.033, "psi_value_source": 1, "thermal_bridge_type": "P4"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.12, "floor_type": 2, "kappa_value": 160, "storey_height": 2.38, "heat_loss_area": 40.82, "total_floor_area": 40.82}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.69, "heat_loss_area": 0, "total_floor_area": 40.82, "kappa_value_from_below": 9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 174, "currency": "GBP"}, "co2_emissions_current": 0.3, "energy_rating_average": 60, "energy_rating_current": 86, "lighting_cost_current": {"value": 63, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 197, "currency": "GBP"}, "hot_water_cost_current": {"value": 272, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 48, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 87, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 323, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 95, "environmental_impact_rating": 100}], "user_interface_version": "3.1.55", "co2_emissions_potential": 0.0, "energy_rating_potential": 95, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 63, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 201, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 35, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.55", "energy_consumption_potential": 12, "environmental_impact_current": 97, "current_energy_efficiency_band": "B", "environmental_impact_potential": 100, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 3.3} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/WA53GF/cert-c4f92dc0fdfc.json b/tests/fixtures/epc_prediction/WA53GF/cert-c4f92dc0fdfc.json new file mode 100644 index 00000000..0cab90ae --- /dev/null +++ b/tests/fixtures/epc_prediction/WA53GF/cert-c4f92dc0fdfc.json @@ -0,0 +1 @@ +{"der": 3.8, "ter": 12.69, "dfee": 43.1, "dper": 39.67, "tfee": 46.0, "tper": 66.57, "uprn": 10097320613, "roofs": [{"description": {"value": "Average thermal transmittance 0.09 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.19 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.11 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": "ND", "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "WA5 3GF", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 1, "created_at": "2026-06-11 10:42:31", "living_area": 12.81, "orientation": 8, "region_code": 19, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_power": 9.3, "shower_wwhrs": 1, "shower_flow_rate": 6, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 901, "hot_water_store_size": 210, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2207, "main_heating_category": 4, "main_heating_fraction": 1, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 107682, "heat_pump_heat_distribution": 45, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.55, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_heat_pump_installed_to_mis": "false", "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "hot_water_store_heat_transfer_area": 3, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Air source heat pump, radiators, electric", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 10, "lighting_outlets": 13, "lighting_efficacy": 75}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.7 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-07e24ae51248", "assessment_date": "2026-06-11", "assessment_type": "SAP", "completion_date": "2026-06-11", "inspection_date": "2026-06-11", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "wet_rooms_count": 4, "air_permeability": 4.73, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 2, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 3, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500776, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 106, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-06-11", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Door", "type": 1, "u_value": 1, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "Windows", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.41}, {"name": "Half Glazed Door", "type": 2, "u_value": 1.1, "data_source": 4, "glazing_type": 7, "isargonfilled": "false"}, {"name": "French Door", "type": 4, "u_value": 1.4, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.38}, {"name": "Roof Window", "type": 5, "u_value": 1.3, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 44.82, "lzc_energy_sources": [9], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 60.85}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.19, "wall_type": 2, "kappa_value": 60, "total_wall_area": 167.44, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 168.14, "is_curtain_walling": "false"}, {"name": "Internal Wall (2)", "u_value": 0, "wall_type": 5, "kappa_value": 75, "total_wall_area": 23.61, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Door", "width": 2.14, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "Opening 2", "type": "Windows", "width": 7.68, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "Opening 5", "type": "Windows", "width": 0.72, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "Opening 6", "type": "Windows", "width": 2.84, "height": 1, "location": "Walls (1)", "orientation": 4}, {"name": "French Doors", "type": "French Door", "width": 3.8, "height": 1, "location": "Walls (1)", "orientation": 4}, {"name": "Opening", "type": "Half Glazed Door", "width": 2.14, "height": 1, "location": "Walls (1)", "orientation": 6}], "construction_year": 2022, "sap_thermal_bridges": {"thermal_bridges": [{"length": 10.13, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 8.09, "psi_value": 0.022, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 18.3, "psi_value": 0.0296, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 33.09, "psi_value": 0.076, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 22.91, "psi_value": 0.002, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 17.88, "psi_value": 0.057, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 25.3, "psi_value": 0.047, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 12.6, "psi_value": 0.1, "psi_value_source": 4, "thermal_bridge_type": "E4"}, {"length": 1.81, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 5.06, "psi_value": -0.088, "psi_value_source": 1, "thermal_bridge_type": "E17"}, {"length": 8.47, "psi_value": 0.32, "psi_value_source": 4, "thermal_bridge_type": "E20"}, {"length": 8.47, "psi_value": 0.0251, "psi_value_source": 1, "thermal_bridge_type": "E21"}, {"length": 15.2, "psi_value": 0.0383, "psi_value_source": 1, "thermal_bridge_type": "E10"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.11, "floor_type": 2, "kappa_value": 160, "storey_height": 2.66, "heat_loss_area": 44.82, "total_floor_area": 44.82}, {"storey": 1, "u_value": 0.11, "floor_type": 3, "kappa_value": 18, "storey_height": 2.4, "heat_loss_area": 16.03, "total_floor_area": 60.85, "kappa_value_from_below": 9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 337, "currency": "GBP"}, "co2_emissions_current": 0.4, "energy_rating_average": 60, "energy_rating_current": 83, "lighting_cost_current": {"value": 73, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 359, "currency": "GBP"}, "hot_water_cost_current": {"value": 292, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 49, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 84, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 336, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 92, "environmental_impact_rating": 99}], "user_interface_version": "3.1.57", "co2_emissions_potential": 0.1, "energy_rating_potential": 92, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 73, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 220, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 37, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 19, "environmental_impact_current": 97, "current_energy_efficiency_band": "B", "environmental_impact_potential": 99, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 3.6} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/WA53GF/cert-cbaf14e590bb.json b/tests/fixtures/epc_prediction/WA53GF/cert-cbaf14e590bb.json new file mode 100644 index 00000000..b384e6a3 --- /dev/null +++ b/tests/fixtures/epc_prediction/WA53GF/cert-cbaf14e590bb.json @@ -0,0 +1 @@ +{"der": 3.46, "ter": 10.8, "dfee": 34.0, "dper": 36.28, "tfee": 36.2, "tper": 56.3, "uprn": 10097320607, "roofs": [{"description": {"value": "Average thermal transmittance 0.09 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.19 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.12 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": "ND", "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "WA5 3GF", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 2, "created_at": "2026-06-02 08:48:21", "living_area": 18.61, "orientation": 2, "region_code": 19, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_power": 9.3, "shower_wwhrs": 1, "shower_flow_rate": 6, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 901, "hot_water_store_size": 180, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2207, "main_heating_category": 4, "main_heating_fraction": 1, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 107682, "heat_pump_heat_distribution": 45, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.39, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_heat_pump_installed_to_mis": "false", "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "hot_water_store_heat_transfer_area": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Air source heat pump, radiators, electric", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 10, "lighting_outlets": 13, "lighting_efficacy": 75}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.8 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-e7b60eb616bb", "assessment_date": "2026-06-02", "assessment_type": "SAP", "completion_date": "2026-06-02", "inspection_date": "2026-06-02", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "wet_rooms_count": 4, "air_permeability": 4.81, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 3, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500776, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 91, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-06-02", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Door", "type": 1, "u_value": 1, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "Windows", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.41}, {"name": "Half Glazed Door", "type": 2, "u_value": 1.1, "data_source": 4, "glazing_type": 7, "isargonfilled": "false"}, {"name": "French Door", "type": 4, "u_value": 1.4, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.38}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 44.73, "lzc_energy_sources": [9], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 45.849998474121094}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.19, "wall_type": 2, "kappa_value": 60, "total_wall_area": 98.82, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 110, "total_wall_area": 43.97, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 179.99, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Door", "width": 2.14, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "Opening 2", "type": "Windows", "width": 5.96, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "Opening 5", "type": "Windows", "width": 0.72, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "Opening 6", "type": "Windows", "width": 4.11, "height": 1, "location": "Walls (1)", "orientation": 6}, {"name": "French Doors", "type": "French Door", "width": 3.8, "height": 1, "location": "Walls (1)", "orientation": 6}], "construction_year": 2022, "sap_thermal_bridges": {"thermal_bridges": [{"length": 9.33, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 8.31, "psi_value": 0.023, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 17.42, "psi_value": 0.0296, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 19.82, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 17.41, "psi_value": 0.002, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 8.95, "psi_value": 0.0383, "psi_value_source": 1, "thermal_bridge_type": "E10"}, {"length": 10.23, "psi_value": 0.057, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 12.83, "psi_value": 0.047, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 8.4, "psi_value": 0.1, "psi_value_source": 4, "thermal_bridge_type": "E4"}, {"length": 1.81, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 10.14, "psi_value": 0.0343, "psi_value_source": 1, "thermal_bridge_type": "E18"}, {"length": 8.33, "psi_value": 0.06, "psi_value_source": 1, "thermal_bridge_type": "P1"}, {"length": 8.95, "psi_value": 0, "psi_value_source": 4, "thermal_bridge_type": "P2"}, {"length": 8.95, "psi_value": 0.033, "psi_value_source": 1, "thermal_bridge_type": "P4"}, {"length": 2.41, "psi_value": 0.32, "psi_value_source": 4, "thermal_bridge_type": "E20"}, {"length": 2.41, "psi_value": 0.025, "psi_value_source": 1, "thermal_bridge_type": "E21"}, {"length": 2.38, "psi_value": -0.091, "psi_value_source": 1, "thermal_bridge_type": "E17"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.12, "floor_type": 2, "kappa_value": 160, "storey_height": 2.38, "heat_loss_area": 44.73, "total_floor_area": 44.73}, {"storey": 0, "u_value": 0.12, "floor_type": 3, "kappa_value": 20, "storey_height": 2.38, "heat_loss_area": 1.12, "total_floor_area": 44.73}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.69, "heat_loss_area": 0, "total_floor_area": 45.85, "kappa_value_from_below": 9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 210, "currency": "GBP"}, "co2_emissions_current": 0.3, "energy_rating_average": 60, "energy_rating_current": 85, "lighting_cost_current": {"value": 60, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 233, "currency": "GBP"}, "hot_water_cost_current": {"value": 280, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 49, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 87, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 328, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 95, "environmental_impact_rating": 99}], "user_interface_version": "3.1.57", "co2_emissions_potential": 0.1, "energy_rating_potential": 95, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 60, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 209, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 34, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 13, "environmental_impact_current": 97, "current_energy_efficiency_band": "B", "environmental_impact_potential": 99, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 3.2} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/WA53GF/cert-d737f1f8d9b8.json b/tests/fixtures/epc_prediction/WA53GF/cert-d737f1f8d9b8.json new file mode 100644 index 00000000..c9df5f41 --- /dev/null +++ b/tests/fixtures/epc_prediction/WA53GF/cert-d737f1f8d9b8.json @@ -0,0 +1 @@ +{"der": 3.31, "ter": 10.12, "dfee": 40.0, "dper": 34.45, "tfee": 42.6, "tper": 53.14, "uprn": 10097320600, "roofs": [{"description": {"value": "Average thermal transmittance 0.09 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.19 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.11 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": "ND", "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "WA5 3GF", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 1, "created_at": "2026-03-16 12:49:58", "living_area": 16.62, "orientation": 4, "region_code": 19, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_power": 9.3, "shower_wwhrs": 1, "shower_flow_rate": 6, "shower_outlet_type": 3}, {"shower_power": 9.3, "shower_wwhrs": 1, "shower_flow_rate": 6, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 901, "hot_water_store_size": 250, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2207, "main_heating_category": 4, "main_heating_fraction": 1, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 107698, "heat_pump_heat_distribution": 45, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 2.1, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_heat_pump_installed_to_mis": "false", "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "hot_water_store_heat_transfer_area": 3, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Air source heat pump, radiators, electric", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 10, "lighting_outlets": 16, "lighting_efficacy": 75}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 5.0 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-28a8297ce440", "assessment_date": "2026-03-16", "assessment_type": "SAP", "completion_date": "2026-03-16", "inspection_date": "2026-03-16", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "wet_rooms_count": 3, "air_permeability": 4.98, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 2, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500776, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 136, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-03-16", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Door", "type": 1, "u_value": 1, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "Windows", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.43}, {"name": "Half Glazed Door", "type": 2, "u_value": 1.1, "data_source": 4, "glazing_type": 7, "isargonfilled": "false"}, {"name": "French Door", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.38}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 74.11, "lzc_energy_sources": [9], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 69.11}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.19, "wall_type": 2, "kappa_value": 60, "total_wall_area": 169.36, "is_curtain_walling": "false"}, {"name": "Walls (2)", "u_value": 0.23, "wall_type": 2, "kappa_value": 60, "total_wall_area": 18.21, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 180.04, "is_curtain_walling": "false"}, {"name": "Internal Wall (2)", "u_value": 0, "wall_type": 5, "kappa_value": 75, "total_wall_area": 75.37, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Door", "width": 2.14, "height": 1, "location": "Walls (1)", "orientation": 4}, {"name": "Opening 2", "type": "Windows", "width": 8.96, "height": 1, "location": "Walls (1)", "orientation": 4}, {"name": "Opening 6", "type": "Windows", "width": 6.02, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "French Doors", "type": "French Door", "width": 3.8, "height": 1, "location": "Walls (1)", "orientation": 8}], "construction_year": 2022, "sap_thermal_bridges": {"thermal_bridges": [{"length": 12.14, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 10.68, "psi_value": 0.022, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 20.72, "psi_value": 0.0296, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 35.16, "psi_value": 0.076, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 28.21, "psi_value": 0.002, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 15.6, "psi_value": 0.0383, "psi_value_source": 1, "thermal_bridge_type": "E10"}, {"length": 19.56, "psi_value": 0.057, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 29.32, "psi_value": 0.047, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 8.4, "psi_value": 0.1, "psi_value_source": 4, "thermal_bridge_type": "E4"}, {"length": 8.16, "psi_value": -0.091, "psi_value_source": 1, "thermal_bridge_type": "E17"}, {"length": 6.35, "psi_value": 0.32, "psi_value_source": 4, "thermal_bridge_type": "E20"}, {"length": 6.35, "psi_value": 0.025, "psi_value_source": 1, "thermal_bridge_type": "E21"}, {"length": 1.81, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.11, "floor_type": 2, "kappa_value": 160, "storey_height": 2.87, "heat_loss_area": 62.03, "total_floor_area": 62.03}, {"storey": 0, "u_value": 0.11, "floor_type": 3, "kappa_value": 20, "storey_height": 2.87, "heat_loss_area": 12.08, "total_floor_area": 62.03}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.42, "heat_loss_area": 0, "total_floor_area": 74.11, "kappa_value_from_below": 9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 401, "currency": "GBP"}, "co2_emissions_current": 0.4, "energy_rating_average": 60, "energy_rating_current": 84, "lighting_cost_current": {"value": 88, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 425, "currency": "GBP"}, "hot_water_cost_current": {"value": 318, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 51, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 85, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 353, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 92, "environmental_impact_rating": 99}], "user_interface_version": "2.26.17", "co2_emissions_potential": 0.2, "energy_rating_potential": 92, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 88, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 243, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 32, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "2.26.17", "energy_consumption_potential": 18, "environmental_impact_current": 97, "current_energy_efficiency_band": "B", "environmental_impact_potential": 99, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 3.1} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/WA53GF/cert-db5ad28095a9.json b/tests/fixtures/epc_prediction/WA53GF/cert-db5ad28095a9.json new file mode 100644 index 00000000..3fea9110 --- /dev/null +++ b/tests/fixtures/epc_prediction/WA53GF/cert-db5ad28095a9.json @@ -0,0 +1 @@ +{"der": 3.45, "ter": 10.51, "dfee": 35.7, "dper": 36.09, "tfee": 37.5, "tper": 54.77, "uprn": 10097320602, "roofs": [{"description": {"value": "Average thermal transmittance 0.09 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.19 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.11 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": "ND", "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "WA5 3GF", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 2, "created_at": "2026-06-08 07:51:09", "living_area": 18.15, "orientation": 8, "region_code": 19, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_power": 9.3, "shower_wwhrs": 1, "shower_flow_rate": 6, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 901, "hot_water_store_size": 210, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2207, "main_heating_category": 4, "main_heating_fraction": 1, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 107682, "heat_pump_heat_distribution": 45, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.55, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_heat_pump_installed_to_mis": "false", "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "hot_water_store_heat_transfer_area": 3, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Air source heat pump, radiators, electric", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 10, "lighting_outlets": 12, "lighting_efficacy": 75}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 5.0 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-e801011abd2d", "assessment_date": "2026-06-08", "assessment_type": "SAP", "completion_date": "2026-06-08", "inspection_date": "2026-06-08", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "wet_rooms_count": 4, "air_permeability": 4.98, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 4, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 3, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500776, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 100, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-06-08", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Door", "type": 1, "u_value": 1, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "Windows", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.41}, {"name": "Half Glazed Door", "type": 2, "u_value": 1.1, "data_source": 4, "glazing_type": 7, "isargonfilled": "false"}, {"name": "French Door", "type": 4, "u_value": 1.4, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.38}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 50.04, "lzc_energy_sources": [9], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 50.040000915527344}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.19, "wall_type": 2, "kappa_value": 60, "total_wall_area": 102.26, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 110, "total_wall_area": 45.51, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 126.7, "is_curtain_walling": "false"}, {"name": "Internal Wall (2)", "u_value": 0, "wall_type": 5, "kappa_value": 75, "total_wall_area": 53.34, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Door", "width": 2.14, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "Opening 2", "type": "Windows", "width": 9.91, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "Opening 5", "type": "Windows", "width": 6.08, "height": 1, "location": "Walls (1)", "orientation": 6}, {"name": "Opening 6", "type": "Windows", "width": 0.72, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "French Doors", "type": "French Door", "width": 3.8, "height": 1, "location": "Walls (1)", "orientation": 2}], "construction_year": 2022, "sap_thermal_bridges": {"thermal_bridges": [{"length": 11.73, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 10.26, "psi_value": 0.022, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 30, "psi_value": 0.0296, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 20.13, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 20.13, "psi_value": 0.002, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 7.19, "psi_value": 0.0383, "psi_value_source": 1, "thermal_bridge_type": "E10"}, {"length": 12.95, "psi_value": 0.057, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 10.16, "psi_value": 0.047, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 8.4, "psi_value": 0.1, "psi_value_source": 4, "thermal_bridge_type": "E4"}, {"length": 1.81, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 10.16, "psi_value": 0.0343, "psi_value_source": 1, "thermal_bridge_type": "E18"}, {"length": 8.96, "psi_value": 0.06, "psi_value_source": 1, "thermal_bridge_type": "P1"}, {"length": 8.96, "psi_value": 0, "psi_value_source": 4, "thermal_bridge_type": "P2"}, {"length": 8.96, "psi_value": 0.033, "psi_value_source": 1, "thermal_bridge_type": "P4"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.11, "floor_type": 2, "kappa_value": 160, "storey_height": 2.39, "heat_loss_area": 50.04, "total_floor_area": 50.04}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.69, "heat_loss_area": 0, "total_floor_area": 50.04, "kappa_value_from_below": 9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 246, "currency": "GBP"}, "co2_emissions_current": 0.3, "energy_rating_average": 60, "energy_rating_current": 85, "lighting_cost_current": {"value": 66, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 269, "currency": "GBP"}, "hot_water_cost_current": {"value": 290, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 49, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 332, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 94, "environmental_impact_rating": 99}], "user_interface_version": "3.1.57", "co2_emissions_potential": 0.1, "energy_rating_potential": 94, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 66, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 218, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 34, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 15, "environmental_impact_current": 97, "current_energy_efficiency_band": "B", "environmental_impact_potential": 99, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 3.2} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/WA53GF/cert-e4670222a4be.json b/tests/fixtures/epc_prediction/WA53GF/cert-e4670222a4be.json new file mode 100644 index 00000000..47827550 --- /dev/null +++ b/tests/fixtures/epc_prediction/WA53GF/cert-e4670222a4be.json @@ -0,0 +1 @@ +{"der": 3.44, "ter": 10.85, "dfee": 34.2, "dper": 36.06, "tfee": 36.8, "tper": 56.6, "uprn": 10097320605, "roofs": [{"description": {"value": "Average thermal transmittance 0.09 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.19 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.12 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": "ND", "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "WA5 3GF", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 2, "created_at": "2026-01-15 16:52:30", "living_area": 18.61, "orientation": 2, "region_code": 19, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_power": 9.3, "shower_wwhrs": 1, "shower_flow_rate": 6, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 901, "hot_water_store_size": 150, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2207, "main_heating_category": 4, "main_heating_fraction": 1, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 107682, "heat_pump_heat_distribution": 45, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.29, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_heat_pump_installed_to_mis": "false", "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "hot_water_store_heat_transfer_area": 3, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Air source heat pump, radiators, electric", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 10, "lighting_outlets": 13, "lighting_efficacy": 75}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.9 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-2f8b33c4bbb8", "assessment_date": "2026-01-15", "assessment_type": "SAP", "completion_date": "2026-01-15", "inspection_date": "2026-01-15", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "wet_rooms_count": 4, "air_permeability": 4.89, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 2, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 3, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500776, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 91, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-01-15", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Door", "type": 1, "u_value": 1, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "Windows", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.43}, {"name": "Half Glazed Door", "type": 2, "u_value": 1.1, "data_source": 4, "glazing_type": 7, "isargonfilled": "false"}, {"name": "French Door", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.38}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 44.73, "lzc_energy_sources": [9], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 45.849998474121094}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.19, "wall_type": 2, "kappa_value": 60, "total_wall_area": 98.82, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 110, "total_wall_area": 43.97, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 179.99, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Door", "width": 2.14, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "Opening 2", "type": "Windows", "width": 5.96, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "Opening 5", "type": "Windows", "width": 0.72, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "Opening 6", "type": "Windows", "width": 4.11, "height": 1, "location": "Walls (1)", "orientation": 6}, {"name": "French Doors", "type": "French Door", "width": 3.8, "height": 1, "location": "Walls (1)", "orientation": 6}], "construction_year": 2022, "sap_thermal_bridges": {"thermal_bridges": [{"length": 9.33, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 8.31, "psi_value": 0.023, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 17.42, "psi_value": 0.0296, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 19.82, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 17.41, "psi_value": 0.002, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 8.95, "psi_value": 0.0383, "psi_value_source": 1, "thermal_bridge_type": "E10"}, {"length": 10.23, "psi_value": 0.057, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 12.83, "psi_value": 0.047, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 8.4, "psi_value": 0.1, "psi_value_source": 4, "thermal_bridge_type": "E4"}, {"length": 1.81, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 10.14, "psi_value": 0.0343, "psi_value_source": 1, "thermal_bridge_type": "E18"}, {"length": 8.33, "psi_value": 0.06, "psi_value_source": 1, "thermal_bridge_type": "P1"}, {"length": 8.95, "psi_value": 0, "psi_value_source": 4, "thermal_bridge_type": "P2"}, {"length": 8.95, "psi_value": 0.033, "psi_value_source": 1, "thermal_bridge_type": "P4"}, {"length": 2.41, "psi_value": 0.32, "psi_value_source": 4, "thermal_bridge_type": "E20"}, {"length": 2.41, "psi_value": 0.025, "psi_value_source": 1, "thermal_bridge_type": "E21"}, {"length": 2.38, "psi_value": -0.091, "psi_value_source": 1, "thermal_bridge_type": "E17"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.12, "floor_type": 2, "kappa_value": 160, "storey_height": 2.38, "heat_loss_area": 44.73, "total_floor_area": 44.73}, {"storey": 0, "u_value": 0.12, "floor_type": 3, "kappa_value": 20, "storey_height": 2.38, "heat_loss_area": 1.12, "total_floor_area": 44.73}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.69, "heat_loss_area": 0, "total_floor_area": 45.85, "kappa_value_from_below": 9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 213, "currency": "GBP"}, "co2_emissions_current": 0.3, "energy_rating_average": 60, "energy_rating_current": 85, "lighting_cost_current": {"value": 62, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 236, "currency": "GBP"}, "hot_water_cost_current": {"value": 286, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 50, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 87, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 335, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 95, "environmental_impact_rating": 99}], "user_interface_version": "2.25.1", "co2_emissions_potential": 0.0, "energy_rating_potential": 95, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 62, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 213, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 34, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "2.25.1", "energy_consumption_potential": 13, "environmental_impact_current": 97, "current_energy_efficiency_band": "B", "environmental_impact_potential": 99, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 3.2} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/WA53GF/cert-ece39f55e78d.json b/tests/fixtures/epc_prediction/WA53GF/cert-ece39f55e78d.json new file mode 100644 index 00000000..bbc0a816 --- /dev/null +++ b/tests/fixtures/epc_prediction/WA53GF/cert-ece39f55e78d.json @@ -0,0 +1 @@ +{"der": 3.37, "ter": 10.79, "dfee": 35.9, "dper": 35.23, "tfee": 36.5, "tper": 56.4, "uprn": 10097320597, "roofs": [{"description": {"value": "Average thermal transmittance 0.13 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.19 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.11 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": "ND", "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "WA5 3GF", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 2, "created_at": "2025-12-10 14:51:32", "living_area": 16.7, "orientation": 3, "region_code": 19, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_power": 9.3, "shower_wwhrs": 1, "shower_flow_rate": 6, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 901, "hot_water_store_size": 210, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2207, "main_heating_category": 4, "main_heating_fraction": 1, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 107682, "heat_pump_heat_distribution": 45, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.5, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_heat_pump_installed_to_mis": "true", "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "hot_water_store_heat_transfer_area": 3, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Air source heat pump, radiators, electric", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 10, "lighting_outlets": 14, "lighting_efficacy": 75}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.9 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-4362761190e7", "assessment_date": "2025-12-10", "assessment_type": "SAP", "completion_date": "2025-12-10", "inspection_date": "2025-12-10", "sap_ventilation": {"psv_count": 0, "wall_type": 1, "pressure_test": 1, "wet_rooms_count": 4, "air_permeability": 4.89, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 3, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 3, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500776, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 108, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2025-12-10", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Door", "type": 1, "u_value": 1, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "Windows", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.43}, {"name": "Half Glazed Door", "type": 2, "u_value": 1.1, "data_source": 4, "glazing_type": 7, "isargonfilled": "false"}, {"name": "French Door", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.38}, {"name": "Roof Light", "type": 5, "u_value": 1.3, "data_source": 2, "frame_factor": 0.7, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.63}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 40.44, "lzc_energy_sources": [9], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 19.66}, {"name": "Roof (2)", "u_value": 0.16, "roof_type": 2, "kappa_value": 9, "total_roof_area": 24.85}, {"name": "Roof (3)", "u_value": 0.12, "roof_type": 2, "kappa_value": 9, "total_roof_area": 13.45}, {"name": "Roof (4)", "u_value": 0.16, "roof_type": 2, "kappa_value": 9, "total_roof_area": 13.35}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.19, "wall_type": 2, "kappa_value": 60, "total_wall_area": 99.23, "is_curtain_walling": "false"}, {"name": "Walls (2)", "u_value": 0.23, "wall_type": 2, "kappa_value": 18, "total_wall_area": 15.83, "is_curtain_walling": "false"}, {"name": "Walls (3)", "u_value": 0.12, "wall_type": 2, "kappa_value": 18, "total_wall_area": 14.82, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 110, "total_wall_area": 47.04, "is_curtain_walling": "false"}, {"name": "Party Wall (2)", "u_value": 0, "wall_type": 4, "kappa_value": 20, "total_wall_area": 15.83, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 193.57, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Door", "width": 2.14, "height": 1, "location": "Walls (1)", "orientation": 3}, {"name": "Opening 2", "type": "Windows", "width": 5.25, "height": 1, "location": "Walls (1)", "orientation": 3}, {"name": "Opening", "type": "Roof Light", "pitch": 40, "width": 1.78, "height": 1, "location": "Roof (2)", "orientation": 3}, {"name": "Opening", "type": "Windows", "width": 1.54, "height": 1, "location": "Walls (1)", "orientation": 5}, {"name": "Opening", "type": "French Door", "width": 3.8, "height": 1, "location": "Walls (1)", "orientation": 7}, {"name": "Opening", "type": "Windows", "width": 1.4, "height": 1, "location": "Walls (1)", "orientation": 7}, {"name": "Opening", "type": "Roof Light", "pitch": 40, "width": 1.78, "height": 1, "location": "Roof (2)", "orientation": 7}], "construction_year": 2022, "sap_thermal_bridges": {"thermal_bridges": [{"length": 6.84, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 5.82, "psi_value": 0.022, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 16.68, "psi_value": 0.0296, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 18.18, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 24.39, "psi_value": 0.002, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 6.73, "psi_value": 0.0419, "psi_value_source": 1, "thermal_bridge_type": "E11"}, {"length": 4.51, "psi_value": 0.057, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 11.7, "psi_value": 0.047, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 8.4, "psi_value": 0.1, "psi_value_source": 4, "thermal_bridge_type": "E4"}, {"length": 1.81, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 11.7, "psi_value": 0.0343, "psi_value_source": 1, "thermal_bridge_type": "E18"}, {"length": 9.29, "psi_value": 0.06, "psi_value_source": 1, "thermal_bridge_type": "P1"}, {"length": 9.29, "psi_value": 0, "psi_value_source": 4, "thermal_bridge_type": "P2"}, {"length": 4.51, "psi_value": 0.033, "psi_value_source": 1, "thermal_bridge_type": "P4"}, {"length": 5.74, "psi_value": 0.094, "psi_value_source": 1, "thermal_bridge_type": "E13"}, {"length": 4.81, "psi_value": 0.04, "psi_value_source": 1, "thermal_bridge_type": "P5"}, {"length": 8.72, "psi_value": 0.019, "psi_value_source": 1, "thermal_bridge_type": "R6"}, {"length": 2.72, "psi_value": 0.115, "psi_value_source": 1, "thermal_bridge_type": "R1"}, {"length": 2.72, "psi_value": 0.113, "psi_value_source": 1, "thermal_bridge_type": "R2"}, {"length": 5.56, "psi_value": 0.041, "psi_value_source": 1, "thermal_bridge_type": "R3"}, {"length": 1.27, "psi_value": 0.15, "psi_value_source": 4, "thermal_bridge_type": "E11"}, {"length": 3.85, "psi_value": 0.12, "psi_value_source": 4, "thermal_bridge_type": "R5"}, {"length": 2.94, "psi_value": 0.12, "psi_value_source": 4, "thermal_bridge_type": "R4"}, {"length": 3.69, "psi_value": 0.25, "psi_value_source": 4, "thermal_bridge_type": "E13"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.11, "floor_type": 2, "kappa_value": 160, "storey_height": 2.38, "heat_loss_area": 40.44, "total_floor_area": 40.44}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.69, "heat_loss_area": 0, "total_floor_area": 40.44, "kappa_value_from_below": 9}, {"storey": 2, "u_value": 0, "floor_type": 3, "storey_height": 2.27, "heat_loss_area": 0, "total_floor_area": 26.99}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 282, "currency": "GBP"}, "co2_emissions_current": 0.3, "energy_rating_average": 60, "energy_rating_current": 85, "lighting_cost_current": {"value": 73, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 305, "currency": "GBP"}, "hot_water_cost_current": {"value": 300, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 50, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 86, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 343, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 93, "environmental_impact_rating": 99}], "user_interface_version": "2.25.1", "co2_emissions_potential": 0.1, "energy_rating_potential": 93, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 73, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 226, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 33, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "2.25.1", "energy_consumption_potential": 15, "environmental_impact_current": 97, "current_energy_efficiency_band": "B", "environmental_impact_potential": 99, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 3.2} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/WA53GF/cert-fb608eeb2742.json b/tests/fixtures/epc_prediction/WA53GF/cert-fb608eeb2742.json new file mode 100644 index 00000000..df069514 --- /dev/null +++ b/tests/fixtures/epc_prediction/WA53GF/cert-fb608eeb2742.json @@ -0,0 +1 @@ +{"der": 3.45, "ter": 10.85, "dfee": 34.2, "dper": 36.16, "tfee": 36.5, "tper": 56.61, "uprn": 10097320616, "roofs": [{"description": {"value": "Average thermal transmittance 0.09 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.19 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.12 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": "ND", "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "WA5 3GF", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 2, "created_at": "2026-04-29 15:17:31", "living_area": 18.61, "orientation": 8, "region_code": 19, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_power": 9.3, "shower_wwhrs": 1, "shower_flow_rate": 6, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 901, "hot_water_store_size": 180, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2207, "main_heating_category": 4, "main_heating_fraction": 1, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 107682, "heat_pump_heat_distribution": 45, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.38, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_heat_pump_installed_to_mis": "false", "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "hot_water_store_heat_transfer_area": 3, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Air source heat pump, radiators, electric", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 10, "lighting_outlets": 13, "lighting_efficacy": 75}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.7 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-1e3b41e11310", "assessment_date": "2026-04-29", "assessment_type": "SAP", "completion_date": "2026-04-29", "inspection_date": "2026-04-29", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "wet_rooms_count": 4, "air_permeability": 4.67, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 2, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 3, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500776, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 91, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-04-29", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Door", "type": 1, "u_value": 1, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "Windows", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.41}, {"name": "Half Glazed Door", "type": 2, "u_value": 1.1, "data_source": 4, "glazing_type": 7, "isargonfilled": "false"}, {"name": "French Door", "type": 4, "u_value": 1.4, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.37}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 44.73, "lzc_energy_sources": [9], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 45.849998474121094}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.19, "wall_type": 2, "kappa_value": 60, "total_wall_area": 98.82, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 110, "total_wall_area": 43.97, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 179.99, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Door", "width": 2.14, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "Opening 2", "type": "Windows", "width": 5.96, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "Opening 5", "type": "Windows", "width": 0.72, "height": 1, "location": "Walls (1)", "orientation": 6}, {"name": "Opening 6", "type": "Windows", "width": 4.11, "height": 1, "location": "Walls (1)", "orientation": 4}, {"name": "French Doors", "type": "French Door", "width": 3.8, "height": 1, "location": "Walls (1)", "orientation": 4}], "construction_year": 2022, "sap_thermal_bridges": {"thermal_bridges": [{"length": 9.33, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 8.31, "psi_value": 0.023, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 17.42, "psi_value": 0.0296, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 19.82, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 17.41, "psi_value": 0.002, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 8.95, "psi_value": 0.0383, "psi_value_source": 1, "thermal_bridge_type": "E10"}, {"length": 10.23, "psi_value": 0.057, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 12.83, "psi_value": 0.047, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 8.4, "psi_value": 0.1, "psi_value_source": 4, "thermal_bridge_type": "E4"}, {"length": 1.81, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 10.14, "psi_value": 0.0343, "psi_value_source": 1, "thermal_bridge_type": "E18"}, {"length": 8.33, "psi_value": 0.06, "psi_value_source": 1, "thermal_bridge_type": "P1"}, {"length": 8.95, "psi_value": 0, "psi_value_source": 4, "thermal_bridge_type": "P2"}, {"length": 8.95, "psi_value": 0.033, "psi_value_source": 1, "thermal_bridge_type": "P4"}, {"length": 2.41, "psi_value": 0.32, "psi_value_source": 4, "thermal_bridge_type": "E20"}, {"length": 2.41, "psi_value": 0.025, "psi_value_source": 1, "thermal_bridge_type": "E21"}, {"length": 2.38, "psi_value": -0.091, "psi_value_source": 1, "thermal_bridge_type": "E17"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.12, "floor_type": 2, "kappa_value": 160, "storey_height": 2.38, "heat_loss_area": 44.73, "total_floor_area": 44.73}, {"storey": 0, "u_value": 0.12, "floor_type": 3, "kappa_value": 20, "storey_height": 2.38, "heat_loss_area": 1.12, "total_floor_area": 44.73}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.69, "heat_loss_area": 0, "total_floor_area": 45.85, "kappa_value_from_below": 9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 209, "currency": "GBP"}, "co2_emissions_current": 0.3, "energy_rating_average": 60, "energy_rating_current": 85, "lighting_cost_current": {"value": 60, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 231, "currency": "GBP"}, "hot_water_cost_current": {"value": 280, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 49, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 87, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 328, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 95, "environmental_impact_rating": 99}], "user_interface_version": "3.1.57", "co2_emissions_potential": 0.1, "energy_rating_potential": 95, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 60, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 209, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 34, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.57", "energy_consumption_potential": 13, "environmental_impact_current": 97, "current_energy_efficiency_band": "B", "environmental_impact_potential": 99, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 3.2} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/WA53GF/cert-fde64f618453.json b/tests/fixtures/epc_prediction/WA53GF/cert-fde64f618453.json new file mode 100644 index 00000000..bfb4ec95 --- /dev/null +++ b/tests/fixtures/epc_prediction/WA53GF/cert-fde64f618453.json @@ -0,0 +1 @@ +{"der": 3.53, "ter": 10.94, "dfee": 32.7, "dper": 37.12, "tfee": 34.6, "tper": 57.11, "uprn": 10097320610, "roofs": [{"description": {"value": "Average thermal transmittance 0.09 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "walls": [{"description": {"value": "Average thermal transmittance 0.19 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "floors": [{"description": {"value": "Average thermal transmittance 0.12 W/m\u00b2K", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "status": "entered", "tenure": "ND", "windows": {"description": {"value": "High performance glazing", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "lighting": {"description": {"value": "Good lighting efficiency", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "postcode": "WA5 3GF", "data_type": 2, "hot_water": {"description": {"value": "From main system", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}, "post_town": "", "built_form": 2, "created_at": "2026-04-09 12:19:24", "living_area": 16.12, "orientation": 2, "region_code": 19, "report_type": 3, "sap_heating": {"number_baths": 1, "thermal_store": 1, "shower_outlets": [{"shower_power": 9.3, "shower_wwhrs": 1, "shower_flow_rate": 6, "shower_outlet_type": 3}], "water_fuel_type": 39, "water_heating_code": 901, "hot_water_store_size": 180, "main_heating_details": [{"has_fghrs": "false", "main_fuel_type": 39, "heat_emitter_type": 1, "main_heating_number": 1, "main_heating_control": 2207, "main_heating_category": 4, "main_heating_fraction": 1, "central_heating_pump_age": 2, "main_heating_data_source": 1, "main_heating_index_number": 107682, "heat_pump_heat_distribution": 45, "is_oil_pump_in_heated_space": "false", "is_main_heating_hetas_approved": "false", "is_central_heating_pump_in_heated_space": "true"}], "has_hot_water_cylinder": "true", "has_cylinder_thermostat": "true", "hot_water_store_heat_loss": 1.39, "has_fixed_air_conditioning": "false", "secondary_heating_category": 1, "is_cylinder_in_heated_space": "true", "is_immersion_for_summer_use": "false", "primary_pipework_insulation": 4, "is_heat_pump_installed_to_mis": "false", "is_hot_water_separately_timed": "true", "hot_water_store_heat_loss_source": 2, "hot_water_store_heat_transfer_area": 2, "is_heat_pump_assisted_by_immersion": "false"}, "sap_version": 10.2, "schema_type": "SAP-Schema-19.1.0", "uprn_source": "Address Matched", "country_code": "ENG", "main_heating": [{"description": {"value": "Air source heat pump, radiators, electric", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 5}], "sap_lighting": [[{"lighting_power": 10, "lighting_outlets": 9, "lighting_efficacy": 75}]], "terrain_type": 2, "air_tightness": {"description": {"value": "Air permeability [AP50] = 4.9 m\u00b3/h.m\u00b2 (as tested)", "language": "1"}, "energy_efficiency_rating": 4, "environmental_efficiency_rating": 4}, "dwelling_type": "Semi-detached house", "language_code": 1, "property_type": 0, "address_line_1": "addr-aa3ea223b53c", "assessment_date": "2026-04-09", "assessment_type": "SAP", "completion_date": "2026-04-09", "inspection_date": "2026-04-09", "sap_ventilation": {"psv_count": 0, "wall_type": 2, "pressure_test": 1, "wet_rooms_count": 3, "air_permeability": 4.94, "open_flues_count": 0, "ventilation_type": 6, "has_draught_lobby": "false", "other_flues_count": 0, "closed_flues_count": 0, "extract_fans_count": 0, "boilers_flues_count": 0, "open_chimneys_count": 0, "sheltered_sides_count": 4, "blocked_chimneys_count": 0, "kitchen_duct_fans_count": 0, "kitchen_room_fans_count": 0, "kitchen_wall_fans_count": 1, "flueless_gas_fires_count": 0, "mechanical_vent_duct_type": 2, "non_kitchen_duct_fans_count": 0, "non_kitchen_room_fans_count": 0, "non_kitchen_wall_fans_count": 2, "mechanical_ventilation_data_source": 1, "mechanical_vent_system_index_number": 500776, "is_mechanical_vent_approved_installer_scheme": "false"}, "design_water_use": 1, "sap_data_version": 10.2, "total_floor_area": 82, "transaction_type": 6, "cold_water_source": 1, "conservatory_type": 1, "registration_date": "2026-04-09", "sap_energy_source": {"electricity_tariff": 1}, "sap_opening_types": [{"name": "Door", "type": 1, "u_value": 1, "data_source": 2, "glazing_type": 1, "isargonfilled": "false"}, {"name": "Windows", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.43}, {"name": "Half Glazed Door", "type": 2, "u_value": 1.1, "data_source": 4, "glazing_type": 7, "isargonfilled": "false"}, {"name": "French Door", "type": 4, "u_value": 1.3, "data_source": 4, "frame_factor": 1.0, "glazing_type": 7, "isargonfilled": "false", "solar_transmittance": 0.38}], "secondary_heating": {"description": {"value": "None", "language": "1"}, "energy_efficiency_rating": 0, "environmental_efficiency_rating": 0}, "lowest_storey_area": 40.82, "lzc_energy_sources": [9], "sap_building_parts": [{"sap_roofs": [{"name": "Roof (1)", "u_value": 0.09, "roof_type": 2, "kappa_value": 9, "total_roof_area": 40.81999969482422}], "sap_walls": [{"name": "Walls (1)", "u_value": 0.19, "wall_type": 2, "kappa_value": 60, "total_wall_area": 91.61, "is_curtain_walling": "false"}, {"name": "Party Wall (1)", "u_value": 0, "wall_type": 4, "kappa_value": 110, "total_wall_area": 45.36, "is_curtain_walling": "false"}, {"name": "Internal Wall (1)", "u_value": 0, "wall_type": 5, "kappa_value": 9, "total_wall_area": 138.25, "is_curtain_walling": "false"}], "sap_openings": [{"name": "Opening 1", "type": "Door", "width": 2.14, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "Opening 2", "type": "Windows", "width": 4.67, "height": 1, "location": "Walls (1)", "orientation": 2}, {"name": "Opening 5", "type": "Windows", "width": 1.44, "height": 1, "location": "Walls (1)", "orientation": 8}, {"name": "Opening 6", "type": "Windows", "width": 1.4, "height": 1, "location": "Walls (1)", "orientation": 6}, {"name": "French Doors", "type": "French Door", "width": 3.8, "height": 1, "location": "Walls (1)", "orientation": 6}], "construction_year": 2022, "sap_thermal_bridges": {"thermal_bridges": [{"length": 4.9, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 3.88, "psi_value": 0.022, "psi_value_source": 1, "thermal_bridge_type": "E3"}, {"length": 13.06, "psi_value": 0.0296, "psi_value_source": 1, "thermal_bridge_type": "E4"}, {"length": 18.07, "psi_value": 0.076, "psi_value_source": 1, "thermal_bridge_type": "E5"}, {"length": 18.07, "psi_value": 0.002, "psi_value_source": 1, "thermal_bridge_type": "E6"}, {"length": 8.95, "psi_value": 0.0383, "psi_value_source": 1, "thermal_bridge_type": "E10"}, {"length": 9.12, "psi_value": 0.057, "psi_value_source": 1, "thermal_bridge_type": "E12"}, {"length": 10.14, "psi_value": 0.047, "psi_value_source": 1, "thermal_bridge_type": "E16"}, {"length": 8.4, "psi_value": 0.1, "psi_value_source": 4, "thermal_bridge_type": "E4"}, {"length": 1.81, "psi_value": 0.064, "psi_value_source": 1, "thermal_bridge_type": "E2"}, {"length": 10.14, "psi_value": 0.0343, "psi_value_source": 1, "thermal_bridge_type": "E18"}, {"length": 8.95, "psi_value": 0.06, "psi_value_source": 1, "thermal_bridge_type": "P1"}, {"length": 8.95, "psi_value": 0, "psi_value_source": 4, "thermal_bridge_type": "P2"}, {"length": 8.95, "psi_value": 0.033, "psi_value_source": 1, "thermal_bridge_type": "P4"}], "thermal_bridge_code": 5}, "building_part_number": 1, "sap_floor_dimensions": [{"storey": 0, "u_value": 0.12, "floor_type": 2, "kappa_value": 160, "storey_height": 2.38, "heat_loss_area": 40.82, "total_floor_area": 40.82}, {"storey": 1, "u_value": 0, "floor_type": 3, "kappa_value": 18, "storey_height": 2.69, "heat_loss_area": 0, "total_floor_area": 40.82, "kappa_value_from_below": 9}]}], "user_interface_name": "Design SAP 10", "windows_overshading": 2, "heating_cost_current": {"value": 174, "currency": "GBP"}, "co2_emissions_current": 0.3, "energy_rating_average": 60, "energy_rating_current": 86, "lighting_cost_current": {"value": 63, "currency": "GBP"}, "main_heating_controls": [{"description": {"value": "Time and temperature zone control", "language": "1"}, "energy_efficiency_rating": 5, "environmental_efficiency_rating": 5}], "has_hot_water_cylinder": "true", "heating_cost_potential": {"value": 197, "currency": "GBP"}, "hot_water_cost_current": {"value": 272, "currency": "GBP"}, "suggested_improvements": [{"sequence": 1, "typical_saving": {"value": 48, "currency": "GBP"}, "indicative_cost": "\u00a34,000 - \u00a37,000", "improvement_type": "N", "improvement_details": {"improvement_number": 19}, "improvement_category": 5, "energy_performance_rating": 87, "environmental_impact_rating": 97}, {"sequence": 2, "typical_saving": {"value": 323, "currency": "GBP"}, "indicative_cost": "\u00a38,000 - \u00a310,000", "improvement_type": "U", "improvement_details": {"improvement_number": 34}, "improvement_category": 5, "energy_performance_rating": 95, "environmental_impact_rating": 100}], "user_interface_version": "3.1.55", "co2_emissions_potential": 0.0, "energy_rating_potential": 95, "gas_smart_meter_present": "false", "lighting_cost_potential": {"value": 63, "currency": "GBP"}, "schema_version_original": "SAP-Schema-19.1.0", "hot_water_cost_potential": {"value": 201, "currency": "GBP"}, "is_in_smoke_control_area": "unknown", "seller_commission_report": "Y", "energy_consumption_current": 35, "has_fixed_air_conditioning": "false", "is_dwelling_export_capable": "true", "multiple_glazed_percentage": 100, "calculation_software_version": "3.1.55", "energy_consumption_potential": 12, "environmental_impact_current": 97, "current_energy_efficiency_band": "B", "environmental_impact_potential": 100, "electricity_smart_meter_present": "false", "has_heated_separate_conservatory": "false", "potential_energy_efficiency_band": "A", "co2_emissions_current_per_floor_area": 3.3} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/_coordinates.json b/tests/fixtures/epc_prediction/_coordinates.json new file mode 100644 index 00000000..9453d363 --- /dev/null +++ b/tests/fixtures/epc_prediction/_coordinates.json @@ -0,0 +1 @@ +{"10000796832": [-4.1133041, 50.3834015], "10000796833": [-4.1132369, 50.383409], "10000796835": [-4.1131012, 50.3834187], "10000796836": [-4.1130173, 50.3834342], "10000796837": [-4.1129365, 50.3834387], "10000796838": [-4.1128724, 50.3834497], "10000796839": [-4.1127981, 50.383452], "100021408528": [0.2533413, 51.5445726], "100021408529": [0.2530653, 51.5443274], "100021408530": [0.2534272, 51.5445038], "100021408531": [0.2531532, 51.5442804], "100021408533": [0.2532239, 51.5442099], "100021408534": [0.2536266, 51.5444153], "100021408537": [0.2533684, 51.5440718], "100021408541": [0.2534373, 51.5438067], "100021408542": [0.2538788, 51.544143], "100021408545": [0.2534824, 51.5436614], "100021408547": [0.2535236, 51.5435907], "100021408549": [0.2534377, 51.5435018], "100021408550": [0.2539776, 51.5438442], "100021408551": [0.2534967, 51.5434437], "100021408552": [0.2539885, 51.5437796], "100021408553": [0.2534557, 51.543349], "100021408554": [0.2540375, 51.5436961], "100021408557": [0.2540901, 51.5434687], "100021408559": [0.2541231, 51.5433195], "100022784848": [-0.2115926, 51.5310282], "100022784850": [-0.2116643, 51.5310383], "100022784858": [-0.2119243, 51.5310243], "100022784860": [-0.2120112, 51.5310166], "100022784864": [-0.2121264, 51.5310183], "100022784866": [-0.2121841, 51.5310192], "100022784868": [-0.2122417, 51.5310201], "100022784872": [-0.2123717, 51.5310131], "100022784874": [-0.2124441, 51.5310052], "100022784876": [-0.2125309, 51.5309975], "100022784886": [-0.211587, 51.5308033], "100022784888": [-0.2117023, 51.5308051], "100022784890": [-0.2118326, 51.5307891], "100022784892": [-0.2119908, 51.5308005], "100022784897": [-0.2122797, 51.5307869], "100022784899": [-0.2124245, 51.5307711], "100022784900": [-0.2124825, 51.530763], "100022784902": [-0.2126125, 51.530756], "100030465784": [-1.2323397, 52.7577937], "100030465789": [-1.2318599, 52.7575799], "100030465791": [-1.2316645, 52.7574789], "100030465795": [-1.2315068, 52.7573582], "100030465799": [-1.2313538, 52.7572406], "100030465801": [-1.2313077, 52.7571946], "100030465803": [-1.2312105, 52.7571228], "100030465811": [-1.2307981, 52.7568182], "100030465815": [-1.2305564, 52.7566543], "100030465833": [-1.2268354, 52.756818], "100030465837": [-1.2266034, 52.7566601], "100030465839": [-1.2265244, 52.7565966], "100030465844": [-1.2261953, 52.7563553], "100030465850": [-1.2258443, 52.7560454], "100040471327": [-4.1163877, 50.3832253], "100040471329": [-4.1162327, 50.3832191], "100040471336": [-4.1160226, 50.3832409], "100040471338": [-4.1159528, 50.3832512], "100040471350": [-4.1155741, 50.3832761], "100040471356": [-4.115364, 50.3832979], "100040471368": [-4.1149146, 50.383315], "100040471383": [-4.1144094, 50.3833422], "100040471385": [-4.1143391, 50.3833435], "100040471389": [-4.1142688, 50.3833448], "100040471395": [-4.114115, 50.3833656], "100040471400": [-4.1139741, 50.3833591], "100040471402": [-4.1138897, 50.3833607], "100040471409": [-4.11375, 50.3833812], "100040471411": [-4.1136801, 50.3833914], "100040471417": [-4.1134692, 50.3833953], "100051188769": [-1.7336723, 53.8133624], "100051188771": [-1.7338082, 53.8134796], "100051188774": [-1.7343552, 53.8134448], "100051188775": [-1.7339738, 53.8137136], "100051188776": [-1.7344154, 53.8135259], "100051188777": [-1.7340793, 53.8138397], "100051188778": [-1.7344607, 53.8135709], "100051188779": [-1.7341544, 53.8139837], "100051188780": [-1.7345209, 53.8136609], "100051188786": [-1.7346564, 53.813841], "100051188787": [-1.7349262, 53.8144168], "100051188788": [-1.7347319, 53.813922], "100051188789": [-1.7351542, 53.8143903], "100051188793": [-1.7356266, 53.8141397], "100051188796": [-1.7351566, 53.8140039], "100051188797": [-1.7357798, 53.8139243], "100051188798": [-1.7351874, 53.813941], "100051188801": [-1.7359936, 53.8137361], "100051188804": [-1.7353859, 53.8137617], "100051188806": [-1.7354318, 53.8137168], "100051188809": [-1.7355541, 53.8135913], "100061404210": [-0.5496017, 51.2442576], "100061404211": [-0.5495251, 51.2442811], "100061404212": [-0.5493686, 51.2443295], "100061404214": [-0.5493368, 51.2446181], "100061404223": [-0.5502158, 51.2447493], "100061404225": [-0.5502774, 51.2452345], "100061404226": [-0.5505002, 51.2451975], "100061404228": [-0.5507137, 51.2450263], "100061404229": [-0.550977, 51.2450406], "100061404231": [-0.5512038, 51.2448903], "100061404233": [-0.5509499, 51.2446685], "100061404235": [-0.5506393, 51.2445763], "100061404237": [-0.5504821, 51.2443993], "100061404239": [-0.550379, 51.2442493], "100071318864": [-1.5030685, 52.4104769], "100090075242": [-0.112468, 52.565015], "100090075244": [-0.1125134, 52.5649887], "100090075246": [-0.1125875, 52.5649809], "100090075253": [-0.1129399, 52.5650225], "100090075255": [-0.1128972, 52.5649859], "100090075257": [-0.112799, 52.5648674], "100090075259": [-0.1128587, 52.5648504], "100090075261": [-0.1129041, 52.5648241], "100090075267": [-0.113315, 52.5648757], "100090075269": [-0.1132832, 52.5649291], "100090075271": [-0.1133116, 52.5649565], "100090075273": [-0.1133547, 52.5649842], "100090075275": [-0.1133974, 52.5650208], "100090075277": [-0.1134257, 52.5650482], "100090075281": [-0.1131378, 52.5652235], "100090075283": [-0.1130781, 52.5652405], "100090075285": [-0.1130327, 52.5652668], "100090075287": [-0.1129124, 52.5653188], "100090075289": [-0.1128379, 52.5653356], "100090075291": [-0.1127333, 52.565402], "100090075293": [-0.1126859, 52.5654411], "100090075295": [-0.1125664, 52.5654751], "100090075297": [-0.1124604, 52.5654938], "100100583977": [-3.4059402, 51.75485], "100100583978": [-3.4060402, 51.7548038], "100100583979": [-3.406356, 51.7547101], "100100583980": [-3.4064426, 51.7547001], "100100583981": [-3.4065579, 51.7546807], "100100583982": [-3.4066298, 51.7546619], "100100583983": [-3.4067161, 51.7546429], "100100583984": [-3.4068024, 51.7546239], "10023041043": [-1.5026578, 52.4103943], "10090853539": [0.0018835, 51.530142], "10091715279": [-1.5030685, 52.4104769], "10091715280": [-1.5030685, 52.4104769], "10091715281": [-1.5030685, 52.4104769], "10093129133": [0.0018835, 51.530142], "10093129134": [0.0018835, 51.530142], "10093129137": [0.0018835, 51.530142], "10093129143": [0.0018835, 51.530142], "10093129146": [0.0018835, 51.530142], "10093129152": [0.0018835, 51.530142], "10093129155": [0.0018835, 51.530142], "10093129157": [0.0018835, 51.530142], "10093129168": [0.0018835, 51.530142], "10093129169": [0.0018835, 51.530142], "10093129170": [0.0018835, 51.530142], "10093129171": [0.0018835, 51.530142], "10093129172": [0.0018835, 51.530142], "10093129176": [0.0018835, 51.530142], "10093129181": [0.0018835, 51.530142], "10093129186": [0.0018835, 51.530142], "10093129188": [0.0018835, 51.530142], "10093129190": [0.0018835, 51.530142], "10093129191": [0.0018835, 51.530142], "10093129196": [0.0018835, 51.530142], "10093945833": [-1.5028045, 52.4104219], "11010967": [-0.0753479, 53.569072], "11010968": [-0.0751069, 53.5690591], "11028505": [-0.0757651, 53.5691956], "11044320": [-0.0754833, 53.5690832], "11048258": [-0.0750019, 53.5690465], "207112000": [-0.0719068, 51.6423193], "207112001": [-0.0716339, 51.6422789], "207112295": [-0.0715328, 51.6422772], "207112979": [-0.0710874, 51.6422159], "207113820": [-0.0714032, 51.6422661], "207113821": [-0.0713029, 51.6422464], "207113822": [-0.0711869, 51.6422535]} \ No newline at end of file diff --git a/tests/fixtures/epc_prediction/_index.json b/tests/fixtures/epc_prediction/_index.json new file mode 100644 index 00000000..c868f242 --- /dev/null +++ b/tests/fixtures/epc_prediction/_index.json @@ -0,0 +1,312 @@ +{ + "CV15QJ": [ + "cert-f9dee3ea91ac", + "cert-840682d5f191", + "cert-73d50930d0ac", + "cert-526df35482d7", + "cert-fc5fe3d2a055", + "cert-8105f351163f", + "cert-346dc8ab15a0", + "cert-1b4b3d26f79c" + ], + "RM143YU": [ + "cert-13b0e4c085a1", + "cert-8c6945676927", + "cert-73504c02d38b", + "cert-46231289c9c8", + "cert-9124910a43bd", + "cert-20ba6a050f47", + "cert-e0092f52f8d0", + "cert-86b54caf4ff4", + "cert-06dd4ab9474a", + "cert-10c9fc509969", + "cert-ef7108c2ef93", + "cert-720d5771bfd7", + "cert-d32b112ed162", + "cert-854f49ab70db", + "cert-6bde4cfcf10f", + "cert-7bc8560fb4f5", + "cert-599e37dc5fcc", + "cert-fc5e9d928216", + "cert-c93fcb1d9cf7", + "cert-6f28f47a317d", + "cert-728a620566a1", + "cert-b9251277c24d" + ], + "DN327BH": [ + "cert-b2f03024d9a1", + "cert-0c3791e9d4ff", + "cert-836df153600a", + "cert-0402dc341842", + "cert-c48e73075389" + ], + "GU12ND": [ + "cert-4a32c3482c0b", + "cert-c6cdd21e7426", + "cert-f91c1d926509", + "cert-d6940361cc43", + "cert-cd700fbba191", + "cert-15f76098044f", + "cert-746d1470b732", + "cert-5ade569b7992", + "cert-4144a0a59432", + "cert-49c1b9f2665b", + "cert-30e6ad17ace1", + "cert-b582d4837933", + "cert-aea21e4564cc", + "cert-596f6e03bf26", + "cert-2f7832c103ac", + "cert-3fcddd98b25e", + "cert-440a9e06b4ff", + "cert-797f40114a59" + ], + "EN12PU": [ + "cert-040368bb642d", + "cert-0f29be810bed", + "cert-0ad8443821d5", + "cert-20ebf6ff4e97", + "cert-fe6faf36381f", + "cert-08627d0739e2", + "cert-0660c5366da9", + "cert-1bbc01d15d4c", + "cert-19b2aea93797", + "cert-60e676acb734" + ], + "RG13NS": [ + "cert-fe6e513ab355", + "cert-a97a2552889a", + "cert-89bd9a976d69", + "cert-275720156db0", + "cert-83fa2282454e", + "cert-fc680ac36a75", + "cert-7e14aa2076f0", + "cert-61d34287b460", + "cert-57f30bfdbe7b", + "cert-2f49ca73f5bd", + "cert-e5d8f7fa5244", + "cert-9cff43efea45", + "cert-8978dcc72852", + "cert-e65f100dfd90", + "cert-68447442fa47", + "cert-012fa6bcc804", + "cert-3711c927db34", + "cert-ec11e653a063", + "cert-e54b3a80a018", + "cert-b3dda6bae036", + "cert-4e21bc8153e8", + "cert-e67ca51531ad", + "cert-30dc65e9be56", + "cert-219c647f317c", + "cert-4b7df9c37060" + ], + "E153FA": [ + "cert-486444742055", + "cert-acbdc6227e39", + "cert-8ef979bd232d", + "cert-76b6fa0e95e6", + "cert-b2ea6b08493d", + "cert-a22930e3cac6", + "cert-2d0b11c96e70", + "cert-57892e818162", + "cert-05dd23b424ce", + "cert-a511bb525a56", + "cert-c45ffd28e947", + "cert-2dc2ae2de152", + "cert-be62fb9fa85e", + "cert-8302c7e8ef17", + "cert-63aab4ceadcb", + "cert-b1ffcc93cf6f", + "cert-21c48aaf77bc", + "cert-0a2ed0dc5163", + "cert-0348cfa1f7fb", + "cert-dacaed6475e2", + "cert-aecc7219ecf0", + "cert-638aadec0643", + "cert-347869ac4a1a", + "cert-54bfdb4d1c09", + "cert-8be823987a0d" + ], + "CV78UG": [ + "cert-0246fdfa9718", + "cert-cd99c8b93a27", + "cert-e8197b1db767", + "cert-89894e90fc9c", + "cert-aef738e4b1c0", + "cert-91dd248e55ee", + "cert-7d9beea6555e", + "cert-94454d5d782e", + "cert-ba51394914cf", + "cert-9b4787ad7813", + "cert-9c0b5437b98b", + "cert-2e6f5943059a", + "cert-924d78d64f06" + ], + "LE113PX": [ + "cert-a926697da348", + "cert-1d3b9feac3b4", + "cert-2b41b08a0fc6", + "cert-69291a9f2084", + "cert-3ac4ad7fc9b2", + "cert-038030a6cec7", + "cert-64ceff1522b9", + "cert-ba628e4f9cbf", + "cert-2c24bd4c5687", + "cert-88d62becedd7", + "cert-ae072d6b7841", + "cert-5b9ac305ad46", + "cert-8d827d3ff7df", + "cert-805962966496", + "cert-0d3fbf862032", + "cert-89b00a658503", + "cert-43357661bc7f" + ], + "PE71NT": [ + "cert-508b303ae8b9", + "cert-224f1ce8cb64", + "cert-460c2d58495c", + "cert-5def81fe86c4", + "cert-a84d17d26bad", + "cert-c86e5701dc90", + "cert-b45627ecc223", + "cert-99a1e6622b01", + "cert-6869127bdda3", + "cert-21b634bc4b59", + "cert-97d0dabaac20", + "cert-d2364db0dfd0", + "cert-1d45251c4fcc", + "cert-8a3078720253", + "cert-8b40d6410b80", + "cert-8c68ea944ce9", + "cert-b7c9160cefd9", + "cert-54bbc1fadbf7", + "cert-26619d8e7f8e", + "cert-91fd87067727", + "cert-930bb8ec03a9", + "cert-59bcc003ab93", + "cert-927d8fb46c85", + "cert-215907dd8cab", + "cert-8abc9d149c76" + ], + "CF481ND": [ + "cert-96d09ac53f57", + "cert-8a1b88d2a80a", + "cert-0dd25677d889", + "cert-5b3816460805", + "cert-e54dae311758", + "cert-6e6d1776f8b7", + "cert-7791c2c9073d", + "cert-3077aedcbe8b", + "cert-6030fde8e888", + "cert-5aad1cfe207c", + "cert-f5de74d7fffc", + "cert-ca16b6a09f55" + ], + "PL36BL": [ + "cert-89e434c273da", + "cert-4c92c05a7872", + "cert-c3b3c1b65da2", + "cert-85ef6b6fb9d7", + "cert-b84d67cbebb2", + "cert-0b44fb2b512e", + "cert-a59856f2585e", + "cert-9ba483c38571", + "cert-0073289bd539", + "cert-886e9a131657", + "cert-2cfdb30266e5", + "cert-be94d604163d", + "cert-d143c59c1539", + "cert-55420d5fff65", + "cert-57002765c222", + "cert-427bab8c0ce3", + "cert-b7159c96c56a", + "cert-dc4bd2310e04", + "cert-e5caf6a54908", + "cert-7748ba172c7d", + "cert-39d5c1b47fad", + "cert-7857da83454e", + "cert-13ca8619948b", + "cert-407fc878c72c", + "cert-d2d80ec7d995" + ], + "BD24JG": [ + "cert-15c0ce8ea563", + "cert-496b8c226d26", + "cert-f481cd1abc1f", + "cert-6439eb9f1504", + "cert-8d1b1e15063c", + "cert-d1396ff56fec", + "cert-208c5dfbaee2", + "cert-4cce4c3fb33b", + "cert-eed1ed76757a", + "cert-cc1c722822ba", + "cert-eb71d39605ae", + "cert-5e427854bd6d", + "cert-dcb2c6ff3317", + "cert-f089b44ae169", + "cert-e648d6164f10", + "cert-5f4d37dacdf8", + "cert-7e61d706db57", + "cert-e8c34b2323e0", + "cert-d7e3196e1a0c", + "cert-01f1488000e8", + "cert-75aa70bdd22a", + "cert-f3aae3d2c3c9", + "cert-f326c2524ab3", + "cert-f52356b57b37", + "cert-1ef220911b4b" + ], + "W104HL": [ + "cert-80729c033186", + "cert-784f6ac96b11", + "cert-da229c5051b4", + "cert-82f19e8a1d12", + "cert-7f13ce574386", + "cert-fdb7d8dcc402", + "cert-b180ada05905", + "cert-c99dbb94e07d", + "cert-319c92383e50", + "cert-12e3aec4db53", + "cert-f8f650d8a598", + "cert-c1c558b665e4", + "cert-62b545a4a1aa", + "cert-b58783a23f96", + "cert-7f945fa04966", + "cert-db58af092f54", + "cert-4783505481c9", + "cert-7cb4490ee346", + "cert-e2c4a36966b6", + "cert-006fcca19e8e", + "cert-334412a166a0", + "cert-f96b9b6f471b", + "cert-030dfe4e4da3", + "cert-17063430c61f", + "cert-840b1ec0da75" + ], + "WA53GF": [ + "cert-c4f92dc0fdfc", + "cert-db5ad28095a9", + "cert-cbaf14e590bb", + "cert-43145c5e02b8", + "cert-3a7004baf858", + "cert-a008344b0613", + "cert-fb608eeb2742", + "cert-2cff3dfaefbd", + "cert-b45e259b2219", + "cert-fde64f618453", + "cert-0b3aada57a2b", + "cert-5b0beaa2d6f7", + "cert-35933f8fabe9", + "cert-18249db041df", + "cert-d737f1f8d9b8", + "cert-0bcbc7bf951d", + "cert-1940f1e78ab9", + "cert-8e82fef5b13d", + "cert-10e5f1e68812", + "cert-4e0af0241416", + "cert-70557e2087a0", + "cert-e4670222a4be", + "cert-ece39f55e78d", + "cert-3619d642221c", + "cert-030ab0b24dfb" + ] +} \ No newline at end of file diff --git a/tests/harness/test_epc_prediction_corpus.py b/tests/harness/test_epc_prediction_corpus.py new file mode 100644 index 00000000..877739d8 --- /dev/null +++ b/tests/harness/test_epc_prediction_corpus.py @@ -0,0 +1,96 @@ +"""Behaviour of the EPC Prediction corpus anonymiser (ADR-0030): de-identify a +cert payload for the committed fixture without disturbing the component data the +scorer reads. Pure dict-in / dict-out. +""" + +import json +from pathlib import Path + +from domain.geospatial.coordinates import Coordinates +from harness.epc_prediction_corpus import load_coordinates, anonymise_payload + + +def _payload() -> dict[str, object]: + return { + "address_line_1": "12 Acacia Avenue", + "address_line_2": "Hyde Park", + "post_town": "LEEDS", + "certificate_number": "1234-5678-9012-3456-7890", + "postcode": "LS6 1AA", + "sap_version": 10.2, + "energy_rating_current": 72, + "sap_building_parts": [{"wall_construction": 1}], + } + + +def test_hashes_identifiers_and_blanks_address_lines() -> None: + # Arrange + raw = _payload() + + # Act + anon = anonymise_payload(raw) + + # Assert — the street address + cert number are replaced by opaque tokens, + # the secondary address lines blanked. + assert anon["address_line_1"] != "12 Acacia Avenue" + assert str(anon["address_line_1"]).startswith("addr-") + assert str(anon["certificate_number"]).startswith("cert-") + assert anon["address_line_2"] == "" + assert anon["post_town"] == "" + + +def test_keeps_postcode_and_component_fields() -> None: + # Arrange + raw = _payload() + + # Act + anon = anonymise_payload(raw) + + # Assert — postcode (coarse, the cohort key) and all component / lodged data + # survive untouched. + assert anon["postcode"] == "LS6 1AA" + assert anon["sap_version"] == 10.2 + assert anon["energy_rating_current"] == 72 + assert anon["sap_building_parts"] == [{"wall_construction": 1}] + + +def test_address_hash_is_stable_for_dedup() -> None: + # Arrange — the same address re-lodged with trivial whitespace/case noise. + a = anonymise_payload({"address_line_1": "Flat 3"}) + b = anonymise_payload({"address_line_1": " FLAT 3 "}) + + # Act / Assert — both normalise to the same token, so the dedup-by-address + # leave-one-out still collapses re-lodgements in the fixture. + assert a["address_line_1"] == b["address_line_1"] + + +def test_does_not_mutate_the_input() -> None: + # Arrange + raw = _payload() + + # Act + anonymise_payload(raw) + + # Assert — the caller's payload is left intact. + assert raw["address_line_1"] == "12 Acacia Avenue" + + +def test_loads_the_coordinates_sidecar(tmp_path: Path) -> None: + # Arrange — a `_coordinates.json` sidecar mapping UPRN -> [lon, lat]. + (tmp_path / "_coordinates.json").write_text( + json.dumps({"100024": [-1.5, 53.4]}) + ) + + # Act + coordinates = load_coordinates(tmp_path) + + # Assert — parsed into UPRN-keyed Coordinates. + assert coordinates == {100024: Coordinates(longitude=-1.5, latitude=53.4)} + + +def test_coordinates_sidecar_absent_yields_empty(tmp_path: Path) -> None: + # Arrange / Act — no sidecar present (a corpus without geo data). + coordinates = load_coordinates(tmp_path) + + # Assert — geo-weighting simply stays off. + assert coordinates == {} diff --git a/tests/orchestration/fakes.py b/tests/orchestration/fakes.py index 0395abf4..72f7cb4b 100644 --- a/tests/orchestration/fakes.py +++ b/tests/orchestration/fakes.py @@ -20,7 +20,7 @@ from domain.property.property import Property from repositories.plan.plan_repository import PlanRepository from repositories.product.product_repository import ProductRepository from repositories.property_baseline.property_baseline_repository import PropertyBaselineRepository -from repositories.epc.epc_repository import EpcRepository +from repositories.epc.epc_repository import EpcRepository, EpcSource from repositories.property.property_repository import ( PropertyIdentityInsert, PropertyRepository, @@ -76,16 +76,24 @@ class FakeEpcRepo(EpcRepository): def __init__(self, by_property: Optional[dict[int, EpcPropertyData]] = None) -> None: self.saved: list[tuple[EpcPropertyData, Optional[int]]] = [] self._by_property = by_property or {} + # Predicted EPCs live in their own slot, coexisting with lodged (ADR-0031). + self._predicted_by_property: dict[int, EpcPropertyData] = {} def save( self, data: EpcPropertyData, property_id: Optional[int] = None, portfolio_id: Optional[int] = None, + source: EpcSource = "lodged", ) -> int: self.saved.append((data, property_id)) if property_id is not None: - self._by_property[property_id] = data + slot = ( + self._predicted_by_property + if source == "predicted" + else self._by_property + ) + slot[property_id] = data return len(self.saved) def get(self, epc_property_id: int) -> EpcPropertyData: # pragma: no cover @@ -94,6 +102,11 @@ class FakeEpcRepo(EpcRepository): def get_for_property(self, property_id: int) -> Optional[EpcPropertyData]: return self._by_property.get(property_id) + def get_predicted_for_property( + self, property_id: int + ) -> Optional[EpcPropertyData]: + return self._predicted_by_property.get(property_id) + def get_for_properties( self, property_ids: list[int] ) -> dict[int, EpcPropertyData]: @@ -103,6 +116,15 @@ class FakeEpcRepo(EpcRepository): if property_id in self._by_property } + def get_predicted_for_properties( + self, property_ids: list[int] + ) -> dict[int, EpcPropertyData]: + return { + property_id: self._predicted_by_property[property_id] + for property_id in property_ids + if property_id in self._predicted_by_property + } + class FakeSolarRepo(SolarRepository): """In-memory Google Solar insights store keyed by UPRN. Seed `by_uprn` to diff --git a/tests/orchestration/test_ingestion_prediction.py b/tests/orchestration/test_ingestion_prediction.py new file mode 100644 index 00000000..a3917dad --- /dev/null +++ b/tests/orchestration/test_ingestion_prediction.py @@ -0,0 +1,204 @@ +"""IngestionOrchestrator predicts an EPC for an EPC-less Property and persists it +to the predicted slot (ADR-0031 slice-5e). Tested against fakes — no IO. The +prediction collaborators are optional; when unwired, ingestion is unchanged.""" + +from __future__ import annotations + +import json +from datetime import date +from pathlib import Path +from typing import Any, Optional + +from datatypes.epc.domain.epc_property_data import EpcPropertyData +from datatypes.epc.domain.mapper import EpcPropertyDataMapper +from domain.epc_prediction.comparable_properties import ComparableProperty +from domain.epc_prediction.epc_prediction import EpcPrediction +from domain.epc_prediction.prediction_target import PredictionTargetAttributes +from domain.geospatial.coordinates import Coordinates +from domain.geospatial.planning_restrictions import PlanningRestrictions +from domain.geospatial.spatial_reference import SpatialReference +from domain.property.property import Property, PropertyIdentity +from orchestration.ingestion_orchestrator import IngestionOrchestrator +from repositories.geospatial.geospatial_repository import GeospatialRepository +from tests.orchestration.fakes import ( + FakeEpcRepo, + FakePropertyRepo, + FakeSolarRepo, + FakeUnitOfWork, +) + +_JSON_SAMPLES = Path(__file__).resolve().parents[2] / "backend/epc_api/json_samples" + + +def _epc() -> EpcPropertyData: + raw: dict[str, Any] = json.loads( + (_JSON_SAMPLES / "RdSAP-Schema-21.0.0" / "epc.json").read_text() + ) + return EpcPropertyDataMapper.from_api_response(raw) + + +def _property(uprn: Optional[int], postcode: str = "A0 0AA") -> Property: + return Property( + identity=PropertyIdentity( + portfolio_id=1, postcode=postcode, address="1 Some Street", uprn=uprn + ) + ) + + +class _FakeEpcFetcher: + def __init__(self, epc: Optional[EpcPropertyData]) -> None: + self.epc = epc + + def get_by_uprn(self, uprn: int) -> Optional[EpcPropertyData]: + return self.epc + + +class _FakeGeospatialRepo(GeospatialRepository): + def __init__(self, coordinates: Optional[Coordinates]) -> None: + self._reference = ( + SpatialReference(coordinates=coordinates, restrictions=PlanningRestrictions()) + if coordinates is not None + else None + ) + + def coordinates_for(self, uprn: int) -> Optional[Coordinates]: + return self._reference.coordinates if self._reference is not None else None + + def spatial_for(self, uprn: int) -> Optional[SpatialReference]: + return self._reference + + +class _FakeSolarFetcher: + def get_building_insights( + self, longitude: float, latitude: float + ) -> dict[str, Any]: + return {} + + +class _FakeComparablesRepo: + def __init__(self, candidates: list[ComparableProperty]) -> None: + self._candidates = candidates + self.searched: list[str] = [] + + def candidates_for(self, postcode: str) -> list[ComparableProperty]: + self.searched.append(postcode) + return self._candidates + + +class _FakeAttributesReader: + def __init__(self, attributes: PredictionTargetAttributes) -> None: + self._attributes = attributes + + def attributes_for(self, property_id: int) -> PredictionTargetAttributes: + return self._attributes + + +def _cohort() -> list[ComparableProperty]: + # Three same-type neighbours (property_type "0"), distinct addresses so the + # dedupe keeps all three. + return [ + ComparableProperty( + epc=_epc(), + certificate_number=f"CERT-{i}", + address=f"{i} Some Street", + registration_date=date(2023, 1, i + 1), + ) + for i in range(3) + ] + + +def test_epc_less_property_is_predicted_and_persisted_to_the_predicted_slot() -> None: + # Arrange — no lodged EPC, a known property type, and a same-type cohort. + epc_repo = FakeEpcRepo() + uow = FakeUnitOfWork( + property=FakePropertyRepo({10: _property(uprn=12345)}), + epc=epc_repo, + solar=FakeSolarRepo(), + ) + comparables_repo = _FakeComparablesRepo(_cohort()) + orchestrator = IngestionOrchestrator( + unit_of_work=lambda: uow, + epc_fetcher=_FakeEpcFetcher(None), + geospatial_repo=_FakeGeospatialRepo( + Coordinates(longitude=-0.1, latitude=51.5) + ), + solar_fetcher=_FakeSolarFetcher(), + comparables_repo=comparables_repo, + prediction_attributes_reader=_FakeAttributesReader( + PredictionTargetAttributes(property_type="0") + ), + epc_prediction=EpcPrediction(), + ) + + # Act + orchestrator.run([10]) + + # Assert — a prediction was synthesised from the postcode cohort and persisted + # to the predicted slot; the lodged slot stays empty. + assert comparables_repo.searched == ["A0 0AA"] + predicted = epc_repo.get_predicted_for_property(10) + assert predicted is not None + assert predicted.property_type == "0" + assert epc_repo.get_for_property(10) is None + assert uow.commits == 1 + + +def test_unknown_property_type_gates_the_property_out_of_prediction() -> None: + # Arrange — EPC-less, but the property type could not be resolved. + epc_repo = FakeEpcRepo() + uow = FakeUnitOfWork( + property=FakePropertyRepo({10: _property(uprn=12345)}), + epc=epc_repo, + solar=FakeSolarRepo(), + ) + comparables_repo = _FakeComparablesRepo(_cohort()) + orchestrator = IngestionOrchestrator( + unit_of_work=lambda: uow, + epc_fetcher=_FakeEpcFetcher(None), + geospatial_repo=_FakeGeospatialRepo(Coordinates(longitude=-0.1, latitude=51.5)), + solar_fetcher=_FakeSolarFetcher(), + comparables_repo=comparables_repo, + prediction_attributes_reader=_FakeAttributesReader( + PredictionTargetAttributes(property_type=None) + ), + epc_prediction=EpcPrediction(), + ) + + # Act + orchestrator.run([10]) + + # Assert — gated out: no cohort fetched, nothing predicted or persisted. + assert comparables_repo.searched == [] + assert epc_repo.get_predicted_for_property(10) is None + assert epc_repo.get_for_property(10) is None + + +def test_a_lodged_epc_is_not_predicted_over() -> None: + # Arrange — a real EPC is fetched, so prediction must not run. + lodged = _epc() + epc_repo = FakeEpcRepo() + uow = FakeUnitOfWork( + property=FakePropertyRepo({10: _property(uprn=12345)}), + epc=epc_repo, + solar=FakeSolarRepo(), + ) + comparables_repo = _FakeComparablesRepo(_cohort()) + orchestrator = IngestionOrchestrator( + unit_of_work=lambda: uow, + epc_fetcher=_FakeEpcFetcher(lodged), + geospatial_repo=_FakeGeospatialRepo(Coordinates(longitude=-0.1, latitude=51.5)), + solar_fetcher=_FakeSolarFetcher(), + comparables_repo=comparables_repo, + prediction_attributes_reader=_FakeAttributesReader( + PredictionTargetAttributes(property_type="0") + ), + epc_prediction=EpcPrediction(), + ) + + # Act + orchestrator.run([10]) + + # Assert — the lodged EPC is saved; no cohort fetch, no predicted slot. + assert comparables_repo.searched == [] + assert epc_repo.get_for_property(10) == lodged + assert epc_repo.get_predicted_for_property(10) is None diff --git a/tests/repositories/comparable_properties/__init__.py b/tests/repositories/comparable_properties/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/repositories/comparable_properties/test_epc_comparable_properties_repository.py b/tests/repositories/comparable_properties/test_epc_comparable_properties_repository.py new file mode 100644 index 00000000..662d5b75 --- /dev/null +++ b/tests/repositories/comparable_properties/test_epc_comparable_properties_repository.py @@ -0,0 +1,128 @@ +"""EpcComparablePropertiesRepository — assembles the candidate cohort for EPC +Prediction from the postcode search, per-cert fetch, and batch coordinate +resolution (ADR-0029 cohort port, wired in ADR-0031 slice-5b).""" + +from __future__ import annotations + +import json +from datetime import date +from pathlib import Path +from typing import Any, Optional + +from datatypes.epc.domain.epc_property_data import EpcPropertyData +from datatypes.epc.domain.mapper import EpcPropertyDataMapper +from datatypes.epc.search.epc_search_result import EpcSearchResult +from domain.geospatial.coordinates import Coordinates +from repositories.comparable_properties.epc_comparable_properties_repository import ( + EpcComparablePropertiesRepository, +) + +_JSON_SAMPLES = Path(__file__).resolve().parents[3] / "backend/epc_api/json_samples" + + +def _epc() -> EpcPropertyData: + raw: dict[str, Any] = json.loads( + (_JSON_SAMPLES / "RdSAP-Schema-21.0.0" / "epc.json").read_text() + ) + return EpcPropertyDataMapper.from_api_response(raw) + + +def _result( + cert: str, uprn: Optional[int], registration_date: str = "2023-12-01" +) -> EpcSearchResult: + return EpcSearchResult( + certificate_number=cert, + address_line_1="1 Some Street", + address_line_2=None, + address_line_3=None, + address_line_4=None, + postcode="LS6 1AA", + post_town="LEEDS", + uprn=uprn, + current_energy_efficiency_band="D", + registration_date=registration_date, + ) + + +class _FakeEpcClient: + """Records the postcode searched and serves a fixed cohort + per-cert EPC.""" + + def __init__(self, results: list[EpcSearchResult]) -> None: + self._results = results + self.searched_postcode: Optional[str] = None + + def search_by_postcode(self, postcode: str) -> list[EpcSearchResult]: + self.searched_postcode = postcode + return self._results + + def get_by_certificate_number(self, cert_num: str) -> EpcPropertyData: + return _epc() + + +class _FakeGeospatial: + """Serves coordinates for a fixed UPRN set; records the batch it was asked for.""" + + def __init__(self, coords: dict[int, Coordinates]) -> None: + self._coords = coords + self.batches: list[list[int]] = [] + + def coordinates_for(self, uprn: int) -> Optional[Coordinates]: + return self._coords.get(uprn) + + def coordinates_for_uprns(self, uprns: list[int]) -> dict[int, Coordinates]: + self.batches.append(uprns) + return {u: c for u, c in self._coords.items() if u in uprns} + + +def test_candidates_for_assembles_a_comparable_per_cert() -> None: + # Arrange — one cert in the postcode, with a resolvable UPRN coordinate. + here = Coordinates(longitude=-1.55, latitude=53.81) + client = _FakeEpcClient([_result("CERT-1", uprn=12345)]) + geospatial = _FakeGeospatial({12345: here}) + repo = EpcComparablePropertiesRepository(client, geospatial) + + # Act + candidates = repo.candidates_for("LS6 1AA") + + # Assert — the register metadata is threaded onto the ComparableProperty. + assert len(candidates) == 1 + comparable = candidates[0] + assert comparable.certificate_number == "CERT-1" + assert comparable.address == "1 Some Street" + assert comparable.registration_date == date(2023, 12, 1) + assert comparable.coordinates is here + assert comparable.epc is not None + + +def test_a_cert_without_a_uprn_has_no_coordinates_and_coords_are_one_batch() -> None: + # Arrange — two certs share the postcode; one has no UPRN to resolve. + here = Coordinates(longitude=-1.55, latitude=53.81) + client = _FakeEpcClient( + [_result("CERT-1", uprn=12345), _result("CERT-2", uprn=None)] + ) + geospatial = _FakeGeospatial({12345: here}) + repo = EpcComparablePropertiesRepository(client, geospatial) + + # Act + candidates = repo.candidates_for("LS6 1AA") + + # Assert — the UPRN-less cert is kept but uncoordinated; coordinates were + # resolved in a single batched read of just the present UPRNs. + by_cert = {c.certificate_number: c for c in candidates} + assert by_cert["CERT-1"].coordinates is here + assert by_cert["CERT-2"].coordinates is None + assert geospatial.batches == [[12345]] + + +def test_no_certs_in_the_postcode_yields_no_candidates() -> None: + # Arrange — an empty postcode cohort (the search returns nothing). + client = _FakeEpcClient([]) + geospatial = _FakeGeospatial({}) + repo = EpcComparablePropertiesRepository(client, geospatial) + + # Act + candidates = repo.candidates_for("LS6 1AA") + + # Assert — no candidates, and the postcode was searched (normalisation/IO ran). + assert candidates == [] + assert client.searched_postcode == "LS6 1AA" diff --git a/tests/repositories/epc/test_epc_predicted_slot.py b/tests/repositories/epc/test_epc_predicted_slot.py new file mode 100644 index 00000000..7fc2abd2 --- /dev/null +++ b/tests/repositories/epc/test_epc_predicted_slot.py @@ -0,0 +1,82 @@ +"""EPC store gains a `source` discriminator so a lodged EPC and a predicted EPC +(EPC Prediction gap-fill) coexist per property — ADR-0031 slice-5c.""" + +from __future__ import annotations + +import json +from pathlib import Path +from typing import Any + +from sqlalchemy import Engine +from sqlmodel import Session + +from datatypes.epc.domain.epc_property_data import EpcPropertyData +from datatypes.epc.domain.mapper import EpcPropertyDataMapper +from repositories.epc.epc_postgres_repository import EpcPostgresRepository + +_JSON_SAMPLES = Path(__file__).resolve().parents[3] / "backend/epc_api/json_samples" + + +def _epc() -> EpcPropertyData: + raw: dict[str, Any] = json.loads( + (_JSON_SAMPLES / "RdSAP-Schema-21.0.0" / "epc.json").read_text() + ) + return EpcPropertyDataMapper.from_api_response(raw) + + +def test_lodged_and_predicted_epcs_coexist_per_property(db_engine: Engine) -> None: + # Arrange — the same property gets a lodged EPC and a predicted EPC. + epc = _epc() + with Session(db_engine) as session: + repo = EpcPostgresRepository(session) + repo.save(epc, property_id=42) + repo.save(epc, property_id=42, source="predicted") + session.commit() + + # Act + with Session(db_engine) as session: + repo = EpcPostgresRepository(session) + lodged = repo.get_for_property(42) + predicted = repo.get_predicted_for_property(42) + + # Assert — both slots are populated independently; neither overwrote the other. + assert lodged == epc + assert predicted == epc + + +def test_re_saving_a_predicted_epc_leaves_the_lodged_one_intact( + db_engine: Engine, +) -> None: + # Arrange — a lodged EPC, then a predicted one saved twice (idempotent re-run). + epc = _epc() + with Session(db_engine) as session: + repo = EpcPostgresRepository(session) + repo.save(epc, property_id=7) + repo.save(epc, property_id=7, source="predicted") + repo.save(epc, property_id=7, source="predicted") + session.commit() + + # Act + with Session(db_engine) as session: + repo = EpcPostgresRepository(session) + lodged = repo.get_for_property(7) + predicted_bulk = repo.get_predicted_for_properties([7]) + + # Assert — the lodged slot survived the predicted re-saves; bulk read finds it. + assert lodged == epc + assert predicted_bulk == {7: epc} + + +def test_a_lodged_only_property_has_no_predicted_epc(db_engine: Engine) -> None: + # Arrange — only a lodged EPC is saved. + epc = _epc() + with Session(db_engine) as session: + repo = EpcPostgresRepository(session) + repo.save(epc, property_id=9) + session.commit() + + # Act / Assert — the predicted slot is empty; the lodged one is unaffected. + with Session(db_engine) as session: + repo = EpcPostgresRepository(session) + assert repo.get_predicted_for_property(9) is None + assert repo.get_for_property(9) == epc diff --git a/tests/repositories/geospatial/test_geospatial_repository.py b/tests/repositories/geospatial/test_geospatial_repository.py index a85bb468..2f0b9873 100644 --- a/tests/repositories/geospatial/test_geospatial_repository.py +++ b/tests/repositories/geospatial/test_geospatial_repository.py @@ -131,3 +131,60 @@ def test_spatial_for_returns_none_when_uprn_absent(tmp_path: Path) -> None: # Act / Assert assert repo.spatial_for(99999) is None + + +def _write_two_partition_open_uprn(base: Path) -> None: + """Two UPRN-range partitions, so the batch lookup must span both.""" + spatial = base / "spatial" + spatial.mkdir(parents=True, exist_ok=True) + pd.DataFrame( + { + "lower": [0, 100001], + "upper": [100000, 200000], + "filenames": ["0_100000.parquet", "100001_200000.parquet"], + } + ).to_parquet(spatial / "filename_meta.parquet") + pd.DataFrame( + {"UPRN": [10, 11], "LATITUDE": [51.0, 51.1], "LONGITUDE": [-1.0, -1.1]} + ).to_parquet(spatial / "0_100000.parquet") + pd.DataFrame( + {"UPRN": [150000], "LATITUDE": [52.0], "LONGITUDE": [-2.0]} + ).to_parquet(spatial / "100001_200000.parquet") + + +def test_coordinates_for_uprns_resolves_a_batch_across_partitions( + tmp_path: Path, +) -> None: + # Arrange — UPRNs spanning two partitions, plus one absent and one off-scale. + _write_two_partition_open_uprn(tmp_path) + repo = GeospatialS3Repository(_reader(tmp_path)) + + # Act + resolved = repo.coordinates_for_uprns([10, 11, 150000, 99999, 500000]) + + # Assert — present UPRNs resolved; absent (99999) and uncovered (500000) omitted. + assert resolved == { + 10: Coordinates(longitude=-1.0, latitude=51.0), + 11: Coordinates(longitude=-1.1, latitude=51.1), + 150000: Coordinates(longitude=-2.0, latitude=52.0), + } + + +def test_coordinates_for_uprns_reads_each_partition_once(tmp_path: Path) -> None: + # Arrange — count reads so co-located UPRNs don't re-read their partition. + _write_two_partition_open_uprn(tmp_path) + reads: list[str] = [] + + def counting_reader(key: str) -> pd.DataFrame: + reads.append(key) + return pd.read_parquet(tmp_path / key) + + repo = GeospatialS3Repository(counting_reader) + + # Act — two UPRNs share partition 0; one is in partition 1. + repo.coordinates_for_uprns([10, 11, 150000]) + + # Assert — the meta once + each of the two partitions once (3 reads, not 4). + assert reads.count("spatial/0_100000.parquet") == 1 + assert reads.count("spatial/100001_200000.parquet") == 1 + assert reads.count("spatial/filename_meta.parquet") == 1