Model/tests
Khalim Conn-Kowlessar 1696cccba6 feat(ingestion): IngestionOrchestrator end-to-end (#1134)
Stage 1 of the pipeline: per property, read its UPRN from the property row,
fetch its EPC, resolve coordinates from the Geospatial reference repo, thread
those into the Solar fetcher, and persist EPC + solar via repos. Fetchers never
call each other — the orchestrator threads the coordinate (ADR-0011). Coordinates
are reference data (deterministic from UPRN), resolved transiently to drive the
solar fetch rather than persisted per-property.

Depends on thin EpcFetcher/SolarFetcher Protocols (EpcClientService and
GoogleSolarApiClient satisfy them structurally). Unit-tested against fakes — no
DB, gov API, or network: persists EPC, threads coords into solar, skips
UPRN-less properties and skips solar when coordinates are absent. pyright clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 19:58:21 +00:00
..
domain feat(property): Property aggregate + PropertyRepository (#1132) 2026-05-30 19:39:54 +00:00
infrastructure GoogleSolarApi translates BuildingInsightsNotFoundError to sentinel dict 🟩 2026-05-21 16:06:54 +00:00
orchestration feat(ingestion): IngestionOrchestrator end-to-end (#1134) 2026-05-30 19:58:21 +00:00
repositories feat(geospatial): GeospatialRepo — OS Open-UPRN coordinate lookup (#1131) 2026-05-30 19:55:46 +00:00
utilities tests framework completed 2026-05-20 14:00:19 +00:00
__init__.py added postcode splitter rewrite to ddd 2026-05-19 16:35:09 +00:00
conftest.py tests framework completed 2026-05-20 14:00:19 +00:00