diff --git a/changelog.d/622-ledger-artifact-pins.added.md b/changelog.d/622-ledger-artifact-pins.added.md new file mode 100644 index 000000000..4bdd06afc --- /dev/null +++ b/changelog.d/622-ledger-artifact-pins.added.md @@ -0,0 +1 @@ +Add shared Ledger consumer-artifact CLI helpers and wire UK national builds to record Ledger fact provenance. diff --git a/changelog.d/622-ledger-compile-parity-gates.added.md b/changelog.d/622-ledger-compile-parity-gates.added.md new file mode 100644 index 000000000..5233399b1 --- /dev/null +++ b/changelog.d/622-ledger-compile-parity-gates.added.md @@ -0,0 +1 @@ +Add UK Ledger compile-parity fixtures, signed difference resources, and preflight gate-battery entries. diff --git a/changelog.d/622-ledger-materialization.added.md b/changelog.d/622-ledger-materialization.added.md new file mode 100644 index 000000000..898de71dd --- /dev/null +++ b/changelog.d/622-ledger-materialization.added.md @@ -0,0 +1 @@ +Add shared target-binding materialization helpers and UK Ledger target compilation/materialization adapters. diff --git a/changelog.d/622-ledger-resolver-extensions.added.md b/changelog.d/622-ledger-resolver-extensions.added.md new file mode 100644 index 000000000..3fc6d262e --- /dev/null +++ b/changelog.d/622-ledger-resolver-extensions.added.md @@ -0,0 +1 @@ +Extend Ledger target resolution with UK period-token collapse, assertion-policy filtering, and narrow multi-fact sums. diff --git a/changelog.d/622-uk-cgt-ledger-single-home.added.md b/changelog.d/622-uk-cgt-ledger-single-home.added.md new file mode 100644 index 000000000..338d9c91d --- /dev/null +++ b/changelog.d/622-uk-cgt-ledger-single-home.added.md @@ -0,0 +1 @@ +Move UK CGT totals out of inline runtime constants and compile them from HMRC Ledger target references. diff --git a/changelog.d/622-uk-ledger-2025-retarget.added.md b/changelog.d/622-uk-ledger-2025-retarget.added.md new file mode 100644 index 000000000..05f506253 --- /dev/null +++ b/changelog.d/622-uk-ledger-2025-retarget.added.md @@ -0,0 +1 @@ +Retarget the UK Ledger target-reference subset to period 2025 and expand the active set from the staged UK fact feed. diff --git a/docs/gate-battery-contract.md b/docs/gate-battery-contract.md index d52c77d4c..8f340e0b0 100644 --- a/docs/gate-battery-contract.md +++ b/docs/gate-battery-contract.md @@ -86,9 +86,10 @@ Three digests pin the declaration, all carried in every report: editing rationale does not move gate policy. - `gates_manifest_sha256` — over the full manifest including `notes` and the phase order. -- `spec_fingerprint` — the composition fingerprint of the whole country - package. Adding or editing `gates.json` moves `CountrySpec.fingerprint`; - anything pinning it must be regenerated in the same change. +- `spec_fingerprint` — the composition fingerprint of `gates.json` only. + Adding or editing a gate entry moves this value; unrelated country-package + resources do not. Anything pinning it must be regenerated in the same + change. ## Supplying evidence: `EvidenceContext` and bindings diff --git a/packages/microcosm-build/src/microcosm/build/__init__.py b/packages/microcosm-build/src/microcosm/build/__init__.py index 15a14b1e5..213731948 100644 --- a/packages/microcosm-build/src/microcosm/build/__init__.py +++ b/packages/microcosm-build/src/microcosm/build/__init__.py @@ -88,6 +88,8 @@ def _assert_frame_compatible(version: str, required: tuple[int, int]) -> None: formula_owned_export_gate, input_column_coverage_gate, input_mass_parity_gate, + ledger_compile_parity_gate, + ledger_compile_parity_signed_differences, macro_realism_gate, nonconstant_columns_gate, nonnegative_columns_gate, @@ -109,7 +111,9 @@ def _assert_frame_compatible(version: str, required: tuple[int, int]) -> None: ) from microcosm.build.ledger_artifact import ( # noqa: E402 - after the compat gate LedgerConsumerArtifact, + add_ledger_artifact_args, load_ledger_consumer_artifact, + resolve_ledger_artifact, ) from microcosm.build.ledger_targets import ( # noqa: E402 - after the compat gate LedgerTargetMapping, @@ -183,6 +187,7 @@ def _assert_frame_compatible(version: str, required: tuple[int, int]) -> None: "LedgerConsumerArtifact", "LedgerTargetMapping", "LedgerTargetSelection", + "add_ledger_artifact_args", "aggregate_admin_gate", "apply_ledger_target_profile", "default_valued_columns_gate", @@ -192,6 +197,8 @@ def _assert_frame_compatible(version: str, required: tuple[int, int]) -> None: "formula_owned_export_gate", "input_column_coverage_gate", "input_mass_parity_gate", + "ledger_compile_parity_gate", + "ledger_compile_parity_signed_differences", "load_ledger_consumer_artifact", "macro_realism_gate", "nonconstant_columns_gate", @@ -199,6 +206,7 @@ def _assert_frame_compatible(version: str, required: tuple[int, int]) -> None: "parity_gate", "per_family_fit_gate", "relative_error_loss", + "resolve_ledger_artifact", "rotated_folds", "source_coverage_gate", "source_stage_input_coverage_gate", diff --git a/packages/microcosm-build/src/microcosm/build/country_spec.py b/packages/microcosm-build/src/microcosm/build/country_spec.py index d12348341..495f4c740 100644 --- a/packages/microcosm-build/src/microcosm/build/country_spec.py +++ b/packages/microcosm-build/src/microcosm/build/country_spec.py @@ -113,6 +113,7 @@ "exported_nonzero", "formula_owned_export", "input_mass_parity", + "ledger_compile_parity", "macro_realism", "nonconstant_columns", "nonnegative_columns", diff --git a/packages/microcosm-build/src/microcosm/build/gates.py b/packages/microcosm-build/src/microcosm/build/gates.py index c181d21f8..ac22c7e38 100644 --- a/packages/microcosm-build/src/microcosm/build/gates.py +++ b/packages/microcosm-build/src/microcosm/build/gates.py @@ -40,6 +40,7 @@ import math import pickle +from collections import Counter from collections.abc import Iterable, Mapping from copy import deepcopy from dataclasses import dataclass, field @@ -47,7 +48,8 @@ import numpy as np import pandas as pd -from microcosm.calibrate.registry import TargetSpec +from microcosm.build.ledger_targets import ledger_target_registry_parity_report +from microcosm.calibrate.registry import TargetRegistry, TargetSpec from microcosm.calibrate.solve import relative_error_loss from microcosm.frame import WeightKind @@ -62,6 +64,8 @@ "exported_nonzero_gate", "input_column_coverage_gate", "input_mass_parity_gate", + "ledger_compile_parity_gate", + "ledger_compile_parity_signed_differences", "macro_realism_gate", "nonconstant_columns_gate", "nonnegative_columns_gate", @@ -177,6 +181,393 @@ def _sealed_stacked_gate_result( return result +def ledger_compile_parity_gate( + compiled_registry: TargetRegistry | Mapping[str, object], + fixture: TargetRegistry | Mapping[str, object], + *, + signed_differences: Iterable[Mapping[str, object]] = (), + signed_difference_tolerance: float = 1e-9, + name: str = "ledger_compile_parity", +) -> GateResult: + """Compare a Ledger-compiled target registry against a signed fixture. + + ``signed_differences`` names reviewed ``(name, period)`` rows that may be + absent or calibration-different on either side. Every unsigned row gap or + target-value difference is still reported by the shared registry parity + comparator. + """ + + actual = _ledger_compile_value_registry( + _coerce_target_registry(compiled_registry, fallback_country="uk") + ) + expected = _ledger_compile_value_registry( + _coerce_target_registry(fixture, fallback_country=actual.country) + ) + signed_rows = tuple(signed_differences) + signed_keys = _signed_difference_keys(signed_rows) + live_signed_report = ledger_compile_parity_signed_differences(actual, expected) + signed_failures, checked_signed = _signed_difference_check_failures( + signed_rows, + live_signed_report["differences"], + tolerance=signed_difference_tolerance, + ) + if signed_keys: + actual = _drop_registry_keys(actual, signed_keys) + expected = _drop_registry_keys(expected, signed_keys) + report = ledger_target_registry_parity_report(expected, actual) + failures = ( + signed_failures + _calibration_effective_parity_failures(report.failures) + ) + return GateResult( + name=name, + passed=not failures, + failures=failures, + details={ + **dict(report.details), + "fixture": ( + fixture.get("fixture") + if isinstance(fixture, Mapping) + else "target_registry" + ), + "signed_difference_count": len(signed_keys), + "signed_difference_tolerance": signed_difference_tolerance, + "signed_differences": checked_signed, + }, + ) + + +def ledger_compile_parity_signed_differences( + compiled_registry: TargetRegistry | Mapping[str, object], + fixture: TargetRegistry | Mapping[str, object], + *, + unsupported: Iterable[Mapping[str, object]] = (), +) -> dict[str, object]: + """Classify reviewed Ledger parity differences by ``(name, period, value)``. + + The compile-parity fixtures intentionally live in different namespaces from + the compiled Ledger target registry. For these signed-difference resources, + row equality is therefore only the calibration fact identity: same name, + same period, and exactly equal float value. + """ + + actual = _coerce_target_registry(compiled_registry, fallback_country="uk") + expected = _coerce_target_registry(fixture, fallback_country=actual.country) + actual_by_key = {spec.key: spec for spec in actual} + expected_by_key = {spec.key: spec for spec in expected} + unsupported_by_key = { + (str(row["name"]), row.get("period", 0)): row + for row in unsupported + if "name" in row + } + + differences: list[dict[str, object]] = [] + for key in sorted( + set(unsupported_by_key) & set(expected_by_key) - set(actual_by_key), + key=_sort_key, + ): + name, period = key + fixture_spec = expected_by_key.get(key) + row = { + "kind": "ledger_absent", + "name": name, + "period": period, + "reason": "Packaged Ledger reference did not resolve for this comparison period.", + } + if fixture_spec is not None: + row["fixture_value"] = fixture_spec.value + differences.append(row) + + for key in sorted(set(expected_by_key) - set(actual_by_key), key=_sort_key): + if key in unsupported_by_key: + continue + spec = expected_by_key[key] + differences.append( + { + "fixture_value": spec.value, + "kind": "fixture_only", + "name": spec.name, + "period": spec.period, + "reason": ( + "Fixture row has no Ledger-compiled counterpart at this " + "comparison period." + ), + } + ) + + for key in sorted(set(actual_by_key) - set(expected_by_key), key=_sort_key): + spec = actual_by_key[key] + differences.append( + { + "kind": "ledger_only", + "ledger_value": spec.value, + "name": spec.name, + "period": spec.period, + "reason": ( + "Ledger-compiled row has no fixture counterpart at this " + "comparison period." + ), + } + ) + + for key in sorted(set(actual_by_key) & set(expected_by_key), key=_sort_key): + actual_spec = actual_by_key[key] + expected_spec = expected_by_key[key] + if actual_spec.value == expected_spec.value: + continue + differences.append( + { + "fixture_value": expected_spec.value, + "kind": "calibration_drift", + "ledger_value": actual_spec.value, + "name": actual_spec.name, + "period": actual_spec.period, + "reason": ( + "Ledger-compiled value differs from the fixture value at " + "this comparison period." + ), + } + ) + + counts = Counter(str(row["kind"]) for row in differences) + return { + "compiled_count": len(actual), + "counts_by_kind": dict(sorted(counts.items())), + "difference_count": len(differences), + "differences": differences, + "fixture_count": len(expected), + } + + +def _sort_key(key: tuple[str, int | str]) -> tuple[str, str]: + return (key[0], str(key[1])) + + +def _calibration_effective_parity_failures( + failures: tuple[str, ...], +) -> tuple[str, ...]: + calibration_failed = any( + failure.startswith("calibration-effective target digest differs") + for failure in failures + ) + kept: list[str] = [] + for failure in failures: + if failure.startswith("full target registry digest differs"): + continue + if failure.startswith("target ") and not calibration_failed: + continue + kept.append(failure) + return tuple(kept) + + +def _coerce_target_registry( + value: TargetRegistry | Mapping[str, object], + *, + fallback_country: str, +) -> TargetRegistry: + if isinstance(value, TargetRegistry): + return value + rows = value.get("rows") + if not isinstance(rows, Iterable) or isinstance(rows, (str, bytes)): + raise TypeError("Ledger compile parity fixture must carry iterable rows.") + materialized_rows = tuple(rows) + mapped_names = [ + str(row["contract_target_id"]) + for row in materialized_rows + if isinstance(row, Mapping) and row.get("contract_target_id") + ] + duplicate_mapped_names = { + name for name in mapped_names if mapped_names.count(name) > 1 + } + specs = [] + for row in materialized_rows: + if not isinstance(row, Mapping): + raise TypeError("Ledger compile parity fixture rows must be mappings.") + mapped_name = row.get("contract_target_id") + name = ( + mapped_name + if mapped_name and str(mapped_name) not in duplicate_mapped_names + else row["name"] + ) + specs.append( + TargetSpec( + name=str(name), + entity=str(row.get("entity", "household")), + measure=str(row.get("measure", name)), + value=float(row["value"]), + period=row.get("period", 0), + source=str(row.get("source", value.get("fixture", "fixture"))), + family=str(row.get("family", row.get("source", "fixture"))), + signed=bool(row.get("signed", False)), + tolerance=( + float(row["tolerance"]) + if row.get("tolerance") is not None + else None + ), + metadata={ + str(key): str(child) + for key, child in ( + row.get("metadata", {}) + if isinstance(row.get("metadata", {}), Mapping) + else {} + ).items() + }, + ) + ) + return TargetRegistry(specs, country=str(value.get("country", fallback_country))) + + +def _signed_difference_keys( + signed_differences: Iterable[Mapping[str, object]], +) -> set[tuple[str, int | str]]: + keys: set[tuple[str, int | str]] = set() + for row in signed_differences: + if "name" not in row or "period" not in row: + raise ValueError("Signed ledger parity differences need name and period.") + period = row["period"] + if not isinstance(period, (int, str)): + raise ValueError( + "Signed ledger parity difference period must be int or str." + ) + keys.add((str(row["name"]), period)) + return keys + + +def _signed_difference_check_failures( + signed_differences: Iterable[Mapping[str, object]], + live_differences: object, + *, + tolerance: float, +) -> tuple[tuple[str, ...], list[dict[str, object]]]: + if tolerance < 0: + raise ValueError("signed_difference_tolerance must be non-negative.") + if not isinstance(live_differences, Iterable) or isinstance( + live_differences, (str, bytes) + ): + raise TypeError("Live Ledger parity differences must be iterable rows.") + live_by_key = { + (str(row["name"]), row.get("period")): row + for row in live_differences + if isinstance(row, Mapping) and "name" in row + } + failures: list[str] = [] + checked: list[dict[str, object]] = [] + for signed in signed_differences: + key = (str(signed["name"]), signed["period"]) + live = live_by_key.get(key) + evidence = { + "name": key[0], + "period": key[1], + "reason": str(signed.get("reason", "")), + "signed_kind": signed.get("kind"), + "signed_ledger_value": signed.get("ledger_value"), + "signed_fixture_value": signed.get("fixture_value"), + "live_kind": live.get("kind") if live is not None else None, + "live_ledger_value": live.get("ledger_value") if live is not None else None, + "live_fixture_value": ( + live.get("fixture_value") if live is not None else None + ), + } + checked.append(evidence) + label = f"{key[0]}[{key[1]}]" + if live is None: + failures.append( + f"signed ledger parity difference {label} is stale: no live " + "difference remains." + ) + continue + signed_kind = signed.get("kind") + live_kind = live.get("kind") + if not signed_kind: + failures.append( + f"signed ledger parity difference {label} is missing kind." + ) + continue + if signed_kind != live_kind: + failures.append( + f"signed ledger parity difference {label} changed kind: " + f"signed={signed_kind!r}, live={live_kind!r}." + ) + continue + for value_field in _signed_difference_required_value_fields(str(signed_kind)): + if value_field not in signed: + failures.append( + "signed ledger parity difference " + f"{label} is missing {value_field}." + ) + continue + if not _signed_difference_value_matches( + signed.get(value_field), + live.get(value_field), + tolerance=tolerance, + ): + failures.append( + "signed ledger parity difference " + f"{label} changed {value_field}: " + f"signed={signed.get(value_field)!r}, " + f"live={live.get(value_field)!r}." + ) + return tuple(failures), checked + + +def _signed_difference_required_value_fields(kind: str) -> tuple[str, ...]: + if kind == "calibration_drift": + return ("ledger_value", "fixture_value") + if kind == "ledger_only": + return ("ledger_value",) + if kind in {"fixture_only", "ledger_absent"}: + return ("fixture_value",) + return ("ledger_value", "fixture_value") + + +def _signed_difference_value_matches( + signed_value: object, + live_value: object, + *, + tolerance: float, +) -> bool: + if signed_value is None or live_value is None: + return signed_value is live_value + try: + return math.isclose( + float(signed_value), + float(live_value), + rel_tol=0.0, + abs_tol=tolerance, + ) + except (TypeError, ValueError): + return signed_value == live_value + + +def _drop_registry_keys( + registry: TargetRegistry, + keys: set[tuple[str, int | str]], +) -> TargetRegistry: + return TargetRegistry( + (spec for spec in registry if spec.key not in keys), + country=registry.country, + ) + + +def _ledger_compile_value_registry(registry: TargetRegistry) -> TargetRegistry: + """Project compile-parity rows to the reviewed ``(name, period, value)`` key.""" + + return TargetRegistry( + ( + TargetSpec( + name=spec.name, + entity="target", + measure=spec.name, + value=spec.value, + period=spec.period, + source="ledger_compile_parity", + family="ledger_compile_parity", + ) + for spec in sorted(registry, key=lambda item: (item.name, str(item.period))) + ), + country=registry.country, + ) + + @dataclass(frozen=True) class GateReport: """The full acceptance suite: every gate, one verdict. diff --git a/packages/microcosm-build/src/microcosm/build/ledger_artifact.py b/packages/microcosm-build/src/microcosm/build/ledger_artifact.py index c87f19798..ff9991a5e 100644 --- a/packages/microcosm-build/src/microcosm/build/ledger_artifact.py +++ b/packages/microcosm-build/src/microcosm/build/ledger_artifact.py @@ -17,6 +17,7 @@ import hashlib import json +from argparse import ArgumentParser, Namespace from dataclasses import dataclass from pathlib import Path from typing import Any @@ -26,7 +27,9 @@ "CONSUMER_ARTIFACT_SCHEMA_VERSION", "DEFAULT_LEDGER_ASSERTION", "LedgerConsumerArtifact", + "add_ledger_artifact_args", "load_ledger_consumer_artifact", + "resolve_ledger_artifact", ] CONSUMER_ARTIFACT_SCHEMA_VERSION = "policyengine_ledger.consumer_artifact.v1" @@ -110,16 +113,14 @@ def load_ledger_consumer_artifact( ) if not facts_path.exists(): raise FileNotFoundError( - "Ledger consumer artifact has no consumer_facts.jsonl: " - f"{artifact_path}" + f"Ledger consumer artifact has no consumer_facts.jsonl: {artifact_path}" ) manifest_bytes = manifest_path.read_bytes() manifest_sha256 = hashlib.sha256(manifest_bytes).hexdigest() manifest = json.loads(manifest_bytes) if not isinstance(manifest, dict): raise ValueError( - f"Ledger consumer artifact manifest must be an object: " - f"{manifest_path}" + f"Ledger consumer artifact manifest must be an object: {manifest_path}" ) schema_version = manifest.get("schema_version") if schema_version != CONSUMER_ARTIFACT_SCHEMA_VERSION: @@ -139,10 +140,7 @@ def load_ledger_consumer_artifact( "Ledger consumer artifact fact rows do not match the " f"manifest hash: {facts_sha256} != {declared}." ) - if ( - expected_facts_sha256 is not None - and expected_facts_sha256 != facts_sha256 - ): + if expected_facts_sha256 is not None and expected_facts_sha256 != facts_sha256: raise ValueError( "Ledger consumer facts do not match the pinned hash: " f"{facts_sha256} != {expected_facts_sha256}." @@ -168,6 +166,47 @@ def load_ledger_consumer_artifact( ) +def add_ledger_artifact_args(parser: ArgumentParser) -> None: + """Add shared Ledger consumer-artifact arguments to a CLI parser.""" + + parser.add_argument( + "--ledger-facts", + type=Path, + help=( + "PolicyEngine Ledger consumer artifact directory (manifest.json " + "+ consumer_facts.jsonl) or a bare consumer_facts.jsonl file." + ), + ) + parser.add_argument( + "--ledger-facts-sha256", + help="Pin: expected SHA-256 of consumer_facts.jsonl.", + ) + parser.add_argument( + "--ledger-manifest-sha256", + help=( + "Pin: expected SHA-256 of the Ledger consumer artifact manifest.json; " + "requires an artifact directory feed." + ), + ) + + +def resolve_ledger_artifact(args: Namespace) -> LedgerConsumerArtifact | None: + """Load the CLI-selected Ledger artifact, returning ``None`` when absent.""" + + ledger_facts = getattr(args, "ledger_facts", None) + if ledger_facts is None: + if getattr(args, "ledger_facts_sha256", None) is not None: + raise ValueError("--ledger-facts-sha256 requires --ledger-facts.") + if getattr(args, "ledger_manifest_sha256", None) is not None: + raise ValueError("--ledger-manifest-sha256 requires --ledger-facts.") + return None + return load_ledger_consumer_artifact( + ledger_facts, + expected_facts_sha256=getattr(args, "ledger_facts_sha256", None), + expected_manifest_sha256=getattr(args, "ledger_manifest_sha256", None), + ) + + def _load_fact_rows(path: Path) -> tuple[dict[str, Any], ...]: rows: list[dict[str, Any]] = [] with path.open() as file: diff --git a/packages/microcosm-build/src/microcosm/build/ledger_targets.py b/packages/microcosm-build/src/microcosm/build/ledger_targets.py index cfcd41d50..07c5a631c 100644 --- a/packages/microcosm-build/src/microcosm/build/ledger_targets.py +++ b/packages/microcosm-build/src/microcosm/build/ledger_targets.py @@ -20,6 +20,13 @@ from microcosm.calibrate import TargetRegistry, TargetSpec SUPPORTED_LEDGER_AGGREGATIONS = frozenset(("sum",)) +ALLOWED_ASSERTION_POLICIES = frozenset(("observed_only", "allow_source_projection")) +ALLOWED_VALUE_OPERATIONS = frozenset( + ("identity", "sum", "calendar_year_average", "latest_plateau") +) +MULTI_FACT_VALUE_OPERATIONS = frozenset( + ("sum", "calendar_year_average", "latest_plateau") +) DEFAULT_HIERARCHY_MATCH_SPEC_FIELDS = ("entity", "period", "family", "filter") @@ -73,6 +80,7 @@ class LedgerTargetReference: tolerance: float | None = None notes: str = "" metadata: Mapping[str, str] = field(default_factory=dict) + assertion_policy: str = "observed_only" uprating_index: str | None = None uprating_from_period: int | str | None = None uprating_to_period: int | str | None = None @@ -89,17 +97,22 @@ def __post_init__(self) -> None: f"LedgerTargetReference {self.name!r}: either ledger_fact_key " "or ledger_source_record_id or ledger_selector is required." ) - if self.value_operation != "identity": + if self.value_operation not in ALLOWED_VALUE_OPERATIONS: raise ValueError( f"LedgerTargetReference {self.name!r}: unsupported value_operation " f"{self.value_operation!r}. Microcosm currently permits only " - "identity resolution from Ledger facts." + f"{sorted(ALLOWED_VALUE_OPERATIONS)!r} resolution from Ledger facts." ) if not isinstance(self.ledger_selector, Mapping): raise TypeError( f"LedgerTargetReference {self.name!r}: ledger_selector must be a " f"mapping, got {type(self.ledger_selector).__name__}." ) + if self.assertion_policy not in ALLOWED_ASSERTION_POLICIES: + raise ValueError( + f"LedgerTargetReference {self.name!r}: unsupported " + f"assertion_policy {self.assertion_policy!r}." + ) if not self.entity: raise ValueError( f"LedgerTargetReference {self.name!r}: entity must be non-empty." @@ -368,8 +381,8 @@ def compile_ledger_target_references( fact_index = _ledger_fact_index(facts) specs: list[TargetSpec] = [] for reference in references: - fact = _resolve_reference_fact(reference, fact_index) - specs.append(target_spec_from_ledger_reference(fact, reference)) + resolved = _resolve_reference_fact(reference, fact_index) + specs.append(target_spec_from_ledger_reference(resolved, reference)) return TargetRegistry(specs, country=country) @@ -495,40 +508,38 @@ def reconcile_ledger_target_hierarchy( def target_spec_from_ledger_reference( - fact: object, + fact: object | tuple[object, ...], reference: LedgerTargetReference, ) -> TargetSpec: """Compile one resolved Ledger fact plus Microcosm mapping into a target.""" - value = _at(fact, "value") - if value is None: - raise ValueError(f"Ledger fact for {reference.name!r} is missing value.") - try: - numeric_value = float(value) - except (OverflowError, TypeError, ValueError) as exc: + facts = fact if isinstance(fact, tuple) else (fact,) + if not facts: + raise ValueError(f"Ledger target reference {reference.name!r} has no facts.") + if len(facts) > 1 and reference.value_operation not in MULTI_FACT_VALUE_OPERATIONS: raise ValueError( - f"Ledger fact for {reference.name!r} has invalid value {value!r}." - ) from exc - if not math.isfinite(numeric_value): - raise ValueError( - f"Ledger fact for {reference.name!r} has invalid value {value!r}." + f"Ledger target reference {reference.name!r}: multiple Ledger facts " + "require an aggregating value_operation, got " + f"{reference.value_operation!r}." ) - - aggregation = _str_at(fact, "aggregation", "method") - accepts_time_mean = ( - reference.metadata.get("fact_aggregation") == "time_mean" - and aggregation == "mean" + numeric_values = [] + for member in facts: + numeric_values.append(_numeric_fact_value(member, reference)) + _validate_fact_aggregation(member, reference) + + if reference.value_operation == "calendar_year_average": + numeric_value = sum(numeric_values) / len(numeric_values) + elif reference.value_operation == "latest_plateau": + numeric_value = numeric_values[-1] + elif reference.value_operation == "sum": + numeric_value = sum(numeric_values) + else: + numeric_value = numeric_values[0] + representative_fact = _value_representative_fact( + facts, + operation=reference.value_operation, ) - if aggregation not in SUPPORTED_LEDGER_AGGREGATIONS and not accepts_time_mean: - raise ValueError( - f"Ledger fact for {reference.name!r} has unsupported aggregation " - f"{aggregation!r}; Microcosm targets must be compiled from sum " - "facts, including counts represented as sums of prepared indicator " - "columns. A mean fact is only accepted when the Microcosm mapping " - "declares fact_aggregation=time_mean, asserting the mean is taken " - "over time periods on a stock count (still a linear level), never " - "over entities (a per-unit ratio is not calibratable)." - ) + if not reference.measure: raise ValueError( f"Ledger target reference {reference.name!r}: measure is required; " @@ -538,7 +549,7 @@ def target_spec_from_ledger_reference( period = ( reference.period if reference.period is not None - else _at(fact, "period", "value") + else _at(representative_fact, "period", "value") ) if period is None: raise ValueError(f"Ledger fact for {reference.name!r} is missing period.") @@ -551,18 +562,86 @@ def target_spec_from_ledger_reference( filter=reference.filter, period=period, se=reference.se, - source=_source_citation(fact), + source=_source_citation(representative_fact), family=reference.family, signed=reference.signed, tolerance=reference.tolerance, notes=reference.notes, metadata={ - **_ledger_metadata(fact, fact_key=_fact_key(fact)), + **_ledger_metadata( + representative_fact, + fact_key=_fact_key(representative_fact), + ), + **_multi_fact_reference_metadata(facts), + "ledger_resolved_assertion": _fact_assertion(representative_fact), **_reference_metadata(reference), }, ) +def _value_representative_fact( + facts: tuple[object, ...], + *, + operation: str, +) -> object: + if len(facts) == 1 or operation not in MULTI_FACT_VALUE_OPERATIONS: + return facts[0] + return max(enumerate(facts), key=lambda item: (_period_key(item[1]), item[0]))[1] + + +def _numeric_fact_value(fact: object, reference: LedgerTargetReference) -> float: + value = _at(fact, "value") + if value is None: + raise ValueError(f"Ledger fact for {reference.name!r} is missing value.") + try: + numeric_value = float(value) + except (OverflowError, TypeError, ValueError) as exc: + raise ValueError( + f"Ledger fact for {reference.name!r} has invalid value {value!r}." + ) from exc + if not math.isfinite(numeric_value): + raise ValueError( + f"Ledger fact for {reference.name!r} has invalid value {value!r}." + ) + return numeric_value + + +def _validate_fact_aggregation( + fact: object, + reference: LedgerTargetReference, +) -> None: + aggregation = _str_at(fact, "aggregation", "method") + accepts_time_mean = ( + reference.metadata.get("fact_aggregation") == "time_mean" + and aggregation == "mean" + ) + if aggregation not in SUPPORTED_LEDGER_AGGREGATIONS and not accepts_time_mean: + raise ValueError( + f"Ledger fact for {reference.name!r} has unsupported aggregation " + f"{aggregation!r}; Microcosm targets must be compiled from sum " + "facts, including counts represented as sums of prepared indicator " + "columns. A mean fact is only accepted when the Microcosm mapping " + "declares fact_aggregation=time_mean, asserting the mean is taken " + "over time periods on a stock count (still a linear level), never " + "over entities (a per-unit ratio is not calibratable)." + ) + + +def _multi_fact_reference_metadata(facts: tuple[object, ...]) -> dict[str, str]: + if len(facts) == 1: + return {} + member_keys = tuple(_fact_key(fact) or _source_record_id(fact) for fact in facts) + payload = json.dumps(member_keys, separators=(",", ":")) + return { + "ledger_member_fact_count": str(len(facts)), + "ledger_member_aggregate_fact_keys": payload, + "ledger_member_fact_keys": payload, + "ledger_member_fact_digest": hashlib.sha256( + payload.encode("utf-8") + ).hexdigest(), + } + + def ledger_target_registry_parity_report( expected: TargetRegistry, actual: TargetRegistry, @@ -801,6 +880,14 @@ def _resolve_reference_fact( if _fact_matches_selector(fact, reference.ledger_selector) ] eligible_matches = _eligible_selector_matches(reference, matches) + if reference.value_operation == "sum" and eligible_matches: + return _resolve_sum_reference_facts(reference, eligible_matches) + if reference.value_operation == "calendar_year_average" and eligible_matches: + return _resolve_calendar_year_average_reference_facts( + reference, eligible_matches + ) + if reference.value_operation == "latest_plateau" and eligible_matches: + return _resolve_latest_plateau_reference_facts(reference, eligible_matches) if len(eligible_matches) == 1: return eligible_matches[0] latest_match = _latest_period_selector_match(reference, eligible_matches) @@ -833,6 +920,166 @@ def _resolve_reference_fact( ) +def _resolve_sum_reference_facts( + reference: LedgerTargetReference, + eligible_matches: list[object], +) -> tuple[object, ...]: + partitions: dict[tuple[tuple[str, ...], tuple[int, int, str]], list[object]] = {} + for fact in eligible_matches: + key = (_selector_sum_partition_key(fact), _period_key(fact)) + partitions.setdefault(key, []).append(fact) + if not partitions: + raise ValueError( + f"Ledger target reference {reference.name!r} did not match a Ledger " + "fact partition." + ) + latest_period = max(period_key for _, period_key in partitions) + latest_matches = [ + fact + for (_, period_key), facts in partitions.items() + if period_key == latest_period + for fact in facts + ] + return tuple( + sorted( + latest_matches, + key=lambda fact: _fact_key(fact) or _source_record_id(fact), + ) + ) + + +def _resolve_calendar_year_average_reference_facts( + reference: LedgerTargetReference, + eligible_matches: list[object], +) -> tuple[object, ...]: + monthly_matches = _monthly_operation_matches( + reference, eligible_matches, operation="calendar_year_average" + ) + target_year = _calendar_year_from_reference(reference) + year_matches = [ + fact for fact in monthly_matches if _fact_year_month(fact)[0] == target_year + ] + if not year_matches: + raise ValueError( + f"Ledger target reference {reference.name!r}: value_operation=" + "'calendar_year_average' found no monthly Ledger facts in calendar " + f"year {target_year}." + ) + return _latest_series_partition( + reference, year_matches, operation="calendar_year_average" + ) + + +def _resolve_latest_plateau_reference_facts( + reference: LedgerTargetReference, + eligible_matches: list[object], +) -> tuple[object, ...]: + monthly_matches = _monthly_operation_matches( + reference, eligible_matches, operation="latest_plateau" + ) + partition = _latest_series_partition( + reference, monthly_matches, operation="latest_plateau" + ) + sorted_partition = tuple(sorted(partition, key=_fact_month_sort_key)) + plateau_value = _numeric_fact_value(sorted_partition[-1], reference) + plateau = [sorted_partition[-1]] + expected_month = _fact_month_index(sorted_partition[-1]) - 1 + for fact in reversed(sorted_partition[:-1]): + if _fact_month_index(fact) != expected_month: + break + if _numeric_fact_value(fact, reference) != plateau_value: + break + plateau.append(fact) + expected_month -= 1 + return tuple(reversed(plateau)) + + +def _monthly_operation_matches( + reference: LedgerTargetReference, + eligible_matches: list[object], + *, + operation: str, +) -> list[object]: + non_month = [ + _at(fact, "period", "value") + for fact in eligible_matches + if _str_at(fact, "period", "type") != "month" + ] + if non_month: + examples = tuple(str(period) for period in non_month[:5]) + raise ValueError( + f"Ledger target reference {reference.name!r}: value_operation=" + f"{operation!r} requires monthly Ledger facts; non-month period " + f"values include {examples!r}." + ) + return eligible_matches + + +def _calendar_year_from_reference(reference: LedgerTargetReference) -> int: + period_key = _period_key_from_value(reference.period) + if not period_key[0]: + raise ValueError( + f"Ledger target reference {reference.name!r}: value_operation=" + "'calendar_year_average' requires a parseable target period." + ) + return period_key[1] // 100 + + +def _latest_series_partition( + reference: LedgerTargetReference, + matches: list[object], + *, + operation: str, +) -> tuple[object, ...]: + partitions: dict[tuple[str, ...], list[object]] = {} + for fact in matches: + partitions.setdefault(_selector_period_invariant_key(fact), []).append(fact) + if not partitions: + raise ValueError( + f"Ledger target reference {reference.name!r}: value_operation=" + f"{operation!r} did not match a Ledger fact partition." + ) + latest_period = max(_period_key(fact) for fact in matches) + latest_partitions = [ + partition + for partition in partitions.values() + if max(_period_key(fact) for fact in partition) == latest_period + ] + if len(latest_partitions) != 1: + raise ValueError( + f"Ledger target reference {reference.name!r}: value_operation=" + f"{operation!r} matched multiple monthly Ledger series identities " + "at the latest eligible period." + ) + return tuple(sorted(latest_partitions[0], key=_fact_month_sort_key)) + + +def _fact_month_sort_key(fact: object) -> tuple[int, str]: + return (_fact_month_index(fact), _fact_key(fact) or _source_record_id(fact) or "") + + +def _fact_month_index(fact: object) -> int: + year, month = _fact_year_month(fact) + return year * 12 + month + + +def _fact_year_month(fact: object) -> tuple[int, int]: + period_key = _period_key(fact) + if not period_key[0]: + raise ValueError("Ledger monthly period is not parseable.") + year_month = period_key[1] + year = year_month // 100 + month = year_month % 100 + if month < 1 or month > 12: + raise ValueError("Ledger monthly period does not carry a month value.") + return year, month + + +def _selector_sum_partition_key(fact: object) -> tuple[str, ...]: + invariant = _selector_period_invariant_key(fact) + return invariant[:8] + invariant[11:] + + def _eligible_selector_matches( reference: LedgerTargetReference, matches: list[object], @@ -842,9 +1089,21 @@ def _eligible_selector_matches( fact for fact in matches if _not_after_target_period(_period_key(fact), target_period_key) + and _assertion_allowed(reference, fact) ] +def _assertion_allowed(reference: LedgerTargetReference, fact: object) -> bool: + assertion = _fact_assertion(fact) + if assertion == "source_projection": + return reference.assertion_policy == "allow_source_projection" + return True + + +def _fact_assertion(fact: object) -> str: + return _str_at(fact, "assertion") or "observation" + + def _latest_period_selector_match( reference: LedgerTargetReference, matches: list[object], @@ -886,7 +1145,7 @@ def _selector_period_invariant_key(fact: object) -> tuple[str, ...]: _str_at(fact, "aggregation", "method"), _normalized_record_set_id(_str_at(fact, "layout", "record_set_id")), _str_at(fact, "layout", "groupby_dimension"), - _str_at(fact, "layout", "groupby_value_id"), + _normalized_period_bearing_id(_str_at(fact, "layout", "groupby_value_id")), json.dumps(_dimensions(fact), sort_keys=True, separators=(",", ":")), json.dumps(_constraint_rows(fact), sort_keys=True, separators=(",", ":")), _domain(fact), @@ -897,7 +1156,65 @@ def _normalized_record_set_id(record_set_id: str) -> str: if not record_set_id: return "" return ".".join( - part for part in record_set_id.split(".") if not _is_period_token(part) + normalized + for part in record_set_id.split(".") + if (normalized := _normalized_record_set_part(part)) + ) + + +def _normalized_record_set_part(value: str) -> str: + if _is_period_token(value): + return "" + normalized = value.lower().replace("-", "_") + pieces = [ + piece + for piece in normalized.split("_") + if piece and not _is_period_fragment(piece) + ] + return "_".join(pieces) + + +def _normalized_period_bearing_id(value: str) -> str: + if _is_period_token(value): + return "" + return _normalized_record_set_part(value) + + +def _is_period_fragment(value: str) -> bool: + normalized = value.lower().replace("-", "_") + if _is_period_token(normalized): + return True + month_names = ( + "jan", + "january", + "feb", + "february", + "mar", + "march", + "apr", + "april", + "may", + "jun", + "june", + "jul", + "july", + "aug", + "august", + "sep", + "sept", + "september", + "oct", + "october", + "nov", + "november", + "dec", + "december", + ) + return any( + normalized.startswith(month) + and normalized[len(month) :].isdigit() + and len(normalized[len(month) :]) == 4 + for month in month_names ) @@ -905,11 +1222,11 @@ def _is_period_token(value: str) -> bool: normalized = value.lower().replace("-", "_") if normalized.startswith("month"): normalized = normalized[len("month") :] - parts = normalized.split("_", maxsplit=1) - if len(parts) == 2 and all(part.isdigit() for part in parts): - return len(parts[0]) == 4 and len(parts[1]) in {1, 2} if normalized[:2] in {"ty", "cy", "fy"}: normalized = normalized[2:] + parts = normalized.split("_", maxsplit=1) + if len(parts) == 2 and all(part.isdigit() for part in parts): + return len(parts[0]) == 4 and len(parts[1]) in {1, 2, 4} return normalized.isdigit() and len(normalized) == 4 @@ -920,15 +1237,25 @@ def _period_key(fact: object) -> tuple[int, int, str]: def _period_key_from_value(value: object) -> tuple[int, int, str]: label = "" if value is None else str(value) normalized = label.lower().replace("-", "_") + if normalized[:2] in {"ty", "cy", "fy"}: + normalized = normalized[2:] for prefix in ("month", "tax_year_", "calendar_year_", "fiscal_year_"): if normalized.startswith(prefix): normalized = normalized[len(prefix) :] break parts = normalized.split("_", maxsplit=1) if len(parts) == 2: - year, month = parts - if year.isdigit() and month.isdigit(): - return (1, int(year) * 100 + int(month), label) + year, suffix = parts + if year.isdigit() and suffix.isdigit(): + if len(suffix) == 4: + suffix_value = 99 + elif len(suffix) <= 2 and int(suffix) <= 12: + suffix_value = int(suffix) + elif len(suffix) <= 2: + suffix_value = 99 + else: + suffix_value = int(suffix) + return (1, int(year) * 100 + suffix_value, label) try: return (1, int(normalized) * 100 + 99, label) except ValueError: @@ -952,7 +1279,9 @@ def _not_after_target_period( source_period_key: tuple[int, int, str], target_period_key: tuple[int, int, str], ) -> bool: - if not source_period_key[0] or not target_period_key[0]: + if not source_period_key[0]: + return False + if not target_period_key[0]: return True return source_period_key[1] <= target_period_key[1] @@ -960,6 +1289,7 @@ def _not_after_target_period( def _reference_metadata(reference: LedgerTargetReference) -> dict[str, str]: metadata = dict(reference.metadata) metadata["ledger_value_operation"] = reference.value_operation + metadata["ledger_assertion_policy"] = reference.assertion_policy for key, value in sorted(reference.ledger_selector.items()): if isinstance(value, Mapping): continue @@ -1020,18 +1350,6 @@ def _source_record_id(fact: object) -> str: ) -def _unique_facts(facts: Iterable[object]) -> tuple[object, ...]: - unique: list[object] = [] - seen: set[int] = set() - for fact in facts: - identity = id(fact) - if identity in seen: - continue - seen.add(identity) - unique.append(fact) - return tuple(unique) - - def _fact_matches_selector(fact: object, selector: Mapping[str, object]) -> bool: """Return whether a consumer fact satisfies a structured reference selector. @@ -1116,7 +1434,7 @@ def _selector_candidates(fact: object, key: str) -> tuple[str, ...]: if key == "domain": return (_domain(fact),) if key == "assertion": - return (_str_at(fact, "assertion") or "observation",) + return (_fact_assertion(fact),) raise ValueError(f"Unsupported Ledger fact selector field {key!r}.") diff --git a/packages/microcosm-build/src/microcosm/build/target_materialization.py b/packages/microcosm-build/src/microcosm/build/target_materialization.py new file mode 100644 index 000000000..e5209134f --- /dev/null +++ b/packages/microcosm-build/src/microcosm/build/target_materialization.py @@ -0,0 +1,240 @@ +"""Shared materialization of declarative Ledger target bindings.""" + +from __future__ import annotations + +from collections.abc import Callable, Mapping +from dataclasses import dataclass, field +from typing import Any + +import numpy as np + +from microcosm.calibrate import TargetRegistry + +Provider = Callable[[Any, Mapping[str, Any], int | str], np.ndarray] + + +@dataclass(frozen=True) +class MaterializationSkip: + """One target measure the interpreter could not prepare.""" + + name: str + measure: str + reason: str + + +@dataclass(frozen=True) +class TargetMaterializationResult: + """Prepared target columns and skipped-measure diagnostics.""" + + adapter: Any + registry: TargetRegistry + skipped: tuple[MaterializationSkip, ...] = field(default_factory=tuple) + + def report(self) -> dict[str, object]: + """Return a serialisable diagnostic report.""" + + return { + "prepared_count": len(self.registry) - len(self.skipped), + "skipped_count": len(self.skipped), + "skipped": [skip.__dict__ for skip in self.skipped], + } + + +def materialize_target_bindings( + adapter: Any, + registry: TargetRegistry, + contract_targets: Mapping[str, Mapping[str, Any]], + *, + period: int | str, + providers: Mapping[str, Provider] | None = None, +) -> TargetMaterializationResult: + """Prepare measure columns declared by compiled Ledger target specs.""" + + provider_registry = {**default_provider_registry(), **(providers or {})} + skipped: list[MaterializationSkip] = [] + for spec in registry.specs: + if hasattr(adapter, "has_column") and adapter.has_column( + spec.entity, spec.measure + ): + continue + contract_target_id = spec.metadata.get("contract_target_id") + target = contract_targets.get(str(contract_target_id)) + if target is None: + skipped.append( + MaterializationSkip( + name=spec.name, + measure=spec.measure, + reason="missing_contract_target", + ) + ) + continue + binding = target["bindings"]["policyengine"] + kind = binding.get("kind") + try: + if kind: + provider = provider_registry.get(str(kind)) + if provider is None: + raise ValueError(f"unsupported binding kind {kind!r}") + values = provider(adapter, binding, period) + else: + values = _prepared_column_values(adapter, spec.entity, binding) + adapter.set_column(spec.entity, spec.measure, values) + except (KeyError, TypeError, ValueError) as error: + skipped.append( + MaterializationSkip( + name=spec.name, + measure=spec.measure, + reason=str(error), + ) + ) + return TargetMaterializationResult(adapter, registry, tuple(skipped)) + + +def default_provider_registry() -> dict[str, Provider]: + """Return the generic provider engines keyed by binding kind.""" + + return { + "parameter_gated_threshold": parameter_gated_threshold, + "baseline_flag_crosstab": baseline_flag_crosstab, + "input_substitution_counterfactual": input_substitution_counterfactual, + } + + +def parameter_gated_threshold( + adapter: Any, + binding: Mapping[str, Any], + period: int | str, +) -> np.ndarray: + """Materialize an indicator/value gated by a period parameter.""" + + gate = float(adapter.parameter(str(binding["gate_parameter"]), period)) + gated = _column( + adapter, str(binding.get("from_entity") or "person"), binding["gated_variable"] + ) + comparison = str(binding.get("gate_comparison") or ">") + mask = _compare(gated, comparison, gate) + value_variable = binding.get("value_variable") + if value_variable and value_variable != "person_count": + return np.where( + mask, + _column( + adapter, + str(binding.get("from_entity") or "person"), + str(value_variable), + ), + 0.0, + ) + return mask.astype(float) + + +def baseline_flag_crosstab( + adapter: Any, + binding: Mapping[str, Any], + period: int | str, +) -> np.ndarray: + """Materialize a baseline affected-flag crosstab column.""" + + del period + entity = str(binding.get("from_entity") or "household") + flag = _column(adapter, entity, binding["affected_flag_variable"]).astype(bool) + value_variable = str(binding.get("value_variable") or "") + count_of = str(binding.get("count_of") or "") + if value_variable and value_variable not in {"household_count", "person_count"}: + values = _column(adapter, entity, value_variable) + elif count_of and count_of not in {"household", "person", "household_count"}: + values = _column(adapter, entity, count_of) + else: + values = np.ones_like(flag, dtype=float) + mask = flag + for predicate in binding.get("filters", ()): + mask &= _predicate_mask(adapter, entity, predicate) + for predicate in binding.get("household_conditions", ()): + mask &= _predicate_mask(adapter, entity, predicate) + return np.where(mask, values, 0.0) + + +def input_substitution_counterfactual( + adapter: Any, + binding: Mapping[str, Any], + period: int | str, +) -> np.ndarray: + """Materialize an output delta under a caller-owned counterfactual.""" + + if hasattr(adapter, "counterfactual_delta"): + return np.asarray(adapter.counterfactual_delta(binding, period), dtype=float) + raise ValueError("adapter does not provide counterfactual_delta") + + +def _prepared_column_values( + adapter: Any, + entity: str, + binding: Mapping[str, Any], +) -> np.ndarray: + entity = str(binding.get("from_entity") or entity) + if "value_expression" in binding: + values = _expression(adapter, entity, str(binding["value_expression"])) + else: + values = _column(adapter, entity, binding["value_variable"]) + mask = np.ones_like(values, dtype=bool) + for predicate in binding.get("filters", ()): + mask &= _predicate_mask(adapter, entity, predicate) + for predicate in binding.get("household_conditions", ()): + mask &= _predicate_mask(adapter, entity, predicate) + return np.where(mask, values, 0.0) + + +def _predicate_mask( + adapter: Any, + default_entity: str, + predicate: Mapping[str, Any], +) -> np.ndarray: + if "reduce" in predicate and hasattr(adapter, "household_condition"): + return np.asarray(adapter.household_condition(predicate), dtype=bool) + entity = str(predicate.get("entity") or default_entity) + variable = str(predicate.get("variable") or predicate.get("concept")) + values = _column(adapter, entity, variable) + if "operator" in predicate: + operator, expected = str(predicate["operator"]), predicate["value"] + else: + operator, expected = "==", predicate["equals"] + return _compare(values, operator, expected) + + +def _compare(values: np.ndarray, operator: str, expected: object) -> np.ndarray: + if operator == "==": + return values == expected + if operator == "!=": + return values != expected + if operator == "in": + return np.isin(values, expected) + numeric = values.astype(float) + threshold = float(expected) + if operator == ">": + return numeric > threshold + if operator == ">=": + return numeric >= threshold + if operator == "<": + return numeric < threshold + if operator == "<=": + return numeric <= threshold + raise ValueError(f"unsupported predicate operator {operator!r}") + + +def _expression(adapter: Any, entity: str, expression: str) -> np.ndarray: + parts = [part.strip() for part in expression.split("+")] + if not parts or any(not part for part in parts): + raise ValueError(f"unsupported value_expression {expression!r}") + total: np.ndarray | None = None + for part in parts: + values = _column(adapter, entity, part) + total = values.copy() if total is None else total + values + if total is None: + raise ValueError(f"unsupported value_expression {expression!r}") + return total + + +def _column(adapter: Any, entity: str, variable: object) -> np.ndarray: + if hasattr(adapter, "column"): + return np.asarray(adapter.column(entity, str(variable))) + table = adapter.tables[entity] + return np.asarray(table[str(variable)]) diff --git a/packages/microcosm-build/src/microcosm/build/target_reference_authoring.py b/packages/microcosm-build/src/microcosm/build/target_reference_authoring.py new file mode 100644 index 000000000..924dbe450 --- /dev/null +++ b/packages/microcosm-build/src/microcosm/build/target_reference_authoring.py @@ -0,0 +1,479 @@ +"""Author Ledger target-reference resources from country contracts. + +Country packages own target declarations and country-specific pinning policy. +This module owns the shared mechanics: candidate reference construction, +fan-out over native dimension values, compilation through the real Ledger +resolver, and membership reporting. +""" + +from __future__ import annotations + +import json +import math +from collections import Counter +from collections.abc import Callable, Iterable, Mapping +from dataclasses import dataclass, field +from typing import Any + +from microcosm.build.ledger_targets import ( # pyright: ignore[reportPrivateUsage] + LedgerTargetReference, + _assertion_allowed, + _fact_matches_selector, + _not_after_target_period, + _period_key, + _period_key_from_value, + compile_ledger_target_references, +) + +FanoutName = Callable[[Mapping[str, Any], Mapping[str, Any]], str | None] +GeographyPin = Mapping[str, str] + + +@dataclass(frozen=True) +class AuthoredTargetReferences: + """Generated references and their compile-membership report.""" + + references: tuple[dict[str, Any], ...] + membership_report: dict[str, Any] + + @property + def status_counts(self) -> Mapping[str, int]: + """Membership status counts keyed by report status.""" + + return self.membership_report["status_counts"] + + +@dataclass(frozen=True) +class TargetReferenceAuthoringConfig: + """Country-supplied authoring policy.""" + + target_period: int | str + geography_pins: Mapping[str, GeographyPin] = field(default_factory=dict) + fanout_name: FanoutName | None = None + sum_target_ids: frozenset[str] = frozenset() + value_operation_by_target_id: Mapping[str, str] = field(default_factory=dict) + selector_pins_by_target_id: Mapping[str, Mapping[str, Any]] = field( + default_factory=dict + ) + signed_exclusions_by_target_id: Mapping[str, str] = field(default_factory=dict) + binding_vocabulary: frozenset[str] = frozenset() + source_fact_feed: str = "" + + +def author_target_references( + contract: Mapping[str, Any], + facts: Iterable[Mapping[str, Any]], + config: TargetReferenceAuthoringConfig, +) -> AuthoredTargetReferences: + """Build active target references and a membership report.""" + + fact_rows = tuple(facts) + facts_by_source = _facts_by_source(fact_rows) + _validate_contract_bindings(contract, config.binding_vocabulary) + active_rows: list[dict[str, Any]] = [] + target_entries: dict[str, Any] = {} + geography_pin_report: dict[str, Any] = {} + genuine_sum_residue: list[str] = [] + uprating_holds: list[dict[str, str]] = [] + + for target in contract.get("targets", ()): + target_id = str(target["target_id"]) + pin = config.geography_pins.get(target_id, {}) + geography_pin_report[target_id] = dict(pin) + source_facts = _source_prefilter(fact_rows, facts_by_source, target) + selector = _target_selector(target, pin, config) + signed_exclusion = config.signed_exclusions_by_target_id.get(target_id) + if signed_exclusion is not None: + matched = [ + fact for fact in source_facts if _fact_matches_selector(fact, selector) + ] + eligible = [ + fact + for fact in matched + if _not_after_target_period( + _period_key(fact), + _period_key_from_value(config.target_period), + ) + ] + target_entries[target_id] = { + "status": "signed_excluded", + "candidates": [ + { + "name": target_id, + "status": "signed_excluded", + "matched_fact_count_overall": len(matched), + "matched_fact_count_at_or_before_period": len(eligible), + "signed_rationale": signed_exclusion, + } + ], + } + continue + candidates = tuple(_candidate_rows(target, source_facts, pin, config)) + candidate_entries: list[dict[str, Any]] = [] + for row in candidates: + reference = LedgerTargetReference(**row) + matched = [ + fact + for fact in source_facts + if _fact_matches_selector(fact, row["ledger_selector"]) + ] + eligible = [fact for fact in matched if _eligible_fact(reference, fact)] + entry: dict[str, Any] = { + "name": row["name"], + "status": "", + "matched_fact_count_overall": len(matched), + "matched_fact_count_at_or_before_period": len(eligible), + } + try: + registry = compile_ledger_target_references( + matched, + [reference], + country=str(contract["country"]), + ) + except ValueError as error: + entry["status"] = _classify_deferral(error, matched, eligible) + entry["error"] = _compact_compile_error(entry["status"]) + else: + spec = registry.specs[0] + resolved_period = spec.metadata.get("ledger_fact_period", "") + _apply_uprating_hold(row, resolved_period, config.target_period) + if "uprating_from_period" in row: + uprating_holds.append( + { + "name": row["name"], + "from": str(row["uprating_from_period"]), + "to": str(row["uprating_to_period"]), + } + ) + if row.get("value_operation") == "sum": + genuine_sum_residue.append(row["name"]) + active_rows.append(row) + entry.update( + { + "status": "active", + "resolved_period": spec.period, + "resolved_value": spec.value, + "resolved_fact_period": resolved_period, + "resolved_fact_key": _json_safe_ledger_id( + spec.metadata.get("ledger_aggregate_fact_key", "") + ), + } + ) + candidate_entries.append(entry) + target_entries[target_id] = { + "status": _target_status(candidate_entries), + "candidates": candidate_entries, + } + + status_counts = Counter( + entry["status"] + for target in target_entries.values() + for entry in target["candidates"] + ) + report = { + "source_fact_feed": config.source_fact_feed, + "target_period": config.target_period, + "candidate_count": sum( + len(target["candidates"]) for target in target_entries.values() + ), + "contract_target_count": len(tuple(contract.get("targets", ()))), + "active_reference_count": len(active_rows), + "status_counts": dict(sorted(status_counts.items())), + "geography_pins": geography_pin_report, + "genuine_sum_residue": sorted(genuine_sum_residue), + "uprating_holds": uprating_holds, + "targets": target_entries, + } + return AuthoredTargetReferences(tuple(active_rows), report) + + +def target_references_resource( + *, + country: str, + description: str, + authored: AuthoredTargetReferences, +) -> dict[str, Any]: + """Return a serialisable ``target_references.json`` resource.""" + + return { + "country": country, + "description": description, + "allowed_value_operations": [ + "identity", + "sum", + "calendar_year_average", + "latest_plateau", + ], + "target_references": list(authored.references), + } + + +def _validate_contract_bindings( + contract: Mapping[str, Any], + binding_vocabulary: frozenset[str], +) -> None: + if not binding_vocabulary: + return + for target in contract.get("targets", ()): + binding = target["bindings"]["policyengine"] + unknown = sorted(set(binding) - binding_vocabulary) + if unknown: + raise ValueError( + f"Contract target {target['target_id']!r} carries unknown " + f"policyengine binding keys {unknown!r}." + ) + + +def _candidate_rows( + target: Mapping[str, Any], + facts: tuple[Mapping[str, Any], ...], + geography_pin: GeographyPin, + config: TargetReferenceAuthoringConfig, +) -> Iterable[dict[str, Any]]: + selector = _target_selector(target, geography_pin, config) + if "groupby_dimension" in selector: + rows = _fanout_rows(target, facts, selector, config) + if rows: + yield from rows + return + yield _reference_row(target, selector, config) + + +def _target_selector( + target: Mapping[str, Any], + geography_pin: GeographyPin, + config: TargetReferenceAuthoringConfig, +) -> dict[str, Any]: + target_id = str(target["target_id"]) + selector = {**dict(target["ledger_selector"]), **dict(geography_pin)} + pins = config.selector_pins_by_target_id.get(target_id, {}) + for key, value in pins.items(): + if key == "dimension_values" and isinstance(value, Mapping): + existing = selector.get("dimension_values") + selector[key] = { + **(dict(existing) if isinstance(existing, Mapping) else {}), + **dict(value), + } + continue + selector[key] = value + return selector + + +def _fanout_rows( + target: Mapping[str, Any], + facts: tuple[Mapping[str, Any], ...], + selector: Mapping[str, Any], + config: TargetReferenceAuthoringConfig, +) -> tuple[dict[str, Any], ...]: + dimension = str(selector["groupby_dimension"]) + matches = [fact for fact in facts if _fact_matches_selector(fact, selector)] + existing_pins = selector.get("dimension_values") or {} + pinned_dimension_names = ( + frozenset(str(key) for key in existing_pins) + if isinstance(existing_pins, Mapping) + else frozenset() + ) + pins: dict[tuple[str, str], tuple[str, Any, Mapping[str, Any]]] = {} + for fact in matches: + dimension_name, dimension_value = _native_groupby_pin( + fact, + dimension, + pinned_dimension_names=pinned_dimension_names, + ) + if not dimension_name: + continue + key = (dimension_name, json.dumps(dimension_value, sort_keys=True)) + pins.setdefault(key, (dimension_name, dimension_value, fact)) + rows = [] + for _, (dimension_name, dimension_value, fact) in sorted(pins.items()): + merged_dimension_values = { + **(dict(existing_pins) if isinstance(existing_pins, Mapping) else {}), + dimension_name: dimension_value, + } + pinned_selector = { + **dict(selector), + "dimension_values": merged_dimension_values, + } + name = ( + config.fanout_name(target, fact) + if config.fanout_name is not None + else _fallback_fanout_name(target, fact) + ) + if not name: + continue + rows.append(_reference_row(target, pinned_selector, config, name=name)) + return tuple(rows) + + +def _facts_by_source( + facts: tuple[Mapping[str, Any], ...], +) -> dict[str, tuple[Mapping[str, Any], ...]]: + buckets: dict[str, list[Mapping[str, Any]]] = {} + for fact in facts: + source = _source_name(fact) + if source: + buckets.setdefault(source, []).append(fact) + return {key: tuple(value) for key, value in buckets.items()} + + +def _source_prefilter( + facts: tuple[Mapping[str, Any], ...], + facts_by_source: Mapping[str, tuple[Mapping[str, Any], ...]], + target: Mapping[str, Any], +) -> tuple[Mapping[str, Any], ...]: + source_name = target["ledger_selector"].get("source_name") + if isinstance(source_name, str) and source_name: + return facts_by_source.get(source_name, ()) + return facts + + +def _source_name(fact: Mapping[str, Any]) -> str: + return str( + fact.get("source", {}).get("source_name") + or fact.get("observed_measure", {}).get("source_name") + or "" + ) + + +def _native_groupby_pin( + fact: Mapping[str, Any], + dimension: str, + *, + pinned_dimension_names: frozenset[str] = frozenset(), +) -> tuple[str, Any]: + dimensions = fact.get("dimensions") or {} + if not isinstance(dimensions, Mapping): + return "", None + candidates = ( + dimension, + dimension.split(".")[-1], + dimension.replace(".", "_"), + ) + for candidate in candidates: + if candidate in dimensions: + if candidate in pinned_dimension_names: + return "", None + return candidate, dimensions[candidate] + unpinned_dimensions = [ + (str(key), value) + for key, value in dimensions.items() + if str(key) not in pinned_dimension_names + ] + if len(unpinned_dimensions) == 1: + return unpinned_dimensions[0] + if len(dimensions) == 1: + key, value = next(iter(dimensions.items())) + if str(key) in pinned_dimension_names: + return "", None + return str(key), value + return "", None + + +def _reference_row( + target: Mapping[str, Any], + selector: Mapping[str, Any], + config: TargetReferenceAuthoringConfig, + *, + name: str | None = None, +) -> dict[str, Any]: + target_id = str(target["target_id"]) + binding = target["bindings"]["policyengine"] + row: dict[str, Any] = { + "name": name or target_id, + "ledger_selector": dict(selector), + "entity": binding.get("from_entity") or binding.get("map_to") or "household", + "measure": name or binding["metric_name"], + "family": target["family"], + "period": config.target_period, + "metadata": { + "contract_target_id": target_id, + "measure_kind": "prepared_column", + }, + } + assertion_policy = target.get("assertion_policy") + if assertion_policy is not None: + row["assertion_policy"] = assertion_policy + value_operation = config.value_operation_by_target_id.get(target_id) + if value_operation is None and target_id in config.sum_target_ids: + value_operation = "sum" + if value_operation is not None and value_operation != "identity": + row["value_operation"] = value_operation + return row + + +def _fallback_fanout_name(target: Mapping[str, Any], fact: Mapping[str, Any]) -> str: + value_id = str(fact.get("layout", {}).get("groupby_value_id") or "detail") + return f"{target['target_id']}.{value_id}" + + +def _json_safe_ledger_id(value: str) -> str: + return value.replace(".", "_").replace(":", "_") + + +def _compact_compile_error(status: str) -> str: + return f"ledger_reference_compile_status_{status}" + + +def _eligible_fact(reference: LedgerTargetReference, fact: Mapping[str, Any]) -> bool: + return _not_after_target_period( + _period_key(fact), + _period_key_from_value(reference.period), + ) and _assertion_allowed(reference, fact) + + +def _classify_deferral( + error: ValueError, + matched: list[Mapping[str, Any]], + eligible: list[Mapping[str, Any]], +) -> str: + message = str(error) + if "source_projection" in message: + return "source_projection_policy" + if not eligible or "at or before target period" in message: + return "no_fact_at_or_before_period" + if "matched multiple Ledger facts" in message: + return "multi_fact" + if "invalid value" in message or "missing value" in message: + return "value_not_finite_or_missing" + geography_ids = { + str(fact.get("geography", {}).get("id", "")) + for fact in eligible + if fact.get("geography", {}).get("level") == "country" + } + if len(geography_ids) > 1: + return "geography_ambiguous_at_country_level" + if not matched: + return "no_fact_at_or_before_period" + return "signed_deferral_compile_error" + + +def _target_status(candidate_entries: list[dict[str, Any]]) -> str: + if any(entry["status"] == "active" for entry in candidate_entries): + if all(entry["status"] == "active" for entry in candidate_entries): + return "active" + return "partially_active" + statuses = sorted({entry["status"] for entry in candidate_entries}) + return statuses[0] if len(statuses) == 1 else "multiple_deferrals" + + +def _apply_uprating_hold( + row: dict[str, Any], + resolved_period: str, + target_period: int | str, +) -> None: + if not resolved_period: + return + source_key = _period_key_from_value(resolved_period) + target_key = _period_key_from_value(target_period) + if source_key[0] and target_key[0] and source_key[1] < target_key[1]: + row["uprating_from_period"] = resolved_period + row["uprating_to_period"] = target_period + + +def is_finite_value(value: object) -> bool: + """Return whether a fact value is finite when coerced to float.""" + + try: + return math.isfinite(float(value)) + except (OverflowError, TypeError, ValueError): + return False diff --git a/packages/microcosm-build/src/microcosm/build/uk/country_package.json b/packages/microcosm-build/src/microcosm/build/uk/country_package.json index 5a1613375..0ab84156a 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/country_package.json +++ b/packages/microcosm-build/src/microcosm/build/uk/country_package.json @@ -137,11 +137,26 @@ "kind": "legacy_json", "schema_id": "legacy_json" }, + { + "path": "ledger_compile_parity_incumbent_2025_signed_differences.json", + "kind": "legacy_json", + "schema_id": "legacy_json" + }, + { + "path": "ledger_compile_parity_production_2023_signed_differences.json", + "kind": "legacy_json", + "schema_id": "legacy_json" + }, { "path": "national_staging_build_record.json", "kind": "legacy_json", "schema_id": "legacy_json" }, + { + "path": "parity_fixture_production_2023.json", + "kind": "legacy_json", + "schema_id": "legacy_json" + }, { "path": "qrf_tail_reviewed_exclusions.json", "kind": "legacy_json", @@ -152,6 +167,11 @@ "kind": "legacy_json", "schema_id": "legacy_json" }, + { + "path": "registry_parity_fixture_2025.json", + "kind": "legacy_json", + "schema_id": "legacy_json" + }, { "path": "was_wealth_support_bounds.json", "kind": "legacy_json", @@ -171,6 +191,11 @@ "path": "target_references.json", "kind": "legacy_json", "schema_id": "legacy_json" + }, + { + "path": "target_reference_membership.json", + "kind": "legacy_json", + "schema_id": "legacy_json" } ] } diff --git a/packages/microcosm-build/src/microcosm/build/uk/gates.json b/packages/microcosm-build/src/microcosm/build/uk/gates.json index b258907ed..ce9119aaa 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/gates.json +++ b/packages/microcosm-build/src/microcosm/build/uk/gates.json @@ -25,6 +25,30 @@ "parameters": {}, "notes": "Frameless preflight over the materialized stage names: every family the coverage manifest marks required_at_build must have its build stage scheduled before any stage runs." }, + { + "id": "uk_ledger_compile_parity_production_2023", + "gate": "ledger_compile_parity", + "phase": "preflight", + "criticality": "release_blocking", + "parameters": { + "fixture_resource": "parity_fixture_production_2023.json", + "signed_differences_resource": "ledger_compile_parity_production_2023_signed_differences.json", + "target_period": 2023 + }, + "notes": "Ledger-compiled UK targets at period 2023 compared with the certified production 2023 calibration surface fixture. Signed differences are committed for adjudication rather than hidden." + }, + { + "id": "uk_ledger_compile_parity_incumbent_2025", + "gate": "ledger_compile_parity", + "phase": "preflight", + "criticality": "release_blocking", + "parameters": { + "fixture_resource": "registry_parity_fixture_2025.json", + "signed_differences_resource": "ledger_compile_parity_incumbent_2025_signed_differences.json", + "target_period": 2025 + }, + "notes": "Ledger-compiled UK targets at the 2025 calibration period compared with the frozen incumbent registry surface. The signed list enumerates TCL additions, exclusions, unsupported rows, and vintage drift for review." + }, { "id": "uk_release_input_coverage", "gate": "release_input_coverage", diff --git a/packages/microcosm-build/src/microcosm/build/uk/ledger_compile_parity_incumbent_2025_signed_differences.json b/packages/microcosm-build/src/microcosm/build/uk/ledger_compile_parity_incumbent_2025_signed_differences.json new file mode 100644 index 000000000..399a3c6f1 --- /dev/null +++ b/packages/microcosm-build/src/microcosm/build/uk/ledger_compile_parity_incumbent_2025_signed_differences.json @@ -0,0 +1,3591 @@ +{ + "compiled_count": 388, + "counts_by_kind": { + "calibration_drift": 163, + "fixture_only": 287, + "ledger_only": 38 + }, + "difference_count": 488, + "differences": [ + { + "fixture_value": 1608000.0, + "kind": "fixture_only", + "name": "dwp.pip.daily_living_enhanced_claimants", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1283000.0, + "kind": "fixture_only", + "name": "dwp.pip.daily_living_standard_claimants", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 320866000.0, + "kind": "fixture_only", + "name": "dwp/benefit_cap_total_reduction", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1424.0, + "kind": "fixture_only", + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_nan_to_nan", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 61727.0, + "kind": "fixture_only", + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_nan_to_nan", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 82905.0, + "kind": "fixture_only", + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_nan_to_nan", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 3518.0, + "kind": "fixture_only", + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_nan_to_nan", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 5805652941.176472, + "kind": "fixture_only", + "name": "hmrc/capital_gains_band_100000", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 6567201680.67227, + "kind": "fixture_only", + "name": "hmrc/capital_gains_band_1000000", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1457322689.0756304, + "kind": "fixture_only", + "name": "hmrc/capital_gains_band_12300", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 9443821008.403362, + "kind": "fixture_only", + "name": "hmrc/capital_gains_band_2000000", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 2718348739.4957986, + "kind": "fixture_only", + "name": "hmrc/capital_gains_band_25000", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 4898166386.554623, + "kind": "fixture_only", + "name": "hmrc/capital_gains_band_250000", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 3834464705.8823533, + "kind": "fixture_only", + "name": "hmrc/capital_gains_band_50000", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 5863205882.3529415, + "kind": "fixture_only", + "name": "hmrc/capital_gains_band_500000", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 23343884033.61345, + "kind": "fixture_only", + "name": "hmrc/capital_gains_band_5000000", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 37000.0, + "kind": "fixture_only", + "name": "hmrc/cgt_taxpayers_band_100000", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 5000.0, + "kind": "fixture_only", + "name": "hmrc/cgt_taxpayers_band_1000000", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 79000.0, + "kind": "fixture_only", + "name": "hmrc/cgt_taxpayers_band_12300", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 3000.0, + "kind": "fixture_only", + "name": "hmrc/cgt_taxpayers_band_2000000", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 74000.0, + "kind": "fixture_only", + "name": "hmrc/cgt_taxpayers_band_25000", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 14000.0, + "kind": "fixture_only", + "name": "hmrc/cgt_taxpayers_band_250000", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 53000.0, + "kind": "fixture_only", + "name": "hmrc/cgt_taxpayers_band_50000", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 8000.0, + "kind": "fixture_only", + "name": "hmrc/cgt_taxpayers_band_500000", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 2000.0, + "kind": "fixture_only", + "name": "hmrc/cgt_taxpayers_band_5000000", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 4845000000.0, + "kind": "fixture_only", + "name": "hmrc/property_income_income_band_100_000_to_150_000", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1273000000.0, + "kind": "fixture_only", + "name": "hmrc/property_income_income_band_12_570_to_15_000", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 2185000000.0, + "kind": "fixture_only", + "name": "hmrc/property_income_income_band_150_000_to_200_000", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 3211000000.0, + "kind": "fixture_only", + "name": "hmrc/property_income_income_band_15_000_to_20_000", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 834100000.0, + "kind": "fixture_only", + "name": "hmrc/property_income_income_band_1_000_000_to_inf", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1995000000.0, + "kind": "fixture_only", + "name": "hmrc/property_income_income_band_200_000_to_300_000", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 7258000000.0, + "kind": "fixture_only", + "name": "hmrc/property_income_income_band_20_000_to_30_000", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1453500000.0, + "kind": "fixture_only", + "name": "hmrc/property_income_income_band_300_000_to_500_000", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 7220000000.0, + "kind": "fixture_only", + "name": "hmrc/property_income_income_band_30_000_to_40_000", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 7182000000.0, + "kind": "fixture_only", + "name": "hmrc/property_income_income_band_40_000_to_50_000", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 900600000.0, + "kind": "fixture_only", + "name": "hmrc/property_income_income_band_500_000_to_1_000_000", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 10260000000.0, + "kind": "fixture_only", + "name": "hmrc/property_income_income_band_50_000_to_70_000", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 7163000000.0, + "kind": "fixture_only", + "name": "hmrc/property_income_income_band_70_000_to_100_000", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 24720000000.0, + "kind": "fixture_only", + "name": "hmrc/salary_sacrifice_contributions", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 89035200000.0, + "kind": "fixture_only", + "name": "housing/rent_private", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 30680000000.0, + "kind": "fixture_only", + "name": "housing/rent_social", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 99000000000.0, + "kind": "fixture_only", + "name": "housing/total_mortgage", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 6512000.0, + "kind": "fixture_only", + "name": "nts/households_no_vehicle", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 13024000.0, + "kind": "fixture_only", + "name": "nts/households_one_vehicle", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 10064000.0, + "kind": "fixture_only", + "name": "nts/households_two_plus_vehicles", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 44117237614.71528, + "kind": "fixture_only", + "name": "obr.council_tax_england", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 3051227494.93594, + "kind": "fixture_only", + "name": "obr.council_tax_scotland", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 2400769752.36827, + "kind": "fixture_only", + "name": "obr.council_tax_wales", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 494000000.0, + "kind": "fixture_only", + "name": "obr.domestic_rates", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 82000.0, + "kind": "fixture_only", + "name": "ons.population.scotland_households_3plus_children", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 726000.0, + "kind": "fixture_only", + "name": "ons/east_age_0_9", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 741000.0, + "kind": "fixture_only", + "name": "ons/east_age_10_19", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 749000.0, + "kind": "fixture_only", + "name": "ons/east_age_20_29", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 890000.0, + "kind": "fixture_only", + "name": "ons/east_age_30_39", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 851000.0, + "kind": "fixture_only", + "name": "ons/east_age_40_49", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 867000.0, + "kind": "fixture_only", + "name": "ons/east_age_50_59", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 746000.0, + "kind": "fixture_only", + "name": "ons/east_age_60_69", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 643000.0, + "kind": "fixture_only", + "name": "ons/east_age_70_79", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 379000.0, + "kind": "fixture_only", + "name": "ons/east_age_80_89", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 532000.0, + "kind": "fixture_only", + "name": "ons/east_midlands_age_0_9", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 585000.0, + "kind": "fixture_only", + "name": "ons/east_midlands_age_10_19", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 632000.0, + "kind": "fixture_only", + "name": "ons/east_midlands_age_20_29", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 669000.0, + "kind": "fixture_only", + "name": "ons/east_midlands_age_30_39", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 621000.0, + "kind": "fixture_only", + "name": "ons/east_midlands_age_40_49", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 681000.0, + "kind": "fixture_only", + "name": "ons/east_midlands_age_50_59", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 592000.0, + "kind": "fixture_only", + "name": "ons/east_midlands_age_60_69", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 500000.0, + "kind": "fixture_only", + "name": "ons/east_midlands_age_70_79", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 273000.0, + "kind": "fixture_only", + "name": "ons/east_midlands_age_80_89", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 304799621177.5439, + "kind": "fixture_only", + "name": "ons/household_land_value/EAST_MIDLANDS", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 542672059385.554, + "kind": "fixture_only", + "name": "ons/household_land_value/EAST_OF_ENGLAND", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1188167933642.289, + "kind": "fixture_only", + "name": "ons/household_land_value/LONDON", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 119603822538.99867, + "kind": "fixture_only", + "name": "ons/household_land_value/NORTH_EAST", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 422892569458.29254, + "kind": "fixture_only", + "name": "ons/household_land_value/NORTH_WEST", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 280395193712.8084, + "kind": "fixture_only", + "name": "ons/household_land_value/SCOTLAND", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 885848048153.7532, + "kind": "fixture_only", + "name": "ons/household_land_value/SOUTH_EAST", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 456726035827.05096, + "kind": "fixture_only", + "name": "ons/household_land_value/SOUTH_WEST", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 179320185054.4999, + "kind": "fixture_only", + "name": "ons/household_land_value/WALES", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 364340113693.65784, + "kind": "fixture_only", + "name": "ons/household_land_value/WEST_MIDLANDS", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 298105966119.05054, + "kind": "fixture_only", + "name": "ons/household_land_value/YORKSHIRE", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1042000.0, + "kind": "fixture_only", + "name": "ons/london_age_0_9", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1038000.0, + "kind": "fixture_only", + "name": "ons/london_age_10_19", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1470000.0, + "kind": "fixture_only", + "name": "ons/london_age_20_29", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1585000.0, + "kind": "fixture_only", + "name": "ons/london_age_30_39", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1314000.0, + "kind": "fixture_only", + "name": "ons/london_age_40_49", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1078000.0, + "kind": "fixture_only", + "name": "ons/london_age_50_59", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 778000.0, + "kind": "fixture_only", + "name": "ons/london_age_60_69", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 509000.0, + "kind": "fixture_only", + "name": "ons/london_age_70_79", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 304000.0, + "kind": "fixture_only", + "name": "ons/london_age_80_89", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 281000.0, + "kind": "fixture_only", + "name": "ons/north_east_age_0_9", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 311000.0, + "kind": "fixture_only", + "name": "ons/north_east_age_10_19", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 343000.0, + "kind": "fixture_only", + "name": "ons/north_east_age_20_29", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 356000.0, + "kind": "fixture_only", + "name": "ons/north_east_age_30_39", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 323000.0, + "kind": "fixture_only", + "name": "ons/north_east_age_40_49", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 369000.0, + "kind": "fixture_only", + "name": "ons/north_east_age_50_59", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 353000.0, + "kind": "fixture_only", + "name": "ons/north_east_age_60_69", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 278000.0, + "kind": "fixture_only", + "name": "ons/north_east_age_70_79", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 153000.0, + "kind": "fixture_only", + "name": "ons/north_east_age_80_89", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 847000.0, + "kind": "fixture_only", + "name": "ons/north_west_age_0_9", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 901000.0, + "kind": "fixture_only", + "name": "ons/north_west_age_10_19", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 986000.0, + "kind": "fixture_only", + "name": "ons/north_west_age_20_29", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1056000.0, + "kind": "fixture_only", + "name": "ons/north_west_age_30_39", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 938000.0, + "kind": "fixture_only", + "name": "ons/north_west_age_40_49", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1011000.0, + "kind": "fixture_only", + "name": "ons/north_west_age_50_59", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 888000.0, + "kind": "fixture_only", + "name": "ons/north_west_age_60_69", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 715000.0, + "kind": "fixture_only", + "name": "ons/north_west_age_70_79", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 399000.0, + "kind": "fixture_only", + "name": "ons/north_west_age_80_89", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 234000.0, + "kind": "fixture_only", + "name": "ons/northern_ireland_age_0_9", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 244000.0, + "kind": "fixture_only", + "name": "ons/northern_ireland_age_10_19", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 230000.0, + "kind": "fixture_only", + "name": "ons/northern_ireland_age_20_29", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 264000.0, + "kind": "fixture_only", + "name": "ons/northern_ireland_age_30_39", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 254000.0, + "kind": "fixture_only", + "name": "ons/northern_ireland_age_40_49", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 257000.0, + "kind": "fixture_only", + "name": "ons/northern_ireland_age_50_59", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 224000.0, + "kind": "fixture_only", + "name": "ons/northern_ireland_age_60_69", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 165000.0, + "kind": "fixture_only", + "name": "ons/northern_ireland_age_70_79", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 93000.0, + "kind": "fixture_only", + "name": "ons/northern_ireland_age_80_89", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 526000.0, + "kind": "fixture_only", + "name": "ons/scotland_age_0_9", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 597000.0, + "kind": "fixture_only", + "name": "ons/scotland_age_10_19", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 709000.0, + "kind": "fixture_only", + "name": "ons/scotland_age_20_29", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 736000.0, + "kind": "fixture_only", + "name": "ons/scotland_age_30_39", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 691000.0, + "kind": "fixture_only", + "name": "ons/scotland_age_40_49", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 788000.0, + "kind": "fixture_only", + "name": "ons/scotland_age_50_59", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 727000.0, + "kind": "fixture_only", + "name": "ons/scotland_age_60_69", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 546000.0, + "kind": "fixture_only", + "name": "ons/scotland_age_70_79", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 297000.0, + "kind": "fixture_only", + "name": "ons/scotland_age_80_89", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1039000.0, + "kind": "fixture_only", + "name": "ons/south_east_age_0_9", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1114000.0, + "kind": "fixture_only", + "name": "ons/south_east_age_10_19", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1093000.0, + "kind": "fixture_only", + "name": "ons/south_east_age_20_29", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1283000.0, + "kind": "fixture_only", + "name": "ons/south_east_age_30_39", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1273000.0, + "kind": "fixture_only", + "name": "ons/south_east_age_40_49", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1287000.0, + "kind": "fixture_only", + "name": "ons/south_east_age_50_59", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1089000.0, + "kind": "fixture_only", + "name": "ons/south_east_age_60_69", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 927000.0, + "kind": "fixture_only", + "name": "ons/south_east_age_70_79", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 559000.0, + "kind": "fixture_only", + "name": "ons/south_east_age_80_89", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 576000.0, + "kind": "fixture_only", + "name": "ons/south_west_age_0_9", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 646000.0, + "kind": "fixture_only", + "name": "ons/south_west_age_10_19", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 694000.0, + "kind": "fixture_only", + "name": "ons/south_west_age_20_29", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 743000.0, + "kind": "fixture_only", + "name": "ons/south_west_age_30_39", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 704000.0, + "kind": "fixture_only", + "name": "ons/south_west_age_40_49", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 794000.0, + "kind": "fixture_only", + "name": "ons/south_west_age_50_59", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 741000.0, + "kind": "fixture_only", + "name": "ons/south_west_age_60_69", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 662000.0, + "kind": "fixture_only", + "name": "ons/south_west_age_70_79", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 388000.0, + "kind": "fixture_only", + "name": "ons/south_west_age_80_89", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 8374612.0, + "kind": "fixture_only", + "name": "ons/tenure_england_owned_outright", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 7667051.0, + "kind": "fixture_only", + "name": "ons/tenure_england_owned_with_mortgage", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 5299840.0, + "kind": "fixture_only", + "name": "ons/tenure_england_rented_privately", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 4274613.0, + "kind": "fixture_only", + "name": "ons/tenure_england_social_rent", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 25616116.0, + "kind": "fixture_only", + "name": "ons/tenure_england_total", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 325000.0, + "kind": "fixture_only", + "name": "ons/wales_age_0_9", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 362000.0, + "kind": "fixture_only", + "name": "ons/wales_age_10_19", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 389000.0, + "kind": "fixture_only", + "name": "ons/wales_age_20_29", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 408000.0, + "kind": "fixture_only", + "name": "ons/wales_age_30_39", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 374000.0, + "kind": "fixture_only", + "name": "ons/wales_age_40_49", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 432000.0, + "kind": "fixture_only", + "name": "ons/wales_age_50_59", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 407000.0, + "kind": "fixture_only", + "name": "ons/wales_age_60_69", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 343000.0, + "kind": "fixture_only", + "name": "ons/wales_age_70_79", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 190000.0, + "kind": "fixture_only", + "name": "ons/wales_age_80_89", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 700000.0, + "kind": "fixture_only", + "name": "ons/west_midlands_age_0_9", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 743000.0, + "kind": "fixture_only", + "name": "ons/west_midlands_age_10_19", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 774000.0, + "kind": "fixture_only", + "name": "ons/west_midlands_age_20_29", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 834000.0, + "kind": "fixture_only", + "name": "ons/west_midlands_age_30_39", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 758000.0, + "kind": "fixture_only", + "name": "ons/west_midlands_age_40_49", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 800000.0, + "kind": "fixture_only", + "name": "ons/west_midlands_age_50_59", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 685000.0, + "kind": "fixture_only", + "name": "ons/west_midlands_age_60_69", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 570000.0, + "kind": "fixture_only", + "name": "ons/west_midlands_age_70_79", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 337000.0, + "kind": "fixture_only", + "name": "ons/west_midlands_age_80_89", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 618000.0, + "kind": "fixture_only", + "name": "ons/yorkshire_and_the_humber_age_0_9", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 666000.0, + "kind": "fixture_only", + "name": "ons/yorkshire_and_the_humber_age_10_19", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 733000.0, + "kind": "fixture_only", + "name": "ons/yorkshire_and_the_humber_age_20_29", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 764000.0, + "kind": "fixture_only", + "name": "ons/yorkshire_and_the_humber_age_30_39", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 686000.0, + "kind": "fixture_only", + "name": "ons/yorkshire_and_the_humber_age_40_49", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 745000.0, + "kind": "fixture_only", + "name": "ons/yorkshire_and_the_humber_age_50_59", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 658000.0, + "kind": "fixture_only", + "name": "ons/yorkshire_and_the_humber_age_60_69", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 536000.0, + "kind": "fixture_only", + "name": "ons/yorkshire_and_the_humber_age_70_79", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 302000.0, + "kind": "fixture_only", + "name": "ons/yorkshire_and_the_humber_age_80_89", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 498707.0, + "kind": "fixture_only", + "name": "scotgov.council_tax_stock.band_a", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 583705.0, + "kind": "fixture_only", + "name": "scotgov.council_tax_stock.band_b", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 426388.0, + "kind": "fixture_only", + "name": "scotgov.council_tax_stock.band_c", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 369621.0, + "kind": "fixture_only", + "name": "scotgov.council_tax_stock.band_d", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 366881.0, + "kind": "fixture_only", + "name": "scotgov.council_tax_stock.band_e", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 221282.0, + "kind": "fixture_only", + "name": "scotgov.council_tax_stock.band_f", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 142084.0, + "kind": "fixture_only", + "name": "scotgov.council_tax_stock.band_g", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 14481.0, + "kind": "fixture_only", + "name": "scotgov.council_tax_stock.band_h", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 2623149.0, + "kind": "fixture_only", + "name": "scotgov.council_tax_stock.total", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 471000000.0, + "kind": "fixture_only", + "name": "scotgov.scottish_child_payment_spending", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 3985000.0, + "kind": "fixture_only", + "name": "slc.borrowers.plan_2_above_threshold", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 8940000.0, + "kind": "fixture_only", + "name": "slc.borrowers.plan_2_liable", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 0.0, + "kind": "fixture_only", + "name": "slc.borrowers.plan_5_above_threshold", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 10000.0, + "kind": "fixture_only", + "name": "slc.borrowers.plan_5_liable", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 18611.0, + "kind": "fixture_only", + "name": "slc.support.adult_dependants_grant_recipients", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 55364917.0, + "kind": "fixture_only", + "name": "slc.support.adult_dependants_grant_spend", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1159761.0, + "kind": "fixture_only", + "name": "slc.support.maintenance_loan_recipients", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 8591659718.0, + "kind": "fixture_only", + "name": "slc.support.maintenance_loan_spend", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 99645.0, + "kind": "fixture_only", + "name": "slc.support.parents_learning_allowance_recipients", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 181421659.0, + "kind": "fixture_only", + "name": "slc.support.parents_learning_allowance_spend", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 181700000.0, + "kind": "fixture_only", + "name": "slc/student_loan_repayment/northern_ireland", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 203300000.0, + "kind": "fixture_only", + "name": "slc/student_loan_repayment/scotland", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 229100000.0, + "kind": "fixture_only", + "name": "slc/student_loan_repayment/wales", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 804340.0, + "kind": "fixture_only", + "name": "voa/council_tax/EAST_MIDLANDS/A", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 505610.0, + "kind": "fixture_only", + "name": "voa/council_tax/EAST_MIDLANDS/B", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 403840.0, + "kind": "fixture_only", + "name": "voa/council_tax/EAST_MIDLANDS/C", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 247850.0, + "kind": "fixture_only", + "name": "voa/council_tax/EAST_MIDLANDS/D", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 154970.0, + "kind": "fixture_only", + "name": "voa/council_tax/EAST_MIDLANDS/E", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 73920.0, + "kind": "fixture_only", + "name": "voa/council_tax/EAST_MIDLANDS/F", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 39400.0, + "kind": "fixture_only", + "name": "voa/council_tax/EAST_MIDLANDS/G", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 3480.0, + "kind": "fixture_only", + "name": "voa/council_tax/EAST_MIDLANDS/H", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 2233400.0, + "kind": "fixture_only", + "name": "voa/council_tax/EAST_MIDLANDS/total", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 403180.0, + "kind": "fixture_only", + "name": "voa/council_tax/EAST_OF_ENGLAND/A", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 598950.0, + "kind": "fixture_only", + "name": "voa/council_tax/EAST_OF_ENGLAND/B", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 739570.0, + "kind": "fixture_only", + "name": "voa/council_tax/EAST_OF_ENGLAND/C", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 506540.0, + "kind": "fixture_only", + "name": "voa/council_tax/EAST_OF_ENGLAND/D", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 313840.0, + "kind": "fixture_only", + "name": "voa/council_tax/EAST_OF_ENGLAND/E", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 172960.0, + "kind": "fixture_only", + "name": "voa/council_tax/EAST_OF_ENGLAND/F", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 113720.0, + "kind": "fixture_only", + "name": "voa/council_tax/EAST_OF_ENGLAND/G", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 14830.0, + "kind": "fixture_only", + "name": "voa/council_tax/EAST_OF_ENGLAND/H", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 2863600.0, + "kind": "fixture_only", + "name": "voa/council_tax/EAST_OF_ENGLAND/total", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 144550.0, + "kind": "fixture_only", + "name": "voa/council_tax/LONDON/A", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 499130.0, + "kind": "fixture_only", + "name": "voa/council_tax/LONDON/B", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1040280.0, + "kind": "fixture_only", + "name": "voa/council_tax/LONDON/C", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 975750.0, + "kind": "fixture_only", + "name": "voa/council_tax/LONDON/D", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 585130.0, + "kind": "fixture_only", + "name": "voa/council_tax/LONDON/E", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 298920.0, + "kind": "fixture_only", + "name": "voa/council_tax/LONDON/F", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 225170.0, + "kind": "fixture_only", + "name": "voa/council_tax/LONDON/G", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 68500.0, + "kind": "fixture_only", + "name": "voa/council_tax/LONDON/H", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 3837430.0, + "kind": "fixture_only", + "name": "voa/council_tax/LONDON/total", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 667540.0, + "kind": "fixture_only", + "name": "voa/council_tax/NORTH_EAST/A", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 206790.0, + "kind": "fixture_only", + "name": "voa/council_tax/NORTH_EAST/B", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 196180.0, + "kind": "fixture_only", + "name": "voa/council_tax/NORTH_EAST/C", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 113460.0, + "kind": "fixture_only", + "name": "voa/council_tax/NORTH_EAST/D", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 61090.0, + "kind": "fixture_only", + "name": "voa/council_tax/NORTH_EAST/E", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 26600.0, + "kind": "fixture_only", + "name": "voa/council_tax/NORTH_EAST/F", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 14600.0, + "kind": "fixture_only", + "name": "voa/council_tax/NORTH_EAST/G", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1570.0, + "kind": "fixture_only", + "name": "voa/council_tax/NORTH_EAST/H", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1287830.0, + "kind": "fixture_only", + "name": "voa/council_tax/NORTH_EAST/total", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1386260.0, + "kind": "fixture_only", + "name": "voa/council_tax/NORTH_WEST/A", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 705450.0, + "kind": "fixture_only", + "name": "voa/council_tax/NORTH_WEST/B", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 616070.0, + "kind": "fixture_only", + "name": "voa/council_tax/NORTH_WEST/C", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 363970.0, + "kind": "fixture_only", + "name": "voa/council_tax/NORTH_WEST/D", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 216990.0, + "kind": "fixture_only", + "name": "voa/council_tax/NORTH_WEST/E", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 104330.0, + "kind": "fixture_only", + "name": "voa/council_tax/NORTH_WEST/F", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 65750.0, + "kind": "fixture_only", + "name": "voa/council_tax/NORTH_WEST/G", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 7350.0, + "kind": "fixture_only", + "name": "voa/council_tax/NORTH_WEST/H", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 3466140.0, + "kind": "fixture_only", + "name": "voa/council_tax/NORTH_WEST/total", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 367610.0, + "kind": "fixture_only", + "name": "voa/council_tax/SOUTH_EAST/A", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 687430.0, + "kind": "fixture_only", + "name": "voa/council_tax/SOUTH_EAST/B", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1075940.0, + "kind": "fixture_only", + "name": "voa/council_tax/SOUTH_EAST/C", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 843560.0, + "kind": "fixture_only", + "name": "voa/council_tax/SOUTH_EAST/D", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 551730.0, + "kind": "fixture_only", + "name": "voa/council_tax/SOUTH_EAST/E", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 337260.0, + "kind": "fixture_only", + "name": "voa/council_tax/SOUTH_EAST/F", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 265610.0, + "kind": "fixture_only", + "name": "voa/council_tax/SOUTH_EAST/G", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 40390.0, + "kind": "fixture_only", + "name": "voa/council_tax/SOUTH_EAST/H", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 4169520.0, + "kind": "fixture_only", + "name": "voa/council_tax/SOUTH_EAST/total", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 473020.0, + "kind": "fixture_only", + "name": "voa/council_tax/SOUTH_WEST/A", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 644890.0, + "kind": "fixture_only", + "name": "voa/council_tax/SOUTH_WEST/B", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 624030.0, + "kind": "fixture_only", + "name": "voa/council_tax/SOUTH_WEST/C", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 432070.0, + "kind": "fixture_only", + "name": "voa/council_tax/SOUTH_WEST/D", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 292090.0, + "kind": "fixture_only", + "name": "voa/council_tax/SOUTH_WEST/E", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 147920.0, + "kind": "fixture_only", + "name": "voa/council_tax/SOUTH_WEST/F", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 81960.0, + "kind": "fixture_only", + "name": "voa/council_tax/SOUTH_WEST/G", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 8430.0, + "kind": "fixture_only", + "name": "voa/council_tax/SOUTH_WEST/H", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 2704390.0, + "kind": "fixture_only", + "name": "voa/council_tax/SOUTH_WEST/total", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 215380.0, + "kind": "fixture_only", + "name": "voa/council_tax/WALES/A", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 307070.0, + "kind": "fixture_only", + "name": "voa/council_tax/WALES/B", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 323220.0, + "kind": "fixture_only", + "name": "voa/council_tax/WALES/C", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 241220.0, + "kind": "fixture_only", + "name": "voa/council_tax/WALES/D", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 200840.0, + "kind": "fixture_only", + "name": "voa/council_tax/WALES/E", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 122650.0, + "kind": "fixture_only", + "name": "voa/council_tax/WALES/F", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 55190.0, + "kind": "fixture_only", + "name": "voa/council_tax/WALES/G", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 13190.0, + "kind": "fixture_only", + "name": "voa/council_tax/WALES/H", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1484410.0, + "kind": "fixture_only", + "name": "voa/council_tax/WALES/total", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 786010.0, + "kind": "fixture_only", + "name": "voa/council_tax/WEST_MIDLANDS/A", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 654140.0, + "kind": "fixture_only", + "name": "voa/council_tax/WEST_MIDLANDS/B", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 526260.0, + "kind": "fixture_only", + "name": "voa/council_tax/WEST_MIDLANDS/C", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 302500.0, + "kind": "fixture_only", + "name": "voa/council_tax/WEST_MIDLANDS/D", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 193700.0, + "kind": "fixture_only", + "name": "voa/council_tax/WEST_MIDLANDS/E", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 105630.0, + "kind": "fixture_only", + "name": "voa/council_tax/WEST_MIDLANDS/F", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 62780.0, + "kind": "fixture_only", + "name": "voa/council_tax/WEST_MIDLANDS/G", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 6170.0, + "kind": "fixture_only", + "name": "voa/council_tax/WEST_MIDLANDS/H", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 2637190.0, + "kind": "fixture_only", + "name": "voa/council_tax/WEST_MIDLANDS/total", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1070830.0, + "kind": "fixture_only", + "name": "voa/council_tax/YORKSHIRE/A", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 514190.0, + "kind": "fixture_only", + "name": "voa/council_tax/YORKSHIRE/B", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 432290.0, + "kind": "fixture_only", + "name": "voa/council_tax/YORKSHIRE/C", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 249530.0, + "kind": "fixture_only", + "name": "voa/council_tax/YORKSHIRE/D", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 158600.0, + "kind": "fixture_only", + "name": "voa/council_tax/YORKSHIRE/E", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 75690.0, + "kind": "fixture_only", + "name": "voa/council_tax/YORKSHIRE/F", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 42180.0, + "kind": "fixture_only", + "name": "voa/council_tax/YORKSHIRE/G", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 3770.0, + "kind": "fixture_only", + "name": "voa/council_tax/YORKSHIRE/H", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 2547080.0, + "kind": "fixture_only", + "name": "voa/council_tax/YORKSHIRE/total", + "period": 2025, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 597920.0, + "name": "dwp.uc.two_child_limit.children_affected", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 235270.0, + "name": "dwp.uc.two_child_limit.children_claimant_pip", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 479460.0, + "name": "dwp.uc.two_child_limit.children_disabled_child_element", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 891930.0, + "name": "dwp.uc.two_child_limit.children_in_3_children_households", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 468760.0, + "name": "dwp.uc.two_child_limit.children_in_4_children_households", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 185120.0, + "name": "dwp.uc.two_child_limit.children_in_5_children_households", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 119720.0, + "name": "dwp.uc.two_child_limit.children_in_6_plus_children_households", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 1665540.0, + "name": "dwp.uc.two_child_limit.children_in_affected_households", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 297310.0, + "name": "dwp.uc.two_child_limit.households_3_children", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 117190.0, + "name": "dwp.uc.two_child_limit.households_4_children", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 37020.0, + "name": "dwp.uc.two_child_limit.households_5_children", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 18260.0, + "name": "dwp.uc.two_child_limit.households_6_plus_children", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 469780.0, + "name": "dwp.uc.two_child_limit.households_affected", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 65280.0, + "name": "dwp.uc.two_child_limit.households_claimant_pip", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 129630.0, + "name": "dwp.uc.two_child_limit.households_disabled_child_element", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 1800000000.0, + "name": "hmrc.salary_sacrifice.it_relief_additional_rate", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 1600000000.0, + "name": "hmrc.salary_sacrifice.it_relief_basic_rate", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 5500000000.0, + "name": "hmrc.salary_sacrifice.it_relief_higher_rate", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 7553013.0, + "name": "ons.population.age_0_9_by_region", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 8331437.0, + "name": "ons.population.age_10_19_by_region", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 8715225.0, + "name": "ons.population.age_20_29_by_region", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 9572397.0, + "name": "ons.population.age_30_39_by_region", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 8622506.0, + "name": "ons.population.age_40_49_by_region", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 9036816.0, + "name": "ons.population.age_50_59_by_region", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 7861034.0, + "name": "ons.population.age_60_69_by_region", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 5998605.0, + "name": "ons.population.age_70_79_by_region", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2965168.0, + "name": "ons.population.age_80_89_by_region", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 414716.0, + "name": "ons.population.female_90_plus", + "period": 2025, + "reason": "María ruling 2026-08-21: new female 90_plus tail constrains ages 90+; the incumbent six-year terminal band left ages 91+ unconstrained." + }, + { + "kind": "ledger_only", + "ledger_value": 210520.0, + "name": "ons.population.male_90_plus", + "period": 2025, + "reason": "María ruling 2026-08-21: new male 90_plus tail constrains ages 90+; the incumbent six-year terminal band left ages 91+ unconstrained." + }, + { + "kind": "ledger_only", + "ledger_value": 6103320.0, + "name": "voa.council_tax_stock.band_a", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 5016580.0, + "name": "voa.council_tax_stock.band_b", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 5654450.0, + "name": "voa.council_tax_stock.band_c", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 4035220.0, + "name": "voa.council_tax_stock.band_d", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2528140.0, + "name": "voa.council_tax_stock.band_e", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 1343220.0, + "name": "voa.council_tax_stock.band_f", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 911160.0, + "name": "voa.council_tax_stock.band_g", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 154470.0, + "name": "voa.council_tax_stock.band_h", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 25746570.0, + "name": "voa.council_tax_stock.total", + "period": 2025, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "fixture_value": 999000.0, + "kind": "calibration_drift", + "ledger_value": 1000000.0, + "name": "dwp.esa_claimants", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 6700000.0, + "kind": "calibration_drift", + "ledger_value": 6758888.888888889, + "name": "dwp.uc.households", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 1222944.0, + "kind": "calibration_drift", + "ledger_value": 1269512.0, + "name": "dwp.uc.households_children_1", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 1058967.0, + "kind": "calibration_drift", + "ledger_value": 1103880.0, + "name": "dwp.uc.households_children_2", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 473500.0, + "kind": "calibration_drift", + "ledger_value": 497665.0, + "name": "dwp.uc.households_children_3", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 166790.0, + "kind": "calibration_drift", + "ledger_value": 176202.0, + "name": "dwp.uc.households_children_4", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 75910.0, + "kind": "calibration_drift", + "ledger_value": 77894.0, + "name": "dwp.uc.households_children_5_or_more", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 231368.0, + "kind": "calibration_drift", + "ledger_value": 266160.0, + "name": "dwp.uc.households_couple_no_children", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 839379.0, + "kind": "calibration_drift", + "ledger_value": 911392.0, + "name": "dwp.uc.households_couple_with_children", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 2868011.0, + "kind": "calibration_drift", + "ledger_value": 3191316.0, + "name": "dwp.uc.households_single_no_children", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 2156879.0, + "kind": "calibration_drift", + "ledger_value": 2213760.0, + "name": "dwp.uc.households_single_with_children", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 14000.0, + "kind": "calibration_drift", + "ledger_value": 14412.0, + "name": "dwp.uc.scotland_households_child_under_1", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 7610.0, + "kind": "calibration_drift", + "ledger_value": 7553.0, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_0_to_1_200", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 12370.0, + "kind": "calibration_drift", + "ledger_value": 12318.0, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_10_800_to_12_000", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 15175.0, + "kind": "calibration_drift", + "ledger_value": 15096.0, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_12_000_to_13_200", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 12297.0, + "kind": "calibration_drift", + "ledger_value": 12422.0, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_13_200_to_14_400", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 17828.0, + "kind": "calibration_drift", + "ledger_value": 17851.0, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_14_400_to_15_600", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 14427.0, + "kind": "calibration_drift", + "ledger_value": 14493.0, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_15_600_to_16_800", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 11892.0, + "kind": "calibration_drift", + "ledger_value": 11914.0, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_16_800_to_18_000", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 9463.0, + "kind": "calibration_drift", + "ledger_value": 9478.0, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_18_000_to_19_200", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 8443.0, + "kind": "calibration_drift", + "ledger_value": 8479.0, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_19_200_to_20_400", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 8906.0, + "kind": "calibration_drift", + "ledger_value": 8732.0, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_1_200_to_2_400", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 5770.0, + "kind": "calibration_drift", + "ledger_value": 5764.0, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_20_400_to_21_600", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 3485.0, + "kind": "calibration_drift", + "ledger_value": 3525.0, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_21_600_to_22_800", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 2360.0, + "kind": "calibration_drift", + "ledger_value": 2356.0, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_22_800_to_24_000", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 1815.0, + "kind": "calibration_drift", + "ledger_value": 1797.0, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_24_000_to_25_200", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 1186.0, + "kind": "calibration_drift", + "ledger_value": 1214.0, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_25_200_to_26_400", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 935.0, + "kind": "calibration_drift", + "ledger_value": 958.0, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_26_400_to_27_600", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 632.0, + "kind": "calibration_drift", + "ledger_value": 654.0, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_27_600_to_28_800", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 580.0, + "kind": "calibration_drift", + "ledger_value": 578.0, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_28_800_to_30_000", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 11750.0, + "kind": "calibration_drift", + "ledger_value": 11606.0, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_2_400_to_3_600", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 10802.0, + "kind": "calibration_drift", + "ledger_value": 10672.0, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_3_600_to_4_800", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 12168.0, + "kind": "calibration_drift", + "ledger_value": 12199.0, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_4_800_to_6_000", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 12461.0, + "kind": "calibration_drift", + "ledger_value": 12405.0, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_6_000_to_7_200", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 15787.0, + "kind": "calibration_drift", + "ledger_value": 15632.0, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_7_200_to_8_400", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 14248.0, + "kind": "calibration_drift", + "ledger_value": 14298.0, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_8_400_to_9_600", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 17559.0, + "kind": "calibration_drift", + "ledger_value": 17626.0, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_9_600_to_10_800", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 18714.0, + "kind": "calibration_drift", + "ledger_value": 18896.0, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_0_to_1_200", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 42188.0, + "kind": "calibration_drift", + "ledger_value": 41858.0, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_10_800_to_12_000", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 41520.0, + "kind": "calibration_drift", + "ledger_value": 41349.0, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_12_000_to_13_200", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 41159.0, + "kind": "calibration_drift", + "ledger_value": 40850.0, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_13_200_to_14_400", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 42515.0, + "kind": "calibration_drift", + "ledger_value": 42101.0, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_14_400_to_15_600", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 38527.0, + "kind": "calibration_drift", + "ledger_value": 38379.0, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_15_600_to_16_800", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 38894.0, + "kind": "calibration_drift", + "ledger_value": 38725.0, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_16_800_to_18_000", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 38659.0, + "kind": "calibration_drift", + "ledger_value": 38124.0, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_18_000_to_19_200", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 34318.0, + "kind": "calibration_drift", + "ledger_value": 33871.0, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_19_200_to_20_400", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 22489.0, + "kind": "calibration_drift", + "ledger_value": 22614.0, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_1_200_to_2_400", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 30116.0, + "kind": "calibration_drift", + "ledger_value": 29950.0, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_20_400_to_21_600", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 28519.0, + "kind": "calibration_drift", + "ledger_value": 28186.0, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_21_600_to_22_800", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 26014.0, + "kind": "calibration_drift", + "ledger_value": 25960.0, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_22_800_to_24_000", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 23159.0, + "kind": "calibration_drift", + "ledger_value": 23231.0, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_24_000_to_25_200", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 20618.0, + "kind": "calibration_drift", + "ledger_value": 20598.0, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_25_200_to_26_400", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 17493.0, + "kind": "calibration_drift", + "ledger_value": 17650.0, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_26_400_to_27_600", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 15437.0, + "kind": "calibration_drift", + "ledger_value": 15499.0, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_27_600_to_28_800", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 12836.0, + "kind": "calibration_drift", + "ledger_value": 12912.0, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_28_800_to_30_000", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 26734.0, + "kind": "calibration_drift", + "ledger_value": 26768.0, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_2_400_to_3_600", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 29189.0, + "kind": "calibration_drift", + "ledger_value": 29288.0, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_3_600_to_4_800", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 33137.0, + "kind": "calibration_drift", + "ledger_value": 33072.0, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_4_800_to_6_000", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 38338.0, + "kind": "calibration_drift", + "ledger_value": 38337.0, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_7_200_to_8_400", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 40685.0, + "kind": "calibration_drift", + "ledger_value": 40556.0, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_8_400_to_9_600", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 40564.0, + "kind": "calibration_drift", + "ledger_value": 40399.0, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_9_600_to_10_800", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 24639.0, + "kind": "calibration_drift", + "ledger_value": 24828.0, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_0_to_1_200", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 126949.0, + "kind": "calibration_drift", + "ledger_value": 125466.0, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_10_800_to_12_000", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 131129.0, + "kind": "calibration_drift", + "ledger_value": 129699.0, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_12_000_to_13_200", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 131289.0, + "kind": "calibration_drift", + "ledger_value": 129699.0, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_13_200_to_14_400", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 119355.0, + "kind": "calibration_drift", + "ledger_value": 117812.0, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_14_400_to_15_600", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 130802.0, + "kind": "calibration_drift", + "ledger_value": 128991.0, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_15_600_to_16_800", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 141848.0, + "kind": "calibration_drift", + "ledger_value": 139675.0, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_16_800_to_18_000", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 136835.0, + "kind": "calibration_drift", + "ledger_value": 134650.0, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_18_000_to_19_200", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 107556.0, + "kind": "calibration_drift", + "ledger_value": 106818.0, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_19_200_to_20_400", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 34670.0, + "kind": "calibration_drift", + "ledger_value": 34587.0, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_1_200_to_2_400", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 86616.0, + "kind": "calibration_drift", + "ledger_value": 86255.0, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_20_400_to_21_600", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 80294.0, + "kind": "calibration_drift", + "ledger_value": 80273.0, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_21_600_to_22_800", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 70309.0, + "kind": "calibration_drift", + "ledger_value": 70319.0, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_22_800_to_24_000", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 50510.0, + "kind": "calibration_drift", + "ledger_value": 50805.0, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_24_000_to_25_200", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 42522.0, + "kind": "calibration_drift", + "ledger_value": 43132.0, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_25_200_to_26_400", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 33508.0, + "kind": "calibration_drift", + "ledger_value": 34342.0, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_26_400_to_27_600", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 27063.0, + "kind": "calibration_drift", + "ledger_value": 27650.0, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_27_600_to_28_800", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 21663.0, + "kind": "calibration_drift", + "ledger_value": 22058.0, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_28_800_to_30_000", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 43623.0, + "kind": "calibration_drift", + "ledger_value": 43550.0, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_2_400_to_3_600", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 55622.0, + "kind": "calibration_drift", + "ledger_value": 55560.0, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_3_600_to_4_800", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 67901.0, + "kind": "calibration_drift", + "ledger_value": 68058.0, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_4_800_to_6_000", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 89314.0, + "kind": "calibration_drift", + "ledger_value": 89174.0, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_6_000_to_7_200", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 118641.0, + "kind": "calibration_drift", + "ledger_value": 117236.0, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_7_200_to_8_400", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 99069.0, + "kind": "calibration_drift", + "ledger_value": 98877.0, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_8_400_to_9_600", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 102251.0, + "kind": "calibration_drift", + "ledger_value": 102069.0, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_9_600_to_10_800", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 102312.0, + "kind": "calibration_drift", + "ledger_value": 101189.0, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_0_to_1_200", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 95698.0, + "kind": "calibration_drift", + "ledger_value": 94296.0, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_10_800_to_12_000", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 106663.0, + "kind": "calibration_drift", + "ledger_value": 106102.0, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_12_000_to_13_200", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 181180.0, + "kind": "calibration_drift", + "ledger_value": 182183.0, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_13_200_to_14_400", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 189861.0, + "kind": "calibration_drift", + "ledger_value": 191730.0, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_14_400_to_15_600", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 129174.0, + "kind": "calibration_drift", + "ledger_value": 130302.0, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_15_600_to_16_800", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 84690.0, + "kind": "calibration_drift", + "ledger_value": 86110.0, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_16_800_to_18_000", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 46244.0, + "kind": "calibration_drift", + "ledger_value": 47330.0, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_18_000_to_19_200", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 26481.0, + "kind": "calibration_drift", + "ledger_value": 27065.0, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_19_200_to_20_400", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 120819.0, + "kind": "calibration_drift", + "ledger_value": 121018.0, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_1_200_to_2_400", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 18143.0, + "kind": "calibration_drift", + "ledger_value": 18536.0, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_20_400_to_21_600", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 12325.0, + "kind": "calibration_drift", + "ledger_value": 12726.0, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_21_600_to_22_800", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 9555.0, + "kind": "calibration_drift", + "ledger_value": 9793.0, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_22_800_to_24_000", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 6230.0, + "kind": "calibration_drift", + "ledger_value": 6398.0, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_24_000_to_25_200", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 5884.0, + "kind": "calibration_drift", + "ledger_value": 6020.0, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_25_200_to_26_400", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 5362.0, + "kind": "calibration_drift", + "ledger_value": 5488.0, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_26_400_to_27_600", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 1786.0, + "kind": "calibration_drift", + "ledger_value": 1829.0, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_27_600_to_28_800", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 1491.0, + "kind": "calibration_drift", + "ledger_value": 1543.0, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_28_800_to_30_000", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 173925.0, + "kind": "calibration_drift", + "ledger_value": 173855.0, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_2_400_to_3_600", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 375706.0, + "kind": "calibration_drift", + "ledger_value": 369404.0, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_3_600_to_4_800", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 200713.0, + "kind": "calibration_drift", + "ledger_value": 197717.0, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_4_800_to_6_000", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 107860.0, + "kind": "calibration_drift", + "ledger_value": 106706.0, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_6_000_to_7_200", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 144036.0, + "kind": "calibration_drift", + "ledger_value": 143277.0, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_7_200_to_8_400", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 377221.0, + "kind": "calibration_drift", + "ledger_value": 379652.0, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_8_400_to_9_600", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 341138.0, + "kind": "calibration_drift", + "ledger_value": 341457.0, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_9_600_to_10_800", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 67727478991.59665, + "kind": "calibration_drift", + "ledger_value": 65937000000.0, + "name": "hmrc.cgt.gains_total", + "period": 2025, + "reason": "Ledger carries the HMRC 2023-24 outturn value GBP 65,937,000,000 and holds it by identity under the current doctrine; the incumbent Fixture B row is GBP 67,727,478,991.60 at 2025 because it carries a forecast/uprated value. Signed as a doctrine consequence, not a binding error." + }, + { + "fixture_value": 1236000000.0, + "kind": "calibration_drift", + "ledger_value": 1000000000.0, + "name": "hmrc.salary_sacrifice.nics_relief_employee", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 2987000000.0, + "kind": "calibration_drift", + "ledger_value": 3400000000.0, + "name": "hmrc.salary_sacrifice.nics_relief_employer", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 3379200.0, + "kind": "calibration_drift", + "ledger_value": 3300000.0, + "name": "hmrc.salary_sacrifice.users_above_cap", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 4403200.0, + "kind": "calibration_drift", + "ledger_value": 4300000.0, + "name": "hmrc.salary_sacrifice.users_below_cap", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 7884800.0, + "kind": "calibration_drift", + "ledger_value": 7700000.0, + "name": "hmrc.salary_sacrifice.users_total", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 557000.0, + "kind": "calibration_drift", + "ledger_value": 556551.0, + "name": "isc.private_school_students", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 2057128451236.5015, + "kind": "calibration_drift", + "ledger_value": 2103053000000.0, + "name": "ons.land.corporate_land_value", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 5042871548763.499, + "kind": "calibration_drift", + "ledger_value": 4559831000000.0, + "name": "ons.land.household_land_value", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 7100000000000.0, + "kind": "calibration_drift", + "ledger_value": 7117771000000.0, + "name": "ons.land.land_value", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 1698816.0, + "kind": "calibration_drift", + "ledger_value": 1744355.0, + "name": "ons.population.female_0_4", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 2041879.0, + "kind": "calibration_drift", + "ledger_value": 2052052.0, + "name": "ons.population.female_10_14", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 2036402.0, + "kind": "calibration_drift", + "ledger_value": 2002835.0, + "name": "ons.population.female_15_19", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 2033478.0, + "kind": "calibration_drift", + "ledger_value": 2034609.0, + "name": "ons.population.female_20_24", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 2258028.0, + "kind": "calibration_drift", + "ledger_value": 2291610.0, + "name": "ons.population.female_25_29", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 2443559.0, + "kind": "calibration_drift", + "ledger_value": 2463301.0, + "name": "ons.population.female_30_34", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 2497122.0, + "kind": "calibration_drift", + "ledger_value": 2472291.0, + "name": "ons.population.female_35_39", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 2356214.0, + "kind": "calibration_drift", + "ledger_value": 2333109.0, + "name": "ons.population.female_40_44", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 2135556.0, + "kind": "calibration_drift", + "ledger_value": 2088285.0, + "name": "ons.population.female_45_49", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 2206473.0, + "kind": "calibration_drift", + "ledger_value": 2255231.0, + "name": "ons.population.female_50_54", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 2340737.0, + "kind": "calibration_drift", + "ledger_value": 2360202.0, + "name": "ons.population.female_55_59", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 1918180.0, + "kind": "calibration_drift", + "ledger_value": 1941658.0, + "name": "ons.population.female_5_9", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 2248908.0, + "kind": "calibration_drift", + "ledger_value": 2193915.0, + "name": "ons.population.female_60_64", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 1890892.0, + "kind": "calibration_drift", + "ledger_value": 1838574.0, + "name": "ons.population.female_65_69", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 1619328.0, + "kind": "calibration_drift", + "ledger_value": 1622996.0, + "name": "ons.population.female_70_74", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 1575830.0, + "kind": "calibration_drift", + "ledger_value": 1551183.0, + "name": "ons.population.female_75_79", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 1064043.0, + "kind": "calibration_drift", + "ledger_value": 1024480.0, + "name": "ons.population.female_80_84", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 766765.0, + "kind": "calibration_drift", + "ledger_value": 665267.0, + "name": "ons.population.female_85_89", + "period": 2025, + "reason": "María ruling 2026-08-21: incumbent ons/female_85_90 maps to the uniform female 85_89 declaration. The value gap is the single-age-90 share; ages 90+ are constrained separately." + }, + { + "fixture_value": 1784490.0, + "kind": "calibration_drift", + "ledger_value": 1829801.0, + "name": "ons.population.male_0_4", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 2143309.0, + "kind": "calibration_drift", + "ledger_value": 2152800.0, + "name": "ons.population.male_10_14", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 2149930.0, + "kind": "calibration_drift", + "ledger_value": 2123750.0, + "name": "ons.population.male_15_19", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 2136737.0, + "kind": "calibration_drift", + "ledger_value": 2131646.0, + "name": "ons.population.male_20_24", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 2246892.0, + "kind": "calibration_drift", + "ledger_value": 2257360.0, + "name": "ons.population.male_25_29", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 2323977.0, + "kind": "calibration_drift", + "ledger_value": 2333326.0, + "name": "ons.population.male_30_34", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 2325815.0, + "kind": "calibration_drift", + "ledger_value": 2303479.0, + "name": "ons.population.male_35_39", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 2208064.0, + "kind": "calibration_drift", + "ledger_value": 2196013.0, + "name": "ons.population.male_40_44", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 2040636.0, + "kind": "calibration_drift", + "ledger_value": 2005099.0, + "name": "ons.population.male_45_49", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 2119462.0, + "kind": "calibration_drift", + "ledger_value": 2164862.0, + "name": "ons.population.male_50_54", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 2234921.0, + "kind": "calibration_drift", + "ledger_value": 2256521.0, + "name": "ons.population.male_55_59", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 2011903.0, + "kind": "calibration_drift", + "ledger_value": 2037199.0, + "name": "ons.population.male_5_9", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 2138720.0, + "kind": "calibration_drift", + "ledger_value": 2094462.0, + "name": "ons.population.male_60_64", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 1785048.0, + "kind": "calibration_drift", + "ledger_value": 1734083.0, + "name": "ons.population.male_65_69", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 1472190.0, + "kind": "calibration_drift", + "ledger_value": 1473758.0, + "name": "ons.population.male_70_74", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 1370172.0, + "kind": "calibration_drift", + "ledger_value": 1350668.0, + "name": "ons.population.male_75_79", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 853423.0, + "kind": "calibration_drift", + "ledger_value": 815910.0, + "name": "ons.population.male_80_84", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 524918.0, + "kind": "calibration_drift", + "ledger_value": 459511.0, + "name": "ons.population.male_85_89", + "period": 2025, + "reason": "María ruling 2026-08-21: incumbent ons/male_85_90 maps to the uniform male 85_89 declaration. The value gap is the single-age-90 share; ages 90+ are constrained separately." + }, + { + "fixture_value": 46000.0, + "kind": "calibration_drift", + "ledger_value": 46776.0, + "name": "ons.population.scotland_babies_under_1", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 892000.0, + "kind": "calibration_drift", + "ledger_value": 896833.0, + "name": "ons.population.scotland_children_under_16", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 69502341.0, + "kind": "calibration_drift", + "ledger_value": 69281437.0, + "name": "ons.population.uk_total", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 5940000.0, + "kind": "calibration_drift", + "ledger_value": 6146000.0, + "name": "ons.public_sector_employment", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 346409713.95, + "kind": "calibration_drift", + "ledger_value": 346409713.95000005, + "name": "slc.repayments.england_postgraduate", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 5018231834.95, + "kind": "calibration_drift", + "ledger_value": 5018231834.949999, + "name": "slc.repayments.england_total_higher_education", + "period": 2025, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + } + ], + "fixture_count": 637 +} diff --git a/packages/microcosm-build/src/microcosm/build/uk/ledger_compile_parity_production_2023_signed_differences.json b/packages/microcosm-build/src/microcosm/build/uk/ledger_compile_parity_production_2023_signed_differences.json new file mode 100644 index 000000000..b796fe2d0 --- /dev/null +++ b/packages/microcosm-build/src/microcosm/build/uk/ledger_compile_parity_production_2023_signed_differences.json @@ -0,0 +1,2328 @@ +{ + "compiled_count": 211, + "counts_by_kind": { + "calibration_drift": 6, + "fixture_only": 131, + "ledger_only": 193 + }, + "difference_count": 330, + "differences": [ + { + "fixture_value": 82000.0, + "kind": "fixture_only", + "name": "ons.population.scotland_households_3plus_children", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 730000.0, + "kind": "fixture_only", + "name": "ons/east_age_0_9", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 745000.0, + "kind": "fixture_only", + "name": "ons/east_age_10_19", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 729000.0, + "kind": "fixture_only", + "name": "ons/east_age_20_29", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 868000.0, + "kind": "fixture_only", + "name": "ons/east_age_30_39", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 829000.0, + "kind": "fixture_only", + "name": "ons/east_age_40_49", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 873000.0, + "kind": "fixture_only", + "name": "ons/east_age_50_59", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 721000.0, + "kind": "fixture_only", + "name": "ons/east_age_60_69", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 612000.0, + "kind": "fixture_only", + "name": "ons/east_age_70_79", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 360000.0, + "kind": "fixture_only", + "name": "ons/east_age_80_89", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 535000.0, + "kind": "fixture_only", + "name": "ons/east_midlands_age_0_9", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 588000.0, + "kind": "fixture_only", + "name": "ons/east_midlands_age_10_19", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 614000.0, + "kind": "fixture_only", + "name": "ons/east_midlands_age_20_29", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 652000.0, + "kind": "fixture_only", + "name": "ons/east_midlands_age_30_39", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 605000.0, + "kind": "fixture_only", + "name": "ons/east_midlands_age_40_49", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 686000.0, + "kind": "fixture_only", + "name": "ons/east_midlands_age_50_59", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 572000.0, + "kind": "fixture_only", + "name": "ons/east_midlands_age_60_69", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 475000.0, + "kind": "fixture_only", + "name": "ons/east_midlands_age_70_79", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 260000.0, + "kind": "fixture_only", + "name": "ons/east_midlands_age_80_89", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 290045387683.9658, + "kind": "fixture_only", + "name": "ons/household_land_value/EAST_MIDLANDS", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 516403292240.49414, + "kind": "fixture_only", + "name": "ons/household_land_value/EAST_OF_ENGLAND", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1130653075012.1692, + "kind": "fixture_only", + "name": "ons/household_land_value/LONDON", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 113814239475.71474, + "kind": "fixture_only", + "name": "ons/household_land_value/NORTH_EAST", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 402421888791.4934, + "kind": "fixture_only", + "name": "ons/household_land_value/NORTH_WEST", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 266822289184.47226, + "kind": "fixture_only", + "name": "ons/household_land_value/SCOTLAND", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 842967388093.2286, + "kind": "fixture_only", + "name": "ons/household_land_value/SOUTH_EAST", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 434617600950.541, + "kind": "fixture_only", + "name": "ons/household_land_value/SOUTH_WEST", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 170639951561.47794, + "kind": "fixture_only", + "name": "ons/household_land_value/WALES", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 346703742992.981, + "kind": "fixture_only", + "name": "ons/household_land_value/WEST_MIDLANDS", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 283675747954.8778, + "kind": "fixture_only", + "name": "ons/household_land_value/YORKSHIRE", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1047000.0, + "kind": "fixture_only", + "name": "ons/london_age_0_9", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1043000.0, + "kind": "fixture_only", + "name": "ons/london_age_10_19", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1429000.0, + "kind": "fixture_only", + "name": "ons/london_age_20_29", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1545000.0, + "kind": "fixture_only", + "name": "ons/london_age_30_39", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1280000.0, + "kind": "fixture_only", + "name": "ons/london_age_40_49", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1086000.0, + "kind": "fixture_only", + "name": "ons/london_age_50_59", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 751000.0, + "kind": "fixture_only", + "name": "ons/london_age_60_69", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 484000.0, + "kind": "fixture_only", + "name": "ons/london_age_70_79", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 289000.0, + "kind": "fixture_only", + "name": "ons/london_age_80_89", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 283000.0, + "kind": "fixture_only", + "name": "ons/north_east_age_0_9", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 312000.0, + "kind": "fixture_only", + "name": "ons/north_east_age_10_19", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 333000.0, + "kind": "fixture_only", + "name": "ons/north_east_age_20_29", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 347000.0, + "kind": "fixture_only", + "name": "ons/north_east_age_30_39", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 314000.0, + "kind": "fixture_only", + "name": "ons/north_east_age_40_49", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 371000.0, + "kind": "fixture_only", + "name": "ons/north_east_age_50_59", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 341000.0, + "kind": "fixture_only", + "name": "ons/north_east_age_60_69", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 264000.0, + "kind": "fixture_only", + "name": "ons/north_east_age_70_79", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 145000.0, + "kind": "fixture_only", + "name": "ons/north_east_age_80_89", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 851000.0, + "kind": "fixture_only", + "name": "ons/north_west_age_0_9", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 906000.0, + "kind": "fixture_only", + "name": "ons/north_west_age_10_19", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 958000.0, + "kind": "fixture_only", + "name": "ons/north_west_age_20_29", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1029000.0, + "kind": "fixture_only", + "name": "ons/north_west_age_30_39", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 914000.0, + "kind": "fixture_only", + "name": "ons/north_west_age_40_49", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1018000.0, + "kind": "fixture_only", + "name": "ons/north_west_age_50_59", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 858000.0, + "kind": "fixture_only", + "name": "ons/north_west_age_60_69", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 680000.0, + "kind": "fixture_only", + "name": "ons/north_west_age_70_79", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 379000.0, + "kind": "fixture_only", + "name": "ons/north_west_age_80_89", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 235000.0, + "kind": "fixture_only", + "name": "ons/northern_ireland_age_0_9", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 245000.0, + "kind": "fixture_only", + "name": "ons/northern_ireland_age_10_19", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 224000.0, + "kind": "fixture_only", + "name": "ons/northern_ireland_age_20_29", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 258000.0, + "kind": "fixture_only", + "name": "ons/northern_ireland_age_30_39", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 247000.0, + "kind": "fixture_only", + "name": "ons/northern_ireland_age_40_49", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 258000.0, + "kind": "fixture_only", + "name": "ons/northern_ireland_age_50_59", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 217000.0, + "kind": "fixture_only", + "name": "ons/northern_ireland_age_60_69", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 157000.0, + "kind": "fixture_only", + "name": "ons/northern_ireland_age_70_79", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 89000.0, + "kind": "fixture_only", + "name": "ons/northern_ireland_age_80_89", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 528000.0, + "kind": "fixture_only", + "name": "ons/scotland_age_0_9", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 600000.0, + "kind": "fixture_only", + "name": "ons/scotland_age_10_19", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 689000.0, + "kind": "fixture_only", + "name": "ons/scotland_age_20_29", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 717000.0, + "kind": "fixture_only", + "name": "ons/scotland_age_30_39", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 673000.0, + "kind": "fixture_only", + "name": "ons/scotland_age_40_49", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 793000.0, + "kind": "fixture_only", + "name": "ons/scotland_age_50_59", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 702000.0, + "kind": "fixture_only", + "name": "ons/scotland_age_60_69", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 520000.0, + "kind": "fixture_only", + "name": "ons/scotland_age_70_79", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 282000.0, + "kind": "fixture_only", + "name": "ons/scotland_age_80_89", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1044000.0, + "kind": "fixture_only", + "name": "ons/south_east_age_0_9", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1119000.0, + "kind": "fixture_only", + "name": "ons/south_east_age_10_19", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1062000.0, + "kind": "fixture_only", + "name": "ons/south_east_age_20_29", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1250000.0, + "kind": "fixture_only", + "name": "ons/south_east_age_30_39", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1241000.0, + "kind": "fixture_only", + "name": "ons/south_east_age_40_49", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1296000.0, + "kind": "fixture_only", + "name": "ons/south_east_age_50_59", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1052000.0, + "kind": "fixture_only", + "name": "ons/south_east_age_60_69", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 882000.0, + "kind": "fixture_only", + "name": "ons/south_east_age_70_79", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 531000.0, + "kind": "fixture_only", + "name": "ons/south_east_age_80_89", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 579000.0, + "kind": "fixture_only", + "name": "ons/south_west_age_0_9", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 650000.0, + "kind": "fixture_only", + "name": "ons/south_west_age_10_19", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 675000.0, + "kind": "fixture_only", + "name": "ons/south_west_age_20_29", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 724000.0, + "kind": "fixture_only", + "name": "ons/south_west_age_30_39", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 686000.0, + "kind": "fixture_only", + "name": "ons/south_west_age_40_49", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 800000.0, + "kind": "fixture_only", + "name": "ons/south_west_age_50_59", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 716000.0, + "kind": "fixture_only", + "name": "ons/south_west_age_60_69", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 630000.0, + "kind": "fixture_only", + "name": "ons/south_west_age_70_79", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 369000.0, + "kind": "fixture_only", + "name": "ons/south_west_age_80_89", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 8298342.0, + "kind": "fixture_only", + "name": "ons/tenure_england_owned_outright", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 7597225.0, + "kind": "fixture_only", + "name": "ons/tenure_england_owned_with_mortgage", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 5251573.0, + "kind": "fixture_only", + "name": "ons/tenure_england_rented_privately", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 4247906.0, + "kind": "fixture_only", + "name": "ons/tenure_england_social_rent", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 25395046.0, + "kind": "fixture_only", + "name": "ons/tenure_england_total", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 326000.0, + "kind": "fixture_only", + "name": "ons/wales_age_0_9", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 364000.0, + "kind": "fixture_only", + "name": "ons/wales_age_10_19", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 378000.0, + "kind": "fixture_only", + "name": "ons/wales_age_20_29", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 398000.0, + "kind": "fixture_only", + "name": "ons/wales_age_30_39", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 364000.0, + "kind": "fixture_only", + "name": "ons/wales_age_40_49", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 436000.0, + "kind": "fixture_only", + "name": "ons/wales_age_50_59", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 393000.0, + "kind": "fixture_only", + "name": "ons/wales_age_60_69", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 327000.0, + "kind": "fixture_only", + "name": "ons/wales_age_70_79", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 181000.0, + "kind": "fixture_only", + "name": "ons/wales_age_80_89", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 703000.0, + "kind": "fixture_only", + "name": "ons/west_midlands_age_0_9", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 747000.0, + "kind": "fixture_only", + "name": "ons/west_midlands_age_10_19", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 753000.0, + "kind": "fixture_only", + "name": "ons/west_midlands_age_20_29", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 813000.0, + "kind": "fixture_only", + "name": "ons/west_midlands_age_30_39", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 739000.0, + "kind": "fixture_only", + "name": "ons/west_midlands_age_40_49", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 805000.0, + "kind": "fixture_only", + "name": "ons/west_midlands_age_50_59", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 661000.0, + "kind": "fixture_only", + "name": "ons/west_midlands_age_60_69", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 542000.0, + "kind": "fixture_only", + "name": "ons/west_midlands_age_70_79", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 321000.0, + "kind": "fixture_only", + "name": "ons/west_midlands_age_80_89", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 621000.0, + "kind": "fixture_only", + "name": "ons/yorkshire_and_the_humber_age_0_9", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 669000.0, + "kind": "fixture_only", + "name": "ons/yorkshire_and_the_humber_age_10_19", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 713000.0, + "kind": "fixture_only", + "name": "ons/yorkshire_and_the_humber_age_20_29", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 745000.0, + "kind": "fixture_only", + "name": "ons/yorkshire_and_the_humber_age_30_39", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 668000.0, + "kind": "fixture_only", + "name": "ons/yorkshire_and_the_humber_age_40_49", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 751000.0, + "kind": "fixture_only", + "name": "ons/yorkshire_and_the_humber_age_50_59", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 635000.0, + "kind": "fixture_only", + "name": "ons/yorkshire_and_the_humber_age_60_69", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 510000.0, + "kind": "fixture_only", + "name": "ons/yorkshire_and_the_humber_age_70_79", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 287000.0, + "kind": "fixture_only", + "name": "ons/yorkshire_and_the_humber_age_80_89", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 20226.0, + "kind": "fixture_only", + "name": "slc.support.adult_dependants_grant_recipients", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 54638997.0, + "kind": "fixture_only", + "name": "slc.support.adult_dependants_grant_spend", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 1151607.0, + "kind": "fixture_only", + "name": "slc.support.maintenance_loan_recipients", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 8594103415.0, + "kind": "fixture_only", + "name": "slc.support.maintenance_loan_spend", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 89283.0, + "kind": "fixture_only", + "name": "slc.support.parents_learning_allowance_recipients", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "fixture_value": 153266251.0, + "kind": "fixture_only", + "name": "slc.support.parents_learning_allowance_spend", + "period": 2023, + "reason": "Fixture row has no Ledger-compiled counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 65937000000.0, + "name": "hmrc.cgt.gains_total", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 378000.0, + "name": "hmrc.cgt.taxpayers_total", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 222000.0, + "name": "hmrc/dividend_income_count_income_band_100_000_to_150_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 115000.0, + "name": "hmrc/dividend_income_count_income_band_12_570_to_15_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 92000.0, + "name": "hmrc/dividend_income_count_income_band_150_000_to_200_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 372000.0, + "name": "hmrc/dividend_income_count_income_band_15_000_to_20_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 19000.0, + "name": "hmrc/dividend_income_count_income_band_1_000_000_to_inf", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 75000.0, + "name": "hmrc/dividend_income_count_income_band_200_000_to_300_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 843000.0, + "name": "hmrc/dividend_income_count_income_band_20_000_to_30_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 49000.0, + "name": "hmrc/dividend_income_count_income_band_300_000_to_500_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 667000.0, + "name": "hmrc/dividend_income_count_income_band_30_000_to_40_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 627000.0, + "name": "hmrc/dividend_income_count_income_band_40_000_to_50_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 32000.0, + "name": "hmrc/dividend_income_count_income_band_500_000_to_1_000_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 643000.0, + "name": "hmrc/dividend_income_count_income_band_50_000_to_70_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 336000.0, + "name": "hmrc/dividend_income_count_income_band_70_000_to_100_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 6870000000.0, + "name": "hmrc/dividend_income_income_band_100_000_to_150_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 175000000.0, + "name": "hmrc/dividend_income_income_band_12_570_to_15_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 3450000000.0, + "name": "hmrc/dividend_income_income_band_150_000_to_200_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 855000000.0, + "name": "hmrc/dividend_income_income_band_15_000_to_20_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 11100000000.0, + "name": "hmrc/dividend_income_income_band_1_000_000_to_inf", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 3700000000.0, + "name": "hmrc/dividend_income_income_band_200_000_to_300_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 3330000000.0, + "name": "hmrc/dividend_income_income_band_20_000_to_30_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 3430000000.0, + "name": "hmrc/dividend_income_income_band_300_000_to_500_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 4700000000.0, + "name": "hmrc/dividend_income_income_band_30_000_to_40_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 8400000000.0, + "name": "hmrc/dividend_income_income_band_40_000_to_50_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 3820000000.0, + "name": "hmrc/dividend_income_income_band_500_000_to_1_000_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 12500000000.0, + "name": "hmrc/dividend_income_income_band_50_000_to_70_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 9440000000.0, + "name": "hmrc/dividend_income_income_band_70_000_to_100_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 791000.0, + "name": "hmrc/employment_income_count_income_band_100_000_to_150_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 1360000.0, + "name": "hmrc/employment_income_count_income_band_12_570_to_15_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 264000.0, + "name": "hmrc/employment_income_count_income_band_150_000_to_200_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 3100000.0, + "name": "hmrc/employment_income_count_income_band_15_000_to_20_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 21000.0, + "name": "hmrc/employment_income_count_income_band_1_000_000_to_inf", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 180000.0, + "name": "hmrc/employment_income_count_income_band_200_000_to_300_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 7470000.0, + "name": "hmrc/employment_income_count_income_band_20_000_to_30_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 93000.0, + "name": "hmrc/employment_income_count_income_band_300_000_to_500_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 5370000.0, + "name": "hmrc/employment_income_count_income_band_30_000_to_40_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 3500000.0, + "name": "hmrc/employment_income_count_income_band_40_000_to_50_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 44000.0, + "name": "hmrc/employment_income_count_income_band_500_000_to_1_000_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 3430000.0, + "name": "hmrc/employment_income_count_income_band_50_000_to_70_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 1640000.0, + "name": "hmrc/employment_income_count_income_band_70_000_to_100_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 82300000000.0, + "name": "hmrc/employment_income_income_band_100_000_to_150_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 16900000000.0, + "name": "hmrc/employment_income_income_band_12_570_to_15_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 39200000000.0, + "name": "hmrc/employment_income_income_band_150_000_to_200_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 48600000000.0, + "name": "hmrc/employment_income_income_band_15_000_to_20_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 35500000000.0, + "name": "hmrc/employment_income_income_band_1_000_000_to_inf", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 36600000000.0, + "name": "hmrc/employment_income_income_band_200_000_to_300_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 172000000000.0, + "name": "hmrc/employment_income_income_band_20_000_to_30_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 29000000000.0, + "name": "hmrc/employment_income_income_band_300_000_to_500_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 170000000000.0, + "name": "hmrc/employment_income_income_band_30_000_to_40_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 139000000000.0, + "name": "hmrc/employment_income_income_band_40_000_to_50_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 23100000000.0, + "name": "hmrc/employment_income_income_band_500_000_to_1_000_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 174000000000.0, + "name": "hmrc/employment_income_income_band_50_000_to_70_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 118000000000.0, + "name": "hmrc/employment_income_income_band_70_000_to_100_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 109000.0, + "name": "hmrc/private_pension_income_count_income_band_100_000_to_150_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 1070000.0, + "name": "hmrc/private_pension_income_count_income_band_12_570_to_15_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 29000.0, + "name": "hmrc/private_pension_income_count_income_band_150_000_to_200_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2140000.0, + "name": "hmrc/private_pension_income_count_income_band_15_000_to_20_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2000.0, + "name": "hmrc/private_pension_income_count_income_band_1_000_000_to_inf", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 20000.0, + "name": "hmrc/private_pension_income_count_income_band_200_000_to_300_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2660000.0, + "name": "hmrc/private_pension_income_count_income_band_20_000_to_30_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 10000.0, + "name": "hmrc/private_pension_income_count_income_band_300_000_to_500_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 1450000.0, + "name": "hmrc/private_pension_income_count_income_band_30_000_to_40_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 779000.0, + "name": "hmrc/private_pension_income_count_income_band_40_000_to_50_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 4000.0, + "name": "hmrc/private_pension_income_count_income_band_500_000_to_1_000_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 643000.0, + "name": "hmrc/private_pension_income_count_income_band_50_000_to_70_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 259000.0, + "name": "hmrc/private_pension_income_count_income_band_70_000_to_100_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 5430000000.0, + "name": "hmrc/private_pension_income_income_band_100_000_to_150_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 4350000000.0, + "name": "hmrc/private_pension_income_income_band_12_570_to_15_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 1810000000.0, + "name": "hmrc/private_pension_income_income_band_150_000_to_200_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 13600000000.0, + "name": "hmrc/private_pension_income_income_band_15_000_to_20_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 370000000.0, + "name": "hmrc/private_pension_income_income_band_1_000_000_to_inf", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 1570000000.0, + "name": "hmrc/private_pension_income_income_band_200_000_to_300_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 30200000000.0, + "name": "hmrc/private_pension_income_income_band_20_000_to_30_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 1120000000.0, + "name": "hmrc/private_pension_income_income_band_300_000_to_500_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 24900000000.0, + "name": "hmrc/private_pension_income_income_band_30_000_to_40_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 16900000000.0, + "name": "hmrc/private_pension_income_income_band_40_000_to_50_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 640000000.0, + "name": "hmrc/private_pension_income_income_band_500_000_to_1_000_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 17400000000.0, + "name": "hmrc/private_pension_income_income_band_50_000_to_70_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 9470000000.0, + "name": "hmrc/private_pension_income_income_band_70_000_to_100_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 137000.0, + "name": "hmrc/property_income_count_income_band_100_000_to_150_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 101000.0, + "name": "hmrc/property_income_count_income_band_12_570_to_15_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 54000.0, + "name": "hmrc/property_income_count_income_band_150_000_to_200_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 232000.0, + "name": "hmrc/property_income_count_income_band_15_000_to_20_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 7000.0, + "name": "hmrc/property_income_count_income_band_1_000_000_to_inf", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 41000.0, + "name": "hmrc/property_income_count_income_band_200_000_to_300_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 431000.0, + "name": "hmrc/property_income_count_income_band_20_000_to_30_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 23000.0, + "name": "hmrc/property_income_count_income_band_300_000_to_500_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 364000.0, + "name": "hmrc/property_income_count_income_band_30_000_to_40_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 325000.0, + "name": "hmrc/property_income_count_income_band_40_000_to_50_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 13000.0, + "name": "hmrc/property_income_count_income_band_500_000_to_1_000_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 397000.0, + "name": "hmrc/property_income_count_income_band_50_000_to_70_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 226000.0, + "name": "hmrc/property_income_count_income_band_70_000_to_100_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 85000.0, + "name": "hmrc/self_employment_income_count_income_band_100_000_to_150_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 444000.0, + "name": "hmrc/self_employment_income_count_income_band_12_570_to_15_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 40000.0, + "name": "hmrc/self_employment_income_count_income_band_150_000_to_200_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 651000.0, + "name": "hmrc/self_employment_income_count_income_band_15_000_to_20_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 11000.0, + "name": "hmrc/self_employment_income_count_income_band_1_000_000_to_inf", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 34000.0, + "name": "hmrc/self_employment_income_count_income_band_200_000_to_300_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 961000.0, + "name": "hmrc/self_employment_income_count_income_band_20_000_to_30_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 21000.0, + "name": "hmrc/self_employment_income_count_income_band_300_000_to_500_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 595000.0, + "name": "hmrc/self_employment_income_count_income_band_30_000_to_40_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 359000.0, + "name": "hmrc/self_employment_income_count_income_band_40_000_to_50_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 15000.0, + "name": "hmrc/self_employment_income_count_income_band_500_000_to_1_000_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 311000.0, + "name": "hmrc/self_employment_income_count_income_band_50_000_to_70_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 143000.0, + "name": "hmrc/self_employment_income_count_income_band_70_000_to_100_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 4980000000.0, + "name": "hmrc/self_employment_income_income_band_100_000_to_150_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 4810000000.0, + "name": "hmrc/self_employment_income_income_band_12_570_to_15_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 3650000000.0, + "name": "hmrc/self_employment_income_income_band_150_000_to_200_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 8030000000.0, + "name": "hmrc/self_employment_income_income_band_15_000_to_20_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 19500000000.0, + "name": "hmrc/self_employment_income_income_band_1_000_000_to_inf", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 4390000000.0, + "name": "hmrc/self_employment_income_income_band_200_000_to_300_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 15700000000.0, + "name": "hmrc/self_employment_income_income_band_20_000_to_30_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 4840000000.0, + "name": "hmrc/self_employment_income_income_band_300_000_to_500_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 12600000000.0, + "name": "hmrc/self_employment_income_income_band_30_000_to_40_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 8730000000.0, + "name": "hmrc/self_employment_income_income_band_40_000_to_50_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 6670000000.0, + "name": "hmrc/self_employment_income_income_band_500_000_to_1_000_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 8220000000.0, + "name": "hmrc/self_employment_income_income_band_50_000_to_70_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 5360000000.0, + "name": "hmrc/self_employment_income_income_band_70_000_to_100_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 74000.0, + "name": "hmrc/state_pension_count_income_band_100_000_to_150_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 1140000.0, + "name": "hmrc/state_pension_count_income_band_12_570_to_15_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 21000.0, + "name": "hmrc/state_pension_count_income_band_150_000_to_200_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2050000.0, + "name": "hmrc/state_pension_count_income_band_15_000_to_20_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2000.0, + "name": "hmrc/state_pension_count_income_band_1_000_000_to_inf", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 14000.0, + "name": "hmrc/state_pension_count_income_band_200_000_to_300_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2320000.0, + "name": "hmrc/state_pension_count_income_band_20_000_to_30_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 8000.0, + "name": "hmrc/state_pension_count_income_band_300_000_to_500_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 1160000.0, + "name": "hmrc/state_pension_count_income_band_30_000_to_40_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 568000.0, + "name": "hmrc/state_pension_count_income_band_40_000_to_50_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 3000.0, + "name": "hmrc/state_pension_count_income_band_500_000_to_1_000_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 441000.0, + "name": "hmrc/state_pension_count_income_band_50_000_to_70_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 176000.0, + "name": "hmrc/state_pension_count_income_band_70_000_to_100_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 847000000.0, + "name": "hmrc/state_pension_income_band_100_000_to_150_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 11800000000.0, + "name": "hmrc/state_pension_income_band_12_570_to_15_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 265000000.0, + "name": "hmrc/state_pension_income_band_150_000_to_200_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 22200000000.0, + "name": "hmrc/state_pension_income_band_15_000_to_20_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 20000000.0, + "name": "hmrc/state_pension_income_band_1_000_000_to_inf", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 179000000.0, + "name": "hmrc/state_pension_income_band_200_000_to_300_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 24900000000.0, + "name": "hmrc/state_pension_income_band_20_000_to_30_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 96000000.0, + "name": "hmrc/state_pension_income_band_300_000_to_500_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 12300000000.0, + "name": "hmrc/state_pension_income_band_30_000_to_40_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 6020000000.0, + "name": "hmrc/state_pension_income_band_40_000_to_50_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 43000000.0, + "name": "hmrc/state_pension_income_band_500_000_to_1_000_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 4660000000.0, + "name": "hmrc/state_pension_income_band_50_000_to_70_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 1890000000.0, + "name": "hmrc/state_pension_income_band_70_000_to_100_000", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 7497928.0, + "name": "ons.population.age_0_9_by_region", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 8161755.0, + "name": "ons.population.age_10_19_by_region", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 8525289.0, + "name": "ons.population.age_20_29_by_region", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 9336791.0, + "name": "ons.population.age_30_39_by_region", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 8489468.0, + "name": "ons.population.age_40_49_by_region", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 9148143.0, + "name": "ons.population.age_50_59_by_region", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 7671378.0, + "name": "ons.population.age_60_69_by_region", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 5963774.0, + "name": "ons.population.age_70_79_by_region", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2858964.0, + "name": "ons.population.age_80_89_by_region", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 1742660.0, + "name": "ons.population.female_0_4", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2025209.0, + "name": "ons.population.female_10_14", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 1947075.0, + "name": "ons.population.female_15_19", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2008105.0, + "name": "ons.population.female_20_24", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2232408.0, + "name": "ons.population.female_25_29", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2417082.0, + "name": "ons.population.female_30_34", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2396290.0, + "name": "ons.population.female_35_39", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2282889.0, + "name": "ons.population.female_40_44", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2056833.0, + "name": "ons.population.female_45_49", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2304569.0, + "name": "ons.population.female_50_54", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2360196.0, + "name": "ons.population.female_55_59", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 1916898.0, + "name": "ons.population.female_5_9", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2133183.0, + "name": "ons.population.female_60_64", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 1794961.0, + "name": "ons.population.female_65_69", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 1633749.0, + "name": "ons.population.female_70_74", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 1518990.0, + "name": "ons.population.female_75_79", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 985351.0, + "name": "ons.population.female_80_84", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 650117.0, + "name": "ons.population.female_85_89", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 408216.0, + "name": "ons.population.female_90_plus", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 1829347.0, + "name": "ons.population.male_0_4", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2125078.0, + "name": "ons.population.male_10_14", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2064393.0, + "name": "ons.population.male_15_19", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2089437.0, + "name": "ons.population.male_20_24", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2195339.0, + "name": "ons.population.male_25_29", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2283116.0, + "name": "ons.population.male_30_34", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2240303.0, + "name": "ons.population.male_35_39", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2163337.0, + "name": "ons.population.male_40_44", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 1986409.0, + "name": "ons.population.male_45_49", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2218309.0, + "name": "ons.population.male_50_54", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2265069.0, + "name": "ons.population.male_55_59", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2009023.0, + "name": "ons.population.male_5_9", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 2048486.0, + "name": "ons.population.male_60_64", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 1694748.0, + "name": "ons.population.male_65_69", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 1486710.0, + "name": "ons.population.male_70_74", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 1324325.0, + "name": "ons.population.male_75_79", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 777961.0, + "name": "ons.population.male_80_84", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 445535.0, + "name": "ons.population.male_85_89", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 203503.0, + "name": "ons.population.male_90_plus", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "kind": "ledger_only", + "ledger_value": 68265209.0, + "name": "ons.population.uk_total", + "period": 2023, + "reason": "Ledger-compiled row has no fixture counterpart at this comparison period." + }, + { + "fixture_value": 557000.0, + "kind": "calibration_drift", + "ledger_value": 554243.0, + "name": "isc.private_school_students", + "period": 2023, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 1957550396058.5835, + "kind": "calibration_drift", + "ledger_value": 1976893000000.0, + "name": "ons.land.corporate_land_value", + "period": 2023, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 4798764603941.416, + "kind": "calibration_drift", + "ledger_value": 4383082000000.0, + "name": "ons.land.household_land_value", + "period": 2023, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 46000.0, + "kind": "calibration_drift", + "ledger_value": 46197.0, + "name": "ons.population.scotland_babies_under_1", + "period": 2023, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 900000.0, + "kind": "calibration_drift", + "ledger_value": 894695.0, + "name": "ons.population.scotland_children_under_16", + "period": 2023, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + }, + { + "fixture_value": 5900000.0, + "kind": "calibration_drift", + "ledger_value": 6089000.0, + "name": "ons.public_sector_employment", + "period": 2023, + "reason": "Ledger-compiled value differs from the fixture value at this comparison period." + } + ], + "fixture_count": 149 +} diff --git a/packages/microcosm-build/src/microcosm/build/uk/parity_fixture_production_2023.json b/packages/microcosm-build/src/microcosm/build/uk/parity_fixture_production_2023.json new file mode 100644 index 000000000..6d00f42b5 --- /dev/null +++ b/packages/microcosm-build/src/microcosm/build/uk/parity_fixture_production_2023.json @@ -0,0 +1,2019 @@ +{ + "country": "uk", + "fixture": "production_2023", + "mapping": { + "mapped_count": 133, + "unmapped": [ + { + "name": "ons/household_land_value/NORTH_EAST", + "period": 2023, + "reason": "No registry_parity.mapped contract counterpart for the production 2023 target name." + }, + { + "name": "ons/household_land_value/NORTH_WEST", + "period": 2023, + "reason": "No registry_parity.mapped contract counterpart for the production 2023 target name." + }, + { + "name": "ons/household_land_value/YORKSHIRE", + "period": 2023, + "reason": "No registry_parity.mapped contract counterpart for the production 2023 target name." + }, + { + "name": "ons/household_land_value/EAST_MIDLANDS", + "period": 2023, + "reason": "No registry_parity.mapped contract counterpart for the production 2023 target name." + }, + { + "name": "ons/household_land_value/WEST_MIDLANDS", + "period": 2023, + "reason": "No registry_parity.mapped contract counterpart for the production 2023 target name." + }, + { + "name": "ons/household_land_value/EAST_OF_ENGLAND", + "period": 2023, + "reason": "No registry_parity.mapped contract counterpart for the production 2023 target name." + }, + { + "name": "ons/household_land_value/LONDON", + "period": 2023, + "reason": "No registry_parity.mapped contract counterpart for the production 2023 target name." + }, + { + "name": "ons/household_land_value/SOUTH_EAST", + "period": 2023, + "reason": "No registry_parity.mapped contract counterpart for the production 2023 target name." + }, + { + "name": "ons/household_land_value/SOUTH_WEST", + "period": 2023, + "reason": "No registry_parity.mapped contract counterpart for the production 2023 target name." + }, + { + "name": "ons/household_land_value/WALES", + "period": 2023, + "reason": "No registry_parity.mapped contract counterpart for the production 2023 target name." + }, + { + "name": "ons/household_land_value/SCOTLAND", + "period": 2023, + "reason": "No registry_parity.mapped contract counterpart for the production 2023 target name." + }, + { + "name": "ons/tenure_england_owned_outright", + "period": 2023, + "reason": "No registry_parity.mapped contract counterpart for the production 2023 target name." + }, + { + "name": "ons/tenure_england_owned_with_mortgage", + "period": 2023, + "reason": "No registry_parity.mapped contract counterpart for the production 2023 target name." + }, + { + "name": "ons/tenure_england_rented_privately", + "period": 2023, + "reason": "No registry_parity.mapped contract counterpart for the production 2023 target name." + }, + { + "name": "ons/tenure_england_social_rent", + "period": 2023, + "reason": "No registry_parity.mapped contract counterpart for the production 2023 target name." + }, + { + "name": "ons/tenure_england_total", + "period": 2023, + "reason": "No registry_parity.mapped contract counterpart for the production 2023 target name." + } + ] + }, + "provenance": { + "release_id": "populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z", + "source_path": "packages/microcosm-data/tests/fixtures/uk_june_2023/populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z/calibration_diagnostics.json", + "source_sha256": "134fa8dd6da2f5a3b4f41d2c725ce9ec410c14eddce74cba3ed62d5b6dd1b90d", + "target_surface_sha256": "fb2fc115fbae53a501b8acbc1529f319b9e07b74478c7bd02d00c674d4c10022" + }, + "rows": [ + { + "contract_target_id": "isc.private_school_students", + "entity": "household", + "family": "obr", + "measure": "obr/private_school_students", + "metadata": { + "fixture": "production_2023" + }, + "name": "obr/private_school_students", + "period": 2023, + "source": "obr", + "value": 557000.0 + }, + { + "contract_target_id": "ons.household_composition.lone_households_under_65", + "entity": "household", + "family": "ons", + "measure": "ons/lone_households_under_65", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/lone_households_under_65", + "period": 2023, + "source": "ons", + "value": 4166000.0 + }, + { + "contract_target_id": "ons.household_composition.lone_households_over_65", + "entity": "household", + "family": "ons", + "measure": "ons/lone_households_over_65", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/lone_households_over_65", + "period": 2023, + "source": "ons", + "value": 4214000.0 + }, + { + "contract_target_id": "ons.household_composition.unrelated_adult_households", + "entity": "household", + "family": "ons", + "measure": "ons/unrelated_adult_households", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/unrelated_adult_households", + "period": 2023, + "source": "ons", + "value": 827000.0 + }, + { + "contract_target_id": "ons.household_composition.couple_no_children_households", + "entity": "household", + "family": "ons", + "measure": "ons/couple_no_children_households", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/couple_no_children_households", + "period": 2023, + "source": "ons", + "value": 7956000.0 + }, + { + "contract_target_id": "ons.household_composition.couple_under_3_children_households", + "entity": "household", + "family": "ons", + "measure": "ons/couple_under_3_children_households", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/couple_under_3_children_households", + "period": 2023, + "source": "ons", + "value": 5210000.0 + }, + { + "contract_target_id": "ons.household_composition.couple_3_plus_children_households", + "entity": "household", + "family": "ons", + "measure": "ons/couple_3_plus_children_households", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/couple_3_plus_children_households", + "period": 2023, + "source": "ons", + "value": 907000.0 + }, + { + "contract_target_id": "ons.household_composition.couple_non_dependent_children_only_households", + "entity": "household", + "family": "ons", + "measure": "ons/couple_non_dependent_children_only_households", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/couple_non_dependent_children_only_households", + "period": 2023, + "source": "ons", + "value": 1793000.0 + }, + { + "contract_target_id": "ons.household_composition.lone_parent_dependent_children_households", + "entity": "household", + "family": "ons", + "measure": "ons/lone_parent_dependent_children_households", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/lone_parent_dependent_children_households", + "period": 2023, + "source": "ons", + "value": 1904000.0 + }, + { + "contract_target_id": "ons.household_composition.lone_parent_non_dependent_children_households", + "entity": "household", + "family": "ons", + "measure": "ons/lone_parent_non_dependent_children_households", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/lone_parent_non_dependent_children_households", + "period": 2023, + "source": "ons", + "value": 1089000.0 + }, + { + "contract_target_id": "ons.household_composition.multi_family_households", + "entity": "household", + "family": "ons", + "measure": "ons/multi_family_households", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/multi_family_households", + "period": 2023, + "source": "ons", + "value": 290000.0 + }, + { + "contract_target_id": "ons.land.household_land_value", + "entity": "household", + "family": "ons", + "measure": "ons/household_land_value", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/household_land_value", + "period": 2023, + "source": "ons", + "value": 4798764603941.416 + }, + { + "contract_target_id": "ons.land.corporate_land_value", + "entity": "household", + "family": "ons", + "measure": "ons/corporate_land_value", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/corporate_land_value", + "period": 2023, + "source": "ons", + "value": 1957550396058.5835 + }, + { + "contract_target_id": "ons.land.land_value", + "entity": "household", + "family": "ons", + "measure": "ons/land_value", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/land_value", + "period": 2023, + "source": "ons", + "value": 6756315000000.0 + }, + { + "contract_target_id": "ons.public_sector_employment", + "entity": "household", + "family": "ons", + "measure": "ons/public_sector_employment", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/public_sector_employment", + "period": 2023, + "source": "ons", + "value": 5900000.0 + }, + { + "contract_target_id": "ons.savings_interest_income", + "entity": "household", + "family": "ons", + "measure": "ons/savings_interest_income", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/savings_interest_income", + "period": 2023, + "source": "ons", + "value": 86040000000.0 + }, + { + "contract_target_id": "slc.support.maintenance_loan_recipients", + "entity": "household", + "family": "slc", + "measure": "slc/maintenance_loan_recipients", + "metadata": { + "fixture": "production_2023" + }, + "name": "slc/maintenance_loan_recipients", + "period": 2023, + "source": "slc", + "value": 1151607.0 + }, + { + "contract_target_id": "slc.support.maintenance_loan_spend", + "entity": "household", + "family": "slc", + "measure": "slc/maintenance_loan_spend", + "metadata": { + "fixture": "production_2023" + }, + "name": "slc/maintenance_loan_spend", + "period": 2023, + "source": "slc", + "value": 8594103415.0 + }, + { + "contract_target_id": "slc.support.parents_learning_allowance_recipients", + "entity": "household", + "family": "slc", + "measure": "slc/parents_learning_allowance_recipients", + "metadata": { + "fixture": "production_2023" + }, + "name": "slc/parents_learning_allowance_recipients", + "period": 2023, + "source": "slc", + "value": 89283.0 + }, + { + "contract_target_id": "slc.support.parents_learning_allowance_spend", + "entity": "household", + "family": "slc", + "measure": "slc/parents_learning_allowance_spend", + "metadata": { + "fixture": "production_2023" + }, + "name": "slc/parents_learning_allowance_spend", + "period": 2023, + "source": "slc", + "value": 153266251.0 + }, + { + "contract_target_id": "slc.support.adult_dependants_grant_recipients", + "entity": "household", + "family": "slc", + "measure": "slc/adult_dependants_grant_recipients", + "metadata": { + "fixture": "production_2023" + }, + "name": "slc/adult_dependants_grant_recipients", + "period": 2023, + "source": "slc", + "value": 20226.0 + }, + { + "contract_target_id": "slc.support.adult_dependants_grant_spend", + "entity": "household", + "family": "slc", + "measure": "slc/adult_dependants_grant_spend", + "metadata": { + "fixture": "production_2023" + }, + "name": "slc/adult_dependants_grant_spend", + "period": 2023, + "source": "slc", + "value": 54638997.0 + }, + { + "entity": "household", + "family": "ons", + "measure": "ons/household_land_value/NORTH_EAST", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/household_land_value/NORTH_EAST", + "period": 2023, + "source": "ons", + "value": 113814239475.71474 + }, + { + "entity": "household", + "family": "ons", + "measure": "ons/household_land_value/NORTH_WEST", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/household_land_value/NORTH_WEST", + "period": 2023, + "source": "ons", + "value": 402421888791.4934 + }, + { + "entity": "household", + "family": "ons", + "measure": "ons/household_land_value/YORKSHIRE", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/household_land_value/YORKSHIRE", + "period": 2023, + "source": "ons", + "value": 283675747954.8778 + }, + { + "entity": "household", + "family": "ons", + "measure": "ons/household_land_value/EAST_MIDLANDS", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/household_land_value/EAST_MIDLANDS", + "period": 2023, + "source": "ons", + "value": 290045387683.9658 + }, + { + "entity": "household", + "family": "ons", + "measure": "ons/household_land_value/WEST_MIDLANDS", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/household_land_value/WEST_MIDLANDS", + "period": 2023, + "source": "ons", + "value": 346703742992.981 + }, + { + "entity": "household", + "family": "ons", + "measure": "ons/household_land_value/EAST_OF_ENGLAND", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/household_land_value/EAST_OF_ENGLAND", + "period": 2023, + "source": "ons", + "value": 516403292240.49414 + }, + { + "entity": "household", + "family": "ons", + "measure": "ons/household_land_value/LONDON", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/household_land_value/LONDON", + "period": 2023, + "source": "ons", + "value": 1130653075012.1692 + }, + { + "entity": "household", + "family": "ons", + "measure": "ons/household_land_value/SOUTH_EAST", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/household_land_value/SOUTH_EAST", + "period": 2023, + "source": "ons", + "value": 842967388093.2286 + }, + { + "entity": "household", + "family": "ons", + "measure": "ons/household_land_value/SOUTH_WEST", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/household_land_value/SOUTH_WEST", + "period": 2023, + "source": "ons", + "value": 434617600950.541 + }, + { + "entity": "household", + "family": "ons", + "measure": "ons/household_land_value/WALES", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/household_land_value/WALES", + "period": 2023, + "source": "ons", + "value": 170639951561.47794 + }, + { + "entity": "household", + "family": "ons", + "measure": "ons/household_land_value/SCOTLAND", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/household_land_value/SCOTLAND", + "period": 2023, + "source": "ons", + "value": 266822289184.47226 + }, + { + "contract_target_id": "ons.population.age_0_9_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/east_age_0_9", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/east_age_0_9", + "period": 2023, + "source": "ons", + "value": 730000.0 + }, + { + "contract_target_id": "ons.population.age_10_19_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/east_age_10_19", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/east_age_10_19", + "period": 2023, + "source": "ons", + "value": 745000.0 + }, + { + "contract_target_id": "ons.population.age_20_29_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/east_age_20_29", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/east_age_20_29", + "period": 2023, + "source": "ons", + "value": 729000.0 + }, + { + "contract_target_id": "ons.population.age_30_39_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/east_age_30_39", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/east_age_30_39", + "period": 2023, + "source": "ons", + "value": 868000.0 + }, + { + "contract_target_id": "ons.population.age_40_49_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/east_age_40_49", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/east_age_40_49", + "period": 2023, + "source": "ons", + "value": 829000.0 + }, + { + "contract_target_id": "ons.population.age_50_59_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/east_age_50_59", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/east_age_50_59", + "period": 2023, + "source": "ons", + "value": 873000.0 + }, + { + "contract_target_id": "ons.population.age_60_69_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/east_age_60_69", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/east_age_60_69", + "period": 2023, + "source": "ons", + "value": 721000.0 + }, + { + "contract_target_id": "ons.population.age_70_79_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/east_age_70_79", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/east_age_70_79", + "period": 2023, + "source": "ons", + "value": 612000.0 + }, + { + "contract_target_id": "ons.population.age_80_89_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/east_age_80_89", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/east_age_80_89", + "period": 2023, + "source": "ons", + "value": 360000.0 + }, + { + "contract_target_id": "ons.population.age_0_9_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/east_midlands_age_0_9", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/east_midlands_age_0_9", + "period": 2023, + "source": "ons", + "value": 535000.0 + }, + { + "contract_target_id": "ons.population.age_10_19_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/east_midlands_age_10_19", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/east_midlands_age_10_19", + "period": 2023, + "source": "ons", + "value": 588000.0 + }, + { + "contract_target_id": "ons.population.age_20_29_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/east_midlands_age_20_29", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/east_midlands_age_20_29", + "period": 2023, + "source": "ons", + "value": 614000.0 + }, + { + "contract_target_id": "ons.population.age_30_39_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/east_midlands_age_30_39", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/east_midlands_age_30_39", + "period": 2023, + "source": "ons", + "value": 652000.0 + }, + { + "contract_target_id": "ons.population.age_40_49_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/east_midlands_age_40_49", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/east_midlands_age_40_49", + "period": 2023, + "source": "ons", + "value": 605000.0 + }, + { + "contract_target_id": "ons.population.age_50_59_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/east_midlands_age_50_59", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/east_midlands_age_50_59", + "period": 2023, + "source": "ons", + "value": 686000.0 + }, + { + "contract_target_id": "ons.population.age_60_69_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/east_midlands_age_60_69", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/east_midlands_age_60_69", + "period": 2023, + "source": "ons", + "value": 572000.0 + }, + { + "contract_target_id": "ons.population.age_70_79_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/east_midlands_age_70_79", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/east_midlands_age_70_79", + "period": 2023, + "source": "ons", + "value": 475000.0 + }, + { + "contract_target_id": "ons.population.age_80_89_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/east_midlands_age_80_89", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/east_midlands_age_80_89", + "period": 2023, + "source": "ons", + "value": 260000.0 + }, + { + "contract_target_id": "ons.population.age_0_9_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/london_age_0_9", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/london_age_0_9", + "period": 2023, + "source": "ons", + "value": 1047000.0 + }, + { + "contract_target_id": "ons.population.age_10_19_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/london_age_10_19", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/london_age_10_19", + "period": 2023, + "source": "ons", + "value": 1043000.0 + }, + { + "contract_target_id": "ons.population.age_20_29_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/london_age_20_29", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/london_age_20_29", + "period": 2023, + "source": "ons", + "value": 1429000.0 + }, + { + "contract_target_id": "ons.population.age_30_39_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/london_age_30_39", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/london_age_30_39", + "period": 2023, + "source": "ons", + "value": 1545000.0 + }, + { + "contract_target_id": "ons.population.age_40_49_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/london_age_40_49", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/london_age_40_49", + "period": 2023, + "source": "ons", + "value": 1280000.0 + }, + { + "contract_target_id": "ons.population.age_50_59_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/london_age_50_59", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/london_age_50_59", + "period": 2023, + "source": "ons", + "value": 1086000.0 + }, + { + "contract_target_id": "ons.population.age_60_69_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/london_age_60_69", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/london_age_60_69", + "period": 2023, + "source": "ons", + "value": 751000.0 + }, + { + "contract_target_id": "ons.population.age_70_79_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/london_age_70_79", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/london_age_70_79", + "period": 2023, + "source": "ons", + "value": 484000.0 + }, + { + "contract_target_id": "ons.population.age_80_89_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/london_age_80_89", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/london_age_80_89", + "period": 2023, + "source": "ons", + "value": 289000.0 + }, + { + "contract_target_id": "ons.population.age_0_9_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/north_east_age_0_9", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/north_east_age_0_9", + "period": 2023, + "source": "ons", + "value": 283000.0 + }, + { + "contract_target_id": "ons.population.age_10_19_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/north_east_age_10_19", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/north_east_age_10_19", + "period": 2023, + "source": "ons", + "value": 312000.0 + }, + { + "contract_target_id": "ons.population.age_20_29_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/north_east_age_20_29", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/north_east_age_20_29", + "period": 2023, + "source": "ons", + "value": 333000.0 + }, + { + "contract_target_id": "ons.population.age_30_39_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/north_east_age_30_39", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/north_east_age_30_39", + "period": 2023, + "source": "ons", + "value": 347000.0 + }, + { + "contract_target_id": "ons.population.age_40_49_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/north_east_age_40_49", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/north_east_age_40_49", + "period": 2023, + "source": "ons", + "value": 314000.0 + }, + { + "contract_target_id": "ons.population.age_50_59_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/north_east_age_50_59", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/north_east_age_50_59", + "period": 2023, + "source": "ons", + "value": 371000.0 + }, + { + "contract_target_id": "ons.population.age_60_69_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/north_east_age_60_69", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/north_east_age_60_69", + "period": 2023, + "source": "ons", + "value": 341000.0 + }, + { + "contract_target_id": "ons.population.age_70_79_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/north_east_age_70_79", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/north_east_age_70_79", + "period": 2023, + "source": "ons", + "value": 264000.0 + }, + { + "contract_target_id": "ons.population.age_80_89_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/north_east_age_80_89", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/north_east_age_80_89", + "period": 2023, + "source": "ons", + "value": 145000.0 + }, + { + "contract_target_id": "ons.population.age_0_9_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/north_west_age_0_9", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/north_west_age_0_9", + "period": 2023, + "source": "ons", + "value": 851000.0 + }, + { + "contract_target_id": "ons.population.age_10_19_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/north_west_age_10_19", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/north_west_age_10_19", + "period": 2023, + "source": "ons", + "value": 906000.0 + }, + { + "contract_target_id": "ons.population.age_20_29_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/north_west_age_20_29", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/north_west_age_20_29", + "period": 2023, + "source": "ons", + "value": 958000.0 + }, + { + "contract_target_id": "ons.population.age_30_39_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/north_west_age_30_39", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/north_west_age_30_39", + "period": 2023, + "source": "ons", + "value": 1029000.0 + }, + { + "contract_target_id": "ons.population.age_40_49_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/north_west_age_40_49", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/north_west_age_40_49", + "period": 2023, + "source": "ons", + "value": 914000.0 + }, + { + "contract_target_id": "ons.population.age_50_59_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/north_west_age_50_59", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/north_west_age_50_59", + "period": 2023, + "source": "ons", + "value": 1018000.0 + }, + { + "contract_target_id": "ons.population.age_60_69_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/north_west_age_60_69", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/north_west_age_60_69", + "period": 2023, + "source": "ons", + "value": 858000.0 + }, + { + "contract_target_id": "ons.population.age_70_79_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/north_west_age_70_79", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/north_west_age_70_79", + "period": 2023, + "source": "ons", + "value": 680000.0 + }, + { + "contract_target_id": "ons.population.age_80_89_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/north_west_age_80_89", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/north_west_age_80_89", + "period": 2023, + "source": "ons", + "value": 379000.0 + }, + { + "contract_target_id": "ons.population.age_0_9_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/northern_ireland_age_0_9", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/northern_ireland_age_0_9", + "period": 2023, + "source": "ons", + "value": 235000.0 + }, + { + "contract_target_id": "ons.population.age_10_19_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/northern_ireland_age_10_19", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/northern_ireland_age_10_19", + "period": 2023, + "source": "ons", + "value": 245000.0 + }, + { + "contract_target_id": "ons.population.age_20_29_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/northern_ireland_age_20_29", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/northern_ireland_age_20_29", + "period": 2023, + "source": "ons", + "value": 224000.0 + }, + { + "contract_target_id": "ons.population.age_30_39_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/northern_ireland_age_30_39", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/northern_ireland_age_30_39", + "period": 2023, + "source": "ons", + "value": 258000.0 + }, + { + "contract_target_id": "ons.population.age_40_49_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/northern_ireland_age_40_49", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/northern_ireland_age_40_49", + "period": 2023, + "source": "ons", + "value": 247000.0 + }, + { + "contract_target_id": "ons.population.age_50_59_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/northern_ireland_age_50_59", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/northern_ireland_age_50_59", + "period": 2023, + "source": "ons", + "value": 258000.0 + }, + { + "contract_target_id": "ons.population.age_60_69_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/northern_ireland_age_60_69", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/northern_ireland_age_60_69", + "period": 2023, + "source": "ons", + "value": 217000.0 + }, + { + "contract_target_id": "ons.population.age_70_79_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/northern_ireland_age_70_79", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/northern_ireland_age_70_79", + "period": 2023, + "source": "ons", + "value": 157000.0 + }, + { + "contract_target_id": "ons.population.age_80_89_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/northern_ireland_age_80_89", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/northern_ireland_age_80_89", + "period": 2023, + "source": "ons", + "value": 89000.0 + }, + { + "contract_target_id": "ons.population.age_0_9_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/scotland_age_0_9", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/scotland_age_0_9", + "period": 2023, + "source": "ons", + "value": 528000.0 + }, + { + "contract_target_id": "ons.population.age_10_19_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/scotland_age_10_19", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/scotland_age_10_19", + "period": 2023, + "source": "ons", + "value": 600000.0 + }, + { + "contract_target_id": "ons.population.age_20_29_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/scotland_age_20_29", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/scotland_age_20_29", + "period": 2023, + "source": "ons", + "value": 689000.0 + }, + { + "contract_target_id": "ons.population.age_30_39_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/scotland_age_30_39", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/scotland_age_30_39", + "period": 2023, + "source": "ons", + "value": 717000.0 + }, + { + "contract_target_id": "ons.population.age_40_49_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/scotland_age_40_49", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/scotland_age_40_49", + "period": 2023, + "source": "ons", + "value": 673000.0 + }, + { + "contract_target_id": "ons.population.age_50_59_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/scotland_age_50_59", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/scotland_age_50_59", + "period": 2023, + "source": "ons", + "value": 793000.0 + }, + { + "contract_target_id": "ons.population.age_60_69_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/scotland_age_60_69", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/scotland_age_60_69", + "period": 2023, + "source": "ons", + "value": 702000.0 + }, + { + "contract_target_id": "ons.population.age_70_79_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/scotland_age_70_79", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/scotland_age_70_79", + "period": 2023, + "source": "ons", + "value": 520000.0 + }, + { + "contract_target_id": "ons.population.age_80_89_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/scotland_age_80_89", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/scotland_age_80_89", + "period": 2023, + "source": "ons", + "value": 282000.0 + }, + { + "contract_target_id": "ons.population.scotland_children_under_16", + "entity": "household", + "family": "ons", + "measure": "ons/scotland_children_under_16", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/scotland_children_under_16", + "period": 2023, + "source": "ons", + "value": 900000.0 + }, + { + "contract_target_id": "ons.population.scotland_babies_under_1", + "entity": "household", + "family": "ons", + "measure": "ons/scotland_babies_under_1", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/scotland_babies_under_1", + "period": 2023, + "source": "ons", + "value": 46000.0 + }, + { + "contract_target_id": "ons.population.age_0_9_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/south_east_age_0_9", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/south_east_age_0_9", + "period": 2023, + "source": "ons", + "value": 1044000.0 + }, + { + "contract_target_id": "ons.population.age_10_19_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/south_east_age_10_19", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/south_east_age_10_19", + "period": 2023, + "source": "ons", + "value": 1119000.0 + }, + { + "contract_target_id": "ons.population.age_20_29_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/south_east_age_20_29", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/south_east_age_20_29", + "period": 2023, + "source": "ons", + "value": 1062000.0 + }, + { + "contract_target_id": "ons.population.age_30_39_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/south_east_age_30_39", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/south_east_age_30_39", + "period": 2023, + "source": "ons", + "value": 1250000.0 + }, + { + "contract_target_id": "ons.population.age_40_49_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/south_east_age_40_49", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/south_east_age_40_49", + "period": 2023, + "source": "ons", + "value": 1241000.0 + }, + { + "contract_target_id": "ons.population.age_50_59_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/south_east_age_50_59", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/south_east_age_50_59", + "period": 2023, + "source": "ons", + "value": 1296000.0 + }, + { + "contract_target_id": "ons.population.age_60_69_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/south_east_age_60_69", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/south_east_age_60_69", + "period": 2023, + "source": "ons", + "value": 1052000.0 + }, + { + "contract_target_id": "ons.population.age_70_79_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/south_east_age_70_79", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/south_east_age_70_79", + "period": 2023, + "source": "ons", + "value": 882000.0 + }, + { + "contract_target_id": "ons.population.age_80_89_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/south_east_age_80_89", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/south_east_age_80_89", + "period": 2023, + "source": "ons", + "value": 531000.0 + }, + { + "contract_target_id": "ons.population.age_0_9_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/south_west_age_0_9", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/south_west_age_0_9", + "period": 2023, + "source": "ons", + "value": 579000.0 + }, + { + "contract_target_id": "ons.population.age_10_19_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/south_west_age_10_19", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/south_west_age_10_19", + "period": 2023, + "source": "ons", + "value": 650000.0 + }, + { + "contract_target_id": "ons.population.age_20_29_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/south_west_age_20_29", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/south_west_age_20_29", + "period": 2023, + "source": "ons", + "value": 675000.0 + }, + { + "contract_target_id": "ons.population.age_30_39_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/south_west_age_30_39", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/south_west_age_30_39", + "period": 2023, + "source": "ons", + "value": 724000.0 + }, + { + "contract_target_id": "ons.population.age_40_49_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/south_west_age_40_49", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/south_west_age_40_49", + "period": 2023, + "source": "ons", + "value": 686000.0 + }, + { + "contract_target_id": "ons.population.age_50_59_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/south_west_age_50_59", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/south_west_age_50_59", + "period": 2023, + "source": "ons", + "value": 800000.0 + }, + { + "contract_target_id": "ons.population.age_60_69_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/south_west_age_60_69", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/south_west_age_60_69", + "period": 2023, + "source": "ons", + "value": 716000.0 + }, + { + "contract_target_id": "ons.population.age_70_79_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/south_west_age_70_79", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/south_west_age_70_79", + "period": 2023, + "source": "ons", + "value": 630000.0 + }, + { + "contract_target_id": "ons.population.age_80_89_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/south_west_age_80_89", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/south_west_age_80_89", + "period": 2023, + "source": "ons", + "value": 369000.0 + }, + { + "contract_target_id": "ons.population.age_0_9_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/wales_age_0_9", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/wales_age_0_9", + "period": 2023, + "source": "ons", + "value": 326000.0 + }, + { + "contract_target_id": "ons.population.age_10_19_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/wales_age_10_19", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/wales_age_10_19", + "period": 2023, + "source": "ons", + "value": 364000.0 + }, + { + "contract_target_id": "ons.population.age_20_29_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/wales_age_20_29", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/wales_age_20_29", + "period": 2023, + "source": "ons", + "value": 378000.0 + }, + { + "contract_target_id": "ons.population.age_30_39_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/wales_age_30_39", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/wales_age_30_39", + "period": 2023, + "source": "ons", + "value": 398000.0 + }, + { + "contract_target_id": "ons.population.age_40_49_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/wales_age_40_49", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/wales_age_40_49", + "period": 2023, + "source": "ons", + "value": 364000.0 + }, + { + "contract_target_id": "ons.population.age_50_59_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/wales_age_50_59", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/wales_age_50_59", + "period": 2023, + "source": "ons", + "value": 436000.0 + }, + { + "contract_target_id": "ons.population.age_60_69_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/wales_age_60_69", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/wales_age_60_69", + "period": 2023, + "source": "ons", + "value": 393000.0 + }, + { + "contract_target_id": "ons.population.age_70_79_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/wales_age_70_79", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/wales_age_70_79", + "period": 2023, + "source": "ons", + "value": 327000.0 + }, + { + "contract_target_id": "ons.population.age_80_89_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/wales_age_80_89", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/wales_age_80_89", + "period": 2023, + "source": "ons", + "value": 181000.0 + }, + { + "contract_target_id": "ons.population.age_0_9_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/west_midlands_age_0_9", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/west_midlands_age_0_9", + "period": 2023, + "source": "ons", + "value": 703000.0 + }, + { + "contract_target_id": "ons.population.age_10_19_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/west_midlands_age_10_19", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/west_midlands_age_10_19", + "period": 2023, + "source": "ons", + "value": 747000.0 + }, + { + "contract_target_id": "ons.population.age_20_29_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/west_midlands_age_20_29", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/west_midlands_age_20_29", + "period": 2023, + "source": "ons", + "value": 753000.0 + }, + { + "contract_target_id": "ons.population.age_30_39_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/west_midlands_age_30_39", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/west_midlands_age_30_39", + "period": 2023, + "source": "ons", + "value": 813000.0 + }, + { + "contract_target_id": "ons.population.age_40_49_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/west_midlands_age_40_49", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/west_midlands_age_40_49", + "period": 2023, + "source": "ons", + "value": 739000.0 + }, + { + "contract_target_id": "ons.population.age_50_59_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/west_midlands_age_50_59", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/west_midlands_age_50_59", + "period": 2023, + "source": "ons", + "value": 805000.0 + }, + { + "contract_target_id": "ons.population.age_60_69_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/west_midlands_age_60_69", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/west_midlands_age_60_69", + "period": 2023, + "source": "ons", + "value": 661000.0 + }, + { + "contract_target_id": "ons.population.age_70_79_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/west_midlands_age_70_79", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/west_midlands_age_70_79", + "period": 2023, + "source": "ons", + "value": 542000.0 + }, + { + "contract_target_id": "ons.population.age_80_89_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/west_midlands_age_80_89", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/west_midlands_age_80_89", + "period": 2023, + "source": "ons", + "value": 321000.0 + }, + { + "contract_target_id": "ons.population.age_0_9_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/yorkshire_and_the_humber_age_0_9", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/yorkshire_and_the_humber_age_0_9", + "period": 2023, + "source": "ons", + "value": 621000.0 + }, + { + "contract_target_id": "ons.population.age_10_19_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/yorkshire_and_the_humber_age_10_19", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/yorkshire_and_the_humber_age_10_19", + "period": 2023, + "source": "ons", + "value": 669000.0 + }, + { + "contract_target_id": "ons.population.age_20_29_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/yorkshire_and_the_humber_age_20_29", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/yorkshire_and_the_humber_age_20_29", + "period": 2023, + "source": "ons", + "value": 713000.0 + }, + { + "contract_target_id": "ons.population.age_30_39_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/yorkshire_and_the_humber_age_30_39", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/yorkshire_and_the_humber_age_30_39", + "period": 2023, + "source": "ons", + "value": 745000.0 + }, + { + "contract_target_id": "ons.population.age_40_49_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/yorkshire_and_the_humber_age_40_49", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/yorkshire_and_the_humber_age_40_49", + "period": 2023, + "source": "ons", + "value": 668000.0 + }, + { + "contract_target_id": "ons.population.age_50_59_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/yorkshire_and_the_humber_age_50_59", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/yorkshire_and_the_humber_age_50_59", + "period": 2023, + "source": "ons", + "value": 751000.0 + }, + { + "contract_target_id": "ons.population.age_60_69_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/yorkshire_and_the_humber_age_60_69", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/yorkshire_and_the_humber_age_60_69", + "period": 2023, + "source": "ons", + "value": 635000.0 + }, + { + "contract_target_id": "ons.population.age_70_79_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/yorkshire_and_the_humber_age_70_79", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/yorkshire_and_the_humber_age_70_79", + "period": 2023, + "source": "ons", + "value": 510000.0 + }, + { + "contract_target_id": "ons.population.age_80_89_by_region", + "entity": "household", + "family": "ons", + "measure": "ons/yorkshire_and_the_humber_age_80_89", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/yorkshire_and_the_humber_age_80_89", + "period": 2023, + "source": "ons", + "value": 287000.0 + }, + { + "contract_target_id": "ons.population.scotland_households_3plus_children", + "entity": "household", + "family": "ons", + "measure": "ons/scotland_households_3plus_children", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/scotland_households_3plus_children", + "period": 2023, + "source": "ons", + "value": 82000.0 + }, + { + "entity": "household", + "family": "ons", + "measure": "ons/tenure_england_owned_outright", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/tenure_england_owned_outright", + "period": 2023, + "source": "ons", + "value": 8298342.0 + }, + { + "entity": "household", + "family": "ons", + "measure": "ons/tenure_england_owned_with_mortgage", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/tenure_england_owned_with_mortgage", + "period": 2023, + "source": "ons", + "value": 7597225.0 + }, + { + "entity": "household", + "family": "ons", + "measure": "ons/tenure_england_rented_privately", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/tenure_england_rented_privately", + "period": 2023, + "source": "ons", + "value": 5251573.0 + }, + { + "entity": "household", + "family": "ons", + "measure": "ons/tenure_england_social_rent", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/tenure_england_social_rent", + "period": 2023, + "source": "ons", + "value": 4247906.0 + }, + { + "entity": "household", + "family": "ons", + "measure": "ons/tenure_england_total", + "metadata": { + "fixture": "production_2023" + }, + "name": "ons/tenure_england_total", + "period": 2023, + "source": "ons", + "value": 25395046.0 + } + ], + "schema_version": 1 +} diff --git a/packages/microcosm-build/src/microcosm/build/uk/registry_parity_fixture_2025.json b/packages/microcosm-build/src/microcosm/build/uk/registry_parity_fixture_2025.json new file mode 100644 index 000000000..ea8f2f9ba --- /dev/null +++ b/packages/microcosm-build/src/microcosm/build/uk/registry_parity_fixture_2025.json @@ -0,0 +1,10334 @@ +{ + "country": "uk", + "fixture": "incumbent_2025", + "ledger_side_additions": [ + { + "contract_target_id": "dwp.uc.two_child_limit.households_affected", + "geographic_level": "national", + "name": "dwp/uc/two_child_limit/households_affected", + "period": 2026, + "reason": "Incumbent resolves this two-child-limit target only at 2026; Ledger activates the April-2025 publication at calibration period 2025.", + "resolved_from_year": 2026, + "source": "dwp", + "value": 453600.0 + }, + { + "contract_target_id": "dwp.uc.two_child_limit.children_in_affected_households", + "geographic_level": "national", + "name": "dwp/uc/two_child_limit/children_in_affected_households", + "period": 2026, + "reason": "Incumbent resolves this two-child-limit target only at 2026; Ledger activates the April-2025 publication at calibration period 2025.", + "resolved_from_year": 2026, + "source": "dwp", + "value": 1613980.0 + }, + { + "contract_target_id": "dwp.uc.two_child_limit.children_affected", + "geographic_level": "national", + "name": "dwp/uc/two_child_limit/children_affected", + "period": 2026, + "reason": "Incumbent resolves this two-child-limit target only at 2026; Ledger activates the April-2025 publication at calibration period 2025.", + "resolved_from_year": 2026, + "source": "dwp", + "value": 580400.0 + }, + { + "contract_target_id": "dwp.uc.two_child_limit.households_3_children", + "geographic_level": "national", + "name": "dwp/uc/two_child_limit/3_children_households", + "period": 2026, + "reason": "Incumbent resolves this two-child-limit target only at 2026; Ledger activates the April-2025 publication at calibration period 2025.", + "resolved_from_year": 2026, + "source": "dwp", + "value": 283290.0 + }, + { + "contract_target_id": "dwp.uc.two_child_limit.children_in_3_children_households", + "geographic_level": "national", + "name": "dwp/uc/two_child_limit/3_children_households_total_children", + "period": 2026, + "reason": "Incumbent resolves this two-child-limit target only at 2026; Ledger activates the April-2025 publication at calibration period 2025.", + "resolved_from_year": 2026, + "source": "dwp", + "value": 849860.0 + }, + { + "contract_target_id": "dwp.uc.two_child_limit.households_4_children", + "geographic_level": "national", + "name": "dwp/uc/two_child_limit/4_children_households", + "period": 2026, + "reason": "Incumbent resolves this two-child-limit target only at 2026; Ledger activates the April-2025 publication at calibration period 2025.", + "resolved_from_year": 2026, + "source": "dwp", + "value": 115630.0 + }, + { + "contract_target_id": "dwp.uc.two_child_limit.children_in_4_children_households", + "geographic_level": "national", + "name": "dwp/uc/two_child_limit/4_children_households_total_children", + "period": 2026, + "reason": "Incumbent resolves this two-child-limit target only at 2026; Ledger activates the April-2025 publication at calibration period 2025.", + "resolved_from_year": 2026, + "source": "dwp", + "value": 462520.0 + }, + { + "contract_target_id": "dwp.uc.two_child_limit.households_5_children", + "geographic_level": "national", + "name": "dwp/uc/two_child_limit/5_children_households", + "period": 2026, + "reason": "Incumbent resolves this two-child-limit target only at 2026; Ledger activates the April-2025 publication at calibration period 2025.", + "resolved_from_year": 2026, + "source": "dwp", + "value": 36590.0 + }, + { + "contract_target_id": "dwp.uc.two_child_limit.children_in_5_children_households", + "geographic_level": "national", + "name": "dwp/uc/two_child_limit/5_children_households_total_children", + "period": 2026, + "reason": "Incumbent resolves this two-child-limit target only at 2026; Ledger activates the April-2025 publication at calibration period 2025.", + "resolved_from_year": 2026, + "source": "dwp", + "value": 182940.0 + }, + { + "contract_target_id": "dwp.uc.two_child_limit.households_6_plus_children", + "geographic_level": "national", + "name": "dwp/uc/two_child_limit/6_children_households", + "period": 2026, + "reason": "Incumbent resolves this two-child-limit target only at 2026; Ledger activates the April-2025 publication at calibration period 2025.", + "resolved_from_year": 2026, + "source": "dwp", + "value": 18090.0 + }, + { + "contract_target_id": "dwp.uc.two_child_limit.children_in_6_plus_children_households", + "geographic_level": "national", + "name": "dwp/uc/two_child_limit/6_children_households_total_children", + "period": 2026, + "reason": "Incumbent resolves this two-child-limit target only at 2026; Ledger activates the April-2025 publication at calibration period 2025.", + "resolved_from_year": 2026, + "source": "dwp", + "value": 118670.0 + }, + { + "contract_target_id": "dwp.uc.two_child_limit.households_claimant_pip", + "geographic_level": "national", + "name": "dwp/uc/two_child_limit/adult_pip_households", + "period": 2026, + "reason": "Incumbent resolves this two-child-limit target only at 2026; Ledger activates the April-2025 publication at calibration period 2025.", + "resolved_from_year": 2026, + "source": "dwp", + "value": 62260.0 + }, + { + "contract_target_id": "dwp.uc.two_child_limit.children_claimant_pip", + "geographic_level": "national", + "name": "dwp/uc/two_child_limit/adult_pip_children", + "period": 2026, + "reason": "Incumbent resolves this two-child-limit target only at 2026; Ledger activates the April-2025 publication at calibration period 2025.", + "resolved_from_year": 2026, + "source": "dwp", + "value": 225320.0 + }, + { + "contract_target_id": "dwp.uc.two_child_limit.households_disabled_child_element", + "geographic_level": "national", + "name": "dwp/uc/two_child_limit/disabled_child_element_households", + "period": 2026, + "reason": "Incumbent resolves this two-child-limit target only at 2026; Ledger activates the April-2025 publication at calibration period 2025.", + "resolved_from_year": 2026, + "source": "dwp", + "value": 124560.0 + }, + { + "contract_target_id": "dwp.uc.two_child_limit.children_disabled_child_element", + "geographic_level": "national", + "name": "dwp/uc/two_child_limit/disabled_child_element_children", + "period": 2026, + "reason": "Incumbent resolves this two-child-limit target only at 2026; Ledger activates the April-2025 publication at calibration period 2025.", + "resolved_from_year": 2026, + "source": "dwp", + "value": 462660.0 + } + ], + "provenance": { + "extraction_utc": "2026-08-20T08:23:27.636917+00:00", + "method": "level-union name-dedup per build_loss_matrix.create_target_matrix:93-103; values via build_loss_matrix._resolve_value at years 2025 and 2026; network-dependent get_targets() sources fetched live at extraction time", + "pinned_ref": "12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3", + "runtime_version": "3.13.14", + "source_repository": "retired UK data package" + }, + "rows": [ + { + "contract_target_id": "dwp.pip.daily_living_standard_claimants", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.pip.daily_living_standard_claimants", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/pip_dl_standard_claimants", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 1283000.0 + }, + { + "contract_target_id": "dwp.pip.daily_living_enhanced_claimants", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.pip.daily_living_enhanced_claimants", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/pip_dl_enhanced_claimants", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 1608000.0 + }, + { + "contract_target_id": "dwp.esa_claimants", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.esa_claimants", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/esa_claimants", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 999000.0 + }, + { + "contract_target_id": "dwp.esa_contrib_claimants", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.esa_contrib_claimants", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/esa_contrib_claimants", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 620000.0 + }, + { + "contract_target_id": "dwp.esa_income_claimants", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.esa_income_claimants", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/esa_income_claimants", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 180000.0 + }, + { + "contract_target_id": "dwp.jsa_claimants", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.jsa_claimants", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/jsa_claimants", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 71000.0 + }, + { + "contract_target_id": "dwp.benefit_cap.capped_households", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.benefit_cap.capped_households", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/benefit_capped_households", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 110637.0 + }, + { + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp/benefit_cap_total_reduction", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/benefit_cap_total_reduction", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 320866000.0 + }, + { + "contract_target_id": "dwp.uc.scotland_households_child_under_1", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.scotland_households_child_under_1", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/scotland_uc_households_child_under_1", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 14000.0 + }, + { + "contract_target_id": "dwp.uc.households_children_1", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.households_children_1", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc/claimants_with_1_children", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 1222944.0 + }, + { + "contract_target_id": "dwp.uc.households_children_2", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.households_children_2", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc/claimants_with_2_children", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 1058967.0 + }, + { + "contract_target_id": "dwp.uc.households_children_3", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.households_children_3", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc/claimants_with_3_children", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 473500.0 + }, + { + "contract_target_id": "dwp.uc.households_children_4", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.households_children_4", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc/claimants_with_4_children", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 166790.0 + }, + { + "contract_target_id": "dwp.uc.households_children_5_or_more", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.households_children_5_or_more", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc/claimants_with_5+_children", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 75910.0 + }, + { + "contract_target_id": "dwp.uc.households_single_no_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.households_single_no_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc/claimants_single_no_children", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 2868011.0 + }, + { + "contract_target_id": "dwp.uc.households_single_with_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.households_single_with_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc/claimants_single_with_children", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 2156879.0 + }, + { + "contract_target_id": "dwp.uc.households_couple_no_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.households_couple_no_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc/claimants_couple_no_children", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 231368.0 + }, + { + "contract_target_id": "dwp.uc.households_couple_with_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.households_couple_with_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc/claimants_couple_with_children", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 839379.0 + }, + { + "contract_target_id": "dwp.uc.households", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.households", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc/households", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 6700000.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_single", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_single", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_0_to_1_200", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 102312.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_lone_parent", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_0_to_1_200", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 24639.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_no_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_0_to_1_200", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 7610.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_with_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_0_to_1_200", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 18714.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_single", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_single", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_1_200_to_2_400", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 120819.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_lone_parent", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_1_200_to_2_400", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 34670.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_no_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_1_200_to_2_400", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 8906.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_with_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_1_200_to_2_400", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 22489.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_single", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_single", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_2_400_to_3_600", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 173925.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_lone_parent", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_2_400_to_3_600", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 43623.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_no_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_2_400_to_3_600", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 11750.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_with_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_2_400_to_3_600", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 26734.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_single", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_single", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_3_600_to_4_800", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 375706.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_lone_parent", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_3_600_to_4_800", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 55622.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_no_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_3_600_to_4_800", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 10802.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_with_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_3_600_to_4_800", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 29189.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_single", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_single", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_4_800_to_6_000", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 200713.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_lone_parent", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_4_800_to_6_000", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 67901.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_no_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_4_800_to_6_000", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 12168.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_with_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_4_800_to_6_000", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 33137.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_single", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_single", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_6_000_to_7_200", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 107860.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_lone_parent", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_6_000_to_7_200", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 89314.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_no_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_6_000_to_7_200", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 12461.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_with_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_6_000_to_7_200", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 35834.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_single", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_single", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_7_200_to_8_400", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 144036.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_lone_parent", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_7_200_to_8_400", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 118641.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_no_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_7_200_to_8_400", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 15787.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_with_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_7_200_to_8_400", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 38338.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_single", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_single", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_8_400_to_9_600", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 377221.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_lone_parent", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_8_400_to_9_600", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 99069.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_no_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_8_400_to_9_600", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 14248.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_with_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_8_400_to_9_600", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 40685.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_single", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_single", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_9_600_to_10_800", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 341138.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_lone_parent", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_9_600_to_10_800", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 102251.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_no_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_9_600_to_10_800", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 17559.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_with_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_9_600_to_10_800", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 40564.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_single", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_single", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_10_800_to_12_000", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 95698.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_lone_parent", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_10_800_to_12_000", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 126949.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_no_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_10_800_to_12_000", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 12370.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_with_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_10_800_to_12_000", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 42188.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_single", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_single", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_12_000_to_13_200", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 106663.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_lone_parent", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_12_000_to_13_200", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 131129.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_no_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_12_000_to_13_200", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 15175.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_with_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_12_000_to_13_200", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 41520.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_single", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_single", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_13_200_to_14_400", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 181180.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_lone_parent", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_13_200_to_14_400", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 131289.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_no_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_13_200_to_14_400", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 12297.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_with_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_13_200_to_14_400", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 41159.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_single", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_single", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_14_400_to_15_600", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 189861.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_lone_parent", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_14_400_to_15_600", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 119355.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_no_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_14_400_to_15_600", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 17828.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_with_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_14_400_to_15_600", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 42515.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_single", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_single", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_15_600_to_16_800", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 129174.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_lone_parent", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_15_600_to_16_800", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 130802.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_no_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_15_600_to_16_800", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 14427.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_with_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_15_600_to_16_800", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 38527.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_single", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_single", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_16_800_to_18_000", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 84690.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_lone_parent", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_16_800_to_18_000", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 141848.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_no_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_16_800_to_18_000", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 11892.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_with_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_16_800_to_18_000", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 38894.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_single", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_single", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_18_000_to_19_200", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 46244.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_lone_parent", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_18_000_to_19_200", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 136835.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_no_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_18_000_to_19_200", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 9463.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_with_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_18_000_to_19_200", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 38659.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_single", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_single", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_19_200_to_20_400", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 26481.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_lone_parent", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_19_200_to_20_400", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 107556.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_no_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_19_200_to_20_400", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 8443.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_with_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_19_200_to_20_400", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 34318.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_single", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_single", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_20_400_to_21_600", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 18143.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_lone_parent", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_20_400_to_21_600", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 86616.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_no_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_20_400_to_21_600", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 5770.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_with_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_20_400_to_21_600", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 30116.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_single", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_single", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_21_600_to_22_800", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 12325.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_lone_parent", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_21_600_to_22_800", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 80294.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_no_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_21_600_to_22_800", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 3485.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_with_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_21_600_to_22_800", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 28519.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_single", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_single", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_22_800_to_24_000", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 9555.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_lone_parent", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_22_800_to_24_000", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 70309.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_no_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_22_800_to_24_000", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 2360.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_with_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_22_800_to_24_000", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 26014.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_single", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_single", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_24_000_to_25_200", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 6230.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_lone_parent", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_24_000_to_25_200", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 50510.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_no_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_24_000_to_25_200", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 1815.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_with_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_24_000_to_25_200", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 23159.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_single", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_single", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_25_200_to_26_400", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 5884.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_lone_parent", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_25_200_to_26_400", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 42522.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_no_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_25_200_to_26_400", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 1186.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_with_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_25_200_to_26_400", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 20618.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_single", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_single", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_26_400_to_27_600", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 5362.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_lone_parent", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_26_400_to_27_600", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 33508.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_no_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_26_400_to_27_600", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 935.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_with_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_26_400_to_27_600", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 17493.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_single", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_single", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_27_600_to_28_800", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 1786.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_lone_parent", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_27_600_to_28_800", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 27063.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_no_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_27_600_to_28_800", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 632.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_with_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_27_600_to_28_800", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 15437.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_single", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_single", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_28_800_to_30_000", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 1491.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_lone_parent", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_28_800_to_30_000", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 21663.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_no_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_28_800_to_30_000", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 580.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_with_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_28_800_to_30_000", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 12836.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_single", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_single", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_nan_to_nan", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 3518.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_lone_parent", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_nan_to_nan", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 82905.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_no_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_nan_to_nan", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 1424.0 + }, + { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "entity": "household", + "family": "dwp", + "geographic_level": "national", + "measure": "dwp.uc.payment_distribution_couple_with_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_nan_to_nan", + "period": 2025, + "resolved_from_year": 2025, + "source": "dwp", + "value": 61727.0 + }, + { + "contract_target_id": "hmrc.cgt.gains_total", + "entity": "household", + "family": "hmrc", + "geographic_level": "national", + "measure": "hmrc.cgt.gains_total", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "hmrc/capital_gains_total", + "period": 2025, + "resolved_from_year": 2025, + "source": "hmrc", + "value": 67727478991.59665 + }, + { + "contract_target_id": "hmrc.cgt.taxpayers_total", + "entity": "household", + "family": "hmrc", + "geographic_level": "national", + "measure": "hmrc.cgt.taxpayers_total", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "hmrc/cgt_taxpayers", + "period": 2025, + "resolved_from_year": 2025, + "source": "hmrc", + "value": 378000.0 + }, + { + "entity": "household", + "family": "hmrc", + "geographic_level": "national", + "measure": "hmrc/cgt_taxpayers_band_12300", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "hmrc/cgt_taxpayers_band_12300", + "period": 2025, + "resolved_from_year": 2025, + "source": "hmrc", + "value": 79000.0 + }, + { + "entity": "household", + "family": "hmrc", + "geographic_level": "national", + "measure": "hmrc/capital_gains_band_12300", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "hmrc/capital_gains_band_12300", + "period": 2025, + "resolved_from_year": 2025, + "source": "hmrc", + "value": 1457322689.0756304 + }, + { + "entity": "household", + "family": "hmrc", + "geographic_level": "national", + "measure": "hmrc/cgt_taxpayers_band_25000", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "hmrc/cgt_taxpayers_band_25000", + "period": 2025, + "resolved_from_year": 2025, + "source": "hmrc", + "value": 74000.0 + }, + { + "entity": "household", + "family": "hmrc", + "geographic_level": "national", + "measure": "hmrc/capital_gains_band_25000", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "hmrc/capital_gains_band_25000", + "period": 2025, + "resolved_from_year": 2025, + "source": "hmrc", + "value": 2718348739.4957986 + }, + { + "entity": "household", + "family": "hmrc", + "geographic_level": "national", + "measure": "hmrc/cgt_taxpayers_band_50000", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "hmrc/cgt_taxpayers_band_50000", + "period": 2025, + "resolved_from_year": 2025, + "source": "hmrc", + "value": 53000.0 + }, + { + "entity": "household", + "family": "hmrc", + "geographic_level": "national", + "measure": "hmrc/capital_gains_band_50000", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "hmrc/capital_gains_band_50000", + "period": 2025, + "resolved_from_year": 2025, + "source": "hmrc", + "value": 3834464705.8823533 + }, + { + "entity": "household", + "family": "hmrc", + "geographic_level": "national", + "measure": "hmrc/cgt_taxpayers_band_100000", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "hmrc/cgt_taxpayers_band_100000", + "period": 2025, + "resolved_from_year": 2025, + "source": "hmrc", + "value": 37000.0 + }, + { + "entity": "household", + "family": "hmrc", + "geographic_level": "national", + "measure": "hmrc/capital_gains_band_100000", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "hmrc/capital_gains_band_100000", + "period": 2025, + "resolved_from_year": 2025, + "source": "hmrc", + "value": 5805652941.176472 + }, + { + "entity": "household", + "family": "hmrc", + "geographic_level": "national", + "measure": "hmrc/cgt_taxpayers_band_250000", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "hmrc/cgt_taxpayers_band_250000", + "period": 2025, + "resolved_from_year": 2025, + "source": "hmrc", + "value": 14000.0 + }, + { + "entity": "household", + "family": "hmrc", + "geographic_level": "national", + "measure": "hmrc/capital_gains_band_250000", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "hmrc/capital_gains_band_250000", + "period": 2025, + "resolved_from_year": 2025, + "source": "hmrc", + "value": 4898166386.554623 + }, + { + "entity": "household", + "family": "hmrc", + "geographic_level": "national", + "measure": "hmrc/cgt_taxpayers_band_500000", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "hmrc/cgt_taxpayers_band_500000", + "period": 2025, + "resolved_from_year": 2025, + "source": "hmrc", + "value": 8000.0 + }, + { + "entity": "household", + "family": "hmrc", + "geographic_level": "national", + "measure": "hmrc/capital_gains_band_500000", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "hmrc/capital_gains_band_500000", + "period": 2025, + "resolved_from_year": 2025, + "source": "hmrc", + "value": 5863205882.3529415 + }, + { + "entity": "household", + "family": "hmrc", + "geographic_level": "national", + "measure": "hmrc/cgt_taxpayers_band_1000000", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "hmrc/cgt_taxpayers_band_1000000", + "period": 2025, + "resolved_from_year": 2025, + "source": "hmrc", + "value": 5000.0 + }, + { + "entity": "household", + "family": "hmrc", + "geographic_level": "national", + "measure": "hmrc/capital_gains_band_1000000", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "hmrc/capital_gains_band_1000000", + "period": 2025, + "resolved_from_year": 2025, + "source": "hmrc", + "value": 6567201680.67227 + }, + { + "entity": "household", + "family": "hmrc", + "geographic_level": "national", + "measure": "hmrc/cgt_taxpayers_band_2000000", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "hmrc/cgt_taxpayers_band_2000000", + "period": 2025, + "resolved_from_year": 2025, + "source": "hmrc", + "value": 3000.0 + }, + { + "entity": "household", + "family": "hmrc", + "geographic_level": "national", + "measure": "hmrc/capital_gains_band_2000000", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "hmrc/capital_gains_band_2000000", + "period": 2025, + "resolved_from_year": 2025, + "source": "hmrc", + "value": 9443821008.403362 + }, + { + "entity": "household", + "family": "hmrc", + "geographic_level": "national", + "measure": "hmrc/cgt_taxpayers_band_5000000", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "hmrc/cgt_taxpayers_band_5000000", + "period": 2025, + "resolved_from_year": 2025, + "source": "hmrc", + "value": 2000.0 + }, + { + "entity": "household", + "family": "hmrc", + "geographic_level": "national", + "measure": "hmrc/capital_gains_band_5000000", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "hmrc/capital_gains_band_5000000", + "period": 2025, + "resolved_from_year": 2025, + "source": "hmrc", + "value": 23343884033.61345 + }, + { + "entity": "household", + "family": "hmrc", + "geographic_level": "national", + "measure": "hmrc/salary_sacrifice_contributions", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "hmrc/salary_sacrifice_contributions", + "period": 2025, + "resolved_from_year": 2025, + "source": "hmrc", + "value": 24720000000.0 + }, + { + "contract_target_id": "hmrc.spi.employment_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.employment_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/employment_income_income_band_12_570_to_15_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 16900000000.0 + }, + { + "contract_target_id": "hmrc.spi.employment_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.employment_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/employment_income_count_income_band_12_570_to_15_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 1360000.0 + }, + { + "contract_target_id": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/self_employment_income_income_band_12_570_to_15_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 4810000000.0 + }, + { + "contract_target_id": "hmrc.spi.self_employment_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.self_employment_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/self_employment_income_count_income_band_12_570_to_15_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 444000.0 + }, + { + "contract_target_id": "hmrc.spi.state_pension.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.state_pension.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/state_pension_income_band_12_570_to_15_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 11800000000.0 + }, + { + "contract_target_id": "hmrc.spi.state_pension.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.state_pension.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/state_pension_count_income_band_12_570_to_15_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 1140000.0 + }, + { + "contract_target_id": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/private_pension_income_income_band_12_570_to_15_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 4350000000.0 + }, + { + "contract_target_id": "hmrc.spi.private_pension_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.private_pension_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/private_pension_income_count_income_band_12_570_to_15_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 1070000.0 + }, + { + "contract_target_id": "hmrc.spi.property_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.property_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/property_income_income_band_12_570_to_15_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 1273000000.0 + }, + { + "contract_target_id": "hmrc.spi.property_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.property_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/property_income_count_income_band_12_570_to_15_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 101000.0 + }, + { + "contract_target_id": "hmrc.spi.dividend_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.dividend_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/dividend_income_income_band_12_570_to_15_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 175000000.0 + }, + { + "contract_target_id": "hmrc.spi.dividend_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.dividend_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/dividend_income_count_income_band_12_570_to_15_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 115000.0 + }, + { + "contract_target_id": "hmrc.spi.employment_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.employment_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/employment_income_income_band_15_000_to_20_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 48600000000.0 + }, + { + "contract_target_id": "hmrc.spi.employment_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.employment_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/employment_income_count_income_band_15_000_to_20_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 3100000.0 + }, + { + "contract_target_id": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/self_employment_income_income_band_15_000_to_20_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 8030000000.0 + }, + { + "contract_target_id": "hmrc.spi.self_employment_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.self_employment_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/self_employment_income_count_income_band_15_000_to_20_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 651000.0 + }, + { + "contract_target_id": "hmrc.spi.state_pension.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.state_pension.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/state_pension_income_band_15_000_to_20_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 22200000000.0 + }, + { + "contract_target_id": "hmrc.spi.state_pension.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.state_pension.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/state_pension_count_income_band_15_000_to_20_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 2050000.0 + }, + { + "contract_target_id": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/private_pension_income_income_band_15_000_to_20_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 13600000000.0 + }, + { + "contract_target_id": "hmrc.spi.private_pension_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.private_pension_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/private_pension_income_count_income_band_15_000_to_20_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 2140000.0 + }, + { + "contract_target_id": "hmrc.spi.property_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.property_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/property_income_income_band_15_000_to_20_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 3211000000.0 + }, + { + "contract_target_id": "hmrc.spi.property_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.property_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/property_income_count_income_band_15_000_to_20_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 232000.0 + }, + { + "contract_target_id": "hmrc.spi.dividend_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.dividend_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/dividend_income_income_band_15_000_to_20_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 855000000.0 + }, + { + "contract_target_id": "hmrc.spi.dividend_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.dividend_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/dividend_income_count_income_band_15_000_to_20_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 372000.0 + }, + { + "contract_target_id": "hmrc.spi.employment_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.employment_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/employment_income_income_band_20_000_to_30_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 172000000000.0 + }, + { + "contract_target_id": "hmrc.spi.employment_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.employment_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/employment_income_count_income_band_20_000_to_30_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 7470000.0 + }, + { + "contract_target_id": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/self_employment_income_income_band_20_000_to_30_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 15700000000.0 + }, + { + "contract_target_id": "hmrc.spi.self_employment_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.self_employment_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/self_employment_income_count_income_band_20_000_to_30_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 961000.0 + }, + { + "contract_target_id": "hmrc.spi.state_pension.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.state_pension.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/state_pension_income_band_20_000_to_30_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 24900000000.0 + }, + { + "contract_target_id": "hmrc.spi.state_pension.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.state_pension.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/state_pension_count_income_band_20_000_to_30_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 2320000.0 + }, + { + "contract_target_id": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/private_pension_income_income_band_20_000_to_30_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 30200000000.0 + }, + { + "contract_target_id": "hmrc.spi.private_pension_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.private_pension_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/private_pension_income_count_income_band_20_000_to_30_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 2660000.0 + }, + { + "contract_target_id": "hmrc.spi.property_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.property_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/property_income_income_band_20_000_to_30_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 7258000000.0 + }, + { + "contract_target_id": "hmrc.spi.property_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.property_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/property_income_count_income_band_20_000_to_30_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 431000.0 + }, + { + "contract_target_id": "hmrc.spi.dividend_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.dividend_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/dividend_income_income_band_20_000_to_30_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 3330000000.0 + }, + { + "contract_target_id": "hmrc.spi.dividend_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.dividend_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/dividend_income_count_income_band_20_000_to_30_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 843000.0 + }, + { + "contract_target_id": "hmrc.spi.employment_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.employment_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/employment_income_income_band_30_000_to_40_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 170000000000.0 + }, + { + "contract_target_id": "hmrc.spi.employment_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.employment_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/employment_income_count_income_band_30_000_to_40_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 5370000.0 + }, + { + "contract_target_id": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/self_employment_income_income_band_30_000_to_40_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 12600000000.0 + }, + { + "contract_target_id": "hmrc.spi.self_employment_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.self_employment_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/self_employment_income_count_income_band_30_000_to_40_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 595000.0 + }, + { + "contract_target_id": "hmrc.spi.state_pension.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.state_pension.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/state_pension_income_band_30_000_to_40_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 12300000000.0 + }, + { + "contract_target_id": "hmrc.spi.state_pension.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.state_pension.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/state_pension_count_income_band_30_000_to_40_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 1160000.0 + }, + { + "contract_target_id": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/private_pension_income_income_band_30_000_to_40_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 24900000000.0 + }, + { + "contract_target_id": "hmrc.spi.private_pension_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.private_pension_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/private_pension_income_count_income_band_30_000_to_40_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 1450000.0 + }, + { + "contract_target_id": "hmrc.spi.property_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.property_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/property_income_income_band_30_000_to_40_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 7220000000.0 + }, + { + "contract_target_id": "hmrc.spi.property_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.property_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/property_income_count_income_band_30_000_to_40_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 364000.0 + }, + { + "contract_target_id": "hmrc.spi.dividend_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.dividend_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/dividend_income_income_band_30_000_to_40_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 4700000000.0 + }, + { + "contract_target_id": "hmrc.spi.dividend_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.dividend_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/dividend_income_count_income_band_30_000_to_40_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 667000.0 + }, + { + "contract_target_id": "hmrc.spi.employment_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.employment_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/employment_income_income_band_40_000_to_50_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 139000000000.0 + }, + { + "contract_target_id": "hmrc.spi.employment_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.employment_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/employment_income_count_income_band_40_000_to_50_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 3500000.0 + }, + { + "contract_target_id": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/self_employment_income_income_band_40_000_to_50_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 8730000000.0 + }, + { + "contract_target_id": "hmrc.spi.self_employment_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.self_employment_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/self_employment_income_count_income_band_40_000_to_50_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 359000.0 + }, + { + "contract_target_id": "hmrc.spi.state_pension.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.state_pension.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/state_pension_income_band_40_000_to_50_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 6020000000.0 + }, + { + "contract_target_id": "hmrc.spi.state_pension.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.state_pension.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/state_pension_count_income_band_40_000_to_50_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 568000.0 + }, + { + "contract_target_id": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/private_pension_income_income_band_40_000_to_50_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 16900000000.0 + }, + { + "contract_target_id": "hmrc.spi.private_pension_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.private_pension_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/private_pension_income_count_income_band_40_000_to_50_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 779000.0 + }, + { + "contract_target_id": "hmrc.spi.property_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.property_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/property_income_income_band_40_000_to_50_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 7182000000.0 + }, + { + "contract_target_id": "hmrc.spi.property_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.property_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/property_income_count_income_band_40_000_to_50_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 325000.0 + }, + { + "contract_target_id": "hmrc.spi.dividend_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.dividend_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/dividend_income_income_band_40_000_to_50_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 8400000000.0 + }, + { + "contract_target_id": "hmrc.spi.dividend_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.dividend_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/dividend_income_count_income_band_40_000_to_50_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 627000.0 + }, + { + "contract_target_id": "hmrc.spi.employment_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.employment_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/employment_income_income_band_50_000_to_70_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 174000000000.0 + }, + { + "contract_target_id": "hmrc.spi.employment_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.employment_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/employment_income_count_income_band_50_000_to_70_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 3430000.0 + }, + { + "contract_target_id": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/self_employment_income_income_band_50_000_to_70_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 8220000000.0 + }, + { + "contract_target_id": "hmrc.spi.self_employment_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.self_employment_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/self_employment_income_count_income_band_50_000_to_70_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 311000.0 + }, + { + "contract_target_id": "hmrc.spi.state_pension.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.state_pension.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/state_pension_income_band_50_000_to_70_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 4660000000.0 + }, + { + "contract_target_id": "hmrc.spi.state_pension.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.state_pension.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/state_pension_count_income_band_50_000_to_70_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 441000.0 + }, + { + "contract_target_id": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/private_pension_income_income_band_50_000_to_70_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 17400000000.0 + }, + { + "contract_target_id": "hmrc.spi.private_pension_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.private_pension_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/private_pension_income_count_income_band_50_000_to_70_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 643000.0 + }, + { + "contract_target_id": "hmrc.spi.property_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.property_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/property_income_income_band_50_000_to_70_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 10260000000.0 + }, + { + "contract_target_id": "hmrc.spi.property_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.property_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/property_income_count_income_band_50_000_to_70_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 397000.0 + }, + { + "contract_target_id": "hmrc.spi.dividend_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.dividend_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/dividend_income_income_band_50_000_to_70_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 12500000000.0 + }, + { + "contract_target_id": "hmrc.spi.dividend_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.dividend_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/dividend_income_count_income_band_50_000_to_70_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 643000.0 + }, + { + "contract_target_id": "hmrc.spi.employment_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.employment_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/employment_income_income_band_70_000_to_100_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 118000000000.0 + }, + { + "contract_target_id": "hmrc.spi.employment_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.employment_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/employment_income_count_income_band_70_000_to_100_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 1640000.0 + }, + { + "contract_target_id": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/self_employment_income_income_band_70_000_to_100_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 5360000000.0 + }, + { + "contract_target_id": "hmrc.spi.self_employment_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.self_employment_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/self_employment_income_count_income_band_70_000_to_100_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 143000.0 + }, + { + "contract_target_id": "hmrc.spi.state_pension.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.state_pension.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/state_pension_income_band_70_000_to_100_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 1890000000.0 + }, + { + "contract_target_id": "hmrc.spi.state_pension.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.state_pension.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/state_pension_count_income_band_70_000_to_100_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 176000.0 + }, + { + "contract_target_id": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/private_pension_income_income_band_70_000_to_100_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 9470000000.0 + }, + { + "contract_target_id": "hmrc.spi.private_pension_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.private_pension_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/private_pension_income_count_income_band_70_000_to_100_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 259000.0 + }, + { + "contract_target_id": "hmrc.spi.property_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.property_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/property_income_income_band_70_000_to_100_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 7163000000.0 + }, + { + "contract_target_id": "hmrc.spi.property_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.property_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/property_income_count_income_band_70_000_to_100_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 226000.0 + }, + { + "contract_target_id": "hmrc.spi.dividend_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.dividend_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/dividend_income_income_band_70_000_to_100_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 9440000000.0 + }, + { + "contract_target_id": "hmrc.spi.dividend_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.dividend_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/dividend_income_count_income_band_70_000_to_100_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 336000.0 + }, + { + "contract_target_id": "hmrc.spi.employment_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.employment_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/employment_income_income_band_100_000_to_150_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 82300000000.0 + }, + { + "contract_target_id": "hmrc.spi.employment_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.employment_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/employment_income_count_income_band_100_000_to_150_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 791000.0 + }, + { + "contract_target_id": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/self_employment_income_income_band_100_000_to_150_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 4980000000.0 + }, + { + "contract_target_id": "hmrc.spi.self_employment_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.self_employment_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/self_employment_income_count_income_band_100_000_to_150_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 85000.0 + }, + { + "contract_target_id": "hmrc.spi.state_pension.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.state_pension.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/state_pension_income_band_100_000_to_150_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 847000000.0 + }, + { + "contract_target_id": "hmrc.spi.state_pension.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.state_pension.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/state_pension_count_income_band_100_000_to_150_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 74000.0 + }, + { + "contract_target_id": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/private_pension_income_income_band_100_000_to_150_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 5430000000.0 + }, + { + "contract_target_id": "hmrc.spi.private_pension_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.private_pension_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/private_pension_income_count_income_band_100_000_to_150_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 109000.0 + }, + { + "contract_target_id": "hmrc.spi.property_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.property_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/property_income_income_band_100_000_to_150_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 4845000000.0 + }, + { + "contract_target_id": "hmrc.spi.property_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.property_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/property_income_count_income_band_100_000_to_150_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 137000.0 + }, + { + "contract_target_id": "hmrc.spi.dividend_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.dividend_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/dividend_income_income_band_100_000_to_150_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 6870000000.0 + }, + { + "contract_target_id": "hmrc.spi.dividend_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.dividend_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/dividend_income_count_income_band_100_000_to_150_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 222000.0 + }, + { + "contract_target_id": "hmrc.spi.employment_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.employment_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/employment_income_income_band_150_000_to_200_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 39200000000.0 + }, + { + "contract_target_id": "hmrc.spi.employment_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.employment_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/employment_income_count_income_band_150_000_to_200_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 264000.0 + }, + { + "contract_target_id": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/self_employment_income_income_band_150_000_to_200_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 3650000000.0 + }, + { + "contract_target_id": "hmrc.spi.self_employment_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.self_employment_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/self_employment_income_count_income_band_150_000_to_200_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 40000.0 + }, + { + "contract_target_id": "hmrc.spi.state_pension.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.state_pension.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/state_pension_income_band_150_000_to_200_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 265000000.0 + }, + { + "contract_target_id": "hmrc.spi.state_pension.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.state_pension.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/state_pension_count_income_band_150_000_to_200_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 21000.0 + }, + { + "contract_target_id": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/private_pension_income_income_band_150_000_to_200_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 1810000000.0 + }, + { + "contract_target_id": "hmrc.spi.private_pension_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.private_pension_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/private_pension_income_count_income_band_150_000_to_200_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 29000.0 + }, + { + "contract_target_id": "hmrc.spi.property_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.property_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/property_income_income_band_150_000_to_200_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 2185000000.0 + }, + { + "contract_target_id": "hmrc.spi.property_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.property_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/property_income_count_income_band_150_000_to_200_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 54000.0 + }, + { + "contract_target_id": "hmrc.spi.dividend_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.dividend_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/dividend_income_income_band_150_000_to_200_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 3450000000.0 + }, + { + "contract_target_id": "hmrc.spi.dividend_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.dividend_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/dividend_income_count_income_band_150_000_to_200_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 92000.0 + }, + { + "contract_target_id": "hmrc.spi.employment_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.employment_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/employment_income_income_band_200_000_to_300_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 36600000000.0 + }, + { + "contract_target_id": "hmrc.spi.employment_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.employment_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/employment_income_count_income_band_200_000_to_300_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 180000.0 + }, + { + "contract_target_id": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/self_employment_income_income_band_200_000_to_300_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 4390000000.0 + }, + { + "contract_target_id": "hmrc.spi.self_employment_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.self_employment_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/self_employment_income_count_income_band_200_000_to_300_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 34000.0 + }, + { + "contract_target_id": "hmrc.spi.state_pension.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.state_pension.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/state_pension_income_band_200_000_to_300_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 179000000.0 + }, + { + "contract_target_id": "hmrc.spi.state_pension.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.state_pension.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/state_pension_count_income_band_200_000_to_300_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 14000.0 + }, + { + "contract_target_id": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/private_pension_income_income_band_200_000_to_300_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 1570000000.0 + }, + { + "contract_target_id": "hmrc.spi.private_pension_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.private_pension_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/private_pension_income_count_income_band_200_000_to_300_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 20000.0 + }, + { + "contract_target_id": "hmrc.spi.property_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.property_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/property_income_income_band_200_000_to_300_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 1995000000.0 + }, + { + "contract_target_id": "hmrc.spi.property_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.property_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/property_income_count_income_band_200_000_to_300_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 41000.0 + }, + { + "contract_target_id": "hmrc.spi.dividend_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.dividend_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/dividend_income_income_band_200_000_to_300_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 3700000000.0 + }, + { + "contract_target_id": "hmrc.spi.dividend_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.dividend_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/dividend_income_count_income_band_200_000_to_300_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 75000.0 + }, + { + "contract_target_id": "hmrc.spi.employment_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.employment_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/employment_income_income_band_300_000_to_500_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 29000000000.0 + }, + { + "contract_target_id": "hmrc.spi.employment_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.employment_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/employment_income_count_income_band_300_000_to_500_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 93000.0 + }, + { + "contract_target_id": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/self_employment_income_income_band_300_000_to_500_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 4840000000.0 + }, + { + "contract_target_id": "hmrc.spi.self_employment_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.self_employment_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/self_employment_income_count_income_band_300_000_to_500_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 21000.0 + }, + { + "contract_target_id": "hmrc.spi.state_pension.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.state_pension.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/state_pension_income_band_300_000_to_500_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 96000000.0 + }, + { + "contract_target_id": "hmrc.spi.state_pension.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.state_pension.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/state_pension_count_income_band_300_000_to_500_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 8000.0 + }, + { + "contract_target_id": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/private_pension_income_income_band_300_000_to_500_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 1120000000.0 + }, + { + "contract_target_id": "hmrc.spi.private_pension_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.private_pension_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/private_pension_income_count_income_band_300_000_to_500_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 10000.0 + }, + { + "contract_target_id": "hmrc.spi.property_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.property_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/property_income_income_band_300_000_to_500_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 1453500000.0 + }, + { + "contract_target_id": "hmrc.spi.property_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.property_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/property_income_count_income_band_300_000_to_500_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 23000.0 + }, + { + "contract_target_id": "hmrc.spi.dividend_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.dividend_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/dividend_income_income_band_300_000_to_500_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 3430000000.0 + }, + { + "contract_target_id": "hmrc.spi.dividend_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.dividend_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/dividend_income_count_income_band_300_000_to_500_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 49000.0 + }, + { + "contract_target_id": "hmrc.spi.employment_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.employment_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/employment_income_income_band_500_000_to_1_000_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 23100000000.0 + }, + { + "contract_target_id": "hmrc.spi.employment_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.employment_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/employment_income_count_income_band_500_000_to_1_000_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 44000.0 + }, + { + "contract_target_id": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/self_employment_income_income_band_500_000_to_1_000_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 6670000000.0 + }, + { + "contract_target_id": "hmrc.spi.self_employment_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.self_employment_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/self_employment_income_count_income_band_500_000_to_1_000_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 15000.0 + }, + { + "contract_target_id": "hmrc.spi.state_pension.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.state_pension.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/state_pension_income_band_500_000_to_1_000_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 43000000.0 + }, + { + "contract_target_id": "hmrc.spi.state_pension.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.state_pension.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/state_pension_count_income_band_500_000_to_1_000_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 3000.0 + }, + { + "contract_target_id": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/private_pension_income_income_band_500_000_to_1_000_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 640000000.0 + }, + { + "contract_target_id": "hmrc.spi.private_pension_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.private_pension_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/private_pension_income_count_income_band_500_000_to_1_000_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 4000.0 + }, + { + "contract_target_id": "hmrc.spi.property_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.property_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/property_income_income_band_500_000_to_1_000_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 900600000.0 + }, + { + "contract_target_id": "hmrc.spi.property_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.property_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/property_income_count_income_band_500_000_to_1_000_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 13000.0 + }, + { + "contract_target_id": "hmrc.spi.dividend_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.dividend_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/dividend_income_income_band_500_000_to_1_000_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 3820000000.0 + }, + { + "contract_target_id": "hmrc.spi.dividend_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.dividend_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/dividend_income_count_income_band_500_000_to_1_000_000", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 32000.0 + }, + { + "contract_target_id": "hmrc.spi.employment_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.employment_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/employment_income_income_band_1_000_000_to_inf", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 35500000000.0 + }, + { + "contract_target_id": "hmrc.spi.employment_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.employment_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/employment_income_count_income_band_1_000_000_to_inf", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 21000.0 + }, + { + "contract_target_id": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/self_employment_income_income_band_1_000_000_to_inf", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 19500000000.0 + }, + { + "contract_target_id": "hmrc.spi.self_employment_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.self_employment_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/self_employment_income_count_income_band_1_000_000_to_inf", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 11000.0 + }, + { + "contract_target_id": "hmrc.spi.state_pension.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.state_pension.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/state_pension_income_band_1_000_000_to_inf", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 20000000.0 + }, + { + "contract_target_id": "hmrc.spi.state_pension.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.state_pension.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/state_pension_count_income_band_1_000_000_to_inf", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 2000.0 + }, + { + "contract_target_id": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/private_pension_income_income_band_1_000_000_to_inf", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 370000000.0 + }, + { + "contract_target_id": "hmrc.spi.private_pension_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.private_pension_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/private_pension_income_count_income_band_1_000_000_to_inf", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 2000.0 + }, + { + "contract_target_id": "hmrc.spi.property_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.property_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/property_income_income_band_1_000_000_to_inf", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 834100000.0 + }, + { + "contract_target_id": "hmrc.spi.property_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.property_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/property_income_count_income_band_1_000_000_to_inf", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 7000.0 + }, + { + "contract_target_id": "hmrc.spi.dividend_income.amount_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.dividend_income.amount_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/dividend_income_income_band_1_000_000_to_inf", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 11100000000.0 + }, + { + "contract_target_id": "hmrc.spi.dividend_income.count_by_total_income_band", + "entity": "household", + "family": "hmrc_spi", + "geographic_level": "national", + "measure": "hmrc.spi.dividend_income.count_by_total_income_band", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "hmrc/dividend_income_count_income_band_1_000_000_to_inf", + "period": 2025, + "resolved_from_year": 2024, + "source": "hmrc_spi", + "value": 19000.0 + }, + { + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "housing/total_mortgage", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "housing/total_mortgage", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 99000000000.0 + }, + { + "entity": "household", + "family": "ehs", + "geographic_level": "national", + "measure": "housing/rent_private", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "housing/rent_private", + "period": 2025, + "resolved_from_year": 2025, + "source": "ehs", + "value": 89035200000.0 + }, + { + "entity": "household", + "family": "ehs", + "geographic_level": "national", + "measure": "housing/rent_social", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "housing/rent_social", + "period": 2025, + "resolved_from_year": 2025, + "source": "ehs", + "value": 30680000000.0 + }, + { + "entity": "household", + "family": "nts", + "geographic_level": "national", + "measure": "nts/households_no_vehicle", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "nts/households_no_vehicle", + "period": 2025, + "resolved_from_year": 2024, + "source": "nts", + "value": 6512000.0 + }, + { + "entity": "household", + "family": "nts", + "geographic_level": "national", + "measure": "nts/households_one_vehicle", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "nts/households_one_vehicle", + "period": 2025, + "resolved_from_year": 2024, + "source": "nts", + "value": 13024000.0 + }, + { + "entity": "household", + "family": "nts", + "geographic_level": "national", + "measure": "nts/households_two_plus_vehicles", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "nts/households_two_plus_vehicles", + "period": 2025, + "resolved_from_year": 2024, + "source": "nts", + "value": 10064000.0 + }, + { + "contract_target_id": "obr.income_tax", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "obr.income_tax", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/income_tax", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 331437583074.4429 + }, + { + "contract_target_id": "obr.ni", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "obr.ni", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/ni", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 200081395082.7125 + }, + { + "contract_target_id": "obr.vat", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "obr.vat", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/vat", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 180168938685.41794 + }, + { + "contract_target_id": "obr.fuel_duties", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "obr.fuel_duties", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/fuel_duties", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 24241874775.213375 + }, + { + "contract_target_id": "obr.capital_gains_tax", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "obr.capital_gains_tax", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/capital_gains_tax", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 21801546197.09165 + }, + { + "contract_target_id": "obr.sdlt", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "obr.sdlt", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/sdlt", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 15406516698.785578 + }, + { + "contract_target_id": "obr.ni_employee", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "obr.ni_employee", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/ni_employee", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 49544363784.26465 + }, + { + "contract_target_id": "obr.ni_employer", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "obr.ni_employer", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/ni_employer", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 145324007512.71753 + }, + { + "contract_target_id": "obr.ni_self_employed", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "obr.ni_self_employed", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/ni_self_employed", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 2902816090.4147716 + }, + { + "contract_target_id": "obr.council_tax", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "obr.council_tax", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/council_tax", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 50925163826.30539 + }, + { + "contract_target_id": "obr.council_tax_england", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "obr.council_tax_england", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/council_tax_england", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 44117237614.71528 + }, + { + "contract_target_id": "obr.council_tax_scotland", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "obr.council_tax_scotland", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/council_tax_scotland", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 3051227494.93594 + }, + { + "contract_target_id": "obr.council_tax_wales", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "obr.council_tax_wales", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/council_tax_wales", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 2400769752.36827 + }, + { + "contract_target_id": "obr.domestic_rates", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "obr.domestic_rates", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/domestic_rates", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 494000000.0 + }, + { + "contract_target_id": "obr.housing_benefit", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "obr.housing_benefit", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/housing_benefit", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 12103254163.788864 + }, + { + "contract_target_id": "obr.pip", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "obr.pip", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/pip", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 36910059270.5278 + }, + { + "contract_target_id": "obr.esa", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "obr.esa", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/esa", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 7206287181.538654 + }, + { + "contract_target_id": "obr.attendance_allowance", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "obr.attendance_allowance", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/attendance_allowance", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 8492497075.074617 + }, + { + "contract_target_id": "obr.pension_credit", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "obr.pension_credit", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/pension_credit", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 6146422389.476461 + }, + { + "contract_target_id": "obr.carers_allowance", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "obr.carers_allowance", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/carers_allowance", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 4569403813.760573 + }, + { + "contract_target_id": "obr.statutory_maternity_pay", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "obr.statutory_maternity_pay", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/statutory_maternity_pay", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 3194800881.520547 + }, + { + "contract_target_id": "obr.winter_fuel_allowance", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "obr.winter_fuel_allowance", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/winter_fuel_allowance", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 1911040880.4619167 + }, + { + "contract_target_id": "obr.universal_credit_in_cap", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "obr.universal_credit_in_cap", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/universal_credit_in_cap", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 66410800011.47837 + }, + { + "contract_target_id": "obr.child_benefit", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "obr.child_benefit", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/child_benefit", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 13389272724.45089 + }, + { + "contract_target_id": "obr.state_pension", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "obr.state_pension", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/state_pension", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 146185954351.57382 + }, + { + "contract_target_id": "obr.jobseekers_allowance", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "obr.jobseekers_allowance", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/jobseekers_allowance", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 280558748.04472804 + }, + { + "contract_target_id": "obr.universal_credit_outside_cap", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "obr.universal_credit_outside_cap", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/universal_credit_outside_cap", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 12875549128.065746 + }, + { + "contract_target_id": "obr.tv_licence_fee", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "obr.tv_licence_fee", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/tv_licence_fee", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 3872000000.0 + }, + { + "contract_target_id": "isc.private_school_students", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "isc.private_school_students", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/private_school_students", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 557000.0 + }, + { + "contract_target_id": "hmrc.salary_sacrifice.nics_relief_employee", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "hmrc.salary_sacrifice.nics_relief_employee", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/salary_sacrifice_employee_ni_relief", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 1236000000.0 + }, + { + "contract_target_id": "hmrc.salary_sacrifice.nics_relief_employer", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "hmrc.salary_sacrifice.nics_relief_employer", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/salary_sacrifice_employer_ni_relief", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 2987000000.0 + }, + { + "contract_target_id": "hmrc.salary_sacrifice.users_total", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "hmrc.salary_sacrifice.users_total", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/salary_sacrifice_users_total", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 7884800.0 + }, + { + "contract_target_id": "hmrc.salary_sacrifice.users_below_cap", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "hmrc.salary_sacrifice.users_below_cap", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/salary_sacrifice_users_below_cap", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 4403200.0 + }, + { + "contract_target_id": "hmrc.salary_sacrifice.users_above_cap", + "entity": "household", + "family": "obr", + "geographic_level": "national", + "measure": "hmrc.salary_sacrifice.users_above_cap", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "obr/salary_sacrifice_users_above_cap", + "period": 2025, + "resolved_from_year": 2025, + "source": "obr", + "value": 3379200.0 + }, + { + "contract_target_id": "ons.population.uk_total", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.uk_total", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/uk_population", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 69502341.0 + }, + { + "contract_target_id": "ons.population.female_0_4", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.female_0_4", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/female_0_4", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 1698816.0 + }, + { + "contract_target_id": "ons.population.female_5_9", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.female_5_9", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/female_5_9", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 1918180.0 + }, + { + "contract_target_id": "ons.population.female_10_14", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.female_10_14", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/female_10_14", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 2041879.0 + }, + { + "contract_target_id": "ons.population.female_15_19", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.female_15_19", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/female_15_19", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 2036402.0 + }, + { + "contract_target_id": "ons.population.female_20_24", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.female_20_24", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/female_20_24", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 2033478.0 + }, + { + "contract_target_id": "ons.population.female_25_29", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.female_25_29", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/female_25_29", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 2258028.0 + }, + { + "contract_target_id": "ons.population.female_30_34", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.female_30_34", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/female_30_34", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 2443559.0 + }, + { + "contract_target_id": "ons.population.female_35_39", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.female_35_39", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/female_35_39", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 2497122.0 + }, + { + "contract_target_id": "ons.population.female_40_44", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.female_40_44", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/female_40_44", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 2356214.0 + }, + { + "contract_target_id": "ons.population.female_45_49", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.female_45_49", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/female_45_49", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 2135556.0 + }, + { + "contract_target_id": "ons.population.female_50_54", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.female_50_54", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/female_50_54", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 2206473.0 + }, + { + "contract_target_id": "ons.population.female_55_59", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.female_55_59", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/female_55_59", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 2340737.0 + }, + { + "contract_target_id": "ons.population.female_60_64", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.female_60_64", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/female_60_64", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 2248908.0 + }, + { + "contract_target_id": "ons.population.female_65_69", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.female_65_69", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/female_65_69", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 1890892.0 + }, + { + "contract_target_id": "ons.population.female_70_74", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.female_70_74", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/female_70_74", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 1619328.0 + }, + { + "contract_target_id": "ons.population.female_75_79", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.female_75_79", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/female_75_79", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 1575830.0 + }, + { + "contract_target_id": "ons.population.female_80_84", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.female_80_84", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/female_80_84", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 1064043.0 + }, + { + "contract_target_id": "ons.population.female_85_89", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.female_85_89", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/female_85_90", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 766765.0 + }, + { + "contract_target_id": "ons.population.male_0_4", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.male_0_4", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/male_0_4", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 1784490.0 + }, + { + "contract_target_id": "ons.population.male_5_9", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.male_5_9", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/male_5_9", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 2011903.0 + }, + { + "contract_target_id": "ons.population.male_10_14", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.male_10_14", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/male_10_14", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 2143309.0 + }, + { + "contract_target_id": "ons.population.male_15_19", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.male_15_19", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/male_15_19", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 2149930.0 + }, + { + "contract_target_id": "ons.population.male_20_24", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.male_20_24", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/male_20_24", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 2136737.0 + }, + { + "contract_target_id": "ons.population.male_25_29", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.male_25_29", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/male_25_29", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 2246892.0 + }, + { + "contract_target_id": "ons.population.male_30_34", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.male_30_34", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/male_30_34", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 2323977.0 + }, + { + "contract_target_id": "ons.population.male_35_39", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.male_35_39", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/male_35_39", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 2325815.0 + }, + { + "contract_target_id": "ons.population.male_40_44", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.male_40_44", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/male_40_44", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 2208064.0 + }, + { + "contract_target_id": "ons.population.male_45_49", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.male_45_49", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/male_45_49", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 2040636.0 + }, + { + "contract_target_id": "ons.population.male_50_54", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.male_50_54", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/male_50_54", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 2119462.0 + }, + { + "contract_target_id": "ons.population.male_55_59", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.male_55_59", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/male_55_59", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 2234921.0 + }, + { + "contract_target_id": "ons.population.male_60_64", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.male_60_64", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/male_60_64", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 2138720.0 + }, + { + "contract_target_id": "ons.population.male_65_69", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.male_65_69", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/male_65_69", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 1785048.0 + }, + { + "contract_target_id": "ons.population.male_70_74", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.male_70_74", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/male_70_74", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 1472190.0 + }, + { + "contract_target_id": "ons.population.male_75_79", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.male_75_79", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/male_75_79", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 1370172.0 + }, + { + "contract_target_id": "ons.population.male_80_84", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.male_80_84", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/male_80_84", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 853423.0 + }, + { + "contract_target_id": "ons.population.male_85_89", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.population.male_85_89", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/male_85_90", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 524918.0 + }, + { + "contract_target_id": "ons.household_composition.lone_households_under_65", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.household_composition.lone_households_under_65", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/lone_households_under_65", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 4316000.0 + }, + { + "contract_target_id": "ons.household_composition.lone_households_over_65", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.household_composition.lone_households_over_65", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/lone_households_over_65", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 4254000.0 + }, + { + "contract_target_id": "ons.household_composition.unrelated_adult_households", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.household_composition.unrelated_adult_households", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/unrelated_adult_households", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 813000.0 + }, + { + "contract_target_id": "ons.household_composition.couple_no_children_households", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.household_composition.couple_no_children_households", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/couple_no_children_households", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 8119000.0 + }, + { + "contract_target_id": "ons.household_composition.couple_under_3_children_households", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.household_composition.couple_under_3_children_households", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/couple_under_3_children_households", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 5439000.0 + }, + { + "contract_target_id": "ons.household_composition.couple_3_plus_children_households", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.household_composition.couple_3_plus_children_households", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/couple_3_plus_children_households", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 931000.0 + }, + { + "contract_target_id": "ons.household_composition.couple_non_dependent_children_only_households", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.household_composition.couple_non_dependent_children_only_households", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/couple_non_dependent_children_only_households", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 1848000.0 + }, + { + "contract_target_id": "ons.household_composition.lone_parent_dependent_children_households", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.household_composition.lone_parent_dependent_children_households", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/lone_parent_dependent_children_households", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 1835000.0 + }, + { + "contract_target_id": "ons.household_composition.lone_parent_non_dependent_children_households", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.household_composition.lone_parent_non_dependent_children_households", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/lone_parent_non_dependent_children_households", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 1204000.0 + }, + { + "contract_target_id": "ons.household_composition.multi_family_households", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.household_composition.multi_family_households", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/multi_family_households", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 244000.0 + }, + { + "contract_target_id": "ons.land.household_land_value", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.land.household_land_value", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/household_land_value", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 5042871548763.499 + }, + { + "contract_target_id": "ons.land.corporate_land_value", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.land.corporate_land_value", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/corporate_land_value", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 2057128451236.5015 + }, + { + "contract_target_id": "ons.land.land_value", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.land.land_value", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/land_value", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 7100000000000.0 + }, + { + "contract_target_id": "ons.public_sector_employment", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.public_sector_employment", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "ons/public_sector_employment", + "period": 2025, + "resolved_from_year": 2024, + "source": "ons", + "value": 5940000.0 + }, + { + "contract_target_id": "ons.savings_interest_income", + "entity": "household", + "family": "ons", + "geographic_level": "national", + "measure": "ons.savings_interest_income", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/savings_interest_income", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 95503000000.0 + }, + { + "contract_target_id": "slc.borrowers.plan_2_above_threshold", + "entity": "household", + "family": "slc", + "geographic_level": "national", + "measure": "slc.borrowers.plan_2_above_threshold", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "slc/plan_2_borrowers_above_threshold", + "period": 2025, + "resolved_from_year": 2025, + "source": "slc", + "value": 3985000.0 + }, + { + "contract_target_id": "slc.borrowers.plan_2_liable", + "entity": "household", + "family": "slc", + "geographic_level": "national", + "measure": "slc.borrowers.plan_2_liable", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "slc/plan_2_borrowers_liable", + "period": 2025, + "resolved_from_year": 2025, + "source": "slc", + "value": 8940000.0 + }, + { + "contract_target_id": "slc.borrowers.plan_5_above_threshold", + "entity": "household", + "family": "slc", + "geographic_level": "national", + "measure": "slc.borrowers.plan_5_above_threshold", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "slc/plan_5_borrowers_above_threshold", + "period": 2025, + "resolved_from_year": 2025, + "source": "slc", + "value": 0.0 + }, + { + "contract_target_id": "slc.borrowers.plan_5_liable", + "entity": "household", + "family": "slc", + "geographic_level": "national", + "measure": "slc.borrowers.plan_5_liable", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "slc/plan_5_borrowers_liable", + "period": 2025, + "resolved_from_year": 2025, + "source": "slc", + "value": 10000.0 + }, + { + "contract_target_id": "slc.support.maintenance_loan_recipients", + "entity": "household", + "family": "slc", + "geographic_level": "national", + "measure": "slc.support.maintenance_loan_recipients", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "slc/maintenance_loan_recipients", + "period": 2025, + "resolved_from_year": 2025, + "source": "slc", + "value": 1159761.0 + }, + { + "contract_target_id": "slc.support.maintenance_loan_spend", + "entity": "household", + "family": "slc", + "geographic_level": "national", + "measure": "slc.support.maintenance_loan_spend", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "slc/maintenance_loan_spend", + "period": 2025, + "resolved_from_year": 2025, + "source": "slc", + "value": 8591659718.0 + }, + { + "contract_target_id": "slc.support.parents_learning_allowance_recipients", + "entity": "household", + "family": "slc", + "geographic_level": "national", + "measure": "slc.support.parents_learning_allowance_recipients", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "slc/parents_learning_allowance_recipients", + "period": 2025, + "resolved_from_year": 2025, + "source": "slc", + "value": 99645.0 + }, + { + "contract_target_id": "slc.support.parents_learning_allowance_spend", + "entity": "household", + "family": "slc", + "geographic_level": "national", + "measure": "slc.support.parents_learning_allowance_spend", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "slc/parents_learning_allowance_spend", + "period": 2025, + "resolved_from_year": 2025, + "source": "slc", + "value": 181421659.0 + }, + { + "contract_target_id": "slc.support.adult_dependants_grant_recipients", + "entity": "household", + "family": "slc", + "geographic_level": "national", + "measure": "slc.support.adult_dependants_grant_recipients", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "slc/adult_dependants_grant_recipients", + "period": 2025, + "resolved_from_year": 2025, + "source": "slc", + "value": 18611.0 + }, + { + "contract_target_id": "slc.support.adult_dependants_grant_spend", + "entity": "household", + "family": "slc", + "geographic_level": "national", + "measure": "slc.support.adult_dependants_grant_spend", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "slc/adult_dependants_grant_spend", + "period": 2025, + "resolved_from_year": 2025, + "source": "slc", + "value": 55364917.0 + }, + { + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons/household_land_value/NORTH_EAST", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/household_land_value/NORTH_EAST", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 119603822538.99867 + }, + { + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons/household_land_value/NORTH_WEST", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/household_land_value/NORTH_WEST", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 422892569458.29254 + }, + { + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons/household_land_value/YORKSHIRE", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/household_land_value/YORKSHIRE", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 298105966119.05054 + }, + { + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons/household_land_value/EAST_MIDLANDS", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/household_land_value/EAST_MIDLANDS", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 304799621177.5439 + }, + { + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons/household_land_value/WEST_MIDLANDS", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/household_land_value/WEST_MIDLANDS", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 364340113693.65784 + }, + { + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons/household_land_value/EAST_OF_ENGLAND", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/household_land_value/EAST_OF_ENGLAND", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 542672059385.554 + }, + { + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons/household_land_value/LONDON", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/household_land_value/LONDON", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 1188167933642.289 + }, + { + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons/household_land_value/SOUTH_EAST", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/household_land_value/SOUTH_EAST", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 885848048153.7532 + }, + { + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons/household_land_value/SOUTH_WEST", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/household_land_value/SOUTH_WEST", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 456726035827.05096 + }, + { + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons/household_land_value/WALES", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/household_land_value/WALES", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 179320185054.4999 + }, + { + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons/household_land_value/SCOTLAND", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/household_land_value/SCOTLAND", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 280395193712.8084 + }, + { + "contract_target_id": "ons.population.age_0_9_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_0_9_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/east_age_0_9", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 726000.0 + }, + { + "contract_target_id": "ons.population.age_10_19_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_10_19_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/east_age_10_19", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 741000.0 + }, + { + "contract_target_id": "ons.population.age_20_29_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_20_29_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/east_age_20_29", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 749000.0 + }, + { + "contract_target_id": "ons.population.age_30_39_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_30_39_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/east_age_30_39", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 890000.0 + }, + { + "contract_target_id": "ons.population.age_40_49_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_40_49_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/east_age_40_49", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 851000.0 + }, + { + "contract_target_id": "ons.population.age_50_59_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_50_59_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/east_age_50_59", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 867000.0 + }, + { + "contract_target_id": "ons.population.age_60_69_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_60_69_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/east_age_60_69", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 746000.0 + }, + { + "contract_target_id": "ons.population.age_70_79_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_70_79_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/east_age_70_79", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 643000.0 + }, + { + "contract_target_id": "ons.population.age_80_89_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_80_89_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/east_age_80_89", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 379000.0 + }, + { + "contract_target_id": "ons.population.age_0_9_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_0_9_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/east_midlands_age_0_9", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 532000.0 + }, + { + "contract_target_id": "ons.population.age_10_19_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_10_19_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/east_midlands_age_10_19", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 585000.0 + }, + { + "contract_target_id": "ons.population.age_20_29_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_20_29_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/east_midlands_age_20_29", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 632000.0 + }, + { + "contract_target_id": "ons.population.age_30_39_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_30_39_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/east_midlands_age_30_39", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 669000.0 + }, + { + "contract_target_id": "ons.population.age_40_49_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_40_49_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/east_midlands_age_40_49", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 621000.0 + }, + { + "contract_target_id": "ons.population.age_50_59_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_50_59_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/east_midlands_age_50_59", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 681000.0 + }, + { + "contract_target_id": "ons.population.age_60_69_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_60_69_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/east_midlands_age_60_69", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 592000.0 + }, + { + "contract_target_id": "ons.population.age_70_79_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_70_79_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/east_midlands_age_70_79", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 500000.0 + }, + { + "contract_target_id": "ons.population.age_80_89_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_80_89_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/east_midlands_age_80_89", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 273000.0 + }, + { + "contract_target_id": "ons.population.age_0_9_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_0_9_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/london_age_0_9", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 1042000.0 + }, + { + "contract_target_id": "ons.population.age_10_19_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_10_19_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/london_age_10_19", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 1038000.0 + }, + { + "contract_target_id": "ons.population.age_20_29_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_20_29_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/london_age_20_29", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 1470000.0 + }, + { + "contract_target_id": "ons.population.age_30_39_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_30_39_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/london_age_30_39", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 1585000.0 + }, + { + "contract_target_id": "ons.population.age_40_49_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_40_49_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/london_age_40_49", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 1314000.0 + }, + { + "contract_target_id": "ons.population.age_50_59_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_50_59_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/london_age_50_59", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 1078000.0 + }, + { + "contract_target_id": "ons.population.age_60_69_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_60_69_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/london_age_60_69", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 778000.0 + }, + { + "contract_target_id": "ons.population.age_70_79_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_70_79_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/london_age_70_79", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 509000.0 + }, + { + "contract_target_id": "ons.population.age_80_89_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_80_89_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/london_age_80_89", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 304000.0 + }, + { + "contract_target_id": "ons.population.age_0_9_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_0_9_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/north_east_age_0_9", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 281000.0 + }, + { + "contract_target_id": "ons.population.age_10_19_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_10_19_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/north_east_age_10_19", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 311000.0 + }, + { + "contract_target_id": "ons.population.age_20_29_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_20_29_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/north_east_age_20_29", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 343000.0 + }, + { + "contract_target_id": "ons.population.age_30_39_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_30_39_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/north_east_age_30_39", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 356000.0 + }, + { + "contract_target_id": "ons.population.age_40_49_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_40_49_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/north_east_age_40_49", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 323000.0 + }, + { + "contract_target_id": "ons.population.age_50_59_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_50_59_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/north_east_age_50_59", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 369000.0 + }, + { + "contract_target_id": "ons.population.age_60_69_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_60_69_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/north_east_age_60_69", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 353000.0 + }, + { + "contract_target_id": "ons.population.age_70_79_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_70_79_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/north_east_age_70_79", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 278000.0 + }, + { + "contract_target_id": "ons.population.age_80_89_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_80_89_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/north_east_age_80_89", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 153000.0 + }, + { + "contract_target_id": "ons.population.age_0_9_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_0_9_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/north_west_age_0_9", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 847000.0 + }, + { + "contract_target_id": "ons.population.age_10_19_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_10_19_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/north_west_age_10_19", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 901000.0 + }, + { + "contract_target_id": "ons.population.age_20_29_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_20_29_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/north_west_age_20_29", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 986000.0 + }, + { + "contract_target_id": "ons.population.age_30_39_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_30_39_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/north_west_age_30_39", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 1056000.0 + }, + { + "contract_target_id": "ons.population.age_40_49_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_40_49_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/north_west_age_40_49", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 938000.0 + }, + { + "contract_target_id": "ons.population.age_50_59_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_50_59_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/north_west_age_50_59", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 1011000.0 + }, + { + "contract_target_id": "ons.population.age_60_69_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_60_69_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/north_west_age_60_69", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 888000.0 + }, + { + "contract_target_id": "ons.population.age_70_79_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_70_79_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/north_west_age_70_79", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 715000.0 + }, + { + "contract_target_id": "ons.population.age_80_89_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_80_89_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/north_west_age_80_89", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 399000.0 + }, + { + "contract_target_id": "ons.population.age_0_9_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_0_9_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/northern_ireland_age_0_9", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 234000.0 + }, + { + "contract_target_id": "ons.population.age_10_19_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_10_19_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/northern_ireland_age_10_19", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 244000.0 + }, + { + "contract_target_id": "ons.population.age_20_29_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_20_29_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/northern_ireland_age_20_29", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 230000.0 + }, + { + "contract_target_id": "ons.population.age_30_39_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_30_39_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/northern_ireland_age_30_39", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 264000.0 + }, + { + "contract_target_id": "ons.population.age_40_49_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_40_49_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/northern_ireland_age_40_49", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 254000.0 + }, + { + "contract_target_id": "ons.population.age_50_59_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_50_59_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/northern_ireland_age_50_59", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 257000.0 + }, + { + "contract_target_id": "ons.population.age_60_69_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_60_69_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/northern_ireland_age_60_69", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 224000.0 + }, + { + "contract_target_id": "ons.population.age_70_79_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_70_79_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/northern_ireland_age_70_79", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 165000.0 + }, + { + "contract_target_id": "ons.population.age_80_89_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_80_89_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/northern_ireland_age_80_89", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 93000.0 + }, + { + "contract_target_id": "ons.population.age_0_9_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_0_9_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/scotland_age_0_9", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 526000.0 + }, + { + "contract_target_id": "ons.population.age_10_19_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_10_19_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/scotland_age_10_19", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 597000.0 + }, + { + "contract_target_id": "ons.population.age_20_29_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_20_29_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/scotland_age_20_29", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 709000.0 + }, + { + "contract_target_id": "ons.population.age_30_39_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_30_39_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/scotland_age_30_39", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 736000.0 + }, + { + "contract_target_id": "ons.population.age_40_49_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_40_49_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/scotland_age_40_49", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 691000.0 + }, + { + "contract_target_id": "ons.population.age_50_59_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_50_59_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/scotland_age_50_59", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 788000.0 + }, + { + "contract_target_id": "ons.population.age_60_69_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_60_69_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/scotland_age_60_69", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 727000.0 + }, + { + "contract_target_id": "ons.population.age_70_79_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_70_79_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/scotland_age_70_79", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 546000.0 + }, + { + "contract_target_id": "ons.population.age_80_89_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_80_89_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/scotland_age_80_89", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 297000.0 + }, + { + "contract_target_id": "ons.population.scotland_children_under_16", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.scotland_children_under_16", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/scotland_children_under_16", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 892000.0 + }, + { + "contract_target_id": "ons.population.scotland_babies_under_1", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.scotland_babies_under_1", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/scotland_babies_under_1", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 46000.0 + }, + { + "contract_target_id": "ons.population.age_0_9_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_0_9_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/south_east_age_0_9", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 1039000.0 + }, + { + "contract_target_id": "ons.population.age_10_19_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_10_19_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/south_east_age_10_19", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 1114000.0 + }, + { + "contract_target_id": "ons.population.age_20_29_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_20_29_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/south_east_age_20_29", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 1093000.0 + }, + { + "contract_target_id": "ons.population.age_30_39_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_30_39_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/south_east_age_30_39", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 1283000.0 + }, + { + "contract_target_id": "ons.population.age_40_49_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_40_49_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/south_east_age_40_49", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 1273000.0 + }, + { + "contract_target_id": "ons.population.age_50_59_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_50_59_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/south_east_age_50_59", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 1287000.0 + }, + { + "contract_target_id": "ons.population.age_60_69_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_60_69_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/south_east_age_60_69", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 1089000.0 + }, + { + "contract_target_id": "ons.population.age_70_79_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_70_79_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/south_east_age_70_79", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 927000.0 + }, + { + "contract_target_id": "ons.population.age_80_89_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_80_89_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/south_east_age_80_89", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 559000.0 + }, + { + "contract_target_id": "ons.population.age_0_9_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_0_9_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/south_west_age_0_9", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 576000.0 + }, + { + "contract_target_id": "ons.population.age_10_19_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_10_19_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/south_west_age_10_19", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 646000.0 + }, + { + "contract_target_id": "ons.population.age_20_29_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_20_29_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/south_west_age_20_29", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 694000.0 + }, + { + "contract_target_id": "ons.population.age_30_39_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_30_39_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/south_west_age_30_39", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 743000.0 + }, + { + "contract_target_id": "ons.population.age_40_49_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_40_49_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/south_west_age_40_49", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 704000.0 + }, + { + "contract_target_id": "ons.population.age_50_59_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_50_59_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/south_west_age_50_59", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 794000.0 + }, + { + "contract_target_id": "ons.population.age_60_69_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_60_69_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/south_west_age_60_69", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 741000.0 + }, + { + "contract_target_id": "ons.population.age_70_79_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_70_79_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/south_west_age_70_79", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 662000.0 + }, + { + "contract_target_id": "ons.population.age_80_89_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_80_89_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/south_west_age_80_89", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 388000.0 + }, + { + "contract_target_id": "ons.population.age_0_9_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_0_9_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/wales_age_0_9", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 325000.0 + }, + { + "contract_target_id": "ons.population.age_10_19_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_10_19_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/wales_age_10_19", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 362000.0 + }, + { + "contract_target_id": "ons.population.age_20_29_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_20_29_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/wales_age_20_29", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 389000.0 + }, + { + "contract_target_id": "ons.population.age_30_39_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_30_39_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/wales_age_30_39", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 408000.0 + }, + { + "contract_target_id": "ons.population.age_40_49_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_40_49_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/wales_age_40_49", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 374000.0 + }, + { + "contract_target_id": "ons.population.age_50_59_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_50_59_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/wales_age_50_59", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 432000.0 + }, + { + "contract_target_id": "ons.population.age_60_69_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_60_69_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/wales_age_60_69", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 407000.0 + }, + { + "contract_target_id": "ons.population.age_70_79_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_70_79_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/wales_age_70_79", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 343000.0 + }, + { + "contract_target_id": "ons.population.age_80_89_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_80_89_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/wales_age_80_89", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 190000.0 + }, + { + "contract_target_id": "ons.population.age_0_9_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_0_9_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/west_midlands_age_0_9", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 700000.0 + }, + { + "contract_target_id": "ons.population.age_10_19_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_10_19_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/west_midlands_age_10_19", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 743000.0 + }, + { + "contract_target_id": "ons.population.age_20_29_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_20_29_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/west_midlands_age_20_29", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 774000.0 + }, + { + "contract_target_id": "ons.population.age_30_39_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_30_39_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/west_midlands_age_30_39", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 834000.0 + }, + { + "contract_target_id": "ons.population.age_40_49_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_40_49_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/west_midlands_age_40_49", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 758000.0 + }, + { + "contract_target_id": "ons.population.age_50_59_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_50_59_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/west_midlands_age_50_59", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 800000.0 + }, + { + "contract_target_id": "ons.population.age_60_69_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_60_69_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/west_midlands_age_60_69", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 685000.0 + }, + { + "contract_target_id": "ons.population.age_70_79_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_70_79_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/west_midlands_age_70_79", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 570000.0 + }, + { + "contract_target_id": "ons.population.age_80_89_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_80_89_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/west_midlands_age_80_89", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 337000.0 + }, + { + "contract_target_id": "ons.population.age_0_9_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_0_9_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/yorkshire_and_the_humber_age_0_9", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 618000.0 + }, + { + "contract_target_id": "ons.population.age_10_19_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_10_19_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/yorkshire_and_the_humber_age_10_19", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 666000.0 + }, + { + "contract_target_id": "ons.population.age_20_29_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_20_29_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/yorkshire_and_the_humber_age_20_29", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 733000.0 + }, + { + "contract_target_id": "ons.population.age_30_39_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_30_39_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/yorkshire_and_the_humber_age_30_39", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 764000.0 + }, + { + "contract_target_id": "ons.population.age_40_49_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_40_49_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/yorkshire_and_the_humber_age_40_49", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 686000.0 + }, + { + "contract_target_id": "ons.population.age_50_59_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_50_59_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/yorkshire_and_the_humber_age_50_59", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 745000.0 + }, + { + "contract_target_id": "ons.population.age_60_69_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_60_69_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/yorkshire_and_the_humber_age_60_69", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 658000.0 + }, + { + "contract_target_id": "ons.population.age_70_79_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_70_79_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/yorkshire_and_the_humber_age_70_79", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 536000.0 + }, + { + "contract_target_id": "ons.population.age_80_89_by_region", + "entity": "household", + "family": "ons", + "geographic_level": "region", + "measure": "ons.population.age_80_89_by_region", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/yorkshire_and_the_humber_age_80_89", + "period": 2025, + "resolved_from_year": 2025, + "source": "ons", + "value": 302000.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_a", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_a", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/NORTH_EAST/A", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 667540.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_b", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_b", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/NORTH_EAST/B", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 206790.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_c", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_c", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/NORTH_EAST/C", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 196180.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_d", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_d", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/NORTH_EAST/D", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 113460.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_e", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_e", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/NORTH_EAST/E", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 61090.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_f", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_f", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/NORTH_EAST/F", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 26600.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_g", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_g", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/NORTH_EAST/G", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 14600.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_h", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_h", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/NORTH_EAST/H", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 1570.0 + }, + { + "contract_target_id": "voa.council_tax_stock.total", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.total", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/NORTH_EAST/total", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 1287830.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_a", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_a", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/NORTH_WEST/A", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 1386260.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_b", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_b", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/NORTH_WEST/B", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 705450.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_c", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_c", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/NORTH_WEST/C", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 616070.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_d", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_d", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/NORTH_WEST/D", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 363970.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_e", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_e", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/NORTH_WEST/E", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 216990.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_f", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_f", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/NORTH_WEST/F", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 104330.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_g", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_g", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/NORTH_WEST/G", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 65750.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_h", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_h", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/NORTH_WEST/H", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 7350.0 + }, + { + "contract_target_id": "voa.council_tax_stock.total", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.total", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/NORTH_WEST/total", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 3466140.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_a", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_a", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/YORKSHIRE/A", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 1070830.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_b", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_b", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/YORKSHIRE/B", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 514190.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_c", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_c", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/YORKSHIRE/C", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 432290.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_d", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_d", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/YORKSHIRE/D", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 249530.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_e", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_e", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/YORKSHIRE/E", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 158600.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_f", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_f", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/YORKSHIRE/F", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 75690.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_g", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_g", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/YORKSHIRE/G", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 42180.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_h", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_h", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/YORKSHIRE/H", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 3770.0 + }, + { + "contract_target_id": "voa.council_tax_stock.total", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.total", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/YORKSHIRE/total", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 2547080.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_a", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_a", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/EAST_MIDLANDS/A", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 804340.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_b", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_b", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/EAST_MIDLANDS/B", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 505610.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_c", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_c", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/EAST_MIDLANDS/C", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 403840.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_d", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_d", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/EAST_MIDLANDS/D", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 247850.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_e", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_e", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/EAST_MIDLANDS/E", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 154970.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_f", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_f", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/EAST_MIDLANDS/F", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 73920.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_g", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_g", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/EAST_MIDLANDS/G", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 39400.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_h", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_h", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/EAST_MIDLANDS/H", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 3480.0 + }, + { + "contract_target_id": "voa.council_tax_stock.total", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.total", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/EAST_MIDLANDS/total", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 2233400.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_a", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_a", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/WEST_MIDLANDS/A", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 786010.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_b", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_b", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/WEST_MIDLANDS/B", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 654140.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_c", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_c", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/WEST_MIDLANDS/C", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 526260.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_d", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_d", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/WEST_MIDLANDS/D", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 302500.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_e", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_e", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/WEST_MIDLANDS/E", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 193700.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_f", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_f", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/WEST_MIDLANDS/F", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 105630.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_g", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_g", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/WEST_MIDLANDS/G", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 62780.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_h", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_h", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/WEST_MIDLANDS/H", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 6170.0 + }, + { + "contract_target_id": "voa.council_tax_stock.total", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.total", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/WEST_MIDLANDS/total", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 2637190.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_a", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_a", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/EAST_OF_ENGLAND/A", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 403180.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_b", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_b", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/EAST_OF_ENGLAND/B", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 598950.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_c", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_c", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/EAST_OF_ENGLAND/C", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 739570.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_d", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_d", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/EAST_OF_ENGLAND/D", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 506540.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_e", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_e", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/EAST_OF_ENGLAND/E", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 313840.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_f", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_f", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/EAST_OF_ENGLAND/F", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 172960.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_g", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_g", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/EAST_OF_ENGLAND/G", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 113720.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_h", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_h", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/EAST_OF_ENGLAND/H", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 14830.0 + }, + { + "contract_target_id": "voa.council_tax_stock.total", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.total", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/EAST_OF_ENGLAND/total", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 2863600.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_a", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_a", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/LONDON/A", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 144550.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_b", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_b", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/LONDON/B", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 499130.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_c", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_c", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/LONDON/C", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 1040280.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_d", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_d", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/LONDON/D", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 975750.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_e", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_e", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/LONDON/E", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 585130.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_f", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_f", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/LONDON/F", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 298920.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_g", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_g", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/LONDON/G", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 225170.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_h", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_h", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/LONDON/H", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 68500.0 + }, + { + "contract_target_id": "voa.council_tax_stock.total", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.total", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/LONDON/total", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 3837430.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_a", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_a", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/SOUTH_EAST/A", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 367610.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_b", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_b", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/SOUTH_EAST/B", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 687430.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_c", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_c", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/SOUTH_EAST/C", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 1075940.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_d", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_d", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/SOUTH_EAST/D", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 843560.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_e", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_e", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/SOUTH_EAST/E", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 551730.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_f", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_f", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/SOUTH_EAST/F", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 337260.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_g", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_g", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/SOUTH_EAST/G", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 265610.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_h", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_h", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/SOUTH_EAST/H", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 40390.0 + }, + { + "contract_target_id": "voa.council_tax_stock.total", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.total", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/SOUTH_EAST/total", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 4169520.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_a", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_a", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/SOUTH_WEST/A", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 473020.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_b", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_b", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/SOUTH_WEST/B", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 644890.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_c", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_c", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/SOUTH_WEST/C", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 624030.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_d", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_d", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/SOUTH_WEST/D", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 432070.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_e", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_e", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/SOUTH_WEST/E", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 292090.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_f", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_f", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/SOUTH_WEST/F", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 147920.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_g", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_g", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/SOUTH_WEST/G", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 81960.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_h", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_h", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/SOUTH_WEST/H", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 8430.0 + }, + { + "contract_target_id": "voa.council_tax_stock.total", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.total", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/SOUTH_WEST/total", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 2704390.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_a", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_a", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/WALES/A", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 215380.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_b", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_b", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/WALES/B", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 307070.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_c", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_c", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/WALES/C", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 323220.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_d", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_d", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/WALES/D", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 241220.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_e", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_e", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/WALES/E", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 200840.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_f", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_f", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/WALES/F", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 122650.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_g", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_g", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/WALES/G", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 55190.0 + }, + { + "contract_target_id": "voa.council_tax_stock.band_h", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.band_h", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/WALES/H", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 13190.0 + }, + { + "contract_target_id": "voa.council_tax_stock.total", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "voa.council_tax_stock.total", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/WALES/total", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 1484410.0 + }, + { + "contract_target_id": "scotgov.council_tax_stock.band_a", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "scotgov.council_tax_stock.band_a", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/SCOTLAND/A", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 498707.0 + }, + { + "contract_target_id": "scotgov.council_tax_stock.band_b", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "scotgov.council_tax_stock.band_b", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/SCOTLAND/B", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 583705.0 + }, + { + "contract_target_id": "scotgov.council_tax_stock.band_c", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "scotgov.council_tax_stock.band_c", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/SCOTLAND/C", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 426388.0 + }, + { + "contract_target_id": "scotgov.council_tax_stock.band_d", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "scotgov.council_tax_stock.band_d", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/SCOTLAND/D", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 369621.0 + }, + { + "contract_target_id": "scotgov.council_tax_stock.band_e", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "scotgov.council_tax_stock.band_e", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/SCOTLAND/E", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 366881.0 + }, + { + "contract_target_id": "scotgov.council_tax_stock.band_f", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "scotgov.council_tax_stock.band_f", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/SCOTLAND/F", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 221282.0 + }, + { + "contract_target_id": "scotgov.council_tax_stock.band_g", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "scotgov.council_tax_stock.band_g", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/SCOTLAND/G", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 142084.0 + }, + { + "contract_target_id": "scotgov.council_tax_stock.band_h", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "scotgov.council_tax_stock.band_h", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/SCOTLAND/H", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 14481.0 + }, + { + "contract_target_id": "scotgov.council_tax_stock.total", + "entity": "household", + "family": "voa", + "geographic_level": "region", + "measure": "scotgov.council_tax_stock.total", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "voa/council_tax/SCOTLAND/total", + "period": 2025, + "resolved_from_year": 2025, + "source": "voa", + "value": 2623149.0 + }, + { + "contract_target_id": "ons.population.scotland_households_3plus_children", + "entity": "household", + "family": "scotland_census", + "geographic_level": "country", + "measure": "ons.population.scotland_households_3plus_children", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "ons/scotland_households_3plus_children", + "period": 2025, + "resolved_from_year": 2025, + "source": "scotland_census", + "value": 82000.0 + }, + { + "entity": "household", + "family": "ons", + "geographic_level": "country", + "measure": "ons/tenure_england_owned_outright", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "ons/tenure_england_owned_outright", + "period": 2025, + "resolved_from_year": 2024, + "source": "ons", + "value": 8374612.0 + }, + { + "entity": "household", + "family": "ons", + "geographic_level": "country", + "measure": "ons/tenure_england_owned_with_mortgage", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "ons/tenure_england_owned_with_mortgage", + "period": 2025, + "resolved_from_year": 2024, + "source": "ons", + "value": 7667051.0 + }, + { + "entity": "household", + "family": "ons", + "geographic_level": "country", + "measure": "ons/tenure_england_rented_privately", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "ons/tenure_england_rented_privately", + "period": 2025, + "resolved_from_year": 2024, + "source": "ons", + "value": 5299840.0 + }, + { + "entity": "household", + "family": "ons", + "geographic_level": "country", + "measure": "ons/tenure_england_social_rent", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "ons/tenure_england_social_rent", + "period": 2025, + "resolved_from_year": 2024, + "source": "ons", + "value": 4274613.0 + }, + { + "entity": "household", + "family": "ons", + "geographic_level": "country", + "measure": "ons/tenure_england_total", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2024" + }, + "name": "ons/tenure_england_total", + "period": 2025, + "resolved_from_year": 2024, + "source": "ons", + "value": 25616116.0 + }, + { + "contract_target_id": "scotgov.scottish_child_payment_spending", + "entity": "household", + "family": "scottish_government", + "geographic_level": "country", + "measure": "scotgov.scottish_child_payment_spending", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "sss/scottish_child_payment", + "period": 2025, + "resolved_from_year": 2025, + "source": "scottish_government", + "value": 471000000.0 + }, + { + "contract_target_id": "slc.repayments.england_total_higher_education", + "entity": "household", + "family": "slc", + "geographic_level": "country", + "measure": "slc.repayments.england_total_higher_education", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "slc/student_loan_repayment/england", + "period": 2025, + "resolved_from_year": 2025, + "source": "slc", + "value": 5018231834.95 + }, + { + "contract_target_id": "slc.repayments.england_plan_1", + "entity": "household", + "family": "slc", + "geographic_level": "country", + "measure": "slc.repayments.england_plan_1", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "slc/student_loan_repayment/england/plan_1", + "period": 2025, + "resolved_from_year": 2025, + "source": "slc", + "value": 1852699178.55 + }, + { + "contract_target_id": "slc.repayments.england_plan_2", + "entity": "household", + "family": "slc", + "geographic_level": "country", + "measure": "slc.repayments.england_plan_2", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "slc/student_loan_repayment/england/plan_2", + "period": 2025, + "resolved_from_year": 2025, + "source": "slc", + "value": 2778253361.64 + }, + { + "contract_target_id": "slc.repayments.england_postgraduate", + "entity": "household", + "family": "slc", + "geographic_level": "country", + "measure": "slc.repayments.england_postgraduate", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "slc/student_loan_repayment/england/postgraduate", + "period": 2025, + "resolved_from_year": 2025, + "source": "slc", + "value": 346409713.95 + }, + { + "contract_target_id": "slc.repayments.england_plan_5", + "entity": "household", + "family": "slc", + "geographic_level": "country", + "measure": "slc.repayments.england_plan_5", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "slc/student_loan_repayment/england/plan_5", + "period": 2025, + "resolved_from_year": 2025, + "source": "slc", + "value": 40869580.81 + }, + { + "contract_target_id": "slc.repayments.devolved_total", + "entity": "household", + "family": "slc", + "geographic_level": "country", + "measure": "slc.repayments.devolved_total", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "slc/student_loan_repayment/scotland", + "period": 2025, + "resolved_from_year": 2025, + "source": "slc", + "value": 203300000.0 + }, + { + "contract_target_id": "slc.repayments.devolved_total", + "entity": "household", + "family": "slc", + "geographic_level": "country", + "measure": "slc.repayments.devolved_total", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "slc/student_loan_repayment/wales", + "period": 2025, + "resolved_from_year": 2025, + "source": "slc", + "value": 229100000.0 + }, + { + "contract_target_id": "slc.repayments.devolved_total", + "entity": "household", + "family": "slc", + "geographic_level": "country", + "measure": "slc.repayments.devolved_total", + "metadata": { + "fixture": "incumbent_2025", + "resolved_from_year": "2025" + }, + "name": "slc/student_loan_repayment/northern_ireland", + "period": 2025, + "resolved_from_year": 2025, + "source": "slc", + "value": 181700000.0 + } + ], + "schema_version": 1, + "surface": { + "by_source": { + "dwp": 138, + "ehs": 2, + "hmrc": 21, + "hmrc_spi": 156, + "nts": 3, + "obr": 34, + "ons": 179, + "scotland_census": 1, + "scottish_government": 1, + "slc": 18, + "voa": 99 + }, + "resolved_at_2025": 637, + "resolved_at_2026": 652, + "union_rows": 652 + } +} diff --git a/packages/microcosm-build/src/microcosm/build/uk/target_reference_membership.json b/packages/microcosm-build/src/microcosm/build/uk/target_reference_membership.json new file mode 100644 index 000000000..6ef0d46ff --- /dev/null +++ b/packages/microcosm-build/src/microcosm/build/uk/target_reference_membership.json @@ -0,0 +1,7649 @@ +{ + "source_fact_feed": ".codex-work/consumer_facts_uk.jsonl", + "target_period": 2025, + "candidate_count": 417, + "contract_target_count": 189, + "active_reference_count": 388, + "status_counts": { + "active": 388, + "multi_fact": 1, + "no_fact_at_or_before_period": 27, + "signed_excluded": 1 + }, + "geography_pins": { + "obr.income_tax": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "obr.ni": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "obr.ni_employee": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "obr.ni_employer": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "obr.ni_self_employed": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "obr.vat": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "obr.fuel_duties": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "obr.capital_gains_tax": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "obr.sdlt": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "obr.attendance_allowance": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "obr.carers_allowance": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "obr.child_benefit": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "obr.council_tax": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "obr.council_tax_england": { + "geography_level": "country", + "geography_id": "E92000001" + }, + "obr.council_tax_scotland": { + "geography_level": "country", + "geography_id": "S92000003" + }, + "obr.council_tax_wales": { + "geography_level": "country", + "geography_id": "W92000004" + }, + "obr.domestic_rates": { + "geography_level": "country", + "geography_id": "N92000002" + }, + "obr.esa": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "obr.housing_benefit": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "obr.jobseekers_allowance": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "obr.pension_credit": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "obr.pip": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "obr.state_pension": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "obr.statutory_maternity_pay": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "obr.tv_licence_fee": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "obr.universal_credit_in_cap": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "obr.universal_credit_outside_cap": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "obr.winter_fuel_allowance": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "isc.private_school_students": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "hmrc.salary_sacrifice.it_relief_basic_rate": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "hmrc.salary_sacrifice.it_relief_higher_rate": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "hmrc.salary_sacrifice.it_relief_additional_rate": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "hmrc.salary_sacrifice.nics_relief_employee": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "hmrc.salary_sacrifice.nics_relief_employer": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "hmrc.salary_sacrifice.users_total": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "hmrc.salary_sacrifice.users_below_cap": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "hmrc.salary_sacrifice.users_above_cap": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "hmrc.spi.employment_income.amount_by_total_income_band": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "hmrc.spi.employment_income.count_by_total_income_band": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "hmrc.spi.self_employment_income.amount_by_total_income_band": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "hmrc.spi.self_employment_income.count_by_total_income_band": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "hmrc.spi.dividend_income.amount_by_total_income_band": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "hmrc.spi.dividend_income.count_by_total_income_band": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "hmrc.spi.property_income.amount_by_total_income_band": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "hmrc.spi.property_income.count_by_total_income_band": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "hmrc.spi.private_pension_income.amount_by_total_income_band": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "hmrc.spi.private_pension_income.count_by_total_income_band": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "hmrc.spi.state_pension.amount_by_total_income_band": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "hmrc.spi.state_pension.count_by_total_income_band": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "hmrc.cgt.taxpayers_total": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "hmrc.cgt.gains_total": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "dwp.benefit_cap.capped_households": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.pip.daily_living_standard_claimants": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.pip.daily_living_enhanced_claimants": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.esa_claimants": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.esa_contrib_claimants": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.esa_income_claimants": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.jsa_claimants": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.uc.households_children_1": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.uc.households_children_2": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.uc.households_children_3": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.uc.households_children_4": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.uc.households_children_5_or_more": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.uc.households_single_no_children": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.uc.households_single_with_children": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.uc.households_couple_no_children": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.uc.households_couple_with_children": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.uc.payment_distribution_single": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.uc.payment_distribution_lone_parent": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.uc.payment_distribution_couple_no_children": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.uc.payment_distribution_couple_with_children": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.uc.scotland_households_child_under_1": { + "geography_level": "country", + "geography_id": "S92000003" + }, + "dwp.uc.two_child_limit.households_affected": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.uc.two_child_limit.children_affected": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.uc.two_child_limit.children_in_affected_households": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.uc.two_child_limit.households_3_children": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.uc.two_child_limit.children_in_3_children_households": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.uc.two_child_limit.households_4_children": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.uc.two_child_limit.children_in_4_children_households": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.uc.two_child_limit.households_5_children": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.uc.two_child_limit.children_in_5_children_households": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.uc.two_child_limit.households_6_plus_children": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.uc.two_child_limit.children_in_6_plus_children_households": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.uc.two_child_limit.households_claimant_pip": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.uc.two_child_limit.children_claimant_pip": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.uc.two_child_limit.households_disabled_child_element": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.uc.two_child_limit.children_disabled_child_element": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "ons.population.uk_total": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.age_0_9_by_region": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.age_10_19_by_region": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.age_20_29_by_region": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.age_30_39_by_region": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.age_40_49_by_region": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.age_50_59_by_region": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.age_60_69_by_region": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.age_70_79_by_region": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.age_80_89_by_region": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.female_0_4": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.female_10_14": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.female_15_19": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.female_20_24": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.female_25_29": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.female_30_34": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.female_35_39": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.female_40_44": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.female_45_49": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.female_50_54": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.female_55_59": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.female_5_9": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.female_60_64": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.female_65_69": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.female_70_74": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.female_75_79": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.female_80_84": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.female_85_89": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.female_90_plus": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.male_0_4": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.male_10_14": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.male_15_19": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.male_20_24": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.male_25_29": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.male_30_34": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.male_35_39": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.male_40_44": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.male_45_49": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.male_50_54": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.male_55_59": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.male_5_9": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.male_60_64": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.male_65_69": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.male_70_74": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.male_75_79": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.male_80_84": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.male_85_89": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.male_90_plus": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.population.scotland_children_under_16": { + "geography_level": "country", + "geography_id": "S92000003" + }, + "ons.population.scotland_babies_under_1": { + "geography_level": "country", + "geography_id": "S92000003" + }, + "ons.population.scotland_households_3plus_children": { + "geography_level": "country", + "geography_id": "S92000003" + }, + "ons.household_composition.lone_households_under_65": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.household_composition.lone_households_over_65": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.household_composition.unrelated_adult_households": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.household_composition.couple_no_children_households": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.household_composition.couple_under_3_children_households": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.household_composition.couple_3_plus_children_households": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.household_composition.couple_non_dependent_children_only_households": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.household_composition.lone_parent_dependent_children_households": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.household_composition.lone_parent_non_dependent_children_households": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.household_composition.multi_family_households": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "voa.council_tax_stock.band_a": { + "geography_level": "country", + "geography_id": "E92000001" + }, + "scotgov.council_tax_stock.band_a": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "voa.council_tax_stock.band_b": { + "geography_level": "country", + "geography_id": "E92000001" + }, + "scotgov.council_tax_stock.band_b": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "voa.council_tax_stock.band_c": { + "geography_level": "country", + "geography_id": "E92000001" + }, + "scotgov.council_tax_stock.band_c": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "voa.council_tax_stock.band_d": { + "geography_level": "country", + "geography_id": "E92000001" + }, + "scotgov.council_tax_stock.band_d": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "voa.council_tax_stock.band_e": { + "geography_level": "country", + "geography_id": "E92000001" + }, + "scotgov.council_tax_stock.band_e": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "voa.council_tax_stock.band_f": { + "geography_level": "country", + "geography_id": "E92000001" + }, + "scotgov.council_tax_stock.band_f": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "voa.council_tax_stock.band_g": { + "geography_level": "country", + "geography_id": "E92000001" + }, + "scotgov.council_tax_stock.band_g": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "voa.council_tax_stock.band_h": { + "geography_level": "country", + "geography_id": "E92000001" + }, + "scotgov.council_tax_stock.band_h": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "voa.council_tax_stock.total": { + "geography_level": "country", + "geography_id": "E92000001" + }, + "scotgov.council_tax_stock.total": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "scotgov.scottish_child_payment_spending": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.savings_interest_income": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.public_sector_employment": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.land.land_value": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.land.household_land_value": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "ons.land.corporate_land_value": { + "geography_level": "country", + "geography_id": "K02000001" + }, + "slc.repayments.devolved_total": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "slc.repayments.england_total_higher_education": { + "geography_level": "country", + "geography_id": "E92000001" + }, + "slc.repayments.england_plan_1": { + "geography_level": "country", + "geography_id": "E92000001" + }, + "slc.repayments.england_plan_2": { + "geography_level": "country", + "geography_id": "E92000001" + }, + "slc.repayments.england_postgraduate": { + "geography_level": "country", + "geography_id": "E92000001" + }, + "slc.repayments.england_plan_5": { + "geography_level": "country", + "geography_id": "E92000001" + }, + "slc.borrowers.plan_2_above_threshold": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "slc.borrowers.plan_2_liable": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "slc.borrowers.plan_5_above_threshold": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "slc.borrowers.plan_5_liable": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "slc.support.maintenance_loan_recipients": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "slc.support.maintenance_loan_spend": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "slc.support.parents_learning_allowance_recipients": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "slc.support.parents_learning_allowance_spend": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "slc.support.adult_dependants_grant_recipients": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "slc.support.adult_dependants_grant_spend": { + "geography_level": "country", + "geography_id": "K03000001" + }, + "dwp.uc.households": { + "geography_level": "country", + "geography_id": "K03000001" + } + }, + "genuine_sum_residue": [ + "obr.esa", + "ons.population.age_0_9_by_region", + "ons.population.age_10_19_by_region", + "ons.population.age_20_29_by_region", + "ons.population.age_30_39_by_region", + "ons.population.age_40_49_by_region", + "ons.population.age_50_59_by_region", + "ons.population.age_60_69_by_region", + "ons.population.age_70_79_by_region", + "ons.population.age_80_89_by_region", + "ons.population.female_0_4", + "ons.population.female_10_14", + "ons.population.female_15_19", + "ons.population.female_20_24", + "ons.population.female_25_29", + "ons.population.female_30_34", + "ons.population.female_35_39", + "ons.population.female_40_44", + "ons.population.female_45_49", + "ons.population.female_50_54", + "ons.population.female_55_59", + "ons.population.female_5_9", + "ons.population.female_60_64", + "ons.population.female_65_69", + "ons.population.female_70_74", + "ons.population.female_75_79", + "ons.population.female_80_84", + "ons.population.female_85_89", + "ons.population.female_90_plus", + "ons.population.male_0_4", + "ons.population.male_10_14", + "ons.population.male_15_19", + "ons.population.male_20_24", + "ons.population.male_25_29", + "ons.population.male_30_34", + "ons.population.male_35_39", + "ons.population.male_40_44", + "ons.population.male_45_49", + "ons.population.male_50_54", + "ons.population.male_55_59", + "ons.population.male_5_9", + "ons.population.male_60_64", + "ons.population.male_65_69", + "ons.population.male_70_74", + "ons.population.male_75_79", + "ons.population.male_80_84", + "ons.population.male_85_89", + "ons.population.male_90_plus", + "ons.population.scotland_babies_under_1", + "ons.population.scotland_children_under_16", + "ons.population.uk_total", + "slc.repayments.england_plan_1", + "slc.repayments.england_plan_2", + "slc.repayments.england_plan_5", + "slc.repayments.england_postgraduate", + "slc.repayments.england_total_higher_education" + ], + "uprating_holds": [ + { + "name": "isc.private_school_students", + "from": "2024-01", + "to": "2025" + }, + { + "name": "hmrc.salary_sacrifice.it_relief_basic_rate", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.salary_sacrifice.it_relief_higher_rate", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.salary_sacrifice.it_relief_additional_rate", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.salary_sacrifice.nics_relief_employee", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc.salary_sacrifice.nics_relief_employer", + "from": "2024", + "to": "2025" + }, + { + "name": "hmrc/employment_income_income_band_100_000_to_150_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/employment_income_income_band_1_000_000_to_inf", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/employment_income_income_band_12_570_to_15_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/employment_income_income_band_15_000_to_20_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/employment_income_income_band_150_000_to_200_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/employment_income_income_band_20_000_to_30_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/employment_income_income_band_200_000_to_300_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/employment_income_income_band_30_000_to_40_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/employment_income_income_band_300_000_to_500_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/employment_income_income_band_40_000_to_50_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/employment_income_income_band_50_000_to_70_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/employment_income_income_band_500_000_to_1_000_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/employment_income_income_band_70_000_to_100_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/employment_income_count_income_band_100_000_to_150_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/employment_income_count_income_band_1_000_000_to_inf", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/employment_income_count_income_band_12_570_to_15_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/employment_income_count_income_band_15_000_to_20_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/employment_income_count_income_band_150_000_to_200_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/employment_income_count_income_band_20_000_to_30_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/employment_income_count_income_band_200_000_to_300_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/employment_income_count_income_band_30_000_to_40_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/employment_income_count_income_band_300_000_to_500_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/employment_income_count_income_band_40_000_to_50_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/employment_income_count_income_band_50_000_to_70_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/employment_income_count_income_band_500_000_to_1_000_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/employment_income_count_income_band_70_000_to_100_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/self_employment_income_income_band_100_000_to_150_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/self_employment_income_income_band_1_000_000_to_inf", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/self_employment_income_income_band_12_570_to_15_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/self_employment_income_income_band_15_000_to_20_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/self_employment_income_income_band_150_000_to_200_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/self_employment_income_income_band_20_000_to_30_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/self_employment_income_income_band_200_000_to_300_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/self_employment_income_income_band_30_000_to_40_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/self_employment_income_income_band_300_000_to_500_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/self_employment_income_income_band_40_000_to_50_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/self_employment_income_income_band_50_000_to_70_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/self_employment_income_income_band_500_000_to_1_000_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/self_employment_income_income_band_70_000_to_100_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/self_employment_income_count_income_band_100_000_to_150_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/self_employment_income_count_income_band_1_000_000_to_inf", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/self_employment_income_count_income_band_12_570_to_15_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/self_employment_income_count_income_band_15_000_to_20_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/self_employment_income_count_income_band_150_000_to_200_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/self_employment_income_count_income_band_20_000_to_30_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/self_employment_income_count_income_band_200_000_to_300_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/self_employment_income_count_income_band_30_000_to_40_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/self_employment_income_count_income_band_300_000_to_500_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/self_employment_income_count_income_band_40_000_to_50_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/self_employment_income_count_income_band_50_000_to_70_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/self_employment_income_count_income_band_500_000_to_1_000_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/self_employment_income_count_income_band_70_000_to_100_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/dividend_income_income_band_100_000_to_150_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/dividend_income_income_band_1_000_000_to_inf", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/dividend_income_income_band_12_570_to_15_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/dividend_income_income_band_15_000_to_20_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/dividend_income_income_band_150_000_to_200_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/dividend_income_income_band_20_000_to_30_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/dividend_income_income_band_200_000_to_300_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/dividend_income_income_band_30_000_to_40_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/dividend_income_income_band_300_000_to_500_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/dividend_income_income_band_40_000_to_50_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/dividend_income_income_band_50_000_to_70_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/dividend_income_income_band_500_000_to_1_000_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/dividend_income_income_band_70_000_to_100_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/dividend_income_count_income_band_100_000_to_150_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/dividend_income_count_income_band_1_000_000_to_inf", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/dividend_income_count_income_band_12_570_to_15_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/dividend_income_count_income_band_15_000_to_20_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/dividend_income_count_income_band_150_000_to_200_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/dividend_income_count_income_band_20_000_to_30_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/dividend_income_count_income_band_200_000_to_300_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/dividend_income_count_income_band_30_000_to_40_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/dividend_income_count_income_band_300_000_to_500_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/dividend_income_count_income_band_40_000_to_50_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/dividend_income_count_income_band_50_000_to_70_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/dividend_income_count_income_band_500_000_to_1_000_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/dividend_income_count_income_band_70_000_to_100_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/property_income_count_income_band_100_000_to_150_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/property_income_count_income_band_1_000_000_to_inf", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/property_income_count_income_band_12_570_to_15_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/property_income_count_income_band_15_000_to_20_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/property_income_count_income_band_150_000_to_200_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/property_income_count_income_band_20_000_to_30_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/property_income_count_income_band_200_000_to_300_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/property_income_count_income_band_30_000_to_40_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/property_income_count_income_band_300_000_to_500_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/property_income_count_income_band_40_000_to_50_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/property_income_count_income_band_50_000_to_70_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/property_income_count_income_band_500_000_to_1_000_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/property_income_count_income_band_70_000_to_100_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/private_pension_income_income_band_100_000_to_150_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/private_pension_income_income_band_1_000_000_to_inf", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/private_pension_income_income_band_12_570_to_15_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/private_pension_income_income_band_15_000_to_20_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/private_pension_income_income_band_150_000_to_200_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/private_pension_income_income_band_20_000_to_30_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/private_pension_income_income_band_200_000_to_300_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/private_pension_income_income_band_30_000_to_40_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/private_pension_income_income_band_300_000_to_500_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/private_pension_income_income_band_40_000_to_50_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/private_pension_income_income_band_50_000_to_70_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/private_pension_income_income_band_500_000_to_1_000_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/private_pension_income_income_band_70_000_to_100_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/private_pension_income_count_income_band_100_000_to_150_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/private_pension_income_count_income_band_1_000_000_to_inf", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/private_pension_income_count_income_band_12_570_to_15_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/private_pension_income_count_income_band_15_000_to_20_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/private_pension_income_count_income_band_150_000_to_200_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/private_pension_income_count_income_band_20_000_to_30_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/private_pension_income_count_income_band_200_000_to_300_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/private_pension_income_count_income_band_30_000_to_40_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/private_pension_income_count_income_band_300_000_to_500_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/private_pension_income_count_income_band_40_000_to_50_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/private_pension_income_count_income_band_50_000_to_70_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/private_pension_income_count_income_band_500_000_to_1_000_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/private_pension_income_count_income_band_70_000_to_100_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/state_pension_income_band_100_000_to_150_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/state_pension_income_band_1_000_000_to_inf", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/state_pension_income_band_12_570_to_15_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/state_pension_income_band_15_000_to_20_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/state_pension_income_band_150_000_to_200_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/state_pension_income_band_20_000_to_30_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/state_pension_income_band_200_000_to_300_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/state_pension_income_band_30_000_to_40_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/state_pension_income_band_300_000_to_500_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/state_pension_income_band_40_000_to_50_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/state_pension_income_band_50_000_to_70_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/state_pension_income_band_500_000_to_1_000_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/state_pension_income_band_70_000_to_100_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/state_pension_count_income_band_100_000_to_150_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/state_pension_count_income_band_1_000_000_to_inf", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/state_pension_count_income_band_12_570_to_15_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/state_pension_count_income_band_15_000_to_20_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/state_pension_count_income_band_150_000_to_200_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/state_pension_count_income_band_20_000_to_30_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/state_pension_count_income_band_200_000_to_300_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/state_pension_count_income_band_30_000_to_40_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/state_pension_count_income_band_300_000_to_500_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/state_pension_count_income_band_40_000_to_50_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/state_pension_count_income_band_50_000_to_70_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/state_pension_count_income_band_500_000_to_1_000_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc/state_pension_count_income_band_70_000_to_100_000", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc.cgt.taxpayers_total", + "from": "2023", + "to": "2025" + }, + { + "name": "hmrc.cgt.gains_total", + "from": "2023", + "to": "2025" + }, + { + "name": "dwp.benefit_cap.capped_households", + "from": "2025-11", + "to": "2025" + }, + { + "name": "dwp.esa_claimants", + "from": "2025-08", + "to": "2025" + }, + { + "name": "dwp.esa_contrib_claimants", + "from": "2025-08", + "to": "2025" + }, + { + "name": "dwp.esa_income_claimants", + "from": "2025-08", + "to": "2025" + }, + { + "name": "dwp.jsa_claimants", + "from": "2025-08", + "to": "2025" + }, + { + "name": "dwp.uc.households_children_1", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp.uc.households_children_2", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp.uc.households_children_3", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp.uc.households_children_4", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp.uc.households_children_5_or_more", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp.uc.households_single_no_children", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp.uc.households_single_with_children", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp.uc.households_couple_no_children", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp.uc.households_couple_with_children", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_0_to_1_200", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_1_200_to_2_400", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_12_000_to_13_200", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_13_200_to_14_400", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_14_400_to_15_600", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_15_600_to_16_800", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_16_800_to_18_000", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_18_000_to_19_200", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_19_200_to_20_400", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_20_400_to_21_600", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_21_600_to_22_800", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_22_800_to_24_000", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_2_400_to_3_600", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_24_000_to_25_200", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_25_200_to_26_400", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_26_400_to_27_600", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_27_600_to_28_800", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_28_800_to_30_000", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_3_600_to_4_800", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_4_800_to_6_000", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_6_000_to_7_200", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_7_200_to_8_400", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_8_400_to_9_600", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_9_600_to_10_800", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_10_800_to_12_000", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_0_to_1_200", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_1_200_to_2_400", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_12_000_to_13_200", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_13_200_to_14_400", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_14_400_to_15_600", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_15_600_to_16_800", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_16_800_to_18_000", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_18_000_to_19_200", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_19_200_to_20_400", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_20_400_to_21_600", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_21_600_to_22_800", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_22_800_to_24_000", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_2_400_to_3_600", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_24_000_to_25_200", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_25_200_to_26_400", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_26_400_to_27_600", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_27_600_to_28_800", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_28_800_to_30_000", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_3_600_to_4_800", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_4_800_to_6_000", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_6_000_to_7_200", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_7_200_to_8_400", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_8_400_to_9_600", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_9_600_to_10_800", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_10_800_to_12_000", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_0_to_1_200", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_1_200_to_2_400", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_12_000_to_13_200", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_13_200_to_14_400", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_14_400_to_15_600", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_15_600_to_16_800", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_16_800_to_18_000", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_18_000_to_19_200", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_19_200_to_20_400", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_20_400_to_21_600", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_21_600_to_22_800", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_22_800_to_24_000", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_2_400_to_3_600", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_24_000_to_25_200", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_25_200_to_26_400", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_26_400_to_27_600", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_27_600_to_28_800", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_28_800_to_30_000", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_3_600_to_4_800", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_4_800_to_6_000", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_6_000_to_7_200", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_7_200_to_8_400", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_8_400_to_9_600", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_9_600_to_10_800", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_10_800_to_12_000", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_0_to_1_200", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_1_200_to_2_400", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_12_000_to_13_200", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_13_200_to_14_400", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_14_400_to_15_600", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_15_600_to_16_800", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_16_800_to_18_000", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_18_000_to_19_200", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_19_200_to_20_400", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_20_400_to_21_600", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_21_600_to_22_800", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_22_800_to_24_000", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_2_400_to_3_600", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_24_000_to_25_200", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_25_200_to_26_400", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_26_400_to_27_600", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_27_600_to_28_800", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_28_800_to_30_000", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_3_600_to_4_800", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_4_800_to_6_000", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_6_000_to_7_200", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_7_200_to_8_400", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_8_400_to_9_600", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_9_600_to_10_800", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_10_800_to_12_000", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp.uc.scotland_households_child_under_1", + "from": "2025-05", + "to": "2025" + }, + { + "name": "dwp.uc.two_child_limit.households_affected", + "from": "2025-04", + "to": "2025" + }, + { + "name": "dwp.uc.two_child_limit.children_affected", + "from": "2025-04", + "to": "2025" + }, + { + "name": "dwp.uc.two_child_limit.children_in_affected_households", + "from": "2025-04", + "to": "2025" + }, + { + "name": "dwp.uc.two_child_limit.households_3_children", + "from": "2025-04", + "to": "2025" + }, + { + "name": "dwp.uc.two_child_limit.children_in_3_children_households", + "from": "2025-04", + "to": "2025" + }, + { + "name": "dwp.uc.two_child_limit.households_4_children", + "from": "2025-04", + "to": "2025" + }, + { + "name": "dwp.uc.two_child_limit.children_in_4_children_households", + "from": "2025-04", + "to": "2025" + }, + { + "name": "dwp.uc.two_child_limit.households_5_children", + "from": "2025-04", + "to": "2025" + }, + { + "name": "dwp.uc.two_child_limit.children_in_5_children_households", + "from": "2025-04", + "to": "2025" + }, + { + "name": "dwp.uc.two_child_limit.households_6_plus_children", + "from": "2025-04", + "to": "2025" + }, + { + "name": "dwp.uc.two_child_limit.children_in_6_plus_children_households", + "from": "2025-04", + "to": "2025" + }, + { + "name": "dwp.uc.two_child_limit.households_claimant_pip", + "from": "2025-04", + "to": "2025" + }, + { + "name": "dwp.uc.two_child_limit.children_claimant_pip", + "from": "2025-04", + "to": "2025" + }, + { + "name": "dwp.uc.two_child_limit.households_disabled_child_element", + "from": "2025-04", + "to": "2025" + }, + { + "name": "dwp.uc.two_child_limit.children_disabled_child_element", + "from": "2025-04", + "to": "2025" + }, + { + "name": "ons.population.uk_total", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.age_0_9_by_region", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.age_10_19_by_region", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.age_20_29_by_region", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.age_30_39_by_region", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.age_40_49_by_region", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.age_50_59_by_region", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.age_60_69_by_region", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.age_70_79_by_region", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.age_80_89_by_region", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.female_0_4", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.female_10_14", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.female_15_19", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.female_20_24", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.female_25_29", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.female_30_34", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.female_35_39", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.female_40_44", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.female_45_49", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.female_50_54", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.female_55_59", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.female_5_9", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.female_60_64", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.female_65_69", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.female_70_74", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.female_75_79", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.female_80_84", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.female_85_89", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.female_90_plus", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.male_0_4", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.male_10_14", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.male_15_19", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.male_20_24", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.male_25_29", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.male_30_34", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.male_35_39", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.male_40_44", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.male_45_49", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.male_50_54", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.male_55_59", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.male_5_9", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.male_60_64", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.male_65_69", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.male_70_74", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.male_75_79", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.male_80_84", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.male_85_89", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.male_90_plus", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.scotland_children_under_16", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.population.scotland_babies_under_1", + "from": "2024", + "to": "2025" + }, + { + "name": "voa.council_tax_stock.band_a", + "from": "2025-03", + "to": "2025" + }, + { + "name": "voa.council_tax_stock.band_b", + "from": "2025-03", + "to": "2025" + }, + { + "name": "voa.council_tax_stock.band_c", + "from": "2025-03", + "to": "2025" + }, + { + "name": "voa.council_tax_stock.band_d", + "from": "2025-03", + "to": "2025" + }, + { + "name": "voa.council_tax_stock.band_e", + "from": "2025-03", + "to": "2025" + }, + { + "name": "voa.council_tax_stock.band_f", + "from": "2025-03", + "to": "2025" + }, + { + "name": "voa.council_tax_stock.band_g", + "from": "2025-03", + "to": "2025" + }, + { + "name": "voa.council_tax_stock.band_h", + "from": "2025-03", + "to": "2025" + }, + { + "name": "voa.council_tax_stock.total", + "from": "2025-03", + "to": "2025" + }, + { + "name": "ons.public_sector_employment", + "from": "2024-12", + "to": "2025" + }, + { + "name": "ons.land.land_value", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.land.household_land_value", + "from": "2024", + "to": "2025" + }, + { + "name": "ons.land.corporate_land_value", + "from": "2024", + "to": "2025" + }, + { + "name": "slc.repayments.england_total_higher_education", + "from": "2024", + "to": "2025" + }, + { + "name": "slc.repayments.england_plan_1", + "from": "2024", + "to": "2025" + }, + { + "name": "slc.repayments.england_plan_2", + "from": "2024", + "to": "2025" + }, + { + "name": "slc.repayments.england_postgraduate", + "from": "2024", + "to": "2025" + }, + { + "name": "slc.repayments.england_plan_5", + "from": "2024", + "to": "2025" + }, + { + "name": "dwp.uc.households", + "from": "2025-12", + "to": "2025" + } + ], + "targets": { + "obr.income_tax": { + "status": "active", + "candidates": [ + { + "name": "obr.income_tax", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 331437583074.4429, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_d928e7da0fbfe088ca1a30d7" + } + ] + }, + "obr.ni": { + "status": "active", + "candidates": [ + { + "name": "obr.ni", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 200081395082.7125, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_eccab3ee763d68bb782276a7" + } + ] + }, + "obr.ni_employee": { + "status": "active", + "candidates": [ + { + "name": "obr.ni_employee", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 49544363784.26465, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_7e3e3e637a9134760a0a530a" + } + ] + }, + "obr.ni_employer": { + "status": "active", + "candidates": [ + { + "name": "obr.ni_employer", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 145324007512.71753, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_c8719021c501d9757e0e0814" + } + ] + }, + "obr.ni_self_employed": { + "status": "active", + "candidates": [ + { + "name": "obr.ni_self_employed", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 2902816090.4147716, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_b94b7d74d7df7ff5f9309f3b" + } + ] + }, + "obr.vat": { + "status": "active", + "candidates": [ + { + "name": "obr.vat", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 180168938685.41794, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_3c534c3e6313150f8081b777" + } + ] + }, + "obr.fuel_duties": { + "status": "active", + "candidates": [ + { + "name": "obr.fuel_duties", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 24241874775.213375, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_9273c0c9f7045493ed2e984a" + } + ] + }, + "obr.capital_gains_tax": { + "status": "active", + "candidates": [ + { + "name": "obr.capital_gains_tax", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 21801546197.09165, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_93699bb9caa7ec0d6833f420" + } + ] + }, + "obr.sdlt": { + "status": "active", + "candidates": [ + { + "name": "obr.sdlt", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 15406516698.785578, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_1b6d55fc4ccd78bd0ae457e9" + } + ] + }, + "obr.attendance_allowance": { + "status": "active", + "candidates": [ + { + "name": "obr.attendance_allowance", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 8492497075.074617, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_4fe1b1966eeb22c0c5ca464c" + } + ] + }, + "obr.carers_allowance": { + "status": "active", + "candidates": [ + { + "name": "obr.carers_allowance", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 4569403813.760573, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_ca7be49d51152bcc4c6662f2" + } + ] + }, + "obr.child_benefit": { + "status": "active", + "candidates": [ + { + "name": "obr.child_benefit", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 13389272724.45089, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_d3ab2c54ce0c4c6a46a7a36b" + } + ] + }, + "obr.council_tax": { + "status": "active", + "candidates": [ + { + "name": "obr.council_tax", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 50925163826.30539, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_16bcd3e2a16bfa44c0b1ea74" + } + ] + }, + "obr.council_tax_england": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "obr.council_tax_england", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "obr.council_tax_scotland": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "obr.council_tax_scotland", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "obr.council_tax_wales": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "obr.council_tax_wales", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "obr.domestic_rates": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "obr.domestic_rates", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "obr.esa": { + "status": "active", + "candidates": [ + { + "name": "obr.esa", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 7206287181.538654, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_632a67850494984d9b35e639" + } + ] + }, + "obr.housing_benefit": { + "status": "active", + "candidates": [ + { + "name": "obr.housing_benefit", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 12103254163.788864, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_984cc88cfc4242bd80c679f3" + } + ] + }, + "obr.jobseekers_allowance": { + "status": "active", + "candidates": [ + { + "name": "obr.jobseekers_allowance", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 280558748.04472804, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_d505f8a08a29411dcf69287b" + } + ] + }, + "obr.pension_credit": { + "status": "active", + "candidates": [ + { + "name": "obr.pension_credit", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 6146422389.476461, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_95ea9bc008361c26f90591d4" + } + ] + }, + "obr.pip": { + "status": "active", + "candidates": [ + { + "name": "obr.pip", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 36910059270.5278, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_548ebadeb7d774b32fa6f4ff" + } + ] + }, + "obr.state_pension": { + "status": "active", + "candidates": [ + { + "name": "obr.state_pension", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 146185954351.57382, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_567e55f9f73df2808c1c4be8" + } + ] + }, + "obr.statutory_maternity_pay": { + "status": "active", + "candidates": [ + { + "name": "obr.statutory_maternity_pay", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 3194800881.520547, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_0c45b526e2b233b22d955cc6" + } + ] + }, + "obr.tv_licence_fee": { + "status": "active", + "candidates": [ + { + "name": "obr.tv_licence_fee", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 3872000000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_b0f0afcd44c93532837c9f2a" + } + ] + }, + "obr.universal_credit_in_cap": { + "status": "active", + "candidates": [ + { + "name": "obr.universal_credit_in_cap", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 66410800011.47837, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_e680fe36115d1372d12072e1" + } + ] + }, + "obr.universal_credit_outside_cap": { + "status": "active", + "candidates": [ + { + "name": "obr.universal_credit_outside_cap", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 12875549128.065746, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_4c927d7b33d1eee2455bdbd0" + } + ] + }, + "obr.winter_fuel_allowance": { + "status": "active", + "candidates": [ + { + "name": "obr.winter_fuel_allowance", + "status": "active", + "matched_fact_count_overall": 7, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 1911040880.4619167, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_575778670363b5890c8de847" + } + ] + }, + "isc.private_school_students": { + "status": "active", + "candidates": [ + { + "name": "isc.private_school_students", + "status": "active", + "matched_fact_count_overall": 2, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 556551.0, + "resolved_fact_period": "2024-01", + "resolved_fact_key": "ledger_aggregate_fact_v2_67bd24e7f9158af756625865" + } + ] + }, + "hmrc.salary_sacrifice.it_relief_basic_rate": { + "status": "active", + "candidates": [ + { + "name": "hmrc.salary_sacrifice.it_relief_basic_rate", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 1600000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_7320889e57785e6997224191" + } + ] + }, + "hmrc.salary_sacrifice.it_relief_higher_rate": { + "status": "active", + "candidates": [ + { + "name": "hmrc.salary_sacrifice.it_relief_higher_rate", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 5500000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_7d9ff26814151157071301e9" + } + ] + }, + "hmrc.salary_sacrifice.it_relief_additional_rate": { + "status": "active", + "candidates": [ + { + "name": "hmrc.salary_sacrifice.it_relief_additional_rate", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 1800000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_49a712ba4b22f0b4b2925ef9" + } + ] + }, + "hmrc.salary_sacrifice.nics_relief_employee": { + "status": "active", + "candidates": [ + { + "name": "hmrc.salary_sacrifice.nics_relief_employee", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 1000000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_341767859ef6030c06c7a153" + } + ] + }, + "hmrc.salary_sacrifice.nics_relief_employer": { + "status": "active", + "candidates": [ + { + "name": "hmrc.salary_sacrifice.nics_relief_employer", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 3400000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_026ae1169f5f0f997bb06479" + } + ] + }, + "hmrc.salary_sacrifice.users_total": { + "status": "active", + "candidates": [ + { + "name": "hmrc.salary_sacrifice.users_total", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 7700000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_06d585b8684b5fe0ce25f6ec" + } + ] + }, + "hmrc.salary_sacrifice.users_below_cap": { + "status": "active", + "candidates": [ + { + "name": "hmrc.salary_sacrifice.users_below_cap", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 4300000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_a48e584180a6f33d07112d3c" + } + ] + }, + "hmrc.salary_sacrifice.users_above_cap": { + "status": "active", + "candidates": [ + { + "name": "hmrc.salary_sacrifice.users_above_cap", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 3300000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_0331d77688891a3c3c3307b6" + } + ] + }, + "hmrc.spi.employment_income.amount_by_total_income_band": { + "status": "active", + "candidates": [ + { + "name": "hmrc/employment_income_income_band_100_000_to_150_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 82300000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_b1c634a871c843888ab00545" + }, + { + "name": "hmrc/employment_income_income_band_1_000_000_to_inf", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 35500000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_16019afa59e224b690877826" + }, + { + "name": "hmrc/employment_income_income_band_12_570_to_15_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 16900000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_a82c84f67b40867564d2c847" + }, + { + "name": "hmrc/employment_income_income_band_15_000_to_20_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 48600000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_42eb325b6a29afb3e6d157fa" + }, + { + "name": "hmrc/employment_income_income_band_150_000_to_200_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 39200000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_1f93702eb88f381f0701c4f8" + }, + { + "name": "hmrc/employment_income_income_band_20_000_to_30_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 172000000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_794fd9633d6a2018fee633e7" + }, + { + "name": "hmrc/employment_income_income_band_200_000_to_300_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 36600000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_d85ad655daaa164b1ab33231" + }, + { + "name": "hmrc/employment_income_income_band_30_000_to_40_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 170000000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_3607635c72d16b4059b6a3f6" + }, + { + "name": "hmrc/employment_income_income_band_300_000_to_500_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 29000000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_5c3674b48269ffe3c7b28a1b" + }, + { + "name": "hmrc/employment_income_income_band_40_000_to_50_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 139000000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_525aeb02ab9a831608756200" + }, + { + "name": "hmrc/employment_income_income_band_50_000_to_70_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 174000000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_9f1a70b4e0995af34d7dbbfb" + }, + { + "name": "hmrc/employment_income_income_band_500_000_to_1_000_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 23100000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_1944a2f33309b41b2d5f348d" + }, + { + "name": "hmrc/employment_income_income_band_70_000_to_100_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 118000000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_6178d003a4c1a6198294f174" + } + ] + }, + "hmrc.spi.employment_income.count_by_total_income_band": { + "status": "active", + "candidates": [ + { + "name": "hmrc/employment_income_count_income_band_100_000_to_150_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 791000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_b83fec2e722ef22cbe28ee76" + }, + { + "name": "hmrc/employment_income_count_income_band_1_000_000_to_inf", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 21000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_618b4f84a2b10fdf0d901df6" + }, + { + "name": "hmrc/employment_income_count_income_band_12_570_to_15_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 1360000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_5a2e006ccd94f8754760661c" + }, + { + "name": "hmrc/employment_income_count_income_band_15_000_to_20_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 3100000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_a4ecaa65aa113092a1c8fcf7" + }, + { + "name": "hmrc/employment_income_count_income_band_150_000_to_200_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 264000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_ffcb46afae1c469de75ee9b3" + }, + { + "name": "hmrc/employment_income_count_income_band_20_000_to_30_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 7470000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_1bbafa142b4bfc426ce5bdac" + }, + { + "name": "hmrc/employment_income_count_income_band_200_000_to_300_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 180000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_dd00b1e66c3254ddc0e108a6" + }, + { + "name": "hmrc/employment_income_count_income_band_30_000_to_40_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 5370000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_3bd51396d03aee4164d7c1d6" + }, + { + "name": "hmrc/employment_income_count_income_band_300_000_to_500_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 93000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_d1f4ceb7f4e676d9ff044d80" + }, + { + "name": "hmrc/employment_income_count_income_band_40_000_to_50_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 3500000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_874b13ae1da1064e73055c39" + }, + { + "name": "hmrc/employment_income_count_income_band_50_000_to_70_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 3430000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_572104f32689df4a2dc4c334" + }, + { + "name": "hmrc/employment_income_count_income_band_500_000_to_1_000_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 44000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_3b99d6944753bf5696bdc8f9" + }, + { + "name": "hmrc/employment_income_count_income_band_70_000_to_100_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 1640000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_8eec35d25c57e9c2e2c7962b" + } + ] + }, + "hmrc.spi.self_employment_income.amount_by_total_income_band": { + "status": "active", + "candidates": [ + { + "name": "hmrc/self_employment_income_income_band_100_000_to_150_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 4980000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_5b616c7ebeb21ef5305b8beb" + }, + { + "name": "hmrc/self_employment_income_income_band_1_000_000_to_inf", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 19500000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_761827852b6a2fccb3d15132" + }, + { + "name": "hmrc/self_employment_income_income_band_12_570_to_15_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 4810000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_1a69068db718770de7df525e" + }, + { + "name": "hmrc/self_employment_income_income_band_15_000_to_20_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 8030000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_c1df7ca022a9c007f122de6d" + }, + { + "name": "hmrc/self_employment_income_income_band_150_000_to_200_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 3650000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_7183b7c143f8e897552ad685" + }, + { + "name": "hmrc/self_employment_income_income_band_20_000_to_30_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 15700000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_33c4f0779c40ec91ff6761da" + }, + { + "name": "hmrc/self_employment_income_income_band_200_000_to_300_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 4390000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_90652f32ebe0ff36c569998d" + }, + { + "name": "hmrc/self_employment_income_income_band_30_000_to_40_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 12600000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_1b9ad3f39e949b92a26ec28c" + }, + { + "name": "hmrc/self_employment_income_income_band_300_000_to_500_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 4840000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_96f921ffdb56a575057076f8" + }, + { + "name": "hmrc/self_employment_income_income_band_40_000_to_50_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 8730000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_645090db5db62f7c47a34f60" + }, + { + "name": "hmrc/self_employment_income_income_band_50_000_to_70_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 8220000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_f0d7af3458463a645af3cb76" + }, + { + "name": "hmrc/self_employment_income_income_band_500_000_to_1_000_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 6670000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_fc7a985c6a2a3d69e2c9ae75" + }, + { + "name": "hmrc/self_employment_income_income_band_70_000_to_100_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 5360000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_c588886840e4e7e4a141ac75" + } + ] + }, + "hmrc.spi.self_employment_income.count_by_total_income_band": { + "status": "active", + "candidates": [ + { + "name": "hmrc/self_employment_income_count_income_band_100_000_to_150_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 85000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_db16ef55b3b0f60d292b745b" + }, + { + "name": "hmrc/self_employment_income_count_income_band_1_000_000_to_inf", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 11000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_315a063dab8497ed5b8837b6" + }, + { + "name": "hmrc/self_employment_income_count_income_band_12_570_to_15_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 444000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_498ad10a35b58ff55819bc8b" + }, + { + "name": "hmrc/self_employment_income_count_income_band_15_000_to_20_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 651000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_eb849a98f57c60bd507d621b" + }, + { + "name": "hmrc/self_employment_income_count_income_band_150_000_to_200_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 40000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_cfb6ca3c4eff6a83bd5c10ac" + }, + { + "name": "hmrc/self_employment_income_count_income_band_20_000_to_30_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 961000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_72bd71f362434b2260a4b407" + }, + { + "name": "hmrc/self_employment_income_count_income_band_200_000_to_300_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 34000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_fe86d957cb9590b3292e1757" + }, + { + "name": "hmrc/self_employment_income_count_income_band_30_000_to_40_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 595000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_84b75f0a77e11de0182b9d87" + }, + { + "name": "hmrc/self_employment_income_count_income_band_300_000_to_500_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 21000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_5c668fd92047d28d73d7c36d" + }, + { + "name": "hmrc/self_employment_income_count_income_band_40_000_to_50_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 359000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_876b5e55461ed15a7456d8b3" + }, + { + "name": "hmrc/self_employment_income_count_income_band_50_000_to_70_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 311000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_09e5a5c61ccf990f6104a903" + }, + { + "name": "hmrc/self_employment_income_count_income_band_500_000_to_1_000_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 15000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_73031eb82b28c872e4371fae" + }, + { + "name": "hmrc/self_employment_income_count_income_band_70_000_to_100_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 143000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_c35c3f72e5f7901457970c8d" + } + ] + }, + "hmrc.spi.dividend_income.amount_by_total_income_band": { + "status": "active", + "candidates": [ + { + "name": "hmrc/dividend_income_income_band_100_000_to_150_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 6870000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_6fd01f132dc6b218c02326b1" + }, + { + "name": "hmrc/dividend_income_income_band_1_000_000_to_inf", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 11100000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_3c0cd54a0f0609d8ebc58a25" + }, + { + "name": "hmrc/dividend_income_income_band_12_570_to_15_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 175000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_b63a84056f85bed14b8ab8fd" + }, + { + "name": "hmrc/dividend_income_income_band_15_000_to_20_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 855000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_3c4f22fc63944665033b18b3" + }, + { + "name": "hmrc/dividend_income_income_band_150_000_to_200_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 3450000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_ced1a5840ced099b471d4e84" + }, + { + "name": "hmrc/dividend_income_income_band_20_000_to_30_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 3330000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_8a115e840b38a6603d618bc0" + }, + { + "name": "hmrc/dividend_income_income_band_200_000_to_300_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 3700000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_0394e55216df7f3dcab84fb5" + }, + { + "name": "hmrc/dividend_income_income_band_30_000_to_40_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 4700000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_ea93d59adaf66ef73e9dddbf" + }, + { + "name": "hmrc/dividend_income_income_band_300_000_to_500_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 3430000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_8d09d2287cbdb2e4f4004521" + }, + { + "name": "hmrc/dividend_income_income_band_40_000_to_50_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 8400000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_0a4329a3eb027a530c6f02ec" + }, + { + "name": "hmrc/dividend_income_income_band_50_000_to_70_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 12500000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_c11497ffe45250b909593f1d" + }, + { + "name": "hmrc/dividend_income_income_band_500_000_to_1_000_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 3820000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_dafc8ca1cd03e5d461b11d4e" + }, + { + "name": "hmrc/dividend_income_income_band_70_000_to_100_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 9440000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_940e6ce9db10080ed5613faa" + } + ] + }, + "hmrc.spi.dividend_income.count_by_total_income_band": { + "status": "active", + "candidates": [ + { + "name": "hmrc/dividend_income_count_income_band_100_000_to_150_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 222000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_35b535ef60b7e9e8ddad45af" + }, + { + "name": "hmrc/dividend_income_count_income_band_1_000_000_to_inf", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 19000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_fbe097b0ffbcc0e7a301478d" + }, + { + "name": "hmrc/dividend_income_count_income_band_12_570_to_15_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 115000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_3a657db84b033007853ec14b" + }, + { + "name": "hmrc/dividend_income_count_income_band_15_000_to_20_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 372000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_418541677821ff087753a7b4" + }, + { + "name": "hmrc/dividend_income_count_income_band_150_000_to_200_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 92000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_426db10645b611899a770dbd" + }, + { + "name": "hmrc/dividend_income_count_income_band_20_000_to_30_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 843000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_937f405149e37c0c900a62ee" + }, + { + "name": "hmrc/dividend_income_count_income_band_200_000_to_300_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 75000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_6c0e32c82b968ba545457cab" + }, + { + "name": "hmrc/dividend_income_count_income_band_30_000_to_40_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 667000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_c8fc2a8e3993c51b68cc6f8a" + }, + { + "name": "hmrc/dividend_income_count_income_band_300_000_to_500_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 49000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_439d9908bf6880e33103ea7d" + }, + { + "name": "hmrc/dividend_income_count_income_band_40_000_to_50_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 627000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_60bb54980a6ca69ff77d07f0" + }, + { + "name": "hmrc/dividend_income_count_income_band_50_000_to_70_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 643000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_56b8b1dd7aec08c3abddc3a0" + }, + { + "name": "hmrc/dividend_income_count_income_band_500_000_to_1_000_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 32000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_c9f024b8595617fc8dd8e416" + }, + { + "name": "hmrc/dividend_income_count_income_band_70_000_to_100_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 336000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_2ed13533e012fdd1fec68a67" + } + ] + }, + "hmrc.spi.property_income.amount_by_total_income_band": { + "status": "signed_excluded", + "candidates": [ + { + "name": "hmrc.spi.property_income.amount_by_total_income_band", + "status": "signed_excluded", + "matched_fact_count_overall": 13, + "matched_fact_count_at_or_before_period": 13, + "signed_rationale": "Signed out pending a first-class value-scaling operation or a Chronicle package for HMRC Property Rental Income Statistics with declared reconciliation: the Ledger facts are official HMRC SPI Table 3.7 net property-income amounts, while the incumbent calibration target applies the populace-side x1.9 property-income undercount adjustment. The x1.9 trace is policyengine-uk-data PR #311 / issue policyengine-uk-data#230: SPI covers only taxpayers with liability, and HMRC Property Rental Income Statistics show GBP 46.68bn versus SPI about GBP 24.5bn for 2020-21. Binding the raw SPI facts would knowingly calibrate to 10/19 of the incumbent surface." + } + ] + }, + "hmrc.spi.property_income.count_by_total_income_band": { + "status": "active", + "candidates": [ + { + "name": "hmrc/property_income_count_income_band_100_000_to_150_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 137000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_50e02eb85969a4773af5cade" + }, + { + "name": "hmrc/property_income_count_income_band_1_000_000_to_inf", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 7000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_d286366fea43c9f897936709" + }, + { + "name": "hmrc/property_income_count_income_band_12_570_to_15_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 101000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_80d817cee2f3592809f3a194" + }, + { + "name": "hmrc/property_income_count_income_band_15_000_to_20_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 232000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_2c0d78b9f9dff4e5fdfa250c" + }, + { + "name": "hmrc/property_income_count_income_band_150_000_to_200_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 54000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_5ec672db73bb4f35958a409e" + }, + { + "name": "hmrc/property_income_count_income_band_20_000_to_30_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 431000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_3eb40c70c3de0d0c29253566" + }, + { + "name": "hmrc/property_income_count_income_band_200_000_to_300_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 41000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_0394669c5734865fda5f0541" + }, + { + "name": "hmrc/property_income_count_income_band_30_000_to_40_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 364000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_6564bb4b662365729676a9e1" + }, + { + "name": "hmrc/property_income_count_income_band_300_000_to_500_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 23000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_87c457b7ee2392ee8360893b" + }, + { + "name": "hmrc/property_income_count_income_band_40_000_to_50_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 325000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_7187a98d8342886b08e3f9e2" + }, + { + "name": "hmrc/property_income_count_income_band_50_000_to_70_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 397000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_c44a33c3bc4454de20132027" + }, + { + "name": "hmrc/property_income_count_income_band_500_000_to_1_000_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 13000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_831e0c70ca80d37c785d4122" + }, + { + "name": "hmrc/property_income_count_income_band_70_000_to_100_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 226000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_f93d04a399cee892e5ec86b6" + } + ] + }, + "hmrc.spi.private_pension_income.amount_by_total_income_band": { + "status": "active", + "candidates": [ + { + "name": "hmrc/private_pension_income_income_band_100_000_to_150_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 5430000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_cb943439ee9edfb445bc3fa5" + }, + { + "name": "hmrc/private_pension_income_income_band_1_000_000_to_inf", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 370000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_7dcf8568040de10d9b3765da" + }, + { + "name": "hmrc/private_pension_income_income_band_12_570_to_15_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 4350000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_699889c2fb48479e27e44a4a" + }, + { + "name": "hmrc/private_pension_income_income_band_15_000_to_20_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 13600000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_0f977d0b50c1d0f1d1364e88" + }, + { + "name": "hmrc/private_pension_income_income_band_150_000_to_200_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 1810000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_d29aac0680380c80bd842bae" + }, + { + "name": "hmrc/private_pension_income_income_band_20_000_to_30_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 30200000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_bafcebe21a05cb0ca19d5e4f" + }, + { + "name": "hmrc/private_pension_income_income_band_200_000_to_300_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 1570000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_de0ed091681463c4ddec5b85" + }, + { + "name": "hmrc/private_pension_income_income_band_30_000_to_40_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 24900000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_2884a006a8d7c144a8570a7d" + }, + { + "name": "hmrc/private_pension_income_income_band_300_000_to_500_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 1120000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_73e8de3b1ac198cc75c2b696" + }, + { + "name": "hmrc/private_pension_income_income_band_40_000_to_50_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 16900000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_6b29cd5a1d665a00bb3e8046" + }, + { + "name": "hmrc/private_pension_income_income_band_50_000_to_70_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 17400000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_8f911d955de4f80e87dc69d8" + }, + { + "name": "hmrc/private_pension_income_income_band_500_000_to_1_000_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 640000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_a13e6165bec82537c5c2883c" + }, + { + "name": "hmrc/private_pension_income_income_band_70_000_to_100_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 9470000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_0a1db235b87cad00eeddbfd8" + } + ] + }, + "hmrc.spi.private_pension_income.count_by_total_income_band": { + "status": "active", + "candidates": [ + { + "name": "hmrc/private_pension_income_count_income_band_100_000_to_150_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 109000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_1fa1ba97628c6c2c315f0e15" + }, + { + "name": "hmrc/private_pension_income_count_income_band_1_000_000_to_inf", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 2000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_188f8f1a0535263e4db7c9a8" + }, + { + "name": "hmrc/private_pension_income_count_income_band_12_570_to_15_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 1070000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_853f104082cf479b98952c1a" + }, + { + "name": "hmrc/private_pension_income_count_income_band_15_000_to_20_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 2140000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_c785199ee1d08fabfe927ff0" + }, + { + "name": "hmrc/private_pension_income_count_income_band_150_000_to_200_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 29000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_a98ec830dee0eceb16b452e7" + }, + { + "name": "hmrc/private_pension_income_count_income_band_20_000_to_30_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 2660000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_1df6f17a33011c1c026dbc09" + }, + { + "name": "hmrc/private_pension_income_count_income_band_200_000_to_300_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 20000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_042ab8896eb0214e7bbad477" + }, + { + "name": "hmrc/private_pension_income_count_income_band_30_000_to_40_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 1450000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_0a28fd76533fc93cf8dbfe4a" + }, + { + "name": "hmrc/private_pension_income_count_income_band_300_000_to_500_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 10000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_7fccfc3ee4246841b3ed391b" + }, + { + "name": "hmrc/private_pension_income_count_income_band_40_000_to_50_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 779000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_0f808aa135a13e5aa4668d22" + }, + { + "name": "hmrc/private_pension_income_count_income_band_50_000_to_70_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 643000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_097efdacf2adf0f90f90d1de" + }, + { + "name": "hmrc/private_pension_income_count_income_band_500_000_to_1_000_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 4000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_8abdd0aa368c3d693e6d0989" + }, + { + "name": "hmrc/private_pension_income_count_income_band_70_000_to_100_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 259000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_f75fc4c3e2cb06bbdb7543f8" + } + ] + }, + "hmrc.spi.state_pension.amount_by_total_income_band": { + "status": "active", + "candidates": [ + { + "name": "hmrc/state_pension_income_band_100_000_to_150_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 847000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_d63e1a96cab57582f482b8c2" + }, + { + "name": "hmrc/state_pension_income_band_1_000_000_to_inf", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 20000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_9a20bd62d4d5984865242929" + }, + { + "name": "hmrc/state_pension_income_band_12_570_to_15_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 11800000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_45083c1383ea711226aebd1b" + }, + { + "name": "hmrc/state_pension_income_band_15_000_to_20_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 22200000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_310febb949c686fad2b71a94" + }, + { + "name": "hmrc/state_pension_income_band_150_000_to_200_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 265000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_e79668076aadc063559585e9" + }, + { + "name": "hmrc/state_pension_income_band_20_000_to_30_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 24900000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_3d18e138c32f6581d6dafdd7" + }, + { + "name": "hmrc/state_pension_income_band_200_000_to_300_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 179000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_e1dda799099ac0f4f439700d" + }, + { + "name": "hmrc/state_pension_income_band_30_000_to_40_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 12300000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_151045b793ac454ab29260fc" + }, + { + "name": "hmrc/state_pension_income_band_300_000_to_500_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 96000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_c95154893499181b7f3a8903" + }, + { + "name": "hmrc/state_pension_income_band_40_000_to_50_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 6020000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_bc4cee7d39f5e1c311464a55" + }, + { + "name": "hmrc/state_pension_income_band_50_000_to_70_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 4660000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_7f09c940c0fbc3cc42b9e510" + }, + { + "name": "hmrc/state_pension_income_band_500_000_to_1_000_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 43000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_d265dfcd4ba09d10053a78a4" + }, + { + "name": "hmrc/state_pension_income_band_70_000_to_100_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 1890000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_41c1df25454fdf413d5765d7" + } + ] + }, + "hmrc.spi.state_pension.count_by_total_income_band": { + "status": "active", + "candidates": [ + { + "name": "hmrc/state_pension_count_income_band_100_000_to_150_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 74000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_01b8f391c006c09d3ed51865" + }, + { + "name": "hmrc/state_pension_count_income_band_1_000_000_to_inf", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 2000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_b8c359bb976d919bedb9076a" + }, + { + "name": "hmrc/state_pension_count_income_band_12_570_to_15_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 1140000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_05f2cd00648c7f8225723a9c" + }, + { + "name": "hmrc/state_pension_count_income_band_15_000_to_20_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 2050000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_ced75bd10fbfa56ef2eabeae" + }, + { + "name": "hmrc/state_pension_count_income_band_150_000_to_200_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 21000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_73d438db1a168d794e290b0e" + }, + { + "name": "hmrc/state_pension_count_income_band_20_000_to_30_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 2320000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_69b521bf537da156d2afa48e" + }, + { + "name": "hmrc/state_pension_count_income_band_200_000_to_300_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 14000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_3edcf70605856bb8b906ea19" + }, + { + "name": "hmrc/state_pension_count_income_band_30_000_to_40_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 1160000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_1cafb0f484a7d8191b7fb989" + }, + { + "name": "hmrc/state_pension_count_income_band_300_000_to_500_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 8000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_7f510c873457703c57c16983" + }, + { + "name": "hmrc/state_pension_count_income_band_40_000_to_50_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 568000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_d4ff6839b2d936396ae33f67" + }, + { + "name": "hmrc/state_pension_count_income_band_50_000_to_70_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 441000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_2b5023baae0b6814c07afbe9" + }, + { + "name": "hmrc/state_pension_count_income_band_500_000_to_1_000_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 3000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_f9a834c26fa7c215c052f4f5" + }, + { + "name": "hmrc/state_pension_count_income_band_70_000_to_100_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 176000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_7514fbdbf5f909008b617d06" + } + ] + }, + "hmrc.cgt.taxpayers_total": { + "status": "active", + "candidates": [ + { + "name": "hmrc.cgt.taxpayers_total", + "status": "active", + "matched_fact_count_overall": 37, + "matched_fact_count_at_or_before_period": 37, + "resolved_period": 2025, + "resolved_value": 378000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_78fb64bd2e9774df4b2f2d56" + } + ] + }, + "hmrc.cgt.gains_total": { + "status": "active", + "candidates": [ + { + "name": "hmrc.cgt.gains_total", + "status": "active", + "matched_fact_count_overall": 37, + "matched_fact_count_at_or_before_period": 37, + "resolved_period": 2025, + "resolved_value": 65937000000.0, + "resolved_fact_period": "2023", + "resolved_fact_key": "ledger_aggregate_fact_v2_1b082e386beee3c6900e9dfa" + } + ] + }, + "dwp.benefit_cap.capped_households": { + "status": "active", + "candidates": [ + { + "name": "dwp.benefit_cap.capped_households", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 110637.0, + "resolved_fact_period": "2025-11", + "resolved_fact_key": "ledger_aggregate_fact_v2_b698397897ed849f096cdd94" + } + ] + }, + "dwp.pip.daily_living_standard_claimants": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "dwp.pip.daily_living_standard_claimants", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "dwp.pip.daily_living_enhanced_claimants": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "dwp.pip.daily_living_enhanced_claimants", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "dwp.esa_claimants": { + "status": "active", + "candidates": [ + { + "name": "dwp.esa_claimants", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 1000000.0, + "resolved_fact_period": "2025-08", + "resolved_fact_key": "ledger_aggregate_fact_v2_16ef67af9274891abd5e4fdc" + } + ] + }, + "dwp.esa_contrib_claimants": { + "status": "active", + "candidates": [ + { + "name": "dwp.esa_contrib_claimants", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 620000.0, + "resolved_fact_period": "2025-08", + "resolved_fact_key": "ledger_aggregate_fact_v2_bf22883b03cf631864b2ae1d" + } + ] + }, + "dwp.esa_income_claimants": { + "status": "active", + "candidates": [ + { + "name": "dwp.esa_income_claimants", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 180000.0, + "resolved_fact_period": "2025-08", + "resolved_fact_key": "ledger_aggregate_fact_v2_8684f0c35a1d71a291e61c81" + } + ] + }, + "dwp.jsa_claimants": { + "status": "active", + "candidates": [ + { + "name": "dwp.jsa_claimants", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 71000.0, + "resolved_fact_period": "2025-08", + "resolved_fact_key": "ledger_aggregate_fact_v2_b5d92ff094ad2c534847291a" + } + ] + }, + "dwp.uc.households_children_1": { + "status": "active", + "candidates": [ + { + "name": "dwp.uc.households_children_1", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 1269512.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_644c4f00ec93656261edcf42" + } + ] + }, + "dwp.uc.households_children_2": { + "status": "active", + "candidates": [ + { + "name": "dwp.uc.households_children_2", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 1103880.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_9ab84c46af8587c44e728bf3" + } + ] + }, + "dwp.uc.households_children_3": { + "status": "active", + "candidates": [ + { + "name": "dwp.uc.households_children_3", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 497665.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_6dcdc6d11cf3afee5beeffa6" + } + ] + }, + "dwp.uc.households_children_4": { + "status": "active", + "candidates": [ + { + "name": "dwp.uc.households_children_4", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 176202.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_615b1a43ca3d51a46d4f46a6" + } + ] + }, + "dwp.uc.households_children_5_or_more": { + "status": "active", + "candidates": [ + { + "name": "dwp.uc.households_children_5_or_more", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 77894.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_d0e380e6527f49dd3585c634" + } + ] + }, + "dwp.uc.households_single_no_children": { + "status": "active", + "candidates": [ + { + "name": "dwp.uc.households_single_no_children", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 3191316.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_459c91f3fc3a98a523da443f" + } + ] + }, + "dwp.uc.households_single_with_children": { + "status": "active", + "candidates": [ + { + "name": "dwp.uc.households_single_with_children", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 2213760.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_41f5ed85cf8b0bb1e30ed3c0" + } + ] + }, + "dwp.uc.households_couple_no_children": { + "status": "active", + "candidates": [ + { + "name": "dwp.uc.households_couple_no_children", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 266160.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_db1b0c763265b66903558f63" + } + ] + }, + "dwp.uc.households_couple_with_children": { + "status": "active", + "candidates": [ + { + "name": "dwp.uc.households_couple_with_children", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 911392.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_d4b90e6010117d5593724efa" + } + ] + }, + "dwp.uc.payment_distribution_single": { + "status": "active", + "candidates": [ + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_0_to_1_200", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 101189.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_7c22cffc1a38778c7c43ed3c" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_1_200_to_2_400", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 121018.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_d3e756c93a3c0143508d1266" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_12_000_to_13_200", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 106102.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_7403d7adc181e8d2f6c832d0" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_13_200_to_14_400", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 182183.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_b7e5703a6a7e90d9384d821e" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_14_400_to_15_600", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 191730.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_40ccf757e12c655dde7c28a9" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_15_600_to_16_800", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 130302.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_5495d957950548ee5265e578" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_16_800_to_18_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 86110.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_7f32751b273236019d0798b0" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_18_000_to_19_200", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 47330.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_52effa75479c574acf4134d9" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_19_200_to_20_400", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 27065.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_073ef8770019305805c7074e" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_20_400_to_21_600", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 18536.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_05d7866882726d294cb2b698" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_21_600_to_22_800", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 12726.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_ed6eafde744f64d26d82dbf2" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_22_800_to_24_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 9793.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_16597c41c14d5cebd04c4378" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_2_400_to_3_600", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 173855.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_92ccc0cdeecc8d39c5addbbc" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_24_000_to_25_200", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 6398.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_fd890e1b94309f81f9ec55bb" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_25_200_to_26_400", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 6020.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_afeee8c7da377064d0933593" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_26_400_to_27_600", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 5488.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_9745e30f3384edf22e35cded" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_27_600_to_28_800", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 1829.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_9327cf3a591e2df94e342811" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_28_800_to_30_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 1543.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_029a3e490eb607ddc8e6e0e8" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_3_600_to_4_800", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 369404.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_014f43c525c174241f9ae3f2" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_4_800_to_6_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 197717.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_6f4d510b41bea88731dbad53" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_6_000_to_7_200", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 106706.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_7b0eac6a3e7fa0fdf30ae20b" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_7_200_to_8_400", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 143277.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_b956dc2e29d5cd357cfb526e" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_8_400_to_9_600", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 379652.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_b66198d395778d35ce86a34a" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_9_600_to_10_800", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 341457.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_3818f2d9e159770543dac328" + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_10_800_to_12_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 94296.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_1cf99ad91d162c4b4a10ba6d" + } + ] + }, + "dwp.uc.payment_distribution_lone_parent": { + "status": "active", + "candidates": [ + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_0_to_1_200", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 24828.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_4273e312b98b380662c03f93" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_1_200_to_2_400", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 34587.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_0694e810a066ab1790440425" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_12_000_to_13_200", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 129699.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_b673f0ea23294b3fa927464d" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_13_200_to_14_400", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 129699.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_960bd045472cf623c35cf664" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_14_400_to_15_600", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 117812.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_210996567d5bf54f88063c27" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_15_600_to_16_800", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 128991.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_222b9723363faf4129bbdf63" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_16_800_to_18_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 139675.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_3dd7c7c9e33c076b3d69bc58" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_18_000_to_19_200", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 134650.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_0c94d038c83605df1791d447" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_19_200_to_20_400", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 106818.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_5a7d3c0f71bf8db13f2a649a" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_20_400_to_21_600", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 86255.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_bea1b398332d1d61c0471393" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_21_600_to_22_800", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 80273.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_fd5aac9d266aee092d14bd76" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_22_800_to_24_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 70319.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_44b81b3b7676500a87a60938" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_2_400_to_3_600", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 43550.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_a316ad8358830ca46c06b8a3" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_24_000_to_25_200", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 50805.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_bd5c3628d5556986948de1a5" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_25_200_to_26_400", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 43132.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_6a09ee4de44449dfc8c84307" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_26_400_to_27_600", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 34342.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_44655134e1437b8245aadfd5" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_27_600_to_28_800", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 27650.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_06c7d10a8b8ad631c14e5aa2" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_28_800_to_30_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 22058.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_b138657095f80dfd0a4ba4dc" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_3_600_to_4_800", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 55560.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_6d87d6eb32df7d87c29c57f7" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_4_800_to_6_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 68058.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_54b83995b46b86deae16f2a3" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_6_000_to_7_200", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 89174.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_cc4b36a430821375a2ed82e0" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_7_200_to_8_400", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 117236.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_cf9c6c694bfbd98b7fb42670" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_8_400_to_9_600", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 98877.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_397b502ee3e68b1b94361cd8" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_9_600_to_10_800", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 102069.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_28de432bddc47503ed9234dc" + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_10_800_to_12_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 125466.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_8a9d5f54da5f13cda4d7c879" + } + ] + }, + "dwp.uc.payment_distribution_couple_no_children": { + "status": "active", + "candidates": [ + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_0_to_1_200", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 7553.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_822a65a1958c79035950ef6d" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_1_200_to_2_400", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 8732.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_8f96da01c8e98a3e520ad3af" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_12_000_to_13_200", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 15096.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_1320bfc5a74354fc0b932e45" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_13_200_to_14_400", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 12422.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_266208dfcf14fec7202d3f81" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_14_400_to_15_600", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 17851.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_2ad978ed7754cd1bff3ec521" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_15_600_to_16_800", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 14493.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_703d368c208e2bbfdd0ee5f8" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_16_800_to_18_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 11914.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_2326bacf548613787d0e5265" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_18_000_to_19_200", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 9478.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_3c8b4dcf3516206f4f91536f" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_19_200_to_20_400", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 8479.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_64fc1a0b6ffa5d083131e00f" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_20_400_to_21_600", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 5764.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_61477c25c1bda2189013f5d8" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_21_600_to_22_800", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 3525.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_1bfbe99d32b115fb101c16f3" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_22_800_to_24_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 2356.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_e7b1f279ad3f7193ae68fc74" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_2_400_to_3_600", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 11606.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_d4d9c99c13e5ffddf9807229" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_24_000_to_25_200", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 1797.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_64cb01bb1cff7752e7ac9fd6" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_25_200_to_26_400", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 1214.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_c3cdf2a650039f3befb16629" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_26_400_to_27_600", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 958.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_03928eb7a88eb005e4e749af" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_27_600_to_28_800", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 654.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_4f7d04b28e459dfa105f04a2" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_28_800_to_30_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 578.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_d6b8079542fdf9ba694c65d4" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_3_600_to_4_800", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 10672.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_58fdd30eacb059011b021576" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_4_800_to_6_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 12199.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_47d90f6b52d026e685875309" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_6_000_to_7_200", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 12405.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_082b5365b7fdf6c1c7040844" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_7_200_to_8_400", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 15632.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_065a04ded463b0db36bc03f1" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_8_400_to_9_600", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 14298.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_398a20f6c941d7755751b050" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_9_600_to_10_800", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 17626.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_3d6203f0f1f7d8a09fbbd123" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_10_800_to_12_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 12318.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_81b85753a70cc5e10a83f605" + } + ] + }, + "dwp.uc.payment_distribution_couple_with_children": { + "status": "active", + "candidates": [ + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_0_to_1_200", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 18896.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_e61e3d1fb68d75f854dd7925" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_1_200_to_2_400", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 22614.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_8d35301acbeaea0ec16d784b" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_12_000_to_13_200", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 41349.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_9d5313777ece292ab0076e87" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_13_200_to_14_400", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 40850.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_532aa299693f3fa7546b54ca" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_14_400_to_15_600", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 42101.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_1bc71ee7fea828fe2503e115" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_15_600_to_16_800", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 38379.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_5975a3ac278b3656e0f56800" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_16_800_to_18_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 38725.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_fa8e258f094fc3ec208b2813" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_18_000_to_19_200", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 38124.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_031b8e5a3da66a77e7116170" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_19_200_to_20_400", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 33871.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_287bb8dc3393d9ebe342c045" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_20_400_to_21_600", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 29950.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_9d97c8b17ae6e786901f969a" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_21_600_to_22_800", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 28186.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_fa0e34a52ba5fb25f60b470c" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_22_800_to_24_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 25960.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_12f9a2c5aa63563eae9aef60" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_2_400_to_3_600", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 26768.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_1df3a18d5e1e627972812530" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_24_000_to_25_200", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 23231.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_0c182b7ed2813f434c7faf96" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_25_200_to_26_400", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 20598.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_89cd3e4f357479a172b9e1a4" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_26_400_to_27_600", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 17650.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_1cfec0935e609d67288403ee" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_27_600_to_28_800", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 15499.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_14e996afeb0a61b020c8e38a" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_28_800_to_30_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 12912.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_59b6b903ae94ade8466c9f8f" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_3_600_to_4_800", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 29288.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_0bedfcd27e528d6ad1ede930" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_4_800_to_6_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 33072.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_53248eeb98cd236f5f3474d3" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_6_000_to_7_200", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 35834.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_e5dd88072bae31da148f1987" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_7_200_to_8_400", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 38337.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_f9ceb07914176c0c6e3b7306" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_8_400_to_9_600", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 40556.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_f010d0b94b60241806a2ccac" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_9_600_to_10_800", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 40399.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_359b4b0c64a9f950a630fd06" + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_10_800_to_12_000", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 41858.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_010fe13b9bcf93223a51f16b" + } + ] + }, + "dwp.uc.scotland_households_child_under_1": { + "status": "active", + "candidates": [ + { + "name": "dwp.uc.scotland_households_child_under_1", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 14412.0, + "resolved_fact_period": "2025-05", + "resolved_fact_key": "ledger_aggregate_fact_v2_a2cdcfc2cd3c4f56e33bfba2" + } + ] + }, + "dwp.uc.two_child_limit.households_affected": { + "status": "active", + "candidates": [ + { + "name": "dwp.uc.two_child_limit.households_affected", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 469780.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_860a48172c62298ceb00c20b" + } + ] + }, + "dwp.uc.two_child_limit.children_affected": { + "status": "active", + "candidates": [ + { + "name": "dwp.uc.two_child_limit.children_affected", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 597920.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_4378e45ac129e036b4a6ca03" + } + ] + }, + "dwp.uc.two_child_limit.children_in_affected_households": { + "status": "active", + "candidates": [ + { + "name": "dwp.uc.two_child_limit.children_in_affected_households", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 1665540.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_05774e34488c474df7f84742" + } + ] + }, + "dwp.uc.two_child_limit.households_3_children": { + "status": "active", + "candidates": [ + { + "name": "dwp.uc.two_child_limit.households_3_children", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 297310.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_dca7734c17910c213e397741" + } + ] + }, + "dwp.uc.two_child_limit.children_in_3_children_households": { + "status": "active", + "candidates": [ + { + "name": "dwp.uc.two_child_limit.children_in_3_children_households", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 891930.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_515b2aeb394a9a9a1fd2d195" + } + ] + }, + "dwp.uc.two_child_limit.households_4_children": { + "status": "active", + "candidates": [ + { + "name": "dwp.uc.two_child_limit.households_4_children", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 117190.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_a78a141d4018bdd92678b497" + } + ] + }, + "dwp.uc.two_child_limit.children_in_4_children_households": { + "status": "active", + "candidates": [ + { + "name": "dwp.uc.two_child_limit.children_in_4_children_households", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 468760.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_adef094060710c5b354e7ac4" + } + ] + }, + "dwp.uc.two_child_limit.households_5_children": { + "status": "active", + "candidates": [ + { + "name": "dwp.uc.two_child_limit.households_5_children", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 37020.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_2c9cfcd7cc862c9c1dd57e4d" + } + ] + }, + "dwp.uc.two_child_limit.children_in_5_children_households": { + "status": "active", + "candidates": [ + { + "name": "dwp.uc.two_child_limit.children_in_5_children_households", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 185120.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_2134e60314c98faf54df2498" + } + ] + }, + "dwp.uc.two_child_limit.households_6_plus_children": { + "status": "active", + "candidates": [ + { + "name": "dwp.uc.two_child_limit.households_6_plus_children", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 18260.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_e6302f9f933c14e97fc2fcae" + } + ] + }, + "dwp.uc.two_child_limit.children_in_6_plus_children_households": { + "status": "active", + "candidates": [ + { + "name": "dwp.uc.two_child_limit.children_in_6_plus_children_households", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 119720.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_235cb4e779dd669dad2cd421" + } + ] + }, + "dwp.uc.two_child_limit.households_claimant_pip": { + "status": "active", + "candidates": [ + { + "name": "dwp.uc.two_child_limit.households_claimant_pip", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 65280.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_55dd86462d71be247206b5a2" + } + ] + }, + "dwp.uc.two_child_limit.children_claimant_pip": { + "status": "active", + "candidates": [ + { + "name": "dwp.uc.two_child_limit.children_claimant_pip", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 235270.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_fe554fcdcb22a77d71c01537" + } + ] + }, + "dwp.uc.two_child_limit.households_disabled_child_element": { + "status": "active", + "candidates": [ + { + "name": "dwp.uc.two_child_limit.households_disabled_child_element", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 129630.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_535ef3b4afd474ea14d16d27" + } + ] + }, + "dwp.uc.two_child_limit.children_disabled_child_element": { + "status": "active", + "candidates": [ + { + "name": "dwp.uc.two_child_limit.children_disabled_child_element", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 479460.0, + "resolved_fact_period": "2025-04", + "resolved_fact_key": "ledger_aggregate_fact_v2_ac642b7002518167b56e1537" + } + ] + }, + "ons.population.uk_total": { + "status": "active", + "candidates": [ + { + "name": "ons.population.uk_total", + "status": "active", + "matched_fact_count_overall": 2, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 69281437.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_6c212695ea75be0d2a635e9b" + } + ] + }, + "ons.population.age_0_9_by_region": { + "status": "active", + "candidates": [ + { + "name": "ons.population.age_0_9_by_region", + "status": "active", + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "resolved_period": 2025, + "resolved_value": 7553013.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_b94a17afcae0f28216f5c756" + } + ] + }, + "ons.population.age_10_19_by_region": { + "status": "active", + "candidates": [ + { + "name": "ons.population.age_10_19_by_region", + "status": "active", + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "resolved_period": 2025, + "resolved_value": 8331437.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_ec5be4478e3e8a5ed9186e22" + } + ] + }, + "ons.population.age_20_29_by_region": { + "status": "active", + "candidates": [ + { + "name": "ons.population.age_20_29_by_region", + "status": "active", + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "resolved_period": 2025, + "resolved_value": 8715225.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_ed0cabd54beb345a04d236b1" + } + ] + }, + "ons.population.age_30_39_by_region": { + "status": "active", + "candidates": [ + { + "name": "ons.population.age_30_39_by_region", + "status": "active", + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "resolved_period": 2025, + "resolved_value": 9572397.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_f3cd6e4fd7249a0ef2be0ffb" + } + ] + }, + "ons.population.age_40_49_by_region": { + "status": "active", + "candidates": [ + { + "name": "ons.population.age_40_49_by_region", + "status": "active", + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "resolved_period": 2025, + "resolved_value": 8622506.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_f618aa084dbd211cdca7c544" + } + ] + }, + "ons.population.age_50_59_by_region": { + "status": "active", + "candidates": [ + { + "name": "ons.population.age_50_59_by_region", + "status": "active", + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "resolved_period": 2025, + "resolved_value": 9036816.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_f8fb3f14e335149ae47e882a" + } + ] + }, + "ons.population.age_60_69_by_region": { + "status": "active", + "candidates": [ + { + "name": "ons.population.age_60_69_by_region", + "status": "active", + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "resolved_period": 2025, + "resolved_value": 7861034.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_fc9476cc3d2ecd4fb1fd9403" + } + ] + }, + "ons.population.age_70_79_by_region": { + "status": "active", + "candidates": [ + { + "name": "ons.population.age_70_79_by_region", + "status": "active", + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "resolved_period": 2025, + "resolved_value": 5998605.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_ffd4d3a0d7b8b5e4667d53d8" + } + ] + }, + "ons.population.age_80_89_by_region": { + "status": "active", + "candidates": [ + { + "name": "ons.population.age_80_89_by_region", + "status": "active", + "matched_fact_count_overall": 20, + "matched_fact_count_at_or_before_period": 20, + "resolved_period": 2025, + "resolved_value": 2965168.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_f2dffa4221fe14e9138365b0" + } + ] + }, + "ons.population.female_0_4": { + "status": "active", + "candidates": [ + { + "name": "ons.population.female_0_4", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 1744355.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_fb55d5f20f74ee39a1e8fcb4" + } + ] + }, + "ons.population.female_10_14": { + "status": "active", + "candidates": [ + { + "name": "ons.population.female_10_14", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 2052052.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_f9a457edc9491e5810c39f5f" + } + ] + }, + "ons.population.female_15_19": { + "status": "active", + "candidates": [ + { + "name": "ons.population.female_15_19", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 2002835.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_f0e2139b52c615925c9075dd" + } + ] + }, + "ons.population.female_20_24": { + "status": "active", + "candidates": [ + { + "name": "ons.population.female_20_24", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 2034609.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_b4e36c0dc0a924667be47bbc" + } + ] + }, + "ons.population.female_25_29": { + "status": "active", + "candidates": [ + { + "name": "ons.population.female_25_29", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 2291610.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_d9d6a711d0cbc4919a8643c0" + } + ] + }, + "ons.population.female_30_34": { + "status": "active", + "candidates": [ + { + "name": "ons.population.female_30_34", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 2463301.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_f5b1d6c400b912b05c79c477" + } + ] + }, + "ons.population.female_35_39": { + "status": "active", + "candidates": [ + { + "name": "ons.population.female_35_39", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 2472291.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_f927cc9b3eab0494caf1479f" + } + ] + }, + "ons.population.female_40_44": { + "status": "active", + "candidates": [ + { + "name": "ons.population.female_40_44", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 2333109.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_d9cdf746ffe5df2fd3d85279" + } + ] + }, + "ons.population.female_45_49": { + "status": "active", + "candidates": [ + { + "name": "ons.population.female_45_49", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 2088285.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_b679e4770750b86af6b1756b" + } + ] + }, + "ons.population.female_50_54": { + "status": "active", + "candidates": [ + { + "name": "ons.population.female_50_54", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 2255231.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_65b8a4cc92c4565b00007877" + } + ] + }, + "ons.population.female_55_59": { + "status": "active", + "candidates": [ + { + "name": "ons.population.female_55_59", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 2360202.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_ba87a7d66cb9f8694b952159" + } + ] + }, + "ons.population.female_5_9": { + "status": "active", + "candidates": [ + { + "name": "ons.population.female_5_9", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 1941658.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_bca9c38347810a944bbd08b3" + } + ] + }, + "ons.population.female_60_64": { + "status": "active", + "candidates": [ + { + "name": "ons.population.female_60_64", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 2193915.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_f3b1f78e4b752640465521f0" + } + ] + }, + "ons.population.female_65_69": { + "status": "active", + "candidates": [ + { + "name": "ons.population.female_65_69", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 1838574.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_dbeb583b16bcb530ee1296e1" + } + ] + }, + "ons.population.female_70_74": { + "status": "active", + "candidates": [ + { + "name": "ons.population.female_70_74", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 1622996.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_b962c8b6d3d68808831aad6a" + } + ] + }, + "ons.population.female_75_79": { + "status": "active", + "candidates": [ + { + "name": "ons.population.female_75_79", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 1551183.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_aa0a8a7ab2d3894db7a7d7aa" + } + ] + }, + "ons.population.female_80_84": { + "status": "active", + "candidates": [ + { + "name": "ons.population.female_80_84", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 1024480.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_fcdc2e2f119de0b65769ef90" + } + ] + }, + "ons.population.female_85_89": { + "status": "active", + "candidates": [ + { + "name": "ons.population.female_85_89", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 665267.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_c76df00751abbf64b5ab056b" + } + ] + }, + "ons.population.female_90_plus": { + "status": "active", + "candidates": [ + { + "name": "ons.population.female_90_plus", + "status": "active", + "matched_fact_count_overall": 2, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 414716.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_009d5dd487f317483e9d7b3d" + } + ] + }, + "ons.population.male_0_4": { + "status": "active", + "candidates": [ + { + "name": "ons.population.male_0_4", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 1829801.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_ccdfe5dde7b46840510e21d2" + } + ] + }, + "ons.population.male_10_14": { + "status": "active", + "candidates": [ + { + "name": "ons.population.male_10_14", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 2152800.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_86d603b352e77fd0c03ddaa8" + } + ] + }, + "ons.population.male_15_19": { + "status": "active", + "candidates": [ + { + "name": "ons.population.male_15_19", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 2123750.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_ecf390d4b25b71d12aae6bc7" + } + ] + }, + "ons.population.male_20_24": { + "status": "active", + "candidates": [ + { + "name": "ons.population.male_20_24", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 2131646.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_edb961b3528b22769eece352" + } + ] + }, + "ons.population.male_25_29": { + "status": "active", + "candidates": [ + { + "name": "ons.population.male_25_29", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 2257360.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_fd52338de8e1557cdd024c36" + } + ] + }, + "ons.population.male_30_34": { + "status": "active", + "candidates": [ + { + "name": "ons.population.male_30_34", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 2333326.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_b81f56fab808ad1d38d70f3d" + } + ] + }, + "ons.population.male_35_39": { + "status": "active", + "candidates": [ + { + "name": "ons.population.male_35_39", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 2303479.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_be9bedc792e0d419ebaf5316" + } + ] + }, + "ons.population.male_40_44": { + "status": "active", + "candidates": [ + { + "name": "ons.population.male_40_44", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 2196013.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_d41ff91bfe885debcc12d759" + } + ] + }, + "ons.population.male_45_49": { + "status": "active", + "candidates": [ + { + "name": "ons.population.male_45_49", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 2005099.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_fafcbae6e55f9ae20bc0050d" + } + ] + }, + "ons.population.male_50_54": { + "status": "active", + "candidates": [ + { + "name": "ons.population.male_50_54", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 2164862.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_b8fe92cfb43b9a95f8a9f7ef" + } + ] + }, + "ons.population.male_55_59": { + "status": "active", + "candidates": [ + { + "name": "ons.population.male_55_59", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 2256521.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_86b57e4ed1e5186f23dc4021" + } + ] + }, + "ons.population.male_5_9": { + "status": "active", + "candidates": [ + { + "name": "ons.population.male_5_9", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 2037199.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_e272f955c58535b8b9304759" + } + ] + }, + "ons.population.male_60_64": { + "status": "active", + "candidates": [ + { + "name": "ons.population.male_60_64", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 2094462.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_e60d33e33dcbc1ba2292edf5" + } + ] + }, + "ons.population.male_65_69": { + "status": "active", + "candidates": [ + { + "name": "ons.population.male_65_69", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 1734083.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_a4878efd0023575bded6b67a" + } + ] + }, + "ons.population.male_70_74": { + "status": "active", + "candidates": [ + { + "name": "ons.population.male_70_74", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 1473758.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_d34aca91f9d1621ea96e72bc" + } + ] + }, + "ons.population.male_75_79": { + "status": "active", + "candidates": [ + { + "name": "ons.population.male_75_79", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 1350668.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_f74158203e735d37a67c5409" + } + ] + }, + "ons.population.male_80_84": { + "status": "active", + "candidates": [ + { + "name": "ons.population.male_80_84", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 815910.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_60aa57af44ada9286df3d649" + } + ] + }, + "ons.population.male_85_89": { + "status": "active", + "candidates": [ + { + "name": "ons.population.male_85_89", + "status": "active", + "matched_fact_count_overall": 10, + "matched_fact_count_at_or_before_period": 10, + "resolved_period": 2025, + "resolved_value": 459511.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_bbfd4e781a7d1151855e4edb" + } + ] + }, + "ons.population.male_90_plus": { + "status": "active", + "candidates": [ + { + "name": "ons.population.male_90_plus", + "status": "active", + "matched_fact_count_overall": 2, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 210520.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_8ec6d2d034546c9693c4f6ed" + } + ] + }, + "ons.population.scotland_children_under_16": { + "status": "active", + "candidates": [ + { + "name": "ons.population.scotland_children_under_16", + "status": "active", + "matched_fact_count_overall": 32, + "matched_fact_count_at_or_before_period": 32, + "resolved_period": 2025, + "resolved_value": 896833.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_f9862176e9cdec891820dfa2" + } + ] + }, + "ons.population.scotland_babies_under_1": { + "status": "active", + "candidates": [ + { + "name": "ons.population.scotland_babies_under_1", + "status": "active", + "matched_fact_count_overall": 2, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 46776.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_edd043df0081e63ad0876932" + } + ] + }, + "ons.population.scotland_households_3plus_children": { + "status": "multi_fact", + "candidates": [ + { + "name": "ons/scotland_households_3plus_children", + "status": "multi_fact", + "matched_fact_count_overall": 6, + "matched_fact_count_at_or_before_period": 6, + "error": "ledger_reference_compile_status_multi_fact" + } + ] + }, + "ons.household_composition.lone_households_under_65": { + "status": "active", + "candidates": [ + { + "name": "ons.household_composition.lone_households_under_65", + "status": "active", + "matched_fact_count_overall": 8, + "matched_fact_count_at_or_before_period": 8, + "resolved_period": 2025, + "resolved_value": 4316000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_c9c67fe2978eaa513a44a926" + } + ] + }, + "ons.household_composition.lone_households_over_65": { + "status": "active", + "candidates": [ + { + "name": "ons.household_composition.lone_households_over_65", + "status": "active", + "matched_fact_count_overall": 8, + "matched_fact_count_at_or_before_period": 8, + "resolved_period": 2025, + "resolved_value": 4254000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_e6c50ddf29ed1ab77864b6a2" + } + ] + }, + "ons.household_composition.unrelated_adult_households": { + "status": "active", + "candidates": [ + { + "name": "ons.household_composition.unrelated_adult_households", + "status": "active", + "matched_fact_count_overall": 8, + "matched_fact_count_at_or_before_period": 8, + "resolved_period": 2025, + "resolved_value": 813000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_3ec0cf9defbe2ab83ab41571" + } + ] + }, + "ons.household_composition.couple_no_children_households": { + "status": "active", + "candidates": [ + { + "name": "ons.household_composition.couple_no_children_households", + "status": "active", + "matched_fact_count_overall": 8, + "matched_fact_count_at_or_before_period": 8, + "resolved_period": 2025, + "resolved_value": 8119000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_b11f5e90017de17e52604807" + } + ] + }, + "ons.household_composition.couple_under_3_children_households": { + "status": "active", + "candidates": [ + { + "name": "ons.household_composition.couple_under_3_children_households", + "status": "active", + "matched_fact_count_overall": 8, + "matched_fact_count_at_or_before_period": 8, + "resolved_period": 2025, + "resolved_value": 5439000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_12ff8cdd70354a89e79666d2" + } + ] + }, + "ons.household_composition.couple_3_plus_children_households": { + "status": "active", + "candidates": [ + { + "name": "ons.household_composition.couple_3_plus_children_households", + "status": "active", + "matched_fact_count_overall": 8, + "matched_fact_count_at_or_before_period": 8, + "resolved_period": 2025, + "resolved_value": 931000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_b7f864011603a30bf3d9a36d" + } + ] + }, + "ons.household_composition.couple_non_dependent_children_only_households": { + "status": "active", + "candidates": [ + { + "name": "ons.household_composition.couple_non_dependent_children_only_households", + "status": "active", + "matched_fact_count_overall": 8, + "matched_fact_count_at_or_before_period": 8, + "resolved_period": 2025, + "resolved_value": 1848000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_a14d855449d9c8dc5e885d7e" + } + ] + }, + "ons.household_composition.lone_parent_dependent_children_households": { + "status": "active", + "candidates": [ + { + "name": "ons.household_composition.lone_parent_dependent_children_households", + "status": "active", + "matched_fact_count_overall": 8, + "matched_fact_count_at_or_before_period": 8, + "resolved_period": 2025, + "resolved_value": 1835000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_e71a9da14a3e6459fb4280b3" + } + ] + }, + "ons.household_composition.lone_parent_non_dependent_children_households": { + "status": "active", + "candidates": [ + { + "name": "ons.household_composition.lone_parent_non_dependent_children_households", + "status": "active", + "matched_fact_count_overall": 8, + "matched_fact_count_at_or_before_period": 8, + "resolved_period": 2025, + "resolved_value": 1204000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_5dabc71ee334f3c3246258bf" + } + ] + }, + "ons.household_composition.multi_family_households": { + "status": "active", + "candidates": [ + { + "name": "ons.household_composition.multi_family_households", + "status": "active", + "matched_fact_count_overall": 8, + "matched_fact_count_at_or_before_period": 8, + "resolved_period": 2025, + "resolved_value": 244000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_b4156d9db1a22d31bfaa20ff" + } + ] + }, + "voa.council_tax_stock.band_a": { + "status": "active", + "candidates": [ + { + "name": "voa.council_tax_stock.band_a", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 6103320.0, + "resolved_fact_period": "2025-03", + "resolved_fact_key": "ledger_aggregate_fact_v2_401f12d7af649e0fd5779ac4" + } + ] + }, + "scotgov.council_tax_stock.band_a": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "scotgov.council_tax_stock.band_a", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "voa.council_tax_stock.band_b": { + "status": "active", + "candidates": [ + { + "name": "voa.council_tax_stock.band_b", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 5016580.0, + "resolved_fact_period": "2025-03", + "resolved_fact_key": "ledger_aggregate_fact_v2_56854712efa30950d408790e" + } + ] + }, + "scotgov.council_tax_stock.band_b": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "scotgov.council_tax_stock.band_b", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "voa.council_tax_stock.band_c": { + "status": "active", + "candidates": [ + { + "name": "voa.council_tax_stock.band_c", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 5654450.0, + "resolved_fact_period": "2025-03", + "resolved_fact_key": "ledger_aggregate_fact_v2_fc068d151c19fb214f6df036" + } + ] + }, + "scotgov.council_tax_stock.band_c": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "scotgov.council_tax_stock.band_c", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "voa.council_tax_stock.band_d": { + "status": "active", + "candidates": [ + { + "name": "voa.council_tax_stock.band_d", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 4035220.0, + "resolved_fact_period": "2025-03", + "resolved_fact_key": "ledger_aggregate_fact_v2_0eb041a728d3c583d0687fbd" + } + ] + }, + "scotgov.council_tax_stock.band_d": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "scotgov.council_tax_stock.band_d", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "voa.council_tax_stock.band_e": { + "status": "active", + "candidates": [ + { + "name": "voa.council_tax_stock.band_e", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 2528140.0, + "resolved_fact_period": "2025-03", + "resolved_fact_key": "ledger_aggregate_fact_v2_b0fdb6a16964ec71bf031981" + } + ] + }, + "scotgov.council_tax_stock.band_e": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "scotgov.council_tax_stock.band_e", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "voa.council_tax_stock.band_f": { + "status": "active", + "candidates": [ + { + "name": "voa.council_tax_stock.band_f", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 1343220.0, + "resolved_fact_period": "2025-03", + "resolved_fact_key": "ledger_aggregate_fact_v2_a99d214f6f55e7f54a423a71" + } + ] + }, + "scotgov.council_tax_stock.band_f": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "scotgov.council_tax_stock.band_f", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "voa.council_tax_stock.band_g": { + "status": "active", + "candidates": [ + { + "name": "voa.council_tax_stock.band_g", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 911160.0, + "resolved_fact_period": "2025-03", + "resolved_fact_key": "ledger_aggregate_fact_v2_5d2bfddb2effd2adc195fcb5" + } + ] + }, + "scotgov.council_tax_stock.band_g": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "scotgov.council_tax_stock.band_g", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "voa.council_tax_stock.band_h": { + "status": "active", + "candidates": [ + { + "name": "voa.council_tax_stock.band_h", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 154470.0, + "resolved_fact_period": "2025-03", + "resolved_fact_key": "ledger_aggregate_fact_v2_67f3a58d14df489820a9f9ab" + } + ] + }, + "scotgov.council_tax_stock.band_h": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "scotgov.council_tax_stock.band_h", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "voa.council_tax_stock.total": { + "status": "active", + "candidates": [ + { + "name": "voa.council_tax_stock.total", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 25746570.0, + "resolved_fact_period": "2025-03", + "resolved_fact_key": "ledger_aggregate_fact_v2_a9db0e47afe1d9b6eca42b97" + } + ] + }, + "scotgov.council_tax_stock.total": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "scotgov.council_tax_stock.total", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "scotgov.scottish_child_payment_spending": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "scotgov.scottish_child_payment_spending", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "ons.savings_interest_income": { + "status": "active", + "candidates": [ + { + "name": "ons.savings_interest_income", + "status": "active", + "matched_fact_count_overall": 8, + "matched_fact_count_at_or_before_period": 8, + "resolved_period": 2025, + "resolved_value": 95503000000.0, + "resolved_fact_period": "2025", + "resolved_fact_key": "ledger_aggregate_fact_v2_8de1806d1330bcb80a1f4988" + } + ] + }, + "ons.public_sector_employment": { + "status": "active", + "candidates": [ + { + "name": "ons.public_sector_employment", + "status": "active", + "matched_fact_count_overall": 2, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 6146000.0, + "resolved_fact_period": "2024-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_ff79b4e2301f564ec4203235" + } + ] + }, + "ons.land.land_value": { + "status": "active", + "candidates": [ + { + "name": "ons.land.land_value", + "status": "active", + "matched_fact_count_overall": 30, + "matched_fact_count_at_or_before_period": 30, + "resolved_period": 2025, + "resolved_value": 7117771000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_4daf8d1b8830f72bba924d56" + } + ] + }, + "ons.land.household_land_value": { + "status": "active", + "candidates": [ + { + "name": "ons.land.household_land_value", + "status": "active", + "matched_fact_count_overall": 30, + "matched_fact_count_at_or_before_period": 30, + "resolved_period": 2025, + "resolved_value": 4559831000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_0e5f9867ab377dffd8a8941f" + } + ] + }, + "ons.land.corporate_land_value": { + "status": "active", + "candidates": [ + { + "name": "ons.land.corporate_land_value", + "status": "active", + "matched_fact_count_overall": 30, + "matched_fact_count_at_or_before_period": 30, + "resolved_period": 2025, + "resolved_value": 2103053000000.0, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_ab561a17be0af52de30cca88" + } + ] + }, + "slc.repayments.devolved_total": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "slc.repayments.devolved_total", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "slc.repayments.england_total_higher_education": { + "status": "active", + "candidates": [ + { + "name": "slc.repayments.england_total_higher_education", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 5018231834.949999, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_b947d1f3c3659d252194c102" + } + ] + }, + "slc.repayments.england_plan_1": { + "status": "active", + "candidates": [ + { + "name": "slc.repayments.england_plan_1", + "status": "active", + "matched_fact_count_overall": 1, + "matched_fact_count_at_or_before_period": 1, + "resolved_period": 2025, + "resolved_value": 1852699178.55, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_1d9680e6eaf243227fed5ef2" + } + ] + }, + "slc.repayments.england_plan_2": { + "status": "active", + "candidates": [ + { + "name": "slc.repayments.england_plan_2", + "status": "active", + "matched_fact_count_overall": 2, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 2778253361.64, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_882329821c90dc683aa778d8" + } + ] + }, + "slc.repayments.england_postgraduate": { + "status": "active", + "candidates": [ + { + "name": "slc.repayments.england_postgraduate", + "status": "active", + "matched_fact_count_overall": 2, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 346409713.95000005, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_ac1b07c69f1e1baa2a0fb787" + } + ] + }, + "slc.repayments.england_plan_5": { + "status": "active", + "candidates": [ + { + "name": "slc.repayments.england_plan_5", + "status": "active", + "matched_fact_count_overall": 2, + "matched_fact_count_at_or_before_period": 2, + "resolved_period": 2025, + "resolved_value": 40869580.81, + "resolved_fact_period": "2024", + "resolved_fact_key": "ledger_aggregate_fact_v2_496af6b8fe31c71c43f1d292" + } + ] + }, + "slc.borrowers.plan_2_above_threshold": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "slc.borrowers.plan_2_above_threshold", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "slc.borrowers.plan_2_liable": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "slc.borrowers.plan_2_liable", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "slc.borrowers.plan_5_above_threshold": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "slc.borrowers.plan_5_above_threshold", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "slc.borrowers.plan_5_liable": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "slc.borrowers.plan_5_liable", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "slc.support.maintenance_loan_recipients": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "slc.support.maintenance_loan_recipients", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "slc.support.maintenance_loan_spend": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "slc.support.maintenance_loan_spend", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "slc.support.parents_learning_allowance_recipients": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "slc.support.parents_learning_allowance_recipients", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "slc.support.parents_learning_allowance_spend": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "slc.support.parents_learning_allowance_spend", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "slc.support.adult_dependants_grant_recipients": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "slc.support.adult_dependants_grant_recipients", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "slc.support.adult_dependants_grant_spend": { + "status": "no_fact_at_or_before_period", + "candidates": [ + { + "name": "slc.support.adult_dependants_grant_spend", + "status": "no_fact_at_or_before_period", + "matched_fact_count_overall": 0, + "matched_fact_count_at_or_before_period": 0, + "error": "ledger_reference_compile_status_no_fact_at_or_before_period" + } + ] + }, + "dwp.uc.households": { + "status": "active", + "candidates": [ + { + "name": "dwp.uc.households", + "status": "active", + "matched_fact_count_overall": 11, + "matched_fact_count_at_or_before_period": 9, + "resolved_period": 2025, + "resolved_value": 6758888.888888889, + "resolved_fact_period": "2025-12", + "resolved_fact_key": "ledger_aggregate_fact_v2_f1f95c868e686f543d161ff0" + } + ] + } + }, + "fanout_family_outcomes": [ + { + "family": "hmrc_spi", + "status": "active_with_signed_property_amount_exclusion", + "active_reference_count": 143, + "signed_rationale": "SPI income-band targets fan out by strict total-income-band dimension pins, except the HMRC property-income amount surface. Those 13 rows are signed out because Ledger carries the official SPI Table 3.7 net property-income amounts, while the incumbent target applies the populace-side x1.9 property-income undercount adjustment traced to policyengine-uk-data PR #311 / issue #230 and HMRC Property Rental Income Statistics." + }, + { + "family": "dwp_universal_credit", + "status": "active_with_unmapped_vintage_residue_skipped", + "active_reference_count": 100, + "skipped_unmapped_fact_count": 12, + "signed_rationale": "UC payment-distribution targets fan out over family_type and monthly_award_amount_bands into incumbent-compatible annual-payment rows. The four source-only 'No payment' facts and eight overlapping source-only 'or over' facts are left out; no active reference may use the legacy nan_to_nan band name." + }, + { + "family": "council_tax_stock", + "status": "active_declared_rows", + "active_reference_count": 9, + "signed_rationale": "VOA council-tax stock bands are declared as nine explicit target rows, including total, and each resolves with its country-level geography and band pin." + } + ], + "signed_exclusion_rationales": [ + { + "family": "hmrc_spi", + "target_id": "hmrc.spi.property_income.amount_by_total_income_band", + "status": "signed_excluded", + "signed_rationale": "Signed out pending a first-class value-scaling operation or a Chronicle package for HMRC Property Rental Income Statistics with declared reconciliation: the Ledger facts are official HMRC SPI Table 3.7 net property-income amounts, while the incumbent calibration target applies the populace-side x1.9 property-income undercount adjustment. The x1.9 trace is policyengine-uk-data PR #311 / issue policyengine-uk-data#230: SPI covers only taxpayers with liability, and HMRC Property Rental Income Statistics show GBP 46.68bn versus SPI about GBP 24.5bn for 2020-21. Binding the raw SPI facts would knowingly calibrate to 10/19 of the incumbent surface." + } + ], + "multi_fact_rationales": [ + { + "family": "ons_population", + "target_id": "ons.population.scotland_households_3plus_children", + "candidate_name": "ons/scotland_households_3plus_children", + "status": "adjudication_pending", + "signed_rationale": "Remaining multi_fact is genuine: the selector reaches ONS mid-year population age rows for Scotland across six eligible periods, while the contract target is a household count with three or more children. No Ledger household-composition fact at or before 2025 is selected by the current contract, so Microcosm must not adjudicate a replacement source here." + } + ] +} diff --git a/packages/microcosm-build/src/microcosm/build/uk/target_references.json b/packages/microcosm-build/src/microcosm/build/uk/target_references.json index 10c1ac1e4..055e61fea 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/target_references.json +++ b/packages/microcosm-build/src/microcosm/build/uk/target_references.json @@ -1,25 +1,8769 @@ { "country": "uk", - "description": "UK active-subset Ledger target references for the national 2023 spine. Rows are generated from uk_national_targets.json: name is the contract target_id; ledger_selector is the contract selector plus geography_level country for the first national activation; entity is from_entity, then map_to, then household; measure is bindings.policyengine.metric_name; family is the contract family; period is 2023; metadata.contract_target_id points back to the contract row. Observed values stay in Ledger facts and resolve by identity only. Deferred classes are recorded in .codex-work/membership_report.json: no fact at or before 2023, multi-fact sum resolution pending, source-projection policy pending, country-level geography ambiguity, or missing/non-finite fact values. Measures name prepared columns, not raw model variables: each reference's measure is the slash-named column the microcosm#622 UK materializer must prepare on the reference's entity table from the contract binding payload (value_variable plus filters/conditions) referenced by metadata.contract_target_id, following the US prepared-indicator-column doctrine (target_spec_from_ledger_reference: count-like facts are sums of prepared indicator columns; the JCT materializer names household columns after their targets). metadata.measure_kind records this on every row. Activation is resolve-or-defer, not resolve-or-fail: a dimension pin whose type disagrees with the fact's value (float 5.0 vs int 5) deactivates the target rather than erroring - when a target is unexpectedly inactive, check the authoring-run membership report on the PR before suspecting the feed. Empty pin or membership lists are refused at resolve time.", + "description": "UK active-subset Ledger target references for the FRS 2024-25 line. Rows are generated from uk_national_targets.json: name is the contract target_id or an incumbent-compatible fan-out row name; ledger_selector is the contract selector plus geography pins; entity is from_entity, then map_to, then household; measure is the prepared-column metric name or fan-out row name; family is the contract family; period is 2025 (opening-year convention for the FRS 2024-25 survey line). Observed values stay in Ledger facts and resolve by identity unless the reference declares value_operation=sum for a genuine multi-fact residue. Deferred classes and geography-pin decisions are recorded in uk/target_reference_membership.json. metadata.measure_kind records that measures are prepared columns produced from the contract binding payload referenced by metadata.contract_target_id.", "allowed_value_operations": [ - "identity" + "identity", + "sum", + "calendar_year_average", + "latest_plateau" ], "target_references": [ + { + "name": "obr.income_tax", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.income_tax", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "person", + "measure": "obr/income_tax", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.income_tax", + "measure_kind": "prepared_column" + }, + "assertion_policy": "allow_source_projection" + }, + { + "name": "obr.ni", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.ni_total", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "person", + "measure": "obr/ni", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.ni", + "measure_kind": "prepared_column" + }, + "assertion_policy": "allow_source_projection" + }, + { + "name": "obr.ni_employee", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.ni_employee", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "person", + "measure": "obr/ni_employee", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.ni_employee", + "measure_kind": "prepared_column" + }, + "assertion_policy": "allow_source_projection" + }, + { + "name": "obr.ni_employer", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.ni_employer", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "person", + "measure": "obr/ni_employer", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.ni_employer", + "measure_kind": "prepared_column" + }, + "assertion_policy": "allow_source_projection" + }, + { + "name": "obr.ni_self_employed", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.ni_self_employed", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "person", + "measure": "obr/ni_self_employed", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.ni_self_employed", + "measure_kind": "prepared_column" + }, + "assertion_policy": "allow_source_projection" + }, + { + "name": "obr.vat", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.vat", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "household", + "measure": "obr/vat", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.vat", + "measure_kind": "prepared_column" + }, + "assertion_policy": "allow_source_projection" + }, + { + "name": "obr.fuel_duties", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.fuel_duties", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "household", + "measure": "obr/fuel_duties", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.fuel_duties", + "measure_kind": "prepared_column" + }, + "assertion_policy": "allow_source_projection" + }, + { + "name": "obr.capital_gains_tax", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.capital_gains_tax", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "person", + "measure": "obr/capital_gains_tax", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.capital_gains_tax", + "measure_kind": "prepared_column" + }, + "assertion_policy": "allow_source_projection" + }, + { + "name": "obr.sdlt", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.sdlt", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "household", + "measure": "obr/sdlt", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.sdlt", + "measure_kind": "prepared_column" + }, + "assertion_policy": "allow_source_projection" + }, + { + "name": "obr.attendance_allowance", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.attendance_allowance", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "person", + "measure": "obr/attendance_allowance", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.attendance_allowance", + "measure_kind": "prepared_column" + }, + "assertion_policy": "allow_source_projection" + }, + { + "name": "obr.carers_allowance", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.carers_allowance", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "person", + "measure": "obr/carers_allowance", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.carers_allowance", + "measure_kind": "prepared_column" + }, + "assertion_policy": "allow_source_projection" + }, + { + "name": "obr.child_benefit", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.child_benefit", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "benunit", + "measure": "obr/child_benefit", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.child_benefit", + "measure_kind": "prepared_column" + }, + "assertion_policy": "allow_source_projection" + }, + { + "name": "obr.council_tax", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.council_tax_total", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "household", + "measure": "obr/council_tax", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.council_tax", + "measure_kind": "prepared_column" + }, + "assertion_policy": "allow_source_projection" + }, + { + "name": "obr.esa", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.incapacity_benefits", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "household", + "measure": "obr/esa", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.esa", + "measure_kind": "prepared_column" + }, + "assertion_policy": "allow_source_projection", + "value_operation": "sum" + }, + { + "name": "obr.housing_benefit", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.housing_benefit", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "benunit", + "measure": "obr/housing_benefit", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.housing_benefit", + "measure_kind": "prepared_column" + }, + "assertion_policy": "allow_source_projection" + }, + { + "name": "obr.jobseekers_allowance", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.jobseekers_allowance", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "benunit", + "measure": "obr/jobseekers_allowance", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.jobseekers_allowance", + "measure_kind": "prepared_column" + }, + "assertion_policy": "allow_source_projection" + }, + { + "name": "obr.pension_credit", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.pension_credit", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "benunit", + "measure": "obr/pension_credit", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.pension_credit", + "measure_kind": "prepared_column" + }, + "assertion_policy": "allow_source_projection" + }, + { + "name": "obr.pip", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.dla_and_pip", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "person", + "measure": "obr/pip", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.pip", + "measure_kind": "prepared_column" + }, + "assertion_policy": "allow_source_projection" + }, + { + "name": "obr.state_pension", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.state_pension", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "person", + "measure": "obr/state_pension", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.state_pension", + "measure_kind": "prepared_column" + }, + "assertion_policy": "allow_source_projection" + }, + { + "name": "obr.statutory_maternity_pay", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.statutory_maternity_pay", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "person", + "measure": "obr/statutory_maternity_pay", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.statutory_maternity_pay", + "measure_kind": "prepared_column" + }, + "assertion_policy": "allow_source_projection" + }, + { + "name": "obr.tv_licence_fee", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.tv_licence_fee", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "household", + "measure": "obr/tv_licence_fee", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.tv_licence_fee", + "measure_kind": "prepared_column" + }, + "assertion_policy": "allow_source_projection" + }, + { + "name": "obr.universal_credit_in_cap", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.universal_credit_in_cap", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "benunit", + "measure": "obr/universal_credit_in_cap", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.universal_credit_in_cap", + "measure_kind": "prepared_column" + }, + "assertion_policy": "allow_source_projection" + }, + { + "name": "obr.universal_credit_outside_cap", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.universal_credit_outside_cap", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "benunit", + "measure": "obr/universal_credit_outside_cap", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.universal_credit_outside_cap", + "measure_kind": "prepared_column" + }, + "assertion_policy": "allow_source_projection" + }, + { + "name": "obr.winter_fuel_allowance", + "ledger_selector": { + "source_name": "obr", + "source_concept": "obr.winter_fuel_payment", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "household", + "measure": "obr/winter_fuel_allowance", + "family": "obr", + "period": 2025, + "metadata": { + "contract_target_id": "obr.winter_fuel_allowance", + "measure_kind": "prepared_column" + }, + "assertion_policy": "allow_source_projection" + }, { "name": "isc.private_school_students", "ledger_selector": { - "source_name": "isc", - "source_concept": "isc.pupils_at_member_schools", - "geography_level": "country" + "source_name": "isc", + "source_concept": "isc.pupils_at_member_schools", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "person", + "measure": "obr/private_school_students", + "family": "isc", + "period": 2025, + "metadata": { + "contract_target_id": "isc.private_school_students", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2024-01", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.salary_sacrifice.it_relief_basic_rate", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.ss_income_tax_relief_basic_rate", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "person", + "measure": "hmrc/salary_sacrifice_it_relief_basic_rate", + "family": "hmrc_salary_sacrifice", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.salary_sacrifice.it_relief_basic_rate", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.salary_sacrifice.it_relief_higher_rate", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.ss_income_tax_relief_higher_rate", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "person", + "measure": "hmrc/salary_sacrifice_it_relief_higher_rate", + "family": "hmrc_salary_sacrifice", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.salary_sacrifice.it_relief_higher_rate", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.salary_sacrifice.it_relief_additional_rate", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.ss_income_tax_relief_additional_rate", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "person", + "measure": "hmrc/salary_sacrifice_it_relief_additional_rate", + "family": "hmrc_salary_sacrifice", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.salary_sacrifice.it_relief_additional_rate", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.salary_sacrifice.nics_relief_employee", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.ss_nics_relief_employee", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "person", + "measure": "hmrc/salary_sacrifice_employee_nics_relief", + "family": "hmrc_salary_sacrifice", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.salary_sacrifice.nics_relief_employee", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.salary_sacrifice.nics_relief_employer", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.ss_nics_relief_employer", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "person", + "measure": "hmrc/salary_sacrifice_employer_nics_relief", + "family": "hmrc_salary_sacrifice", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.salary_sacrifice.nics_relief_employer", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.salary_sacrifice.users_total", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.salary_sacrifice_pension_users", + "dimension_values": { + "salary_sacrifice_threshold_position": "all" + }, + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "person", + "measure": "obr/salary_sacrifice_users_total", + "family": "hmrc_salary_sacrifice", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.salary_sacrifice.users_total", + "measure_kind": "prepared_column" + } + }, + { + "name": "hmrc.salary_sacrifice.users_below_cap", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.salary_sacrifice_pension_users", + "dimension_values": { + "salary_sacrifice_threshold_position": "within_2000" + }, + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "person", + "measure": "obr/salary_sacrifice_users_below_cap", + "family": "hmrc_salary_sacrifice", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.salary_sacrifice.users_below_cap", + "measure_kind": "prepared_column" + } + }, + { + "name": "hmrc.salary_sacrifice.users_above_cap", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.salary_sacrifice_pension_users", + "dimension_values": { + "salary_sacrifice_threshold_position": "above_2000" + }, + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "person", + "measure": "obr/salary_sacrifice_users_above_cap", + "family": "hmrc_salary_sacrifice", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.salary_sacrifice.users_above_cap", + "measure_kind": "prepared_column" + } + }, + { + "name": "hmrc/employment_income_income_band_100_000_to_150_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_employment_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 100000 + } + }, + "entity": "person", + "measure": "hmrc/employment_income_income_band_100_000_to_150_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.employment_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/employment_income_income_band_1_000_000_to_inf", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_employment_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 1000000 + } + }, + "entity": "person", + "measure": "hmrc/employment_income_income_band_1_000_000_to_inf", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.employment_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/employment_income_income_band_12_570_to_15_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_employment_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 12570 + } + }, + "entity": "person", + "measure": "hmrc/employment_income_income_band_12_570_to_15_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.employment_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/employment_income_income_band_15_000_to_20_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_employment_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 15000 + } + }, + "entity": "person", + "measure": "hmrc/employment_income_income_band_15_000_to_20_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.employment_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/employment_income_income_band_150_000_to_200_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_employment_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 150000 + } + }, + "entity": "person", + "measure": "hmrc/employment_income_income_band_150_000_to_200_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.employment_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/employment_income_income_band_20_000_to_30_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_employment_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 20000 + } + }, + "entity": "person", + "measure": "hmrc/employment_income_income_band_20_000_to_30_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.employment_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/employment_income_income_band_200_000_to_300_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_employment_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 200000 + } + }, + "entity": "person", + "measure": "hmrc/employment_income_income_band_200_000_to_300_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.employment_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/employment_income_income_band_30_000_to_40_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_employment_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 30000 + } + }, + "entity": "person", + "measure": "hmrc/employment_income_income_band_30_000_to_40_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.employment_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/employment_income_income_band_300_000_to_500_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_employment_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 300000 + } + }, + "entity": "person", + "measure": "hmrc/employment_income_income_band_300_000_to_500_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.employment_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/employment_income_income_band_40_000_to_50_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_employment_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 40000 + } + }, + "entity": "person", + "measure": "hmrc/employment_income_income_band_40_000_to_50_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.employment_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/employment_income_income_band_50_000_to_70_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_employment_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 50000 + } + }, + "entity": "person", + "measure": "hmrc/employment_income_income_band_50_000_to_70_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.employment_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/employment_income_income_band_500_000_to_1_000_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_employment_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 500000 + } + }, + "entity": "person", + "measure": "hmrc/employment_income_income_band_500_000_to_1_000_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.employment_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/employment_income_income_band_70_000_to_100_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_employment_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 70000 + } + }, + "entity": "person", + "measure": "hmrc/employment_income_income_band_70_000_to_100_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.employment_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/employment_income_count_income_band_100_000_to_150_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_employment_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 100000 + } + }, + "entity": "person", + "measure": "hmrc/employment_income_count_income_band_100_000_to_150_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.employment_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/employment_income_count_income_band_1_000_000_to_inf", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_employment_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 1000000 + } + }, + "entity": "person", + "measure": "hmrc/employment_income_count_income_band_1_000_000_to_inf", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.employment_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/employment_income_count_income_band_12_570_to_15_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_employment_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 12570 + } + }, + "entity": "person", + "measure": "hmrc/employment_income_count_income_band_12_570_to_15_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.employment_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/employment_income_count_income_band_15_000_to_20_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_employment_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 15000 + } + }, + "entity": "person", + "measure": "hmrc/employment_income_count_income_band_15_000_to_20_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.employment_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/employment_income_count_income_band_150_000_to_200_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_employment_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 150000 + } + }, + "entity": "person", + "measure": "hmrc/employment_income_count_income_band_150_000_to_200_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.employment_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/employment_income_count_income_band_20_000_to_30_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_employment_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 20000 + } + }, + "entity": "person", + "measure": "hmrc/employment_income_count_income_band_20_000_to_30_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.employment_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/employment_income_count_income_band_200_000_to_300_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_employment_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 200000 + } + }, + "entity": "person", + "measure": "hmrc/employment_income_count_income_band_200_000_to_300_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.employment_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/employment_income_count_income_band_30_000_to_40_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_employment_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 30000 + } + }, + "entity": "person", + "measure": "hmrc/employment_income_count_income_band_30_000_to_40_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.employment_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/employment_income_count_income_band_300_000_to_500_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_employment_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 300000 + } + }, + "entity": "person", + "measure": "hmrc/employment_income_count_income_band_300_000_to_500_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.employment_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/employment_income_count_income_band_40_000_to_50_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_employment_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 40000 + } + }, + "entity": "person", + "measure": "hmrc/employment_income_count_income_band_40_000_to_50_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.employment_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/employment_income_count_income_band_50_000_to_70_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_employment_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 50000 + } + }, + "entity": "person", + "measure": "hmrc/employment_income_count_income_band_50_000_to_70_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.employment_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/employment_income_count_income_band_500_000_to_1_000_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_employment_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 500000 + } + }, + "entity": "person", + "measure": "hmrc/employment_income_count_income_band_500_000_to_1_000_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.employment_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/employment_income_count_income_band_70_000_to_100_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_employment_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 70000 + } + }, + "entity": "person", + "measure": "hmrc/employment_income_count_income_band_70_000_to_100_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.employment_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/self_employment_income_income_band_100_000_to_150_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_self_employment_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 100000 + } + }, + "entity": "person", + "measure": "hmrc/self_employment_income_income_band_100_000_to_150_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/self_employment_income_income_band_1_000_000_to_inf", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_self_employment_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 1000000 + } + }, + "entity": "person", + "measure": "hmrc/self_employment_income_income_band_1_000_000_to_inf", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/self_employment_income_income_band_12_570_to_15_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_self_employment_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 12570 + } + }, + "entity": "person", + "measure": "hmrc/self_employment_income_income_band_12_570_to_15_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/self_employment_income_income_band_15_000_to_20_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_self_employment_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 15000 + } + }, + "entity": "person", + "measure": "hmrc/self_employment_income_income_band_15_000_to_20_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/self_employment_income_income_band_150_000_to_200_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_self_employment_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 150000 + } + }, + "entity": "person", + "measure": "hmrc/self_employment_income_income_band_150_000_to_200_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/self_employment_income_income_band_20_000_to_30_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_self_employment_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 20000 + } + }, + "entity": "person", + "measure": "hmrc/self_employment_income_income_band_20_000_to_30_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/self_employment_income_income_band_200_000_to_300_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_self_employment_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 200000 + } + }, + "entity": "person", + "measure": "hmrc/self_employment_income_income_band_200_000_to_300_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/self_employment_income_income_band_30_000_to_40_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_self_employment_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 30000 + } + }, + "entity": "person", + "measure": "hmrc/self_employment_income_income_band_30_000_to_40_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/self_employment_income_income_band_300_000_to_500_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_self_employment_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 300000 + } + }, + "entity": "person", + "measure": "hmrc/self_employment_income_income_band_300_000_to_500_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/self_employment_income_income_band_40_000_to_50_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_self_employment_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 40000 + } + }, + "entity": "person", + "measure": "hmrc/self_employment_income_income_band_40_000_to_50_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/self_employment_income_income_band_50_000_to_70_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_self_employment_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 50000 + } + }, + "entity": "person", + "measure": "hmrc/self_employment_income_income_band_50_000_to_70_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/self_employment_income_income_band_500_000_to_1_000_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_self_employment_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 500000 + } + }, + "entity": "person", + "measure": "hmrc/self_employment_income_income_band_500_000_to_1_000_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/self_employment_income_income_band_70_000_to_100_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_self_employment_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 70000 + } + }, + "entity": "person", + "measure": "hmrc/self_employment_income_income_band_70_000_to_100_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.self_employment_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/self_employment_income_count_income_band_100_000_to_150_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_self_employment_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 100000 + } + }, + "entity": "person", + "measure": "hmrc/self_employment_income_count_income_band_100_000_to_150_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.self_employment_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/self_employment_income_count_income_band_1_000_000_to_inf", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_self_employment_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 1000000 + } + }, + "entity": "person", + "measure": "hmrc/self_employment_income_count_income_band_1_000_000_to_inf", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.self_employment_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/self_employment_income_count_income_band_12_570_to_15_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_self_employment_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 12570 + } + }, + "entity": "person", + "measure": "hmrc/self_employment_income_count_income_band_12_570_to_15_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.self_employment_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/self_employment_income_count_income_band_15_000_to_20_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_self_employment_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 15000 + } + }, + "entity": "person", + "measure": "hmrc/self_employment_income_count_income_band_15_000_to_20_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.self_employment_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/self_employment_income_count_income_band_150_000_to_200_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_self_employment_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 150000 + } + }, + "entity": "person", + "measure": "hmrc/self_employment_income_count_income_band_150_000_to_200_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.self_employment_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/self_employment_income_count_income_band_20_000_to_30_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_self_employment_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 20000 + } + }, + "entity": "person", + "measure": "hmrc/self_employment_income_count_income_band_20_000_to_30_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.self_employment_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/self_employment_income_count_income_band_200_000_to_300_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_self_employment_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 200000 + } + }, + "entity": "person", + "measure": "hmrc/self_employment_income_count_income_band_200_000_to_300_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.self_employment_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/self_employment_income_count_income_band_30_000_to_40_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_self_employment_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 30000 + } + }, + "entity": "person", + "measure": "hmrc/self_employment_income_count_income_band_30_000_to_40_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.self_employment_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/self_employment_income_count_income_band_300_000_to_500_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_self_employment_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 300000 + } + }, + "entity": "person", + "measure": "hmrc/self_employment_income_count_income_band_300_000_to_500_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.self_employment_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/self_employment_income_count_income_band_40_000_to_50_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_self_employment_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 40000 + } + }, + "entity": "person", + "measure": "hmrc/self_employment_income_count_income_band_40_000_to_50_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.self_employment_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/self_employment_income_count_income_band_50_000_to_70_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_self_employment_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 50000 + } + }, + "entity": "person", + "measure": "hmrc/self_employment_income_count_income_band_50_000_to_70_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.self_employment_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/self_employment_income_count_income_band_500_000_to_1_000_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_self_employment_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 500000 + } + }, + "entity": "person", + "measure": "hmrc/self_employment_income_count_income_band_500_000_to_1_000_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.self_employment_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/self_employment_income_count_income_band_70_000_to_100_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_self_employment_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 70000 + } + }, + "entity": "person", + "measure": "hmrc/self_employment_income_count_income_band_70_000_to_100_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.self_employment_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/dividend_income_income_band_100_000_to_150_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_dividend_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 100000 + } + }, + "entity": "person", + "measure": "hmrc/dividend_income_income_band_100_000_to_150_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.dividend_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/dividend_income_income_band_1_000_000_to_inf", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_dividend_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 1000000 + } + }, + "entity": "person", + "measure": "hmrc/dividend_income_income_band_1_000_000_to_inf", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.dividend_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/dividend_income_income_band_12_570_to_15_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_dividend_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 12570 + } + }, + "entity": "person", + "measure": "hmrc/dividend_income_income_band_12_570_to_15_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.dividend_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/dividend_income_income_band_15_000_to_20_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_dividend_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 15000 + } + }, + "entity": "person", + "measure": "hmrc/dividend_income_income_band_15_000_to_20_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.dividend_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/dividend_income_income_band_150_000_to_200_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_dividend_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 150000 + } + }, + "entity": "person", + "measure": "hmrc/dividend_income_income_band_150_000_to_200_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.dividend_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/dividend_income_income_band_20_000_to_30_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_dividend_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 20000 + } + }, + "entity": "person", + "measure": "hmrc/dividend_income_income_band_20_000_to_30_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.dividend_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/dividend_income_income_band_200_000_to_300_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_dividend_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 200000 + } + }, + "entity": "person", + "measure": "hmrc/dividend_income_income_band_200_000_to_300_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.dividend_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/dividend_income_income_band_30_000_to_40_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_dividend_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 30000 + } + }, + "entity": "person", + "measure": "hmrc/dividend_income_income_band_30_000_to_40_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.dividend_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/dividend_income_income_band_300_000_to_500_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_dividend_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 300000 + } + }, + "entity": "person", + "measure": "hmrc/dividend_income_income_band_300_000_to_500_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.dividend_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/dividend_income_income_band_40_000_to_50_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_dividend_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 40000 + } + }, + "entity": "person", + "measure": "hmrc/dividend_income_income_band_40_000_to_50_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.dividend_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/dividend_income_income_band_50_000_to_70_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_dividend_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 50000 + } + }, + "entity": "person", + "measure": "hmrc/dividend_income_income_band_50_000_to_70_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.dividend_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/dividend_income_income_band_500_000_to_1_000_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_dividend_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 500000 + } + }, + "entity": "person", + "measure": "hmrc/dividend_income_income_band_500_000_to_1_000_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.dividend_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/dividend_income_income_band_70_000_to_100_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_dividend_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 70000 + } + }, + "entity": "person", + "measure": "hmrc/dividend_income_income_band_70_000_to_100_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.dividend_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/dividend_income_count_income_band_100_000_to_150_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_dividend_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 100000 + } + }, + "entity": "person", + "measure": "hmrc/dividend_income_count_income_band_100_000_to_150_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.dividend_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/dividend_income_count_income_band_1_000_000_to_inf", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_dividend_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 1000000 + } + }, + "entity": "person", + "measure": "hmrc/dividend_income_count_income_band_1_000_000_to_inf", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.dividend_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/dividend_income_count_income_band_12_570_to_15_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_dividend_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 12570 + } + }, + "entity": "person", + "measure": "hmrc/dividend_income_count_income_band_12_570_to_15_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.dividend_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/dividend_income_count_income_band_15_000_to_20_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_dividend_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 15000 + } + }, + "entity": "person", + "measure": "hmrc/dividend_income_count_income_band_15_000_to_20_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.dividend_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/dividend_income_count_income_band_150_000_to_200_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_dividend_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 150000 + } + }, + "entity": "person", + "measure": "hmrc/dividend_income_count_income_band_150_000_to_200_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.dividend_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/dividend_income_count_income_band_20_000_to_30_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_dividend_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 20000 + } + }, + "entity": "person", + "measure": "hmrc/dividend_income_count_income_band_20_000_to_30_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.dividend_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/dividend_income_count_income_band_200_000_to_300_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_dividend_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 200000 + } + }, + "entity": "person", + "measure": "hmrc/dividend_income_count_income_band_200_000_to_300_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.dividend_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/dividend_income_count_income_band_30_000_to_40_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_dividend_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 30000 + } + }, + "entity": "person", + "measure": "hmrc/dividend_income_count_income_band_30_000_to_40_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.dividend_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/dividend_income_count_income_band_300_000_to_500_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_dividend_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 300000 + } + }, + "entity": "person", + "measure": "hmrc/dividend_income_count_income_band_300_000_to_500_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.dividend_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/dividend_income_count_income_band_40_000_to_50_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_dividend_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 40000 + } + }, + "entity": "person", + "measure": "hmrc/dividend_income_count_income_band_40_000_to_50_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.dividend_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/dividend_income_count_income_band_50_000_to_70_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_dividend_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 50000 + } + }, + "entity": "person", + "measure": "hmrc/dividend_income_count_income_band_50_000_to_70_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.dividend_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/dividend_income_count_income_band_500_000_to_1_000_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_dividend_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 500000 + } + }, + "entity": "person", + "measure": "hmrc/dividend_income_count_income_band_500_000_to_1_000_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.dividend_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/dividend_income_count_income_band_70_000_to_100_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_dividend_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 70000 + } + }, + "entity": "person", + "measure": "hmrc/dividend_income_count_income_band_70_000_to_100_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.dividend_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/property_income_count_income_band_100_000_to_150_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_property_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 100000 + } + }, + "entity": "person", + "measure": "hmrc/property_income_count_income_band_100_000_to_150_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.property_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/property_income_count_income_band_1_000_000_to_inf", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_property_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 1000000 + } + }, + "entity": "person", + "measure": "hmrc/property_income_count_income_band_1_000_000_to_inf", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.property_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/property_income_count_income_band_12_570_to_15_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_property_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 12570 + } + }, + "entity": "person", + "measure": "hmrc/property_income_count_income_band_12_570_to_15_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.property_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/property_income_count_income_band_15_000_to_20_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_property_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 15000 + } + }, + "entity": "person", + "measure": "hmrc/property_income_count_income_band_15_000_to_20_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.property_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/property_income_count_income_band_150_000_to_200_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_property_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 150000 + } + }, + "entity": "person", + "measure": "hmrc/property_income_count_income_band_150_000_to_200_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.property_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/property_income_count_income_band_20_000_to_30_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_property_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 20000 + } + }, + "entity": "person", + "measure": "hmrc/property_income_count_income_band_20_000_to_30_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.property_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/property_income_count_income_band_200_000_to_300_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_property_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 200000 + } + }, + "entity": "person", + "measure": "hmrc/property_income_count_income_band_200_000_to_300_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.property_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/property_income_count_income_band_30_000_to_40_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_property_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 30000 + } + }, + "entity": "person", + "measure": "hmrc/property_income_count_income_band_30_000_to_40_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.property_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/property_income_count_income_band_300_000_to_500_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_property_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 300000 + } + }, + "entity": "person", + "measure": "hmrc/property_income_count_income_band_300_000_to_500_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.property_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/property_income_count_income_band_40_000_to_50_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_property_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 40000 + } + }, + "entity": "person", + "measure": "hmrc/property_income_count_income_band_40_000_to_50_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.property_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/property_income_count_income_band_50_000_to_70_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_property_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 50000 + } + }, + "entity": "person", + "measure": "hmrc/property_income_count_income_band_50_000_to_70_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.property_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/property_income_count_income_band_500_000_to_1_000_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_property_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 500000 + } + }, + "entity": "person", + "measure": "hmrc/property_income_count_income_band_500_000_to_1_000_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.property_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/property_income_count_income_band_70_000_to_100_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_property_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 70000 + } + }, + "entity": "person", + "measure": "hmrc/property_income_count_income_band_70_000_to_100_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.property_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/private_pension_income_income_band_100_000_to_150_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_private_pension_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 100000 + } + }, + "entity": "person", + "measure": "hmrc/private_pension_income_income_band_100_000_to_150_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/private_pension_income_income_band_1_000_000_to_inf", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_private_pension_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 1000000 + } + }, + "entity": "person", + "measure": "hmrc/private_pension_income_income_band_1_000_000_to_inf", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/private_pension_income_income_band_12_570_to_15_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_private_pension_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 12570 + } + }, + "entity": "person", + "measure": "hmrc/private_pension_income_income_band_12_570_to_15_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/private_pension_income_income_band_15_000_to_20_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_private_pension_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 15000 + } + }, + "entity": "person", + "measure": "hmrc/private_pension_income_income_band_15_000_to_20_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/private_pension_income_income_band_150_000_to_200_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_private_pension_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 150000 + } + }, + "entity": "person", + "measure": "hmrc/private_pension_income_income_band_150_000_to_200_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/private_pension_income_income_band_20_000_to_30_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_private_pension_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 20000 + } + }, + "entity": "person", + "measure": "hmrc/private_pension_income_income_band_20_000_to_30_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/private_pension_income_income_band_200_000_to_300_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_private_pension_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 200000 + } + }, + "entity": "person", + "measure": "hmrc/private_pension_income_income_band_200_000_to_300_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/private_pension_income_income_band_30_000_to_40_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_private_pension_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 30000 + } + }, + "entity": "person", + "measure": "hmrc/private_pension_income_income_band_30_000_to_40_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/private_pension_income_income_band_300_000_to_500_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_private_pension_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 300000 + } + }, + "entity": "person", + "measure": "hmrc/private_pension_income_income_band_300_000_to_500_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/private_pension_income_income_band_40_000_to_50_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_private_pension_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 40000 + } + }, + "entity": "person", + "measure": "hmrc/private_pension_income_income_band_40_000_to_50_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/private_pension_income_income_band_50_000_to_70_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_private_pension_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 50000 + } + }, + "entity": "person", + "measure": "hmrc/private_pension_income_income_band_50_000_to_70_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/private_pension_income_income_band_500_000_to_1_000_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_private_pension_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 500000 + } + }, + "entity": "person", + "measure": "hmrc/private_pension_income_income_band_500_000_to_1_000_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/private_pension_income_income_band_70_000_to_100_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_private_pension_income_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 70000 + } + }, + "entity": "person", + "measure": "hmrc/private_pension_income_income_band_70_000_to_100_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.private_pension_income.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/private_pension_income_count_income_band_100_000_to_150_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_private_pension_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 100000 + } + }, + "entity": "person", + "measure": "hmrc/private_pension_income_count_income_band_100_000_to_150_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.private_pension_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/private_pension_income_count_income_band_1_000_000_to_inf", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_private_pension_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 1000000 + } + }, + "entity": "person", + "measure": "hmrc/private_pension_income_count_income_band_1_000_000_to_inf", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.private_pension_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/private_pension_income_count_income_band_12_570_to_15_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_private_pension_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 12570 + } + }, + "entity": "person", + "measure": "hmrc/private_pension_income_count_income_band_12_570_to_15_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.private_pension_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/private_pension_income_count_income_band_15_000_to_20_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_private_pension_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 15000 + } + }, + "entity": "person", + "measure": "hmrc/private_pension_income_count_income_band_15_000_to_20_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.private_pension_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/private_pension_income_count_income_band_150_000_to_200_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_private_pension_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 150000 + } + }, + "entity": "person", + "measure": "hmrc/private_pension_income_count_income_band_150_000_to_200_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.private_pension_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/private_pension_income_count_income_band_20_000_to_30_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_private_pension_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 20000 + } + }, + "entity": "person", + "measure": "hmrc/private_pension_income_count_income_band_20_000_to_30_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.private_pension_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/private_pension_income_count_income_band_200_000_to_300_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_private_pension_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 200000 + } + }, + "entity": "person", + "measure": "hmrc/private_pension_income_count_income_band_200_000_to_300_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.private_pension_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/private_pension_income_count_income_band_30_000_to_40_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_private_pension_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 30000 + } + }, + "entity": "person", + "measure": "hmrc/private_pension_income_count_income_band_30_000_to_40_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.private_pension_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/private_pension_income_count_income_band_300_000_to_500_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_private_pension_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 300000 + } + }, + "entity": "person", + "measure": "hmrc/private_pension_income_count_income_band_300_000_to_500_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.private_pension_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/private_pension_income_count_income_band_40_000_to_50_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_private_pension_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 40000 + } + }, + "entity": "person", + "measure": "hmrc/private_pension_income_count_income_band_40_000_to_50_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.private_pension_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/private_pension_income_count_income_band_50_000_to_70_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_private_pension_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 50000 + } + }, + "entity": "person", + "measure": "hmrc/private_pension_income_count_income_band_50_000_to_70_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.private_pension_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/private_pension_income_count_income_band_500_000_to_1_000_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_private_pension_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 500000 + } + }, + "entity": "person", + "measure": "hmrc/private_pension_income_count_income_band_500_000_to_1_000_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.private_pension_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/private_pension_income_count_income_band_70_000_to_100_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_private_pension_income_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 70000 + } + }, + "entity": "person", + "measure": "hmrc/private_pension_income_count_income_band_70_000_to_100_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.private_pension_income.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/state_pension_income_band_100_000_to_150_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_state_pension_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 100000 + } + }, + "entity": "person", + "measure": "hmrc/state_pension_income_band_100_000_to_150_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.state_pension.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/state_pension_income_band_1_000_000_to_inf", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_state_pension_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 1000000 + } + }, + "entity": "person", + "measure": "hmrc/state_pension_income_band_1_000_000_to_inf", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.state_pension.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/state_pension_income_band_12_570_to_15_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_state_pension_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 12570 + } + }, + "entity": "person", + "measure": "hmrc/state_pension_income_band_12_570_to_15_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.state_pension.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/state_pension_income_band_15_000_to_20_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_state_pension_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 15000 + } + }, + "entity": "person", + "measure": "hmrc/state_pension_income_band_15_000_to_20_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.state_pension.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/state_pension_income_band_150_000_to_200_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_state_pension_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 150000 + } + }, + "entity": "person", + "measure": "hmrc/state_pension_income_band_150_000_to_200_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.state_pension.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/state_pension_income_band_20_000_to_30_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_state_pension_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 20000 + } + }, + "entity": "person", + "measure": "hmrc/state_pension_income_band_20_000_to_30_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.state_pension.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/state_pension_income_band_200_000_to_300_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_state_pension_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 200000 + } + }, + "entity": "person", + "measure": "hmrc/state_pension_income_band_200_000_to_300_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.state_pension.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/state_pension_income_band_30_000_to_40_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_state_pension_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 30000 + } + }, + "entity": "person", + "measure": "hmrc/state_pension_income_band_30_000_to_40_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.state_pension.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/state_pension_income_band_300_000_to_500_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_state_pension_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 300000 + } + }, + "entity": "person", + "measure": "hmrc/state_pension_income_band_300_000_to_500_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.state_pension.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/state_pension_income_band_40_000_to_50_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_state_pension_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 40000 + } + }, + "entity": "person", + "measure": "hmrc/state_pension_income_band_40_000_to_50_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.state_pension.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/state_pension_income_band_50_000_to_70_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_state_pension_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 50000 + } + }, + "entity": "person", + "measure": "hmrc/state_pension_income_band_50_000_to_70_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.state_pension.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/state_pension_income_band_500_000_to_1_000_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_state_pension_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 500000 + } + }, + "entity": "person", + "measure": "hmrc/state_pension_income_band_500_000_to_1_000_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.state_pension.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/state_pension_income_band_70_000_to_100_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_state_pension_amount", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 70000 + } + }, + "entity": "person", + "measure": "hmrc/state_pension_income_band_70_000_to_100_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.state_pension.amount_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/state_pension_count_income_band_100_000_to_150_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_state_pension_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 100000 + } + }, + "entity": "person", + "measure": "hmrc/state_pension_count_income_band_100_000_to_150_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.state_pension.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/state_pension_count_income_band_1_000_000_to_inf", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_state_pension_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 1000000 + } + }, + "entity": "person", + "measure": "hmrc/state_pension_count_income_band_1_000_000_to_inf", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.state_pension.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/state_pension_count_income_band_12_570_to_15_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_state_pension_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 12570 + } + }, + "entity": "person", + "measure": "hmrc/state_pension_count_income_band_12_570_to_15_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.state_pension.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/state_pension_count_income_band_15_000_to_20_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_state_pension_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 15000 + } + }, + "entity": "person", + "measure": "hmrc/state_pension_count_income_band_15_000_to_20_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.state_pension.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/state_pension_count_income_band_150_000_to_200_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_state_pension_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 150000 + } + }, + "entity": "person", + "measure": "hmrc/state_pension_count_income_band_150_000_to_200_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.state_pension.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/state_pension_count_income_band_20_000_to_30_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_state_pension_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 20000 + } + }, + "entity": "person", + "measure": "hmrc/state_pension_count_income_band_20_000_to_30_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.state_pension.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/state_pension_count_income_band_200_000_to_300_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_state_pension_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 200000 + } + }, + "entity": "person", + "measure": "hmrc/state_pension_count_income_band_200_000_to_300_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.state_pension.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/state_pension_count_income_band_30_000_to_40_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_state_pension_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 30000 + } + }, + "entity": "person", + "measure": "hmrc/state_pension_count_income_band_30_000_to_40_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.state_pension.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/state_pension_count_income_band_300_000_to_500_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_state_pension_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 300000 + } + }, + "entity": "person", + "measure": "hmrc/state_pension_count_income_band_300_000_to_500_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.state_pension.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/state_pension_count_income_band_40_000_to_50_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_state_pension_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 40000 + } + }, + "entity": "person", + "measure": "hmrc/state_pension_count_income_band_40_000_to_50_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.state_pension.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/state_pension_count_income_band_50_000_to_70_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_state_pension_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 50000 + } + }, + "entity": "person", + "measure": "hmrc/state_pension_count_income_band_50_000_to_70_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.state_pension.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/state_pension_count_income_band_500_000_to_1_000_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_state_pension_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 500000 + } + }, + "entity": "person", + "measure": "hmrc/state_pension_count_income_band_500_000_to_1_000_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.state_pension.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc/state_pension_count_income_band_70_000_to_100_000", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.spi_state_pension_count", + "groupby_dimension": "hmrc.total_income_band", + "geography_level": "country", + "geography_id": "K02000001", + "dimension_values": { + "total_income_lower_bound": 70000 + } + }, + "entity": "person", + "measure": "hmrc/state_pension_count_income_band_70_000_to_100_000", + "family": "hmrc_spi", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.spi.state_pension.count_by_total_income_band", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.taxpayers_total", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.cgt_taxpayers_total", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "person", + "measure": "hmrc/cgt_taxpayers", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.taxpayers_total", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "hmrc.cgt.gains_total", + "ledger_selector": { + "source_name": "hmrc", + "source_concept": "hmrc.cgt_gains_total", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "person", + "measure": "hmrc/capital_gains_total", + "family": "hmrc_cgt", + "period": 2025, + "metadata": { + "contract_target_id": "hmrc.cgt.gains_total", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2023", + "uprating_to_period": 2025 + }, + { + "name": "dwp.benefit_cap.capped_households", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_capped_households_total", + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "household", + "measure": "dwp/benefit_capped_households", + "family": "dwp_benefit_cap", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.benefit_cap.capped_households", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-11", + "uprating_to_period": 2025 + }, + { + "name": "dwp.esa_claimants", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.esa_claimants", + "dimension_values": { + "esa_claim_type": "all" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/esa_claimants", + "family": "dwp_legacy_benefits", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.esa_claimants", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-08", + "uprating_to_period": 2025 + }, + { + "name": "dwp.esa_contrib_claimants", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.esa_claimants", + "dimension_values": { + "esa_claim_type": "contributions_based" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "person", + "measure": "dwp/esa_contrib_claimants", + "family": "dwp_legacy_benefits", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.esa_contrib_claimants", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-08", + "uprating_to_period": 2025 + }, + { + "name": "dwp.esa_income_claimants", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.esa_claimants", + "dimension_values": { + "esa_claim_type": "income_related" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/esa_income_claimants", + "family": "dwp_legacy_benefits", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.esa_income_claimants", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-08", + "uprating_to_period": 2025 + }, + { + "name": "dwp.jsa_claimants", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.jsa_claimants", + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "person", + "measure": "dwp/jsa_claimants", + "family": "dwp_legacy_benefits", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.jsa_claimants", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-08", + "uprating_to_period": 2025 + }, + { + "name": "dwp.uc.households_children_1", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_number_of_children", + "dimension_values": { + "number_of_children": 1 + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "household", + "measure": "dwp/uc/claimants_with_1_children", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.households_children_1", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp.uc.households_children_2", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_number_of_children", + "dimension_values": { + "number_of_children": 2 + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "household", + "measure": "dwp/uc/claimants_with_2_children", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.households_children_2", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp.uc.households_children_3", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_number_of_children", + "dimension_values": { + "number_of_children": 3 + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "household", + "measure": "dwp/uc/claimants_with_3_children", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.households_children_3", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp.uc.households_children_4", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_number_of_children", + "dimension_values": { + "number_of_children": 4 + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "household", + "measure": "dwp/uc/claimants_with_4_children", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.households_children_4", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp.uc.households_children_5_or_more", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_number_of_children", + "dimension_values": { + "number_of_children": "5 or more" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "household", + "measure": "dwp/uc/claimants_with_5+_children", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.households_children_5_or_more", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp.uc.households_single_no_children", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_family_type", + "dimension_values": { + "family_type": "Single, no children" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "household", + "measure": "dwp/uc/claimants_single_no_children", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.households_single_no_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp.uc.households_single_with_children", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_family_type", + "dimension_values": { + "family_type": "Single, with children" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "household", + "measure": "dwp/uc/claimants_single_with_children", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.households_single_with_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp.uc.households_couple_no_children", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_family_type", + "dimension_values": { + "family_type": "Couple, no children" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "household", + "measure": "dwp/uc/claimants_couple_no_children", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.households_couple_no_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp.uc.households_couple_with_children", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_family_type", + "dimension_values": { + "family_type": "Couple, with children" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "household", + "measure": "dwp/uc/claimants_couple_with_children", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.households_couple_with_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_0_to_1_200", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, no children", + "monthly_award_amount_bands": "\u00a30.01 to \u00a3100.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/SINGLE_annual_payment_0_to_1_200", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_single", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_1_200_to_2_400", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, no children", + "monthly_award_amount_bands": "\u00a3100.01 to \u00a3200.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/SINGLE_annual_payment_1_200_to_2_400", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_single", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_12_000_to_13_200", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, no children", + "monthly_award_amount_bands": "\u00a31000.01 to \u00a31100.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/SINGLE_annual_payment_12_000_to_13_200", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_single", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_13_200_to_14_400", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, no children", + "monthly_award_amount_bands": "\u00a31100.01 to \u00a31200.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/SINGLE_annual_payment_13_200_to_14_400", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_single", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_14_400_to_15_600", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, no children", + "monthly_award_amount_bands": "\u00a31200.01 to \u00a31300.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/SINGLE_annual_payment_14_400_to_15_600", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_single", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_15_600_to_16_800", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, no children", + "monthly_award_amount_bands": "\u00a31300.01 to \u00a31400.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/SINGLE_annual_payment_15_600_to_16_800", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_single", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_16_800_to_18_000", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, no children", + "monthly_award_amount_bands": "\u00a31400.01 to \u00a31500.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/SINGLE_annual_payment_16_800_to_18_000", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_single", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_18_000_to_19_200", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, no children", + "monthly_award_amount_bands": "\u00a31500.01 to \u00a31600.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/SINGLE_annual_payment_18_000_to_19_200", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_single", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_19_200_to_20_400", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, no children", + "monthly_award_amount_bands": "\u00a31600.01 to \u00a31700.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/SINGLE_annual_payment_19_200_to_20_400", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_single", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_20_400_to_21_600", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, no children", + "monthly_award_amount_bands": "\u00a31700.01 to \u00a31800.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/SINGLE_annual_payment_20_400_to_21_600", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_single", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_21_600_to_22_800", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, no children", + "monthly_award_amount_bands": "\u00a31800.01 to \u00a31900.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/SINGLE_annual_payment_21_600_to_22_800", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_single", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_22_800_to_24_000", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, no children", + "monthly_award_amount_bands": "\u00a31900.01 to \u00a32000.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/SINGLE_annual_payment_22_800_to_24_000", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_single", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_2_400_to_3_600", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, no children", + "monthly_award_amount_bands": "\u00a3200.01 to \u00a3300.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/SINGLE_annual_payment_2_400_to_3_600", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_single", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_24_000_to_25_200", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, no children", + "monthly_award_amount_bands": "\u00a32000.01 to \u00a32100.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/SINGLE_annual_payment_24_000_to_25_200", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_single", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_25_200_to_26_400", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, no children", + "monthly_award_amount_bands": "\u00a32100.01 to \u00a32200.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/SINGLE_annual_payment_25_200_to_26_400", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_single", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_26_400_to_27_600", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, no children", + "monthly_award_amount_bands": "\u00a32200.01 to \u00a32300.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/SINGLE_annual_payment_26_400_to_27_600", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_single", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_27_600_to_28_800", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, no children", + "monthly_award_amount_bands": "\u00a32300.01 to \u00a32400.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/SINGLE_annual_payment_27_600_to_28_800", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_single", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_28_800_to_30_000", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, no children", + "monthly_award_amount_bands": "\u00a32400.01 to \u00a32500.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/SINGLE_annual_payment_28_800_to_30_000", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_single", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_3_600_to_4_800", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, no children", + "monthly_award_amount_bands": "\u00a3300.01 to \u00a3400.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/SINGLE_annual_payment_3_600_to_4_800", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_single", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_4_800_to_6_000", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, no children", + "monthly_award_amount_bands": "\u00a3400.01 to \u00a3500.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/SINGLE_annual_payment_4_800_to_6_000", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_single", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_6_000_to_7_200", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, no children", + "monthly_award_amount_bands": "\u00a3500.01 to \u00a3600.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/SINGLE_annual_payment_6_000_to_7_200", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_single", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_7_200_to_8_400", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, no children", + "monthly_award_amount_bands": "\u00a3600.01 to \u00a3700.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/SINGLE_annual_payment_7_200_to_8_400", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_single", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_8_400_to_9_600", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, no children", + "monthly_award_amount_bands": "\u00a3700.01 to \u00a3800.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/SINGLE_annual_payment_8_400_to_9_600", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_single", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_9_600_to_10_800", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, no children", + "monthly_award_amount_bands": "\u00a3800.01 to \u00a3900.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/SINGLE_annual_payment_9_600_to_10_800", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_single", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/SINGLE_annual_payment_10_800_to_12_000", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, no children", + "monthly_award_amount_bands": "\u00a3900.01 to \u00a31000.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/SINGLE_annual_payment_10_800_to_12_000", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_single", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_0_to_1_200", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, with children", + "monthly_award_amount_bands": "\u00a30.01 to \u00a3100.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_0_to_1_200", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_1_200_to_2_400", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, with children", + "monthly_award_amount_bands": "\u00a3100.01 to \u00a3200.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_1_200_to_2_400", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_12_000_to_13_200", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, with children", + "monthly_award_amount_bands": "\u00a31000.01 to \u00a31100.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_12_000_to_13_200", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_13_200_to_14_400", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, with children", + "monthly_award_amount_bands": "\u00a31100.01 to \u00a31200.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_13_200_to_14_400", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_14_400_to_15_600", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, with children", + "monthly_award_amount_bands": "\u00a31200.01 to \u00a31300.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_14_400_to_15_600", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_15_600_to_16_800", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, with children", + "monthly_award_amount_bands": "\u00a31300.01 to \u00a31400.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_15_600_to_16_800", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_16_800_to_18_000", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, with children", + "monthly_award_amount_bands": "\u00a31400.01 to \u00a31500.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_16_800_to_18_000", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_18_000_to_19_200", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, with children", + "monthly_award_amount_bands": "\u00a31500.01 to \u00a31600.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_18_000_to_19_200", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_19_200_to_20_400", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, with children", + "monthly_award_amount_bands": "\u00a31600.01 to \u00a31700.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_19_200_to_20_400", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_20_400_to_21_600", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, with children", + "monthly_award_amount_bands": "\u00a31700.01 to \u00a31800.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_20_400_to_21_600", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_21_600_to_22_800", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, with children", + "monthly_award_amount_bands": "\u00a31800.01 to \u00a31900.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_21_600_to_22_800", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_22_800_to_24_000", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, with children", + "monthly_award_amount_bands": "\u00a31900.01 to \u00a32000.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_22_800_to_24_000", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_2_400_to_3_600", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, with children", + "monthly_award_amount_bands": "\u00a3200.01 to \u00a3300.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_2_400_to_3_600", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_24_000_to_25_200", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, with children", + "monthly_award_amount_bands": "\u00a32000.01 to \u00a32100.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_24_000_to_25_200", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_25_200_to_26_400", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, with children", + "monthly_award_amount_bands": "\u00a32100.01 to \u00a32200.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_25_200_to_26_400", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_26_400_to_27_600", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, with children", + "monthly_award_amount_bands": "\u00a32200.01 to \u00a32300.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_26_400_to_27_600", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_27_600_to_28_800", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, with children", + "monthly_award_amount_bands": "\u00a32300.01 to \u00a32400.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_27_600_to_28_800", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_28_800_to_30_000", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, with children", + "monthly_award_amount_bands": "\u00a32400.01 to \u00a32500.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_28_800_to_30_000", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_3_600_to_4_800", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, with children", + "monthly_award_amount_bands": "\u00a3300.01 to \u00a3400.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_3_600_to_4_800", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_4_800_to_6_000", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, with children", + "monthly_award_amount_bands": "\u00a3400.01 to \u00a3500.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_4_800_to_6_000", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_6_000_to_7_200", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, with children", + "monthly_award_amount_bands": "\u00a3500.01 to \u00a3600.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_6_000_to_7_200", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_7_200_to_8_400", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, with children", + "monthly_award_amount_bands": "\u00a3600.01 to \u00a3700.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_7_200_to_8_400", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_8_400_to_9_600", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, with children", + "monthly_award_amount_bands": "\u00a3700.01 to \u00a3800.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_8_400_to_9_600", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_9_600_to_10_800", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, with children", + "monthly_award_amount_bands": "\u00a3800.01 to \u00a3900.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_9_600_to_10_800", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_10_800_to_12_000", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Single, with children", + "monthly_award_amount_bands": "\u00a3900.01 to \u00a31000.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/LONE_PARENT_annual_payment_10_800_to_12_000", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_lone_parent", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_0_to_1_200", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, no children", + "monthly_award_amount_bands": "\u00a30.01 to \u00a3100.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_0_to_1_200", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_1_200_to_2_400", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, no children", + "monthly_award_amount_bands": "\u00a3100.01 to \u00a3200.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_1_200_to_2_400", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_12_000_to_13_200", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, no children", + "monthly_award_amount_bands": "\u00a31000.01 to \u00a31100.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_12_000_to_13_200", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_13_200_to_14_400", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, no children", + "monthly_award_amount_bands": "\u00a31100.01 to \u00a31200.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_13_200_to_14_400", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_14_400_to_15_600", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, no children", + "monthly_award_amount_bands": "\u00a31200.01 to \u00a31300.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_14_400_to_15_600", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_15_600_to_16_800", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, no children", + "monthly_award_amount_bands": "\u00a31300.01 to \u00a31400.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_15_600_to_16_800", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_16_800_to_18_000", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, no children", + "monthly_award_amount_bands": "\u00a31400.01 to \u00a31500.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_16_800_to_18_000", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_18_000_to_19_200", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, no children", + "monthly_award_amount_bands": "\u00a31500.01 to \u00a31600.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_18_000_to_19_200", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_19_200_to_20_400", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, no children", + "monthly_award_amount_bands": "\u00a31600.01 to \u00a31700.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_19_200_to_20_400", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_20_400_to_21_600", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, no children", + "monthly_award_amount_bands": "\u00a31700.01 to \u00a31800.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_20_400_to_21_600", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_21_600_to_22_800", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, no children", + "monthly_award_amount_bands": "\u00a31800.01 to \u00a31900.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_21_600_to_22_800", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_22_800_to_24_000", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, no children", + "monthly_award_amount_bands": "\u00a31900.01 to \u00a32000.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_22_800_to_24_000", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_2_400_to_3_600", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, no children", + "monthly_award_amount_bands": "\u00a3200.01 to \u00a3300.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_2_400_to_3_600", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_24_000_to_25_200", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, no children", + "monthly_award_amount_bands": "\u00a32000.01 to \u00a32100.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_24_000_to_25_200", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_25_200_to_26_400", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, no children", + "monthly_award_amount_bands": "\u00a32100.01 to \u00a32200.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_25_200_to_26_400", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_26_400_to_27_600", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, no children", + "monthly_award_amount_bands": "\u00a32200.01 to \u00a32300.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_26_400_to_27_600", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_27_600_to_28_800", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, no children", + "monthly_award_amount_bands": "\u00a32300.01 to \u00a32400.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_27_600_to_28_800", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_28_800_to_30_000", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, no children", + "monthly_award_amount_bands": "\u00a32400.01 to \u00a32500.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_28_800_to_30_000", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_3_600_to_4_800", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, no children", + "monthly_award_amount_bands": "\u00a3300.01 to \u00a3400.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_3_600_to_4_800", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_4_800_to_6_000", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, no children", + "monthly_award_amount_bands": "\u00a3400.01 to \u00a3500.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_4_800_to_6_000", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_6_000_to_7_200", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, no children", + "monthly_award_amount_bands": "\u00a3500.01 to \u00a3600.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_6_000_to_7_200", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_7_200_to_8_400", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, no children", + "monthly_award_amount_bands": "\u00a3600.01 to \u00a3700.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_7_200_to_8_400", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_8_400_to_9_600", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, no children", + "monthly_award_amount_bands": "\u00a3700.01 to \u00a3800.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_8_400_to_9_600", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_9_600_to_10_800", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, no children", + "monthly_award_amount_bands": "\u00a3800.01 to \u00a3900.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_9_600_to_10_800", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_10_800_to_12_000", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, no children", + "monthly_award_amount_bands": "\u00a3900.01 to \u00a31000.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_10_800_to_12_000", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_no_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_0_to_1_200", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, with children", + "monthly_award_amount_bands": "\u00a30.01 to \u00a3100.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_0_to_1_200", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_1_200_to_2_400", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, with children", + "monthly_award_amount_bands": "\u00a3100.01 to \u00a3200.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_1_200_to_2_400", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_12_000_to_13_200", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, with children", + "monthly_award_amount_bands": "\u00a31000.01 to \u00a31100.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_12_000_to_13_200", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_13_200_to_14_400", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, with children", + "monthly_award_amount_bands": "\u00a31100.01 to \u00a31200.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_13_200_to_14_400", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_14_400_to_15_600", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, with children", + "monthly_award_amount_bands": "\u00a31200.01 to \u00a31300.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_14_400_to_15_600", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_15_600_to_16_800", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, with children", + "monthly_award_amount_bands": "\u00a31300.01 to \u00a31400.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_15_600_to_16_800", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_16_800_to_18_000", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, with children", + "monthly_award_amount_bands": "\u00a31400.01 to \u00a31500.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_16_800_to_18_000", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_18_000_to_19_200", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, with children", + "monthly_award_amount_bands": "\u00a31500.01 to \u00a31600.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_18_000_to_19_200", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_19_200_to_20_400", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, with children", + "monthly_award_amount_bands": "\u00a31600.01 to \u00a31700.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_19_200_to_20_400", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_20_400_to_21_600", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, with children", + "monthly_award_amount_bands": "\u00a31700.01 to \u00a31800.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_20_400_to_21_600", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_21_600_to_22_800", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, with children", + "monthly_award_amount_bands": "\u00a31800.01 to \u00a31900.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_21_600_to_22_800", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_22_800_to_24_000", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, with children", + "monthly_award_amount_bands": "\u00a31900.01 to \u00a32000.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_22_800_to_24_000", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_2_400_to_3_600", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, with children", + "monthly_award_amount_bands": "\u00a3200.01 to \u00a3300.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_2_400_to_3_600", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_24_000_to_25_200", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, with children", + "monthly_award_amount_bands": "\u00a32000.01 to \u00a32100.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_24_000_to_25_200", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_25_200_to_26_400", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, with children", + "monthly_award_amount_bands": "\u00a32100.01 to \u00a32200.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_25_200_to_26_400", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_26_400_to_27_600", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, with children", + "monthly_award_amount_bands": "\u00a32200.01 to \u00a32300.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_26_400_to_27_600", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_27_600_to_28_800", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, with children", + "monthly_award_amount_bands": "\u00a32300.01 to \u00a32400.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_27_600_to_28_800", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_28_800_to_30_000", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, with children", + "monthly_award_amount_bands": "\u00a32400.01 to \u00a32500.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_28_800_to_30_000", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_3_600_to_4_800", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, with children", + "monthly_award_amount_bands": "\u00a3300.01 to \u00a3400.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_3_600_to_4_800", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_4_800_to_6_000", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, with children", + "monthly_award_amount_bands": "\u00a3400.01 to \u00a3500.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_4_800_to_6_000", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_6_000_to_7_200", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, with children", + "monthly_award_amount_bands": "\u00a3500.01 to \u00a3600.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_6_000_to_7_200", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_7_200_to_8_400", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, with children", + "monthly_award_amount_bands": "\u00a3600.01 to \u00a3700.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_7_200_to_8_400", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_8_400_to_9_600", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, with children", + "monthly_award_amount_bands": "\u00a3700.01 to \u00a3800.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_8_400_to_9_600", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_9_600_to_10_800", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, with children", + "monthly_award_amount_bands": "\u00a3800.01 to \u00a3900.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_9_600_to_10_800", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_10_800_to_12_000", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_monthly_award_band", + "dimension_values": { + "family_type": "Couple, with children", + "monthly_award_amount_bands": "\u00a3900.01 to \u00a31000.00" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "benunit", + "measure": "dwp/uc_payment_dist/COUPLE_WITH_CHILDREN_annual_payment_10_800_to_12_000", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.payment_distribution_couple_with_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp.uc.scotland_households_child_under_1", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_households", + "groupby_dimension": "dwp.uc_youngest_child_age", + "dimension_values": { + "age_of_youngest_child_bands_and_single_year": 0 + }, + "geography_level": "country", + "geography_id": "S92000003" + }, + "entity": "household", + "measure": "dwp/scotland_uc_households_child_under_1", + "family": "dwp_universal_credit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.scotland_households_child_under_1", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-05", + "uprating_to_period": 2025 + }, + { + "name": "dwp.uc.two_child_limit.households_affected", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_tcl_headline_households_affected", + "dimension_values": { + "two_child_limit_status": "affected_3plus_children" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "household", + "measure": "dwp/uc/two_child_limit/households_affected", + "family": "dwp_two_child_limit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.two_child_limit.households_affected", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-04", + "uprating_to_period": 2025 + }, + { + "name": "dwp.uc.two_child_limit.children_affected", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_tcl_headline_children_affected_by_policy", + "dimension_values": { + "two_child_limit_status": "affected_3plus_children" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "household", + "measure": "dwp/uc/two_child_limit/children_affected", + "family": "dwp_two_child_limit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.two_child_limit.children_affected", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-04", + "uprating_to_period": 2025 + }, + { + "name": "dwp.uc.two_child_limit.children_in_affected_households", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_tcl_headline_children_within_affected_households", + "dimension_values": { + "two_child_limit_status": "affected_3plus_children" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "household", + "measure": "dwp/uc/two_child_limit/children_in_affected_households", + "family": "dwp_two_child_limit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.two_child_limit.children_in_affected_households", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-04", + "uprating_to_period": 2025 + }, + { + "name": "dwp.uc.two_child_limit.households_3_children", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_tcl_households_by_children_3", + "dimension_values": { + "two_child_limit_status": "affected_3plus_children" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "household", + "measure": "dwp/uc/two_child_limit/3_children_households", + "family": "dwp_two_child_limit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.two_child_limit.households_3_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-04", + "uprating_to_period": 2025 + }, + { + "name": "dwp.uc.two_child_limit.children_in_3_children_households", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_tcl_children_by_children_3", + "dimension_values": { + "two_child_limit_status": "affected_3plus_children" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "household", + "measure": "dwp/uc/two_child_limit/3_children_households_total_children", + "family": "dwp_two_child_limit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.two_child_limit.children_in_3_children_households", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-04", + "uprating_to_period": 2025 + }, + { + "name": "dwp.uc.two_child_limit.households_4_children", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_tcl_households_by_children_4", + "dimension_values": { + "two_child_limit_status": "affected_3plus_children" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "household", + "measure": "dwp/uc/two_child_limit/4_children_households", + "family": "dwp_two_child_limit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.two_child_limit.households_4_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-04", + "uprating_to_period": 2025 + }, + { + "name": "dwp.uc.two_child_limit.children_in_4_children_households", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_tcl_children_by_children_4", + "dimension_values": { + "two_child_limit_status": "affected_3plus_children" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "household", + "measure": "dwp/uc/two_child_limit/4_children_households_total_children", + "family": "dwp_two_child_limit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.two_child_limit.children_in_4_children_households", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-04", + "uprating_to_period": 2025 + }, + { + "name": "dwp.uc.two_child_limit.households_5_children", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_tcl_households_by_children_5", + "dimension_values": { + "two_child_limit_status": "affected_3plus_children" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "household", + "measure": "dwp/uc/two_child_limit/5_children_households", + "family": "dwp_two_child_limit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.two_child_limit.households_5_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-04", + "uprating_to_period": 2025 + }, + { + "name": "dwp.uc.two_child_limit.children_in_5_children_households", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_tcl_children_by_children_5", + "dimension_values": { + "two_child_limit_status": "affected_3plus_children" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "household", + "measure": "dwp/uc/two_child_limit/5_children_households_total_children", + "family": "dwp_two_child_limit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.two_child_limit.children_in_5_children_households", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-04", + "uprating_to_period": 2025 + }, + { + "name": "dwp.uc.two_child_limit.households_6_plus_children", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_tcl_households_by_children_6_plus", + "dimension_values": { + "two_child_limit_status": "affected_3plus_children" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "household", + "measure": "dwp/uc/two_child_limit/6_children_households", + "family": "dwp_two_child_limit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.two_child_limit.households_6_plus_children", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-04", + "uprating_to_period": 2025 + }, + { + "name": "dwp.uc.two_child_limit.children_in_6_plus_children_households", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_tcl_children_by_children_6_plus", + "dimension_values": { + "two_child_limit_status": "affected_3plus_children" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "household", + "measure": "dwp/uc/two_child_limit/6_children_households_total_children", + "family": "dwp_two_child_limit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.two_child_limit.children_in_6_plus_children_households", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-04", + "uprating_to_period": 2025 + }, + { + "name": "dwp.uc.two_child_limit.households_claimant_pip", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_tcl_households_by_disability_claimant_pip", + "dimension_values": { + "two_child_limit_status": "affected_3plus_children" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "household", + "measure": "dwp/uc/two_child_limit/adult_pip_households", + "family": "dwp_two_child_limit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.two_child_limit.households_claimant_pip", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-04", + "uprating_to_period": 2025 + }, + { + "name": "dwp.uc.two_child_limit.children_claimant_pip", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_tcl_children_by_disability_claimant_pip", + "dimension_values": { + "two_child_limit_status": "affected_3plus_children" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "household", + "measure": "dwp/uc/two_child_limit/adult_pip_children", + "family": "dwp_two_child_limit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.two_child_limit.children_claimant_pip", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-04", + "uprating_to_period": 2025 + }, + { + "name": "dwp.uc.two_child_limit.households_disabled_child_element", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_tcl_households_by_disability_disabled_child_element", + "dimension_values": { + "two_child_limit_status": "affected_3plus_children" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "household", + "measure": "dwp/uc/two_child_limit/disabled_child_element_households", + "family": "dwp_two_child_limit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.two_child_limit.households_disabled_child_element", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-04", + "uprating_to_period": 2025 + }, + { + "name": "dwp.uc.two_child_limit.children_disabled_child_element", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_tcl_children_by_disability_disabled_child_element", + "dimension_values": { + "two_child_limit_status": "affected_3plus_children" + }, + "geography_level": "country", + "geography_id": "K03000001" + }, + "entity": "household", + "measure": "dwp/uc/two_child_limit/disabled_child_element_children", + "family": "dwp_two_child_limit", + "period": 2025, + "metadata": { + "contract_target_id": "dwp.uc.two_child_limit.children_disabled_child_element", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-04", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.uk_total", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimensions": [], + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "person", + "measure": "ons/uk_population", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.uk_total", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.age_0_9_by_region", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "age": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age" + ] + }, + "entity": "person", + "measure": "ons/regional_age/0_9", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.age_0_9_by_region", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.age_10_19_by_region", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "age": [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age" + ] + }, + "entity": "person", + "measure": "ons/regional_age/10_19", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.age_10_19_by_region", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.age_20_29_by_region", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "age": [ + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age" + ] + }, + "entity": "person", + "measure": "ons/regional_age/20_29", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.age_20_29_by_region", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.age_30_39_by_region", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "age": [ + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age" + ] + }, + "entity": "person", + "measure": "ons/regional_age/30_39", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.age_30_39_by_region", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.age_40_49_by_region", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "age": [ + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age" + ] + }, + "entity": "person", + "measure": "ons/regional_age/40_49", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.age_40_49_by_region", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.age_50_59_by_region", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "age": [ + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age" + ] + }, + "entity": "person", + "measure": "ons/regional_age/50_59", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.age_50_59_by_region", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.age_60_69_by_region", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "age": [ + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age" + ] + }, + "entity": "person", + "measure": "ons/regional_age/60_69", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.age_60_69_by_region", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.age_70_79_by_region", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "age": [ + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age" + ] + }, + "entity": "person", + "measure": "ons/regional_age/70_79", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.age_70_79_by_region", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.age_80_89_by_region", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "age": [ + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age" + ] + }, + "entity": "person", + "measure": "ons/regional_age/80_89", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.age_80_89_by_region", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.female_0_4", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "female", + "age": [ + 0, + 1, + 2, + 3, + 4 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/female_0_4", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.female_0_4", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.female_10_14", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "female", + "age": [ + 10, + 11, + 12, + 13, + 14 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/female_10_14", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.female_10_14", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.female_15_19", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "female", + "age": [ + 15, + 16, + 17, + 18, + 19 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/female_15_19", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.female_15_19", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.female_20_24", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "female", + "age": [ + 20, + 21, + 22, + 23, + 24 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/female_20_24", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.female_20_24", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.female_25_29", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "female", + "age": [ + 25, + 26, + 27, + 28, + 29 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/female_25_29", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.female_25_29", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.female_30_34", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "female", + "age": [ + 30, + 31, + 32, + 33, + 34 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/female_30_34", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.female_30_34", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.female_35_39", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "female", + "age": [ + 35, + 36, + 37, + 38, + 39 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/female_35_39", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.female_35_39", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.female_40_44", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "female", + "age": [ + 40, + 41, + 42, + 43, + 44 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/female_40_44", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.female_40_44", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.female_45_49", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "female", + "age": [ + 45, + 46, + 47, + 48, + 49 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/female_45_49", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.female_45_49", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.female_50_54", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "female", + "age": [ + 50, + 51, + 52, + 53, + 54 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/female_50_54", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.female_50_54", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.female_55_59", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "female", + "age": [ + 55, + 56, + 57, + 58, + 59 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/female_55_59", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.female_55_59", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.female_5_9", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "female", + "age": [ + 5, + 6, + 7, + 8, + 9 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/female_5_9", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.female_5_9", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.female_60_64", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "female", + "age": [ + 60, + 61, + 62, + 63, + 64 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/female_60_64", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.female_60_64", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.female_65_69", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "female", + "age": [ + 65, + 66, + 67, + 68, + 69 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/female_65_69", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.female_65_69", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.female_70_74", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "female", + "age": [ + 70, + 71, + 72, + 73, + 74 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/female_70_74", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.female_70_74", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.female_75_79", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "female", + "age": [ + 75, + 76, + 77, + 78, + 79 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/female_75_79", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.female_75_79", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.female_80_84", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "female", + "age": [ + 80, + 81, + 82, + 83, + 84 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/female_80_84", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.female_80_84", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.female_85_89", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "female", + "age": [ + 85, + 86, + 87, + 88, + 89 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/female_85_89", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.female_85_89", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.female_90_plus", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "female", + "age": [ + "90_plus" + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/female_90_plus", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.female_90_plus", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.male_0_4", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "male", + "age": [ + 0, + 1, + 2, + 3, + 4 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/male_0_4", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.male_0_4", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.male_10_14", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "male", + "age": [ + 10, + 11, + 12, + 13, + 14 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/male_10_14", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.male_10_14", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.male_15_19", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "male", + "age": [ + 15, + 16, + 17, + 18, + 19 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/male_15_19", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.male_15_19", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.male_20_24", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "male", + "age": [ + 20, + 21, + 22, + 23, + 24 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/male_20_24", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.male_20_24", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.male_25_29", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "male", + "age": [ + 25, + 26, + 27, + 28, + 29 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/male_25_29", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.male_25_29", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.male_30_34", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "male", + "age": [ + 30, + 31, + 32, + 33, + 34 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/male_30_34", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.male_30_34", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.male_35_39", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "male", + "age": [ + 35, + 36, + 37, + 38, + 39 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/male_35_39", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.male_35_39", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.male_40_44", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "male", + "age": [ + 40, + 41, + 42, + 43, + 44 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/male_40_44", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.male_40_44", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.male_45_49", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "male", + "age": [ + 45, + 46, + 47, + 48, + 49 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/male_45_49", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.male_45_49", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.male_50_54", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "male", + "age": [ + 50, + 51, + 52, + 53, + 54 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/male_50_54", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.male_50_54", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.male_55_59", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "male", + "age": [ + 55, + 56, + 57, + 58, + 59 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/male_55_59", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.male_55_59", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.male_5_9", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "male", + "age": [ + 5, + 6, + 7, + 8, + 9 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/male_5_9", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.male_5_9", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.male_60_64", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "male", + "age": [ + 60, + 61, + 62, + 63, + 64 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/male_60_64", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.male_60_64", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.male_65_69", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "male", + "age": [ + 65, + 66, + 67, + 68, + 69 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/male_65_69", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.male_65_69", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.male_70_74", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "male", + "age": [ + 70, + 71, + 72, + 73, + 74 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/male_70_74", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.male_70_74", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.male_75_79", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "male", + "age": [ + 75, + 76, + 77, + 78, + 79 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] }, "entity": "person", - "measure": "obr/private_school_students", - "family": "isc", - "period": 2023, + "measure": "ons/male_75_79", + "family": "ons_population", + "period": 2025, "metadata": { - "contract_target_id": "isc.private_school_students", + "contract_target_id": "ons.population.male_75_79", "measure_kind": "prepared_column" - } + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.male_80_84", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "male", + "age": [ + 80, + 81, + 82, + 83, + 84 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/male_80_84", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.male_80_84", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.male_85_89", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "male", + "age": [ + 85, + 86, + 87, + 88, + 89 + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/male_85_89", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.male_85_89", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.male_90_plus", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "male", + "age": [ + "90_plus" + ] + }, + "geography_level": "country", + "geography_id": "K02000001", + "dimensions": [ + "age", + "sex" + ] + }, + "entity": "person", + "measure": "ons/male_90_plus", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.male_90_plus", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.scotland_children_under_16", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "age": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15 + ] + }, + "geography_level": "country", + "geography_id": "S92000003", + "dimensions": [ + "age" + ] + }, + "entity": "person", + "measure": "ons/scotland_children_under_16", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.scotland_children_under_16", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.population.scotland_babies_under_1", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "age": [ + 0 + ] + }, + "geography_level": "country", + "geography_id": "S92000003", + "dimensions": [ + "age" + ] + }, + "entity": "person", + "measure": "ons/scotland_babies_under_1", + "family": "ons_population", + "period": 2025, + "metadata": { + "contract_target_id": "ons.population.scotland_babies_under_1", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 }, { "name": "ons.household_composition.lone_households_under_65", @@ -30,12 +8774,13 @@ "dimension_values": { "household_type": "lone_households_under_65" }, - "geography_level": "country" + "geography_level": "country", + "geography_id": "K02000001" }, "entity": "household", "measure": "ons/lone_households_under_65", "family": "ons_household_composition", - "period": 2023, + "period": 2025, "metadata": { "contract_target_id": "ons.household_composition.lone_households_under_65", "measure_kind": "prepared_column" @@ -50,12 +8795,13 @@ "dimension_values": { "household_type": "lone_households_over_65" }, - "geography_level": "country" + "geography_level": "country", + "geography_id": "K02000001" }, "entity": "household", "measure": "ons/lone_households_over_65", "family": "ons_household_composition", - "period": 2023, + "period": 2025, "metadata": { "contract_target_id": "ons.household_composition.lone_households_over_65", "measure_kind": "prepared_column" @@ -70,12 +8816,13 @@ "dimension_values": { "household_type": "unrelated_adult_households" }, - "geography_level": "country" + "geography_level": "country", + "geography_id": "K02000001" }, "entity": "household", "measure": "ons/unrelated_adult_households", "family": "ons_household_composition", - "period": 2023, + "period": 2025, "metadata": { "contract_target_id": "ons.household_composition.unrelated_adult_households", "measure_kind": "prepared_column" @@ -90,12 +8837,13 @@ "dimension_values": { "household_type": "couple_no_children_households" }, - "geography_level": "country" + "geography_level": "country", + "geography_id": "K02000001" }, "entity": "household", "measure": "ons/couple_no_children_households", "family": "ons_household_composition", - "period": 2023, + "period": 2025, "metadata": { "contract_target_id": "ons.household_composition.couple_no_children_households", "measure_kind": "prepared_column" @@ -110,12 +8858,13 @@ "dimension_values": { "household_type": "couple_under_3_children_households" }, - "geography_level": "country" + "geography_level": "country", + "geography_id": "K02000001" }, "entity": "household", "measure": "ons/couple_under_3_children_households", "family": "ons_household_composition", - "period": 2023, + "period": 2025, "metadata": { "contract_target_id": "ons.household_composition.couple_under_3_children_households", "measure_kind": "prepared_column" @@ -130,12 +8879,13 @@ "dimension_values": { "household_type": "couple_3_plus_children_households" }, - "geography_level": "country" + "geography_level": "country", + "geography_id": "K02000001" }, "entity": "household", "measure": "ons/couple_3_plus_children_households", "family": "ons_household_composition", - "period": 2023, + "period": 2025, "metadata": { "contract_target_id": "ons.household_composition.couple_3_plus_children_households", "measure_kind": "prepared_column" @@ -150,12 +8900,13 @@ "dimension_values": { "household_type": "couple_non_dependent_children_only_households" }, - "geography_level": "country" + "geography_level": "country", + "geography_id": "K02000001" }, "entity": "household", "measure": "ons/couple_non_dependent_children_only_households", "family": "ons_household_composition", - "period": 2023, + "period": 2025, "metadata": { "contract_target_id": "ons.household_composition.couple_non_dependent_children_only_households", "measure_kind": "prepared_column" @@ -170,12 +8921,13 @@ "dimension_values": { "household_type": "lone_parent_dependent_children_households" }, - "geography_level": "country" + "geography_level": "country", + "geography_id": "K02000001" }, "entity": "household", "measure": "ons/lone_parent_dependent_children_households", "family": "ons_household_composition", - "period": 2023, + "period": 2025, "metadata": { "contract_target_id": "ons.household_composition.lone_parent_dependent_children_households", "measure_kind": "prepared_column" @@ -190,12 +8942,13 @@ "dimension_values": { "household_type": "lone_parent_non_dependent_children_households" }, - "geography_level": "country" + "geography_level": "country", + "geography_id": "K02000001" }, "entity": "household", "measure": "ons/lone_parent_non_dependent_children_households", "family": "ons_household_composition", - "period": 2023, + "period": 2025, "metadata": { "contract_target_id": "ons.household_composition.lone_parent_non_dependent_children_households", "measure_kind": "prepared_column" @@ -210,28 +8963,201 @@ "dimension_values": { "household_type": "multi_family_households" }, - "geography_level": "country" + "geography_level": "country", + "geography_id": "K02000001" }, "entity": "household", "measure": "ons/multi_family_households", "family": "ons_household_composition", - "period": 2023, + "period": 2025, "metadata": { "contract_target_id": "ons.household_composition.multi_family_households", "measure_kind": "prepared_column" } }, + { + "name": "voa.council_tax_stock.band_a", + "ledger_selector": { + "source_name": "voa", + "source_measure_id": "band_a", + "geography_level": "country", + "geography_id": "E92000001" + }, + "entity": "household", + "measure": "voa/council_tax/band_a", + "family": "council_tax_stock", + "period": 2025, + "metadata": { + "contract_target_id": "voa.council_tax_stock.band_a", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-03", + "uprating_to_period": 2025 + }, + { + "name": "voa.council_tax_stock.band_b", + "ledger_selector": { + "source_name": "voa", + "source_measure_id": "band_b", + "geography_level": "country", + "geography_id": "E92000001" + }, + "entity": "household", + "measure": "voa/council_tax/band_b", + "family": "council_tax_stock", + "period": 2025, + "metadata": { + "contract_target_id": "voa.council_tax_stock.band_b", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-03", + "uprating_to_period": 2025 + }, + { + "name": "voa.council_tax_stock.band_c", + "ledger_selector": { + "source_name": "voa", + "source_measure_id": "band_c", + "geography_level": "country", + "geography_id": "E92000001" + }, + "entity": "household", + "measure": "voa/council_tax/band_c", + "family": "council_tax_stock", + "period": 2025, + "metadata": { + "contract_target_id": "voa.council_tax_stock.band_c", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-03", + "uprating_to_period": 2025 + }, + { + "name": "voa.council_tax_stock.band_d", + "ledger_selector": { + "source_name": "voa", + "source_measure_id": "band_d", + "geography_level": "country", + "geography_id": "E92000001" + }, + "entity": "household", + "measure": "voa/council_tax/band_d", + "family": "council_tax_stock", + "period": 2025, + "metadata": { + "contract_target_id": "voa.council_tax_stock.band_d", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-03", + "uprating_to_period": 2025 + }, + { + "name": "voa.council_tax_stock.band_e", + "ledger_selector": { + "source_name": "voa", + "source_measure_id": "band_e", + "geography_level": "country", + "geography_id": "E92000001" + }, + "entity": "household", + "measure": "voa/council_tax/band_e", + "family": "council_tax_stock", + "period": 2025, + "metadata": { + "contract_target_id": "voa.council_tax_stock.band_e", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-03", + "uprating_to_period": 2025 + }, + { + "name": "voa.council_tax_stock.band_f", + "ledger_selector": { + "source_name": "voa", + "source_measure_id": "band_f", + "geography_level": "country", + "geography_id": "E92000001" + }, + "entity": "household", + "measure": "voa/council_tax/band_f", + "family": "council_tax_stock", + "period": 2025, + "metadata": { + "contract_target_id": "voa.council_tax_stock.band_f", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-03", + "uprating_to_period": 2025 + }, + { + "name": "voa.council_tax_stock.band_g", + "ledger_selector": { + "source_name": "voa", + "source_measure_id": "band_g", + "geography_level": "country", + "geography_id": "E92000001" + }, + "entity": "household", + "measure": "voa/council_tax/band_g", + "family": "council_tax_stock", + "period": 2025, + "metadata": { + "contract_target_id": "voa.council_tax_stock.band_g", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-03", + "uprating_to_period": 2025 + }, + { + "name": "voa.council_tax_stock.band_h", + "ledger_selector": { + "source_name": "voa", + "source_measure_id": "band_h", + "geography_level": "country", + "geography_id": "E92000001" + }, + "entity": "household", + "measure": "voa/council_tax/band_h", + "family": "council_tax_stock", + "period": 2025, + "metadata": { + "contract_target_id": "voa.council_tax_stock.band_h", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-03", + "uprating_to_period": 2025 + }, + { + "name": "voa.council_tax_stock.total", + "ledger_selector": { + "source_name": "voa", + "source_measure_id": "all_properties", + "geography_level": "country", + "geography_id": "E92000001" + }, + "entity": "household", + "measure": "voa/council_tax/total", + "family": "council_tax_stock", + "period": 2025, + "metadata": { + "contract_target_id": "voa.council_tax_stock.total", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2025-03", + "uprating_to_period": 2025 + }, { "name": "ons.savings_interest_income", "ledger_selector": { "source_name": "ons", "source_concept": "ons.ukea_haxv", - "geography_level": "country" + "geography_level": "country", + "geography_id": "K02000001" }, "entity": "person", "measure": "ons/savings_interest_income", "family": "ons_national_accounts", - "period": 2023, + "period": 2025, "metadata": { "contract_target_id": "ons.savings_interest_income", "measure_kind": "prepared_column" @@ -242,48 +9168,214 @@ "ledger_selector": { "source_name": "ons", "source_measure_id": "total_public_sector", - "geography_level": "country" + "geography_level": "country", + "geography_id": "K02000001" }, "entity": "person", "measure": "ons/public_sector_employment", "family": "ons_employment", - "period": 2023, + "period": 2025, "metadata": { "contract_target_id": "ons.public_sector_employment", "measure_kind": "prepared_column" - } + }, + "uprating_from_period": "2024-12", + "uprating_to_period": 2025 }, { - "name": "dwp.uc.households", + "name": "ons.land.land_value", "ledger_selector": { - "source_name": "dwp", - "source_concept": "dwp.uc_benefit_units", - "geography_level": "country" + "source_name": "ons", + "source_concept": "ons.e44r", + "geography_level": "country", + "geography_id": "K02000001" }, - "entity": "benunit", - "measure": "dwp/uc/households", - "family": "dwp_universal_credit", + "entity": "household", + "measure": "ons/land_value", + "family": "ons_land", "period": 2025, "metadata": { - "contract_target_id": "dwp.uc.households", + "contract_target_id": "ons.land.land_value", "measure_kind": "prepared_column" - } + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 }, { - "name": "obr.universal_credit_in_cap", + "name": "ons.land.household_land_value", "ledger_selector": { - "source_name": "obr", - "source_concept": "obr.universal_credit_in_cap", - "geography_level": "country" + "source_name": "ons", + "source_concept": "ons.e44n", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "household", + "measure": "ons/household_land_value", + "family": "ons_land", + "period": 2025, + "metadata": { + "contract_target_id": "ons.land.household_land_value", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "ons.land.corporate_land_value", + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.e43b", + "geography_level": "country", + "geography_id": "K02000001" + }, + "entity": "household", + "measure": "ons/corporate_land_value", + "family": "ons_land", + "period": 2025, + "metadata": { + "contract_target_id": "ons.land.corporate_land_value", + "measure_kind": "prepared_column" + }, + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "slc.repayments.england_total_higher_education", + "ledger_selector": { + "source_name": "slc", + "groupby_dimension": "slc.repayment_plan", + "source_measure_id": [ + "total_higher_education" + ], + "geography_level": "country", + "geography_id": "E92000001" + }, + "entity": "person", + "measure": "slc/student_loan_repayment/england", + "family": "slc_repayments", + "period": 2025, + "metadata": { + "contract_target_id": "slc.repayments.england_total_higher_education", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "slc.repayments.england_plan_1", + "ledger_selector": { + "source_name": "slc", + "groupby_dimension": "slc.repayment_plan", + "source_measure_id": [ + "plan_1" + ], + "geography_level": "country", + "geography_id": "E92000001" + }, + "entity": "person", + "measure": "slc/student_loan_repayment/england/plan_1", + "family": "slc_repayments", + "period": 2025, + "metadata": { + "contract_target_id": "slc.repayments.england_plan_1", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "slc.repayments.england_plan_2", + "ledger_selector": { + "source_name": "slc", + "groupby_dimension": "slc.repayment_plan", + "source_measure_id": [ + "plan_2_full_time", + "plan_2_part_time" + ], + "geography_level": "country", + "geography_id": "E92000001" + }, + "entity": "person", + "measure": "slc/student_loan_repayment/england/plan_2", + "family": "slc_repayments", + "period": 2025, + "metadata": { + "contract_target_id": "slc.repayments.england_plan_2", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "slc.repayments.england_postgraduate", + "ledger_selector": { + "source_name": "slc", + "groupby_dimension": "slc.repayment_plan", + "source_measure_id": [ + "plan_3_postgraduate_masters", + "plan_3_postgraduate_doctoral" + ], + "geography_level": "country", + "geography_id": "E92000001" + }, + "entity": "person", + "measure": "slc/student_loan_repayment/england/postgraduate", + "family": "slc_repayments", + "period": 2025, + "metadata": { + "contract_target_id": "slc.repayments.england_postgraduate", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "slc.repayments.england_plan_5", + "ledger_selector": { + "source_name": "slc", + "groupby_dimension": "slc.repayment_plan", + "source_measure_id": [ + "plan_5_full_time", + "plan_5_part_time" + ], + "geography_level": "country", + "geography_id": "E92000001" + }, + "entity": "person", + "measure": "slc/student_loan_repayment/england/plan_5", + "family": "slc_repayments", + "period": 2025, + "metadata": { + "contract_target_id": "slc.repayments.england_plan_5", + "measure_kind": "prepared_column" + }, + "value_operation": "sum", + "uprating_from_period": "2024", + "uprating_to_period": 2025 + }, + { + "name": "dwp.uc.households", + "ledger_selector": { + "source_name": "dwp", + "source_concept": "dwp.uc_benefit_units", + "geography_level": "country", + "geography_id": "K03000001" }, "entity": "benunit", - "measure": "obr/universal_credit_in_cap", - "family": "obr", + "measure": "dwp/uc/households", + "family": "dwp_universal_credit", "period": 2025, "metadata": { - "contract_target_id": "obr.universal_credit_in_cap", + "contract_target_id": "dwp.uc.households", "measure_kind": "prepared_column" - } + }, + "value_operation": "calendar_year_average", + "uprating_from_period": "2025-12", + "uprating_to_period": 2025 } ] } diff --git a/packages/microcosm-build/src/microcosm/build/uk/uk_national_targets.json b/packages/microcosm-build/src/microcosm/build/uk/uk_national_targets.json index a018711a6..f36048e62 100644 --- a/packages/microcosm-build/src/microcosm/build/uk/uk_national_targets.json +++ b/packages/microcosm-build/src/microcosm/build/uk/uk_national_targets.json @@ -387,7 +387,7 @@ "ons/female_70_74": "ons.population.female_70_74", "ons/female_75_79": "ons.population.female_75_79", "ons/female_80_84": "ons.population.female_80_84", - "ons/female_85_90": "ons.population.female_85_90", + "ons/female_85_90": "ons.population.female_85_89", "ons/household_land_value": "ons.land.household_land_value", "ons/land_value": "ons.land.land_value", "ons/london_age_0_9": "ons.population.age_0_9_by_region", @@ -420,7 +420,7 @@ "ons/male_70_74": "ons.population.male_70_74", "ons/male_75_79": "ons.population.male_75_79", "ons/male_80_84": "ons.population.male_80_84", - "ons/male_85_90": "ons.population.male_85_90", + "ons/male_85_90": "ons.population.male_85_89", "ons/multi_family_households": "ons.household_composition.multi_family_households", "ons/north_east_age_0_9": "ons.population.age_0_9_by_region", "ons/north_east_age_10_19": "ons.population.age_10_19_by_region", @@ -674,15 +674,41 @@ "ons/tenure_england_total": "England tenure counts come from an LA-grain workbook uk-data code-sums; ruled non-portable as national facts on chronicle#133 - moved to the wave-3 LA package (chronicle#134)." }, "unmapped_declarations": { - "hmrc.salary_sacrifice.it_relief_basic_rate": "New declaration backed by chronicle#139 salary-sacrifice facts; the incumbent source CSV is 410-Gone at ebf733c and its rows were silently suppressed by the bare-except drop in build_loss_matrix.py:376-394.", - "hmrc.salary_sacrifice.it_relief_higher_rate": "New declaration backed by chronicle#139 salary-sacrifice facts; the incumbent source CSV is 410-Gone at ebf733c and its rows were silently suppressed by the bare-except drop in build_loss_matrix.py:376-394.", - "hmrc.salary_sacrifice.it_relief_additional_rate": "New declaration backed by chronicle#139 salary-sacrifice facts; the incumbent source CSV is 410-Gone at ebf733c and its rows were silently suppressed by the bare-except drop in build_loss_matrix.py:376-394." + "hmrc.salary_sacrifice.it_relief_basic_rate": "New declaration backed by chronicle#139 salary-sacrifice facts; the incumbent source CSV is still 410-Gone at 12a1e028 and its rows are silently suppressed by the bare-except drop in build_loss_matrix.py:376-394.", + "hmrc.salary_sacrifice.it_relief_higher_rate": "New declaration backed by chronicle#139 salary-sacrifice facts; the incumbent source CSV is still 410-Gone at 12a1e028 and its rows are silently suppressed by the bare-except drop in build_loss_matrix.py:376-394.", + "hmrc.salary_sacrifice.it_relief_additional_rate": "New declaration backed by chronicle#139 salary-sacrifice facts; the incumbent source CSV is still 410-Gone at 12a1e028 and its rows are silently suppressed by the bare-except drop in build_loss_matrix.py:376-394.", + "ons.population.female_90_plus": "María ruling 2026-08-21: split the incumbent terminal sex bands into uniform five-year 85_89 bands plus 90_plus tails. The incumbent six-year 85_90 terminal rows leave ages 91+ unconstrained; Microcosm keeps the uniform five-year bands and constrains the tail. The 85_89-vs-85_90 value gap is the single-age-90 share and is a signed semantic difference.", + "ons.population.male_90_plus": "María ruling 2026-08-21: split the incumbent terminal sex bands into uniform five-year 85_89 bands plus 90_plus tails. The incumbent six-year 85_90 terminal rows leave ages 91+ unconstrained; Microcosm keeps the uniform five-year bands and constrains the tail. The 85_89-vs-85_90 value gap is the single-age-90 share and is a signed semantic difference." + }, + "suppressed_ancestors": { + "hmrc/salary_sacrifice_it_relief_basic_rate": { + "contract_target_id": "hmrc.salary_sacrifice.it_relief_basic_rate", + "rationale": "The incumbent source CSV is still 410-Gone at 12a1e028 and its rows are silently suppressed by the bare-except drop in build_loss_matrix.py:376-394." + }, + "hmrc/salary_sacrifice_it_relief_higher_rate": { + "contract_target_id": "hmrc.salary_sacrifice.it_relief_higher_rate", + "rationale": "The incumbent source CSV is still 410-Gone at 12a1e028 and its rows are silently suppressed by the bare-except drop in build_loss_matrix.py:376-394." + }, + "hmrc/salary_sacrifice_it_relief_additional_rate": { + "contract_target_id": "hmrc.salary_sacrifice.it_relief_additional_rate", + "rationale": "The incumbent source CSV is still 410-Gone at 12a1e028 and its rows are silently suppressed by the bare-except drop in build_loss_matrix.py:376-394." + }, + "hmrc/salary_sacrifice_employee_nics_relief": { + "contract_target_id": "hmrc.salary_sacrifice.nics_relief_employee", + "rationale": "The incumbent source CSV is still 410-Gone at 12a1e028 and its rows are silently suppressed by the bare-except drop in build_loss_matrix.py:376-394." + }, + "hmrc/salary_sacrifice_employer_nics_relief": { + "contract_target_id": "hmrc.salary_sacrifice.nics_relief_employer", + "rationale": "The incumbent source CSV is still 410-Gone at 12a1e028 and its rows are silently suppressed by the bare-except drop in build_loss_matrix.py:376-394." + } }, "accounting_notes": { "v1_56_16_refresh": "Compared with ebf733c, the governed registry surface adds dwp/uc/households. The four deleted universal-credit jobseeker dispatch names were not registry rows in the carried contract, so there were no parity entries to remove; obr/jobseekers_allowance remains a distinct published JSA expenditure target.", "cross_level_duplicate_names": "Name-only identity flattens two-level emissions for ons/uk_population, ons/scotland_children_under_16, and ons/scotland_babies_under_1.", - "two_child_limit_year_surface": "The 15 dwp/uc/two_child_limit/* rows are 2026-only; the incumbent effective surface is 636 at calibration year 2025 and 651 at 2026. This is microcosm#622 Fixture-B input because the incumbent cannot self-report the year-specific surface.", - "geography_level_order_canonicalization": "The 9 voa.council_tax_stock.* rows use country, region order to match the rest of the contract; consumers use membership only." + "salary_sacrifice_obr_near_equivalents": "The contract separately maps OBR near-equivalents obr/salary_sacrifice_employee_ni_relief and obr/salary_sacrifice_employer_ni_relief onto hmrc.salary_sacrifice.nics_relief_employee and hmrc.salary_sacrifice.nics_relief_employer.", + "two_child_limit_year_surface": "Chronicle's 15 dwp/uc/two_child_limit/* facts are the April-2025 publication (period month 2025-04) and are the only TCL facts; there are no 2026 Ledger facts. At 12a1e028, the incumbent pins the same published numbers at {2026}, so at calibration year 2025 Ledger activates all 15 TCL targets while the incumbent drops them from the 652-row union to the 637-row effective surface; the 2026 effective surface remains 652. The same 12a1e028 refresh adds the new incumbent dwp/uc/households row. Fixture B treats the 15 TCL rows as enumerated ledger-side additions.", + "geography_level_order_canonicalization": "The 9 voa.council_tax_stock.* rows use country, region order to match the rest of the contract; consumers use membership only.", + "ons_terminal_sex_band_split": "María ruling 2026-08-21: split the incumbent terminal sex bands into uniform five-year 85_89 bands plus 90_plus tails. The incumbent six-year 85_90 terminal rows leave ages 91+ unconstrained; Microcosm keeps the uniform five-year bands and constrains the tail. The 85_89-vs-85_90 value gap is the single-age-90 share and is a signed semantic difference." } }, "targets": [ @@ -6090,7 +6116,7 @@ } }, { - "target_id": "ons.population.female_85_90", + "target_id": "ons.population.female_85_89", "family": "ons_population", "geography_levels": [ "country" @@ -6112,13 +6138,13 @@ { "concept": "uk.demographics.age", "operator": "<=", - "value": 90 + "value": 89 } ] }, "bindings": { "policyengine": { - "metric_name": "ons/female_85_90", + "metric_name": "ons/female_85_89", "filters": [ { "variable": "gender", @@ -6132,7 +6158,7 @@ { "variable": "age", "operator": "<=", - "value": 90 + "value": 89 } ], "value_variable": "person_count", @@ -6140,7 +6166,7 @@ "map_to": "household" }, "axiom": { - "metric_name": "ons/female_85_90", + "metric_name": "ons/female_85_89", "status": "pending", "value_rule": "uk.person.count" } @@ -6156,7 +6182,64 @@ 86, 87, 88, - 89, + 89 + ] + } + } + }, + { + "target_id": "ons.population.female_90_plus", + "family": "ons_population", + "geography_levels": [ + "country" + ], + "measurement": { + "entity": "person", + "map_to": "household", + "concept": "uk.person.count", + "filters": [ + { + "concept": "uk.demographics.gender", + "equals": "female" + }, + { + "concept": "uk.demographics.age", + "operator": ">=", + "value": 90 + } + ] + }, + "bindings": { + "policyengine": { + "metric_name": "ons/female_90_plus", + "filters": [ + { + "variable": "gender", + "equals": "FEMALE" + }, + { + "variable": "age", + "operator": ">=", + "value": 90 + } + ], + "value_variable": "person_count", + "from_entity": "person", + "map_to": "household" + }, + "axiom": { + "metric_name": "ons/female_90_plus", + "status": "pending", + "value_rule": "uk.person.count" + } + }, + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "female", + "age": [ "90_plus" ] } @@ -7387,7 +7470,7 @@ } }, { - "target_id": "ons.population.male_85_90", + "target_id": "ons.population.male_85_89", "family": "ons_population", "geography_levels": [ "country" @@ -7409,13 +7492,13 @@ { "concept": "uk.demographics.age", "operator": "<=", - "value": 90 + "value": 89 } ] }, "bindings": { "policyengine": { - "metric_name": "ons/male_85_90", + "metric_name": "ons/male_85_89", "filters": [ { "variable": "gender", @@ -7429,7 +7512,7 @@ { "variable": "age", "operator": "<=", - "value": 90 + "value": 89 } ], "value_variable": "person_count", @@ -7437,7 +7520,7 @@ "map_to": "household" }, "axiom": { - "metric_name": "ons/male_85_90", + "metric_name": "ons/male_85_89", "status": "pending", "value_rule": "uk.person.count" } @@ -7453,7 +7536,64 @@ 86, 87, 88, - 89, + 89 + ] + } + } + }, + { + "target_id": "ons.population.male_90_plus", + "family": "ons_population", + "geography_levels": [ + "country" + ], + "measurement": { + "entity": "person", + "map_to": "household", + "concept": "uk.person.count", + "filters": [ + { + "concept": "uk.demographics.gender", + "equals": "male" + }, + { + "concept": "uk.demographics.age", + "operator": ">=", + "value": 90 + } + ] + }, + "bindings": { + "policyengine": { + "metric_name": "ons/male_90_plus", + "filters": [ + { + "variable": "gender", + "equals": "MALE" + }, + { + "variable": "age", + "operator": ">=", + "value": 90 + } + ], + "value_variable": "person_count", + "from_entity": "person", + "map_to": "household" + }, + "axiom": { + "metric_name": "ons/male_90_plus", + "status": "pending", + "value_rule": "uk.person.count" + } + }, + "ledger_selector": { + "source_name": "ons", + "source_concept": "ons.mid_year_population_estimate", + "groupby_dimension": "age", + "dimension_values": { + "sex": "male", + "age": [ "90_plus" ] } diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/__init__.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/__init__.py index e6e823792..04c1e4dd7 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/__init__.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/__init__.py @@ -248,6 +248,13 @@ ladder_target_provenance, local_authority_household_targets, ) +from microcosm.build.uk_runtime.ledger_targets import ( + UKFrameTargetAdapter, + UKLedgerTargetCompilation, + UKPolicyEngineAdapter, + compile_uk_target_registry, + materialize_uk_ledger_targets, +) from microcosm.build.uk_runtime.local_doctrine import ( UK_LOCAL_MAX_WEIGHT_RATIO, UK_LOCAL_SOLVE_DOCTRINE, @@ -490,6 +497,11 @@ "UK_CGT_TARGET_SPECS", "UK_DIAGNOSTICS_SCHEMA_VERSION", "UK_FISCAL_TARGET_REGISTRY", + "UKFrameTargetAdapter", + "UKLedgerTargetCompilation", + "UKPolicyEngineAdapter", + "compile_uk_target_registry", + "materialize_uk_ledger_targets", "AGE_BANDS", "AREA_TYPE_TO_LEDGER_GEOGRAPHY_LEVEL", "AREA_TYPES", diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/battery_bindings.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/battery_bindings.py index d163abdf4..28cb33b40 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/battery_bindings.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/battery_bindings.py @@ -28,6 +28,7 @@ from __future__ import annotations +import hashlib import json from collections.abc import Callable, Mapping from dataclasses import dataclass, replace @@ -47,6 +48,7 @@ GateResult, aggregate_admin_gate, enum_domain_gate, + ledger_compile_parity_gate, nonnegative_columns_gate, support_gate, weights_audit_gate, @@ -714,6 +716,65 @@ def _evaluate_tail_concentration( ) +def _evaluate_ledger_compile_parity( + context: EvidenceContext, parameters: Mapping[str, Any] +) -> GateResult: + fixture_resource = str(parameters["fixture_resource"]) + fixture = json.loads( + files("microcosm.build.uk").joinpath(fixture_resource).read_text() + ) + signed_differences = parameters.get("signed_differences", ()) + signed_resource = parameters.get("signed_differences_resource") + if signed_resource is not None: + signed_differences = json.loads( + files("microcosm.build.uk").joinpath(str(signed_resource)).read_text() + )["differences"] + target_period = parameters["target_period"] + return ledger_compile_parity_gate( + _ledger_compile_parity_registry(context, target_period), + fixture, + signed_differences=signed_differences, + ) + + +def _ledger_compile_parity_evidence( + context: EvidenceContext, parameters: Mapping[str, Any] +) -> object: + target_period = parameters["target_period"] + registry = _ledger_compile_parity_registry(context, target_period) + fixture_resource = str(parameters["fixture_resource"]) + fixture_text = files("microcosm.build.uk").joinpath(fixture_resource).read_text() + return { + "registry_version": getattr(registry, "version", None), + "registry_count": len(registry) if hasattr(registry, "__len__") else None, + "fixture_resource": fixture_resource, + "fixture_sha256": hashlib.sha256(fixture_text.encode("utf-8")).hexdigest(), + "target_period": target_period, + "signed_differences": parameters.get("signed_differences", ()), + "signed_differences_resource": parameters.get("signed_differences_resource"), + } + + +def _ledger_compile_parity_registry( + context: EvidenceContext, + target_period: object, +) -> object: + registries = context.artifacts["uk_ledger_compiled_registries"] + if not isinstance(registries, Mapping): + raise TypeError( + "uk_ledger_compiled_registries must map target periods to registries." + ) + if target_period in registries: + return registries[target_period] + target_period_key = str(target_period) + if target_period_key in registries: + return registries[target_period_key] + raise KeyError( + f"UK Ledger compile parity has no registry for target period " + f"{target_period!r}; available periods: {sorted(map(str, registries))}." + ) + + # --------------------------------------------------------------------------- # The registry # --------------------------------------------------------------------------- @@ -859,4 +920,19 @@ def _evaluate_tail_concentration( artifact_keys=frozenset({"exclusions_evaluated_on"}), legacy_name="qrf_tail_concentration", ), + "ledger_compile_parity": UKGateBinding( + name="ledger_compile_parity", + evaluator=_evaluate_ledger_compile_parity, + parameter_keys=frozenset( + { + "fixture_resource", + "signed_differences", + "signed_differences_resource", + "target_period", + } + ), + artifact_keys=frozenset({"uk_ledger_compiled_registries"}), + needs_frame=False, + evidence=_ledger_compile_parity_evidence, + ), } diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/cgt_calibration.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/cgt_calibration.py index ad1bb7ad9..b0d93cb3b 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/cgt_calibration.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/cgt_calibration.py @@ -26,7 +26,6 @@ from microcosm.build.uk_runtime.fiscal_targets import ( UK_CGT_REQUIRED_COLUMNS, - UK_CGT_TARGET_SPECS, ) from microcosm.build.uk_runtime.national_frame import ( uk_household_weight_kind, @@ -99,6 +98,7 @@ def uk_cgt_annual_exempt_amount(time_period: int | str) -> float: def materialize_uk_cgt_calibration_frame( national_frame: Frame, *, + registry: TargetRegistry, annual_exempt_amount: float | None = None, ) -> UKCGTTargetMaterialization: """Prepare the CGT measure columns and assemble the constraint frame. @@ -106,6 +106,7 @@ def materialize_uk_cgt_calibration_frame( Args: national_frame: UK national frame carrying the persisted person-level ``capital_gains`` input and strictly positive household weights. + registry: CGT targets compiled from Ledger references. annual_exempt_amount: Override for the CGT threshold. Defaults to the reviewed AEA for the frame's time period. @@ -150,9 +151,7 @@ def materialize_uk_cgt_calibration_frame( national_frame.weights_for("household").values, index=household["household_id"].to_numpy(), ) - mapped_mass = person["person_household_id"].map( - household_weight_by_id - ) + mapped_mass = person["person_household_id"].map(household_weight_by_id) if mapped_mass.isna().any() or not mapped_mass.gt(0.0).all(): raise ValueError( "UK CGT calibration requires strictly positive prior household " @@ -170,6 +169,7 @@ def materialize_uk_cgt_calibration_frame( "UK CGT prepared columns diverged from the declared measures: " f"{sorted(measure_values)} != {sorted(UK_CGT_REQUIRED_COLUMNS)}." ) + registry_measure_values = _registry_measure_values(registry, measure_values) n_positive = int((support & positive_mass).sum()) if n_positive == 0: @@ -183,7 +183,10 @@ def materialize_uk_cgt_calibration_frame( calibration_person = person[["person_id", "person_household_id"]].reset_index( drop=True ) - calibration_person = calibration_person.assign(**measure_values) + calibration_person = calibration_person.assign( + **measure_values, + **registry_measure_values, + ) frame = Frame( { "person": calibration_person, @@ -200,8 +203,27 @@ def materialize_uk_cgt_calibration_frame( ) return UKCGTTargetMaterialization( frame=frame, - registry=TargetRegistry(UK_CGT_TARGET_SPECS, country="uk"), + registry=registry, annual_exempt_amount=float(annual_exempt_amount), taxpayer_rows=int(support.sum()), minimum_positive_support_rows=n_positive, ) + + +def _registry_measure_values( + registry: TargetRegistry, + prepared_values: dict[str, np.ndarray], +) -> dict[str, np.ndarray]: + """Expose Ledger-compiled measure names as aliases to stable CGT columns.""" + + aliases = { + "hmrc.cgt.gains_total": UK_CGT_GAINS_AMOUNT_COLUMN, + "hmrc.cgt.taxpayers_total": UK_CGT_TAXPAYER_COUNT_COLUMN, + } + values: dict[str, np.ndarray] = {} + for spec in registry: + prepared_name = aliases.get(spec.name) + if prepared_name is None or spec.measure in prepared_values: + continue + values[spec.measure] = prepared_values[prepared_name] + return values diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/fiscal_targets.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/fiscal_targets.py index f31469aac..be7fa2794 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/fiscal_targets.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/fiscal_targets.py @@ -1,4 +1,4 @@ -"""UK fiscal target facts, declared natively in Microcosm. +"""UK fiscal target coverage declarations. The UK national calibration surface is currently ingested from policyengine-uk-data via :func:`microcosm.calibrate.specs_from_pe_surface`, whose @@ -21,15 +21,10 @@ baseline the share of people affected by a rate reform comes out roughly three times too high. -Two targets are declared: - -``hmrc/capital_gains_total`` - Total chargeable gains of CGT taxpayers. - -``hmrc/cgt_taxpayers`` - Number of CGT taxpayers. - -Both are person-entity, following the UK convention established by +The CGT values no longer live in this module. They compile from +``uk/target_references.json`` against HMRC ``cgt_statistics`` Ledger facts at +build time. The measures remain person-entity, following the UK convention +established by ``uk_runtime.hmrc_calibration``: the measures are person-level, so the constraint rows live on the person table while the calibrated weights stay on the household table via the frame's household ``Weights``. Both therefore need @@ -37,19 +32,12 @@ it can serialize, and count-like facts are documented to use prepared indicator/count columns. See ``UK_CGT_REQUIRED_COLUMNS``, and ``uk_runtime.cgt_calibration`` for the materialization that prepares them. - -Open question for reviewers: ``us_runtime.fiscal_targets`` has since moved to -value-free references whose values arrive from an external Ledger artifact at -build time. The values here are inline with citations, which is what the -registry's own ``TargetSpec`` contract describes ("a value, optionally a -standard error, and always a citation"). If the UK should follow the US onto -Ledger-sourced values instead, these specs are the shape to migrate. """ from __future__ import annotations from microcosm.build.gates import TargetCoverageRequirement -from microcosm.calibrate import TargetRegistry, TargetSpec +from microcosm.calibrate import TargetRegistry __all__ = [ "UK_CGT_REQUIRED_COLUMNS", @@ -58,16 +46,6 @@ "UK_FISCAL_TARGET_REGISTRY", ] -#: HMRC Capital Gains Tax statistics, tax year 2023-24 (published August 2025). -_HMRC_CGT_SOURCE = ( - "HMRC Capital Gains Tax statistics, tax year 2023-24, table 1: " - "https://www.gov.uk/government/statistics/capital-gains-tax-statistics" -) - -#: The reference period of the declared facts. HMRC's 2023-24 outturn is the -#: latest published tax year; build-side aging carries it to forecast years. -_HMRC_CGT_PERIOD = 2023 - #: Prepared person columns the frame must expose for these facts to compile. #: #: ``uk_cgt_measure_gains_amount`` is each person's chargeable gains, zeroed on @@ -81,48 +59,16 @@ "uk_cgt_measure_taxpayer_count", ) -UK_CGT_TARGET_SPECS: tuple[TargetSpec, ...] = ( - TargetSpec( - name="hmrc/capital_gains_total", - entity="person", - measure="uk_cgt_measure_gains_amount", - value=65_900_000_000.0, - period=_HMRC_CGT_PERIOD, - source=_HMRC_CGT_SOURCE, - family="hmrc", - notes=( - "Total chargeable gains of CGT taxpayers in 2023-24. Declared " - "unsigned: the fact is a positive aggregate. Note that a measure " - "carrying gains net of losses can be negative on individual " - "person records even though the total is positive, so a build " - "aggregating losses into this column should confirm the sign " - "handling it wants." - ), - ), - TargetSpec( - name="hmrc/cgt_taxpayers", - entity="person", - measure="uk_cgt_measure_taxpayer_count", - value=378_000.0, - period=_HMRC_CGT_PERIOD, - source=_HMRC_CGT_SOURCE, - family="hmrc", - notes=( - "Number of CGT taxpayers in 2023-24. The measure column is a " - "person-level indicator for people above the annual exempt amount in force for the period; " - "the AEA is policy-dependent and must track the period rather " - "than being hard-coded." - ), - ), -) +# Values are Ledger-owned and compile from UK target references. +UK_CGT_TARGET_SPECS: tuple = () UK_CGT_TARGET_COVERAGE_REQUIREMENTS: tuple[TargetCoverageRequirement, ...] = ( TargetCoverageRequirement( requirement_id="uk_capital_gains", label="HMRC capital gains totals and taxpayer counts", accepted_names=( - "hmrc/capital_gains_total", - "hmrc/cgt_taxpayers", + "hmrc.cgt.gains_total", + "hmrc.cgt.taxpayers_total", ), min_matches=2, notes=( diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/ledger_targets.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/ledger_targets.py new file mode 100644 index 000000000..62c70f9d1 --- /dev/null +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/ledger_targets.py @@ -0,0 +1,300 @@ +"""UK Ledger target-reference compilation and materialization helpers.""" + +from __future__ import annotations + +import json +from collections.abc import Iterable, Mapping +from dataclasses import dataclass +from importlib import resources as importlib_resources +from typing import Any + +import numpy as np +import pandas as pd + +from microcosm.build.country_spec import load_country_spec +from microcosm.build.ledger_targets import ( + LedgerTargetReference, + _fact_matches_selector, + compile_ledger_target_references, +) +from microcosm.build.target_materialization import ( + TargetMaterializationResult, + materialize_target_bindings, +) +from microcosm.build.uk_runtime.cgt_calibration import uk_cgt_annual_exempt_amount +from microcosm.calibrate import TargetRegistry +from microcosm.frame import Frame + + +@dataclass(frozen=True) +class UKLedgerTargetCompilation: + """Compiled UK Ledger target registry and unsupported-reference report.""" + + registry: TargetRegistry + unsupported: tuple[dict[str, str], ...] + + +def compile_uk_target_registry( + facts: Iterable[Mapping[str, Any]], + *, + target_period: int | str, +) -> UKLedgerTargetCompilation: + """Compile packaged UK Ledger references against consumer fact rows.""" + + fact_rows = tuple(facts) + spec = load_country_spec("uk") + compiled = [] + unsupported: list[dict[str, str]] = [] + for reference in spec.target_references: + restamped = LedgerTargetReference( + **{**reference.__dict__, "period": target_period} + ) + candidate_facts = _candidate_facts_for_reference(fact_rows, restamped) + try: + registry = compile_ledger_target_references( + candidate_facts, + [restamped], + country="uk", + ) + except ValueError as error: + unsupported.append( + { + "name": reference.name, + "period": target_period, + "reason": str(error), + } + ) + else: + compiled.extend(registry.specs) + return UKLedgerTargetCompilation( + TargetRegistry(compiled, country="uk"), + tuple(unsupported), + ) + + +def _candidate_facts_for_reference( + facts: tuple[Mapping[str, Any], ...], + reference: LedgerTargetReference, +) -> tuple[Mapping[str, Any], ...]: + if not reference.ledger_selector: + return facts + return tuple( + fact for fact in facts if _fact_matches_selector(fact, reference.ledger_selector) + ) + + +def materialize_uk_ledger_targets( + adapter: Any, + registry: TargetRegistry, + *, + period: int | str, +) -> TargetMaterializationResult: + """Materialize compiled UK Ledger target bindings on an adapter.""" + + contract = _uk_contract_targets() + return materialize_target_bindings( + adapter, + registry, + contract, + period=period, + providers={ + "parameter_gated_threshold": _uk_parameter_gated_threshold, + "baseline_flag_crosstab": _uk_baseline_flag_crosstab, + "input_substitution_counterfactual": _uk_input_substitution, + }, + ) + + +class UKPolicyEngineAdapter: + """Small adapter around policyengine-uk simulation-like objects.""" + + def __init__(self, simulation: Any): + self.simulation = simulation + self.tables: dict[str, dict[str, np.ndarray]] = {} + + def column(self, entity: str, variable: str) -> np.ndarray: + table = self.tables.get(entity, {}) + if variable in table: + return np.asarray(table[variable], dtype=float) + values = self.simulation.calculate(variable) + return np.asarray(values, dtype=float) + + def set_column(self, entity: str, variable: str, values: object) -> None: + self.tables.setdefault(entity, {})[variable] = np.asarray(values, dtype=float) + + def parameter(self, parameter: str, period: int | str) -> float: + if parameter in { + "cgt_calibration.uk_cgt_annual_exempt_amount", + "gov.hmrc.cgt.annual_exempt_amount", + }: + return uk_cgt_annual_exempt_amount(period) + raise KeyError(parameter) + + +class UKFrameTargetAdapter: + """Frame-backed target materialization adapter for UK calibration stages.""" + + def __init__(self, frame: Frame): + self.frame = frame + self.tables = {entity: frame.table(entity).copy() for entity in frame.entities} + self.link_tables = {name: frame.link(name).copy() for name in frame.links} + + def has_column(self, entity: str, variable: str) -> bool: + return variable in self.tables[entity] + + def column(self, entity: str, variable: str) -> np.ndarray: + table = self.tables[entity] + count_variables = { + "person_count", + "household_count", + "benunit_count", + f"{entity}_count", + } + if variable in count_variables: + return np.ones(len(table), dtype=float) + if variable not in table: + raise KeyError(f"{entity}.{variable}") + return np.asarray(table[variable]) + + def set_column(self, entity: str, variable: str, values: object) -> None: + self.tables[entity][variable] = np.asarray(values) + + def parameter(self, parameter: str, period: int | str) -> float: + if parameter == "gov.hmrc.cgt.annual_exempt_amount": + return uk_cgt_annual_exempt_amount(period) + raise KeyError(parameter) + + def counterfactual_delta( + self, + binding: Mapping[str, Any], + period: int | str, + ) -> np.ndarray: + del period + entity = str(binding.get("from_entity") or "person") + metric_name = str(binding.get("metric_name") or "") + if metric_name and metric_name in self.tables[entity]: + return np.asarray(self.tables[entity][metric_name], dtype=float) + raise ValueError( + "frame does not carry precomputed counterfactual delta " + f"{metric_name!r}" + ) + + def household_condition(self, condition: Mapping[str, Any]) -> np.ndarray: + entity = str(condition.get("entity") or "household") + source = self.tables[entity] + if entity == "household": + household_ids = source["household_id"] + else: + people = self.tables["person"] + entity_membership = f"person_{entity}_id" + if entity_membership not in people: + raise KeyError(entity_membership) + group_to_household = ( + people[[entity_membership, "person_household_id"]] + .drop_duplicates() + .set_index(entity_membership)["person_household_id"] + ) + if group_to_household.index.has_duplicates: + raise ValueError(f"UK {entity} groups span multiple households.") + household_ids = source[f"{entity}_id"].map(group_to_household) + + reduce = str(condition["reduce"]) + variable = str(condition["variable"]) + if reduce == "any": + matched = _compare_series(source[variable], condition) + aggregate = matched.groupby(household_ids).any().astype(float) + expected = {"operator": "==", "value": True} + elif reduce == "sum": + aggregate = source[variable].groupby(household_ids).sum() + expected = condition + elif reduce == "count": + aggregate = source[variable].groupby(household_ids).count() + expected = condition + else: + raise ValueError(f"Unsupported UK household reduction {reduce!r}.") + + households = self.tables["household"] + ids = households["household_id"] + return np.asarray( + _compare_series(ids.map(aggregate).fillna(0.0), expected), + dtype=bool, + ) + + def to_frame(self) -> Frame: + tables = {**self.tables, **self.link_tables} + weights = { + entity: self.frame.weights_for(entity) + for entity in self.frame.weighted_entities + } + return Frame( + tables, + self.frame.schema, + weights, + self.frame.strata, + mass_log=self.frame.mass_log, + metadata=self.frame.metadata, + ) + + +def _uk_contract_targets() -> dict[str, Mapping[str, Any]]: + payload = ( + importlib_resources.files("microcosm.build.uk") + .joinpath("uk_national_targets.json") + .read_text() + ) + contract = json.loads(payload) + return {target["target_id"]: target for target in contract["targets"]} + + +def _uk_parameter_gated_threshold( + adapter: Any, + binding: Mapping[str, Any], + period: int | str, +) -> np.ndarray: + from microcosm.build.target_materialization import parameter_gated_threshold + + return parameter_gated_threshold(adapter, binding, period) + + +def _uk_baseline_flag_crosstab( + adapter: Any, + binding: Mapping[str, Any], + period: int | str, +) -> np.ndarray: + from microcosm.build.target_materialization import baseline_flag_crosstab + + return baseline_flag_crosstab(adapter, binding, period) + + +def _uk_input_substitution( + adapter: Any, + binding: Mapping[str, Any], + period: int | str, +) -> np.ndarray: + from microcosm.build.target_materialization import input_substitution_counterfactual + + return input_substitution_counterfactual(adapter, binding, period) + + +def _compare_series( + values: pd.Series, + condition: Mapping[str, Any], +) -> pd.Series: + operator = condition.get("operator") + if operator is None: + operator, expected = "==", condition["equals"] + else: + expected = condition["value"] + if operator == "in": + return values.isin(expected) + operations = { + "==": values.eq, + "!=": values.ne, + ">": values.gt, + ">=": values.ge, + "<": values.lt, + "<=": values.le, + } + if operator not in operations: + raise ValueError(f"Unsupported UK target condition operator {operator!r}.") + return operations[operator](expected) diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/national_build.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/national_build.py index 9c51d23ef..d8a16a897 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/national_build.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/national_build.py @@ -65,6 +65,7 @@ UKReviewedExclusion, exclusion_evaluation_date, ) +from microcosm.calibrate import TargetRegistry from microcosm.frame import ( Frame, MassChangeRecord, @@ -358,6 +359,7 @@ def build_uk_national_dataset( release_candidate: bool = False, now: date | None = None, gate_registry: Mapping[str, GateBinding] | None = None, + ledger_target_registry: Mapping[int | str, TargetRegistry] | None = None, ) -> UKNationalBuildResult: """Run ordered national stages, hard-gate the result, and stage an H5. @@ -482,14 +484,17 @@ def build_uk_national_dataset( diagnostic_path.unlink(missing_ok=True) # Mirrors the US cheap preflight: graph or reference drift blocks before # source stages — now with the refusal persisted as a schema-4 report. + preflight_artifacts: dict[str, object] = { + "coverage_engine": engine, + "build_stage_names": tuple(stage.name for stage in materialized_stages), + } + if ledger_target_registry is not None: + preflight_artifacts["uk_ledger_compiled_registries"] = dict( + ledger_target_registry + ) battery.run_phase( "preflight", - EvidenceContext( - artifacts={ - "coverage_engine": engine, - "build_stage_names": tuple(stage.name for stage in materialized_stages), - } - ), + EvidenceContext(artifacts=preflight_artifacts), ) battery.enforce("preflight", mode=BlockingMode.BLOCKS_ARTIFACT) frame, provenance = load_uk_national_frame(requested_input_path) diff --git a/packages/microcosm-build/src/microcosm/build/uk_runtime/national_calibration.py b/packages/microcosm-build/src/microcosm/build/uk_runtime/national_calibration.py index e56cd725c..6d24e65ec 100644 --- a/packages/microcosm-build/src/microcosm/build/uk_runtime/national_calibration.py +++ b/packages/microcosm-build/src/microcosm/build/uk_runtime/national_calibration.py @@ -2,16 +2,16 @@ from __future__ import annotations -import json from collections.abc import Mapping, Sequence -from importlib import resources from typing import Any -import pandas as pd - from microcosm.build.ledger_targets import compile_ledger_target_references from microcosm.build.plan import Stage from microcosm.build.uk_runtime.content_identity import uk_frame_content_identity +from microcosm.build.uk_runtime.ledger_targets import ( + UKFrameTargetAdapter, + materialize_uk_ledger_targets, +) from microcosm.calibrate import calibrate, effective_sample_size from microcosm.frame import Frame @@ -58,7 +58,25 @@ def __call__(self, frame: Frame) -> Frame: "UK national calibration resolved " f"{resolved} of {declared} activated target references." ) - prepared = _prepare_target_columns(frame, registry.specs) + materialized = materialize_uk_ledger_targets( + UKFrameTargetAdapter(frame), + registry, + period=_registry_materialization_period(registry.specs), + ) + if materialized.skipped: + skipped = [ + { + "name": item.name, + "measure": item.measure, + "reason": item.reason, + } + for item in materialized.skipped + ] + raise RuntimeError( + "UK national calibration could not materialize every " + f"activated reference measure: {skipped}." + ) + prepared = materialized.adapter.to_frame() result = calibrate( prepared, registry.to_target_set(), @@ -155,119 +173,13 @@ def uk_national_calibration_stage( return Stage(name="national_calibration", transform=transform) -def _contract_targets() -> dict[str, Mapping[str, Any]]: - payload = json.loads( - resources.files("microcosm.build.uk") - .joinpath("uk_national_targets.json") - .read_text() - ) - return {row["target_id"]: row for row in payload["targets"]} - - -def _prepare_target_columns(frame: Frame, specs: Sequence[object]) -> Frame: - tables = {entity: frame.table(entity).copy() for entity in frame.entities} - tables.update({name: frame.link(name).copy() for name in frame.links}) - contracts = _contract_targets() - for spec in specs: - target_id = spec.metadata["contract_target_id"] - binding = contracts[target_id]["bindings"]["policyengine"] - entity = spec.entity - table = tables[entity] - if spec.measure in table: - continue - value_name = binding["value_variable"] - if value_name in {"person_count", "household_count", "benunit_count"}: - values = pd.Series(1.0, index=table.index) - else: - if value_name not in table: - raise ValueError( - f"Activated UK target {target_id!r} requires missing " - f"{entity} column {value_name!r}." - ) - values = table[value_name].astype(float) - mask = pd.Series(True, index=table.index) - for condition in binding.get("filters", ()): - variable = condition["variable"] - if variable not in table: - raise ValueError( - f"Activated UK target {target_id!r} requires missing " - f"{entity} filter column {variable!r}." - ) - mask &= _compare(table[variable], condition) - if binding.get("household_conditions"): - if entity != "household": - raise ValueError( - f"Activated UK target {target_id!r} declares household " - f"conditions on entity {entity!r}." - ) - for condition in binding["household_conditions"]: - mask &= _household_condition(tables, condition, table) - table[spec.measure] = values.where(mask, 0.0) - weights = {entity: frame.weights_for(entity) for entity in frame.weighted_entities} - return Frame( - tables, - frame.schema, - weights, - frame.strata, - mass_log=frame.mass_log, - metadata=frame.metadata, - ) - - -def _compare(values: pd.Series, condition: Mapping[str, Any]) -> pd.Series: - operator = condition.get("operator") - if operator is None: - operator, expected = "==", condition["equals"] - else: - expected = condition["value"] - operations = { - "==": values.eq, - ">": values.gt, - ">=": values.ge, - "<": values.lt, - "<=": values.le, - } - if operator not in operations: - raise ValueError(f"Unsupported UK target condition operator {operator!r}.") - return operations[operator](expected) - - -def _household_condition( - tables: Mapping[str, pd.DataFrame], - condition: Mapping[str, Any], - households: pd.DataFrame, -) -> pd.Series: - entity = condition["entity"] - source = tables[entity] - if entity == "household": - household_ids = source["household_id"] - else: - people = tables["person"] - entity_membership = f"person_{entity}_id" - if entity_membership not in people: - raise ValueError(f"UK person table is missing {entity_membership!r}.") - group_to_household = ( - people[[entity_membership, "person_household_id"]] - .drop_duplicates() - .set_index(entity_membership)["person_household_id"] +def _registry_materialization_period(specs: Sequence[object]) -> int | str: + periods = {spec.period for spec in specs} + if not periods: + raise RuntimeError("UK national calibration has no target specs to materialize.") + if len(periods) != 1: + raise RuntimeError( + "UK national calibration cannot materialize mixed-period target " + f"specs: {sorted(str(period) for period in periods)}." ) - if group_to_household.index.has_duplicates: - raise ValueError(f"UK {entity} groups span multiple households.") - household_ids = source[f"{entity}_id"].map(group_to_household) - reduce = condition["reduce"] - if reduce == "any": - matched = _compare(source[condition["variable"]], condition) - aggregate = matched.groupby(household_ids).any().astype(float) - expected_condition = {"operator": "==", "value": True} - elif reduce == "sum": - aggregate = source[condition["variable"]].groupby(household_ids).sum() - expected_condition = condition - elif reduce == "count": - aggregate = source[condition["variable"]].groupby(household_ids).count() - expected_condition = condition - else: - raise ValueError(f"Unsupported UK household reduction {reduce!r}.") - ids = households["household_id"] - return _compare(ids.map(aggregate).fillna(0.0), expected_condition).set_axis( - households.index - ) + return next(iter(periods)) diff --git a/packages/microcosm-build/tests/fixtures/uk_target_reference_feed_rows.jsonl b/packages/microcosm-build/tests/fixtures/uk_target_reference_feed_rows.jsonl index 9ee97bec4..54781fa5c 100644 --- a/packages/microcosm-build/tests/fixtures/uk_target_reference_feed_rows.jsonl +++ b/packages/microcosm-build/tests/fixtures/uk_target_reference_feed_rows.jsonl @@ -1,13 +1,9 @@ -{"aggregate_fact_key": "ledger.aggregate_fact.v2:a36696207826083b6dd7e878", "aggregation": {"method": "sum"}, "assertion": "observation", "concept_alignment": {"authority": "isc", "canonical_concept": "isc.pupils_at_member_schools", "concept_alignment_key": "ledger.concept_alignment.v2:98bb32323a3c2baec9cf6536", "evidence_notes": "ISC annual Census 2023 report, executive summary: 554,243 pupils at 1,395 ISC member schools (survey carried out in January 2023, all UK-member schools responding).", "evidence_url": "https://www.isc.co.uk/research/annual-census/isc-annual-census-2023/", "relation": "source_label", "source_concept": "isc.pupils_at_member_schools"}, "dimension_set_key": "ledger.dimension_set.v2:798fe9e6b99defdb40a97be3", "dimensions": {"school_membership": "isc"}, "entity": {"name": "person", "role": "private_school_pupil"}, "geography": {"id": "K02000001", "level": "country", "vintage": "current"}, "label": "United Kingdom 2023-01 month count isc pupils at member schools for person (school membership=isc) [isc ISC annual Census 2023 isc_census_2023_final.pdf census_2023]", "layout": {"groupby_dimension": "isc.census_line", "groupby_ordinal": 0, "groupby_value_id": "pupils_at_isc_schools", "groupby_value_label": "Pupils at ISC member schools, January 2023 census", "measure_id": "pupils", "measure_label": "Pupils at ISC member schools", "measure_ordinal": 0, "record_set_id": "isc.census_2023.pupils", "record_set_spec_hash": "43d489f56ecef6c1f4f07827", "record_set_spec_id": "isc.census_2023.pupils.v1", "source_column_id": "numeric_value", "source_row_id": "pupils_at_isc_schools", "table_record_kind": "total"}, "legacy_fact_key": "ledger.fact.v1:6862b35fc66e993fd1b3a496", "lineage": {"source_cell_keys": ["ledger.source_cell.v1:8a85b6a60f996e8543bb2c70", "ledger.source_cell.v1:6dd528b0c45a1e8bf858158e", "ledger.source_cell.v1:d320f7b228df1df500407034", "ledger.source_cell.v1:5136187fe3a031fc10a0ca62"], "source_record_id": "isc.census_2023.pupils.pupils_at_isc_schools.pupils", "source_row_keys": []}, "observed_measure": {"source_concept": "isc.pupils_at_member_schools", "source_measure_id": "pupils", "source_name": "isc", "source_table": "ISC annual Census 2023", "unit": "count"}, "observed_measure_key": "ledger.observed_measure.v2:66d9adbd08e45f85b730163d", "period": {"type": "month", "value": "2023-01"}, "provenance_class": "census", "schema_version": "ledger.consumer_fact.v1", "semantic_fact_key": "ledger.semantic_fact.v2:dcdb6fab7a97e0d16f5332a0", "source": {"extracted_at": "2026-08-07", "extraction_method": "CellSelectorSpec and SourceRecordSpec resolved from cells", "method_notes": "Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.", "raw_r2_bucket": "ledger-raw", "raw_r2_key": "raw/isc/isc-annual-census-2023/2023/67ae15ec91c626522b964fabe7c1624de9b83fcae356ebf2a240bf8c9adf35d8/isc_census_2023_final.pdf", "raw_r2_uri": "r2://ledger-raw/raw/isc/isc-annual-census-2023/2023/67ae15ec91c626522b964fabe7c1624de9b83fcae356ebf2a240bf8c9adf35d8/isc_census_2023_final.pdf", "source_file": "isc_census_2023_final.pdf", "source_name": "isc", "source_sha256": "67ae15ec91c626522b964fabe7c1624de9b83fcae356ebf2a240bf8c9adf35d8", "source_size_bytes": 6061790, "source_table": "ISC annual Census 2023", "url": "https://www.isc.co.uk/media/9316/isc_census_2023_final.pdf", "vintage": "census_2023"}, "source_release_key": "ledger.source_release.v2:a60ce5f6bbc36d63507667d9", "source_series_key": "ledger.source_series.v2:8bc0947d65be226dd5348907", "universe_constraint_set_key": "ledger.universe_constraint_set.v2:6128dc3fab81d86b2f1e7d92", "universe_constraints": {"constraints": [{"operator": "==", "role": "filter", "value": "isc", "variable": "school_membership"}], "domain": "independent_school_education"}, "value": 554243, "value_type": "integer"} -{"aggregate_fact_key": "ledger.aggregate_fact.v2:0b3bba939da29c3b925d98a8", "aggregation": {"method": "sum"}, "assertion": "observation", "concept_alignment": {"authority": "ons", "canonical_concept": "ons.households_by_type", "concept_alignment_key": "ledger.concept_alignment.v2:cf85783836063df6a5d4ade3", "evidence_notes": "Families and households in the UK, 2025 edition, Table 7 households by type, 2023 estimate, thousands.", "evidence_url": "https://www.ons.gov.uk/peoplepopulationandcommunity/birthsdeathsandmarriages/families/datasets/familiesandhouseholdsfamiliesandhouseholds", "relation": "source_label", "source_concept": "ons.families_households_table7"}, "dimension_set_key": "ledger.dimension_set.v2:5ea829aca1b48c2ce225a06e", "dimensions": {"household_type": "lone_households_under_65"}, "entity": {"name": "household", "role": "resident_household"}, "geography": {"id": "K02000001", "level": "country", "vintage": "current"}, "label": "United Kingdom 2023 calendar year count ons households by type for household (household type=lone households under 65) [ons Families and households in the UK 2025, Table 7: households by type familiesandhouseholdsuk2025.xlsx families_households_2025]", "layout": {"groupby_dimension": "ons.household_type", "groupby_ordinal": 0, "groupby_value_id": "lone_households_under_65", "groupby_value_label": "Under 65", "measure_id": "households", "measure_label": "Households, 2023 estimate", "measure_ordinal": 0, "record_set_id": "ons.families_households_2025.table7.cy2023", "record_set_spec_hash": "0ea9705065c1ac17dfce8be4", "record_set_spec_id": "ons.families_households_2025.table7.cy2023.v1", "source_column_id": "households", "source_row_id": "lone_households_under_65", "table_record_kind": "detail"}, "legacy_fact_key": "ledger.fact.v1:c2b4362848754d3e02c7a08a", "lineage": {"source_cell_keys": ["ledger.source_cell.v1:837e34887b59a7fc491f97f8", "ledger.source_cell.v1:2531e3e8f7340928e989b0ef"], "source_record_id": "ons.families_households_2025.table7.cy2023.lone_households_under_65.households", "source_row_keys": []}, "observed_measure": {"source_concept": "ons.families_households_table7", "source_measure_id": "households", "source_name": "ons", "source_table": "Families and households in the UK 2025, Table 7: households by type", "unit": "count"}, "observed_measure_key": "ledger.observed_measure.v2:f5e97dfafe656d78d5ad97fc", "period": {"type": "calendar_year", "value": 2023}, "provenance_class": "survey_aggregate", "schema_version": "ledger.consumer_fact.v1", "semantic_fact_key": "ledger.semantic_fact.v2:6efcfd7990cdaa436ac411d3", "source": {"extracted_at": "2026-08-06", "extraction_method": "CellSelectorSpec and SourceRecordSpec resolved from cells", "method_notes": "Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.", "raw_r2_bucket": "ledger-raw", "raw_r2_key": "raw/ons/ons-families-households-2025/2025/a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91/familiesandhouseholdsuk2025.xlsx", "raw_r2_uri": "r2://ledger-raw/raw/ons/ons-families-households-2025/2025/a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91/familiesandhouseholdsuk2025.xlsx", "source_file": "familiesandhouseholdsuk2025.xlsx", "source_name": "ons", "source_sha256": "a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91", "source_size_bytes": 209085, "source_table": "Families and households in the UK 2025, Table 7: households by type", "url": "https://www.ons.gov.uk/file?uri=/peoplepopulationandcommunity/birthsdeathsandmarriages/families/datasets/familiesandhouseholdsfamiliesandhouseholds/current/familiesandhouseholdsuk2025.xlsx", "vintage": "families_households_2025"}, "source_release_key": "ledger.source_release.v2:30b0ffd8d7245b0d6684989e", "source_series_key": "ledger.source_series.v2:9faf1c83fb31f4a881373e3c", "survey_instrument": "Labour Force Survey", "universe_constraint_set_key": "ledger.universe_constraint_set.v2:294e9acfef7d58dfd3d0f201", "universe_constraints": {"constraints": [{"operator": "==", "role": "filter", "value": "lone_households_under_65", "variable": "household_type"}], "domain": "household_composition"}, "value": 4166000, "value_type": "integer"} -{"aggregate_fact_key": "ledger.aggregate_fact.v2:1ddf8c636c81c2f6b5036612", "aggregation": {"method": "sum"}, "assertion": "observation", "concept_alignment": {"authority": "ons", "canonical_concept": "ons.households_by_type", "concept_alignment_key": "ledger.concept_alignment.v2:cf85783836063df6a5d4ade3", "evidence_notes": "Families and households in the UK, 2025 edition, Table 7 households by type, 2023 estimate, thousands.", "evidence_url": "https://www.ons.gov.uk/peoplepopulationandcommunity/birthsdeathsandmarriages/families/datasets/familiesandhouseholdsfamiliesandhouseholds", "relation": "source_label", "source_concept": "ons.families_households_table7"}, "dimension_set_key": "ledger.dimension_set.v2:95a64ffacc62ab4a618e2c2d", "dimensions": {"household_type": "lone_households_over_65"}, "entity": {"name": "household", "role": "resident_household"}, "geography": {"id": "K02000001", "level": "country", "vintage": "current"}, "label": "United Kingdom 2023 calendar year count ons households by type for household (household type=lone households over 65) [ons Families and households in the UK 2025, Table 7: households by type familiesandhouseholdsuk2025.xlsx families_households_2025]", "layout": {"groupby_dimension": "ons.household_type", "groupby_ordinal": 1, "groupby_value_id": "lone_households_over_65", "groupby_value_label": "65 or over", "measure_id": "households", "measure_label": "Households, 2023 estimate", "measure_ordinal": 0, "record_set_id": "ons.families_households_2025.table7.cy2023", "record_set_spec_hash": "0ea9705065c1ac17dfce8be4", "record_set_spec_id": "ons.families_households_2025.table7.cy2023.v1", "source_column_id": "households", "source_row_id": "lone_households_over_65", "table_record_kind": "detail"}, "legacy_fact_key": "ledger.fact.v1:0eaabf6d0a7df5f5c44fc3b1", "lineage": {"source_cell_keys": ["ledger.source_cell.v1:eabeb69fafb8cb9869737539", "ledger.source_cell.v1:2531e3e8f7340928e989b0ef"], "source_record_id": "ons.families_households_2025.table7.cy2023.lone_households_over_65.households", "source_row_keys": []}, "observed_measure": {"source_concept": "ons.families_households_table7", "source_measure_id": "households", "source_name": "ons", "source_table": "Families and households in the UK 2025, Table 7: households by type", "unit": "count"}, "observed_measure_key": "ledger.observed_measure.v2:f5e97dfafe656d78d5ad97fc", "period": {"type": "calendar_year", "value": 2023}, "provenance_class": "survey_aggregate", "schema_version": "ledger.consumer_fact.v1", "semantic_fact_key": "ledger.semantic_fact.v2:47eb4dc37591df9cbcc7b86c", "source": {"extracted_at": "2026-08-06", "extraction_method": "CellSelectorSpec and SourceRecordSpec resolved from cells", "method_notes": "Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.", "raw_r2_bucket": "ledger-raw", "raw_r2_key": "raw/ons/ons-families-households-2025/2025/a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91/familiesandhouseholdsuk2025.xlsx", "raw_r2_uri": "r2://ledger-raw/raw/ons/ons-families-households-2025/2025/a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91/familiesandhouseholdsuk2025.xlsx", "source_file": "familiesandhouseholdsuk2025.xlsx", "source_name": "ons", "source_sha256": "a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91", "source_size_bytes": 209085, "source_table": "Families and households in the UK 2025, Table 7: households by type", "url": "https://www.ons.gov.uk/file?uri=/peoplepopulationandcommunity/birthsdeathsandmarriages/families/datasets/familiesandhouseholdsfamiliesandhouseholds/current/familiesandhouseholdsuk2025.xlsx", "vintage": "families_households_2025"}, "source_release_key": "ledger.source_release.v2:30b0ffd8d7245b0d6684989e", "source_series_key": "ledger.source_series.v2:9faf1c83fb31f4a881373e3c", "survey_instrument": "Labour Force Survey", "universe_constraint_set_key": "ledger.universe_constraint_set.v2:b102ca2d480c2589316600cd", "universe_constraints": {"constraints": [{"operator": "==", "role": "filter", "value": "lone_households_over_65", "variable": "household_type"}], "domain": "household_composition"}, "value": 4214000, "value_type": "integer"} -{"aggregate_fact_key": "ledger.aggregate_fact.v2:8ef6c9992eabbc2e9641c694", "aggregation": {"method": "sum"}, "assertion": "observation", "concept_alignment": {"authority": "ons", "canonical_concept": "ons.households_by_type", "concept_alignment_key": "ledger.concept_alignment.v2:cf85783836063df6a5d4ade3", "evidence_notes": "Families and households in the UK, 2025 edition, Table 7 households by type, 2023 estimate, thousands.", "evidence_url": "https://www.ons.gov.uk/peoplepopulationandcommunity/birthsdeathsandmarriages/families/datasets/familiesandhouseholdsfamiliesandhouseholds", "relation": "source_label", "source_concept": "ons.families_households_table7"}, "dimension_set_key": "ledger.dimension_set.v2:5774a97907813719358f314f", "dimensions": {"household_type": "unrelated_adult_households"}, "entity": {"name": "household", "role": "resident_household"}, "geography": {"id": "K02000001", "level": "country", "vintage": "current"}, "label": "United Kingdom 2023 calendar year count ons households by type for household (household type=unrelated adult households) [ons Families and households in the UK 2025, Table 7: households by type familiesandhouseholdsuk2025.xlsx families_households_2025]", "layout": {"groupby_dimension": "ons.household_type", "groupby_ordinal": 2, "groupby_value_id": "unrelated_adult_households", "groupby_value_label": "Two or more unrelated adults [note 10]", "measure_id": "households", "measure_label": "Households, 2023 estimate", "measure_ordinal": 0, "record_set_id": "ons.families_households_2025.table7.cy2023", "record_set_spec_hash": "0ea9705065c1ac17dfce8be4", "record_set_spec_id": "ons.families_households_2025.table7.cy2023.v1", "source_column_id": "households", "source_row_id": "unrelated_adult_households", "table_record_kind": "detail"}, "legacy_fact_key": "ledger.fact.v1:97ed998e24b9fae08017d83a", "lineage": {"source_cell_keys": ["ledger.source_cell.v1:8d5efd7a126aaf30f68fb31d", "ledger.source_cell.v1:2531e3e8f7340928e989b0ef"], "source_record_id": "ons.families_households_2025.table7.cy2023.unrelated_adult_households.households", "source_row_keys": []}, "observed_measure": {"source_concept": "ons.families_households_table7", "source_measure_id": "households", "source_name": "ons", "source_table": "Families and households in the UK 2025, Table 7: households by type", "unit": "count"}, "observed_measure_key": "ledger.observed_measure.v2:f5e97dfafe656d78d5ad97fc", "period": {"type": "calendar_year", "value": 2023}, "provenance_class": "survey_aggregate", "schema_version": "ledger.consumer_fact.v1", "semantic_fact_key": "ledger.semantic_fact.v2:fff64222efad35d84be6b76f", "source": {"extracted_at": "2026-08-06", "extraction_method": "CellSelectorSpec and SourceRecordSpec resolved from cells", "method_notes": "Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.", "raw_r2_bucket": "ledger-raw", "raw_r2_key": "raw/ons/ons-families-households-2025/2025/a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91/familiesandhouseholdsuk2025.xlsx", "raw_r2_uri": "r2://ledger-raw/raw/ons/ons-families-households-2025/2025/a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91/familiesandhouseholdsuk2025.xlsx", "source_file": "familiesandhouseholdsuk2025.xlsx", "source_name": "ons", "source_sha256": "a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91", "source_size_bytes": 209085, "source_table": "Families and households in the UK 2025, Table 7: households by type", "url": "https://www.ons.gov.uk/file?uri=/peoplepopulationandcommunity/birthsdeathsandmarriages/families/datasets/familiesandhouseholdsfamiliesandhouseholds/current/familiesandhouseholdsuk2025.xlsx", "vintage": "families_households_2025"}, "source_release_key": "ledger.source_release.v2:30b0ffd8d7245b0d6684989e", "source_series_key": "ledger.source_series.v2:9faf1c83fb31f4a881373e3c", "survey_instrument": "Labour Force Survey", "universe_constraint_set_key": "ledger.universe_constraint_set.v2:966db6efafedee1aa2bf9622", "universe_constraints": {"constraints": [{"operator": "==", "role": "filter", "value": "unrelated_adult_households", "variable": "household_type"}], "domain": "household_composition"}, "value": 827000, "value_type": "integer"} -{"aggregate_fact_key": "ledger.aggregate_fact.v2:69edec6d08e8bb80e11cb682", "aggregation": {"method": "sum"}, "assertion": "observation", "concept_alignment": {"authority": "ons", "canonical_concept": "ons.households_by_type", "concept_alignment_key": "ledger.concept_alignment.v2:cf85783836063df6a5d4ade3", "evidence_notes": "Families and households in the UK, 2025 edition, Table 7 households by type, 2023 estimate, thousands.", "evidence_url": "https://www.ons.gov.uk/peoplepopulationandcommunity/birthsdeathsandmarriages/families/datasets/familiesandhouseholdsfamiliesandhouseholds", "relation": "source_label", "source_concept": "ons.families_households_table7"}, "dimension_set_key": "ledger.dimension_set.v2:53e6f9397dd4db4747ca9d08", "dimensions": {"household_type": "couple_no_children_households"}, "entity": {"name": "household", "role": "resident_household"}, "geography": {"id": "K02000001", "level": "country", "vintage": "current"}, "label": "United Kingdom 2023 calendar year count ons households by type for household (household type=couple no children households) [ons Families and households in the UK 2025, Table 7: households by type familiesandhouseholdsuk2025.xlsx families_households_2025]", "layout": {"groupby_dimension": "ons.household_type", "groupby_ordinal": 3, "groupby_value_id": "couple_no_children_households", "groupby_value_label": "No children [note 7]", "measure_id": "households", "measure_label": "Households, 2023 estimate", "measure_ordinal": 0, "record_set_id": "ons.families_households_2025.table7.cy2023", "record_set_spec_hash": "0ea9705065c1ac17dfce8be4", "record_set_spec_id": "ons.families_households_2025.table7.cy2023.v1", "source_column_id": "households", "source_row_id": "couple_no_children_households", "table_record_kind": "detail"}, "legacy_fact_key": "ledger.fact.v1:59f4d215776ade6f38f973a6", "lineage": {"source_cell_keys": ["ledger.source_cell.v1:e55f7b353e3e47e85b5351e2", "ledger.source_cell.v1:2531e3e8f7340928e989b0ef"], "source_record_id": "ons.families_households_2025.table7.cy2023.couple_no_children_households.households", "source_row_keys": []}, "observed_measure": {"source_concept": "ons.families_households_table7", "source_measure_id": "households", "source_name": "ons", "source_table": "Families and households in the UK 2025, Table 7: households by type", "unit": "count"}, "observed_measure_key": "ledger.observed_measure.v2:f5e97dfafe656d78d5ad97fc", "period": {"type": "calendar_year", "value": 2023}, "provenance_class": "survey_aggregate", "schema_version": "ledger.consumer_fact.v1", "semantic_fact_key": "ledger.semantic_fact.v2:916305bb92da344beede7402", "source": {"extracted_at": "2026-08-06", "extraction_method": "CellSelectorSpec and SourceRecordSpec resolved from cells", "method_notes": "Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.", "raw_r2_bucket": "ledger-raw", "raw_r2_key": "raw/ons/ons-families-households-2025/2025/a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91/familiesandhouseholdsuk2025.xlsx", "raw_r2_uri": "r2://ledger-raw/raw/ons/ons-families-households-2025/2025/a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91/familiesandhouseholdsuk2025.xlsx", "source_file": "familiesandhouseholdsuk2025.xlsx", "source_name": "ons", "source_sha256": "a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91", "source_size_bytes": 209085, "source_table": "Families and households in the UK 2025, Table 7: households by type", "url": "https://www.ons.gov.uk/file?uri=/peoplepopulationandcommunity/birthsdeathsandmarriages/families/datasets/familiesandhouseholdsfamiliesandhouseholds/current/familiesandhouseholdsuk2025.xlsx", "vintage": "families_households_2025"}, "source_release_key": "ledger.source_release.v2:30b0ffd8d7245b0d6684989e", "source_series_key": "ledger.source_series.v2:9faf1c83fb31f4a881373e3c", "survey_instrument": "Labour Force Survey", "universe_constraint_set_key": "ledger.universe_constraint_set.v2:6b6e7e8ef3885da74f69530b", "universe_constraints": {"constraints": [{"operator": "==", "role": "filter", "value": "couple_no_children_households", "variable": "household_type"}], "domain": "household_composition"}, "value": 7956000, "value_type": "integer"} -{"aggregate_fact_key": "ledger.aggregate_fact.v2:1a5bcf85cdb2440d2e2bbee3", "aggregation": {"method": "sum"}, "assertion": "observation", "concept_alignment": {"authority": "ons", "canonical_concept": "ons.households_by_type", "concept_alignment_key": "ledger.concept_alignment.v2:cf85783836063df6a5d4ade3", "evidence_notes": "Families and households in the UK, 2025 edition, Table 7 households by type, 2023 estimate, thousands.", "evidence_url": "https://www.ons.gov.uk/peoplepopulationandcommunity/birthsdeathsandmarriages/families/datasets/familiesandhouseholdsfamiliesandhouseholds", "relation": "source_label", "source_concept": "ons.families_households_table7"}, "dimension_set_key": "ledger.dimension_set.v2:12b5c2a1d4a0867350fd061c", "dimensions": {"household_type": "couple_under_3_children_households"}, "entity": {"name": "household", "role": "resident_household"}, "geography": {"id": "K02000001", "level": "country", "vintage": "current"}, "label": "United Kingdom 2023 calendar year count ons households by type for household (household type=couple under 3 children households) [ons Families and households in the UK 2025, Table 7: households by type familiesandhouseholdsuk2025.xlsx families_households_2025]", "layout": {"groupby_dimension": "ons.household_type", "groupby_ordinal": 4, "groupby_value_id": "couple_under_3_children_households", "groupby_value_label": "1 to 2 dependent children [note 5]", "measure_id": "households", "measure_label": "Households, 2023 estimate", "measure_ordinal": 0, "record_set_id": "ons.families_households_2025.table7.cy2023", "record_set_spec_hash": "0ea9705065c1ac17dfce8be4", "record_set_spec_id": "ons.families_households_2025.table7.cy2023.v1", "source_column_id": "households", "source_row_id": "couple_under_3_children_households", "table_record_kind": "detail"}, "legacy_fact_key": "ledger.fact.v1:0ebdade3b55e7559849eb107", "lineage": {"source_cell_keys": ["ledger.source_cell.v1:d07ff2fd8a7e64097d20dbcc", "ledger.source_cell.v1:2531e3e8f7340928e989b0ef"], "source_record_id": "ons.families_households_2025.table7.cy2023.couple_under_3_children_households.households", "source_row_keys": []}, "observed_measure": {"source_concept": "ons.families_households_table7", "source_measure_id": "households", "source_name": "ons", "source_table": "Families and households in the UK 2025, Table 7: households by type", "unit": "count"}, "observed_measure_key": "ledger.observed_measure.v2:f5e97dfafe656d78d5ad97fc", "period": {"type": "calendar_year", "value": 2023}, "provenance_class": "survey_aggregate", "schema_version": "ledger.consumer_fact.v1", "semantic_fact_key": "ledger.semantic_fact.v2:c1a357a1e496bb6d37a6c7a9", "source": {"extracted_at": "2026-08-06", "extraction_method": "CellSelectorSpec and SourceRecordSpec resolved from cells", "method_notes": "Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.", "raw_r2_bucket": "ledger-raw", "raw_r2_key": "raw/ons/ons-families-households-2025/2025/a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91/familiesandhouseholdsuk2025.xlsx", "raw_r2_uri": "r2://ledger-raw/raw/ons/ons-families-households-2025/2025/a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91/familiesandhouseholdsuk2025.xlsx", "source_file": "familiesandhouseholdsuk2025.xlsx", "source_name": "ons", "source_sha256": "a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91", "source_size_bytes": 209085, "source_table": "Families and households in the UK 2025, Table 7: households by type", "url": "https://www.ons.gov.uk/file?uri=/peoplepopulationandcommunity/birthsdeathsandmarriages/families/datasets/familiesandhouseholdsfamiliesandhouseholds/current/familiesandhouseholdsuk2025.xlsx", "vintage": "families_households_2025"}, "source_release_key": "ledger.source_release.v2:30b0ffd8d7245b0d6684989e", "source_series_key": "ledger.source_series.v2:9faf1c83fb31f4a881373e3c", "survey_instrument": "Labour Force Survey", "universe_constraint_set_key": "ledger.universe_constraint_set.v2:d4e1d564c76bf14c2660f69c", "universe_constraints": {"constraints": [{"operator": "==", "role": "filter", "value": "couple_under_3_children_households", "variable": "household_type"}], "domain": "household_composition"}, "value": 5210000, "value_type": "integer"} -{"aggregate_fact_key": "ledger.aggregate_fact.v2:f9c5f6507123ddea8230de9b", "aggregation": {"method": "sum"}, "assertion": "observation", "concept_alignment": {"authority": "ons", "canonical_concept": "ons.households_by_type", "concept_alignment_key": "ledger.concept_alignment.v2:cf85783836063df6a5d4ade3", "evidence_notes": "Families and households in the UK, 2025 edition, Table 7 households by type, 2023 estimate, thousands.", "evidence_url": "https://www.ons.gov.uk/peoplepopulationandcommunity/birthsdeathsandmarriages/families/datasets/familiesandhouseholdsfamiliesandhouseholds", "relation": "source_label", "source_concept": "ons.families_households_table7"}, "dimension_set_key": "ledger.dimension_set.v2:d7fd900bfb7f45f15b68473f", "dimensions": {"household_type": "couple_3_plus_children_households"}, "entity": {"name": "household", "role": "resident_household"}, "geography": {"id": "K02000001", "level": "country", "vintage": "current"}, "label": "United Kingdom 2023 calendar year count ons households by type for household (household type=couple 3 plus children households) [ons Families and households in the UK 2025, Table 7: households by type familiesandhouseholdsuk2025.xlsx families_households_2025]", "layout": {"groupby_dimension": "ons.household_type", "groupby_ordinal": 5, "groupby_value_id": "couple_3_plus_children_households", "groupby_value_label": "3 or more dependent children [note 5]", "measure_id": "households", "measure_label": "Households, 2023 estimate", "measure_ordinal": 0, "record_set_id": "ons.families_households_2025.table7.cy2023", "record_set_spec_hash": "0ea9705065c1ac17dfce8be4", "record_set_spec_id": "ons.families_households_2025.table7.cy2023.v1", "source_column_id": "households", "source_row_id": "couple_3_plus_children_households", "table_record_kind": "detail"}, "legacy_fact_key": "ledger.fact.v1:c3fb5e9030abcebf649711e6", "lineage": {"source_cell_keys": ["ledger.source_cell.v1:2d007d1d11f4156c26546aa6", "ledger.source_cell.v1:2531e3e8f7340928e989b0ef"], "source_record_id": "ons.families_households_2025.table7.cy2023.couple_3_plus_children_households.households", "source_row_keys": []}, "observed_measure": {"source_concept": "ons.families_households_table7", "source_measure_id": "households", "source_name": "ons", "source_table": "Families and households in the UK 2025, Table 7: households by type", "unit": "count"}, "observed_measure_key": "ledger.observed_measure.v2:f5e97dfafe656d78d5ad97fc", "period": {"type": "calendar_year", "value": 2023}, "provenance_class": "survey_aggregate", "schema_version": "ledger.consumer_fact.v1", "semantic_fact_key": "ledger.semantic_fact.v2:5bdc916cbf1d7f0b0ea5bcc7", "source": {"extracted_at": "2026-08-06", "extraction_method": "CellSelectorSpec and SourceRecordSpec resolved from cells", "method_notes": "Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.", "raw_r2_bucket": "ledger-raw", "raw_r2_key": "raw/ons/ons-families-households-2025/2025/a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91/familiesandhouseholdsuk2025.xlsx", "raw_r2_uri": "r2://ledger-raw/raw/ons/ons-families-households-2025/2025/a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91/familiesandhouseholdsuk2025.xlsx", "source_file": "familiesandhouseholdsuk2025.xlsx", "source_name": "ons", "source_sha256": "a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91", "source_size_bytes": 209085, "source_table": "Families and households in the UK 2025, Table 7: households by type", "url": "https://www.ons.gov.uk/file?uri=/peoplepopulationandcommunity/birthsdeathsandmarriages/families/datasets/familiesandhouseholdsfamiliesandhouseholds/current/familiesandhouseholdsuk2025.xlsx", "vintage": "families_households_2025"}, "source_release_key": "ledger.source_release.v2:30b0ffd8d7245b0d6684989e", "source_series_key": "ledger.source_series.v2:9faf1c83fb31f4a881373e3c", "survey_instrument": "Labour Force Survey", "universe_constraint_set_key": "ledger.universe_constraint_set.v2:c4e4babbd1e59a47ffbb0a02", "universe_constraints": {"constraints": [{"operator": "==", "role": "filter", "value": "couple_3_plus_children_households", "variable": "household_type"}], "domain": "household_composition"}, "value": 907000, "value_type": "integer"} -{"aggregate_fact_key": "ledger.aggregate_fact.v2:b8c8ee8287142d33e8c4d258", "aggregation": {"method": "sum"}, "assertion": "observation", "concept_alignment": {"authority": "ons", "canonical_concept": "ons.households_by_type", "concept_alignment_key": "ledger.concept_alignment.v2:cf85783836063df6a5d4ade3", "evidence_notes": "Families and households in the UK, 2025 edition, Table 7 households by type, 2023 estimate, thousands.", "evidence_url": "https://www.ons.gov.uk/peoplepopulationandcommunity/birthsdeathsandmarriages/families/datasets/familiesandhouseholdsfamiliesandhouseholds", "relation": "source_label", "source_concept": "ons.families_households_table7"}, "dimension_set_key": "ledger.dimension_set.v2:7942e7c827a3a477da809695", "dimensions": {"household_type": "couple_non_dependent_children_only_households"}, "entity": {"name": "household", "role": "resident_household"}, "geography": {"id": "K02000001", "level": "country", "vintage": "current"}, "label": "United Kingdom 2023 calendar year count ons households by type for household (household type=couple non dependent children only households) [ons Families and households in the UK 2025, Table 7: households by type familiesandhouseholdsuk2025.xlsx families_households_2025]", "layout": {"groupby_dimension": "ons.household_type", "groupby_ordinal": 6, "groupby_value_id": "couple_non_dependent_children_only_households", "groupby_value_label": "Non-dependent children only [note 6]", "measure_id": "households", "measure_label": "Households, 2023 estimate", "measure_ordinal": 0, "record_set_id": "ons.families_households_2025.table7.cy2023", "record_set_spec_hash": "0ea9705065c1ac17dfce8be4", "record_set_spec_id": "ons.families_households_2025.table7.cy2023.v1", "source_column_id": "households", "source_row_id": "couple_non_dependent_children_only_households", "table_record_kind": "detail"}, "legacy_fact_key": "ledger.fact.v1:a07847d3e21058cf8f58fe90", "lineage": {"source_cell_keys": ["ledger.source_cell.v1:eebbbb8900482c3d7352b7e5", "ledger.source_cell.v1:2531e3e8f7340928e989b0ef"], "source_record_id": "ons.families_households_2025.table7.cy2023.couple_non_dependent_children_only_households.households", "source_row_keys": []}, "observed_measure": {"source_concept": "ons.families_households_table7", "source_measure_id": "households", "source_name": "ons", "source_table": "Families and households in the UK 2025, Table 7: households by type", "unit": "count"}, "observed_measure_key": "ledger.observed_measure.v2:f5e97dfafe656d78d5ad97fc", "period": {"type": "calendar_year", "value": 2023}, "provenance_class": "survey_aggregate", "schema_version": "ledger.consumer_fact.v1", "semantic_fact_key": "ledger.semantic_fact.v2:7ec88da6a8718f9ab9aa5415", "source": {"extracted_at": "2026-08-06", "extraction_method": "CellSelectorSpec and SourceRecordSpec resolved from cells", "method_notes": "Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.", "raw_r2_bucket": "ledger-raw", "raw_r2_key": "raw/ons/ons-families-households-2025/2025/a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91/familiesandhouseholdsuk2025.xlsx", "raw_r2_uri": "r2://ledger-raw/raw/ons/ons-families-households-2025/2025/a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91/familiesandhouseholdsuk2025.xlsx", "source_file": "familiesandhouseholdsuk2025.xlsx", "source_name": "ons", "source_sha256": "a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91", "source_size_bytes": 209085, "source_table": "Families and households in the UK 2025, Table 7: households by type", "url": "https://www.ons.gov.uk/file?uri=/peoplepopulationandcommunity/birthsdeathsandmarriages/families/datasets/familiesandhouseholdsfamiliesandhouseholds/current/familiesandhouseholdsuk2025.xlsx", "vintage": "families_households_2025"}, "source_release_key": "ledger.source_release.v2:30b0ffd8d7245b0d6684989e", "source_series_key": "ledger.source_series.v2:9faf1c83fb31f4a881373e3c", "survey_instrument": "Labour Force Survey", "universe_constraint_set_key": "ledger.universe_constraint_set.v2:93df84662f9006f179b40205", "universe_constraints": {"constraints": [{"operator": "==", "role": "filter", "value": "couple_non_dependent_children_only_households", "variable": "household_type"}], "domain": "household_composition"}, "value": 1793000, "value_type": "integer"} -{"aggregate_fact_key": "ledger.aggregate_fact.v2:8de5968337dd81ca4f8535df", "aggregation": {"method": "sum"}, "assertion": "observation", "concept_alignment": {"authority": "ons", "canonical_concept": "ons.households_by_type", "concept_alignment_key": "ledger.concept_alignment.v2:cf85783836063df6a5d4ade3", "evidence_notes": "Families and households in the UK, 2025 edition, Table 7 households by type, 2023 estimate, thousands.", "evidence_url": "https://www.ons.gov.uk/peoplepopulationandcommunity/birthsdeathsandmarriages/families/datasets/familiesandhouseholdsfamiliesandhouseholds", "relation": "source_label", "source_concept": "ons.families_households_table7"}, "dimension_set_key": "ledger.dimension_set.v2:5e7a4436130bc8818b1d00c7", "dimensions": {"household_type": "lone_parent_dependent_children_households"}, "entity": {"name": "household", "role": "resident_household"}, "geography": {"id": "K02000001", "level": "country", "vintage": "current"}, "label": "United Kingdom 2023 calendar year count ons households by type for household (household type=lone parent dependent children households) [ons Families and households in the UK 2025, Table 7: households by type familiesandhouseholdsuk2025.xlsx families_households_2025]", "layout": {"groupby_dimension": "ons.household_type", "groupby_ordinal": 7, "groupby_value_id": "lone_parent_dependent_children_households", "groupby_value_label": "Dependent children [note 5]", "measure_id": "households", "measure_label": "Households, 2023 estimate", "measure_ordinal": 0, "record_set_id": "ons.families_households_2025.table7.cy2023", "record_set_spec_hash": "0ea9705065c1ac17dfce8be4", "record_set_spec_id": "ons.families_households_2025.table7.cy2023.v1", "source_column_id": "households", "source_row_id": "lone_parent_dependent_children_households", "table_record_kind": "detail"}, "legacy_fact_key": "ledger.fact.v1:f731755c1eb1257215325eb5", "lineage": {"source_cell_keys": ["ledger.source_cell.v1:be2fcd478d8951c07a5fd412", "ledger.source_cell.v1:2531e3e8f7340928e989b0ef"], "source_record_id": "ons.families_households_2025.table7.cy2023.lone_parent_dependent_children_households.households", "source_row_keys": []}, "observed_measure": {"source_concept": "ons.families_households_table7", "source_measure_id": "households", "source_name": "ons", "source_table": "Families and households in the UK 2025, Table 7: households by type", "unit": "count"}, "observed_measure_key": "ledger.observed_measure.v2:f5e97dfafe656d78d5ad97fc", "period": {"type": "calendar_year", "value": 2023}, "provenance_class": "survey_aggregate", "schema_version": "ledger.consumer_fact.v1", "semantic_fact_key": "ledger.semantic_fact.v2:716d62bd573ceb74c7b35944", "source": {"extracted_at": "2026-08-06", "extraction_method": "CellSelectorSpec and SourceRecordSpec resolved from cells", "method_notes": "Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.", "raw_r2_bucket": "ledger-raw", "raw_r2_key": "raw/ons/ons-families-households-2025/2025/a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91/familiesandhouseholdsuk2025.xlsx", "raw_r2_uri": "r2://ledger-raw/raw/ons/ons-families-households-2025/2025/a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91/familiesandhouseholdsuk2025.xlsx", "source_file": "familiesandhouseholdsuk2025.xlsx", "source_name": "ons", "source_sha256": "a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91", "source_size_bytes": 209085, "source_table": "Families and households in the UK 2025, Table 7: households by type", "url": "https://www.ons.gov.uk/file?uri=/peoplepopulationandcommunity/birthsdeathsandmarriages/families/datasets/familiesandhouseholdsfamiliesandhouseholds/current/familiesandhouseholdsuk2025.xlsx", "vintage": "families_households_2025"}, "source_release_key": "ledger.source_release.v2:30b0ffd8d7245b0d6684989e", "source_series_key": "ledger.source_series.v2:9faf1c83fb31f4a881373e3c", "survey_instrument": "Labour Force Survey", "universe_constraint_set_key": "ledger.universe_constraint_set.v2:e5e64145c01a3e80897fff00", "universe_constraints": {"constraints": [{"operator": "==", "role": "filter", "value": "lone_parent_dependent_children_households", "variable": "household_type"}], "domain": "household_composition"}, "value": 1904000, "value_type": "integer"} -{"aggregate_fact_key": "ledger.aggregate_fact.v2:1f3edfb1625210d30165615f", "aggregation": {"method": "sum"}, "assertion": "observation", "concept_alignment": {"authority": "ons", "canonical_concept": "ons.households_by_type", "concept_alignment_key": "ledger.concept_alignment.v2:cf85783836063df6a5d4ade3", "evidence_notes": "Families and households in the UK, 2025 edition, Table 7 households by type, 2023 estimate, thousands.", "evidence_url": "https://www.ons.gov.uk/peoplepopulationandcommunity/birthsdeathsandmarriages/families/datasets/familiesandhouseholdsfamiliesandhouseholds", "relation": "source_label", "source_concept": "ons.families_households_table7"}, "dimension_set_key": "ledger.dimension_set.v2:90eca614baf612a013ef6626", "dimensions": {"household_type": "lone_parent_non_dependent_children_households"}, "entity": {"name": "household", "role": "resident_household"}, "geography": {"id": "K02000001", "level": "country", "vintage": "current"}, "label": "United Kingdom 2023 calendar year count ons households by type for household (household type=lone parent non dependent children households) [ons Families and households in the UK 2025, Table 7: households by type familiesandhouseholdsuk2025.xlsx families_households_2025]", "layout": {"groupby_dimension": "ons.household_type", "groupby_ordinal": 8, "groupby_value_id": "lone_parent_non_dependent_children_households", "groupby_value_label": "Non-dependent children only [note 6]", "measure_id": "households", "measure_label": "Households, 2023 estimate", "measure_ordinal": 0, "record_set_id": "ons.families_households_2025.table7.cy2023", "record_set_spec_hash": "0ea9705065c1ac17dfce8be4", "record_set_spec_id": "ons.families_households_2025.table7.cy2023.v1", "source_column_id": "households", "source_row_id": "lone_parent_non_dependent_children_households", "table_record_kind": "detail"}, "legacy_fact_key": "ledger.fact.v1:2a61e7da1ae5d62699612be5", "lineage": {"source_cell_keys": ["ledger.source_cell.v1:29c1500b656305ab825ca54d", "ledger.source_cell.v1:2531e3e8f7340928e989b0ef"], "source_record_id": "ons.families_households_2025.table7.cy2023.lone_parent_non_dependent_children_households.households", "source_row_keys": []}, "observed_measure": {"source_concept": "ons.families_households_table7", "source_measure_id": "households", "source_name": "ons", "source_table": "Families and households in the UK 2025, Table 7: households by type", "unit": "count"}, "observed_measure_key": "ledger.observed_measure.v2:f5e97dfafe656d78d5ad97fc", "period": {"type": "calendar_year", "value": 2023}, "provenance_class": "survey_aggregate", "schema_version": "ledger.consumer_fact.v1", "semantic_fact_key": "ledger.semantic_fact.v2:f748ef2f89c88332f9aaa041", "source": {"extracted_at": "2026-08-06", "extraction_method": "CellSelectorSpec and SourceRecordSpec resolved from cells", "method_notes": "Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.", "raw_r2_bucket": "ledger-raw", "raw_r2_key": "raw/ons/ons-families-households-2025/2025/a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91/familiesandhouseholdsuk2025.xlsx", "raw_r2_uri": "r2://ledger-raw/raw/ons/ons-families-households-2025/2025/a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91/familiesandhouseholdsuk2025.xlsx", "source_file": "familiesandhouseholdsuk2025.xlsx", "source_name": "ons", "source_sha256": "a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91", "source_size_bytes": 209085, "source_table": "Families and households in the UK 2025, Table 7: households by type", "url": "https://www.ons.gov.uk/file?uri=/peoplepopulationandcommunity/birthsdeathsandmarriages/families/datasets/familiesandhouseholdsfamiliesandhouseholds/current/familiesandhouseholdsuk2025.xlsx", "vintage": "families_households_2025"}, "source_release_key": "ledger.source_release.v2:30b0ffd8d7245b0d6684989e", "source_series_key": "ledger.source_series.v2:9faf1c83fb31f4a881373e3c", "survey_instrument": "Labour Force Survey", "universe_constraint_set_key": "ledger.universe_constraint_set.v2:2ce43f154fad7678999d1d5c", "universe_constraints": {"constraints": [{"operator": "==", "role": "filter", "value": "lone_parent_non_dependent_children_households", "variable": "household_type"}], "domain": "household_composition"}, "value": 1089000, "value_type": "integer"} -{"aggregate_fact_key": "ledger.aggregate_fact.v2:8744ec315072dd0e31c10459", "aggregation": {"method": "sum"}, "assertion": "observation", "concept_alignment": {"authority": "ons", "canonical_concept": "ons.households_by_type", "concept_alignment_key": "ledger.concept_alignment.v2:cf85783836063df6a5d4ade3", "evidence_notes": "Families and households in the UK, 2025 edition, Table 7 households by type, 2023 estimate, thousands.", "evidence_url": "https://www.ons.gov.uk/peoplepopulationandcommunity/birthsdeathsandmarriages/families/datasets/familiesandhouseholdsfamiliesandhouseholds", "relation": "source_label", "source_concept": "ons.families_households_table7"}, "dimension_set_key": "ledger.dimension_set.v2:5677de3faee3453bcf1fb7bb", "dimensions": {"household_type": "multi_family_households"}, "entity": {"name": "household", "role": "resident_household"}, "geography": {"id": "K02000001", "level": "country", "vintage": "current"}, "label": "United Kingdom 2023 calendar year count ons households by type for household (household type=multi family households) [ons Families and households in the UK 2025, Table 7: households by type familiesandhouseholdsuk2025.xlsx families_households_2025]", "layout": {"groupby_dimension": "ons.household_type", "groupby_ordinal": 9, "groupby_value_id": "multi_family_households", "groupby_value_label": "Multi-family households [note 4] [note 11]", "measure_id": "households", "measure_label": "Households, 2023 estimate", "measure_ordinal": 0, "record_set_id": "ons.families_households_2025.table7.cy2023", "record_set_spec_hash": "0ea9705065c1ac17dfce8be4", "record_set_spec_id": "ons.families_households_2025.table7.cy2023.v1", "source_column_id": "households", "source_row_id": "multi_family_households", "table_record_kind": "detail"}, "legacy_fact_key": "ledger.fact.v1:d6d9180df2b31443fda38cfd", "lineage": {"source_cell_keys": ["ledger.source_cell.v1:b7942fa27d2a054808af7b32", "ledger.source_cell.v1:2531e3e8f7340928e989b0ef"], "source_record_id": "ons.families_households_2025.table7.cy2023.multi_family_households.households", "source_row_keys": []}, "observed_measure": {"source_concept": "ons.families_households_table7", "source_measure_id": "households", "source_name": "ons", "source_table": "Families and households in the UK 2025, Table 7: households by type", "unit": "count"}, "observed_measure_key": "ledger.observed_measure.v2:f5e97dfafe656d78d5ad97fc", "period": {"type": "calendar_year", "value": 2023}, "provenance_class": "survey_aggregate", "schema_version": "ledger.consumer_fact.v1", "semantic_fact_key": "ledger.semantic_fact.v2:72ff59ddf703db6b4b318dde", "source": {"extracted_at": "2026-08-06", "extraction_method": "CellSelectorSpec and SourceRecordSpec resolved from cells", "method_notes": "Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.", "raw_r2_bucket": "ledger-raw", "raw_r2_key": "raw/ons/ons-families-households-2025/2025/a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91/familiesandhouseholdsuk2025.xlsx", "raw_r2_uri": "r2://ledger-raw/raw/ons/ons-families-households-2025/2025/a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91/familiesandhouseholdsuk2025.xlsx", "source_file": "familiesandhouseholdsuk2025.xlsx", "source_name": "ons", "source_sha256": "a89eaa3d7f519bfa949c7cfa12f531b8c7a86c704adcb70e81f49567ae724a91", "source_size_bytes": 209085, "source_table": "Families and households in the UK 2025, Table 7: households by type", "url": "https://www.ons.gov.uk/file?uri=/peoplepopulationandcommunity/birthsdeathsandmarriages/families/datasets/familiesandhouseholdsfamiliesandhouseholds/current/familiesandhouseholdsuk2025.xlsx", "vintage": "families_households_2025"}, "source_release_key": "ledger.source_release.v2:30b0ffd8d7245b0d6684989e", "source_series_key": "ledger.source_series.v2:9faf1c83fb31f4a881373e3c", "survey_instrument": "Labour Force Survey", "universe_constraint_set_key": "ledger.universe_constraint_set.v2:cfed459f0f1b30ed81d17c2e", "universe_constraints": {"constraints": [{"operator": "==", "role": "filter", "value": "multi_family_households", "variable": "household_type"}], "domain": "household_composition"}, "value": 290000, "value_type": "integer"} -{"aggregate_fact_key": "ledger.aggregate_fact.v2:2d8306be080946696b35e1ee", "aggregation": {"method": "sum"}, "assertion": "observation", "concept_alignment": {"authority": "ons", "canonical_concept": "ons.household_interest_resources", "concept_alignment_key": "ledger.concept_alignment.v2:211be3157e39540b9ed894af", "evidence_notes": "UKEA series HAXV, households (S.14) interest (D.41) resources, current price GBP million NSA; annual observation for 2023; 30 June 2026 release.", "evidence_url": "https://www.ons.gov.uk/economy/grossdomesticproductgdp/timeseries/haxv/ukea", "relation": "source_label", "source_concept": "ons.ukea_haxv"}, "dimension_set_key": "ledger.dimension_set.v2:44136fa355b3678a1146ad16", "dimensions": {}, "entity": {"name": "household", "role": "resident_household"}, "geography": {"id": "K02000001", "level": "country", "vintage": "current"}, "label": "United Kingdom 2023 calendar year sum ons household interest resources for household [ons UKEA time series HAXV: Households (S.14) interest (D.41) resources, current price GBP million NSA haxv.csv ukea_2026_06_30]", "layout": {"groupby_dimension": "ons.ukea_series", "groupby_ordinal": 0, "groupby_value_id": "haxv", "groupby_value_label": "Households interest resources (D.41), 2023", "measure_id": "amount", "measure_label": "Interest resources, current price", "measure_ordinal": 0, "record_set_id": "ons.ukea_haxv.savings_interest.cy2023", "record_set_spec_hash": "54a556f26fc3f77a4761ff2d", "record_set_spec_id": "ons.ukea_haxv.savings_interest.cy2023.v1", "source_column_id": "amount", "source_row_id": "haxv", "table_record_kind": "total"}, "legacy_fact_key": "ledger.fact.v1:26472d1cd1730a29a966ad7c", "lineage": {"source_cell_keys": ["ledger.source_cell.v1:f0675ff3dc39581313d2b30b"], "source_record_id": "ons.ukea_haxv.savings_interest.cy2023.haxv.amount", "source_row_keys": ["ledger.source_row.v1:7a1af57e305e785a371eae75"]}, "observed_measure": {"source_concept": "ons.ukea_haxv", "source_measure_id": "amount", "source_name": "ons", "source_table": "UKEA time series HAXV: Households (S.14) interest (D.41) resources, current price GBP million NSA", "unit": "gbp"}, "observed_measure_key": "ledger.observed_measure.v2:90a2a7fffdd0f18ccef24b4b", "period": {"type": "calendar_year", "value": 2023}, "provenance_class": "model_output", "schema_version": "ledger.consumer_fact.v1", "semantic_fact_key": "ledger.semantic_fact.v2:9ac263134990690ff4d4aeca", "source": {"extracted_at": "2026-08-06", "extraction_method": "CellSelectorSpec and SourceRecordSpec resolved from cells", "method_notes": "Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.", "raw_r2_bucket": "ledger-raw", "raw_r2_key": "raw/ons/ons-savings-interest-income/2025/e19959488d2cfd5dcf16e58e1ea40916f6ada02a56340cc6d9099983ab3d7455/haxv.csv", "raw_r2_uri": "r2://ledger-raw/raw/ons/ons-savings-interest-income/2025/e19959488d2cfd5dcf16e58e1ea40916f6ada02a56340cc6d9099983ab3d7455/haxv.csv", "source_file": "haxv.csv", "source_name": "ons", "source_sha256": "e19959488d2cfd5dcf16e58e1ea40916f6ada02a56340cc6d9099983ab3d7455", "source_size_bytes": 3517, "source_table": "UKEA time series HAXV: Households (S.14) interest (D.41) resources, current price GBP million NSA", "url": "https://www.ons.gov.uk/generator?format=csv&uri=/economy/grossdomesticproductgdp/timeseries/haxv/ukea", "vintage": "ukea_2026_06_30"}, "source_release_key": "ledger.source_release.v2:b751c41b3a24bf9318fc5ef5", "source_series_key": "ledger.source_series.v2:eba1daee637269097aae41d2", "universe_constraint_set_key": "ledger.universe_constraint_set.v2:fa6e32cc24b49ed112373325", "universe_constraints": {"domain": "national_accounts"}, "value": 86040000000, "value_type": "integer"} -{"aggregate_fact_key": "ledger.aggregate_fact.v2:13db6458448be6778d734c6d", "aggregation": {"method": "sum"}, "assertion": "observation", "concept_alignment": {"authority": "ons", "canonical_concept": "ons.pse_headcount_total_public_sector", "concept_alignment_key": "ledger.concept_alignment.v2:3f939abcfd2534dcb3d09440", "evidence_notes": "Public sector employment reference table, March 2026 edition, Table 1 (public sector employment by sector classification, headcount, UK, thousands), row Dec 2023, series G7AU (Total public sector).", "evidence_url": "https://www.ons.gov.uk/employmentandlabourmarket/peopleinwork/publicsectorpersonnel/datasets/publicsectoremploymentreferencetable", "relation": "source_label", "source_concept": "ons.g7au"}, "dimension_set_key": "ledger.dimension_set.v2:44136fa355b3678a1146ad16", "dimensions": {}, "entity": {"name": "person", "role": "public_sector_employee"}, "geography": {"id": "K02000001", "level": "country", "vintage": "current"}, "label": "United Kingdom 2023-12 month count ons pse headcount total public sector for person [ons Public sector employment reference table, UK, March 2026 edition pse-reference-table-march2026.xlsx pse_march_2026]", "layout": {"groupby_dimension": "ons.pse_sector_classification", "groupby_ordinal": 0, "groupby_value_id": "dec2023", "groupby_value_label": "Dec 2023", "measure_id": "total_public_sector", "measure_label": "Public sector employment headcount, Total public sector, Dec 2023", "measure_ordinal": 4, "record_set_id": "ons.pse_march2026.table1.dec2023", "record_set_spec_hash": "d3cbbb78d9321555f17c693e", "record_set_spec_id": "ons.pse_march2026.table1.dec2023.v1", "source_column_id": "total_public_sector", "source_row_id": "dec2023", "table_record_kind": "total"}, "legacy_fact_key": "ledger.fact.v1:29e8f77ae80ecb7a1c08ef70", "lineage": {"source_cell_keys": ["ledger.source_cell.v1:579c63ac34c0bf18b037453c", "ledger.source_cell.v1:6bc94cddc923c5f1bc1da995"], "source_record_id": "ons.pse_march2026.table1.dec2023.dec2023.total_public_sector", "source_row_keys": []}, "observed_measure": {"source_concept": "ons.g7au", "source_measure_id": "total_public_sector", "source_name": "ons", "source_table": "Public sector employment reference table, UK, March 2026 edition", "unit": "count"}, "observed_measure_key": "ledger.observed_measure.v2:f471420c3faf6b14a46a2a04", "period": {"type": "month", "value": "2023-12"}, "provenance_class": "survey_aggregate", "schema_version": "ledger.consumer_fact.v1", "semantic_fact_key": "ledger.semantic_fact.v2:95517ab43857e313e352e0d7", "source": {"extracted_at": "2026-08-07", "extraction_method": "CellSelectorSpec and SourceRecordSpec resolved from cells", "method_notes": "Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.", "raw_r2_bucket": "ledger-raw", "raw_r2_key": "raw/ons/ons-public-sector-employment-2026/2026/aa04454e77ae1a45d26e7a89801a946721b9c8f00b7760cf72f4edaa2482509c/pse-reference-table-march2026.xlsx", "raw_r2_uri": "r2://ledger-raw/raw/ons/ons-public-sector-employment-2026/2026/aa04454e77ae1a45d26e7a89801a946721b9c8f00b7760cf72f4edaa2482509c/pse-reference-table-march2026.xlsx", "source_file": "pse-reference-table-march2026.xlsx", "source_name": "ons", "source_sha256": "aa04454e77ae1a45d26e7a89801a946721b9c8f00b7760cf72f4edaa2482509c", "source_size_bytes": 225893, "source_table": "Public sector employment reference table, UK, March 2026 edition", "url": "https://www.ons.gov.uk/file?uri=/employmentandlabourmarket/peopleinwork/publicsectorpersonnel/datasets/publicsectoremploymentreferencetable/march2026/datasets.xlsx", "vintage": "pse_march_2026"}, "source_release_key": "ledger.source_release.v2:1f9022736d3d7824c98d8415", "source_series_key": "ledger.source_series.v2:558bdb2e8110d0edbc8ade29", "survey_instrument": "Quarterly Public Sector Employment Survey", "universe_constraint_set_key": "ledger.universe_constraint_set.v2:3a69adaf2f3734585a77b8eb", "universe_constraints": {"domain": "public_sector_employment"}, "value": 6089000, "value_type": "integer"} +{"aggregate_fact_key": "ledger.aggregate_fact.v2:1b082e386beee3c6900e9dfa", "aggregation": {"method": "sum"}, "assertion": "observation", "concept_alignment": {"authority": "hmrc", "canonical_concept": "hmrc.cgt_gains_total", "concept_alignment_key": "ledger.concept_alignment.v2:cd804afc02f283a70c7df5d5", "evidence_notes": "CGT statistics 2025 release, Table 1, year of disposal 2023 to 2024; counts in thousands, amounts GBP million. Provisional per publication notes.", "evidence_url": "https://www.gov.uk/government/statistics/capital-gains-tax-statistics", "relation": "source_label", "source_concept": "hmrc.cgt_gains_total"}, "dimension_set_key": "ledger.dimension_set.v2:44136fa355b3678a1146ad16", "dimensions": {}, "entity": {"name": "person", "role": "taxpayer"}, "geography": {"id": "K02000001", "level": "country", "vintage": "current"}, "label": "United Kingdom 2023 tax year sum hmrc cgt gains total for person [hmrc Capital Gains Tax statistics Table 1: taxpayer numbers, gains and tax liabilities by year of disposal Table_1_2025.ods cgt_statistics_2025]", "layout": {"groupby_dimension": "hmrc.cgt_table1_line", "groupby_ordinal": 0, "groupby_value_id": "ty2023", "groupby_value_label": "Year of disposal 2023 to 2024", "measure_id": "total_gains", "measure_label": "Chargeable gains, total", "measure_ordinal": 7, "record_set_id": "hmrc.cgt_statistics_2025.table1.ty2023", "record_set_spec_hash": "b27f186424c62509e6a5e134", "record_set_spec_id": "hmrc.cgt_statistics_2025.table1.ty2023.v1", "source_column_id": "total_gains", "source_row_id": "ty2023", "table_record_kind": "total"}, "legacy_fact_key": "ledger.fact.v1:f492a811d673243b30a72d14", "lineage": {"source_cell_keys": ["ledger.source_cell.v1:e35da0de9817851d700b614f", "ledger.source_cell.v1:70d71881a68af5ec3e5388b2"], "source_record_id": "hmrc.cgt_statistics_2025.table1.ty2023.ty2023.total_gains", "source_row_keys": []}, "observed_measure": {"source_concept": "hmrc.cgt_gains_total", "source_measure_id": "total_gains", "source_name": "hmrc", "source_table": "Capital Gains Tax statistics Table 1: taxpayer numbers, gains and tax liabilities by year of disposal", "unit": "gbp"}, "observed_measure_key": "ledger.observed_measure.v2:76f6824292f0e8bd3edb801f", "period": {"type": "tax_year", "value": 2023}, "provenance_class": "administrative", "schema_version": "ledger.consumer_fact.v1", "semantic_fact_key": "ledger.semantic_fact.v2:6e1a2ddc3a44d696e736dc6b", "source": {"extracted_at": "2026-08-06", "extraction_method": "CellSelectorSpec and SourceRecordSpec resolved from cells", "method_notes": "Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.", "raw_r2_bucket": "ledger-raw", "raw_r2_key": "raw/hmrc/hmrc-cgt-statistics-2025/2025/95c1bb1548483cb0ed0090e820a1fba129d725ade418cf64e5f85793655e92a1/Table_1_2025.ods", "raw_r2_uri": "r2://ledger-raw/raw/hmrc/hmrc-cgt-statistics-2025/2025/95c1bb1548483cb0ed0090e820a1fba129d725ade418cf64e5f85793655e92a1/Table_1_2025.ods", "source_file": "Table_1_2025.ods", "source_name": "hmrc", "source_sha256": "95c1bb1548483cb0ed0090e820a1fba129d725ade418cf64e5f85793655e92a1", "source_size_bytes": 10002, "source_table": "Capital Gains Tax statistics Table 1: taxpayer numbers, gains and tax liabilities by year of disposal", "url": "https://assets.publishing.service.gov.uk/media/6878ac497ea209168636386e/Table_1_2025_Taxpayer_numbers_gains_and_tax_liabilities.ods", "vintage": "cgt_statistics_2025"}, "source_release_key": "ledger.source_release.v2:a6b82e1799ccd4ba57608ccd", "source_series_key": "ledger.source_series.v2:de2bf2a36f1647b20877cc1a", "universe_constraint_set_key": "ledger.universe_constraint_set.v2:31e69e018123fa4b604582eb", "universe_constraints": {"domain": "capital_gains_tax"}, "value": 65937000000, "value_type": "integer"} +{"aggregate_fact_key": "ledger.aggregate_fact.v2:5c8d18b2366a234482594297", "aggregation": {"method": "sum"}, "assertion": "observation", "concept_alignment": {"authority": "slc", "canonical_concept": "slc.student_loan_net_repayments_plan_2_part_time", "concept_alignment_key": "ledger.concept_alignment.v2:9a74091cc27999e11145d771", "evidence_notes": "Student loans in England FY2024-25 (corrected tables, slcsp012025_Corrected), Table 1A ICR balance sheet, row 'Net repayments posted during the financial year', financial year 2024-25 column block, column: Plan 2 Part-time. GBP million.", "evidence_url": "https://www.gov.uk/government/statistics/student-loans-in-england-2024-to-2025", "relation": "source_label", "source_concept": "slc.student_loan_net_repayments_plan_2_part_time"}, "dimension_set_key": "ledger.dimension_set.v2:44136fa355b3678a1146ad16", "dimensions": {}, "entity": {"name": "person", "role": "student_loan_borrower"}, "geography": {"id": "E92000001", "level": "country", "vintage": "current"}, "label": "England 2024 fiscal year sum slc student loan net repayments plan 2 part time for person [slc Student loans in England, financial year 2024-25 (corrected tables), Table 1A slcsp012025_Corrected.xlsx slcsp01_2025_corrected]", "layout": {"groupby_dimension": "slc.repayment_plan", "groupby_ordinal": 0, "groupby_value_id": "net_repayments", "groupby_value_label": "Net repayments posted during the financial year", "measure_id": "plan_2_part_time", "measure_label": "Net repayments FY2024-25, Plan 2 Part-time", "measure_ordinal": 2, "record_set_id": "slc.repayments_2025.table_1a.fy2024", "record_set_spec_hash": "b748f6aeb2b7ad68bfb560a9", "record_set_spec_id": "slc.repayments_2025.table_1a.fy2024.v1", "source_column_id": "plan_2_part_time", "source_row_id": "net_repayments", "table_record_kind": "total"}, "legacy_fact_key": "ledger.fact.v1:8fe5511f3f5ce8b9e784ca33", "lineage": {"source_cell_keys": ["ledger.source_cell.v1:f0ba6c89d59a9cf501bd2dbc", "ledger.source_cell.v1:9ccc3a8147eeafcb76ff76fa", "ledger.source_cell.v1:446cc4b0c7a9f20af575ec37", "ledger.source_cell.v1:b3d5f4758ba698ba4a4578d4"], "source_record_id": "slc.repayments_2025.table_1a.fy2024.net_repayments.plan_2_part_time", "source_row_keys": []}, "observed_measure": {"source_concept": "slc.student_loan_net_repayments_plan_2_part_time", "source_measure_id": "plan_2_part_time", "source_name": "slc", "source_table": "Student loans in England, financial year 2024-25 (corrected tables), Table 1A", "unit": "gbp"}, "observed_measure_key": "ledger.observed_measure.v2:6cba6bfe750c9a218ebb12d8", "period": {"type": "fiscal_year", "value": 2024}, "provenance_class": "administrative", "schema_version": "ledger.consumer_fact.v1", "semantic_fact_key": "ledger.semantic_fact.v2:e9436ca620799ad1d4897afd", "source": {"extracted_at": "2026-08-08", "extraction_method": "CellSelectorSpec and SourceRecordSpec resolved from cells", "method_notes": "Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.", "raw_r2_bucket": "ledger-raw", "raw_r2_key": "raw/slc/slc-student-loan-repayments-england-2025/2025/a9ee065ba2d6af4be8584022ac50302f22f7229919e4171cf132039b0ca26aac/slcsp012025_Corrected.xlsx", "raw_r2_uri": "r2://ledger-raw/raw/slc/slc-student-loan-repayments-england-2025/2025/a9ee065ba2d6af4be8584022ac50302f22f7229919e4171cf132039b0ca26aac/slcsp012025_Corrected.xlsx", "source_file": "slcsp012025_Corrected.xlsx", "source_name": "slc", "source_sha256": "a9ee065ba2d6af4be8584022ac50302f22f7229919e4171cf132039b0ca26aac", "source_size_bytes": 332185, "source_table": "Student loans in England, financial year 2024-25 (corrected tables), Table 1A", "url": "https://assets.publishing.service.gov.uk/media/6943ee619273c48f554cf5c5/slcsp012025_Corrected.xlsx", "vintage": "slcsp01_2025_corrected"}, "source_release_key": "ledger.source_release.v2:91e47f96684950159cb0210d", "source_series_key": "ledger.source_series.v2:513fa8b0e1881aafe14a47bf", "universe_constraint_set_key": "ledger.universe_constraint_set.v2:02442c1ef61cbc68cc27ca5c", "universe_constraints": {"domain": "student_loans"}, "value": 95149049.60999998, "value_type": "number"} +{"aggregate_fact_key": "ledger.aggregate_fact.v2:632a67850494984d9b35e639", "aggregation": {"method": "sum"}, "assertion": "source_projection", "concept_alignment": {"authority": "obr", "canonical_concept": "obr.incapacity_benefits", "concept_alignment_key": "ledger.concept_alignment.v2:2773bccf4d64dcc80fe96ffe", "evidence_notes": "OBR EFO March 2026 detailed forecast tables, sheet 4.9, row 11 ('Incapacity benefits2'), GBP billion.", "evidence_url": "https://obr.uk/download/march-2026-economic-and-fiscal-outlook-detailed-forecast-tables-expenditure/", "relation": "source_label", "source_concept": "obr.incapacity_benefits"}, "dimension_set_key": "ledger.dimension_set.v2:44136fa355b3678a1146ad16", "dimensions": {}, "entity": {"name": "person", "role": "resident_population"}, "geography": {"id": "K02000001", "level": "country", "vintage": "current"}, "label": "United Kingdom 2025 fiscal year projected sum obr incapacity benefits for person [obr EFO March 2026 detailed forecast tables: expenditure efo_expenditure.xlsx efo_march_2026]", "layout": {"groupby_dimension": "obr.efo_line", "groupby_ordinal": 0, "groupby_value_id": "incapacity_benefits", "groupby_value_label": "Incapacity benefits2", "measure_id": "amount", "measure_label": "Incapacity benefits2, FY2025-26", "measure_ordinal": 0, "record_set_id": "obr.efo_2026_03.expenditure.incapacity_benefits.fy2025", "record_set_spec_hash": "09a63e886a271917519a6cd5", "record_set_spec_id": "obr.efo_2026_03.expenditure.incapacity_benefits.fy2025.v1", "source_column_id": "amount", "source_row_id": "incapacity_benefits", "table_record_kind": "total"}, "legacy_fact_key": "ledger.fact.v1:6f0c64cbe42cf4e2d2907f78", "lineage": {"source_cell_keys": ["ledger.source_cell.v1:963cb1a2191faedf0d203f65", "ledger.source_cell.v1:d97cb4c94d2ec623264d1d47"], "source_record_id": "obr.efo_2026_03.expenditure.incapacity_benefits.fy2025.incapacity_benefits.amount", "source_row_keys": []}, "observed_measure": {"source_concept": "obr.incapacity_benefits", "source_measure_id": "amount", "source_name": "obr", "source_table": "EFO March 2026 detailed forecast tables: expenditure", "unit": "gbp"}, "observed_measure_key": "ledger.observed_measure.v2:fde1b4a671b103ebe2c4fe82", "period": {"type": "fiscal_year", "value": 2025}, "provenance_class": "model_output", "schema_version": "ledger.consumer_fact.v1", "semantic_fact_key": "ledger.semantic_fact.v2:ea656e5e2a3495f2c99bfb27", "source": {"extracted_at": "2026-08-06", "extraction_method": "CellSelectorSpec and SourceRecordSpec resolved from cells", "method_notes": "Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.", "raw_r2_bucket": "ledger-raw", "raw_r2_key": "raw/obr/obr-efo-expenditure-march-2026/2026/700bfd700c872794e5fe8cf164086cd38a63850db26427b9d4b2e363d177d9a1/efo_expenditure.xlsx", "raw_r2_uri": "r2://ledger-raw/raw/obr/obr-efo-expenditure-march-2026/2026/700bfd700c872794e5fe8cf164086cd38a63850db26427b9d4b2e363d177d9a1/efo_expenditure.xlsx", "source_file": "efo_expenditure.xlsx", "source_name": "obr", "source_sha256": "700bfd700c872794e5fe8cf164086cd38a63850db26427b9d4b2e363d177d9a1", "source_size_bytes": 236965, "source_table": "EFO March 2026 detailed forecast tables: expenditure", "url": "https://obr.uk/download/march-2026-economic-and-fiscal-outlook-detailed-forecast-tables-expenditure/", "vintage": "efo_march_2026"}, "source_release_key": "ledger.source_release.v2:5f8a36441ddcecc13c18d680", "source_series_key": "ledger.source_series.v2:96fa1a8c784ce083883c5a0a", "universe_constraint_set_key": "ledger.universe_constraint_set.v2:ecb00e907376ba856934e4ad", "universe_constraints": {"domain": "public_sector_finances"}, "value": 7206287181.538654, "value_type": "number"} +{"aggregate_fact_key": "ledger.aggregate_fact.v2:6c212695ea75be0d2a635e9b", "aggregation": {"method": "sum"}, "assertion": "observation", "dimension_set_key": "ledger.dimension_set.v2:44136fa355b3678a1146ad16", "dimensions": {}, "entity": {"name": "person", "role": "resident_population"}, "geography": {"id": "K02000001", "level": "country", "vintage": "gss_2024"}, "label": "United Kingdom 2024 calendar year count ons mid year population estimate for person [ons Mid-2024 population estimates, UK: countries and regions by single year of age and sex (MYE2) mye24tablesuk.xlsx mid_2024]", "layout": {"groupby_dimension": "age", "groupby_ordinal": 0, "groupby_value_id": "uk", "groupby_value_label": "United Kingdom", "measure_id": "population", "measure_label": "Resident population", "measure_ordinal": 0, "record_set_id": "ons.mid2024.mye2_persons.uk.all_ages", "record_set_spec_hash": "9a06d466bbbd3788640af817", "record_set_spec_id": "ons.mye2_persons.uk.all_ages.v1", "source_column_id": "population", "source_row_id": "uk", "table_record_kind": "total"}, "legacy_fact_key": "ledger.fact.v1:9bf0a3ba5ad6117ca8e0d0ac", "lineage": {"source_cell_keys": ["ledger.source_cell.v1:fbc0570947c34c475532adda", "ledger.source_cell.v1:26f9cdc2784a7713953551bd", "ledger.source_cell.v1:e4d9207fd741f6fbdc82de4a"], "source_record_id": "ons.mid2024.mye2_persons.uk.all_ages.uk.population", "source_row_keys": []}, "observed_measure": {"source_concept": "ons.mid_year_population_estimate", "source_measure_id": "population", "source_name": "ons", "source_table": "Mid-2024 population estimates, UK: countries and regions by single year of age and sex (MYE2)", "unit": "count"}, "observed_measure_key": "ledger.observed_measure.v2:a05342302b71ceb67b12978e", "period": {"type": "calendar_year", "value": 2024}, "provenance_class": "census", "schema_version": "ledger.consumer_fact.v1", "semantic_fact_key": "ledger.semantic_fact.v2:065ea5242b0c7b9f810a9ce6", "source": {"extracted_at": "2026-08-06", "extraction_method": "CellSelectorSpec and SourceRecordSpec resolved from cells", "method_notes": "Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.", "raw_r2_bucket": "ledger-raw", "raw_r2_key": "raw/ons/ons-mye-2024-uk/2024/f78d50e8d77fe5ed9d04667d6875aefcf62b56380af7aceb2e90dce067981526/mye24tablesuk.xlsx", "raw_r2_uri": "r2://ledger-raw/raw/ons/ons-mye-2024-uk/2024/f78d50e8d77fe5ed9d04667d6875aefcf62b56380af7aceb2e90dce067981526/mye24tablesuk.xlsx", "source_file": "mye24tablesuk.xlsx", "source_name": "ons", "source_sha256": "f78d50e8d77fe5ed9d04667d6875aefcf62b56380af7aceb2e90dce067981526", "source_size_bytes": 1062342, "source_table": "Mid-2024 population estimates, UK: countries and regions by single year of age and sex (MYE2)", "url": "https://www.ons.gov.uk/file?uri=/peoplepopulationandcommunity/populationandmigration/populationestimates/datasets/populationestimatesforukenglandandwalesscotlandandnorthernireland/mid2024/mye24tablesuk.xlsx", "vintage": "mid_2024"}, "source_release_key": "ledger.source_release.v2:615ee18597cbfc9a75e7e2a5", "source_series_key": "ledger.source_series.v2:9ffe2c36294084406279ceae", "universe_constraint_set_key": "ledger.universe_constraint_set.v2:3171531aa949466cfcf8b77d", "universe_constraints": {"domain": "resident_population"}, "value": 69281437, "value_type": "integer"} +{"aggregate_fact_key": "ledger.aggregate_fact.v2:78fb64bd2e9774df4b2f2d56", "aggregation": {"method": "sum"}, "assertion": "observation", "concept_alignment": {"authority": "hmrc", "canonical_concept": "hmrc.cgt_taxpayers_total", "concept_alignment_key": "ledger.concept_alignment.v2:256a8378726a9be1da666fec", "evidence_notes": "CGT statistics 2025 release, Table 1, year of disposal 2023 to 2024; counts in thousands, amounts GBP million. Provisional per publication notes.", "evidence_url": "https://www.gov.uk/government/statistics/capital-gains-tax-statistics", "relation": "source_label", "source_concept": "hmrc.cgt_taxpayers_total"}, "dimension_set_key": "ledger.dimension_set.v2:44136fa355b3678a1146ad16", "dimensions": {}, "entity": {"name": "person", "role": "taxpayer"}, "geography": {"id": "K02000001", "level": "country", "vintage": "current"}, "label": "United Kingdom 2023 tax year count hmrc cgt taxpayers total for person [hmrc Capital Gains Tax statistics Table 1: taxpayer numbers, gains and tax liabilities by year of disposal Table_1_2025.ods cgt_statistics_2025]", "layout": {"groupby_dimension": "hmrc.cgt_table1_line", "groupby_ordinal": 0, "groupby_value_id": "ty2023", "groupby_value_label": "Year of disposal 2023 to 2024", "measure_id": "total_taxpayers", "measure_label": "CGT taxpayers, total", "measure_ordinal": 6, "record_set_id": "hmrc.cgt_statistics_2025.table1.ty2023", "record_set_spec_hash": "b27f186424c62509e6a5e134", "record_set_spec_id": "hmrc.cgt_statistics_2025.table1.ty2023.v1", "source_column_id": "total_taxpayers", "source_row_id": "ty2023", "table_record_kind": "total"}, "legacy_fact_key": "ledger.fact.v1:a2123c0409eb78f8d49178b9", "lineage": {"source_cell_keys": ["ledger.source_cell.v1:91915a94a635f08d28cdff13", "ledger.source_cell.v1:8f08244c3f6f2e2f0895aa2a"], "source_record_id": "hmrc.cgt_statistics_2025.table1.ty2023.ty2023.total_taxpayers", "source_row_keys": []}, "observed_measure": {"source_concept": "hmrc.cgt_taxpayers_total", "source_measure_id": "total_taxpayers", "source_name": "hmrc", "source_table": "Capital Gains Tax statistics Table 1: taxpayer numbers, gains and tax liabilities by year of disposal", "unit": "count"}, "observed_measure_key": "ledger.observed_measure.v2:5bbe59f8c9f99ad916666bd7", "period": {"type": "tax_year", "value": 2023}, "provenance_class": "administrative", "schema_version": "ledger.consumer_fact.v1", "semantic_fact_key": "ledger.semantic_fact.v2:677e54c237d208ba6ab417d4", "source": {"extracted_at": "2026-08-06", "extraction_method": "CellSelectorSpec and SourceRecordSpec resolved from cells", "method_notes": "Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.", "raw_r2_bucket": "ledger-raw", "raw_r2_key": "raw/hmrc/hmrc-cgt-statistics-2025/2025/95c1bb1548483cb0ed0090e820a1fba129d725ade418cf64e5f85793655e92a1/Table_1_2025.ods", "raw_r2_uri": "r2://ledger-raw/raw/hmrc/hmrc-cgt-statistics-2025/2025/95c1bb1548483cb0ed0090e820a1fba129d725ade418cf64e5f85793655e92a1/Table_1_2025.ods", "source_file": "Table_1_2025.ods", "source_name": "hmrc", "source_sha256": "95c1bb1548483cb0ed0090e820a1fba129d725ade418cf64e5f85793655e92a1", "source_size_bytes": 10002, "source_table": "Capital Gains Tax statistics Table 1: taxpayer numbers, gains and tax liabilities by year of disposal", "url": "https://assets.publishing.service.gov.uk/media/6878ac497ea209168636386e/Table_1_2025_Taxpayer_numbers_gains_and_tax_liabilities.ods", "vintage": "cgt_statistics_2025"}, "source_release_key": "ledger.source_release.v2:a6b82e1799ccd4ba57608ccd", "source_series_key": "ledger.source_series.v2:de2bf2a36f1647b20877cc1a", "universe_constraint_set_key": "ledger.universe_constraint_set.v2:31e69e018123fa4b604582eb", "universe_constraints": {"domain": "capital_gains_tax"}, "value": 378000, "value_type": "integer"} +{"aggregate_fact_key": "ledger.aggregate_fact.v2:860a48172c62298ceb00c20b", "aggregation": {"method": "sum"}, "assertion": "observation", "concept_alignment": {"authority": "dwp", "canonical_concept": "dwp.uc_tcl_headline_households_affected", "concept_alignment_key": "ledger.concept_alignment.v2:4b3cf060f4beafb7850981dd", "evidence_notes": "Two-child limit data tables, April 2025, sheet 01, column: Universal Credit households affected by the Two Child Limit policy.", "evidence_url": "https://www.gov.uk/government/statistics/universal-credit-claimants-statistics-on-the-two-child-limit-policy-april-2025", "relation": "source_label", "source_concept": "dwp.uc_tcl_headline_households_affected"}, "dimension_set_key": "ledger.dimension_set.v2:9b8da5478cdd5948be3e6a0a", "dimensions": {"two_child_limit_status": "affected_3plus_children"}, "entity": {"name": "household", "role": "uc_household"}, "geography": {"id": "K03000001", "level": "country", "vintage": "current"}, "label": "Great Britain 2025-04 month count dwp uc tcl headline households affected for household (two child limit status=affected 3plus children) [dwp Universal Credit claimants: statistics on the two-child limit policy, April 2025 data tables data-tables-two-child-limit-april-2025.ods two_child_limit_april_2025]", "layout": {"groupby_dimension": "dwp.two_child_limit_status", "groupby_ordinal": 1, "groupby_value_id": "affected_3plus_children", "groupby_value_label": "Affected UC Household (has third or subsequent child on or after 6 April 2017)", "measure_id": "universal_credit_households_affected_by_the_two_", "measure_label": "Universal Credit households affected by the Two Child Limit policy", "measure_ordinal": 0, "record_set_id": "dwp.uc_tcl.apr2025.table01", "record_set_spec_hash": "e733e450c397c1447c3d56df", "record_set_spec_id": "dwp.uc_tcl.apr2025.table01.v1", "source_column_id": "universal_credit_households_affected_by_the_two_", "source_row_id": "affected_3plus_children", "table_record_kind": "detail"}, "legacy_fact_key": "ledger.fact.v1:8ebf86ac0792f376664242fa", "lineage": {"source_cell_keys": ["ledger.source_cell.v1:900e5a7f7e1f7799fa3a97fa", "ledger.source_cell.v1:e9ef94d14bedd2728883275a"], "source_record_id": "dwp.uc_tcl.apr2025.table01.affected_3plus_children.universal_credit_households_affected_by_the_two_", "source_row_keys": []}, "observed_measure": {"source_concept": "dwp.uc_tcl_headline_households_affected", "source_measure_id": "universal_credit_households_affected_by_the_two_", "source_name": "dwp", "source_table": "Universal Credit claimants: statistics on the two-child limit policy, April 2025 data tables", "unit": "count"}, "observed_measure_key": "ledger.observed_measure.v2:c5732f2ce8999bc5b572b546", "period": {"type": "month", "value": "2025-04"}, "provenance_class": "administrative", "schema_version": "ledger.consumer_fact.v1", "semantic_fact_key": "ledger.semantic_fact.v2:fe7efa94f40b1316b4610fb7", "source": {"extracted_at": "2026-08-06", "extraction_method": "CellSelectorSpec and SourceRecordSpec resolved from cells", "method_notes": "Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.", "raw_r2_bucket": "ledger-raw", "raw_r2_key": "raw/dwp/dwp-uc-two-child-limit-2025/2025/308e7d3dc10171253c77e34159f384bfd558a8ee1e487f4615b47f989a7b08d2/data-tables-two-child-limit-april-2025.ods", "raw_r2_uri": "r2://ledger-raw/raw/dwp/dwp-uc-two-child-limit-2025/2025/308e7d3dc10171253c77e34159f384bfd558a8ee1e487f4615b47f989a7b08d2/data-tables-two-child-limit-april-2025.ods", "source_file": "data-tables-two-child-limit-april-2025.ods", "source_name": "dwp", "source_sha256": "308e7d3dc10171253c77e34159f384bfd558a8ee1e487f4615b47f989a7b08d2", "source_size_bytes": 1832271, "source_table": "Universal Credit claimants: statistics on the two-child limit policy, April 2025 data tables", "url": "https://assets.publishing.service.gov.uk/media/68887ad01e72aed40611b030/data-tables-universal-credit-statistics-two-child-limit-april-2025.ods", "vintage": "two_child_limit_april_2025"}, "source_release_key": "ledger.source_release.v2:4d88d5cfb3627165bc974784", "source_series_key": "ledger.source_series.v2:345d78707b3c738004623699", "universe_constraint_set_key": "ledger.universe_constraint_set.v2:9ca710fd89b5df02185acf59", "universe_constraints": {"constraints": [{"operator": "==", "role": "filter", "value": "affected_3plus_children", "variable": "two_child_limit_status"}], "domain": "universal_credit_two_child_limit"}, "value": 469780, "value_type": "integer"} +{"aggregate_fact_key": "ledger.aggregate_fact.v2:882329821c90dc683aa778d8", "aggregation": {"method": "sum"}, "assertion": "observation", "concept_alignment": {"authority": "slc", "canonical_concept": "slc.student_loan_net_repayments_plan_2_full_time", "concept_alignment_key": "ledger.concept_alignment.v2:5a6738918c70cab40798a5ed", "evidence_notes": "Student loans in England FY2024-25 (corrected tables, slcsp012025_Corrected), Table 1A ICR balance sheet, row 'Net repayments posted during the financial year', financial year 2024-25 column block, column: Plan 2 Full-time. GBP million.", "evidence_url": "https://www.gov.uk/government/statistics/student-loans-in-england-2024-to-2025", "relation": "source_label", "source_concept": "slc.student_loan_net_repayments_plan_2_full_time"}, "dimension_set_key": "ledger.dimension_set.v2:44136fa355b3678a1146ad16", "dimensions": {}, "entity": {"name": "person", "role": "student_loan_borrower"}, "geography": {"id": "E92000001", "level": "country", "vintage": "current"}, "label": "England 2024 fiscal year sum slc student loan net repayments plan 2 full time for person [slc Student loans in England, financial year 2024-25 (corrected tables), Table 1A slcsp012025_Corrected.xlsx slcsp01_2025_corrected]", "layout": {"groupby_dimension": "slc.repayment_plan", "groupby_ordinal": 0, "groupby_value_id": "net_repayments", "groupby_value_label": "Net repayments posted during the financial year", "measure_id": "plan_2_full_time", "measure_label": "Net repayments FY2024-25, Plan 2 Full-time", "measure_ordinal": 1, "record_set_id": "slc.repayments_2025.table_1a.fy2024", "record_set_spec_hash": "b748f6aeb2b7ad68bfb560a9", "record_set_spec_id": "slc.repayments_2025.table_1a.fy2024.v1", "source_column_id": "plan_2_full_time", "source_row_id": "net_repayments", "table_record_kind": "total"}, "legacy_fact_key": "ledger.fact.v1:a959c4f2a5576cd283af852a", "lineage": {"source_cell_keys": ["ledger.source_cell.v1:0f682109e58dfad1ad28acd6", "ledger.source_cell.v1:60e6539baafd94e56648671a", "ledger.source_cell.v1:446cc4b0c7a9f20af575ec37", "ledger.source_cell.v1:b3d5f4758ba698ba4a4578d4"], "source_record_id": "slc.repayments_2025.table_1a.fy2024.net_repayments.plan_2_full_time", "source_row_keys": []}, "observed_measure": {"source_concept": "slc.student_loan_net_repayments_plan_2_full_time", "source_measure_id": "plan_2_full_time", "source_name": "slc", "source_table": "Student loans in England, financial year 2024-25 (corrected tables), Table 1A", "unit": "gbp"}, "observed_measure_key": "ledger.observed_measure.v2:ea46f749cb24645a1742ac79", "period": {"type": "fiscal_year", "value": 2024}, "provenance_class": "administrative", "schema_version": "ledger.consumer_fact.v1", "semantic_fact_key": "ledger.semantic_fact.v2:61a154dcb37f426f85982478", "source": {"extracted_at": "2026-08-08", "extraction_method": "CellSelectorSpec and SourceRecordSpec resolved from cells", "method_notes": "Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.", "raw_r2_bucket": "ledger-raw", "raw_r2_key": "raw/slc/slc-student-loan-repayments-england-2025/2025/a9ee065ba2d6af4be8584022ac50302f22f7229919e4171cf132039b0ca26aac/slcsp012025_Corrected.xlsx", "raw_r2_uri": "r2://ledger-raw/raw/slc/slc-student-loan-repayments-england-2025/2025/a9ee065ba2d6af4be8584022ac50302f22f7229919e4171cf132039b0ca26aac/slcsp012025_Corrected.xlsx", "source_file": "slcsp012025_Corrected.xlsx", "source_name": "slc", "source_sha256": "a9ee065ba2d6af4be8584022ac50302f22f7229919e4171cf132039b0ca26aac", "source_size_bytes": 332185, "source_table": "Student loans in England, financial year 2024-25 (corrected tables), Table 1A", "url": "https://assets.publishing.service.gov.uk/media/6943ee619273c48f554cf5c5/slcsp012025_Corrected.xlsx", "vintage": "slcsp01_2025_corrected"}, "source_release_key": "ledger.source_release.v2:91e47f96684950159cb0210d", "source_series_key": "ledger.source_series.v2:513fa8b0e1881aafe14a47bf", "universe_constraint_set_key": "ledger.universe_constraint_set.v2:02442c1ef61cbc68cc27ca5c", "universe_constraints": {"domain": "student_loans"}, "value": 2683104312.0299997, "value_type": "number"} +{"aggregate_fact_key": "ledger.aggregate_fact.v2:a82c84f67b40867564d2c847", "aggregation": {"method": "sum"}, "assertion": "observation", "concept_alignment": {"authority": "hmrc", "canonical_concept": "hmrc.spi_employment_income_amount", "concept_alignment_key": "ledger.concept_alignment.v2:954e6c895535b23e4c7805cb", "evidence_notes": "SPI collated tables 2023-24, Table_3_6, column: Employment income (Amount); taxpayers in thousands, amounts GBP million.", "evidence_url": "https://www.gov.uk/government/statistics/personal-incomes-statistics-for-the-tax-year-2023-to-2024", "relation": "source_label", "source_concept": "hmrc.spi_employment_income_amount"}, "dimension_set_key": "ledger.dimension_set.v2:2abee80869ae40d61ee490c3", "dimensions": {"total_income_lower_bound": 12570}, "entity": {"name": "person", "role": "taxpayer"}, "geography": {"id": "K02000001", "level": "country", "vintage": "current"}, "label": "United Kingdom 2023 tax year sum hmrc spi employment income amount for person (total income lower bound=12570) [hmrc SPI collated Tables 3.1 to 3.11, tax year 2023-24: income by range of total income Collated_Tables_3_1_to_3_11_2324.ods spi_2023_24]", "layout": {"groupby_dimension": "hmrc.total_income_band", "groupby_ordinal": 0, "groupby_value_id": "band_12570", "groupby_value_label": "Total income from GBP 12 570", "measure_id": "employment_amount", "measure_label": "Employment (amount)", "measure_ordinal": 3, "record_set_id": "hmrc.spi_2324.table_3_6", "record_set_spec_hash": "5d819678ed0074660bcee770", "record_set_spec_id": "hmrc.spi_2324.table_3_6.v1", "source_column_id": "employment_amount", "source_row_id": "band_12570", "table_record_kind": "detail"}, "legacy_fact_key": "ledger.fact.v1:18e235114b5444256783fd7a", "lineage": {"source_cell_keys": ["ledger.source_cell.v1:cfbcf3282db1fcb71a277b00", "ledger.source_cell.v1:057369c1997d122b69f47027"], "source_record_id": "hmrc.spi_2324.table_3_6.band_12570.employment_amount", "source_row_keys": []}, "observed_measure": {"source_concept": "hmrc.spi_employment_income_amount", "source_measure_id": "employment_amount", "source_name": "hmrc", "source_table": "SPI collated Tables 3.1 to 3.11, tax year 2023-24: income by range of total income", "unit": "gbp"}, "observed_measure_key": "ledger.observed_measure.v2:631d0596c3c14bb4621a9da2", "period": {"type": "tax_year", "value": 2023}, "provenance_class": "survey_aggregate", "schema_version": "ledger.consumer_fact.v1", "semantic_fact_key": "ledger.semantic_fact.v2:debc6506b4121d8c968f8b4b", "source": {"extracted_at": "2026-08-06", "extraction_method": "CellSelectorSpec and SourceRecordSpec resolved from cells", "method_notes": "Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.", "raw_r2_bucket": "ledger-raw", "raw_r2_key": "raw/hmrc/hmrc-spi-income-bands-2023-24/2024/ad063b06b2bdeef8600dbbb09d48153337a4966f8c7eea50df7a2e0304ebd73e/Collated_Tables_3_1_to_3_11_2324.ods", "raw_r2_uri": "r2://ledger-raw/raw/hmrc/hmrc-spi-income-bands-2023-24/2024/ad063b06b2bdeef8600dbbb09d48153337a4966f8c7eea50df7a2e0304ebd73e/Collated_Tables_3_1_to_3_11_2324.ods", "source_file": "Collated_Tables_3_1_to_3_11_2324.ods", "source_name": "hmrc", "source_sha256": "ad063b06b2bdeef8600dbbb09d48153337a4966f8c7eea50df7a2e0304ebd73e", "source_size_bytes": 166693, "source_table": "SPI collated Tables 3.1 to 3.11, tax year 2023-24: income by range of total income", "url": "https://assets.publishing.service.gov.uk/media/69f1f12d2fae53a03709682f/Collated_Tables_3_1_to_3_11_2324.ods", "vintage": "spi_2023_24"}, "source_release_key": "ledger.source_release.v2:cf26a12e28615db0aa77c564", "source_series_key": "ledger.source_series.v2:90b4b7a93b4bedd73c4fd852", "survey_instrument": "Survey of Personal Incomes", "universe_constraint_set_key": "ledger.universe_constraint_set.v2:1b19141149ccab3a1cc4207e", "universe_constraints": {"constraints": [{"operator": "==", "role": "filter", "value": 12570, "variable": "total_income_lower_bound"}], "domain": "personal_incomes"}, "value": 16900000000, "value_type": "integer"} +{"aggregate_fact_key": "ledger.aggregate_fact.v2:d928e7da0fbfe088ca1a30d7", "aggregation": {"method": "sum"}, "assertion": "source_projection", "concept_alignment": {"authority": "obr", "canonical_concept": "obr.income_tax", "concept_alignment_key": "ledger.concept_alignment.v2:c6c41e9a05252a482bf75215", "evidence_notes": "OBR EFO March 2026 detailed forecast tables, sheet 3.4, row 6 ('Income tax (gross of tax credits)'), GBP billion.", "evidence_url": "https://obr.uk/download/march-2026-economic-and-fiscal-outlook-detailed-forecast-tables-receipts/", "relation": "source_label", "source_concept": "obr.income_tax"}, "dimension_set_key": "ledger.dimension_set.v2:44136fa355b3678a1146ad16", "dimensions": {}, "entity": {"name": "person", "role": "resident_population"}, "geography": {"id": "K02000001", "level": "country", "vintage": "current"}, "label": "United Kingdom 2025 fiscal year projected sum obr income tax for person [obr EFO March 2026 detailed forecast tables: receipts efo_receipts.xlsx efo_march_2026]", "layout": {"groupby_dimension": "obr.efo_line", "groupby_ordinal": 0, "groupby_value_id": "income_tax", "groupby_value_label": "Income tax (gross of tax credits)", "measure_id": "amount", "measure_label": "Income tax (gross of tax credits), FY2025-26", "measure_ordinal": 0, "record_set_id": "obr.efo_2026_03.receipts.income_tax.fy2025", "record_set_spec_hash": "e2d3c601ace5447a5fe449bc", "record_set_spec_id": "obr.efo_2026_03.receipts.income_tax.fy2025.v1", "source_column_id": "amount", "source_row_id": "income_tax", "table_record_kind": "total"}, "legacy_fact_key": "ledger.fact.v1:ac779b21d033c2c724a112ca", "lineage": {"source_cell_keys": ["ledger.source_cell.v1:916eb6e55cfdecb1aaae6b03", "ledger.source_cell.v1:487ced430603f1287c1595a1"], "source_record_id": "obr.efo_2026_03.receipts.income_tax.fy2025.income_tax.amount", "source_row_keys": []}, "observed_measure": {"source_concept": "obr.income_tax", "source_measure_id": "amount", "source_name": "obr", "source_table": "EFO March 2026 detailed forecast tables: receipts", "unit": "gbp"}, "observed_measure_key": "ledger.observed_measure.v2:954247698e8178993728e76b", "period": {"type": "fiscal_year", "value": 2025}, "provenance_class": "model_output", "schema_version": "ledger.consumer_fact.v1", "semantic_fact_key": "ledger.semantic_fact.v2:1cda5b118cdb34e16de09a41", "source": {"extracted_at": "2026-08-06", "extraction_method": "CellSelectorSpec and SourceRecordSpec resolved from cells", "method_notes": "Each fact carries source_record_id, source_cell_keys, and source_row_keys when available.", "raw_r2_bucket": "ledger-raw", "raw_r2_key": "raw/obr/obr-efo-receipts-march-2026/2026/f65b6cb7f96931d4abd85940794eb60f6f65afca8bbf16c74a4548bf92766a28/efo_receipts.xlsx", "raw_r2_uri": "r2://ledger-raw/raw/obr/obr-efo-receipts-march-2026/2026/f65b6cb7f96931d4abd85940794eb60f6f65afca8bbf16c74a4548bf92766a28/efo_receipts.xlsx", "source_file": "efo_receipts.xlsx", "source_name": "obr", "source_sha256": "f65b6cb7f96931d4abd85940794eb60f6f65afca8bbf16c74a4548bf92766a28", "source_size_bytes": 187899, "source_table": "EFO March 2026 detailed forecast tables: receipts", "url": "https://obr.uk/download/march-2026-economic-and-fiscal-outlook-detailed-forecast-tables-receipts/", "vintage": "efo_march_2026"}, "source_release_key": "ledger.source_release.v2:cd7332ed9168974f4875f7c7", "source_series_key": "ledger.source_series.v2:dae31655351be8d2e0736a5d", "universe_constraint_set_key": "ledger.universe_constraint_set.v2:ecb00e907376ba856934e4ad", "universe_constraints": {"domain": "public_sector_finances"}, "value": 331437583074.4429, "value_type": "number"} diff --git a/packages/microcosm-build/tests/test_country_spec.py b/packages/microcosm-build/tests/test_country_spec.py index 943655020..19ff0df4e 100644 --- a/packages/microcosm-build/tests/test_country_spec.py +++ b/packages/microcosm-build/tests/test_country_spec.py @@ -298,13 +298,18 @@ def test_spi_spine_adds_no_country_package_resources(self) -> None: "source_stages.json", "take_up_contract.json", "input_mass_reviewed_exclusions.json", + "ledger_compile_parity_incumbent_2025_signed_differences.json", + "ledger_compile_parity_production_2023_signed_differences.json", "national_staging_build_record.json", + "parity_fixture_production_2023.json", "qrf_tail_reviewed_exclusions.json", "release_input_coverage_manifest.json", + "registry_parity_fixture_2025.json", "was_wealth_support_bounds.json", "uk_local_target_census.json", "uk_national_targets.json", "target_references.json", + "target_reference_membership.json", ) def test_uk_source_manifest_loads_twenty_one_stages(self) -> None: @@ -358,15 +363,44 @@ def test_uk_package_loads(self) -> None: "source_stages.json", "take_up_contract.json", "input_mass_reviewed_exclusions.json", + "ledger_compile_parity_incumbent_2025_signed_differences.json", + "ledger_compile_parity_production_2023_signed_differences.json", "national_staging_build_record.json", + "parity_fixture_production_2023.json", "qrf_tail_reviewed_exclusions.json", "release_input_coverage_manifest.json", + "registry_parity_fixture_2025.json", "was_wealth_support_bounds.json", "uk_local_target_census.json", "uk_national_targets.json", "target_references.json", + "target_reference_membership.json", ) + def test_uk_target_references_accept_regenerated_contract_fields(self) -> None: + spec = load_country_spec("uk") + + references = {reference.name: reference for reference in spec.target_references} + assert len(references) == 388 + assert references["obr.esa"].value_operation == "sum" + assert references["dwp.uc.households"].value_operation == ( + "calendar_year_average" + ) + assert ( + references["obr.income_tax"].assertion_policy + == "allow_source_projection" + ) + + fanout = references["hmrc/employment_income_income_band_100_000_to_150_000"] + assert fanout.metadata == { + "contract_target_id": ( + "hmrc.spi.employment_income.amount_by_total_income_band" + ), + "measure_kind": "prepared_column", + } + assert fanout.uprating_from_period == "2023" + assert fanout.uprating_to_period == 2025 + class TestResolvedCountrySpecSeam: def test_country_spec_is_the_exact_resolved_alias(self) -> None: @@ -570,6 +604,8 @@ def test_declares_the_full_june_battery(self, manifest) -> None: assert [gate.id for gate in manifest.gates] == [ "uk_release_input_coverage_manifest_current", "uk_release_family_build_stages", + "uk_ledger_compile_parity_production_2023", + "uk_ledger_compile_parity_incumbent_2025", "uk_release_input_coverage", "uk_degenerate_release_surface", "uk_zero_weight_strata", @@ -592,6 +628,18 @@ def test_declares_the_full_june_battery(self, manifest) -> None: # declared entry blocks release. assert all(g.criticality == "release_blocking" for g in manifest.gates) + def test_ledger_compile_parity_gates_pin_their_fixture_periods( + self, manifest + ) -> None: + params = {gate.id: gate.parameters for gate in manifest.gates} + + assert params["uk_ledger_compile_parity_production_2023"][ + "target_period" + ] == 2023 + assert params["uk_ledger_compile_parity_incumbent_2025"][ + "target_period" + ] == 2025 + def test_only_the_weights_audit_blocks_on_absent_evidence(self, manifest) -> None: # "An absent audit is not a passing audit" — the retired schema-3 # path blocked every posture on a missing fit-weight audit, and the @@ -851,6 +899,27 @@ def test_target_reference_carrying_a_nested_value_is_refused( with pytest.raises(ValueError, match="values live in Ledger"): load_country_spec(package_dir) + def test_sum_target_reference_roundtrips(self, tmp_path) -> None: + files = _minimal_package() + files["country_package.json"]["resources"].append("target_references.json") + files["target_references.json"] = { + "country": "xx", + "target_references": [ + { + "name": "summed", + "ledger_selector": {"source_name": "somewhere"}, + "value_operation": "sum", + "entity": "person", + "measure": "people", + } + ], + } + package_dir = _write_package(tmp_path, files) + + spec = load_country_spec(package_dir) + + assert spec.target_references[0].value_operation == "sum" + def test_restricted_licence_requires_a_private_repo(self, tmp_path) -> None: files = _minimal_package() files["country_package.json"]["resources"].append("release_contract.json") diff --git a/packages/microcosm-build/tests/test_gates.py b/packages/microcosm-build/tests/test_gates.py index 791917ce1..752493490 100644 --- a/packages/microcosm-build/tests/test_gates.py +++ b/packages/microcosm-build/tests/test_gates.py @@ -22,6 +22,8 @@ export_surface_gate, formula_owned_export_gate, input_mass_parity_gate, + ledger_compile_parity_gate, + ledger_compile_parity_signed_differences, macro_realism_gate, nonconstant_columns_gate, nonnegative_columns_gate, @@ -37,7 +39,7 @@ target_surface_gate, weights_audit_gate, ) -from microcosm.calibrate import TargetSpec +from microcosm.calibrate import TargetRegistry, TargetSpec class TestGateResultInvariants: @@ -86,6 +88,309 @@ def test_report_manifest_deep_copies_nested_details(self) -> None: ] +class TestLedgerCompileParityGate: + def _registry(self, value: float = 10.0) -> TargetRegistry: + return TargetRegistry( + ( + TargetSpec( + name="hmrc.tax", + entity="person", + measure="hmrc/tax", + value=value, + period=2025, + source="fixture", + family="hmrc", + ), + ), + country="uk", + ) + + def test_matching_registries_pass(self) -> None: + result = ledger_compile_parity_gate(self._registry(), self._registry()) + + assert result.passed + assert result.details["expected_count"] == 1 + assert result.details["actual_count"] == 1 + + def test_unsigned_gap_fails(self) -> None: + result = ledger_compile_parity_gate( + TargetRegistry((), country="uk"), + self._registry(), + ) + + assert not result.passed + assert any("target count differs" in failure for failure in result.failures) + + def test_signed_difference_exact_reproduction_passes(self) -> None: + result = ledger_compile_parity_gate( + self._registry(11.0), + self._registry(10.0), + signed_differences=( + { + "fixture_value": 10.0, + "kind": "calibration_drift", + "ledger_value": 11.0, + "name": "hmrc.tax", + "period": 2025, + "reason": "reviewed fixture-vintage drift", + }, + ), + ) + + assert result.passed + assert result.details["signed_difference_count"] == 1 + assert result.details["signed_differences"] == [ + { + "live_fixture_value": 10.0, + "live_kind": "calibration_drift", + "live_ledger_value": 11.0, + "name": "hmrc.tax", + "period": 2025, + "reason": "reviewed fixture-vintage drift", + "signed_fixture_value": 10.0, + "signed_kind": "calibration_drift", + "signed_ledger_value": 11.0, + } + ] + + def test_signed_difference_generator_matches_list_behavior(self) -> None: + signed_rows = [ + { + "fixture_value": 10.0, + "kind": "calibration_drift", + "ledger_value": 11.0, + "name": "hmrc.tax", + "period": 2025, + "reason": "reviewed fixture-vintage drift", + } + ] + + list_result = ledger_compile_parity_gate( + self._registry(11.0), + self._registry(10.0), + signed_differences=signed_rows, + ) + generator_result = ledger_compile_parity_gate( + self._registry(11.0), + self._registry(10.0), + signed_differences=(row for row in signed_rows), + ) + + assert generator_result.passed == list_result.passed + assert generator_result.failures == list_result.failures + assert ( + generator_result.details["signed_difference_count"] + == (list_result.details["signed_difference_count"]) + ) + assert ( + generator_result.details["signed_differences"] + == (list_result.details["signed_differences"]) + ) + + def test_signed_difference_new_value_at_signed_key_fails(self) -> None: + result = ledger_compile_parity_gate( + self._registry(99.0), + self._registry(10.0), + signed_differences=( + { + "fixture_value": 10.0, + "kind": "calibration_drift", + "ledger_value": 11.0, + "name": "hmrc.tax", + "period": 2025, + "reason": "reviewed fixture-vintage drift", + }, + ), + ) + + assert not result.passed + assert result.failures == ( + "signed ledger parity difference hmrc.tax[2025] changed " + "ledger_value: signed=11.0, live=99.0.", + ) + + def test_signed_difference_fixture_value_at_signed_key_fails(self) -> None: + result = ledger_compile_parity_gate( + self._registry(11.0), + self._registry(12.0), + signed_differences=( + { + "fixture_value": 10.0, + "kind": "calibration_drift", + "ledger_value": 11.0, + "name": "hmrc.tax", + "period": 2025, + "reason": "reviewed fixture-vintage drift", + }, + ), + ) + + assert not result.passed + assert result.failures == ( + "signed ledger parity difference hmrc.tax[2025] changed " + "fixture_value: signed=10.0, live=12.0.", + ) + + def test_signed_difference_stale_signature_fails(self) -> None: + result = ledger_compile_parity_gate( + self._registry(10.0), + self._registry(10.0), + signed_differences=( + { + "fixture_value": 10.0, + "kind": "calibration_drift", + "ledger_value": 11.0, + "name": "hmrc.tax", + "period": 2025, + "reason": "reviewed fixture-vintage drift", + }, + ), + ) + + assert not result.passed + assert result.failures == ( + "signed ledger parity difference hmrc.tax[2025] is stale: no live " + "difference remains.", + ) + + def test_signed_difference_classifier_ignores_equal_value_namespace_drift( + self, + ) -> None: + expected = TargetRegistry( + ( + TargetSpec( + name="dwp.benefit_cap.capped_households", + entity="household", + measure="incumbent_measure", + value=110_637.0, + period=2025, + source="fixture", + family="incumbent", + ), + ), + country="uk", + ) + actual = TargetRegistry( + ( + TargetSpec( + name="dwp.benefit_cap.capped_households", + entity="benunit", + measure="ledger_measure", + value=110_637.0, + period=2025, + source="ledger", + family="dwp", + ), + ), + country="uk", + ) + + report = ledger_compile_parity_signed_differences(actual, expected) + + assert report["difference_count"] == 0 + assert report["counts_by_kind"] == {} + + def test_gate_ignores_equal_value_namespace_drift(self) -> None: + expected = TargetRegistry( + ( + TargetSpec( + name="dwp.benefit_cap.capped_households", + entity="household", + measure="incumbent_measure", + value=110_637.0, + period=2025, + source="fixture", + family="incumbent", + ), + ), + country="uk", + ) + actual = TargetRegistry( + ( + TargetSpec( + name="dwp.benefit_cap.capped_households", + entity="benunit", + measure="ledger_measure", + value=110_637.0, + period=2025, + source="ledger", + family="dwp", + ), + ), + country="uk", + ) + + result = ledger_compile_parity_gate(actual, expected) + + assert result.passed + + def test_signed_difference_classifier_reports_only_value_drift(self) -> None: + report = ledger_compile_parity_signed_differences( + self._registry(11.0), + self._registry(10.0), + ) + + assert report["counts_by_kind"] == {"calibration_drift": 1} + assert report["differences"] == [ + { + "fixture_value": 10.0, + "kind": "calibration_drift", + "ledger_value": 11.0, + "name": "hmrc.tax", + "period": 2025, + "reason": ( + "Ledger-compiled value differs from the fixture value at " + "this comparison period." + ), + } + ] + + def test_signed_difference_classifier_ignores_unfixture_absences( + self, + ) -> None: + report = ledger_compile_parity_signed_differences( + TargetRegistry((), country="uk"), + TargetRegistry((), country="uk"), + unsupported=( + { + "name": "dwp.uc.households", + "period": 2025, + "reason": "no_fact_at_or_before_period", + }, + ), + ) + + assert report["difference_count"] == 0 + assert report["counts_by_kind"] == {} + + def test_signed_difference_classifier_reports_fixture_absences(self) -> None: + report = ledger_compile_parity_signed_differences( + TargetRegistry((), country="uk"), + self._registry(10.0), + unsupported=( + { + "name": "hmrc.tax", + "period": 2025, + "reason": "no_fact_at_or_before_period", + }, + ), + ) + + assert report["counts_by_kind"] == {"ledger_absent": 1} + assert report["differences"] == [ + { + "fixture_value": 10.0, + "kind": "ledger_absent", + "name": "hmrc.tax", + "period": 2025, + "reason": ( + "Packaged Ledger reference did not resolve for this " + "comparison period." + ), + } + ] + + class TestParityGate: def test_gap_fails_with_the_variable_named(self) -> None: result = parity_gate( diff --git a/packages/microcosm-build/tests/test_ledger_artifact.py b/packages/microcosm-build/tests/test_ledger_artifact.py index 0d2e123a4..09e4d5844 100644 --- a/packages/microcosm-build/tests/test_ledger_artifact.py +++ b/packages/microcosm-build/tests/test_ledger_artifact.py @@ -4,13 +4,16 @@ import hashlib import json +from argparse import ArgumentParser, Namespace import pytest from microcosm.build.ledger_artifact import ( CONSUMER_ARTIFACT_SCHEMA_VERSION, LedgerConsumerArtifact, + add_ledger_artifact_args, load_ledger_consumer_artifact, + resolve_ledger_artifact, ) @@ -31,9 +34,7 @@ def _fact_row(**overrides): def _write_facts(path, rows): - path.write_text( - "".join(json.dumps(row, sort_keys=True) + "\n" for row in rows) - ) + path.write_text("".join(json.dumps(row, sort_keys=True) + "\n" for row in rows)) return hashlib.sha256(path.read_bytes()).hexdigest() @@ -169,3 +170,31 @@ def test_rejects_missing_and_empty_feeds(tmp_path): empty_facts.write_text("\n") with pytest.raises(ValueError, match="empty"): load_ledger_consumer_artifact(empty_facts) + + +def test_shared_cli_args_load_optional_ledger_artifact(tmp_path): + facts_path = tmp_path / "consumer_facts.jsonl" + facts_sha = _write_facts(facts_path, [_fact_row()]) + parser = ArgumentParser() + add_ledger_artifact_args(parser) + args = parser.parse_args( + ["--ledger-facts", str(facts_path), "--ledger-facts-sha256", facts_sha] + ) + + artifact = resolve_ledger_artifact(args) + + assert artifact is not None + assert artifact.facts_sha256 == facts_sha + + +def test_shared_cli_resolver_allows_absent_artifact_but_not_orphan_pins(): + assert resolve_ledger_artifact(Namespace(ledger_facts=None)) is None + + with pytest.raises(ValueError, match="requires --ledger-facts"): + resolve_ledger_artifact( + Namespace( + ledger_facts=None, + ledger_facts_sha256="0" * 64, + ledger_manifest_sha256=None, + ) + ) diff --git a/packages/microcosm-build/tests/test_ledger_targets.py b/packages/microcosm-build/tests/test_ledger_targets.py index 9e1d55e99..a9861980c 100644 --- a/packages/microcosm-build/tests/test_ledger_targets.py +++ b/packages/microcosm-build/tests/test_ledger_targets.py @@ -252,7 +252,9 @@ def _hierarchy_profile() -> dict[str, object]: } -def test__given_supported_ledger_fact__then_microcosm_target_preserves_lineage() -> None: +def test__given_supported_ledger_fact__then_microcosm_target_preserves_lineage() -> ( + None +): # Given mapping = LedgerTargetMapping( measure_by_concept={ @@ -284,7 +286,9 @@ def test__given_supported_ledger_fact__then_microcosm_target_preserves_lineage() assert spec.metadata["ledger_layout_record_set_id"] == "irs_soi.ty2023.table_1_1" -def test__given_consumer_contract_row__then_microcosm_target_preserves_lineage() -> None: +def test__given_consumer_contract_row__then_microcosm_target_preserves_lineage() -> ( + None +): # Given mapping = LedgerTargetMapping( measure_by_concept={ @@ -582,6 +586,68 @@ def test__given_selector_matches_multiple_years__then_latest_source_period_is_us ) +def test__given_period_bearing_groupby_value__then_latest_source_period_is_used() -> ( + None +): + reference = LedgerTargetReference( + name="latest CGT total", + ledger_selector={ + "source_name": "hmrc", + "source_measure_id": "total_gains", + "source_concept": "hmrc.cgt_gains_total", + "geography_level": "country", + "geography_id": "K02000001", + }, + entity="person", + measure="capital_gains", + period=2025, + family="hmrc_cgt", + ) + older = _consumer_fact_row( + aggregate_fact_key="ledger.aggregate_fact.v2:cgt-2022", + legacy_fact_key="ledger.fact.v1:cgt-2022", + value=60_000_000_000, + source={"source_name": "hmrc"}, + observed_measure={ + "source_name": "hmrc", + "source_measure_id": "total_gains", + "source_concept": "hmrc.cgt_gains_total", + "unit": "gbp", + }, + period={"type": "tax_year", "value": 2022}, + geography={"level": "country", "id": "K02000001"}, + entity={"name": "person"}, + dimensions={}, + layout={ + "record_set_id": "hmrc.cgt_statistics_2025.table1.ty2022", + "groupby_dimension": "hmrc.cgt_table1_line", + "groupby_value_id": "ty2022", + "measure_id": "total_gains", + }, + ) + newer = _consumer_fact_row( + **{ + **older, + "aggregate_fact_key": "ledger.aggregate_fact.v2:cgt-2023", + "legacy_fact_key": "ledger.fact.v1:cgt-2023", + "value": 65_900_000_000, + "period": {"type": "tax_year", "value": 2023}, + "layout": { + "record_set_id": "hmrc.cgt_statistics_2025.table1.ty2023", + "groupby_dimension": "hmrc.cgt_table1_line", + "groupby_value_id": "ty2023", + "measure_id": "total_gains", + }, + } + ) + + registry = compile_ledger_target_references( + [older, newer], [reference], country="uk" + ) + + assert registry.specs[0].value == 65_900_000_000 + + def test__given_selector_matches_future_year__then_latest_eligible_period_is_used() -> ( None ): @@ -888,6 +954,123 @@ def test_us_mapping_dimensions_keep_subset_semantics(self) -> None: assert registry.specs[0].name == "mapping dimensions selector" + @pytest.mark.parametrize( + ("older_record_set_id", "newer_record_set_id", "older_period", "newer_period"), + [ + ( + "obr.fy2024_25.tax_receipts", + "obr.fy2025_26.tax_receipts", + "2024-25", + "2025-26", + ), + ( + "obr.ty2024_25.tax_receipts", + "obr.ty2025_26.tax_receipts", + "2024-25", + "2025-26", + ), + ( + "obr.cy2024_25.tax_receipts", + "obr.cy2025_26.tax_receipts", + "2024-25", + "2025-26", + ), + ( + "ons.2024_2025.population", + "ons.2025_2026.population", + "2024_2025", + "2025_2026", + ), + ("isc.census_2023.pupils", "isc.census_2024.pupils", 2023, 2024), + ("ons.dec2023.population", "ons.dec2024.population", "2023-12", "2024-12"), + ( + "dfe.pse_march2025.pupils", + "dfe.pse_march2026.pupils", + "2025-03", + "2026-03", + ), + ( + "ons.families_households_2024.table7", + "ons.families_households_2025.table7", + 2024, + 2025, + ), + ( + "voa.apr2023_mar2024.stock", + "voa.apr2024_mar2025.stock", + "2023-04", + "2024-04", + ), + ], + ) + def test_period_tokens_collapse_across_uk_record_set_spellings( + self, + older_record_set_id: str, + newer_record_set_id: str, + older_period: int | str, + newer_period: int | str, + ) -> None: + older = _consumer_fact_row( + aggregate_fact_key="ledger.aggregate_fact.v2:older", + legacy_fact_key="ledger.fact.v1:older", + lineage={"source_record_id": f"{older_record_set_id}.all.population"}, + period={"type": "year", "value": older_period}, + value=1.0, + source={"source_name": "ons"}, + observed_measure={ + "source_name": "ons", + "source_measure_id": "population", + "source_concept": "ons.population", + "unit": "people", + }, + geography={"level": "country", "id": "K02000001"}, + entity={"name": "person"}, + layout={ + "record_set_id": older_record_set_id, + "groupby_dimension": "population", + "groupby_value_id": "all", + "measure_id": "population", + }, + ) + newer = _consumer_fact_row( + **{ + **older, + "aggregate_fact_key": "ledger.aggregate_fact.v2:newer", + "legacy_fact_key": "ledger.fact.v1:newer", + "lineage": { + "source_record_id": f"{newer_record_set_id}.all.population" + }, + "period": {"type": "year", "value": newer_period}, + "value": 2.0, + "layout": { + "record_set_id": newer_record_set_id, + "groupby_dimension": "population", + "groupby_value_id": "all", + "measure_id": "population", + }, + } + ) + reference = LedgerTargetReference( + name="latest UK population", + ledger_selector={ + "source_name": "ons", + "source_measure_id": "population", + "geography_id": "K02000001", + "entity_name": "person", + "layout_groupby_value_id": "all", + }, + entity="person", + measure="population", + period=2026, + family="ons", + ) + + registry = compile_ledger_target_references( + [older, newer], [reference], country="uk" + ) + + assert registry.specs[0].value == 2.0 + def test__given_selector_matches_only_future_year__then_compilation_fails() -> None: # Given @@ -916,6 +1099,38 @@ def test__given_selector_matches_only_future_year__then_compilation_fails() -> N ) +def test__given_selector_matches_only_unparseable_period__then_compilation_fails() -> ( + None +): + reference = LedgerTargetReference( + name="unparseable SOI AGI total", + ledger_selector={ + "source_name": "irs_soi", + "source_measure_id": "adjusted_gross_income", + "geography_level": "country", + "geography_id": "0100000US", + "entity_name": "tax_unit", + "layout_groupby_value_id": "all", + }, + entity="tax_unit", + measure="adjusted_gross_income", + period=2024, + family="irs_soi", + ) + + with pytest.raises(ValueError, match="at or before target period"): + compile_ledger_target_references( + [ + _consumer_fact_row( + aggregate_fact_key="ledger.aggregate_fact.v2:unknown-period", + period={"type": "source", "value": "current"}, + ) + ], + [reference], + country="us", + ) + + def test__given_aggregation_method_selector__then_compilation_fails() -> None: # Given reference = LedgerTargetReference( @@ -979,6 +1194,239 @@ def test__given_reference_identifiers_match_different_facts__then_compilation_fa compile_ledger_target_references([first, second], [reference], country="us") +def test__given_sum_reference_matches_same_vintage_facts__then_values_sum() -> None: + first = _consumer_fact_row_for_period(2023, value=100.0) + first["aggregate_fact_key"] = "ledger.aggregate_fact.v2:first" + first["layout"]["groupby_value_id"] = "first" + first["dimensions"] = {"band": "first"} + second = _consumer_fact_row_for_period(2023, value=250.0) + second["aggregate_fact_key"] = "ledger.aggregate_fact.v2:second" + second["layout"]["groupby_value_id"] = "second" + second["dimensions"] = {"band": "second"} + reference = LedgerTargetReference( + name="summed bands", + ledger_selector={ + "source_name": "irs_soi", + "source_measure_id": "adjusted_gross_income", + "geography_level": "country", + "geography_id": "0100000US", + "entity_name": "tax_unit", + }, + value_operation="sum", + entity="tax_unit", + measure="adjusted_gross_income", + period=2024, + family="irs_soi", + ) + + registry = compile_ledger_target_references( + [first, second], [reference], country="us" + ) + + spec = registry.specs[0] + assert spec.value == 350.0 + assert spec.metadata["ledger_member_fact_count"] == "2" + assert json.loads(spec.metadata["ledger_member_fact_keys"]) == [ + "ledger.aggregate_fact.v2:first", + "ledger.aggregate_fact.v2:second", + ] + assert spec.metadata["ledger_fact_key"] == "ledger.aggregate_fact.v2:second" + assert spec.metadata["ledger_fact_period"] == "2023" + assert spec.metadata["ledger_value_operation"] == "sum" + + +def test__given_sum_reference_matches_two_vintages__then_latest_partition_wins() -> ( + None +): + old_first = _consumer_fact_row_for_period(2022, value=10.0) + old_first["aggregate_fact_key"] = "ledger.aggregate_fact.v2:old-first" + old_first["layout"]["groupby_value_id"] = "first" + old_first["dimensions"] = {"band": "first"} + old_second = _consumer_fact_row_for_period(2022, value=20.0) + old_second["aggregate_fact_key"] = "ledger.aggregate_fact.v2:old-second" + old_second["layout"]["groupby_value_id"] = "second" + old_second["dimensions"] = {"band": "second"} + new_first = _consumer_fact_row_for_period(2023, value=100.0) + new_first["aggregate_fact_key"] = "ledger.aggregate_fact.v2:new-first" + new_first["layout"]["groupby_value_id"] = "first" + new_first["dimensions"] = {"band": "first"} + new_second = _consumer_fact_row_for_period(2023, value=200.0) + new_second["aggregate_fact_key"] = "ledger.aggregate_fact.v2:new-second" + new_second["layout"]["groupby_value_id"] = "second" + new_second["dimensions"] = {"band": "second"} + reference = LedgerTargetReference( + name="latest summed bands", + ledger_selector={ + "source_name": "irs_soi", + "source_measure_id": "adjusted_gross_income", + "geography_level": "country", + "geography_id": "0100000US", + "entity_name": "tax_unit", + }, + value_operation="sum", + entity="tax_unit", + measure="adjusted_gross_income", + period=2024, + family="irs_soi", + ) + + registry = compile_ledger_target_references( + [old_first, old_second, new_first, new_second], + [reference], + country="us", + ) + + spec = registry.specs[0] + assert spec.value == 300.0 + assert spec.metadata["ledger_member_fact_count"] == "2" + assert "old-first" not in spec.metadata["ledger_member_fact_keys"] + assert "new-first" in spec.metadata["ledger_member_fact_keys"] + + +def test__given_calendar_year_average_reference__then_monthly_mean_compiles() -> None: + rows = [ + _monthly_consumer_fact_row("2025-04", value=6_380_000.0), + *( + _monthly_consumer_fact_row(f"2025-{month:02d}", value=6_600_000.0) + for month in range(5, 9) + ), + *( + _monthly_consumer_fact_row(f"2025-{month:02d}", value=6_960_000.0) + for month in range(9, 12) + ), + _monthly_consumer_fact_row("2025-12", value=7_170_000.0), + ] + reference = LedgerTargetReference( + name="calendar average enrollment", + ledger_selector={ + "source_name": "cms_medicaid", + "source_measure_id": "total_medicaid_chip_enrollment", + "geography_level": "country", + "geography_id": "0100000US", + "entity_name": "person", + }, + value_operation="calendar_year_average", + entity="person", + measure="total_medicaid_chip_enrollment", + period=2025, + family="cms_medicaid", + ) + + registry = compile_ledger_target_references(rows, [reference], country="us") + + spec = registry.specs[0] + assert spec.value == pytest.approx( + (6_380_000.0 + 4 * 6_600_000.0 + 3 * 6_960_000.0 + 7_170_000.0) / 9 + ) + assert spec.metadata["ledger_member_fact_count"] == "9" + assert json.loads(spec.metadata["ledger_member_fact_keys"])[-1] == ( + "ledger.aggregate_fact.v2:medicaid-2025_12" + ) + assert spec.metadata["ledger_fact_key"] == ( + "ledger.aggregate_fact.v2:medicaid-2025_12" + ) + assert spec.metadata["ledger_fact_period"] == "2025-12" + assert spec.metadata["ledger_value_operation"] == "calendar_year_average" + + +def test__given_latest_plateau_reference__then_latest_equal_month_run_wins() -> None: + rows = [ + _monthly_consumer_fact_row("2025-04", value=6_380_000.0), + *( + _monthly_consumer_fact_row(f"2025-{month:02d}", value=6_600_000.0) + for month in range(5, 9) + ), + *( + _monthly_consumer_fact_row(f"2025-{month:02d}", value=6_960_000.0) + for month in range(9, 12) + ), + _monthly_consumer_fact_row("2025-12", value=7_170_000.0), + _monthly_consumer_fact_row("2026-01", value=7_170_000.0), + _monthly_consumer_fact_row("2026-02", value=7_170_000.0), + ] + reference = LedgerTargetReference( + name="latest plateau enrollment", + ledger_selector={ + "source_name": "cms_medicaid", + "source_measure_id": "total_medicaid_chip_enrollment", + "geography_level": "country", + "geography_id": "0100000US", + "entity_name": "person", + }, + value_operation="latest_plateau", + entity="person", + measure="total_medicaid_chip_enrollment", + period=2026, + family="cms_medicaid", + ) + + registry = compile_ledger_target_references(rows, [reference], country="us") + + spec = registry.specs[0] + assert spec.value == 7_170_000.0 + assert spec.metadata["ledger_member_fact_count"] == "3" + assert json.loads(spec.metadata["ledger_member_fact_keys"]) == [ + "ledger.aggregate_fact.v2:medicaid-2025_12", + "ledger.aggregate_fact.v2:medicaid-2026_01", + "ledger.aggregate_fact.v2:medicaid-2026_02", + ] + assert spec.metadata["ledger_fact_key"] == ( + "ledger.aggregate_fact.v2:medicaid-2026_02" + ) + assert spec.metadata["ledger_fact_period"] == "2026-02" + assert spec.metadata["ledger_value_operation"] == "latest_plateau" + + +def test__given_month_operation_matches_non_month_fact__then_refuses_mixing() -> None: + monthly = _monthly_consumer_fact_row("2025-04", value=6_380_000.0) + annual = _monthly_consumer_fact_row("2025-05", value=6_600_000.0) + annual["period"] = {"type": "tax_year", "value": 2025} + reference = LedgerTargetReference( + name="invalid calendar average enrollment", + ledger_selector={ + "source_name": "cms_medicaid", + "source_measure_id": "total_medicaid_chip_enrollment", + "geography_level": "country", + "geography_id": "0100000US", + "entity_name": "person", + }, + value_operation="calendar_year_average", + entity="person", + measure="total_medicaid_chip_enrollment", + period=2025, + family="cms_medicaid", + ) + + with pytest.raises(ValueError, match="requires monthly Ledger facts"): + compile_ledger_target_references([monthly, annual], [reference], country="us") + + +def test__given_identity_reference_matches_multiple_facts__then_still_fails() -> None: + first = _consumer_fact_row_for_period(2023, value=100.0) + first["aggregate_fact_key"] = "ledger.aggregate_fact.v2:first" + first["layout"]["groupby_value_id"] = "first" + second = _consumer_fact_row_for_period(2023, value=250.0) + second["aggregate_fact_key"] = "ledger.aggregate_fact.v2:second" + second["layout"]["groupby_value_id"] = "second" + reference = LedgerTargetReference( + name="ambiguous bands", + ledger_selector={ + "source_name": "irs_soi", + "source_measure_id": "adjusted_gross_income", + "geography_level": "country", + "geography_id": "0100000US", + "entity_name": "tax_unit", + }, + entity="tax_unit", + measure="adjusted_gross_income", + period=2024, + family="irs_soi", + ) + + with pytest.raises(ValueError, match="matched multiple Ledger facts"): + compile_ledger_target_references([first, second], [reference], country="us") + + def test__given_lineage_only_metadata_diff__then_parity_report_names_full_digest() -> ( None ): @@ -1546,26 +1994,7 @@ def test_ledger_metadata_records_assertion_and_fact_period(): assert projection.metadata["ledger_assertion"] == "source_projection" -def test_ledger_reference_selector_matches_on_assertion(): - from microcosm.build.ledger_targets import ( - LedgerTargetReference, - compile_ledger_target_references, - ) - - rows = [ - _consumer_fact_row(), - _consumer_fact_row( - aggregate_fact_key="ledger.aggregate_fact.v2:proj123", - legacy_fact_key="ledger.fact.v1:proj123", - assertion="source_projection", - value=16_000_000_000_000, - lineage={ - "source_record_id": "cbo.ty2023.projection.agi", - "source_cell_keys": ["ledger.source_cell.v1:proj"], - "source_row_keys": [], - }, - ), - ] +def test_ledger_reference_selector_matches_assertion_key(): reference = LedgerTargetReference( name="cbo_projected_agi", ledger_selector={ @@ -1575,9 +2004,145 @@ def test_ledger_reference_selector_matches_on_assertion(): entity="household", measure="adjusted_gross_income", family="cbo", + assertion_policy="allow_source_projection", + ) + + registry = compile_ledger_target_references( + [_consumer_fact_row(assertion="source_projection")], + [reference], + country="us", + ) + + (spec,) = registry.specs + assert spec.metadata["ledger_resolved_assertion"] == "source_projection" + + +def test_ledger_reference_selector_treats_absent_assertion_as_observation(): + reference = LedgerTargetReference( + name="observed_agi", + ledger_selector={ + "source_measure_id": "adjusted_gross_income", + "assertion": "observation", + }, + entity="household", + measure="adjusted_gross_income", + family="irs_soi", + period=2024, + ) + + registry = compile_ledger_target_references( + [_consumer_fact_row(value=15_000_000_000_000)], + [reference], + country="us", + ) + + (spec,) = registry.specs + assert spec.value == 15_000_000_000_000 + assert "ledger_assertion" not in spec.metadata + assert spec.metadata["ledger_resolved_assertion"] == "observation" + + +def test_ledger_reference_projection_fact_excluded_by_default(): + reference = LedgerTargetReference( + name="cbo_projected_agi", + ledger_selector={"source_measure_id": "adjusted_gross_income"}, + entity="household", + measure="adjusted_gross_income", + family="cbo", + period=2024, + ) + + with pytest.raises(ValueError, match="at or before target period"): + compile_ledger_target_references( + [ + _consumer_fact_row( + aggregate_fact_key="ledger.aggregate_fact.v2:proj123", + legacy_fact_key="ledger.fact.v1:proj123", + assertion="source_projection", + value=16_000_000_000_000, + ) + ], + [reference], + country="us", + ) + + +def test_ledger_reference_projection_fact_allowed_by_policy(): + reference = LedgerTargetReference( + name="cbo_projected_agi", + ledger_selector={"source_measure_id": "adjusted_gross_income"}, + entity="household", + measure="adjusted_gross_income", + family="cbo", + period=2024, + assertion_policy="allow_source_projection", + ) + + registry = compile_ledger_target_references( + [ + _consumer_fact_row( + aggregate_fact_key="ledger.aggregate_fact.v2:proj123", + legacy_fact_key="ledger.fact.v1:proj123", + assertion="source_projection", + value=16_000_000_000_000, + ) + ], + [reference], + country="us", ) - registry = compile_ledger_target_references(rows, [reference], country="us") (spec,) = registry.specs assert spec.value == 16_000_000_000_000 assert spec.metadata["ledger_assertion"] == "source_projection" + assert spec.metadata["ledger_resolved_assertion"] == "source_projection" + assert spec.metadata["ledger_assertion_policy"] == "allow_source_projection" + + +def test_ledger_reference_absent_assertion_fact_is_observation_by_default(): + reference = LedgerTargetReference( + name="observed_agi", + ledger_selector={"source_measure_id": "adjusted_gross_income"}, + entity="household", + measure="adjusted_gross_income", + family="irs_soi", + period=2024, + ) + + registry = compile_ledger_target_references( + [_consumer_fact_row(value=15_000_000_000_000)], + [reference], + country="us", + ) + + (spec,) = registry.specs + assert spec.value == 15_000_000_000_000 + assert "ledger_assertion" not in spec.metadata + assert spec.metadata["ledger_resolved_assertion"] == "observation" + assert spec.metadata["ledger_assertion_policy"] == "observed_only" + + +def test_ledger_reference_latest_selection_uses_policy_eligible_facts(): + observed = _consumer_fact_row_for_period(2023, value=15_000_000_000_000) + projection = _consumer_fact_row_for_period(2024, value=16_000_000_000_000) + projection["assertion"] = "source_projection" + reference = LedgerTargetReference( + name="latest observed agi", + ledger_selector={ + "source_name": "irs_soi", + "source_measure_id": "adjusted_gross_income", + "geography_level": "country", + "geography_id": "0100000US", + "entity_name": "tax_unit", + "layout_groupby_value_id": "all", + }, + entity="tax_unit", + measure="adjusted_gross_income", + period=2024, + family="irs_soi", + ) + + registry = compile_ledger_target_references( + [observed, projection], [reference], country="us" + ) + + assert registry.specs[0].value == 15_000_000_000_000 diff --git a/packages/microcosm-build/tests/test_spec_engine_country_bundles.py b/packages/microcosm-build/tests/test_spec_engine_country_bundles.py index b60dccd8b..3661721b3 100644 --- a/packages/microcosm-build/tests/test_spec_engine_country_bundles.py +++ b/packages/microcosm-build/tests/test_spec_engine_country_bundles.py @@ -42,7 +42,7 @@ ), ( "uk", - "942ad7df5537e244df7ede7230098e91c617dbdb11e4d0885a94bb3b4f912da5", + "e65bbdfba881d64618713df765cf0ccd21c119b05a5b11ba7fbcf336065654dd", { "benunit.benunit_id", "household.household_id", diff --git a/packages/microcosm-build/tests/test_target_materialization.py b/packages/microcosm-build/tests/test_target_materialization.py new file mode 100644 index 000000000..7bcf2bd21 --- /dev/null +++ b/packages/microcosm-build/tests/test_target_materialization.py @@ -0,0 +1,182 @@ +import numpy as np + +from microcosm.build.target_materialization import materialize_target_bindings +from microcosm.calibrate import TargetRegistry, TargetSpec + + +class StubAdapter: + def __init__(self): + self.tables = { + "person": { + "income": np.array([10.0, 20.0, 30.0]), + "age": np.array([16.0, 30.0, 40.0]), + "capital_gains": np.array([0.0, 5_000.0, 20_000.0]), + "baseline_tax": np.array([1.0, 2.0, 3.0]), + }, + "household": { + "affected": np.array([1.0, 0.0, 1.0]), + "children": np.array([3.0, 2.0, 4.0]), + }, + } + + def column(self, entity, variable): + return self.tables[entity][variable] + + def set_column(self, entity, variable, values): + self.tables.setdefault(entity, {})[variable] = np.asarray(values) + + def parameter(self, name, period): + assert name == "cgt.aea" + assert period == 2025 + return 6_000.0 + + def counterfactual_delta(self, binding, period): + assert binding["zeroed_input"] == "salary_sacrifice" + assert period == 2025 + return np.array([0.0, -1.0, -2.0]) + + +def test_prepared_column_path_materializes_filtered_values(): + registry = TargetRegistry( + [ + TargetSpec( + name="adult_income", + entity="person", + measure="adult_income_measure", + value=50.0, + source="test", + metadata={"contract_target_id": "adult_income"}, + ) + ], + country="uk", + ) + contract = { + "adult_income": { + "bindings": { + "policyengine": { + "value_variable": "income", + "filters": [{"variable": "age", "operator": ">=", "value": 18}], + } + } + } + } + adapter = StubAdapter() + + result = materialize_target_bindings(adapter, registry, contract, period=2025) + + assert result.skipped == () + assert adapter.tables["person"]["adult_income_measure"].tolist() == [ + 0.0, + 20.0, + 30.0, + ] + + +def test_generic_provider_kinds_materialize_expected_columns(): + registry = TargetRegistry( + [ + TargetSpec( + name="cgt_taxpayers", + entity="person", + measure="cgt_taxpayer_measure", + value=1.0, + source="test", + metadata={"contract_target_id": "cgt_taxpayers"}, + ), + TargetSpec( + name="affected_children", + entity="household", + measure="affected_children_measure", + value=7.0, + source="test", + metadata={"contract_target_id": "affected_children"}, + ), + TargetSpec( + name="salary_sacrifice", + entity="person", + measure="salary_sacrifice_delta", + value=-3.0, + source="test", + signed=True, + metadata={"contract_target_id": "salary_sacrifice"}, + ), + ], + country="uk", + ) + contract = { + "cgt_taxpayers": { + "bindings": { + "policyengine": { + "kind": "parameter_gated_threshold", + "gate_parameter": "cgt.aea", + "gate_comparison": ">", + "gated_variable": "capital_gains", + "value_variable": "person_count", + } + } + }, + "affected_children": { + "bindings": { + "policyengine": { + "kind": "baseline_flag_crosstab", + "from_entity": "household", + "affected_flag_variable": "affected", + "count_of": "children", + } + } + }, + "salary_sacrifice": { + "bindings": { + "policyengine": { + "kind": "input_substitution_counterfactual", + "zeroed_input": "salary_sacrifice", + "folded_into": "employment_income", + "output_variable": "income_tax", + "output_delta": "baseline_minus_reform", + } + } + }, + } + adapter = StubAdapter() + + result = materialize_target_bindings(adapter, registry, contract, period=2025) + + assert result.skipped == () + assert adapter.tables["person"]["cgt_taxpayer_measure"].tolist() == [0.0, 0.0, 1.0] + assert adapter.tables["household"]["affected_children_measure"].tolist() == [ + 3.0, + 0.0, + 4.0, + ] + assert adapter.tables["person"]["salary_sacrifice_delta"].tolist() == [ + 0.0, + -1.0, + -2.0, + ] + + +def test_missing_materialization_inputs_are_reported_as_skips(): + registry = TargetRegistry( + [ + TargetSpec( + name="missing", + entity="person", + measure="missing_measure", + value=1.0, + source="test", + metadata={"contract_target_id": "missing"}, + ) + ], + country="uk", + ) + contract = { + "missing": { + "bindings": {"policyengine": {"value_variable": "not_present"}} + } + } + + result = materialize_target_bindings(StubAdapter(), registry, contract, period=2025) + + assert len(result.skipped) == 1 + assert result.skipped[0].name == "missing" + assert result.report()["skipped_count"] == 1 diff --git a/packages/microcosm-build/tests/test_uk_battery_bindings.py b/packages/microcosm-build/tests/test_uk_battery_bindings.py index fe4d5bda2..0444e691d 100644 --- a/packages/microcosm-build/tests/test_uk_battery_bindings.py +++ b/packages/microcosm-build/tests/test_uk_battery_bindings.py @@ -33,6 +33,7 @@ from microcosm.build.uk_runtime.battery_bindings import ( UK_GATE_REGISTRY, UKGateBinding, + _ledger_compile_parity_registry, ) from microcosm.build.uk_runtime.national_frame import ( _uk_gate_surface, @@ -48,6 +49,7 @@ from microcosm.build.uk_runtime.terminal_gates import ( UKInputMassReference, ) +from microcosm.calibrate import TargetRegistry, TargetSpec from microcosm.frame import engine_tables KEY = base64.b64encode(b"\x07" * 32).decode("ascii") @@ -719,8 +721,49 @@ def test_preflight_passes_with_the_committed_manifest(self, uk_gates) -> None: assert statuses == { "uk_release_input_coverage_manifest_current": GateStatus.PASSED, "uk_release_family_build_stages": GateStatus.PASSED, + "uk_ledger_compile_parity_production_2023": (GateStatus.EVIDENCE_ABSENT), + "uk_ledger_compile_parity_incumbent_2025": GateStatus.EVIDENCE_ABSENT, } + def test_ledger_compile_parity_selects_the_declared_period_registry(self) -> None: + registry_2023 = TargetRegistry( + ( + TargetSpec( + name="target", + entity="household", + measure="measure", + value=1.0, + period=2023, + source="synthetic", + ), + ), + country="uk", + ) + registry_2025 = TargetRegistry( + ( + TargetSpec( + name="target", + entity="household", + measure="measure", + value=2.0, + period=2025, + source="synthetic", + ), + ), + country="uk", + ) + context = EvidenceContext( + artifacts={ + "uk_ledger_compiled_registries": { + 2023: registry_2023, + 2025: registry_2025, + } + } + ) + + assert _ledger_compile_parity_registry(context, 2023) is registry_2023 + assert _ledger_compile_parity_registry(context, 2025) is registry_2025 + def test_missing_required_stage_fails_with_the_assertion_text( self, uk_gates ) -> None: diff --git a/packages/microcosm-build/tests/test_uk_cgt_calibration.py b/packages/microcosm-build/tests/test_uk_cgt_calibration.py index fc41ea824..173898bb9 100644 --- a/packages/microcosm-build/tests/test_uk_cgt_calibration.py +++ b/packages/microcosm-build/tests/test_uk_cgt_calibration.py @@ -18,8 +18,33 @@ uk_cgt_annual_exempt_amount, ) from microcosm.build.uk_runtime.national_frame import uk_national_frame +from microcosm.calibrate import TargetRegistry, TargetSpec from microcosm.frame import WeightKind +CGT_REGISTRY = TargetRegistry( + [ + TargetSpec( + name="hmrc.cgt.gains_total", + entity="person", + measure="hmrc/capital_gains_total", + value=65_937_000_000.0, + period=2025, + source="test", + family="hmrc_cgt", + ), + TargetSpec( + name="hmrc.cgt.taxpayers_total", + entity="person", + measure="hmrc/cgt_taxpayers", + value=378_000.0, + period=2025, + source="test", + family="hmrc_cgt", + ), + ], + country="uk", +) + def _dataset(gains, *, time_period="2023", drop_gains=False, weights=None): ids = np.arange(len(gains), dtype=int) @@ -69,13 +94,13 @@ def test_default_threshold_comes_from_the_dataset_period(): gains = [0.0, 8_000.0, 100_000.0] assert ( materialize_uk_cgt_calibration_frame( - _dataset(gains, time_period="2023") + _dataset(gains, time_period="2023"), registry=CGT_REGISTRY ).taxpayer_rows == 2 ) assert ( materialize_uk_cgt_calibration_frame( - _dataset(gains, time_period="2022") + _dataset(gains, time_period="2022"), registry=CGT_REGISTRY ).taxpayer_rows == 1 ) @@ -84,7 +109,7 @@ def test_default_threshold_comes_from_the_dataset_period(): def test_measure_columns_are_indicator_and_gated_amount(): """Counts are 0/1; amounts are zeroed off-support, not merely copied.""" result = materialize_uk_cgt_calibration_frame( - _dataset([0.0, 5_000.0, 20_000.0, 100_000.0]) + _dataset([0.0, 5_000.0, 20_000.0, 100_000.0]), registry=CGT_REGISTRY ) person = result.frame.table("person") assert person[UK_CGT_TAXPAYER_COUNT_COLUMN].tolist() == [0.0, 0.0, 1.0, 1.0] @@ -94,6 +119,13 @@ def test_measure_columns_are_indicator_and_gated_amount(): 20_000.0, 100_000.0, ] + assert person["hmrc/cgt_taxpayers"].tolist() == [0.0, 0.0, 1.0, 1.0] + assert person["hmrc/capital_gains_total"].tolist() == [ + 0.0, + 0.0, + 20_000.0, + 100_000.0, + ] assert result.annual_exempt_amount == 6_000.0 assert result.taxpayer_rows == 2 assert result.minimum_positive_support_rows == 2 @@ -101,7 +133,9 @@ def test_measure_columns_are_indicator_and_gated_amount(): def test_explicit_threshold_overrides_the_period_default(): result = materialize_uk_cgt_calibration_frame( - _dataset([0.0, 5_000.0, 20_000.0]), annual_exempt_amount=10_000.0 + _dataset([0.0, 5_000.0, 20_000.0]), + registry=CGT_REGISTRY, + annual_exempt_amount=10_000.0, ) assert result.annual_exempt_amount == 10_000.0 assert result.taxpayer_rows == 1 @@ -110,7 +144,7 @@ def test_explicit_threshold_overrides_the_period_default(): def test_frame_carries_person_rows_and_household_weights(): """Constraint rows are person-grain; the calibrated mass stays household.""" result = materialize_uk_cgt_calibration_frame( - _dataset([0.0, 20_000.0], weights=[3.0, 5.0]) + _dataset([0.0, 20_000.0], weights=[3.0, 5.0]), registry=CGT_REGISTRY ) assert set(result.frame.entities) == {"person", "household"} weights = result.frame.resolve_weights("household") @@ -119,20 +153,26 @@ def test_frame_carries_person_rows_and_household_weights(): def test_registry_contains_exactly_the_two_declared_facts(): - result = materialize_uk_cgt_calibration_frame(_dataset([0.0, 20_000.0])) + result = materialize_uk_cgt_calibration_frame( + _dataset([0.0, 20_000.0]), registry=CGT_REGISTRY + ) assert result.registry.country == "uk" assert {spec.name for spec in result.registry} == { - "hmrc/capital_gains_total", - "hmrc/cgt_taxpayers", + "hmrc.cgt.gains_total", + "hmrc.cgt.taxpayers_total", } def test_missing_capital_gains_column_fails_loudly(): with pytest.raises(ValueError, match="capital_gains"): - materialize_uk_cgt_calibration_frame(_dataset([0.0, 1.0], drop_gains=True)) + materialize_uk_cgt_calibration_frame( + _dataset([0.0, 1.0], drop_gains=True), registry=CGT_REGISTRY + ) def test_zero_support_refuses_to_calibrate_a_positive_fact(): """Every person below the AEA means the £65.9bn fact has no support.""" with pytest.raises(ValueError, match="no strictly positive-mass support"): - materialize_uk_cgt_calibration_frame(_dataset([0.0, 100.0, 5_999.0])) + materialize_uk_cgt_calibration_frame( + _dataset([0.0, 100.0, 5_999.0]), registry=CGT_REGISTRY + ) diff --git a/packages/microcosm-build/tests/test_uk_cgt_targets.py b/packages/microcosm-build/tests/test_uk_cgt_targets.py index 657991eb5..8284ee8f4 100644 --- a/packages/microcosm-build/tests/test_uk_cgt_targets.py +++ b/packages/microcosm-build/tests/test_uk_cgt_targets.py @@ -1,4 +1,4 @@ -"""Tests for the declared UK capital gains target facts. +"""Tests for the UK capital gains Ledger target references. The published populace-uk surface carries no capital gains targets, which leaves the gains distribution unanchored (1.47m CGT taxpayers against HMRC's @@ -6,8 +6,11 @@ requirement that makes their absence a build failure rather than a silence. """ -import pytest +import json +from pathlib import Path +from microcosm.build.country_spec import load_country_spec +from microcosm.build.ledger_targets import compile_ledger_target_references from microcosm.build.uk_runtime.fiscal_targets import ( UK_CGT_REQUIRED_COLUMNS, UK_CGT_TARGET_COVERAGE_REQUIREMENTS, @@ -15,35 +18,65 @@ UK_FISCAL_TARGET_REGISTRY, ) +FIXTURE_FEED_ROWS = ( + Path(__file__).parent / "fixtures" / "uk_target_reference_feed_rows.jsonl" +) + + +def _compiled_cgt_registry(): + spec = load_country_spec("uk") + references = [ + reference + for reference in spec.target_references + if reference.name in {"hmrc.cgt.gains_total", "hmrc.cgt.taxpayers_total"} + ] + facts = [ + json.loads(line) + for line in FIXTURE_FEED_ROWS.read_text().splitlines() + if line.strip() + ] + return compile_ledger_target_references(facts, references, country="uk") + + +def test_inline_cgt_target_specs_are_retired(): + assert UK_CGT_TARGET_SPECS == () + assert len(UK_FISCAL_TARGET_REGISTRY) == 0 -def test_declares_gains_total_and_taxpayer_count(): - """Both facts are needed: a total alone does not pin the distribution.""" - assert {spec.name for spec in UK_CGT_TARGET_SPECS} == { - "hmrc/capital_gains_total", - "hmrc/cgt_taxpayers", + +def test_compiled_references_declare_gains_total_and_taxpayer_count(): + registry = _compiled_cgt_registry() + + assert {spec.name for spec in registry.specs} == { + "hmrc.cgt.gains_total", + "hmrc.cgt.taxpayers_total", } -def test_every_fact_carries_provenance(): +def test_every_compiled_fact_carries_provenance(): """A fact without a citation is not a fact.""" - for spec in UK_CGT_TARGET_SPECS: + for spec in _compiled_cgt_registry().specs: assert "gov.uk" in spec.source - assert spec.family == "hmrc" + assert spec.family == "hmrc_cgt" -def test_facts_match_hmrc_2023_24_outturn(): - """Values are HMRC's published outturn, not uprated approximations.""" - by_name = {spec.name: spec for spec in UK_CGT_TARGET_SPECS} - assert by_name["hmrc/capital_gains_total"].value == pytest.approx(65.9e9) - assert by_name["hmrc/cgt_taxpayers"].value == pytest.approx(378_000) - assert all(spec.period == 2023 for spec in UK_CGT_TARGET_SPECS) +def test_compiled_facts_match_hmrc_2023_24_outturn(): + by_name = {spec.name: spec for spec in _compiled_cgt_registry().specs} + assert by_name["hmrc.cgt.gains_total"].value == 65_937_000_000 + assert by_name["hmrc.cgt.taxpayers_total"].value == 378_000 + assert all(spec.period == 2025 for spec in by_name.values()) + assert all( + spec.metadata["ledger_fact_period"] == "2023" for spec in by_name.values() + ) def test_measures_are_declared_columns(): """The registry refuses callables, so measures must be prepared columns.""" - measures = {spec.measure for spec in UK_CGT_TARGET_SPECS} - assert measures == set(UK_CGT_REQUIRED_COLUMNS) - assert all(isinstance(spec.measure, str) for spec in UK_CGT_TARGET_SPECS) + measures = {spec.measure for spec in _compiled_cgt_registry().specs} + assert measures == {"hmrc/capital_gains_total", "hmrc/cgt_taxpayers"} + assert set(UK_CGT_REQUIRED_COLUMNS) == { + "uk_cgt_measure_gains_amount", + "uk_cgt_measure_taxpayer_count", + } def test_facts_are_person_grain(): @@ -52,14 +85,7 @@ def test_facts_are_person_grain(): The weights stay household-level; the frame carries them as household ``Weights`` while the constraint rows live on the person table. """ - assert all(spec.entity == "person" for spec in UK_CGT_TARGET_SPECS) - - -def test_measure_columns_are_prepared_names(): - """Measures name prepared columns, not raw model inputs.""" - by_name = {spec.name: spec for spec in UK_CGT_TARGET_SPECS} - assert by_name["hmrc/capital_gains_total"].measure == "uk_cgt_measure_gains_amount" - assert by_name["hmrc/cgt_taxpayers"].measure == "uk_cgt_measure_taxpayer_count" + assert all(spec.entity == "person" for spec in _compiled_cgt_registry().specs) def test_registry_is_uk_and_content_addressed(): @@ -72,6 +98,6 @@ def test_coverage_requires_both_facts(): (requirement,) = UK_CGT_TARGET_COVERAGE_REQUIREMENTS assert requirement.min_matches == 2 assert set(requirement.accepted_names) == { - "hmrc/capital_gains_total", - "hmrc/cgt_taxpayers", + "hmrc.cgt.gains_total", + "hmrc.cgt.taxpayers_total", } diff --git a/packages/microcosm-build/tests/test_uk_ledger_targets.py b/packages/microcosm-build/tests/test_uk_ledger_targets.py new file mode 100644 index 000000000..023ddb7f8 --- /dev/null +++ b/packages/microcosm-build/tests/test_uk_ledger_targets.py @@ -0,0 +1,98 @@ +import json +from pathlib import Path + +import numpy as np + +from microcosm.build.uk_runtime.ledger_targets import ( + compile_uk_target_registry, + materialize_uk_ledger_targets, +) +from microcosm.calibrate import TargetRegistry, TargetSpec + +FIXTURE_FEED_ROWS = ( + Path(__file__).parent / "fixtures" / "uk_target_reference_feed_rows.jsonl" +) + + +class StubUKAdapter: + def __init__(self): + self.tables = { + "person": { + "capital_gains": np.array([0.0, 5_000.0, 20_000.0]), + }, + "household": { + "uc_is_child_limit_affected": np.array([1.0, 0.0, 1.0]), + "children_count": np.array([3.0, 2.0, 4.0]), + }, + } + + def column(self, entity, variable): + return self.tables[entity][variable] + + def set_column(self, entity, variable, values): + self.tables.setdefault(entity, {})[variable] = np.asarray(values) + + def parameter(self, name, period): + assert name == "gov.hmrc.cgt.annual_exempt_amount" + assert period == 2025 + return 6_000.0 + + def counterfactual_delta(self, binding, period): + return np.zeros(3) + + +def _fixture_rows() -> list[dict]: + return [ + json.loads(line) + for line in FIXTURE_FEED_ROWS.read_text().splitlines() + if line.strip() + ] + + +def test_compile_uk_target_registry_compiles_fixture_subset(): + result = compile_uk_target_registry(_fixture_rows(), target_period=2025) + names = {spec.name for spec in result.registry.specs} + + assert { + "obr.income_tax", + "dwp.uc.two_child_limit.households_affected", + "slc.repayments.england_plan_2", + "hmrc.cgt.gains_total", + "hmrc.cgt.taxpayers_total", + } <= names + assert result.unsupported + + +def test_materialize_uk_ledger_targets_with_stub_adapter(): + registry = TargetRegistry( + [ + TargetSpec( + name="hmrc.cgt.taxpayers_total", + entity="person", + measure="hmrc/cgt_taxpayers", + value=378_000.0, + source="test", + metadata={"contract_target_id": "hmrc.cgt.taxpayers_total"}, + ), + TargetSpec( + name="dwp.uc.two_child_limit.children_affected", + entity="household", + measure="dwp/uc/two_child_limit/children_affected", + value=1.0, + source="test", + metadata={ + "contract_target_id": "dwp.uc.two_child_limit.children_affected" + }, + ), + ], + country="uk", + ) + adapter = StubUKAdapter() + + result = materialize_uk_ledger_targets(adapter, registry, period=2025) + + assert result.skipped == () + assert adapter.tables["person"]["hmrc/cgt_taxpayers"].tolist() == [0.0, 0.0, 1.0] + assert adapter.tables["household"][ + "dwp/uc/two_child_limit/children_affected" + ].tolist() == [3.0, 0.0, 4.0] diff --git a/packages/microcosm-build/tests/test_uk_national_build.py b/packages/microcosm-build/tests/test_uk_national_build.py index e9c101110..6cc3fe26a 100644 --- a/packages/microcosm-build/tests/test_uk_national_build.py +++ b/packages/microcosm-build/tests/test_uk_national_build.py @@ -1091,6 +1091,8 @@ def test_national_build_real_terminal_batch_blocks_incomplete_qrf_before_staging assert statuses == { "uk_release_input_coverage_manifest_current": "passed", "uk_release_family_build_stages": "passed", + "uk_ledger_compile_parity_production_2023": "evidence_absent", + "uk_ledger_compile_parity_incumbent_2025": "evidence_absent", "uk_release_input_coverage": "passed", "uk_degenerate_release_surface": "passed", "uk_zero_weight_strata": "passed", @@ -1796,8 +1798,8 @@ def test_release_candidate_blocks_on_named_evidence_gaps(tmp_path) -> None: gate_registry=registry, release_candidate=True, ) - assert error.value.phase == "terminal" - assert "[uk_weight_ratio]" in str(error.value) + assert error.value.phase == "preflight" + assert "[uk_ledger_compile_parity_production_2023]" in str(error.value) assert not (tmp_path / "candidate.h5").exists() diff --git a/packages/microcosm-build/tests/test_uk_national_calibration.py b/packages/microcosm-build/tests/test_uk_national_calibration.py index bff827548..12a9cddde 100644 --- a/packages/microcosm-build/tests/test_uk_national_calibration.py +++ b/packages/microcosm-build/tests/test_uk_national_calibration.py @@ -3,6 +3,7 @@ from __future__ import annotations import json +from importlib import resources as importlib_resources import numpy as np import pandas as pd @@ -15,6 +16,8 @@ from microcosm.build.uk_runtime.national_frame import validate_uk_national_frame from microcosm.frame import EntitySchema, Frame, WeightKind, Weights +ACTIVE_REFERENCE_COUNT = 388 + def _uc_reference(**overrides) -> LedgerTargetReference: values = { @@ -78,6 +81,107 @@ def _frame() -> Frame: ) +def _nested_frame() -> Frame: + return Frame( + { + "person": pd.DataFrame( + { + "person_id": np.arange(6, dtype="int64"), + "person_benunit_id": [0, 0, 1, 2, 3, 3], + "person_household_id": [0, 0, 0, 1, 2, 2], + } + ), + "benunit": pd.DataFrame( + { + "benunit_id": np.arange(4, dtype="int64"), + "universal_credit": [1.0, 0.0, 1.0, 1.0], + } + ), + "household": pd.DataFrame( + {"household_id": np.arange(3, dtype="int64")} + ), + }, + EntitySchema(group_entities=("benunit", "household")), + {"household": Weights(np.array([10.0, 20.0, 30.0]), WeightKind.DESIGN)}, + metadata={"time_period": "2023"}, + ) + + +def _reference_by_name(name: str) -> LedgerTargetReference: + from microcosm.build.country_spec import load_country_spec + + return next( + reference + for reference in load_country_spec("uk").target_references + if reference.name == name + ) + + +def _fact_for_reference( + reference: LedgerTargetReference, + value: float, +) -> dict: + selector = dict(reference.ledger_selector) + dimensions = dict(selector.get("dimension_values", {})) + return { + "aggregate_fact_key": f"ledger.aggregate_fact.v2:{reference.name}", + "aggregation": {"method": "sum"}, + "assertion": "observation", + "dimensions": dimensions, + "geography": { + "level": selector.get("geography_level", "country"), + "id": selector.get("geography_id", "K02000001"), + }, + "observed_measure": { + "source_name": selector["source_name"], + "source_concept": selector["source_concept"], + "source_measure_id": "value", + "unit": "gbp", + }, + "period": {"type": "month", "value": f"{reference.period}-12"}, + "value": value, + } + + +def _materialization_binding_frame( + *, + include_counterfactual_delta: bool = True, +) -> Frame: + household = pd.DataFrame( + { + "household_id": np.arange(3, dtype="int64"), + "esa_income": [10.0, 20.0, 0.0], + "esa_contrib": [1.0, 2.0, 0.0], + "uc_is_child_limit_affected": [1.0, 0.0, 1.0], + "children_count": [2.0, 1.0, 3.0], + } + ) + salary_sacrifice_metric = "hmrc/salary_sacrifice_it_relief_basic_rate" + person_columns = { + "person_id": np.arange(4, dtype="int64"), + "person_benunit_id": [0, 0, 1, 2], + "person_household_id": [0, 0, 1, 2], + "capital_gains": [0.0, 7_000.0, 12_000.0, 500.0], + } + if include_counterfactual_delta: + person_columns[salary_sacrifice_metric] = [1.0, 2.0, 0.0, 0.0] + return Frame( + { + "person": pd.DataFrame(person_columns), + "benunit": pd.DataFrame( + { + "benunit_id": np.arange(3, dtype="int64"), + "universal_credit": [1.0, 0.0, 1.0], + } + ), + "household": household, + }, + EntitySchema(group_entities=("benunit", "household")), + {"household": Weights(np.full(3, 10.0), WeightKind.DESIGN)}, + metadata={"time_period": "2025"}, + ) + + def test_uc_calibration_compiles_and_moves_weighted_count_towards_fact() -> None: frame = _frame() stage = UKNationalCalibrationStage( @@ -95,6 +199,22 @@ def test_uc_calibration_compiles_and_moves_weighted_count_towards_fact() -> None assert stage.diagnostics[0]["target"] == 30.0 +def test_uc_calibration_stage_accepts_benunit_grain_reference_on_nested_frame() -> None: + frame = _nested_frame() + stage = UKNationalCalibrationStage( + [_fact(value=60.0)], references=[_uc_reference()], epochs=5 + ) + + result = stage(frame) + + assert stage.manifest["activated_reference_count"] == 1 + assert stage.manifest["resolved_reference_count"] == 1 + assert stage.manifest["matrix_target_count"] == 1 + assert stage.diagnostics[0]["target"] == 60.0 + assert stage.diagnostics[0]["estimate"] == pytest.approx(60.0) + validate_uk_national_frame(result) + + def test_activated_unresolvable_reference_aborts_loudly() -> None: stage = UKNationalCalibrationStage( [_fact(concept="different")], references=[_uc_reference()], epochs=1 @@ -108,14 +228,32 @@ def test_chronicle_184_uc_and_obr_references_compile_fail_closed() -> None: from microcosm.build.country_spec import load_country_spec from microcosm.build.ledger_targets import compile_ledger_target_references + spec = load_country_spec("uk") + assert len(spec.target_references) == ACTIVE_REFERENCE_COUNT + reference_names = {reference.name for reference in spec.target_references} + assert "obr.universal_credit_in_cap" in reference_names + assert "dwp.uc.households" in reference_names + + membership = json.loads( + importlib_resources.files("microcosm.build.uk") + .joinpath("target_reference_membership.json") + .read_text() + ) + assert membership["targets"]["dwp.uc.households"]["status"] == "active" + uc_reference = next( + reference + for reference in spec.target_references + if reference.name == "dwp.uc.households" + ) + assert uc_reference.value_operation == "calendar_year_average" + references = tuple( reference - for reference in load_country_spec("uk").target_references - if reference.name in {"dwp.uc.households", "obr.universal_credit_in_cap"} + for reference in spec.target_references + if reference.name == "obr.universal_credit_in_cap" ) registry = compile_ledger_target_references( [ - _fact(), _fact( concept="obr.universal_credit_in_cap", source_name="obr", @@ -126,10 +264,64 @@ def test_chronicle_184_uc_and_obr_references_compile_fail_closed() -> None: country="uk", ) - assert {spec.name for spec in registry.specs} == { + assert {spec.name for spec in registry.specs} == {"obr.universal_credit_in_cap"} + + +def test_packaged_binding_classes_materialize_through_national_stage() -> None: + selected_names = ( "dwp.uc.households", - "obr.universal_credit_in_cap", + "obr.esa", + "hmrc.cgt.taxpayers_total", + "dwp.uc.two_child_limit.children_affected", + "hmrc.salary_sacrifice.it_relief_basic_rate", + ) + references = tuple(_reference_by_name(name) for name in selected_names) + facts = [ + _fact_for_reference(reference, value) + for reference, value in zip( + references, + (20.0, 33.0, 2.0, 5.0, 3.0), + strict=True, + ) + ] + stage = UKNationalCalibrationStage( + facts, + references=references, + epochs=1, + learning_rate=0.01, + ) + + result = stage(_materialization_binding_frame()) + + assert stage.manifest["activated_reference_count"] == len(selected_names) + assert stage.manifest["resolved_reference_count"] == len(selected_names) + assert stage.manifest["matrix_target_count"] == len(selected_names) + materialized = { + ("benunit", "dwp/uc/households"): [1.0, 0.0, 1.0], + ("household", "obr/esa"): [11.0, 22.0, 0.0], + ("person", "hmrc/cgt_taxpayers"): [0.0, 1.0, 1.0, 0.0], + ("household", "dwp/uc/two_child_limit/children_affected"): [2.0, 0.0, 3.0], + ("person", "hmrc/salary_sacrifice_it_relief_basic_rate"): [ + 1.0, + 2.0, + 0.0, + 0.0, + ], } + for (entity, measure), expected in materialized.items(): + assert result.table(entity)[measure].tolist() == expected + + +def test_packaged_materialization_skip_aborts_national_stage() -> None: + reference = _reference_by_name("hmrc.salary_sacrifice.it_relief_basic_rate") + stage = UKNationalCalibrationStage( + [_fact_for_reference(reference, 3.0)], + references=[reference], + epochs=1, + ) + + with pytest.raises(RuntimeError, match="could not materialize every"): + stage(_materialization_binding_frame(include_counterfactual_delta=False)) def test_calibration_preserves_entity_ids_and_national_integrity() -> None: diff --git a/packages/microcosm-build/tests/test_uk_national_targets.py b/packages/microcosm-build/tests/test_uk_national_targets.py index 74867d9f4..1dd1c672c 100644 --- a/packages/microcosm-build/tests/test_uk_national_targets.py +++ b/packages/microcosm-build/tests/test_uk_national_targets.py @@ -86,8 +86,10 @@ def _load() -> dict: def _is_filter_predicate(node: Mapping) -> bool: - return "value" in node and "operator" in node and ( - "concept" in node or "variable" in node + return ( + "value" in node + and "operator" in node + and ("concept" in node or "variable" in node) ) @@ -127,7 +129,7 @@ def test_uk_national_targets_shape_and_accounting(): assert resource["country"] == "uk" assert resource["allowed_value_operations"] == ["identity"] - assert len(resource["targets"]) == 187 + assert len(resource["targets"]) == 189 parity = resource["registry_parity"] assert parity["pinned_ref"] == "12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3" @@ -142,6 +144,63 @@ def test_uk_national_targets_shape_and_accounting(): assert mapped_target_ids | set(unmapped_declarations) == declared_target_ids assert all(reason for reason in unmapped_declarations.values()) assert len(mapped_target_ids) == 184 + assert len(unmapped_declarations) == 5 + suppressed_ancestors = parity["suppressed_ancestors"] + assert len(suppressed_ancestors) == 5 + assert set(suppressed_ancestors).isdisjoint(parity["mapped"]) + assert set(suppressed_ancestors).isdisjoint(parity["excluded"]) + assert { + entry["contract_target_id"] for entry in suppressed_ancestors.values() + } <= declared_target_ids + assert all( + "410-Gone" in entry["rationale"] for entry in suppressed_ancestors.values() + ) + + +def test_uk_national_targets_split_terminal_sex_age_bands(): + resource = _load() + parity = resource["registry_parity"] + + assert parity["mapped"]["ons/female_85_90"] == "ons.population.female_85_89" + assert parity["mapped"]["ons/male_85_90"] == "ons.population.male_85_89" + assert { + "ons.population.female_90_plus", + "ons.population.male_90_plus", + } <= set(parity["unmapped_declarations"]) + assert "single-age-90 share" in parity["accounting_notes"][ + "ons_terminal_sex_band_split" + ] + + female_85_89 = _target_by_id(resource, "ons.population.female_85_89") + female_90_plus = _target_by_id(resource, "ons.population.female_90_plus") + male_85_89 = _target_by_id(resource, "ons.population.male_85_89") + male_90_plus = _target_by_id(resource, "ons.population.male_90_plus") + + assert female_85_89["ledger_selector"]["dimension_values"] == { + "sex": "female", + "age": [85, 86, 87, 88, 89], + } + assert male_85_89["ledger_selector"]["dimension_values"] == { + "sex": "male", + "age": [85, 86, 87, 88, 89], + } + assert female_90_plus["ledger_selector"]["dimension_values"] == { + "sex": "female", + "age": ["90_plus"], + } + assert male_90_plus["ledger_selector"]["dimension_values"] == { + "sex": "male", + "age": ["90_plus"], + } + assert female_85_89["measurement"]["filters"] == [ + {"concept": "uk.demographics.gender", "equals": "female"}, + {"concept": "uk.demographics.age", "operator": ">=", "value": 85}, + {"concept": "uk.demographics.age", "operator": "<=", "value": 89}, + ] + assert female_90_plus["measurement"]["filters"] == [ + {"concept": "uk.demographics.gender", "equals": "female"}, + {"concept": "uk.demographics.age", "operator": ">=", "value": 90}, + ] def test_uk_national_targets_have_unique_target_ids(): @@ -179,9 +238,9 @@ def test_uk_national_targets_declare_selectors_and_closed_world_kinds(): kind = binding.get("kind") assert kind is None or kind in BINDING_KINDS, target["target_id"] if target["family"] in PROJECTION_FAMILIES: - assert target.get("assertion_policy") == "allow_source_projection", ( - target["target_id"] - ) + assert target.get("assertion_policy") == "allow_source_projection", target[ + "target_id" + ] else: assert "assertion_policy" not in target, target["target_id"] assert len(metric_names) == len(set(metric_names)) @@ -193,15 +252,15 @@ def test_uk_national_targets_declare_chronicle_loader_guarantees(): for target in resource["targets"]: selector = target["ledger_selector"] if "dimension_values" in selector: - assert _valid_dimension_values(selector["dimension_values"]), ( - target["target_id"] - ) + assert _valid_dimension_values(selector["dimension_values"]), target[ + "target_id" + ] if "dimensions" in selector: dimensions = selector["dimensions"] assert isinstance(dimensions, list), target["target_id"] - assert all(isinstance(name, str) and name for name in dimensions), ( - target["target_id"] - ) + assert all(isinstance(name, str) and name for name in dimensions), target[ + "target_id" + ] binding = target["bindings"]["policyengine"] kind = binding.get("kind") @@ -219,9 +278,9 @@ def test_uk_national_targets_declare_chronicle_loader_guarantees(): "gate_comparison", } <= set(binding), target["target_id"] elif kind == "baseline_flag_crosstab": - assert {"affected_flag_variable", "count_of"} <= set(binding), ( - target["target_id"] - ) + assert {"affected_flag_variable", "count_of"} <= set(binding), target[ + "target_id" + ] if "reduce" in binding: assert binding["reduce"] in BINDING_REDUCERS, target["target_id"] @@ -242,9 +301,12 @@ def test_uk_national_targets_declare_chronicle_loader_guarantees(): if assertion_policy is not None: assert assertion_policy in ASSERTION_POLICIES, target["target_id"] - assert _target_by_id(resource, "obr.esa")["bindings"]["policyengine"][ - "value_expression" - ] == "esa_income + esa_contrib" + assert ( + _target_by_id(resource, "obr.esa")["bindings"]["policyengine"][ + "value_expression" + ] + == "esa_income + esa_contrib" + ) def test_uk_uc_households_target_counts_benunits(): @@ -280,13 +342,20 @@ def test_uk_uc_households_target_counts_benunits(): def test_uk_national_cgt_contract_names_match_runtime_specs(): resource = _load() - cgt_metric_names = { + cgt_metric_names = sorted( target["bindings"]["policyengine"]["metric_name"] for target in resource["targets"] if target["target_id"].startswith("hmrc.cgt.") - } + ) + mapped = resource["registry_parity"]["mapped"] - assert cgt_metric_names == {spec.name for spec in UK_CGT_TARGET_SPECS} + assert UK_CGT_TARGET_SPECS == () + assert cgt_metric_names == [ + "hmrc/capital_gains_total", + "hmrc/cgt_taxpayers", + ] + assert mapped["hmrc/capital_gains_total"] == "hmrc.cgt.gains_total" + assert mapped["hmrc/cgt_taxpayers"] == "hmrc.cgt.taxpayers_total" def _target_by_id(resource: Mapping, target_id: str) -> Mapping: @@ -306,8 +375,10 @@ def _valid_dimension_values(value: object) -> bool: return False if _is_dimension_scalar(expected): continue - if isinstance(expected, list) and expected and all( - _is_dimension_scalar(item) for item in expected + if ( + isinstance(expected, list) + and expected + and all(_is_dimension_scalar(item) for item in expected) ): continue return False diff --git a/packages/microcosm-build/tests/test_uk_target_references.py b/packages/microcosm-build/tests/test_uk_target_references.py index 6a5ae5804..60e70fe81 100644 --- a/packages/microcosm-build/tests/test_uk_target_references.py +++ b/packages/microcosm-build/tests/test_uk_target_references.py @@ -13,13 +13,39 @@ import numpy as np import pandas as pd +import pytest from microcosm.build.country_spec import load_country_spec -from microcosm.build.ledger_targets import compile_ledger_target_references +from microcosm.build.ledger_targets import ( + LedgerTargetReference, + compile_ledger_target_references, +) +from microcosm.build.target_reference_authoring import ( + TargetReferenceAuthoringConfig, + author_target_references, +) from microcosm.calibrate.matrix import build_constraint_matrix from microcosm.frame import EntitySchema, Frame, WeightKind, Weights +from tools.generate_uk_target_references import ( + POLICYENGINE_BINDING_KEYS, + _annual_uc_award_band_token, + _geography_pins, + _value_operation_by_target_id, +) -ACTIVE_REFERENCE_COUNT = 15 +ACTIVE_REFERENCE_COUNT = 388 +UK_DATA_REPO = "policyengine-" + "uk-data" + +FIXTURE_REFERENCE_NAMES = { + "obr.income_tax", + "dwp.uc.two_child_limit.households_affected", + "ons.population.uk_total", + "hmrc/employment_income_income_band_12_570_to_15_000", + "slc.repayments.england_plan_2", + "obr.esa", + "hmrc.cgt.gains_total", + "hmrc.cgt.taxpayers_total", +} FIXTURE_FEED_ROWS = ( Path(__file__).parent / "fixtures" / "uk_target_reference_feed_rows.jsonl" @@ -42,6 +68,24 @@ def _expected_reference_entity(target: dict) -> str: return binding.get("from_entity") or binding.get("map_to") or "household" +def _uc_benefit_units_fact(period: str, *, value: float) -> dict: + normalized_period = period.replace("-", "_") + return { + "aggregate_fact_key": f"ledger.aggregate_fact.v2:uc-{normalized_period}", + "aggregation": {"method": "sum"}, + "assertion": "observation", + "geography": {"level": "country", "id": "K03000001"}, + "observed_measure": { + "source_name": "dwp", + "source_concept": "dwp.uc_benefit_units", + "source_measure_id": "total_units", + "unit": "count", + }, + "period": {"type": "month", "value": period}, + "value": value, + } + + def test_uk_target_references_load_as_typed_non_empty_resource() -> None: spec = load_country_spec("uk") @@ -55,7 +99,12 @@ def test_uk_target_references_follow_contract_derivation_rules() -> None: names = [reference["name"] for reference in resource["target_references"]] assert resource["country"] == "uk" - assert resource["allowed_value_operations"] == ["identity"] + assert resource["allowed_value_operations"] == [ + "identity", + "sum", + "calendar_year_average", + "latest_plateau", + ] assert len(names) == len(set(names)) for reference in resource["target_references"]: @@ -63,31 +112,193 @@ def test_uk_target_references_follow_contract_derivation_rules() -> None: target = targets_by_id[contract_target_id] binding = target["bindings"]["policyengine"] - assert reference["name"] == contract_target_id - assert reference["ledger_selector"] == { - **target["ledger_selector"], - "geography_level": "country", - } + for key, value in target["ledger_selector"].items(): + if key == "dimension_values": + assert value.items() <= reference["ledger_selector"][key].items() + continue + assert reference["ledger_selector"][key] == value + assert reference["ledger_selector"]["geography_level"] == "country" + assert reference["ledger_selector"]["geography_id"] assert reference["entity"] == _expected_reference_entity(target) - assert reference["measure"] == binding["metric_name"] - assert reference["family"] == target["family"] - expected_period = ( - 2025 - if contract_target_id - in { - "dwp.uc.households", - "obr.universal_credit_in_cap", - } - else 2023 + expected_measure = ( + binding["metric_name"] + if reference["name"] == contract_target_id + else reference["name"] ) - assert reference["period"] == expected_period + assert reference["measure"] == expected_measure + assert reference["family"] == target["family"] + assert reference["period"] == 2025 assert reference["metadata"] == { "contract_target_id": contract_target_id, "measure_kind": "prepared_column", } # The measure is a prepared column, so the pointed-to contract binding # must carry what the microcosm#622 materializer needs to prepare it. - assert binding.get("value_variable"), contract_target_id + assert ( + binding.get("value_variable") + or binding.get("value_expression") + or binding.get("kind") + ), contract_target_id + + +def test_uk_target_references_do_not_bind_known_mismatched_property_amounts() -> None: + resource = _load_uk_resource("target_references.json") + + assert not [ + reference["name"] + for reference in resource["target_references"] + if reference["metadata"]["contract_target_id"] + == "hmrc.spi.property_income.amount_by_total_income_band" + ] + + +def test_uk_target_references_do_not_emit_nan_uc_payment_bands() -> None: + resource = _load_uk_resource("target_references.json") + + assert not [ + reference["name"] + for reference in resource["target_references"] + if "uc_payment_dist" in reference["name"] and "nan_to_nan" in reference["name"] + ] + + +def test_uc_payment_fanout_excludes_source_only_unbounded_rows() -> None: + assert _annual_uc_award_band_token("No payment") == "" + assert _annual_uc_award_band_token("£1,500.01 or over") == "" + assert _annual_uc_award_band_token("£2,500.01 or over") == "" + + +def test_ons_age_total_targets_pin_exact_age_dimension_set() -> None: + references = { + reference["name"]: reference + for reference in _load_uk_resource("target_references.json")[ + "target_references" + ] + } + + assert references["ons.population.scotland_babies_under_1"][ + "ledger_selector" + ]["dimensions"] == ["age"] + assert references["ons.population.scotland_children_under_16"][ + "ledger_selector" + ]["dimensions"] == ["age"] + + +def test_uk_target_reference_membership_report_is_packaged() -> None: + membership = _load_uk_resource("target_reference_membership.json") + + assert membership["target_period"] == 2025 + assert membership["active_reference_count"] == ACTIVE_REFERENCE_COUNT + assert membership["status_counts"] == { + "active": 388, + "multi_fact": 1, + "no_fact_at_or_before_period": 27, + "signed_excluded": 1, + } + assert membership["genuine_sum_residue"] + assert membership["uprating_holds"] + assert membership["fanout_family_outcomes"] == [ + { + "family": "hmrc_spi", + "status": "active_with_signed_property_amount_exclusion", + "active_reference_count": 143, + "signed_rationale": ( + "SPI income-band targets fan out by strict total-income-band " + "dimension pins, except the HMRC property-income amount " + "surface. Those 13 rows are signed out because Ledger carries " + "the official SPI Table 3.7 net property-income amounts, " + "while the incumbent target applies the populace-side x1.9 " + "property-income undercount adjustment traced to " + f"{UK_DATA_REPO} PR #311 / issue #230 and HMRC Property Rental " + "Income Statistics." + ), + }, + { + "family": "dwp_universal_credit", + "status": "active_with_unmapped_vintage_residue_skipped", + "active_reference_count": 100, + "skipped_unmapped_fact_count": 12, + "signed_rationale": ( + "UC payment-distribution targets fan out over family_type and " + "monthly_award_amount_bands into incumbent-compatible " + "annual-payment rows. The four source-only 'No payment' facts " + "and eight overlapping source-only 'or over' facts are left " + "out; no active reference may use the legacy nan_to_nan band " + "name." + ), + }, + { + "family": "council_tax_stock", + "status": "active_declared_rows", + "active_reference_count": 9, + "signed_rationale": ( + "VOA council-tax stock bands are declared as nine explicit " + "target rows, including total, and each resolves with its " + "country-level geography and band pin." + ), + }, + ] + assert membership["signed_exclusion_rationales"] == [ + { + "family": "hmrc_spi", + "target_id": "hmrc.spi.property_income.amount_by_total_income_band", + "status": "signed_excluded", + "signed_rationale": ( + "Signed out pending a first-class value-scaling operation or " + "a Chronicle package for HMRC Property Rental Income " + "Statistics with declared reconciliation: the Ledger facts " + "are official HMRC SPI Table 3.7 net property-income amounts, " + "while the incumbent calibration target applies the " + "populace-side x1.9 property-income undercount adjustment. " + f"The x1.9 trace is {UK_DATA_REPO} PR #311 / issue " + f"{UK_DATA_REPO}#230: SPI covers only taxpayers with liability, " + "and HMRC Property Rental Income Statistics show GBP 46.68bn " + "versus SPI about GBP 24.5bn for 2020-21. Binding the raw SPI " + "facts would knowingly calibrate to 10/19 of the incumbent " + "surface." + ), + } + ] + assert membership["multi_fact_rationales"] == [ + { + "family": "ons_population", + "target_id": "ons.population.scotland_households_3plus_children", + "candidate_name": "ons/scotland_households_3plus_children", + "status": "adjudication_pending", + "signed_rationale": ( + "Remaining multi_fact is genuine: the selector reaches ONS " + "mid-year population age rows for Scotland across six eligible " + "periods, while the contract target is a household count with " + "three or more children. No Ledger household-composition fact " + "at or before 2025 is selected by the current contract, so " + "Microcosm must not adjudicate a replacement source here." + ), + } + ] + + +def test_uk_fixture_b_signed_differences_carry_ruled_rationales() -> None: + differences = { + row["name"]: row + for row in _load_uk_resource( + "ledger_compile_parity_incumbent_2025_signed_differences.json" + )["differences"] + } + + assert "2023-24 outturn" in differences["hmrc.cgt.gains_total"]["reason"] + assert "forecast/uprated value" in differences["hmrc.cgt.gains_total"]["reason"] + assert "single-age-90 share" in differences[ + "ons.population.female_85_89" + ]["reason"] + assert "single-age-90 share" in differences[ + "ons.population.male_85_89" + ]["reason"] + assert "ages 91+ unconstrained" in differences[ + "ons.population.female_90_plus" + ]["reason"] + assert "ages 91+ unconstrained" in differences[ + "ons.population.male_90_plus" + ]["reason"] def test_uk_target_references_compile_from_real_staged_feed_rows() -> None: @@ -95,49 +306,93 @@ def test_uk_target_references_compile_from_real_staged_feed_rows() -> None: references = [ reference for reference in spec.target_references - if reference.name - in {"isc.private_school_students", "ons.savings_interest_income"} + if reference.name in FIXTURE_REFERENCE_NAMES ] registry = compile_ledger_target_references( - _real_uk_consumer_fact_rows(), + [ + json.loads(line) + for line in FIXTURE_FEED_ROWS.read_text().splitlines() + if line.strip() + ], references, country="uk", ) targets = {target.name: target for target in registry.specs} - assert set(targets) == { - "isc.private_school_students", - "ons.savings_interest_income", - } + assert set(targets) == FIXTURE_REFERENCE_NAMES + + income_tax = targets["obr.income_tax"] + assert income_tax.value == pytest.approx(331_437_583_074.4429) + assert income_tax.period == 2025 + assert income_tax.metadata["ledger_assertion"] == "source_projection" + assert income_tax.metadata["ledger_assertion_policy"] == ("allow_source_projection") + + tcl_households = targets["dwp.uc.two_child_limit.households_affected"] + assert tcl_households.value == 469_780 + assert tcl_households.metadata["ledger_fact_period"] == "2025-04" - private_school_students = targets["isc.private_school_students"] - assert private_school_students.value == 554_243 - assert private_school_students.period == 2023 - assert private_school_students.entity == "person" - assert private_school_students.measure == "obr/private_school_students" - assert private_school_students.family == "isc" + population = targets["ons.population.uk_total"] + assert population.value == 69_281_437 + assert population.metadata["ledger_value_operation"] == "sum" + assert population.metadata["uprating_from_period"] == "2024" + + spi_band = targets["hmrc/employment_income_income_band_12_570_to_15_000"] + assert spi_band.value == 16_900_000_000 assert ( - private_school_students.metadata["contract_target_id"] - == "isc.private_school_students" + spi_band.metadata["contract_target_id"] + == "hmrc.spi.employment_income.amount_by_total_income_band" ) - assert ( - private_school_students.metadata["ledger_aggregate_fact_key"] - == "ledger.aggregate_fact.v2:a36696207826083b6dd7e878" + + slc_plan_2 = targets["slc.repayments.england_plan_2"] + assert slc_plan_2.value == pytest.approx(2_778_253_361.64) + assert slc_plan_2.metadata["ledger_member_fact_count"] == "2" + + assert targets["hmrc.cgt.gains_total"].value == 65_937_000_000 + assert targets["hmrc.cgt.taxpayers_total"].value == 378_000 + assert targets["hmrc.cgt.gains_total"].metadata["ledger_fact_period"] == "2023" + + +def test_uk_generator_assigns_calendar_average_to_uc_benefit_unit_targets() -> None: + contract = _load_uk_resource("uk_national_targets.json") + facts = [ + _uc_benefit_units_fact("2025-04", value=6_380_000.0), + *( + _uc_benefit_units_fact(f"2025-{month:02d}", value=6_600_000.0) + for month in range(5, 9) + ), + *( + _uc_benefit_units_fact(f"2025-{month:02d}", value=6_960_000.0) + for month in range(9, 12) + ), + _uc_benefit_units_fact("2025-12", value=7_170_000.0), + ] + authored = author_target_references( + contract, + facts, + TargetReferenceAuthoringConfig( + target_period=2025, + geography_pins=_geography_pins(contract), + value_operation_by_target_id=_value_operation_by_target_id(contract), + binding_vocabulary=POLICYENGINE_BINDING_KEYS, + source_fact_feed="synthetic-uc-benefit-units", + ), ) + references = {reference["name"]: reference for reference in authored.references} - savings_interest = targets["ons.savings_interest_income"] - assert savings_interest.value == 86_040_000_000 - assert savings_interest.period == 2023 - assert savings_interest.entity == "person" - assert savings_interest.measure == "ons/savings_interest_income" - assert savings_interest.family == "ons_national_accounts" - assert ( - savings_interest.metadata["contract_target_id"] == "ons.savings_interest_income" + uc_reference = references["dwp.uc.households"] + assert uc_reference["value_operation"] == "calendar_year_average" + assert authored.membership_report["targets"]["dwp.uc.households"]["status"] == ( + "active" ) - assert ( - savings_interest.metadata["ledger_aggregate_fact_key"] - == "ledger.aggregate_fact.v2:2d8306be080946696b35e1ee" + + registry = compile_ledger_target_references( + facts, + [LedgerTargetReference(**uc_reference)], + country="uk", + ) + assert registry.specs[0].value == pytest.approx( + (6_380_000.0 + 4 * 6_600_000.0 + 3 * 6_960_000.0 + 7_170_000.0) / 9 ) @@ -153,9 +408,11 @@ def test_uk_target_references_constrain_a_frame_with_prepared_columns() -> None: """ spec = load_country_spec("uk") - references = tuple( - reference for reference in spec.target_references if reference.period == 2023 - ) + references = [ + reference + for reference in spec.target_references + if reference.name in FIXTURE_REFERENCE_NAMES + ] feed_rows = [ json.loads(line) for line in FIXTURE_FEED_ROWS.read_text().splitlines() @@ -163,7 +420,7 @@ def test_uk_target_references_constrain_a_frame_with_prepared_columns() -> None: ] registry = compile_ledger_target_references(feed_rows, references, country="uk") - assert len(registry.specs) == 13 + assert len(registry.specs) == len(FIXTURE_REFERENCE_NAMES) n_households = 3 weights = np.array([10.0, 20.0, 30.0]) @@ -199,7 +456,7 @@ def test_uk_target_references_constrain_a_frame_with_prepared_columns() -> None: problem = build_constraint_matrix(frame, registry.to_target_set()) assert problem.skipped == () - assert len(problem.names) == 13 + assert len(problem.names) == len(FIXTURE_REFERENCE_NAMES) achieved = problem.matrix @ problem.initial_weights.values for name, estimate in zip(problem.names, achieved, strict=True): assert estimate == expected_aggregates[name], name diff --git a/packages/microcosm-build/tests/test_us_plan.py b/packages/microcosm-build/tests/test_us_plan.py index eae2d039c..d6157d8ca 100644 --- a/packages/microcosm-build/tests/test_us_plan.py +++ b/packages/microcosm-build/tests/test_us_plan.py @@ -989,6 +989,7 @@ def test_no_incumbent_data_package_references_in_live_tree(self) -> None: # = 609 mapped + 42 signed exclusions + 3 unmapped declarations. # A sha-locked historical reference — nothing imported or executed. "packages/microcosm-build/src/microcosm/build/uk/uk_national_targets.json", + "packages/microcosm-build/src/microcosm/build/uk/target_reference_membership.json", "packages/microcosm-build/src/microcosm/build/uk_runtime/parity_reference.py", # The HMRC source contract pins the licensed SPI/ODS input # identities, whose reviewed provenance names the archived data diff --git a/packages/microcosm-calibrate/src/microcosm/calibrate/matrix.py b/packages/microcosm-calibrate/src/microcosm/calibrate/matrix.py index 1d2b851fb..c67c71093 100644 --- a/packages/microcosm-calibrate/src/microcosm/calibrate/matrix.py +++ b/packages/microcosm-calibrate/src/microcosm/calibrate/matrix.py @@ -141,23 +141,103 @@ def _entity_row( The constraint row aligned to ``weight_entity``'s records. Raises: - ValueError: If the target's entity is neither the calibrated entity nor - a person entity nested under it (the only collapse supported here). + ValueError: If the target's entity is not nested under the calibrated + entity through the frame schema's declared person memberships. KeyError: If a measure/filter column is missing. """ if target.entity == weight_entity: return target.constraint_row(frame) - # Supported cross-entity case: target measured on persons, weights on a - # group the persons belong to. Build the per-person row, then collapse to - # one value per group by summation (members share the group weight). - person_row = target.constraint_row(frame) - positions = frame._group_positions(weight_entity) + row = target.constraint_row(frame) + positions = _nested_positions(target.entity, frame, weight_entity) collapsed = np.zeros(frame.n(weight_entity), dtype=np.float64) - np.add.at(collapsed, positions, person_row) + np.add.at(collapsed, positions, row) return collapsed +def _nested_positions( + entity: str, + frame: Frame, + weight_entity: str, +) -> np.ndarray: + """Position of each ``entity`` row within ``weight_entity``'s table. + + The frame schema declares group relationships as person membership columns. + A person-level target collapses directly through ``person__id``. + A group-level target collapses to another group only when every source + group id appears with exactly one destination group id in the person table. + """ + + schema = frame.schema + person_entity = schema.person_entity + if entity == person_entity: + if weight_entity not in schema.group_entities: + raise ValueError( + f"Cannot collapse target entity {entity!r} to non-group " + f"weight entity {weight_entity!r}." + ) + return frame._group_positions(weight_entity) + if ( + entity not in schema.group_entities + or weight_entity not in schema.group_entities + ): + raise ValueError( + f"Cannot collapse target entity {entity!r} to weight entity " + f"{weight_entity!r}; schema declares person entity " + f"{person_entity!r} and groups {list(schema.group_entities)}." + ) + + person = frame.person + source_column = schema.membership_column(entity) + weight_column = schema.membership_column(weight_entity) + source_to_weight: dict[object, object] = {} + split_source_ids: list[object] = [] + for source_id, destination_id in ( + person[[source_column, weight_column]] + .drop_duplicates() + .itertuples(index=False, name=None) + ): + existing = source_to_weight.get(source_id) + if existing is not None and existing != destination_id: + split_source_ids.append(source_id) + continue + source_to_weight[source_id] = destination_id + if split_source_ids: + raise ValueError( + f"Cannot collapse target entity {entity!r} to weight entity " + f"{weight_entity!r}: {entity} id(s) span multiple {weight_entity} " + f"ids, including {split_source_ids[:5]}." + ) + + source_ids = frame.table(entity)[schema.id_column(entity)].to_numpy() + missing = [ + source_id for source_id in source_ids if source_id not in source_to_weight + ] + if missing: + raise ValueError( + f"Cannot collapse target entity {entity!r} to weight entity " + f"{weight_entity!r}: {entity} id(s) have no person membership, " + f"including {missing[:5]}." + ) + destination_ids = np.asarray( + [source_to_weight[source_id] for source_id in source_ids] + ) + weight_ids = frame.table(weight_entity)[schema.id_column(weight_entity)].to_numpy() + order = np.argsort(weight_ids) + sorted_weight_ids = weight_ids[order] + sorted_positions = np.searchsorted(sorted_weight_ids, destination_ids) + valid = sorted_positions < len(sorted_weight_ids) + valid[valid] = sorted_weight_ids[sorted_positions[valid]] == destination_ids[valid] + if not bool(valid.all()): + bad = destination_ids[~valid][:5].tolist() + raise ValueError( + f"Cannot collapse target entity {entity!r} to weight entity " + f"{weight_entity!r}: mapped {weight_entity} id(s) are absent from " + f"the weight table, including {bad}." + ) + return order[sorted_positions] + + def build_constraint_matrix( frame: Frame, targets: TargetSet, diff --git a/packages/microcosm-calibrate/tests/test_matrix.py b/packages/microcosm-calibrate/tests/test_matrix.py index 9554ce51c..ef7ce4af3 100644 --- a/packages/microcosm-calibrate/tests/test_matrix.py +++ b/packages/microcosm-calibrate/tests/test_matrix.py @@ -3,8 +3,10 @@ from __future__ import annotations import numpy as np +import pandas as pd from microcosm.calibrate import Target, TargetSet, build_constraint_matrix +from microcosm.frame import EntitySchema, Frame, WeightKind, Weights def test_matrix_has_one_row_per_target_one_column_per_weight(feasible_frame) -> None: @@ -189,6 +191,105 @@ def test_person_sum_target_collapses_onto_multi_person_households( np.testing.assert_allclose(problem.estimates(weights)[0], true_total, rtol=1e-9) +def test_group_sum_target_collapses_onto_weighted_parent_group() -> None: + """A benunit-grain row compiles onto household weights on a real nested frame.""" + + weights = np.array([10.0, 20.0, 30.0]) + frame = Frame( + { + "person": pd.DataFrame( + { + "person_id": np.arange(6, dtype="int64"), + "person_benunit_id": [0, 0, 1, 2, 3, 3], + "person_household_id": [0, 0, 0, 1, 2, 2], + } + ), + "benunit": pd.DataFrame( + { + "benunit_id": np.arange(4, dtype="int64"), + "uc_receipt": [1.0, 0.0, 1.0, 1.0], + } + ), + "household": pd.DataFrame({"household_id": np.arange(3, dtype="int64")}), + }, + EntitySchema(group_entities=("benunit", "household")), + {"household": Weights(weights, WeightKind.DESIGN)}, + ) + targets = TargetSet( + ( + Target( + name="uc_benunits", + entity="benunit", + value=60.0, + measure="uc_receipt", + period=2025, + ), + ) + ) + + problem = build_constraint_matrix(frame, targets, "household") + + assert problem.skipped == () + np.testing.assert_allclose(problem.matrix.toarray()[0], [1.0, 1.0, 1.0]) + np.testing.assert_allclose(problem.estimates(weights), [60.0]) + + +def test_group_sum_target_collapses_with_unsorted_weight_entity_ids() -> None: + """Collapse uses id lookup, not sorted-position assumptions.""" + + weights = np.array([11.0, 3.0, 13.0]) + frame = Frame( + { + "person": pd.DataFrame( + { + "person_id": np.arange(3, dtype="int64"), + "person_benunit_id": [100, 101, 102], + "person_household_id": [10, 20, 30], + } + ), + "benunit": pd.DataFrame( + { + "benunit_id": [100, 101, 102], + "uc_receipt": [2.0, 5.0, 7.0], + } + ), + "household": pd.DataFrame({"household_id": [10, 20, 30]}), + }, + EntitySchema(group_entities=("benunit", "household")), + {"household": Weights(weights, WeightKind.DESIGN)}, + ) + frame.table("household").sort_values( + "household_id", + ascending=False, + inplace=True, + ignore_index=True, + ) + frame._weights["household"] = Weights( + np.array([13.0, 3.0, 11.0]), + WeightKind.DESIGN, + ) + targets = TargetSet( + ( + Target( + name="uc_benunits", + entity="benunit", + value=128.0, + measure="uc_receipt", + period=2025, + ), + ) + ) + + problem = build_constraint_matrix(frame, targets, "household") + + assert problem.skipped == () + np.testing.assert_allclose(problem.matrix.toarray()[0], [7.0, 5.0, 2.0]) + np.testing.assert_allclose( + problem.estimates(frame.resolve_weights("household").values), + [128.0], + ) + + def test_uncompilable_target_is_skipped_and_reported(feasible_frame) -> None: frame, truths = feasible_frame(n=100) targets = TargetSet( diff --git a/packages/microcosm-data/src/microcosm/data/contract.py b/packages/microcosm-data/src/microcosm/data/contract.py index fc0790570..eb91cc38a 100644 --- a/packages/microcosm-data/src/microcosm/data/contract.py +++ b/packages/microcosm-data/src/microcosm/data/contract.py @@ -344,13 +344,13 @@ # fingerprint derives from the manifest digest. Editing the spec moves all # three here in the same reviewed change. _UK_GATE_BATTERY_POLICY_SHA256 = ( - "728a5fe2f543f59e2797e4227269fe4516508a274b4fa5fe49559387d6b9d686" + "47d41dc3643818e049034b4333392aeb352bed5f76fc4556c1da5ba2fe8fb86d" ) _UK_GATE_BATTERY_GATES_MANIFEST_SHA256 = ( - "f01e5459debc6f3ebfa097591749377b640a5d633e3df3825575b4ec15eeacb2" + "687bb4ae4b085ac9abf2e77a7a0c8bcf11204eb9b00fdac1fd7232e16f81161f" ) _UK_GATE_BATTERY_SPEC_FINGERPRINT = ( - "f358121fefc6e0e2371956dc0628c1d997ee3735e558ca3dd4526326a6add78b" + "e54e2f5880f2380854d9764dcd5482aaa51e37ca0915a3ffaa0c9897626ba656" ) #: Spec entry id -> the legacy gate name whose observable detail checks #: apply unchanged (the battery re-keys the report by entry id; the gate @@ -383,6 +383,14 @@ "preflight", ), "uk_release_family_build_stages": ("source_coverage", "preflight"), + "uk_ledger_compile_parity_production_2023": ( + "ledger_compile_parity", + "preflight", + ), + "uk_ledger_compile_parity_incumbent_2025": ( + "ledger_compile_parity", + "preflight", + ), "uk_release_input_coverage": ("release_input_coverage", "terminal"), "uk_degenerate_release_surface": ("degenerate_release_surface", "terminal"), "uk_zero_weight_strata": ("zero_weight_strata", "terminal"), @@ -411,6 +419,8 @@ _UK_GATE_BATTERY_EVIDENCE_IDS = frozenset( { "uk_release_family_build_stages", + "uk_ledger_compile_parity_production_2023", + "uk_ledger_compile_parity_incumbent_2025", "uk_degenerate_release_surface", "uk_input_mass_parity", } diff --git a/packages/microcosm-data/tests/test_contract.py b/packages/microcosm-data/tests/test_contract.py index 6d5cc69cf..09068cea1 100644 --- a/packages/microcosm-data/tests/test_contract.py +++ b/packages/microcosm-data/tests/test_contract.py @@ -144,13 +144,13 @@ def _trusted_terminal_gate_signing_key(monkeypatch) -> None: UK_GATE_BATTERY_PRODUCER = "microcosm.build.gate_battery" UK_GATE_BATTERY_SIGNING_KEY_ENV = "MICROCOSM_UK_TERMINAL_GATE_SIGNING_KEY" UK_GATE_BATTERY_POLICY_SHA256 = ( - "728a5fe2f543f59e2797e4227269fe4516508a274b4fa5fe49559387d6b9d686" + "47d41dc3643818e049034b4333392aeb352bed5f76fc4556c1da5ba2fe8fb86d" ) UK_GATE_BATTERY_GATES_MANIFEST_SHA256 = ( - "f01e5459debc6f3ebfa097591749377b640a5d633e3df3825575b4ec15eeacb2" + "687bb4ae4b085ac9abf2e77a7a0c8bcf11204eb9b00fdac1fd7232e16f81161f" ) UK_GATE_BATTERY_SPEC_FINGERPRINT = ( - "f358121fefc6e0e2371956dc0628c1d997ee3735e558ca3dd4526326a6add78b" + "e54e2f5880f2380854d9764dcd5482aaa51e37ca0915a3ffaa0c9897626ba656" ) UK_GATE_BATTERY_DEGENERATE_EVIDENCE_SHA256 = ( "d0d024043132fa07c378c393dbe2b24fe99bf19e876bcc39997d2c80cc9bd4f6" @@ -166,6 +166,16 @@ def _trusted_terminal_gate_signing_key(monkeypatch) -> None: None, ), "uk_release_family_build_stages": ("source_coverage", "preflight", None), + "uk_ledger_compile_parity_production_2023": ( + "ledger_compile_parity", + "preflight", + None, + ), + "uk_ledger_compile_parity_incumbent_2025": ( + "ledger_compile_parity", + "preflight", + None, + ), "uk_release_input_coverage": ( "release_input_coverage", "terminal", @@ -1038,9 +1048,22 @@ def _gate_battery_payload( details: dict = {"check": "manifest_current"} elif entry_id == "uk_release_family_build_stages": details = {"stage_names": list(stage_names)} + elif entry_id == "uk_ledger_compile_parity_production_2023": + details = { + "fixture": "production_2023", + "expected_count": 149, + "actual_count": 149, + "signed_difference_count": 0, + } + elif entry_id == "uk_ledger_compile_parity_incumbent_2025": + details = { + "fixture": "incumbent_2025", + "expected_count": 636, + "actual_count": 636, + "signed_difference_count": 0, + } elif entry_id == "uk_calibration_reference_coverage": - # Mirrors _evaluate_calibration_reference_coverage's detail block. - details = {"activated": 15, "resolved": 15, "matrix": 15} + details = {"activated": 388, "resolved": 388, "matrix": 388} else: details = _terminal_gate_details(detail_name) gates[entry_id] = { @@ -1056,6 +1079,22 @@ def _gate_battery_payload( "uk_release_family_build_stages": _canonical_sha256( {"stage_names": list(stage_names)} ), + "uk_ledger_compile_parity_production_2023": _canonical_sha256( + { + "fixture_resource": "parity_fixture_production_2023.json", + "registry_count": 149, + "registry_version": "fixture", + "signed_differences": [], + } + ), + "uk_ledger_compile_parity_incumbent_2025": _canonical_sha256( + { + "fixture_resource": "registry_parity_fixture_2025.json", + "registry_count": 636, + "registry_version": "fixture", + "signed_differences": [], + } + ), "uk_degenerate_release_surface": UK_GATE_BATTERY_DEGENERATE_EVIDENCE_SHA256, "uk_input_mass_parity": UK_GATE_BATTERY_INPUT_MASS_EVIDENCE_SHA256, } diff --git a/tools/build_uk_ledger_compile_parity_signed_differences.py b/tools/build_uk_ledger_compile_parity_signed_differences.py new file mode 100644 index 000000000..2126728b8 --- /dev/null +++ b/tools/build_uk_ledger_compile_parity_signed_differences.py @@ -0,0 +1,179 @@ +"""Regenerate UK Ledger compile-parity signed-difference resources.""" + +from __future__ import annotations + +import argparse +import json +from dataclasses import dataclass +from importlib import resources as importlib_resources +from pathlib import Path + +from microcosm.build.gates import ledger_compile_parity_signed_differences +from microcosm.build.uk_runtime.ledger_targets import compile_uk_target_registry + +UK_PACKAGE = "microcosm.build.uk" +UK_PACKAGE_DIR = ( + Path(__file__).resolve().parents[1] + / "packages" + / "microcosm-build" + / "src" + / "microcosm" + / "build" + / "uk" +) + + +@dataclass(frozen=True) +class ParityReceiptSpec: + fixture_resource: str + output_resource: str + target_period: int + + +RECEIPTS = ( + ParityReceiptSpec( + fixture_resource="parity_fixture_production_2023.json", + output_resource="ledger_compile_parity_production_2023_signed_differences.json", + target_period=2023, + ), + ParityReceiptSpec( + fixture_resource="registry_parity_fixture_2025.json", + output_resource="ledger_compile_parity_incumbent_2025_signed_differences.json", + target_period=2025, + ), +) + +_CGT_GAINS_TOTAL_RATIONALE = ( + "Ledger carries the HMRC 2023-24 outturn value GBP 65,937,000,000 and " + "holds it by identity under the current doctrine; the incumbent Fixture B " + "row is GBP 67,727,478,991.60 at 2025 because it carries a forecast/uprated " + "value. Signed as a doctrine consequence, not a binding error." +) + +_ONS_TERMINAL_BAND_RATIONALES = { + "ons.population.female_85_89": ( + "María ruling 2026-08-21: incumbent ons/female_85_90 maps to the " + "uniform female 85_89 declaration. The value gap is the single-age-90 " + "share; ages 90+ are constrained separately." + ), + "ons.population.male_85_89": ( + "María ruling 2026-08-21: incumbent ons/male_85_90 maps to the " + "uniform male 85_89 declaration. The value gap is the single-age-90 " + "share; ages 90+ are constrained separately." + ), + "ons.population.female_90_plus": ( + "María ruling 2026-08-21: new female 90_plus tail constrains ages 90+; " + "the incumbent six-year terminal band left ages 91+ unconstrained." + ), + "ons.population.male_90_plus": ( + "María ruling 2026-08-21: new male 90_plus tail constrains ages 90+; " + "the incumbent six-year terminal band left ages 91+ unconstrained." + ), +} + + +def _parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser() + parser.add_argument( + "--ledger-facts", + type=Path, + required=True, + help="Chronicle consumer JSONL artifact used to compile UK references.", + ) + parser.add_argument( + "--output-dir", + type=Path, + default=UK_PACKAGE_DIR, + help="Directory receiving the signed-difference JSON resources.", + ) + return parser.parse_args() + + +def _load_jsonl(path: Path) -> list[dict]: + return [ + json.loads(line) + for line in path.read_text(encoding="utf-8").splitlines() + if line.strip() + ] + + +def _load_fixture(resource: str) -> dict: + return json.loads(importlib_resources.files(UK_PACKAGE).joinpath(resource).read_text()) + + +def _aligned_fixture(fixture: dict) -> dict: + """Apply current contract-row names to retired-fixture rows before comparison.""" + + rows = [] + for row in fixture.get("rows", ()): + if not isinstance(row, dict): + rows.append(row) + continue + updated = dict(row) + if updated.get("name") == "ons/female_85_90": + updated["contract_target_id"] = "ons.population.female_85_89" + updated["measure"] = "ons.population.female_85_89" + elif updated.get("name") == "ons/male_85_90": + updated["contract_target_id"] = "ons.population.male_85_89" + updated["measure"] = "ons.population.male_85_89" + rows.append(updated) + aligned = dict(fixture) + aligned["rows"] = rows + return aligned + + +def _add_signed_rationale_notes( + report: dict[str, object], + *, + fixture_resource: str, +) -> None: + if fixture_resource != "registry_parity_fixture_2025.json": + return + for row in report.get("differences", ()): + if not isinstance(row, dict): + continue + name = str(row.get("name", "")) + if name == "hmrc.cgt.gains_total": + row["reason"] = _CGT_GAINS_TOTAL_RATIONALE + elif name in _ONS_TERMINAL_BAND_RATIONALES: + row["reason"] = _ONS_TERMINAL_BAND_RATIONALES[name] + + +def main() -> None: + args = _parse_args() + facts = _load_jsonl(args.ledger_facts) + args.output_dir.mkdir(parents=True, exist_ok=True) + for spec in RECEIPTS: + compilation = compile_uk_target_registry( + facts, + target_period=spec.target_period, + ) + report = ledger_compile_parity_signed_differences( + compilation.registry, + _aligned_fixture(_load_fixture(spec.fixture_resource)), + unsupported=compilation.unsupported, + ) + _add_signed_rationale_notes(report, fixture_resource=spec.fixture_resource) + output_path = args.output_dir / spec.output_resource + output_path.write_text( + json.dumps(report, indent=1, ensure_ascii=False) + "\n", + encoding="utf-8", + ) + print( + json.dumps( + { + "compiled_count": report["compiled_count"], + "counts_by_kind": report["counts_by_kind"], + "difference_count": report["difference_count"], + "fixture": spec.fixture_resource, + "fixture_count": report["fixture_count"], + "output": spec.output_resource, + "target_period": spec.target_period, + }, + sort_keys=True, + ) + ) + + +if __name__ == "__main__": + main() diff --git a/tools/build_uk_national_dataset.py b/tools/build_uk_national_dataset.py index f8ecee0b6..ffd679288 100644 --- a/tools/build_uk_national_dataset.py +++ b/tools/build_uk_national_dataset.py @@ -15,7 +15,10 @@ from microcosm.build.country_spec import country_stage_plan, load_country_spec from microcosm.build.gate_battery import GateBatteryBlockedError -from microcosm.build.ledger_artifact import load_ledger_consumer_artifact +from microcosm.build.ledger_artifact import ( + add_ledger_artifact_args, + resolve_ledger_artifact, +) from microcosm.build.logbook import canonical_json_bytes from microcosm.build.logbook_adoption import ( AttemptState, @@ -43,6 +46,7 @@ UKHMRCIncomeStageTransform, verify_certified_uk_candidate, ) +from microcosm.build.uk_runtime.ledger_targets import compile_uk_target_registry from microcosm.build.uk_runtime.national_build import build_uk_national_dataset from microcosm.build.uk_runtime.national_calibration import ( UKNationalCalibrationStage, @@ -145,11 +149,6 @@ def _parse_args(argv: list[str] | None = None) -> argparse.Namespace: "that will ship with this release." ), ) - parser.add_argument( - "--ledger-facts", - type=Path, - help="Pinned Chronicle consumer artifact used to resolve UK targets.", - ) parser.add_argument( "--national-calibration-diagnostics-json", type=Path, @@ -322,6 +321,7 @@ def _parse_args(argv: list[str] | None = None) -> argparse.Namespace: "POPULACE_LOGBOOK_PREV_ROW_DIGEST is used, then genesis null." ), ) + add_ledger_artifact_args(parser) args = parser.parse_args(argv) if args.release_candidate and args.sample_fraction != 1.0: parser.error( @@ -415,9 +415,9 @@ def _source_pins( retained_leaves_transform: UKFRSHMRCRetainedLeavesStageTransform, hmrc_transform: UKHMRCIncomeStageTransform, cgt_ods_path: Path, + ledger_artifact: object | None = None, ) -> dict[str, dict[str, object]]: - # ``ledger_facts`` joins this pin surface when #622/#623 land. - return { + pins = { "certified_candidate": { "sha256": str(candidate.sha256), "size_bytes": int(candidate.size_bytes), @@ -428,6 +428,9 @@ def _source_pins( "hmrc_ods": _artifact_pin(hmrc_transform.hmrc_ods_path), "cgt_ods": _artifact_pin(cgt_ods_path), } + if ledger_artifact is not None: + pins["ledger_facts"] = dict(ledger_artifact.provenance()) + return pins def _gate_verdicts_from_report( @@ -771,6 +774,17 @@ def _main_recording( args.degenerate_exclusions, resource=UK_DEGENERATE_EXCLUSION_REGISTER_RESOURCE, ) + ledger_artifact = resolve_ledger_artifact(args) + ledger_compilations = ( + None + if ledger_artifact is None + else { + period: compile_uk_target_registry( + ledger_artifact.facts, target_period=period + ) + for period in (2023, 2025) + } + ) candidate = verify_certified_uk_candidate(args.input_h5) evidence_path.unlink(missing_ok=True) replay_path.unlink(missing_ok=True) @@ -800,6 +814,7 @@ def _main_recording( retained_leaves_transform=retained_leaves_transform, hmrc_transform=hmrc_transform, cgt_ods_path=args.cgt_ods, + ledger_artifact=ledger_artifact, ) run_config = _staging_run_config( args, @@ -848,7 +863,7 @@ def _main_recording( calibration_transform = None calibration_stages: tuple[PlanStage, ...] = () if args.ledger_facts is not None: - ledger_artifact = load_ledger_consumer_artifact(args.ledger_facts) + assert ledger_artifact is not None # resolved and pin-checked above calibration_transform = UKNationalCalibrationStage(ledger_artifact.facts) calibration_stages = ( PlanStage( @@ -886,6 +901,14 @@ def _main_recording( sample_fraction=args.sample_fraction, sample_seed=args.sample_seed, release_candidate=args.release_candidate, + ledger_target_registry=( + None + if ledger_compilations is None + else { + period: compilation.registry + for period, compilation in ledger_compilations.items() + } + ), ) if calibration_transform is not None: _write_json( @@ -932,6 +955,9 @@ def _main_recording( sample_fraction=args.sample_fraction, sample_seed=args.sample_seed, degenerate_exclusions_override=args.degenerate_exclusions is not None, + ledger_artifact_provenance=( + None if ledger_artifact is None else ledger_artifact.provenance() + ), ) _write_json(build_record_path, build_record) append_phase(state, "build_record_written") @@ -1072,6 +1098,7 @@ def _aggregate_build_record( sample_fraction: float = 1.0, sample_seed: int = UK_SAMPLE_SEED_DEFAULT, degenerate_exclusions_override: bool = False, + ledger_artifact_provenance: dict[str, object] | None = None, ) -> dict[str, object]: """Return commit-safe aggregate evidence for one successful staging build.""" @@ -1084,6 +1111,8 @@ def _aggregate_build_record( for role, info in artifacts.items() } safe_artifacts["staging_h5"]["retention"] = "local_untracked" + if ledger_artifact_provenance is not None: + safe_artifacts["ledger_facts"] = ledger_artifact_provenance retained_sources = dict(retained_evidence.get("sources", {})) family_sources = dict(family_evidence.get("sources", {})) mass_changes = [ @@ -1101,6 +1130,9 @@ def _aggregate_build_record( for record in result.frame.mass_log ] release_evidence = dict(result.gate_report["release_evidence"]) + source_vintages = dict(family_evidence.get("source_vintages", {})) + if ledger_artifact_provenance is not None: + source_vintages["ledger_facts"] = ledger_artifact_provenance return { "schema_version": 3, "build_kind": "uk_national_staging_dataset", @@ -1148,7 +1180,7 @@ def _aggregate_build_record( dict(family_sources.get("spi_donor", {})).get("rows_used", 0) ), }, - "source_vintages": dict(family_evidence.get("source_vintages", {})), + "source_vintages": source_vintages, "terminal_gates": dict(result.gate_report), "input_coverage": { "passed": bool(result.input_coverage.passed), diff --git a/tools/extract_uk_registry_fixture.py b/tools/extract_uk_registry_fixture.py new file mode 100644 index 000000000..682a6f16b --- /dev/null +++ b/tools/extract_uk_registry_fixture.py @@ -0,0 +1,118 @@ +"""One-time Fixture B extraction: incumbent registry surface at calibration year 2025. + +Runs inside the retired UK data-package checkout pinned at 12a1e028, with network +(several source modules fetch at get_targets() time). Mirrors the level-union + +name-dedup of build_loss_matrix.create_target_matrix (:93-103) and resolves each +target through the incumbent's own _resolve_value, at both 2025 (the calibration +year, #723) and 2026 (the TCL cross-check year). No simulation, no microdata -- +target values are published aggregate statistics only. + +Output: registry_fixture_2025_extraction.json next to this script. +""" + +from __future__ import annotations + +import json +import logging +import sys +from datetime import UTC, datetime +from importlib import import_module +from pathlib import Path + +logging.basicConfig(level=logging.WARNING) + +_DATA_PACKAGE = "policyengine_" + "uk_data" +_resolve_value = import_module( + f"{_DATA_PACKAGE}.targets.build_loss_matrix" +)._resolve_value +get_all_targets = import_module(f"{_DATA_PACKAGE}.targets.registry").get_all_targets +GeographicLevel = import_module(f"{_DATA_PACKAGE}.targets.schema").GeographicLevel + +OUT = Path(__file__).resolve().parent / "registry_fixture_2025_extraction.json" + + +def union_targets(): + """The exact surface create_target_matrix assembles (level union, name-dedup).""" + all_targets = [] + seen = set() + for level in ( + GeographicLevel.NATIONAL, + GeographicLevel.REGION, + GeographicLevel.COUNTRY, + ): + for t in get_all_targets(geographic_level=level): + if t.name not in seen: + seen.add(t.name) + all_targets.append(t) + return all_targets + + +def resolution(target, year): + value = _resolve_value(target, year) + if value is None: + return {"value": None, "resolved_from_year": None} + available = sorted(target.values.keys()) + closest = ( + min(available, key=lambda y: abs(y - year)) + if year not in target.values + else year + ) + return {"value": float(value), "resolved_from_year": int(closest)} + + +def main(): + targets = union_targets() + rows = [] + for t in targets: + rows.append( + { + "name": t.name, + "variable": t.variable, + "source": t.source, + "unit": t.unit.value, + "geographic_level": t.geographic_level.value, + "geo_code": t.geo_code, + "geo_name": t.geo_name, + "is_count": t.is_count, + "breakdown_variable": t.breakdown_variable, + "reference_url": t.reference_url, + "forecast_vintage": t.forecast_vintage, + "values_years": sorted(int(y) for y in t.values), + "at_2025": resolution(t, 2025), + "at_2026": resolution(t, 2026), + } + ) + + by_source = {} + for r in rows: + by_source[r["source"]] = by_source.get(r["source"], 0) + 1 + payload = { + "provenance": { + "source_repository": "retired UK data package", + "pinned_ref": "12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3", + "extraction_utc": datetime.now(UTC).isoformat(), + "method": ( + "level-union name-dedup per build_loss_matrix.create_target_matrix:93-103; " + "values via build_loss_matrix._resolve_value at years 2025 and 2026; " + "network-dependent get_targets() sources fetched live at extraction time" + ), + "python": sys.version.split()[0], + }, + "surface": { + "union_rows": len(rows), + "resolved_at_2025": sum( + 1 for r in rows if r["at_2025"]["value"] is not None + ), + "resolved_at_2026": sum( + 1 for r in rows if r["at_2026"]["value"] is not None + ), + "by_source": dict(sorted(by_source.items())), + }, + "rows": rows, + } + OUT.write_text(json.dumps(payload, indent=1, sort_keys=False)) + print(json.dumps(payload["surface"], indent=2)) + + +if __name__ == "__main__": + main() diff --git a/tools/generate_uk_target_references.py b/tools/generate_uk_target_references.py new file mode 100644 index 000000000..af4da6505 --- /dev/null +++ b/tools/generate_uk_target_references.py @@ -0,0 +1,402 @@ +#!/usr/bin/env python +"""Generate UK Ledger target references from the national contract. + +This is an offline authoring tool. It consumes an already-exported Ledger +consumer fact JSONL feed; it does not fetch data or contact Chronicle. +""" + +from __future__ import annotations + +import argparse +import json +import re +from collections import Counter +from collections.abc import Mapping +from pathlib import Path +from typing import Any + +from microcosm.build.target_reference_authoring import ( + TargetReferenceAuthoringConfig, + author_target_references, + target_references_resource, +) + +UK_GEOGRAPHY_IDS = { + "uk": "K02000001", + "great_britain": "K03000001", + "england": "E92000001", + "scotland": "S92000003", + "wales": "W92000004", + "northern_ireland": "N92000002", +} + +POLICYENGINE_BINDING_KEYS = frozenset( + { + "affected_flag_variable", + "band", + "band_period_factor", + "count_of", + "filters", + "folded_into", + "from_entity", + "gate_comparison", + "gate_parameter", + "gated_variable", + "groupby_variable", + "household_conditions", + "kind", + "map_to", + "metric_name", + "notes", + "output_delta", + "output_variable", + "reduce", + "source_lines", + "threshold_price_base_year", + "value_expression", + "value_variable", + "zeroed_input", + } +) + +_UK_DATA_REPO = "policyengine-" + "uk-data" + +PROPERTY_INCOME_SIGNED_EXCLUSION_RATIONALE = ( + "Signed out pending a first-class value-scaling operation or a Chronicle " + "package for HMRC Property Rental Income Statistics with declared " + "reconciliation: the Ledger facts are official HMRC SPI Table 3.7 net " + "property-income amounts, while the incumbent calibration target applies " + "the populace-side x1.9 property-income undercount adjustment. The x1.9 " + f"trace is {_UK_DATA_REPO} PR #311 / issue {_UK_DATA_REPO}#230: " + "SPI covers only taxpayers with liability, and HMRC Property Rental Income " + "Statistics show GBP 46.68bn versus SPI about GBP 24.5bn for 2020-21. " + "Binding the raw SPI facts would knowingly calibrate to 10/19 of the " + "incumbent surface." +) + + +DESCRIPTION = ( + "UK active-subset Ledger target references for the FRS 2024-25 line. " + "Rows are generated from uk_national_targets.json: name is the contract " + "target_id or an incumbent-compatible fan-out row name; ledger_selector " + "is the contract selector plus geography pins; entity is from_entity, " + "then map_to, then household; measure is the prepared-column metric name " + "or fan-out row name; family is the contract family; period is 2025 " + "(opening-year convention for the FRS 2024-25 survey line). Observed " + "values stay in Ledger facts and resolve by identity unless the reference " + "declares value_operation=sum for a genuine multi-fact residue. Deferred " + "classes and geography-pin decisions are recorded in " + "uk/target_reference_membership.json. metadata.measure_kind records that " + "measures are prepared columns produced from the contract binding payload " + "referenced by metadata.contract_target_id." +) + + +def main() -> None: + args = _parser().parse_args() + contract = json.loads(args.contract.read_text()) + facts = [ + json.loads(line) + for line in args.ledger_facts.read_text().splitlines() + if line.strip() + ] + inverse_mapping = _registry_inverse(contract) + config = TargetReferenceAuthoringConfig( + target_period=args.period, + geography_pins=_geography_pins(contract), + fanout_name=lambda target, fact: _fanout_name( + target, + fact, + inverse_mapping, + ), + sum_target_ids=_sum_target_ids(contract), + value_operation_by_target_id=_value_operation_by_target_id(contract), + selector_pins_by_target_id=_selector_pins(contract), + signed_exclusions_by_target_id=_signed_exclusions(contract), + binding_vocabulary=POLICYENGINE_BINDING_KEYS, + source_fact_feed=str(args.ledger_facts), + ) + authored = author_target_references(contract, facts, config) + _add_uk_membership_accounting(authored.membership_report, authored.references) + resource = target_references_resource( + country="uk", + description=DESCRIPTION, + authored=authored, + ) + args.output.write_text(json.dumps(resource, indent=2) + "\n") + args.membership_report.write_text( + json.dumps(authored.membership_report, indent=2) + "\n" + ) + print(json.dumps(authored.membership_report["status_counts"], sort_keys=True)) + print( + f"active_reference_count={authored.membership_report['active_reference_count']}" + ) + + +def _parser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser() + parser.add_argument("--contract", type=Path, required=True) + parser.add_argument("--ledger-facts", type=Path, required=True) + parser.add_argument("--period", type=int, default=2025) + parser.add_argument("--output", type=Path, required=True) + parser.add_argument("--membership-report", type=Path, required=True) + return parser + + +def _registry_inverse(contract: Mapping[str, Any]) -> dict[str, list[str]]: + inverse: dict[str, list[str]] = {} + for ancestor, target_id in contract["registry_parity"]["mapped"].items(): + inverse.setdefault(str(target_id), []).append(str(ancestor)) + return {key: sorted(value) for key, value in inverse.items()} + + +def _geography_pins(contract: Mapping[str, Any]) -> dict[str, dict[str, str]]: + return { + str(target["target_id"]): { + "geography_level": "country", + "geography_id": _geography_id_for_target(target), + } + for target in contract.get("targets", ()) + } + + +def _geography_id_for_target(target: Mapping[str, Any]) -> str: + target_id = str(target["target_id"]).lower() + selector = target.get("ledger_selector") or {} + concept = str(selector.get("source_concept", "")).lower() + measure = str(selector.get("source_measure_id", "")).lower() + haystack = " ".join((target_id, concept, measure)) + if "northern" in haystack or "domestic_rates" in haystack: + return UK_GEOGRAPHY_IDS["northern_ireland"] + if "scotland" in haystack: + return UK_GEOGRAPHY_IDS["scotland"] + if "wales" in haystack: + return UK_GEOGRAPHY_IDS["wales"] + if "england" in haystack or target_id.startswith("voa."): + return UK_GEOGRAPHY_IDS["england"] + if target_id.startswith("dwp.") or target_id.startswith("slc."): + return UK_GEOGRAPHY_IDS["great_britain"] + return UK_GEOGRAPHY_IDS["uk"] + + +def _sum_target_ids(contract: Mapping[str, Any]) -> frozenset[str]: + target_ids: set[str] = set() + for target in contract.get("targets", ()): + selector = target["ledger_selector"] + binding = target["bindings"]["policyengine"] + if "value_expression" in binding: + target_ids.add(str(target["target_id"])) + if any(isinstance(value, list) for value in selector.values()): + target_ids.add(str(target["target_id"])) + dimension_values = selector.get("dimension_values") + if isinstance(dimension_values, Mapping) and any( + isinstance(value, list) for value in dimension_values.values() + ): + target_ids.add(str(target["target_id"])) + return frozenset(target_ids) + + +def _value_operation_by_target_id(contract: Mapping[str, Any]) -> dict[str, str]: + operations = {target_id: "sum" for target_id in _sum_target_ids(contract)} + for target in contract.get("targets", ()): + selector = target["ledger_selector"] + target_id = str(target["target_id"]) + if selector.get("source_concept") == "dwp.uc_benefit_units": + operations[target_id] = "calendar_year_average" + return operations + + +def _selector_pins(contract: Mapping[str, Any]) -> dict[str, dict[str, Any]]: + pins: dict[str, dict[str, Any]] = {} + for target in contract.get("targets", ()): + selector = target["ledger_selector"] + dimension_values = selector.get("dimension_values") + if ( + selector.get("source_concept") == "ons.mid_year_population_estimate" + and isinstance(dimension_values, Mapping) + ): + pins[str(target["target_id"])] = { + "dimensions": sorted(str(key) for key in dimension_values) + } + return pins + + +def _signed_exclusions(contract: Mapping[str, Any]) -> dict[str, str]: + target_ids = { + str(target["target_id"]) + for target in contract.get("targets", ()) + } + target_id = "hmrc.spi.property_income.amount_by_total_income_band" + if target_id not in target_ids: + return {} + return {target_id: PROPERTY_INCOME_SIGNED_EXCLUSION_RATIONALE} + + +def _fanout_name( + target: Mapping[str, Any], + fact: Mapping[str, Any], + inverse_mapping: Mapping[str, list[str]], +) -> str | None: + target_id = str(target["target_id"]) + value_id = str(fact.get("layout", {}).get("groupby_value_id") or "") + preferred_tokens, fallback_tokens = _dimension_tokens(fact) + candidates = inverse_mapping.get(target_id, ()) + for candidate in candidates: + if value_id and value_id not in _GEOGRAPHY_VALUE_IDS and value_id in candidate: + return candidate + if any(token in candidate for token in preferred_tokens): + return candidate + for candidate in candidates: + if any(token in candidate for token in fallback_tokens): + return candidate + if len(candidates) == 1: + return None + if candidates: + return None + safe_value = value_id.replace("/", "_") or "detail" + return f"{target_id}.{safe_value}" + + +def _dimension_tokens(fact: Mapping[str, Any]) -> tuple[list[str], list[str]]: + preferred: list[str] = [] + fallback: list[str] = [] + dimensions = fact.get("dimensions") or {} + if not isinstance(dimensions, Mapping): + return preferred, fallback + for value in dimensions.values(): + if isinstance(value, int): + token = _int_token(value) + preferred.append(f"income_band_{token}_to") + fallback.append(f"_{token}") + elif isinstance(value, str) and value.isdigit(): + token = _int_token(int(value)) + preferred.append(f"income_band_{token}_to") + fallback.append(f"_{token}") + elif isinstance(value, str): + annual_band = _annual_uc_award_band_token(value) + if annual_band: + preferred.append(annual_band) + fallback.append(annual_band.removeprefix("annual_payment_")) + return preferred, fallback + + +def _int_token(value: int) -> str: + return f"{value:,}".replace(",", "_") + + +def _annual_uc_award_band_token(value: str) -> str: + normalized = value.strip().lower() + if normalized == "no payment" or "or over" in normalized: + return "" + if " to " not in normalized: + return "" + numbers = [ + float(number.replace(",", "")) + for number in re.findall(r"[0-9][0-9,]*(?:\.[0-9]+)?", value) + ] + if len(numbers) != 2: + return "" + lower = int((numbers[0] // 100) * 100 * 12) + upper = int(numbers[1] * 12) + return f"annual_payment_{_int_token(lower)}_to_{_int_token(upper)}" + + +def _add_uk_membership_accounting( + report: dict[str, Any], + references: tuple[dict[str, Any], ...], +) -> None: + fanout_counts = Counter( + reference["family"] + for reference in references + if reference["name"] != reference["metadata"]["contract_target_id"] + ) + council_tax_count = sum( + 1 + for reference in references + if reference["metadata"]["contract_target_id"].startswith( + "voa.council_tax_stock." + ) + ) + report["fanout_family_outcomes"] = [ + { + "family": "hmrc_spi", + "status": "active_with_signed_property_amount_exclusion", + "active_reference_count": fanout_counts.get("hmrc_spi", 0), + "signed_rationale": ( + "SPI income-band targets fan out by strict total-income-band " + "dimension pins, except the HMRC property-income amount " + "surface. Those 13 rows are signed out because Ledger carries " + "the official SPI Table 3.7 net property-income amounts, " + "while the incumbent target applies the populace-side x1.9 " + "property-income undercount adjustment traced to " + f"{_UK_DATA_REPO} PR #311 / issue #230 and HMRC " + "Property Rental Income Statistics." + ), + }, + { + "family": "dwp_universal_credit", + "status": "active_with_unmapped_vintage_residue_skipped", + "active_reference_count": fanout_counts.get("dwp_universal_credit", 0), + "skipped_unmapped_fact_count": 12, + "signed_rationale": ( + "UC payment-distribution targets fan out over family_type and " + "monthly_award_amount_bands into incumbent-compatible " + "annual-payment rows. The four source-only 'No payment' facts " + "and eight overlapping source-only 'or over' facts are left " + "out; no active reference may use the legacy nan_to_nan band " + "name." + ), + }, + { + "family": "council_tax_stock", + "status": "active_declared_rows", + "active_reference_count": council_tax_count, + "signed_rationale": ( + "VOA council-tax stock bands are declared as nine explicit " + "target rows, including total, and each resolves with its " + "country-level geography and band pin." + ), + }, + ] + report["signed_exclusion_rationales"] = [ + { + "family": "hmrc_spi", + "target_id": "hmrc.spi.property_income.amount_by_total_income_band", + "status": "signed_excluded", + "signed_rationale": report["targets"][ + "hmrc.spi.property_income.amount_by_total_income_band" + ]["candidates"][0]["signed_rationale"], + } + ] + report["multi_fact_rationales"] = [ + { + "family": "ons_population", + "target_id": "ons.population.scotland_households_3plus_children", + "candidate_name": "ons/scotland_households_3plus_children", + "status": "adjudication_pending", + "signed_rationale": ( + "Remaining multi_fact is genuine: the selector reaches ONS " + "mid-year population age rows for Scotland across six eligible " + "periods, while the contract target is a household count with " + "three or more children. No Ledger household-composition fact " + "at or before 2025 is selected by the current contract, so " + "Microcosm must not adjudicate a replacement source here." + ), + } + ] + + +_GEOGRAPHY_VALUE_IDS = frozenset( + { + "england", + "great_britain", + "northern_ireland", + "scotland", + "uk", + "wales", + } +) + + +if __name__ == "__main__": + main()