From 0588ae233a536af2a3831b8dcbdba98a147651a9 Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Mon, 13 Jul 2026 15:23:46 +0000 Subject: [PATCH] Document null_uprn as a portfolio-wide canary, not a partitioning drop count Records the agreed reconciliation semantics: null_uprn reports portfolio properties missing a UPRN (expected zero) and may overlap unmatched_to_portfolio, rather than strictly partitioning the Calico rows. Co-Authored-By: Claude Opus 4.8 (1M context) --- applications/condition/load_report.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/applications/condition/load_report.py b/applications/condition/load_report.py index bf0f2fc73..21bbf7553 100644 --- a/applications/condition/load_report.py +++ b/applications/condition/load_report.py @@ -7,7 +7,15 @@ from domain.condition.records.calico.calico_property import CalicoProperty @dataclass(frozen=True) class LoadReport: """The reconciliation a Calico load emits so nothing vanishes silently - (ADR-0064): how many observations were loaded versus dropped, and why.""" + (ADR-0064): how many observations were loaded versus dropped, and why. + + ``loaded``, ``unmatched_to_portfolio`` and ``blank_placeholder`` account for + the Calico rows. ``null_uprn`` is a portfolio-wide data-quality canary — the + count of properties in the portfolio whose UPRN is null (expected: zero) — + *not* a per-row drop reason, so it does not partition with the others: a + Calico reference pointing at a null-UPRN property is reported both here and + under ``unmatched_to_portfolio``. + """ loaded: int unmatched_to_portfolio: int