From 02af2d3c073e01f89eeeb27c9324fd3630ab320b Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Thu, 15 Oct 2026 23:19:50 -0400 Subject: [PATCH 1/9] Vendor scorecard#183's base-side grid record and apply known gaps scorecard#183 merged as 71cad306: every replay receipt now carries the base's own grid record (diff.base_events) and the candidate's missing and unsupported measure-years. The vendored schema and the mirrors are closed, so until now every such receipt was refused. They now match 71cad306, including its tightened measure-year lists (a non-empty measure_key and unique items; supported years were already unique in the schema but not in the mirror). The replay gate applies the decision record's exact test: a candidate measure-year that is inert, or missing and supported, is a known gap only if the base's record for that event lists the same measure and year as inert, or missing and supported. Known gaps are recorded with the base's staging manifest digest. An incomplete event fails unless every gap in it is known, and also fails when its receipt does not list its missing measure-years or lists none. A complete event that lists a gap contradicts itself. A known gap never excuses a GBP 0 total against a material base value, which the base's inert record could not hold. The policy text states the rule; its digest changes accordingly. Eight mutants are killed, among them ignoring the base's unsupported list, matching another event's record, ignoring the year, and letting a known gap excuse a material base value. Co-Authored-By: Claude Opus 5.5 --- changelog.d/636.added.md | 1 + .../data/qualification/replay_policy.md | 28 +- .../vendor/policyengine-scorecard/README.md | 6 +- .../replay_receipt.v1.json | 87 +++++- src/policyengine/provenance/qualification.py | 173 +++++++++- tests/test_qualification_contracts.py | 295 +++++++++++++++++- 6 files changed, 547 insertions(+), 43 deletions(-) create mode 100644 changelog.d/636.added.md diff --git a/changelog.d/636.added.md b/changelog.d/636.added.md new file mode 100644 index 000000000..dd541c118 --- /dev/null +++ b/changelog.d/636.added.md @@ -0,0 +1 @@ +Qualification reads policyengine-scorecard#183's receipts. The vendored replay receipt schema and its mirrors now carry the base's own grid record (`diff.base_events`) and the candidate's missing and unsupported measure-years. A gap counts as known only when the base's record lists the same measure-year as inert, or missing and supported. diff --git a/src/policyengine/data/qualification/replay_policy.md b/src/policyengine/data/qualification/replay_policy.md index 951be77b6..0f7501711 100644 --- a/src/policyengine/data/qualification/replay_policy.md +++ b/src/policyengine/data/qualification/replay_policy.md @@ -18,21 +18,31 @@ comparison base. It sends every other flagged move to a named reviewer. request. - A mapping flag. - A lost result: a coverage row with a base value and no candidate value. -- A lost response, unless it is a known gap: - - a measure-year the candidate lists as inert; +- A lost response: + - a measure-year the candidate lists as inert, unless it is a known gap; - a measure-year total at exactly £0 where the base's absolute value is at least the diff's bound, max(£1m, 1% of the base's absolute value), - whether the base was positive or negative. + whether the base was positive or negative. A known gap never excuses + this: a base whose record lists the measure-year as a gap cannot also + hold a material value for it. - An event whose supported grid is incomplete, unless every inert or - missing measure-year in it is a known gap. A receipt whose integrity is - `incomplete` with no incomplete event also fails. + missing and supported measure-year in it is a known gap. An incomplete + event whose receipt does not list its missing measure-years fails, as + does one that lists none. A receipt whose integrity is `incomplete` with + no incomplete event also fails. +- A receipt that contradicts itself, including a complete event that lists + an inert, or missing and supported, measure-year. ## Known gaps -A measure-year is a known gap only when the receipt positively records it -as inert, or missing and supported, in the base, for the same event, -measure and year. Until the receipt carries that base-side record, there -are no known gaps. +A candidate measure-year that is inert, or missing and supported (in the +event's missing list and not its unsupported list), is a known gap only +when the receipt's base-side record for the same event (`diff.base_events`, +taken from the base's verified staging and run manifests) lists the same +measure and year as inert, or as missing and supported, in the base. The +gate records each known gap with the base's staging manifest SHA-256. A +legacy-layout base, or an event the base did not replay, has no record, so +none of its gaps are known. ## Review diff --git a/src/policyengine/data/schemas/vendor/policyengine-scorecard/README.md b/src/policyengine/data/schemas/vendor/policyengine-scorecard/README.md index b8a52769e..da25727c9 100644 --- a/src/policyengine/data/schemas/vendor/policyengine-scorecard/README.md +++ b/src/policyengine/data/schemas/vendor/policyengine-scorecard/README.md @@ -1,7 +1,9 @@ # Vendored policyengine-scorecard schemas -Copied unchanged from PolicyEngine/policyengine-scorecard, branch -`w6/replay-variants`, commit `dc040de` (`docs/uk_replay/schemas/`): the v1 +Copied unchanged from PolicyEngine/policyengine-scorecard, `main` at commit +`71cad306f37f7f9bfb4b58497ff9ddd78b396e00` (the merge of scorecard#183, which +added `diff.base_events` and the corpus grid lists; +`docs/uk_replay/schemas/`): the v1 pre-promotion replay interface between policyengine.py qualification (W4) and the replay corpus (W6). `policyengine.provenance.qualification` mirrors them, and `tests/test_qualification_contracts.py` checks the mirrors and the diff --git a/src/policyengine/data/schemas/vendor/policyengine-scorecard/replay_receipt.v1.json b/src/policyengine/data/schemas/vendor/policyengine-scorecard/replay_receipt.v1.json index a9d526142..eb18cfa9a 100644 --- a/src/policyengine/data/schemas/vendor/policyengine-scorecard/replay_receipt.v1.json +++ b/src/policyengine/data/schemas/vendor/policyengine-scorecard/replay_receipt.v1.json @@ -364,6 +364,12 @@ } } } + }, + "base_events": { + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/base_event" + } } } } @@ -614,23 +620,74 @@ "type": "boolean" }, "inert_measure_years": { + "$ref": "#/$defs/measure_years" + }, + "missing_measure_years": { + "$ref": "#/$defs/measure_years" + }, + "unsupported_measure_years": { + "$ref": "#/$defs/measure_years" + } + } + }, + "measure_years": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "measure_key", + "year" + ], + "properties": { + "measure_key": { + "type": "string", + "minLength": 1 + }, + "year": { + "type": "integer" + } + } + }, + "uniqueItems": true + }, + "base_event": { + "type": "object", + "additionalProperties": false, + "required": [ + "staging_manifest_sha256", + "run_manifest_sha256", + "supported_years", + "full_supported_grid_complete", + "inert_measure_years", + "missing_measure_years", + "unsupported_measure_years" + ], + "properties": { + "staging_manifest_sha256": { + "$ref": "#/$defs/sha256" + }, + "run_manifest_sha256": { + "$ref": "#/$defs/sha256" + }, + "supported_years": { "type": "array", "items": { - "type": "object", - "additionalProperties": false, - "required": [ - "measure_key", - "year" - ], - "properties": { - "measure_key": { - "type": "string" - }, - "year": { - "type": "integer" - } - } - } + "type": "integer" + }, + "uniqueItems": true + }, + "full_supported_grid_complete": { + "type": "boolean" + }, + "inert_measure_years": { + "$ref": "#/$defs/measure_years" + }, + "missing_measure_years": { + "$ref": "#/$defs/measure_years" + }, + "unsupported_measure_years": { + "$ref": "#/$defs/measure_years" } } } diff --git a/src/policyengine/provenance/qualification.py b/src/policyengine/provenance/qualification.py index 9ca873400..36ff3f113 100644 --- a/src/policyengine/provenance/qualification.py +++ b/src/policyengine/provenance/qualification.py @@ -582,11 +582,28 @@ class UnsupportedYear(_Mirror): reason: Literal["before_data_year", "after_extension_end"] -class InertMeasureYear(_Mirror): - measure_key: str +class MeasureYear(_Mirror): + measure_key: str = Field(min_length=1) year: int +#: The name the inert lists used before scorecard#183 shared the definition. +InertMeasureYear = MeasureYear + + +def _unique(values: Optional[Sequence[Any]], name: str) -> None: + """The schema's ``uniqueItems``.""" + + if values is None: + return + keys = [ + value.model_dump_json() if isinstance(value, BaseModel) else repr(value) + for value in values + ] + if len(keys) != len(set(keys)): + raise ValueError(f"{name} lists an item twice.") + + class EventResult(_Mirror): registry_sha256: str = Field(pattern=SHA256_PATTERN) supported_years: list[int] @@ -596,7 +613,47 @@ class EventResult(_Mirror): comparison_provenance_sha256: str = Field(pattern=SHA256_PATTERN) artifacts: int = Field(ge=0) full_supported_grid_complete: bool - inert_measure_years: list[InertMeasureYear] + inert_measure_years: list[MeasureYear] + #: Staging's lists (scorecard#183): the full event grid less what was + #: computed, and the full grid less the supported years. Older receipts + #: omit them. + missing_measure_years: Optional[list[MeasureYear]] = None + unsupported_measure_years: Optional[list[MeasureYear]] = None + + @model_validator(mode="after") + def _unique_items(self) -> EventResult: + for name in ( + "supported_years", + "inert_measure_years", + "missing_measure_years", + "unsupported_measure_years", + ): + _unique(getattr(self, name), name) + return self + + +class BaseEvent(_Mirror): + """The comparison base's own grid record for one event (scorecard#183), + read from the base's staging and run manifests that the diff verified.""" + + staging_manifest_sha256: str = Field(pattern=SHA256_PATTERN) + run_manifest_sha256: str = Field(pattern=SHA256_PATTERN) + supported_years: list[int] + full_supported_grid_complete: bool + inert_measure_years: list[MeasureYear] + missing_measure_years: list[MeasureYear] + unsupported_measure_years: list[MeasureYear] + + @model_validator(mode="after") + def _unique_items(self) -> BaseEvent: + for name in ( + "supported_years", + "inert_measure_years", + "missing_measure_years", + "unsupported_measure_years", + ): + _unique(getattr(self, name), name) + return self class Corpus(_Mirror): @@ -654,6 +711,9 @@ class Diff(_Mirror): diff_sha256: str = Field(pattern=SHA256_PATTERN) flag_counts: FlagCounts flagged_rows: list[FlaggedRow] + #: Per event the base replayed in the current layout (scorecard#183). A + #: legacy-layout base, or an event the base did not replay, has no entry. + base_events: Optional[dict[str, BaseEvent]] = None class ResultsLocation(_Mirror): @@ -775,7 +835,8 @@ def evaluate_replay_receipt( (a base value with no candidate value), lost responses (a measure-year the candidate lists as inert, or a measure-year total of exactly £0 against a base at least the diff's bound away) and incomplete grids, - unless a gap is known from base-side evidence; + unless a gap is known: the base's own record (``diff.base_events``) + lists the same measure-year as inert, or missing and supported; - send every other flagged move to review. Unsupported years are reported, never failed on their own. The gate's @@ -941,6 +1002,18 @@ def evaluate_replay_receipt( replayed = 0 for name, event in sorted(corpus.events.items()): replayed += event.artifacts + listed_missing = { + (item.measure_key, item.year) for item in event.missing_measure_years or () + } - { + (item.measure_key, item.year) + for item in event.unsupported_measure_years or () + } + if event.full_supported_grid_complete and ( + event.inert_measure_years or listed_missing + ): + contradictions.append( + f"{name} is complete but lists inert or missing measure-years" + ) if event.supported_years and event.artifacts == 0: contradictions.append(f"{name} has supported years but no artifacts") if not event.supported_years and not event.unsupported_years: @@ -983,9 +1056,51 @@ def evaluate_replay_receipt( # summary counters alone: a flag a counter states but no row carries # still needs review. present = {kind for kind, n in counts.items() if n} | set(row_counts) - # No receipt yet records the base's own inert and missing measure-years, - # so no gap is known and every inert or incomplete measure-year fails. + # A gap is known only where the base's own grid record (scorecard#183) + # lists the same measure-year as inert, or missing and supported, for the + # same event. A legacy-layout base, or an event the base did not replay, + # has no record, so none of its gaps are known. + base_events = (receipt.diff.base_events or {}) if receipt.diff is not None else {} + + def pairs(items: Optional[Sequence[MeasureYear]]) -> set[tuple[str, int]]: + return {(item.measure_key, item.year) for item in items or ()} + + def missing_supported(record: Any) -> Optional[set[tuple[str, int]]]: + if record.missing_measure_years is None: + return None + return pairs(record.missing_measure_years) - pairs( + record.unsupported_measure_years + ) + known_gaps: list[dict[str, Any]] = [] + for name, event in sorted(corpus.events.items()): + base = base_events.get(name) + if base is None: + continue + base_inert = pairs(base.inert_measure_years) + base_missing = missing_supported(base) or set() + event_inert = pairs(event.inert_measure_years) + for measure_key, year in sorted( + event_inert | (missing_supported(event) or set()) + ): + if (measure_key, year) in base_inert: + why = "inert in the base" + elif (measure_key, year) in base_missing: + why = "missing in the base" + else: + continue + known_gaps.append( + { + "event": name, + "measure_key": measure_key, + "year": year, + "candidate": "inert" + if (measure_key, year) in event_inert + else "missing", + "why": why, + "base_staging_manifest_sha256": base.staging_manifest_sha256, + } + ) known = {(gap["event"], gap["measure_key"], gap["year"]) for gap in known_gaps} listed_inert = set(inert) candidate_inert = {where for where in listed_inert if where not in known} @@ -1019,13 +1134,30 @@ def item(kind: str, row: Any = None, **fields: Any) -> dict[str, Any]: ) ) for name in incomplete_events: - regressions.append( - item( - "incomplete", - event=name, - why="the supported grid is incomplete and no gap in it is known", + event = corpus.events[name] + missing = missing_supported(event) + if missing is None: + regressions.append( + item( + "incomplete", + event=name, + why="the supported grid is incomplete and the receipt does " + "not list its missing measure-years", + ) + ) + continue + gaps = pairs(event.inert_measure_years) | missing + unknown = sorted(gap for gap in gaps if (name, *gap) not in known) + if not gaps or unknown: + regressions.append( + item( + "incomplete", + event=name, + why="the supported grid is incomplete and not every inert " + "or missing measure-year in it is a known gap", + measure_years=[list(gap) for gap in unknown], + ) ) - ) if receipt.integrity.status == "incomplete" and not incomplete_events: regressions.append( item("incomplete", why="integrity is incomplete with no incomplete event") @@ -1047,11 +1179,24 @@ def item(kind: str, row: Any = None, **fields: Any) -> dict[str, Any]: and abs(row.base_gbp) >= max(REPLAY_ABSOLUTE_BOUND_GBP, REPLAY_RELATIVE_BOUND * abs(row.base_gbp)) ) - if where in listed_inert and (zero_total or "inertness" in flags): + if zero_total and where in known: + # A base whose own record lists the measure-year as a gap cannot + # also hold a material value for it: the receipt contradicts + # itself, so the gap does not excuse the loss. + regressions.append( + item( + "lost_response", + row, + why="£0 against a material base value, though the base's " + "record lists the measure-year as a gap", + ) + ) + lost = True + elif where in listed_inert and (zero_total or "inertness" in flags): # The candidate's own inert list decides: a lost response above, # or a known gap. lost = True - elif zero_total and where not in known: + elif zero_total: regressions.append(item("lost_response", row, why="£0 against the base")) lost = True if not lost and flags & REVIEW_REPLAY_FLAGS: diff --git a/tests/test_qualification_contracts.py b/tests/test_qualification_contracts.py index 3c781379e..80cde36c0 100644 --- a/tests/test_qualification_contracts.py +++ b/tests/test_qualification_contracts.py @@ -374,9 +374,106 @@ def _rejected_receipt(): "rejected", lambda r: r.update(integrity={"status": "failed", "failures": []}), ), + ( + "empty inert measure key", + "complete", + lambda r: r["corpus"]["events"]["spring_budget_2023"].update( + inert_measure_years=[{"measure_key": "", "year": 2026}] + ), + ), + ( + "inert measure-year twice", + "complete", + lambda r: r["corpus"]["events"]["spring_budget_2023"].update( + inert_measure_years=[{"measure_key": "m", "year": 2026}] * 2 + ), + ), + ( + "supported year twice", + "complete", + lambda r: r["corpus"]["events"]["spring_budget_2023"].update( + supported_years=[2024, 2024] + ), + ), + ( + "missing measure-year twice", + "complete", + lambda r: r["corpus"]["events"]["spring_budget_2023"].update( + missing_measure_years=[{"measure_key": "m", "year": 2026}] * 2 + ), + ), + ( + "base event without its unsupported list", + "complete", + lambda r: r["diff"].update( + base_events={ + "spring_budget_2023": { + k: v + for k, v in _base_event().items() + if k != "unsupported_measure_years" + } + } + ), + ), + ( + "base event with a short digest", + "complete", + lambda r: r["diff"].update( + base_events={ + "spring_budget_2023": { + **_base_event(), + "staging_manifest_sha256": "abc", + } + } + ), + ), + ( + "base event with an extra field", + "complete", + lambda r: r["diff"].update( + base_events={"spring_budget_2023": {**_base_event(), "extra": 1}} + ), + ), ] +def _base_event(inert=(), missing=(), unsupported=()): + """A base-side grid record (scorecard#183) for one event.""" + + def measure_years(items): + return [{"measure_key": m, "year": y} for m, y in items] + + return { + "staging_manifest_sha256": "a" * 64, + "run_manifest_sha256": "b" * 64, + "supported_years": [2024, 2025, 2026, 2027], + "full_supported_grid_complete": not inert + and not set(missing) - set(unsupported), + "inert_measure_years": measure_years(inert), + "missing_measure_years": measure_years(missing), + "unsupported_measure_years": measure_years(unsupported), + } + + +def test_a_receipt_with_base_events_and_grid_lists_is_accepted_by_both(): + """scorecard#183's additive fields, valid: the schema and the mirror both + accept them, and the digest covers them as received.""" + + raw = copy.deepcopy(golden("replay_receipt_golden")) + raw["corpus"]["events"]["spring_budget_2023"].update( + missing_measure_years=[{"measure_key": "m", "year": 2023}], + unsupported_measure_years=[{"measure_key": "m", "year": 2023}], + ) + raw["diff"]["base_events"] = {"spring_budget_2023": _base_event()} + raw = _sealed(raw) + _validator("replay_receipt.v1.json").validate(raw) + receipt = ReplayReceipt.from_document(raw) + assert receipt.computed_receipt_sha256 == raw["receipt_sha256"] + assert receipt.diff.base_events["spring_budget_2023"].run_manifest_sha256 == ( + "b" * 64 + ) + + @pytest.mark.parametrize( ("label", "base", "mutate"), RECEIPT_MUTATIONS, @@ -570,7 +667,8 @@ def test_a_measure_year_the_candidate_lists_as_inert_fails(): receipt = _edit( _clean_receipt(), lambda r: r["corpus"]["events"][EVENT].update( - inert_measure_years=[{"measure_key": "uc_childcare", "year": 2026}] + inert_measure_years=[{"measure_key": "uc_childcare", "year": 2026}], + full_supported_grid_complete=False, ), ) gate = _gate(receipt) @@ -578,12 +676,40 @@ def test_a_measure_year_the_candidate_lists_as_inert_fails(): assert gate.details["known_gaps"] == [] +def test_a_complete_event_that_lists_a_gap_contradicts_itself(): + for edit in ( + {"inert_measure_years": [{"measure_key": "uc_childcare", "year": 2026}]}, + { + "missing_measure_years": [{"measure_key": "uc_childcare", "year": 2026}], + "unsupported_measure_years": [], + }, + ): + receipt = _edit( + _clean_receipt(), lambda r, e=edit: r["corpus"]["events"][EVENT].update(e) + ) + gate = _gate(receipt) + assert gate.status == "fail" + assert "complete but lists inert or missing" in gate.summary + + MEASURE = "spring_budget_2023__uc_childcare_cap_increase" -def _receipt_with(rows=(), inert=(), complete=True, integrity="complete", counts=None): +def _receipt_with( + rows=(), + inert=(), + complete=True, + integrity="complete", + counts=None, + missing=None, + unsupported=(), + base_events=None, +): """The golden receipt with these flagged rows (measure-year totals unless - a row says otherwise), counts that match them, and this event state.""" + a row says otherwise), counts that match them, and this event state. + ``missing`` and ``unsupported`` are the event's grid lists (omitted when + ``missing`` is None, as before scorecard#183); ``base_events`` is + ``diff.base_events``.""" doc = _with_requested_wheels(copy.deepcopy(golden("replay_receipt_golden"))) template = { @@ -605,6 +731,15 @@ def _receipt_with(rows=(), inert=(), complete=True, integrity="complete", counts {"measure_key": measure, "year": year} for measure, year in inert ] event["full_supported_grid_complete"] = complete + if missing is not None: + event["missing_measure_years"] = [ + {"measure_key": measure, "year": year} for measure, year in missing + ] + event["unsupported_measure_years"] = [ + {"measure_key": measure, "year": year} for measure, year in unsupported + ] + if base_events is not None: + doc["diff"]["base_events"] = base_events doc["integrity"]["status"] = integrity return _sealed(doc) @@ -825,6 +960,160 @@ def test_the_replay_policy_decides_each_case_of_the_decision_record(name): assert recorded == kinds, (name, recorded) +GAP = (MEASURE, 2026) +UNSUPPORTED = (MEASURE, 2023) + + +# Each: candidate inert, candidate missing, candidate unsupported, the base +# events, then the expected status and known-gap reasons. +KNOWN_GAP_CASES = { + "inert in both": ( + [GAP], + [], + [], + {EVENT: _base_event(inert=[GAP])}, + "pass", + ["inert in the base"], + ), + "missing in both": ( + [], + [GAP], + [], + {EVENT: _base_event(missing=[GAP])}, + "pass", + ["missing in the base"], + ), + "inert here, missing in the base": ( + [GAP], + [], + [], + {EVENT: _base_event(missing=[GAP])}, + "pass", + ["missing in the base"], + ), + "the base computed it": ( + [GAP], + [], + [], + {EVENT: _base_event()}, + "fail", + [], + ), + "missing in the base, but unsupported there": ( + [GAP], + [], + [], + {EVENT: _base_event(missing=[GAP], unsupported=[GAP])}, + "fail", + [], + ), + "a legacy base": ( + [GAP], + [], + [], + {}, + "fail", + [], + ), + "a record for another event": ( + [GAP], + [], + [], + {"autumn_budget_2025": _base_event(inert=[GAP])}, + "fail", + [], + ), + "another year inert in the base": ( + [GAP], + [], + [], + {EVENT: _base_event(inert=[(MEASURE, 2027)])}, + "fail", + [], + ), + "incomplete with nothing listed": ( + [], + [UNSUPPORTED], + [UNSUPPORTED], + {EVENT: _base_event()}, + "fail", + [], + ), +} + + +@pytest.mark.parametrize("name", sorted(KNOWN_GAP_CASES)) +def test_a_gap_is_known_only_on_the_bases_own_record(name): + """The decision record's exact test: a candidate measure-year that is + inert, or missing and supported, is a known gap only if the base's record + for that event lists it as inert, or missing and supported.""" + + inert, missing, unsupported, base_events, status, reasons = KNOWN_GAP_CASES[name] + receipt = _receipt_with( + inert=inert, + complete=False, + integrity="incomplete", + missing=missing, + unsupported=unsupported, + base_events=base_events, + ) + _validator("replay_receipt.v1.json").validate(receipt) + gate = _gate(receipt) + assert gate.status == status, (name, gate.summary) + assert [gap["why"] for gap in gate.details["known_gaps"]] == reasons + for gap in gate.details["known_gaps"]: + assert gap["base_staging_manifest_sha256"] == "a" * 64 + assert (gap["event"], gap["measure_key"], gap["year"]) == (EVENT, *GAP) + if status == "fail": + assert {r["kind"] for r in gate.details["regressions"]} & { + "incomplete", + "lost_response", + } + + +def test_an_incomplete_event_without_its_missing_list_fails_even_with_base_evidence(): + """A receipt from before scorecard#183 cannot show what is missing.""" + + receipt = _receipt_with( + inert=[GAP], + complete=False, + integrity="incomplete", + base_events={EVENT: _base_event(inert=[GAP])}, + ) + gate = _gate(receipt) + assert gate.status == "fail" + assert gate.details["known_gaps"][0]["why"] == "inert in the base" + assert [r["kind"] for r in gate.details["regressions"]] == ["incomplete"] + assert "does not list its missing" in gate.details["regressions"][0]["why"] + + +def test_a_known_gap_never_excuses_a_material_base_value(): + """A base whose record lists the measure-year as inert cannot also hold a + material value for it, so a £0 against that value still fails.""" + + def receipt(base_gbp): + rows = ( + [] + if base_gbp is None + else [{"flags": ["structural"], "base_gbp": base_gbp, "head_gbp": 0.0}] + ) + return _receipt_with( + rows=rows, + inert=[GAP], + complete=False, + integrity="incomplete", + missing=[], + base_events={EVENT: _base_event(inert=[GAP])}, + ) + + known = _gate(receipt(None)) + assert known.status == "pass" and known.details["regressions"] == [] + contradicted = _gate(receipt(2.5e8)) + assert contradicted.status == "fail" + assert [r["kind"] for r in contradicted.details["regressions"]] == ["lost_response"] + assert "though the base's record" in contradicted.details["regressions"][0]["why"] + + def test_a_counted_flag_with_no_row_still_needs_review(): gate = _gate(_receipt_with(counts={"numerical": 1})) assert gate.status == "needs_review" From 73820abed71e384efa211ab15fe3a674be20de66 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Thu, 15 Oct 2026 23:39:47 -0400 Subject: [PATCH 2/9] Hold every received receipt and status to the vendored schema Round 1 of the review found the mirrors accepted documents the schema rejects: null for the new grid lists or for diff.base_events, and a string year coerced to an integer, which could establish a known gap. A received receipt (ReplayReceipt.from_document) and status (read_replay) must now satisfy the vendored scorecard schema as well as the mirror; a refusal is a ValueError, so the poll step fails closed and the attempt stays retriable rather than being finalized on bad evidence. Five such documents join the schema/mirror differential cases. The round's eight probes, which killed mutants the table missed (unsupported filtering, measure identity, mixed known and unknown gaps, cross-kind matching, negative and exact-bound zero totals), are now tests, and each kills its mutant. The policy text says an incomplete event fails when it lists no inert and no missing-and-supported measure-year at all, as the code does. Co-Authored-By: Claude Opus 5.5 --- .../data/qualification/replay_policy.md | 4 +- src/policyengine/provenance/qualification.py | 43 +++++- .../provenance/uk_qualification.py | 5 +- tests/test_qualification_contracts.py | 130 +++++++++++++++++- 4 files changed, 177 insertions(+), 5 deletions(-) diff --git a/src/policyengine/data/qualification/replay_policy.md b/src/policyengine/data/qualification/replay_policy.md index 0f7501711..ed47c142e 100644 --- a/src/policyengine/data/qualification/replay_policy.md +++ b/src/policyengine/data/qualification/replay_policy.md @@ -27,8 +27,8 @@ comparison base. It sends every other flagged move to a named reviewer. hold a material value for it. - An event whose supported grid is incomplete, unless every inert or missing and supported measure-year in it is a known gap. An incomplete - event whose receipt does not list its missing measure-years fails, as - does one that lists none. A receipt whose integrity is `incomplete` with + event whose receipt does not list its missing measure-years fails, and so + does one with no inert and no missing and supported measure-year at all. A receipt whose integrity is `incomplete` with no incomplete event also fails. - A receipt that contradicts itself, including a complete event that lists an inert, or missing and supported, measure-year. diff --git a/src/policyengine/provenance/qualification.py b/src/policyengine/provenance/qualification.py index 36ff3f113..9b02001d9 100644 --- a/src/policyengine/provenance/qualification.py +++ b/src/policyengine/provenance/qualification.py @@ -28,7 +28,9 @@ from __future__ import annotations +import functools import hashlib +import json from collections.abc import Iterable, Mapping, Sequence from typing import Any, ClassVar, Literal, Optional @@ -120,6 +122,41 @@ REPLAY_RELATIVE_BOUND = 0.01 +@functools.cache +def _vendored_validator(name: str) -> Any: + """A validator for one vendored policyengine-scorecard schema.""" + + from importlib.resources import files + + import jsonschema + + schema = json.loads( + ( + files("policyengine") + / "data" + / "schemas" + / "vendor" + / "policyengine-scorecard" + / name + ).read_text(encoding="utf-8") + ) + validator = jsonschema.validators.validator_for(schema) + validator.check_schema(schema) + return validator(schema) + + +def conform_to_vendored_schema(document: Mapping[str, Any], name: str) -> None: + """Raise ``ValueError`` unless ``document`` is valid against the vendored + scorecard schema ``name``. The mirrors are a typed view; the schema decides + what a received document may contain (no nulls where it allows none, no + strings where it requires integers).""" + + error = next(iter(_vendored_validator(name).iter_errors(dict(document))), None) + if error is not None: + where = "/".join(str(part) for part in error.absolute_path) or "the document" + raise ValueError(f"{name}: {error.message} (at {where})") + + def replay_policy_sha256() -> str: """SHA-256 of the replay policy text this package applies.""" @@ -752,9 +789,13 @@ class ReplayReceipt(_Mirror): @classmethod def from_document(cls, document: Mapping[str, Any]) -> ReplayReceipt: - """Parse a received receipt, keeping its bytes for digest checks.""" + """Parse a received receipt, keeping its bytes for digest checks. + + It must satisfy both the mirror and the vendored schema. + """ receipt = cls.model_validate(dict(document)) + conform_to_vendored_schema(document, "replay_receipt.v1.json") receipt._received = dict(document) return receipt diff --git a/src/policyengine/provenance/uk_qualification.py b/src/policyengine/provenance/uk_qualification.py index aa5fc948f..96a7978a8 100644 --- a/src/policyengine/provenance/uk_qualification.py +++ b/src/policyengine/provenance/uk_qualification.py @@ -64,6 +64,7 @@ ReplayReference, ReplayStatus, ReviewAcceptance, + conform_to_vendored_schema, dominates, evaluate_replay_receipt, qualification_verdict, @@ -830,7 +831,9 @@ def read_replay( raw_status = fetch(state_ref, status_path) if raw_status is None: return replay_gate_while_pending(None), None, None - status = ReplayStatus.model_validate_json(raw_status) + status_document = json.loads(raw_status) + status = ReplayStatus.model_validate(status_document) + conform_to_vendored_schema(status_document, "replay_status.v1.json") if not status.terminal: return replay_gate_while_pending(status), status, None assert status.receipt_commit is not None diff --git a/tests/test_qualification_contracts.py b/tests/test_qualification_contracts.py index 80cde36c0..aab9033fe 100644 --- a/tests/test_qualification_contracts.py +++ b/tests/test_qualification_contracts.py @@ -434,6 +434,46 @@ def _rejected_receipt(): base_events={"spring_budget_2023": {**_base_event(), "extra": 1}} ), ), + # Round-1 review of #637: the schema allows these keys to be absent, + # never null, and never coerces a string to an integer. + ( + "null missing list", + "complete", + lambda r: r["corpus"]["events"]["spring_budget_2023"].update( + missing_measure_years=None + ), + ), + ( + "null unsupported list", + "complete", + lambda r: r["corpus"]["events"]["spring_budget_2023"].update( + unsupported_measure_years=None + ), + ), + ( + "null base events", + "complete", + lambda r: r["diff"].update(base_events=None), + ), + ( + "base measure-year as a string", + "complete", + lambda r: r["diff"].update( + base_events={ + "spring_budget_2023": { + **_base_event(), + "inert_measure_years": [{"measure_key": "m", "year": "2026"}], + } + } + ), + ), + ( + "supported year as a string", + "complete", + lambda r: r["corpus"]["events"]["spring_budget_2023"].update( + supported_years=["2024", 2025] + ), + ), ] @@ -492,7 +532,8 @@ def test_receipt_mirror_and_schema_reject_the_same_receipts(label, base, mutate) mutate(raw) raw = _sealed(raw) assert not _validator("replay_receipt.v1.json").is_valid(raw), label - with pytest.raises(ValidationError): + # A pydantic ValidationError is a ValueError, as is a schema refusal. + with pytest.raises(ValueError): ReplayReceipt.from_document(raw) @@ -1071,6 +1112,93 @@ def test_a_gap_is_known_only_on_the_bases_own_record(name): } +OTHER = "spring_budget_2023__other_measure" + +# Round-1 review of #637: eight probes that killed mutants the table missed. +# Each: receipt arguments, the expected status and number of known gaps. +GAP_PROBES = { + "complete, missing only in unsupported years": ( + dict( + complete=True, + integrity="complete", + missing=[UNSUPPORTED], + unsupported=[UNSUPPORTED], + base_events={EVENT: _base_event()}, + ), + "pass", + 0, + ), + "missing here, inert in the base": ( + dict(missing=[GAP], base_events={EVENT: _base_event(inert=[GAP])}), + "pass", + 1, + ), + "another measure inert in the base, same year": ( + dict( + inert=[GAP], + missing=[], + base_events={EVENT: _base_event(inert=[(OTHER, 2026)])}, + ), + "fail", + 0, + ), + "a known inert gap beside a new missing one": ( + dict( + inert=[GAP], + missing=[(MEASURE, 2027)], + base_events={EVENT: _base_event(inert=[GAP])}, + ), + "fail", + 1, + ), + "a known gap against a negative material base": ( + dict( + rows=[{"flags": ["structural"], "base_gbp": -2.5e8, "head_gbp": 0.0}], + inert=[GAP], + missing=[], + base_events={EVENT: _base_event(inert=[GAP])}, + ), + "fail", + 1, + ), + "a known gap against exactly the bound": ( + dict( + rows=[{"flags": ["structural"], "base_gbp": 1e6, "head_gbp": 0.0}], + inert=[GAP], + missing=[], + base_events={EVENT: _base_event(inert=[GAP])}, + ), + "fail", + 1, + ), + "unsupported-only missing here, missing in the base": ( + dict( + missing=[UNSUPPORTED], + unsupported=[UNSUPPORTED], + base_events={EVENT: _base_event(missing=[UNSUPPORTED])}, + ), + "fail", + 0, + ), + "another measure missing in the base, same year": ( + dict(missing=[GAP], base_events={EVENT: _base_event(missing=[(OTHER, 2026)])}), + "fail", + 0, + ), +} + + +@pytest.mark.parametrize("name", sorted(GAP_PROBES)) +def test_the_known_gap_rule_on_the_review_probes(name): + arguments, status, known = GAP_PROBES[name] + arguments = {"complete": False, "integrity": "incomplete", **arguments} + receipt = _receipt_with(**arguments) + _validator("replay_receipt.v1.json").validate(receipt) + gate = _gate(receipt) + assert gate.status == status, (name, gate.summary) + assert len(gate.details["known_gaps"]) == known, name + + def test_an_incomplete_event_without_its_missing_list_fails_even_with_base_evidence(): """A receipt from before scorecard#183 cannot show what is missing.""" From 21c00966624fdbb5bdc05b7ced24880205d120de Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Thu, 15 Oct 2026 23:48:09 -0400 Subject: [PATCH 3/9] Rewrap the policy paragraph the merge joined Co-Authored-By: Claude Opus 5.5 --- src/policyengine/data/qualification/replay_policy.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/policyengine/data/qualification/replay_policy.md b/src/policyengine/data/qualification/replay_policy.md index dcc9f2c1a..a194dec70 100644 --- a/src/policyengine/data/qualification/replay_policy.md +++ b/src/policyengine/data/qualification/replay_policy.md @@ -29,8 +29,9 @@ comparison base. It sends every other flagged move to a named reviewer. - An event whose supported grid is incomplete, unless every inert or missing and supported measure-year in it is a known gap. An incomplete event whose receipt does not list its missing measure-years fails, and so - does one with no inert and no missing and supported measure-year at all. A receipt whose integrity is `incomplete` with - no incomplete event also fails. + does one with no inert and no missing and supported measure-year at all. + A receipt whose integrity is `incomplete` with no incomplete event also + fails. - A receipt that contradicts itself, including a complete event that lists an inert, or missing and supported, measure-year. From 53da3ae4920ac090241086c69d9c21d692a6dac8 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Fri, 16 Oct 2026 00:06:59 -0400 Subject: [PATCH 4/9] Excuse only a known gap's inertness flag, and pin the rule's combinations Round 2 of the review found that a measure-year the candidate lists as inert excused its whole flagged row: with a known inert gap, a row flagged inertness and construction passed with no review. The inert list now decides only the inertness flag; the row's other flags are judged as usual. The round's seven probes are now tests, each killing its mutant: a known gap never excuses a complete event listing a gap, a counted mapping flag or a lost result; base evidence never crosses into another event, for inert or missing measure-years; a known missing gap is recorded as missing and never hides another missing measure-year. A schema-invalid replay status (an explicit null the mirror accepts) is refused when read, killing the mutant that drops the status check. Co-Authored-By: Claude Opus 5.5 --- src/policyengine/provenance/qualification.py | 9 +- tests/test_qualification_contracts.py | 109 ++++++++++++++++++- tests/test_uk_qualification_pipeline.py | 12 ++ 3 files changed, 126 insertions(+), 4 deletions(-) diff --git a/src/policyengine/provenance/qualification.py b/src/policyengine/provenance/qualification.py index 79d73bfa2..31d6b2685 100644 --- a/src/policyengine/provenance/qualification.py +++ b/src/policyengine/provenance/qualification.py @@ -1238,13 +1238,16 @@ def item(kind: str, row: Any = None, **fields: Any) -> dict[str, Any]: ) ) lost = True - elif where in listed_inert and (zero_total or "inertness" in flags): - # The candidate's own inert list decides: a lost response above, - # or a known gap. + elif where in listed_inert and zero_total: + # The candidate's own inert list decides: a lost response above. lost = True elif zero_total: regressions.append(item("lost_response", row, why="£0 against the base")) lost = True + if where in listed_inert: + # The candidate's inert list decides its inertness (a lost response + # above, or a known gap); the row's other flags are judged as usual. + flags = flags - {"inertness"} if not lost and flags & REVIEW_REPLAY_FLAGS: if "coverage" in flags and row.base_gbp is None: kind = ( diff --git a/tests/test_qualification_contracts.py b/tests/test_qualification_contracts.py index 009920b18..9e54da7e5 100644 --- a/tests/test_qualification_contracts.py +++ b/tests/test_qualification_contracts.py @@ -745,6 +745,7 @@ def _receipt_with( missing=None, unsupported=(), base_events=None, + sealed=True, ): """The golden receipt with these flagged rows (measure-year totals unless a row says otherwise), counts that match them, and this event state. @@ -782,7 +783,7 @@ def _receipt_with( if base_events is not None: doc["diff"]["base_events"] = base_events doc["integrity"]["status"] = integrity - return _sealed(doc) + return _sealed(doc) if sealed else doc # The regression table of the d1344 decision record (second review), plus the @@ -1215,6 +1216,112 @@ def test_the_known_gap_rule_on_the_review_probes(name): assert len(gate.details["known_gaps"]) == known, name +def test_a_known_inert_gap_excuses_only_its_inertness_flag(): + """Round 2 of #637: the row's other flags are still judged.""" + + def gate(flags): + receipt = _receipt_with( + rows=[{"flags": flags, "base_gbp": 0.0, "head_gbp": 0.0}], + inert=[GAP], + complete=False, + integrity="incomplete", + missing=[], + base_events={EVENT: _base_event(inert=[GAP])}, + ) + _validator("replay_receipt.v1.json").validate(receipt) + return _gate(receipt) + + assert gate(["inertness"]).status == "pass" + mixed = gate(["inertness", "construction"]) + assert mixed.status == "needs_review" + assert [item["kind"] for item in mixed.details["review_items"]] == ["flagged_move"] + + +# Round 2 of #637: combinations of a known gap with other rules, and +# evidence that must stay within its own event. +def test_a_known_gap_never_excuses_a_complete_event_listing_a_gap(): + for inert, missing in (([GAP], []), ([], [GAP])): + gate = _gate( + _receipt_with( + inert=inert, + missing=missing, + base_events={EVENT: _base_event(inert=[GAP])}, + ) + ) + assert gate.status == "fail" + assert [r["kind"] for r in gate.details["regressions"]] == ["contradiction"] + assert gate.details["policy"] == REPLAY_POLICY_ID + + +def test_a_known_gap_never_excuses_a_counted_mapping_flag_or_a_lost_result(): + mapping = _gate( + _receipt_with( + inert=[GAP], + missing=[], + complete=False, + integrity="incomplete", + counts={"mapping": 1}, + base_events={EVENT: _base_event(inert=[GAP])}, + ) + ) + assert mapping.status == "fail" and len(mapping.details["known_gaps"]) == 1 + assert mapping.details["regressions"] == [ + {"kind": "counted_flag", "flag": "mapping", "count": 1} + ] + lost = _gate( + _receipt_with( + rows=[{"flags": ["coverage"], "base_gbp": 5e8, "head_gbp": None}], + missing=[GAP], + complete=False, + integrity="incomplete", + base_events={EVENT: _base_event(inert=[GAP])}, + ) + ) + assert lost.status == "fail" + assert [r["kind"] for r in lost.details["regressions"]] == ["lost_result"] + + +@pytest.mark.parametrize("candidate", ["inert", "missing"]) +def test_base_evidence_never_crosses_into_another_event(candidate): + """The same measure-year in a second event, which the base did not + replay, is not excused by the first event's record.""" + + receipt = _receipt_with( + inert=[GAP] if candidate == "inert" else [], + missing=[] if candidate == "inert" else [GAP], + complete=False, + integrity="incomplete", + base_events={EVENT: _base_event(inert=[GAP])}, + sealed=False, + ) + receipt["corpus"]["events"]["autumn_budget_2025"] = copy.deepcopy( + receipt["corpus"]["events"][EVENT] + ) + gate = _gate(_sealed(receipt)) + assert gate.status == "fail" + assert [(gap["event"], gap["candidate"]) for gap in gate.details["known_gaps"]] == [ + (EVENT, candidate) + ] + assert {r["event"] for r in gate.details["regressions"]} == {"autumn_budget_2025"} + expected = ( + ["lost_response", "incomplete"] if candidate == "inert" else ["incomplete"] + ) + assert [r["kind"] for r in gate.details["regressions"]] == expected + + +def test_a_known_missing_gap_never_hides_another_missing_measure_year(): + gate = _gate( + _receipt_with( + missing=[GAP, (MEASURE, 2027)], + complete=False, + integrity="incomplete", + base_events={EVENT: _base_event(missing=[GAP])}, + ) + ) + assert gate.status == "fail" and len(gate.details["known_gaps"]) == 1 + assert gate.details["regressions"][0]["measure_years"] == [[MEASURE, 2027]] + + def test_an_incomplete_event_without_its_missing_list_fails_even_with_base_evidence(): """A receipt from before scorecard#183 cannot show what is missing.""" diff --git a/tests/test_uk_qualification_pipeline.py b/tests/test_uk_qualification_pipeline.py index 8183bf59f..30ae24b4f 100644 --- a/tests/test_uk_qualification_pipeline.py +++ b/tests/test_uk_qualification_pipeline.py @@ -736,6 +736,18 @@ def test_reading_replay_state(): state_ref="replay-state", ) assert gate.status == "fail" and "no REPLAY_RECEIPT.json" in gate.summary + # The mirror accepts an explicit null the status schema forbids; reading + # it refuses rather than trusting it. + with pytest.raises(ValueError, match="replay_status.v1.json"): + read_replay( + request, + fetch=lambda ref, path: ( + json.dumps({**running, "receipt_sha256": None}).encode() + if path.endswith("STATUS.json") + else None + ), + state_ref="replay-state", + ) def test_assembled_receipt_without_replay_is_incomplete(): From 4d30fcf430641d38629546a5bc166c29a0fcd064 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Fri, 16 Oct 2026 01:15:02 -0400 Subject: [PATCH 5/9] Replace the 1.58.0 metrics fixture with W3's suppressed 1.58.1 report The 1.58.0 report predates the tool's small-cell rule and published Disabled Students' Allowance's total and caseload, which come from fewer than 10 records, unsuppressed; totals containing it gave it back. The 1.58.1 report at tool commit 228a05a3e publishes those figures as suppressed and rebuilds every total without them. The gate and tests that read the report move to the suppression format in the next commit. History is left as is pending a security decision. Co-Authored-By: Claude Opus 5.5 --- tests/fixtures/uk_metrics/README.md | 35 +- .../uk_metrics/budget_metrics_report.json | 5692 +++++++++++++---- 2 files changed, 4538 insertions(+), 1189 deletions(-) diff --git a/tests/fixtures/uk_metrics/README.md b/tests/fixtures/uk_metrics/README.md index f438a64c7..3a26ba332 100644 --- a/tests/fixtures/uk_metrics/README.md +++ b/tests/fixtures/uk_metrics/README.md @@ -1,24 +1,27 @@ # UK metrics tool fixtures Both files come from PolicyEngine/policyengine-uk's aggregate-impact tool -(`policyengine_uk/utils/aggregate_impact/`, policyengine-uk#2335), which the -qualification config pins at commit -`9b33fe19f80676fc5b81d2d80b36072e1c2fc1df`. They were produced at its parent, -`bd8bff74c0baea19c09eedf9ce1391d598d2ffaf`; the pinned commit changes only -when the tool digest is taken (at module load rather than at the end of a -run), so `standard_reforms.yaml` is byte-identical there and the report format -is unchanged. A report from the pinned commit differs only in -`metrics_version`, which the gate compares between the two pairs' reports, -never against this file. `tests/test_uk_candidate_gates.py` reads them. -Refresh them when a pin changes the report; never edit them by hand. +(`policyengine_uk/utils/aggregate_impact/`, policyengine-uk#2335). +`tests/test_uk_candidate_gates.py` reads them. Refresh them when a pin changes +the report; never edit them by hand. +- `budget_metrics_report.json`: a real `compute_budget_metrics` report from + the tool's owner (workstream W3), at tool commit + `228a05a3e925beb50da619aa01e68c266e578fc0`, on the certified pair: uk-data + 1.58.1 (`enhanced_frs_2024_25`) with policyengine-uk 2.130.1 and + policyengine-core 3.33.0, for 2025-26 to 2031-32, with the overlap guard and + the ten standard reforms. It holds aggregates only, under the tool's + small-cell rule (`privacy.py`): a figure from fewer than 10 records is + published as `value` null with `suppressed` true, and every total that + holds one is rebuilt without it and lists it under `excludes`. It has + 1,484 metric rows (14 suppressed: Disabled Students' Allowance's total and + caseload in each of the seven years) and 350 checks. - `standard_reforms.yaml`: the tool's standard reform set, copied unchanged. Ten reforms, each with the model variable it must move, the direction and the least it must move it in every year. The reform responsiveness gate reads the same file from the vendored tool. -- `budget_metrics_report.json`: a real `compute_budget_metrics` report from - the tool's owner (workstream W3), run on 11 October 2026 at the pinned tool - commit on uk-data 1.58.0 (`enhanced_frs_2024_25`) with policyengine-uk main, - for 2025-26 to 2031-32, with the overlap guard and the ten standard reforms. - It holds aggregates only: 1,470 metric rows and 346 checks (327 pass, - 15 warn, 4 fail), each check with its `failing_scopes`. + +This report replaces a 1.58.0 report from before the tool suppressed small +cells. That report published Disabled Students' Allowance, which comes from +fewer than 10 records, unsuppressed. Never commit a report from a tool +commit that predates suppression. diff --git a/tests/fixtures/uk_metrics/budget_metrics_report.json b/tests/fixtures/uk_metrics/budget_metrics_report.json index 6b599fb5d..76fc07331 100644 --- a/tests/fixtures/uk_metrics/budget_metrics_report.json +++ b/tests/fixtures/uk_metrics/budget_metrics_report.json @@ -1,8 +1,8 @@ { "schema": "policyengine-uk-aggregate-impact/1/report", "status": "ok", - "metrics_version": "policyengine-uk-aggregate-impact/1+3d0c53d5b453bd14+bf81c943e4ebec5a", - "partition_version": "779be6fce5878c1a358e1d921e4427cae51b2cb9391dabf923b5c624ae2d1070", + "metrics_version": "policyengine-uk-aggregate-impact/1+47b285096857148a+bb5198a0d8e7c046", + "partition_version": "e8ea8a0198736e7cd9b0725148fdda717911033ee768eba044b58a8d46e9b0ef", "years": [ 2025, 2026, @@ -16,7 +16,9 @@ { "metric_id": "population.person", "year": 2025, - "value": 69712844.3129216, + "value": 69513955.15348345, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "population", "partition": null, @@ -25,7 +27,9 @@ { "metric_id": "population.person", "year": 2026, - "value": 69977755.64010108, + "value": 69778110.5666471, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "population", "partition": null, @@ -34,7 +38,9 @@ { "metric_id": "population.person", "year": 2027, - "value": 70236674.50701487, + "value": 70036290.77594277, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "population", "partition": null, @@ -43,7 +49,9 @@ { "metric_id": "population.person", "year": 2028, - "value": 70517617.61980712, + "value": 70316432.3587328, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "population", "partition": null, @@ -52,7 +60,9 @@ { "metric_id": "population.person", "year": 2029, - "value": 70827896.20421527, + "value": 70625825.64596106, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "population", "partition": null, @@ -61,7 +71,9 @@ { "metric_id": "population.person", "year": 2030, - "value": 71146624.04218265, + "value": 70943644.05542476, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "population", "partition": null, @@ -70,7 +82,9 @@ { "metric_id": "population.person", "year": 2031, - "value": 71452690.09232165, + "value": 71248701.50975493, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "population", "partition": null, @@ -79,7 +93,9 @@ { "metric_id": "population.benunit", "year": 2025, - "value": 35436904.67127848, + "value": 35246926.333675, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "population", "partition": null, @@ -88,7 +104,9 @@ { "metric_id": "population.benunit", "year": 2026, - "value": 35571566.183018014, + "value": 35380865.871866405, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "population", "partition": null, @@ -97,7 +115,9 @@ { "metric_id": "population.benunit", "year": 2027, - "value": 35703181.570698276, + "value": 35511775.69777489, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "population", "partition": null, @@ -106,7 +126,9 @@ { "metric_id": "population.benunit", "year": 2028, - "value": 35845992.467239186, + "value": 35653820.972568765, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "population", "partition": null, @@ -115,7 +137,9 @@ { "metric_id": "population.benunit", "year": 2029, - "value": 36003715.37718047, + "value": 35810698.281318754, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "population", "partition": null, @@ -124,7 +148,9 @@ { "metric_id": "population.benunit", "year": 2030, - "value": 36165733.258539036, + "value": 35971847.531772316, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "population", "partition": null, @@ -133,7 +159,9 @@ { "metric_id": "population.benunit", "year": 2031, - "value": 36321314.823288456, + "value": 36126526.36007868, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "population", "partition": null, @@ -142,7 +170,9 @@ { "metric_id": "population.household", "year": 2025, - "value": 31245113.389789984, + "value": 31166694.04532416, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "population", "partition": null, @@ -151,7 +181,9 @@ { "metric_id": "population.household", "year": 2026, - "value": 31363845.951987505, + "value": 31285128.558958113, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "population", "partition": null, @@ -160,7 +192,9 @@ { "metric_id": "population.household", "year": 2027, - "value": 31479892.706091657, + "value": 31400884.081961572, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "population", "partition": null, @@ -169,7 +203,9 @@ { "metric_id": "population.household", "year": 2028, - "value": 31605810.66237679, + "value": 31526486.005968377, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "population", "partition": null, @@ -178,7 +214,9 @@ { "metric_id": "population.household", "year": 2029, - "value": 31744876.701983795, + "value": 31665202.984048083, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "population", "partition": null, @@ -187,7 +225,9 @@ { "metric_id": "population.household", "year": 2030, - "value": 31887729.66803205, + "value": 31807697.37639664, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "population", "partition": null, @@ -196,7 +236,9 @@ { "metric_id": "population.household", "year": 2031, - "value": 32024907.664337814, + "value": 31944470.379216716, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "population", "partition": null, @@ -205,7 +247,9 @@ { "metric_id": "receipts.income_tax", "year": 2025, - "value": 300493514624.05597, + "value": 297984459607.39465, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "income_tax", @@ -214,7 +258,9 @@ { "metric_id": "receipts.income_tax", "year": 2026, - "value": 320544520884.17847, + "value": 317782510223.38354, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "income_tax", @@ -223,7 +269,9 @@ { "metric_id": "receipts.income_tax", "year": 2027, - "value": 338021251015.9257, + "value": 335140035823.943, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "income_tax", @@ -232,7 +280,9 @@ { "metric_id": "receipts.income_tax", "year": 2028, - "value": 353227552195.2491, + "value": 350031424626.733, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "income_tax", @@ -241,7 +291,9 @@ { "metric_id": "receipts.income_tax", "year": 2029, - "value": 369117767213.9463, + "value": 366458443148.21484, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "income_tax", @@ -250,7 +302,9 @@ { "metric_id": "receipts.income_tax", "year": 2030, - "value": 387232407347.2469, + "value": 384662297800.91766, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "income_tax", @@ -259,7 +313,9 @@ { "metric_id": "receipts.income_tax", "year": 2031, - "value": 411429752919.1772, + "value": 403275325039.3891, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "income_tax", @@ -268,7 +324,9 @@ { "metric_id": "receipts.nics_individual", "year": 2025, - "value": 53131882407.61014, + "value": 52575017190.03174, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "nics_individual", @@ -277,7 +335,9 @@ { "metric_id": "receipts.nics_individual", "year": 2026, - "value": 55499684495.07545, + "value": 54941380589.82846, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "nics_individual", @@ -286,7 +346,9 @@ { "metric_id": "receipts.nics_individual", "year": 2027, - "value": 57316093047.9056, + "value": 56752394914.42203, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "nics_individual", @@ -295,7 +357,9 @@ { "metric_id": "receipts.nics_individual", "year": 2028, - "value": 59021168416.7411, + "value": 58476221815.846825, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "nics_individual", @@ -304,7 +368,9 @@ { "metric_id": "receipts.nics_individual", "year": 2029, - "value": 60933744650.36868, + "value": 60511486452.76118, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "nics_individual", @@ -313,7 +379,9 @@ { "metric_id": "receipts.nics_individual", "year": 2030, - "value": 62865473690.570404, + "value": 62445204124.271996, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "nics_individual", @@ -322,7 +390,9 @@ { "metric_id": "receipts.nics_individual", "year": 2031, - "value": 65321678070.619606, + "value": 64898705801.9577, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "nics_individual", @@ -331,7 +401,9 @@ { "metric_id": "receipts.nics_employer", "year": 2025, - "value": 154541037552.12073, + "value": 152640935215.8076, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "nics_employer", @@ -340,7 +412,9 @@ { "metric_id": "receipts.nics_employer", "year": 2026, - "value": 161154088343.2087, + "value": 159182492481.57574, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "nics_employer", @@ -349,7 +423,9 @@ { "metric_id": "receipts.nics_employer", "year": 2027, - "value": 166167835008.01767, + "value": 164141628899.95114, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "nics_employer", @@ -358,7 +434,9 @@ { "metric_id": "receipts.nics_employer", "year": 2028, - "value": 170808399523.67877, + "value": 168731462725.2504, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "nics_employer", @@ -367,7 +445,9 @@ { "metric_id": "receipts.nics_employer", "year": 2029, - "value": 177113429874.5147, + "value": 175566267043.68347, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "nics_employer", @@ -376,7 +456,9 @@ { "metric_id": "receipts.nics_employer", "year": 2030, - "value": 182684601617.84186, + "value": 181079291564.9595, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "nics_employer", @@ -385,7 +467,9 @@ { "metric_id": "receipts.nics_employer", "year": 2031, - "value": 189883460588.0551, + "value": 188223742975.49728, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "nics_employer", @@ -395,6 +479,8 @@ "metric_id": "receipts.employer_nics_response_capital", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "employer_nics_response_capital", @@ -404,6 +490,8 @@ "metric_id": "receipts.employer_nics_response_capital", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "employer_nics_response_capital", @@ -413,6 +501,8 @@ "metric_id": "receipts.employer_nics_response_capital", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "employer_nics_response_capital", @@ -422,6 +512,8 @@ "metric_id": "receipts.employer_nics_response_capital", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "employer_nics_response_capital", @@ -431,6 +523,8 @@ "metric_id": "receipts.employer_nics_response_capital", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "employer_nics_response_capital", @@ -440,6 +534,8 @@ "metric_id": "receipts.employer_nics_response_capital", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "employer_nics_response_capital", @@ -449,6 +545,8 @@ "metric_id": "receipts.employer_nics_response_capital", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "employer_nics_response_capital", @@ -458,6 +556,8 @@ "metric_id": "receipts.employer_nics_response_consumer", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "employer_nics_response_consumer", @@ -467,6 +567,8 @@ "metric_id": "receipts.employer_nics_response_consumer", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "employer_nics_response_consumer", @@ -476,6 +578,8 @@ "metric_id": "receipts.employer_nics_response_consumer", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "employer_nics_response_consumer", @@ -485,6 +589,8 @@ "metric_id": "receipts.employer_nics_response_consumer", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "employer_nics_response_consumer", @@ -494,6 +600,8 @@ "metric_id": "receipts.employer_nics_response_consumer", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "employer_nics_response_consumer", @@ -503,6 +611,8 @@ "metric_id": "receipts.employer_nics_response_consumer", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "employer_nics_response_consumer", @@ -512,6 +622,8 @@ "metric_id": "receipts.employer_nics_response_consumer", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "employer_nics_response_consumer", @@ -520,7 +632,9 @@ { "metric_id": "receipts.capital_gains_tax", "year": 2025, - "value": 12717206634.11718, + "value": 12618588087.194477, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "capital_gains_tax", @@ -529,7 +643,9 @@ { "metric_id": "receipts.capital_gains_tax", "year": 2026, - "value": 13157373776.93752, + "value": 13055343054.272093, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "capital_gains_tax", @@ -538,7 +654,9 @@ { "metric_id": "receipts.capital_gains_tax", "year": 2027, - "value": 13652775596.971504, + "value": 13547024733.440294, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "capital_gains_tax", @@ -547,7 +665,9 @@ { "metric_id": "receipts.capital_gains_tax", "year": 2028, - "value": 14151592611.504883, + "value": 14041998268.40096, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "capital_gains_tax", @@ -556,7 +676,9 @@ { "metric_id": "receipts.capital_gains_tax", "year": 2029, - "value": 14653801672.085384, + "value": 14540347118.814587, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "capital_gains_tax", @@ -565,7 +687,9 @@ { "metric_id": "receipts.capital_gains_tax", "year": 2030, - "value": 15204600241.922672, + "value": 15086908668.221151, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "capital_gains_tax", @@ -574,7 +698,9 @@ { "metric_id": "receipts.capital_gains_tax", "year": 2031, - "value": 15768244652.787172, + "value": 15645569134.728756, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "capital_gains_tax", @@ -583,7 +709,9 @@ { "metric_id": "receipts.student_loan_repayments", "year": 2025, - "value": 7830274125.077207, + "value": 7826615852.272217, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "student_loan_repayments", @@ -592,7 +720,9 @@ { "metric_id": "receipts.student_loan_repayments", "year": 2026, - "value": 8127270450.824548, + "value": 8123473394.454311, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "student_loan_repayments", @@ -601,7 +731,9 @@ { "metric_id": "receipts.student_loan_repayments", "year": 2027, - "value": 8353117705.791328, + "value": 8349215176.222883, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "student_loan_repayments", @@ -610,7 +742,9 @@ { "metric_id": "receipts.student_loan_repayments", "year": 2028, - "value": 8562646845.026996, + "value": 8558646443.275475, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "student_loan_repayments", @@ -619,7 +753,9 @@ { "metric_id": "receipts.student_loan_repayments", "year": 2029, - "value": 8789529758.204428, + "value": 8785423316.325344, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "student_loan_repayments", @@ -628,7 +764,9 @@ { "metric_id": "receipts.student_loan_repayments", "year": 2030, - "value": 9040980903.523558, + "value": 9036756985.870995, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "student_loan_repayments", @@ -637,7 +775,9 @@ { "metric_id": "receipts.student_loan_repayments", "year": 2031, - "value": 8059998166.851627, + "value": 9376925443.173416, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "student_loan_repayments", @@ -646,7 +786,9 @@ { "metric_id": "receipts.vat", "year": 2025, - "value": 317136171663.45935, + "value": 313127412006.5256, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "vat", @@ -655,7 +797,9 @@ { "metric_id": "receipts.vat", "year": 2026, - "value": 325663150441.0445, + "value": 321546605195.24274, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "vat", @@ -664,7 +808,9 @@ { "metric_id": "receipts.vat", "year": 2027, - "value": 333405472036.0278, + "value": 329191061310.5304, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "vat", @@ -673,7 +819,9 @@ { "metric_id": "receipts.vat", "year": 2028, - "value": 341433856818.8758, + "value": 337117963034.16547, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "vat", @@ -682,7 +830,9 @@ { "metric_id": "receipts.vat", "year": 2029, - "value": 349794893731.6442, + "value": 345373312536.52356, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "vat", @@ -691,7 +841,9 @@ { "metric_id": "receipts.vat", "year": 2030, - "value": 358396364144.5514, + "value": 353866055269.635, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "vat", @@ -700,7 +852,9 @@ { "metric_id": "receipts.vat", "year": 2031, - "value": 367137164287.62054, + "value": 362495430544.1016, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "vat", @@ -710,6 +864,8 @@ "metric_id": "receipts.vat_change", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "vat_change", @@ -719,6 +875,8 @@ "metric_id": "receipts.vat_change", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "vat_change", @@ -728,6 +886,8 @@ "metric_id": "receipts.vat_change", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "vat_change", @@ -737,6 +897,8 @@ "metric_id": "receipts.vat_change", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "vat_change", @@ -746,6 +908,8 @@ "metric_id": "receipts.vat_change", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "vat_change", @@ -755,6 +919,8 @@ "metric_id": "receipts.vat_change", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "vat_change", @@ -764,6 +930,8 @@ "metric_id": "receipts.vat_change", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "vat_change", @@ -773,6 +941,8 @@ "metric_id": "receipts.private_school_vat", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "private_school_vat", @@ -782,6 +952,8 @@ "metric_id": "receipts.private_school_vat", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "private_school_vat", @@ -791,6 +963,8 @@ "metric_id": "receipts.private_school_vat", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "private_school_vat", @@ -800,6 +974,8 @@ "metric_id": "receipts.private_school_vat", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "private_school_vat", @@ -809,6 +985,8 @@ "metric_id": "receipts.private_school_vat", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "private_school_vat", @@ -818,6 +996,8 @@ "metric_id": "receipts.private_school_vat", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "private_school_vat", @@ -827,6 +1007,8 @@ "metric_id": "receipts.private_school_vat", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "private_school_vat", @@ -835,7 +1017,9 @@ { "metric_id": "receipts.fuel_duty", "year": 2025, - "value": 24041873879.224743, + "value": 24534379561.8306, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "fuel_duty", @@ -844,7 +1028,9 @@ { "metric_id": "receipts.fuel_duty", "year": 2026, - "value": 24144661501.69051, + "value": 24639271891.62144, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "fuel_duty", @@ -853,7 +1039,9 @@ { "metric_id": "receipts.fuel_duty", "year": 2027, - "value": 26103457396.62795, + "value": 26638194760.36437, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "fuel_duty", @@ -862,7 +1050,9 @@ { "metric_id": "receipts.fuel_duty", "year": 2028, - "value": 26158807847.977238, + "value": 26694679049.418755, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "fuel_duty", @@ -871,7 +1061,9 @@ { "metric_id": "receipts.fuel_duty", "year": 2029, - "value": 25887798204.586216, + "value": 26418117577.300167, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "fuel_duty", @@ -880,7 +1072,9 @@ { "metric_id": "receipts.fuel_duty", "year": 2030, - "value": 25243234770.62697, + "value": 25760349910.6802, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "fuel_duty", @@ -889,7 +1083,9 @@ { "metric_id": "receipts.fuel_duty", "year": 2031, - "value": 25824982812.576405, + "value": 26353950047.77822, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "fuel_duty", @@ -899,6 +1095,8 @@ "metric_id": "receipts.alcohol_duty", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "alcohol_duty", @@ -908,6 +1106,8 @@ "metric_id": "receipts.alcohol_duty", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "alcohol_duty", @@ -917,6 +1117,8 @@ "metric_id": "receipts.alcohol_duty", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "alcohol_duty", @@ -926,6 +1128,8 @@ "metric_id": "receipts.alcohol_duty", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "alcohol_duty", @@ -935,6 +1139,8 @@ "metric_id": "receipts.alcohol_duty", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "alcohol_duty", @@ -944,6 +1150,8 @@ "metric_id": "receipts.alcohol_duty", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "alcohol_duty", @@ -953,6 +1161,8 @@ "metric_id": "receipts.alcohol_duty", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "alcohol_duty", @@ -962,6 +1172,8 @@ "metric_id": "receipts.tobacco_duty", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "tobacco_duty", @@ -971,6 +1183,8 @@ "metric_id": "receipts.tobacco_duty", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "tobacco_duty", @@ -980,6 +1194,8 @@ "metric_id": "receipts.tobacco_duty", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "tobacco_duty", @@ -989,6 +1205,8 @@ "metric_id": "receipts.tobacco_duty", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "tobacco_duty", @@ -998,6 +1216,8 @@ "metric_id": "receipts.tobacco_duty", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "tobacco_duty", @@ -1007,6 +1227,8 @@ "metric_id": "receipts.tobacco_duty", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "tobacco_duty", @@ -1016,6 +1238,8 @@ "metric_id": "receipts.tobacco_duty", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "tobacco_duty", @@ -1025,6 +1249,8 @@ "metric_id": "receipts.vehicle_excise_duty", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "vehicle_excise_duty", @@ -1034,6 +1260,8 @@ "metric_id": "receipts.vehicle_excise_duty", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "vehicle_excise_duty", @@ -1043,6 +1271,8 @@ "metric_id": "receipts.vehicle_excise_duty", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "vehicle_excise_duty", @@ -1052,6 +1282,8 @@ "metric_id": "receipts.vehicle_excise_duty", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "vehicle_excise_duty", @@ -1061,6 +1293,8 @@ "metric_id": "receipts.vehicle_excise_duty", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "vehicle_excise_duty", @@ -1070,6 +1304,8 @@ "metric_id": "receipts.vehicle_excise_duty", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "vehicle_excise_duty", @@ -1079,6 +1315,8 @@ "metric_id": "receipts.vehicle_excise_duty", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "vehicle_excise_duty", @@ -1087,7 +1325,9 @@ { "metric_id": "receipts.tv_licence", "year": 2025, - "value": 4306586174.401852, + "value": 4275969952.7872777, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "tv_licence", @@ -1096,7 +1336,9 @@ { "metric_id": "receipts.tv_licence", "year": 2026, - "value": 4459282492.68721, + "value": 4427595383.179631, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "tv_licence", @@ -1105,7 +1347,9 @@ { "metric_id": "receipts.tv_licence", "year": 2027, - "value": 4476138521.654851, + "value": 4444328769.554615, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "tv_licence", @@ -1114,7 +1358,9 @@ { "metric_id": "receipts.tv_licence", "year": 2028, - "value": 4496883532.289182, + "value": 4464697036.417519, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "tv_licence", @@ -1123,7 +1369,9 @@ { "metric_id": "receipts.tv_licence", "year": 2029, - "value": 4517653126.548064, + "value": 4485128769.03225, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "tv_licence", @@ -1132,7 +1380,9 @@ { "metric_id": "receipts.tv_licence", "year": 2030, - "value": 4538717337.874185, + "value": 4506096907.015281, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "tv_licence", @@ -1141,7 +1391,9 @@ { "metric_id": "receipts.tv_licence", "year": 2031, - "value": 4613696461.117936, + "value": 4526586455.751576, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "tv_licence", @@ -1150,7 +1402,9 @@ { "metric_id": "receipts.council_tax", "year": 2025, - "value": 49771708157.89493, + "value": 49560513009.82745, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "council_tax", @@ -1159,7 +1413,9 @@ { "metric_id": "receipts.council_tax", "year": 2026, - "value": 52672603769.35538, + "value": 52449635526.310104, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "council_tax", @@ -1168,7 +1424,9 @@ { "metric_id": "receipts.council_tax", "year": 2027, - "value": 56014381640.763115, + "value": 55778039679.1455, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "council_tax", @@ -1177,7 +1435,9 @@ { "metric_id": "receipts.council_tax", "year": 2028, - "value": 59637347359.69022, + "value": 59386561832.62195, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "council_tax", @@ -1186,7 +1446,9 @@ { "metric_id": "receipts.council_tax", "year": 2029, - "value": 63246644418.46654, + "value": 62981354541.126625, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "council_tax", @@ -1195,7 +1457,9 @@ { "metric_id": "receipts.council_tax", "year": 2030, - "value": 67017263920.12569, + "value": 66736811407.45229, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "council_tax", @@ -1204,7 +1468,9 @@ { "metric_id": "receipts.council_tax", "year": 2031, - "value": 67305565868.62192, + "value": 70704732540.45876, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "council_tax", @@ -1214,6 +1480,8 @@ "metric_id": "receipts.high_value_council_tax_surcharge", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "high_value_council_tax_surcharge", @@ -1223,6 +1491,8 @@ "metric_id": "receipts.high_value_council_tax_surcharge", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "high_value_council_tax_surcharge", @@ -1232,6 +1502,8 @@ "metric_id": "receipts.high_value_council_tax_surcharge", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "high_value_council_tax_surcharge", @@ -1240,7 +1512,9 @@ { "metric_id": "receipts.high_value_council_tax_surcharge", "year": 2028, - "value": 493860763.3252144, + "value": 483900104.6233177, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "high_value_council_tax_surcharge", @@ -1249,7 +1523,9 @@ { "metric_id": "receipts.high_value_council_tax_surcharge", "year": 2029, - "value": 505953941.79338336, + "value": 495749379.82161856, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "high_value_council_tax_surcharge", @@ -1258,7 +1534,9 @@ { "metric_id": "receipts.high_value_council_tax_surcharge", "year": 2030, - "value": 518394260.7963829, + "value": 507938784.7696847, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "high_value_council_tax_surcharge", @@ -1267,7 +1545,9 @@ { "metric_id": "receipts.high_value_council_tax_surcharge", "year": 2031, - "value": 531037020.5527634, + "value": 520325557.6779943, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "high_value_council_tax_surcharge", @@ -1276,7 +1556,9 @@ { "metric_id": "receipts.domestic_rates", "year": 2025, - "value": 584068659.0970445, + "value": 552492559.6753057, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "domestic_rates", @@ -1285,7 +1567,9 @@ { "metric_id": "receipts.domestic_rates", "year": 2026, - "value": 611674416.437277, + "value": 578605888.7461181, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "domestic_rates", @@ -1294,7 +1578,9 @@ { "metric_id": "receipts.domestic_rates", "year": 2027, - "value": 640521131.9170634, + "value": 605893088.8719264, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "domestic_rates", @@ -1303,7 +1589,9 @@ { "metric_id": "receipts.domestic_rates", "year": 2028, - "value": 670928666.9686946, + "value": 634656724.1676605, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "domestic_rates", @@ -1312,7 +1600,9 @@ { "metric_id": "receipts.domestic_rates", "year": 2029, - "value": 703059797.6875113, + "value": 665050775.6261593, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "domestic_rates", @@ -1321,7 +1611,9 @@ { "metric_id": "receipts.domestic_rates", "year": 2030, - "value": 736803086.5428002, + "value": 696969823.2250919, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "domestic_rates", @@ -1330,7 +1622,9 @@ { "metric_id": "receipts.domestic_rates", "year": 2031, - "value": 739972742.2779194, + "value": 730275344.6123755, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "domestic_rates", @@ -1339,7 +1633,9 @@ { "metric_id": "receipts.business_rates", "year": 2025, - "value": 31732500424.943848, + "value": 31732501414.791157, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "business_rates", @@ -1348,7 +1644,9 @@ { "metric_id": "receipts.business_rates", "year": 2026, - "value": 31732499121.74478, + "value": 31732500125.540802, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "business_rates", @@ -1357,7 +1655,9 @@ { "metric_id": "receipts.business_rates", "year": 2027, - "value": 31732496311.19231, + "value": 31732498126.72371, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "business_rates", @@ -1366,7 +1666,9 @@ { "metric_id": "receipts.business_rates", "year": 2028, - "value": 31732499335.602257, + "value": 31732499316.105175, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "business_rates", @@ -1375,7 +1677,9 @@ { "metric_id": "receipts.business_rates", "year": 2029, - "value": 31732495775.940987, + "value": 31732494964.235413, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "business_rates", @@ -1384,7 +1688,9 @@ { "metric_id": "receipts.business_rates", "year": 2030, - "value": 31732497033.93507, + "value": 31732498638.635994, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "business_rates", @@ -1393,7 +1699,9 @@ { "metric_id": "receipts.business_rates", "year": 2031, - "value": 31732498138.642197, + "value": 31732494471.035408, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "business_rates", @@ -1402,7 +1710,9 @@ { "metric_id": "receipts.sdlt_household", "year": 2025, - "value": 19447521756.60174, + "value": 19073759714.657246, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "sdlt_household", @@ -1411,7 +1721,9 @@ { "metric_id": "receipts.sdlt_household", "year": 2026, - "value": 20439906422.593903, + "value": 20077204232.549347, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "sdlt_household", @@ -1420,7 +1732,9 @@ { "metric_id": "receipts.sdlt_household", "year": 2027, - "value": 21414316294.15224, + "value": 21035871774.44113, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "sdlt_household", @@ -1429,7 +1743,9 @@ { "metric_id": "receipts.sdlt_household", "year": 2028, - "value": 22393098228.154316, + "value": 21999031263.396732, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "sdlt_household", @@ -1438,7 +1754,9 @@ { "metric_id": "receipts.sdlt_household", "year": 2029, - "value": 23394928012.007107, + "value": 22985619104.754326, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "sdlt_household", @@ -1447,7 +1765,9 @@ { "metric_id": "receipts.sdlt_household", "year": 2030, - "value": 24493314488.64765, + "value": 24063362268.549835, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "sdlt_household", @@ -1456,7 +1776,9 @@ { "metric_id": "receipts.sdlt_household", "year": 2031, - "value": 25645659350.923958, + "value": 25218986028.960094, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "sdlt_household", @@ -1465,7 +1787,9 @@ { "metric_id": "receipts.land_transaction_tax", "year": 2025, - "value": 2926955.7028617123, + "value": 3441794.3282832364, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "land_transaction_tax", @@ -1474,7 +1798,9 @@ { "metric_id": "receipts.land_transaction_tax", "year": 2026, - "value": 3159363.4106524643, + "value": 3718451.781090757, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "land_transaction_tax", @@ -1483,7 +1809,9 @@ { "metric_id": "receipts.land_transaction_tax", "year": 2027, - "value": 3426934.00067959, + "value": 4036378.263004425, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "land_transaction_tax", @@ -1492,7 +1820,9 @@ { "metric_id": "receipts.land_transaction_tax", "year": 2028, - "value": 3700930.558409606, + "value": 4360394.001039479, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "land_transaction_tax", @@ -1501,7 +1831,9 @@ { "metric_id": "receipts.land_transaction_tax", "year": 2029, - "value": 3976395.985409789, + "value": 4685725.303715903, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "land_transaction_tax", @@ -1510,7 +1842,9 @@ { "metric_id": "receipts.land_transaction_tax", "year": 2030, - "value": 4283730.381307287, + "value": 5044918.447127742, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "land_transaction_tax", @@ -1519,7 +1853,9 @@ { "metric_id": "receipts.land_transaction_tax", "year": 2031, - "value": 4617409.568686154, + "value": 5422944.119211734, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "land_transaction_tax", @@ -1528,7 +1864,9 @@ { "metric_id": "receipts.land_and_buildings_transaction_tax", "year": 2025, - "value": 99491389.10783455, + "value": 109691161.84922537, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "land_and_buildings_transaction_tax", @@ -1537,7 +1875,9 @@ { "metric_id": "receipts.land_and_buildings_transaction_tax", "year": 2026, - "value": 103957133.89622791, + "value": 114611758.83902286, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "land_and_buildings_transaction_tax", @@ -1546,7 +1886,9 @@ { "metric_id": "receipts.land_and_buildings_transaction_tax", "year": 2027, - "value": 109071438.72328326, + "value": 120242919.16397013, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "land_and_buildings_transaction_tax", @@ -1555,7 +1897,9 @@ { "metric_id": "receipts.land_and_buildings_transaction_tax", "year": 2028, - "value": 114234820.44540606, + "value": 125932263.95004636, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "land_and_buildings_transaction_tax", @@ -1564,7 +1908,9 @@ { "metric_id": "receipts.land_and_buildings_transaction_tax", "year": 2029, - "value": 119415529.40185314, + "value": 131640517.58306551, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "land_and_buildings_transaction_tax", @@ -1573,7 +1919,9 @@ { "metric_id": "receipts.land_and_buildings_transaction_tax", "year": 2030, - "value": 125108787.1325237, + "value": 137912689.4621755, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "land_and_buildings_transaction_tax", @@ -1582,7 +1930,9 @@ { "metric_id": "receipts.land_and_buildings_transaction_tax", "year": 2031, - "value": 130998504.05282259, + "value": 144400087.45167437, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "land_and_buildings_transaction_tax", @@ -1592,6 +1942,8 @@ "metric_id": "receipts.corporate_incident_tax_change", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "corporate_incident_tax_change", @@ -1601,6 +1953,8 @@ "metric_id": "receipts.corporate_incident_tax_change", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "corporate_incident_tax_change", @@ -1610,6 +1964,8 @@ "metric_id": "receipts.corporate_incident_tax_change", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "corporate_incident_tax_change", @@ -1619,6 +1975,8 @@ "metric_id": "receipts.corporate_incident_tax_change", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "corporate_incident_tax_change", @@ -1628,6 +1986,8 @@ "metric_id": "receipts.corporate_incident_tax_change", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "corporate_incident_tax_change", @@ -1637,6 +1997,8 @@ "metric_id": "receipts.corporate_incident_tax_change", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "corporate_incident_tax_change", @@ -1646,6 +2008,8 @@ "metric_id": "receipts.corporate_incident_tax_change", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "corporate_incident_tax_change", @@ -1655,6 +2019,8 @@ "metric_id": "receipts.consumer_incident_tax_change", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "consumer_incident_tax_change", @@ -1664,6 +2030,8 @@ "metric_id": "receipts.consumer_incident_tax_change", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "consumer_incident_tax_change", @@ -1673,6 +2041,8 @@ "metric_id": "receipts.consumer_incident_tax_change", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "consumer_incident_tax_change", @@ -1682,6 +2052,8 @@ "metric_id": "receipts.consumer_incident_tax_change", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "consumer_incident_tax_change", @@ -1691,6 +2063,8 @@ "metric_id": "receipts.consumer_incident_tax_change", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "consumer_incident_tax_change", @@ -1700,6 +2074,8 @@ "metric_id": "receipts.consumer_incident_tax_change", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "consumer_incident_tax_change", @@ -1709,6 +2085,8 @@ "metric_id": "receipts.consumer_incident_tax_change", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "consumer_incident_tax_change", @@ -1718,6 +2096,8 @@ "metric_id": "receipts.wealth_tax", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "wealth_tax", @@ -1727,6 +2107,8 @@ "metric_id": "receipts.wealth_tax", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "wealth_tax", @@ -1736,6 +2118,8 @@ "metric_id": "receipts.wealth_tax", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "wealth_tax", @@ -1745,6 +2129,8 @@ "metric_id": "receipts.wealth_tax", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "wealth_tax", @@ -1754,6 +2140,8 @@ "metric_id": "receipts.wealth_tax", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "wealth_tax", @@ -1763,6 +2151,8 @@ "metric_id": "receipts.wealth_tax", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "wealth_tax", @@ -1772,6 +2162,8 @@ "metric_id": "receipts.wealth_tax", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "wealth_tax", @@ -1781,6 +2173,8 @@ "metric_id": "receipts.non_primary_residence_wealth_tax", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "non_primary_residence_wealth_tax", @@ -1790,6 +2184,8 @@ "metric_id": "receipts.non_primary_residence_wealth_tax", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "non_primary_residence_wealth_tax", @@ -1799,6 +2195,8 @@ "metric_id": "receipts.non_primary_residence_wealth_tax", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "non_primary_residence_wealth_tax", @@ -1808,6 +2206,8 @@ "metric_id": "receipts.non_primary_residence_wealth_tax", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "non_primary_residence_wealth_tax", @@ -1817,6 +2217,8 @@ "metric_id": "receipts.non_primary_residence_wealth_tax", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "non_primary_residence_wealth_tax", @@ -1826,6 +2228,8 @@ "metric_id": "receipts.non_primary_residence_wealth_tax", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "non_primary_residence_wealth_tax", @@ -1835,6 +2239,8 @@ "metric_id": "receipts.non_primary_residence_wealth_tax", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "non_primary_residence_wealth_tax", @@ -1844,6 +2250,8 @@ "metric_id": "receipts.land_value_tax", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "land_value_tax", @@ -1853,6 +2261,8 @@ "metric_id": "receipts.land_value_tax", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "land_value_tax", @@ -1862,6 +2272,8 @@ "metric_id": "receipts.land_value_tax", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "land_value_tax", @@ -1871,6 +2283,8 @@ "metric_id": "receipts.land_value_tax", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "land_value_tax", @@ -1880,6 +2294,8 @@ "metric_id": "receipts.land_value_tax", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "land_value_tax", @@ -1889,6 +2305,8 @@ "metric_id": "receipts.land_value_tax", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "land_value_tax", @@ -1898,6 +2316,8 @@ "metric_id": "receipts.land_value_tax", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "land_value_tax", @@ -1907,6 +2327,8 @@ "metric_id": "receipts.carbon_tax", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "carbon_tax", @@ -1916,6 +2338,8 @@ "metric_id": "receipts.carbon_tax", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "carbon_tax", @@ -1925,6 +2349,8 @@ "metric_id": "receipts.carbon_tax", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "carbon_tax", @@ -1934,6 +2360,8 @@ "metric_id": "receipts.carbon_tax", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "carbon_tax", @@ -1943,6 +2371,8 @@ "metric_id": "receipts.carbon_tax", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "carbon_tax", @@ -1952,6 +2382,8 @@ "metric_id": "receipts.carbon_tax", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "carbon_tax", @@ -1961,6 +2393,8 @@ "metric_id": "receipts.carbon_tax", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "receipt", "partition": "carbon_tax", @@ -1969,7 +2403,9 @@ { "metric_id": "spending.state_pension", "year": 2025, - "value": 123608843187.93976, + "value": 122503036176.28136, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "state_pension", @@ -1978,7 +2414,9 @@ { "metric_id": "spending.state_pension", "year": 2026, - "value": 128313805027.58318, + "value": 127115003712.11774, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "state_pension", @@ -1987,7 +2425,9 @@ { "metric_id": "spending.state_pension", "year": 2027, - "value": 130127006024.04692, + "value": 128280611587.4219, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "state_pension", @@ -1996,7 +2436,9 @@ { "metric_id": "spending.state_pension", "year": 2028, - "value": 132238843074.43095, + "value": 130209285651.49004, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "state_pension", @@ -2005,7 +2447,9 @@ { "metric_id": "spending.state_pension", "year": 2029, - "value": 136141146063.11377, + "value": 134051705144.42847, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "state_pension", @@ -2014,7 +2458,9 @@ { "metric_id": "spending.state_pension", "year": 2030, - "value": 140172899465.68817, + "value": 138021583333.92395, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "state_pension", @@ -2023,7 +2469,9 @@ { "metric_id": "spending.state_pension", "year": 2031, - "value": 144295261485.49826, + "value": 142080411583.76672, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "state_pension", @@ -2032,7 +2480,9 @@ { "metric_id": "caseloads.state_pension", "year": 2025, - "value": 11410127.781640545, + "value": 11307942.897278756, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "state_pension", @@ -2041,7 +2491,9 @@ { "metric_id": "caseloads.state_pension", "year": 2026, - "value": 11314830.782796293, + "value": 11208358.708708271, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "state_pension", @@ -2050,7 +2502,9 @@ { "metric_id": "caseloads.state_pension", "year": 2027, - "value": 11062132.340065777, + "value": 10906221.550106525, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "state_pension", @@ -2059,7 +2513,9 @@ { "metric_id": "caseloads.state_pension", "year": 2028, - "value": 10978110.546501547, + "value": 10811938.301638946, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "state_pension", @@ -2068,7 +2524,9 @@ { "metric_id": "caseloads.state_pension", "year": 2029, - "value": 11026414.415012136, + "value": 10859510.9701875, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "state_pension", @@ -2077,7 +2535,9 @@ { "metric_id": "caseloads.state_pension", "year": 2030, - "value": 11076033.608679011, + "value": 10908379.084595531, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "state_pension", @@ -2086,7 +2546,9 @@ { "metric_id": "caseloads.state_pension", "year": 2031, - "value": 11123681.665928766, + "value": 10955285.089603484, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "state_pension", @@ -2095,7 +2557,9 @@ { "metric_id": "spending.pension_credit", "year": 2025, - "value": 6693405148.200283, + "value": 6683600257.719555, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "pension_credit", @@ -2104,7 +2568,9 @@ { "metric_id": "spending.pension_credit", "year": 2026, - "value": 7053483709.162087, + "value": 7056299099.336407, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "pension_credit", @@ -2113,7 +2579,9 @@ { "metric_id": "spending.pension_credit", "year": 2027, - "value": 7033310841.277825, + "value": 7040775597.466119, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "pension_credit", @@ -2122,7 +2590,9 @@ { "metric_id": "spending.pension_credit", "year": 2028, - "value": 7106016715.233224, + "value": 7110102297.589521, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "pension_credit", @@ -2131,7 +2601,9 @@ { "metric_id": "spending.pension_credit", "year": 2029, - "value": 7226848094.900362, + "value": 7231026514.317166, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "pension_credit", @@ -2140,7 +2612,9 @@ { "metric_id": "spending.pension_credit", "year": 2030, - "value": 7357686467.835372, + "value": 7365763489.682707, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "pension_credit", @@ -2149,7 +2623,9 @@ { "metric_id": "spending.pension_credit", "year": 2031, - "value": 6706505197.30149, + "value": 7463303552.117271, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "pension_credit", @@ -2158,7 +2634,9 @@ { "metric_id": "caseloads.pension_credit", "year": 2025, - "value": 1482756.0540938377, + "value": 1490774.5672746152, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "pension_credit", @@ -2167,7 +2645,9 @@ { "metric_id": "caseloads.pension_credit", "year": 2026, - "value": 1480853.1148245037, + "value": 1489116.733679533, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "pension_credit", @@ -2176,7 +2656,9 @@ { "metric_id": "caseloads.pension_credit", "year": 2027, - "value": 1468135.4329868257, + "value": 1477429.6021682024, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "pension_credit", @@ -2185,7 +2667,9 @@ { "metric_id": "caseloads.pension_credit", "year": 2028, - "value": 1447010.371819973, + "value": 1455339.335629344, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "pension_credit", @@ -2194,7 +2678,9 @@ { "metric_id": "caseloads.pension_credit", "year": 2029, - "value": 1447749.8420774192, + "value": 1457221.2425712496, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "pension_credit", @@ -2203,7 +2689,9 @@ { "metric_id": "caseloads.pension_credit", "year": 2030, - "value": 1444977.4954886883, + "value": 1454060.4666527808, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "pension_credit", @@ -2212,7 +2700,9 @@ { "metric_id": "caseloads.pension_credit", "year": 2031, - "value": 1071942.0777988583, + "value": 1450518.8676682264, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "pension_credit", @@ -2221,7 +2711,9 @@ { "metric_id": "spending.winter_fuel_payment", "year": 2025, - "value": 1703858030.6710334, + "value": 1696782924.1721363, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "winter_fuel_payment", @@ -2230,7 +2722,9 @@ { "metric_id": "spending.winter_fuel_payment", "year": 2026, - "value": 1687685652.7937918, + "value": 1679283343.732223, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "winter_fuel_payment", @@ -2239,7 +2733,9 @@ { "metric_id": "spending.winter_fuel_payment", "year": 2027, - "value": 1616450871.1886823, + "value": 1590003738.0768867, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "winter_fuel_payment", @@ -2248,7 +2744,9 @@ { "metric_id": "spending.winter_fuel_payment", "year": 2028, - "value": 1595491327.4155288, + "value": 1573027080.7015598, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "winter_fuel_payment", @@ -2257,7 +2755,9 @@ { "metric_id": "spending.winter_fuel_payment", "year": 2029, - "value": 1589373766.706106, + "value": 1569952442.020166, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "winter_fuel_payment", @@ -2266,7 +2766,9 @@ { "metric_id": "spending.winter_fuel_payment", "year": 2030, - "value": 1572193208.341339, + "value": 1547501174.76131, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "winter_fuel_payment", @@ -2275,7 +2777,9 @@ { "metric_id": "spending.winter_fuel_payment", "year": 2031, - "value": 1561450492.8642156, + "value": 1519503572.7274477, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "winter_fuel_payment", @@ -2284,7 +2788,9 @@ { "metric_id": "caseloads.winter_fuel_payment", "year": 2025, - "value": 7112673.635766387, + "value": 7090970.121831879, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "winter_fuel_payment", @@ -2293,7 +2799,9 @@ { "metric_id": "caseloads.winter_fuel_payment", "year": 2026, - "value": 7034862.558265865, + "value": 7007600.1749506295, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "winter_fuel_payment", @@ -2302,7 +2810,9 @@ { "metric_id": "caseloads.winter_fuel_payment", "year": 2027, - "value": 6701440.449254692, + "value": 6593488.894350678, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "winter_fuel_payment", @@ -2311,7 +2821,9 @@ { "metric_id": "caseloads.winter_fuel_payment", "year": 2028, - "value": 6595675.344529897, + "value": 6508639.181520969, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "winter_fuel_payment", @@ -2320,7 +2832,9 @@ { "metric_id": "caseloads.winter_fuel_payment", "year": 2029, - "value": 6562245.612942323, + "value": 6490585.181142107, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "winter_fuel_payment", @@ -2329,7 +2843,9 @@ { "metric_id": "caseloads.winter_fuel_payment", "year": 2030, - "value": 6475253.517584786, + "value": 6377424.451988548, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "winter_fuel_payment", @@ -2338,7 +2854,9 @@ { "metric_id": "caseloads.winter_fuel_payment", "year": 2031, - "value": 6396321.154249236, + "value": 6242475.78672789, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "winter_fuel_payment", @@ -2347,7 +2865,9 @@ { "metric_id": "spending.pawhp", "year": 2025, - "value": 195652682.01216725, + "value": 190004357.0627768, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "pawhp", @@ -2356,7 +2876,9 @@ { "metric_id": "spending.pawhp", "year": 2026, - "value": 203249126.6687394, + "value": 197376523.34808874, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "pawhp", @@ -2365,7 +2887,9 @@ { "metric_id": "spending.pawhp", "year": 2027, - "value": 207355049.2189332, + "value": 201464846.70418116, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "pawhp", @@ -2374,7 +2898,9 @@ { "metric_id": "spending.pawhp", "year": 2028, - "value": 211194062.34368283, + "value": 205237714.89489964, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "pawhp", @@ -2383,7 +2909,9 @@ { "metric_id": "spending.pawhp", "year": 2029, - "value": 216365284.1364411, + "value": 210263123.1305548, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "pawhp", @@ -2392,7 +2920,9 @@ { "metric_id": "spending.pawhp", "year": 2030, - "value": 221685784.68137968, + "value": 215433546.71501532, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "pawhp", @@ -2401,7 +2931,9 @@ { "metric_id": "spending.pawhp", "year": 2031, - "value": 227092425.0723793, + "value": 220687250.38609877, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "pawhp", @@ -2410,7 +2942,9 @@ { "metric_id": "caseloads.pawhp", "year": 2025, - "value": 829304.9473122358, + "value": 806440.3659721613, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "pawhp", @@ -2419,7 +2953,9 @@ { "metric_id": "caseloads.pawhp", "year": 2026, - "value": 829534.2019373178, + "value": 806642.316529274, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "pawhp", @@ -2428,7 +2964,9 @@ { "metric_id": "caseloads.pawhp", "year": 2027, - "value": 829233.4100881219, + "value": 806823.3181906939, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "pawhp", @@ -2437,7 +2975,9 @@ { "metric_id": "caseloads.pawhp", "year": 2028, - "value": 827297.3866233826, + "value": 805142.1836649776, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "pawhp", @@ -2446,7 +2986,9 @@ { "metric_id": "caseloads.pawhp", "year": 2029, - "value": 830937.4991832376, + "value": 808684.8276723027, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "pawhp", @@ -2455,7 +2997,9 @@ { "metric_id": "caseloads.pawhp", "year": 2030, - "value": 834676.7390937805, + "value": 812323.9398192763, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "pawhp", @@ -2464,7 +3008,9 @@ { "metric_id": "caseloads.pawhp", "year": 2031, - "value": 838267.4468256831, + "value": 815816.9233164787, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "pawhp", @@ -2473,7 +3019,9 @@ { "metric_id": "spending.universal_credit", "year": 2025, - "value": 79297069929.09415, + "value": 79166098634.76385, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "universal_credit", @@ -2482,7 +3030,9 @@ { "metric_id": "spending.universal_credit", "year": 2026, - "value": 83589492640.30864, + "value": 83483281466.41425, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "universal_credit", @@ -2491,7 +3041,9 @@ { "metric_id": "spending.universal_credit", "year": 2027, - "value": 85214410402.33775, + "value": 85110190875.9473, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "universal_credit", @@ -2500,7 +3052,9 @@ { "metric_id": "spending.universal_credit", "year": 2028, - "value": 86751184502.34996, + "value": 86667339883.95622, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "universal_credit", @@ -2509,7 +3063,9 @@ { "metric_id": "spending.universal_credit", "year": 2029, - "value": 87589733492.11055, + "value": 87402948162.99124, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "universal_credit", @@ -2518,7 +3074,9 @@ { "metric_id": "spending.universal_credit", "year": 2030, - "value": 84522628500.50685, + "value": 84214027875.53, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "universal_credit", @@ -2527,7 +3085,9 @@ { "metric_id": "spending.universal_credit", "year": 2031, - "value": 84959856870.21652, + "value": 85457636655.59526, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "universal_credit", @@ -2536,7 +3096,9 @@ { "metric_id": "caseloads.universal_credit", "year": 2025, - "value": 6348321.546875536, + "value": 6371587.519835666, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "universal_credit", @@ -2545,7 +3107,9 @@ { "metric_id": "caseloads.universal_credit", "year": 2026, - "value": 6360591.7880883515, + "value": 6379016.747252494, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "universal_credit", @@ -2554,7 +3118,9 @@ { "metric_id": "caseloads.universal_credit", "year": 2027, - "value": 6371549.96376504, + "value": 6394538.736335561, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "universal_credit", @@ -2563,7 +3129,9 @@ { "metric_id": "caseloads.universal_credit", "year": 2028, - "value": 6387956.646527201, + "value": 6399621.182661429, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "universal_credit", @@ -2572,7 +3140,9 @@ { "metric_id": "caseloads.universal_credit", "year": 2029, - "value": 6368112.714898095, + "value": 6373153.488585249, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "universal_credit", @@ -2581,7 +3151,9 @@ { "metric_id": "caseloads.universal_credit", "year": 2030, - "value": 6306509.543026373, + "value": 6316123.800888762, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "universal_credit", @@ -2590,7 +3162,9 @@ { "metric_id": "caseloads.universal_credit", "year": 2031, - "value": 6290932.269934744, + "value": 6311765.528904498, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "universal_credit", @@ -2599,7 +3173,9 @@ { "metric_id": "spending.housing_benefit", "year": 2025, - "value": 8156481113.662994, + "value": 8595335171.520943, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "housing_benefit", @@ -2608,7 +3184,9 @@ { "metric_id": "spending.housing_benefit", "year": 2026, - "value": 8481531600.187535, + "value": 8931864198.577654, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "housing_benefit", @@ -2617,7 +3195,9 @@ { "metric_id": "spending.housing_benefit", "year": 2027, - "value": 8730679159.952463, + "value": 9199477872.067867, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "housing_benefit", @@ -2626,7 +3206,9 @@ { "metric_id": "spending.housing_benefit", "year": 2028, - "value": 8864953021.672188, + "value": 9343759945.943094, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "housing_benefit", @@ -2635,7 +3217,9 @@ { "metric_id": "spending.housing_benefit", "year": 2029, - "value": 9128777068.594437, + "value": 9621753903.580982, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "housing_benefit", @@ -2644,7 +3228,9 @@ { "metric_id": "spending.housing_benefit", "year": 2030, - "value": 9364726526.233978, + "value": 9883322170.08307, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "housing_benefit", @@ -2653,7 +3239,9 @@ { "metric_id": "spending.housing_benefit", "year": 2031, - "value": 7910651616.326078, + "value": 10165697938.801252, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "housing_benefit", @@ -2662,7 +3250,9 @@ { "metric_id": "caseloads.housing_benefit", "year": 2025, - "value": 1231862.2140089273, + "value": 1254488.0164678842, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "housing_benefit", @@ -2671,7 +3261,9 @@ { "metric_id": "caseloads.housing_benefit", "year": 2026, - "value": 1232121.5733534694, + "value": 1252740.275393933, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "housing_benefit", @@ -2680,7 +3272,9 @@ { "metric_id": "caseloads.housing_benefit", "year": 2027, - "value": 1233595.1880552769, + "value": 1254335.1581986696, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "housing_benefit", @@ -2689,7 +3283,9 @@ { "metric_id": "caseloads.housing_benefit", "year": 2028, - "value": 1219421.9009352624, + "value": 1240028.0728783756, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "housing_benefit", @@ -2698,7 +3294,9 @@ { "metric_id": "caseloads.housing_benefit", "year": 2029, - "value": 1224496.4099243134, + "value": 1244626.769205615, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "housing_benefit", @@ -2707,7 +3305,9 @@ { "metric_id": "caseloads.housing_benefit", "year": 2030, - "value": 1225629.5051008165, + "value": 1246801.715999484, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "housing_benefit", @@ -2716,7 +3316,9 @@ { "metric_id": "caseloads.housing_benefit", "year": 2031, - "value": 1040899.9826000333, + "value": 1249258.3732767105, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "housing_benefit", @@ -2725,7 +3327,9 @@ { "metric_id": "spending.council_tax_reduction", "year": 2025, - "value": 2113520041.1605535, + "value": 1988515658.8280945, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "council_tax_reduction", @@ -2734,7 +3338,9 @@ { "metric_id": "spending.council_tax_reduction", "year": 2026, - "value": 2160301971.6342654, + "value": 2033885987.1873639, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "council_tax_reduction", @@ -2743,7 +3349,9 @@ { "metric_id": "spending.council_tax_reduction", "year": 2027, - "value": 2208773724.380773, + "value": 2079220973.3377244, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "council_tax_reduction", @@ -2752,7 +3360,9 @@ { "metric_id": "spending.council_tax_reduction", "year": 2028, - "value": 2263288488.6852794, + "value": 2130392978.7542346, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "council_tax_reduction", @@ -2761,7 +3371,9 @@ { "metric_id": "spending.council_tax_reduction", "year": 2029, - "value": 2318590052.1342373, + "value": 2182371431.2323685, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "council_tax_reduction", @@ -2770,7 +3382,9 @@ { "metric_id": "spending.council_tax_reduction", "year": 2030, - "value": 2383255853.6602764, + "value": 2245332431.4065833, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "council_tax_reduction", @@ -2779,7 +3393,9 @@ { "metric_id": "spending.council_tax_reduction", "year": 2031, - "value": 2140059095.905221, + "value": 2299546088.50543, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "council_tax_reduction", @@ -2788,7 +3404,9 @@ { "metric_id": "caseloads.council_tax_reduction", "year": 2025, - "value": 3390071.4158337414, + "value": 3187241.3228853345, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "council_tax_reduction", @@ -2797,7 +3415,9 @@ { "metric_id": "caseloads.council_tax_reduction", "year": 2026, - "value": 3414428.1972658634, + "value": 3211653.8483200073, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "council_tax_reduction", @@ -2806,7 +3426,9 @@ { "metric_id": "caseloads.council_tax_reduction", "year": 2027, - "value": 3432134.60831666, + "value": 3226461.487433046, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "council_tax_reduction", @@ -2815,7 +3437,9 @@ { "metric_id": "caseloads.council_tax_reduction", "year": 2028, - "value": 3454574.494795531, + "value": 3249134.5323915184, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "council_tax_reduction", @@ -2824,7 +3448,9 @@ { "metric_id": "caseloads.council_tax_reduction", "year": 2029, - "value": 3471370.6449995935, + "value": 3264581.2450436354, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "council_tax_reduction", @@ -2833,7 +3459,9 @@ { "metric_id": "caseloads.council_tax_reduction", "year": 2030, - "value": 3503850.509585738, + "value": 3296161.365950793, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "council_tax_reduction", @@ -2842,7 +3470,9 @@ { "metric_id": "caseloads.council_tax_reduction", "year": 2031, - "value": 3284019.218611926, + "value": 3310563.1543370783, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "council_tax_reduction", @@ -2851,7 +3481,9 @@ { "metric_id": "spending.esa_income", "year": 2025, - "value": 2157918345.897898, + "value": 2119219755.27102, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "esa_income", @@ -2860,7 +3492,9 @@ { "metric_id": "spending.esa_income", "year": 2026, - "value": 2215460941.2027354, + "value": 2175740626.0724893, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "esa_income", @@ -2869,7 +3503,9 @@ { "metric_id": "spending.esa_income", "year": 2027, - "value": 2267178997.307175, + "value": 2226624100.582522, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "esa_income", @@ -2878,7 +3514,9 @@ { "metric_id": "spending.esa_income", "year": 2028, - "value": 2318791077.751506, + "value": 2277324834.952569, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "esa_income", @@ -2887,7 +3525,9 @@ { "metric_id": "spending.esa_income", "year": 2029, - "value": 2374655132.983756, + "value": 2332267574.159017, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "esa_income", @@ -2896,7 +3536,9 @@ { "metric_id": "spending.esa_income", "year": 2030, - "value": 2432303236.337222, + "value": 2388837175.037817, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "esa_income", @@ -2905,7 +3547,9 @@ { "metric_id": "spending.esa_income", "year": 2031, - "value": 2490528072.8603873, + "value": 2446074707.6473985, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "esa_income", @@ -2914,7 +3558,9 @@ { "metric_id": "caseloads.esa_income", "year": 2025, - "value": 188801.45329512656, + "value": 186830.98939606547, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "esa_income", @@ -2923,7 +3569,9 @@ { "metric_id": "caseloads.esa_income", "year": 2026, - "value": 189518.90480037034, + "value": 187540.95343746245, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "esa_income", @@ -2932,7 +3580,9 @@ { "metric_id": "caseloads.esa_income", "year": 2027, - "value": 190220.12851785123, + "value": 188234.8581573367, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "esa_income", @@ -2941,7 +3591,9 @@ { "metric_id": "caseloads.esa_income", "year": 2028, - "value": 190792.28100878, + "value": 188797.70078976452, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "esa_income", @@ -2950,7 +3602,9 @@ { "metric_id": "caseloads.esa_income", "year": 2029, - "value": 191631.7696904242, + "value": 189628.41371196508, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "esa_income", @@ -2959,7 +3613,9 @@ { "metric_id": "caseloads.esa_income", "year": 2030, - "value": 192494.11825346947, + "value": 190481.74765598774, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "esa_income", @@ -2968,7 +3624,9 @@ { "metric_id": "caseloads.esa_income", "year": 2031, - "value": 193322.20888361335, + "value": 191300.81845253706, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "esa_income", @@ -2977,7 +3635,9 @@ { "metric_id": "spending.esa_contrib", "year": 2025, - "value": 5185465918.024606, + "value": 5221642514.164815, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "esa_contrib", @@ -2986,7 +3646,9 @@ { "metric_id": "spending.esa_contrib", "year": 2026, - "value": 5324889662.558813, + "value": 5362038966.389469, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "esa_contrib", @@ -2995,7 +3657,9 @@ { "metric_id": "spending.esa_contrib", "year": 2027, - "value": 5451483839.668319, + "value": 5489516286.663287, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "esa_contrib", @@ -3004,7 +3668,9 @@ { "metric_id": "spending.esa_contrib", "year": 2028, - "value": 5582755219.611585, + "value": 5621703470.566074, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "esa_contrib", @@ -3013,7 +3679,9 @@ { "metric_id": "spending.esa_contrib", "year": 2029, - "value": 5719465848.776321, + "value": 5759367828.016521, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "esa_contrib", @@ -3022,7 +3690,9 @@ { "metric_id": "spending.esa_contrib", "year": 2030, - "value": 5860107436.9060955, + "value": 5900990569.133743, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "esa_contrib", @@ -3031,7 +3701,9 @@ { "metric_id": "spending.esa_contrib", "year": 2031, - "value": 6003027242.14748, + "value": 6044892357.516051, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "esa_contrib", @@ -3040,7 +3712,9 @@ { "metric_id": "caseloads.esa_contrib", "year": 2025, - "value": 716681.2252025008, + "value": 721684.3135545999, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "esa_contrib", @@ -3049,7 +3723,9 @@ { "metric_id": "caseloads.esa_contrib", "year": 2026, - "value": 719404.6381566375, + "value": 724426.7398380041, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "esa_contrib", @@ -3058,7 +3734,9 @@ { "metric_id": "caseloads.esa_contrib", "year": 2027, - "value": 722066.4522648603, + "value": 727107.1310208887, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "esa_contrib", @@ -3067,7 +3745,9 @@ { "metric_id": "caseloads.esa_contrib", "year": 2028, - "value": 724954.6817337871, + "value": 730015.5208309293, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "esa_contrib", @@ -3076,7 +3756,9 @@ { "metric_id": "caseloads.esa_contrib", "year": 2029, - "value": 728144.496014744, + "value": 733227.5983880013, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "esa_contrib", @@ -3085,7 +3767,9 @@ { "metric_id": "caseloads.esa_contrib", "year": 2030, - "value": 731421.169972077, + "value": 736527.1409217119, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "esa_contrib", @@ -3094,7 +3778,9 @@ { "metric_id": "caseloads.esa_contrib", "year": 2031, - "value": 734567.6720936149, + "value": 739694.2040582746, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "esa_contrib", @@ -3103,7 +3789,9 @@ { "metric_id": "spending.jsa_income", "year": 2025, - "value": 2091746.573322478, + "value": 1446979.5182146362, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "jsa_income", @@ -3113,6 +3801,8 @@ "metric_id": "spending.jsa_income", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "jsa_income", @@ -3122,6 +3812,8 @@ "metric_id": "spending.jsa_income", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "jsa_income", @@ -3131,6 +3823,8 @@ "metric_id": "spending.jsa_income", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "jsa_income", @@ -3140,6 +3834,8 @@ "metric_id": "spending.jsa_income", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "jsa_income", @@ -3149,6 +3845,8 @@ "metric_id": "spending.jsa_income", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "jsa_income", @@ -3158,6 +3856,8 @@ "metric_id": "spending.jsa_income", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "jsa_income", @@ -3166,7 +3866,9 @@ { "metric_id": "caseloads.jsa_income", "year": 2025, - "value": 428.6262260079384, + "value": 278.16873490810394, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "jsa_income", @@ -3176,6 +3878,8 @@ "metric_id": "caseloads.jsa_income", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "jsa_income", @@ -3185,6 +3889,8 @@ "metric_id": "caseloads.jsa_income", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "jsa_income", @@ -3194,6 +3900,8 @@ "metric_id": "caseloads.jsa_income", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "jsa_income", @@ -3203,6 +3911,8 @@ "metric_id": "caseloads.jsa_income", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "jsa_income", @@ -3212,6 +3922,8 @@ "metric_id": "caseloads.jsa_income", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "jsa_income", @@ -3221,6 +3933,8 @@ "metric_id": "caseloads.jsa_income", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "jsa_income", @@ -3229,7 +3943,9 @@ { "metric_id": "spending.jsa_contrib", "year": 2025, - "value": 297414211.9393128, + "value": 288777970.5356167, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "jsa_contrib", @@ -3238,7 +3954,9 @@ { "metric_id": "spending.jsa_contrib", "year": 2026, - "value": 305410902.6767736, + "value": 296542457.71586204, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "jsa_contrib", @@ -3247,7 +3965,9 @@ { "metric_id": "spending.jsa_contrib", "year": 2027, - "value": 312671758.9873353, + "value": 303592471.1494838, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "jsa_contrib", @@ -3256,7 +3976,9 @@ { "metric_id": "spending.jsa_contrib", "year": 2028, - "value": 320200875.2165054, + "value": 310902955.13914746, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "jsa_contrib", @@ -3265,7 +3987,9 @@ { "metric_id": "spending.jsa_contrib", "year": 2029, - "value": 328041963.6404445, + "value": 318516348.7643643, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "jsa_contrib", @@ -3274,7 +3998,9 @@ { "metric_id": "spending.jsa_contrib", "year": 2030, - "value": 336108514.2782755, + "value": 326348673.79918647, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "jsa_contrib", @@ -3283,7 +4009,9 @@ { "metric_id": "spending.jsa_contrib", "year": 2031, - "value": 344305739.25844115, + "value": 334307010.21562654, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "jsa_contrib", @@ -3292,7 +4020,9 @@ { "metric_id": "caseloads.jsa_contrib", "year": 2025, - "value": 69247.07556176186, + "value": 67182.8121483326, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "jsa_contrib", @@ -3301,7 +4031,9 @@ { "metric_id": "caseloads.jsa_contrib", "year": 2026, - "value": 69510.21602272987, + "value": 67438.10866451263, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "jsa_contrib", @@ -3310,7 +4042,9 @@ { "metric_id": "caseloads.jsa_contrib", "year": 2027, - "value": 69767.40603733063, + "value": 67687.63075757027, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "jsa_contrib", @@ -3319,7 +4053,9 @@ { "metric_id": "caseloads.jsa_contrib", "year": 2028, - "value": 70046.47099995613, + "value": 67958.37626743317, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "jsa_contrib", @@ -3328,7 +4064,9 @@ { "metric_id": "caseloads.jsa_contrib", "year": 2029, - "value": 70354.67849779129, + "value": 68257.39367341995, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "jsa_contrib", @@ -3337,7 +4075,9 @@ { "metric_id": "caseloads.jsa_contrib", "year": 2030, - "value": 70671.27628540993, + "value": 68564.55532884598, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "jsa_contrib", @@ -3346,7 +4086,9 @@ { "metric_id": "caseloads.jsa_contrib", "year": 2031, - "value": 70975.29594826698, + "value": 68859.38249921799, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "jsa_contrib", @@ -3355,7 +4097,9 @@ { "metric_id": "spending.income_support", "year": 2025, - "value": 168861494.13127527, + "value": 123955194.70721354, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "income_support", @@ -3365,6 +4109,8 @@ "metric_id": "spending.income_support", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "income_support", @@ -3374,6 +4120,8 @@ "metric_id": "spending.income_support", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "income_support", @@ -3383,6 +4131,8 @@ "metric_id": "spending.income_support", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "income_support", @@ -3392,6 +4142,8 @@ "metric_id": "spending.income_support", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "income_support", @@ -3401,6 +4153,8 @@ "metric_id": "spending.income_support", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "income_support", @@ -3410,6 +4164,8 @@ "metric_id": "spending.income_support", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "income_support", @@ -3418,7 +4174,9 @@ { "metric_id": "caseloads.income_support", "year": 2025, - "value": 34027.1418364048, + "value": 24803.04834920168, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "income_support", @@ -3428,6 +4186,8 @@ "metric_id": "caseloads.income_support", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "income_support", @@ -3437,6 +4197,8 @@ "metric_id": "caseloads.income_support", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "income_support", @@ -3446,6 +4208,8 @@ "metric_id": "caseloads.income_support", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "income_support", @@ -3455,6 +4219,8 @@ "metric_id": "caseloads.income_support", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "income_support", @@ -3464,6 +4230,8 @@ "metric_id": "caseloads.income_support", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "income_support", @@ -3473,6 +4241,8 @@ "metric_id": "caseloads.income_support", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "income_support", @@ -3482,6 +4252,8 @@ "metric_id": "spending.working_tax_credit", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "working_tax_credit", @@ -3491,6 +4263,8 @@ "metric_id": "spending.working_tax_credit", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "working_tax_credit", @@ -3500,6 +4274,8 @@ "metric_id": "spending.working_tax_credit", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "working_tax_credit", @@ -3509,6 +4285,8 @@ "metric_id": "spending.working_tax_credit", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "working_tax_credit", @@ -3518,6 +4296,8 @@ "metric_id": "spending.working_tax_credit", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "working_tax_credit", @@ -3527,6 +4307,8 @@ "metric_id": "spending.working_tax_credit", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "working_tax_credit", @@ -3536,6 +4318,8 @@ "metric_id": "spending.working_tax_credit", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "working_tax_credit", @@ -3545,6 +4329,8 @@ "metric_id": "caseloads.working_tax_credit", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "working_tax_credit", @@ -3554,6 +4340,8 @@ "metric_id": "caseloads.working_tax_credit", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "working_tax_credit", @@ -3563,6 +4351,8 @@ "metric_id": "caseloads.working_tax_credit", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "working_tax_credit", @@ -3572,6 +4362,8 @@ "metric_id": "caseloads.working_tax_credit", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "working_tax_credit", @@ -3581,6 +4373,8 @@ "metric_id": "caseloads.working_tax_credit", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "working_tax_credit", @@ -3590,6 +4384,8 @@ "metric_id": "caseloads.working_tax_credit", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "working_tax_credit", @@ -3599,6 +4395,8 @@ "metric_id": "caseloads.working_tax_credit", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "working_tax_credit", @@ -3608,6 +4406,8 @@ "metric_id": "spending.child_tax_credit", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "child_tax_credit", @@ -3617,6 +4417,8 @@ "metric_id": "spending.child_tax_credit", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "child_tax_credit", @@ -3626,6 +4428,8 @@ "metric_id": "spending.child_tax_credit", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "child_tax_credit", @@ -3635,6 +4439,8 @@ "metric_id": "spending.child_tax_credit", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "child_tax_credit", @@ -3644,6 +4450,8 @@ "metric_id": "spending.child_tax_credit", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "child_tax_credit", @@ -3653,6 +4461,8 @@ "metric_id": "spending.child_tax_credit", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "child_tax_credit", @@ -3662,6 +4472,8 @@ "metric_id": "spending.child_tax_credit", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "child_tax_credit", @@ -3671,6 +4483,8 @@ "metric_id": "caseloads.child_tax_credit", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "child_tax_credit", @@ -3680,6 +4494,8 @@ "metric_id": "caseloads.child_tax_credit", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "child_tax_credit", @@ -3689,6 +4505,8 @@ "metric_id": "caseloads.child_tax_credit", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "child_tax_credit", @@ -3698,6 +4516,8 @@ "metric_id": "caseloads.child_tax_credit", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "child_tax_credit", @@ -3707,6 +4527,8 @@ "metric_id": "caseloads.child_tax_credit", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "child_tax_credit", @@ -3716,6 +4538,8 @@ "metric_id": "caseloads.child_tax_credit", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "child_tax_credit", @@ -3725,6 +4549,8 @@ "metric_id": "caseloads.child_tax_credit", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "child_tax_credit", @@ -3734,6 +4560,8 @@ "metric_id": "spending.incapacity_benefit", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "incapacity_benefit", @@ -3743,6 +4571,8 @@ "metric_id": "spending.incapacity_benefit", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "incapacity_benefit", @@ -3752,6 +4582,8 @@ "metric_id": "spending.incapacity_benefit", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "incapacity_benefit", @@ -3761,6 +4593,8 @@ "metric_id": "spending.incapacity_benefit", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "incapacity_benefit", @@ -3770,6 +4604,8 @@ "metric_id": "spending.incapacity_benefit", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "incapacity_benefit", @@ -3779,6 +4615,8 @@ "metric_id": "spending.incapacity_benefit", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "incapacity_benefit", @@ -3788,6 +4626,8 @@ "metric_id": "spending.incapacity_benefit", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "incapacity_benefit", @@ -3797,6 +4637,8 @@ "metric_id": "caseloads.incapacity_benefit", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "incapacity_benefit", @@ -3806,6 +4648,8 @@ "metric_id": "caseloads.incapacity_benefit", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "incapacity_benefit", @@ -3815,6 +4659,8 @@ "metric_id": "caseloads.incapacity_benefit", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "incapacity_benefit", @@ -3824,6 +4670,8 @@ "metric_id": "caseloads.incapacity_benefit", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "incapacity_benefit", @@ -3833,6 +4681,8 @@ "metric_id": "caseloads.incapacity_benefit", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "incapacity_benefit", @@ -3842,6 +4692,8 @@ "metric_id": "caseloads.incapacity_benefit", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "incapacity_benefit", @@ -3851,6 +4703,8 @@ "metric_id": "caseloads.incapacity_benefit", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "incapacity_benefit", @@ -3859,7 +4713,9 @@ { "metric_id": "spending.pip", "year": 2025, - "value": 26930742886.35225, + "value": 27050796518.958164, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "pip", @@ -3868,7 +4724,9 @@ { "metric_id": "spending.pip", "year": 2026, - "value": 28062341229.807953, + "value": 28187504820.35819, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "pip", @@ -3877,7 +4735,9 @@ { "metric_id": "spending.pip", "year": 2027, - "value": 28813932611.682465, + "value": 28942448438.6212, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "pip", @@ -3886,7 +4746,9 @@ { "metric_id": "spending.pip", "year": 2028, - "value": 29507723865.475834, + "value": 29639334288.533737, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "pip", @@ -3895,7 +4757,9 @@ { "metric_id": "spending.pip", "year": 2029, - "value": 30230279635.690178, + "value": 30365112782.59276, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "pip", @@ -3904,7 +4768,9 @@ { "metric_id": "spending.pip", "year": 2030, - "value": 30973577012.717224, + "value": 31111725337.197277, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "pip", @@ -3913,7 +4779,9 @@ { "metric_id": "spending.pip", "year": 2031, - "value": 31728969558.821815, + "value": 31870426624.368805, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "pip", @@ -3922,7 +4790,9 @@ { "metric_id": "caseloads.pip", "year": 2025, - "value": 3561191.43436794, + "value": 3581346.50325121, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "pip", @@ -3931,7 +4801,9 @@ { "metric_id": "caseloads.pip", "year": 2026, - "value": 3574724.089687288, + "value": 3594955.7513322085, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "pip", @@ -3940,7 +4812,9 @@ { "metric_id": "caseloads.pip", "year": 2027, - "value": 3587950.6320851147, + "value": 3608257.1502955705, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "pip", @@ -3949,7 +4823,9 @@ { "metric_id": "caseloads.pip", "year": 2028, - "value": 3602302.242634833, + "value": 3622690.0020009577, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "pip", @@ -3958,7 +4834,9 @@ { "metric_id": "caseloads.pip", "year": 2029, - "value": 3618152.4307922274, + "value": 3638629.8922510594, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "pip", @@ -3967,7 +4845,9 @@ { "metric_id": "caseloads.pip", "year": 2030, - "value": 3634434.2309794426, + "value": 3655003.834502399, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "pip", @@ -3976,7 +4856,9 @@ { "metric_id": "caseloads.pip", "year": 2031, - "value": 3650069.225597918, + "value": 3670720.34740828, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "pip", @@ -3985,7 +4867,9 @@ { "metric_id": "spending.dla", "year": 2025, - "value": 7484533549.186283, + "value": 7519515429.343498, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "dla", @@ -3994,7 +4878,9 @@ { "metric_id": "spending.dla", "year": 2026, - "value": 7798317749.580545, + "value": 7834750092.336622, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "dla", @@ -4003,7 +4889,9 @@ { "metric_id": "spending.dla", "year": 2027, - "value": 8007179295.781675, + "value": 8044587394.8355665, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "dla", @@ -4012,7 +4900,9 @@ { "metric_id": "spending.dla", "year": 2028, - "value": 8199978749.538992, + "value": 8238287553.0089445, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "dla", @@ -4021,7 +4911,9 @@ { "metric_id": "spending.dla", "year": 2029, - "value": 8400772001.314109, + "value": 8440018870.958048, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "dla", @@ -4030,7 +4922,9 @@ { "metric_id": "spending.dla", "year": 2030, - "value": 8607328838.619286, + "value": 8647540725.08345, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "dla", @@ -4039,7 +4933,9 @@ { "metric_id": "spending.dla", "year": 2031, - "value": 8817246875.370478, + "value": 8858422643.224787, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "dla", @@ -4048,7 +4944,9 @@ { "metric_id": "caseloads.dla", "year": 2025, - "value": 1334888.5791397095, + "value": 1296293.76486139, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "dla", @@ -4057,7 +4955,9 @@ { "metric_id": "caseloads.dla", "year": 2026, - "value": 1339961.2010401338, + "value": 1301219.7249682397, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "dla", @@ -4066,7 +4966,9 @@ { "metric_id": "caseloads.dla", "year": 2027, - "value": 1344919.083814323, + "value": 1306034.2623415291, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "dla", @@ -4075,7 +4977,9 @@ { "metric_id": "caseloads.dla", "year": 2028, - "value": 1350298.687692389, + "value": 1311258.3262985945, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "dla", @@ -4084,7 +4988,9 @@ { "metric_id": "caseloads.dla", "year": 2029, - "value": 1356240.0184779614, + "value": 1317027.8841654807, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "dla", @@ -4093,7 +4999,9 @@ { "metric_id": "caseloads.dla", "year": 2030, - "value": 1362343.138695091, + "value": 1322954.550306335, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "dla", @@ -4102,7 +5010,9 @@ { "metric_id": "caseloads.dla", "year": 2031, - "value": 1368203.8070302308, + "value": 1328643.2488841116, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "dla", @@ -4111,7 +5021,9 @@ { "metric_id": "spending.attendance_allowance", "year": 2025, - "value": 8738849002.944973, + "value": 8713069613.537264, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "attendance_allowance", @@ -4120,7 +5032,9 @@ { "metric_id": "spending.attendance_allowance", "year": 2026, - "value": 9105426589.661386, + "value": 9078584120.844625, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "attendance_allowance", @@ -4129,7 +5043,9 @@ { "metric_id": "spending.attendance_allowance", "year": 2027, - "value": 9349296216.992481, + "value": 9321734807.6616, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "attendance_allowance", @@ -4138,7 +5054,9 @@ { "metric_id": "spending.attendance_allowance", "year": 2028, - "value": 9574411518.877106, + "value": 9546186520.166021, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "attendance_allowance", @@ -4147,7 +5065,9 @@ { "metric_id": "spending.attendance_allowance", "year": 2029, - "value": 9808860827.118614, + "value": 9779944679.35845, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "attendance_allowance", @@ -4156,7 +5076,9 @@ { "metric_id": "spending.attendance_allowance", "year": 2030, - "value": 10050039243.53858, + "value": 10020412141.96302, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "attendance_allowance", @@ -4165,7 +5087,9 @@ { "metric_id": "spending.attendance_allowance", "year": 2031, - "value": 10295142509.771086, + "value": 10264773293.632841, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "attendance_allowance", @@ -4174,7 +5098,9 @@ { "metric_id": "caseloads.attendance_allowance", "year": 2025, - "value": 1716598.859297052, + "value": 1701405.523672521, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "attendance_allowance", @@ -4183,7 +5109,9 @@ { "metric_id": "caseloads.attendance_allowance", "year": 2026, - "value": 1723121.9867911339, + "value": 1707870.9254432172, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "attendance_allowance", @@ -4192,7 +5120,9 @@ { "metric_id": "caseloads.attendance_allowance", "year": 2027, - "value": 1729497.5712008923, + "value": 1714190.0767204762, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "attendance_allowance", @@ -4201,7 +5131,9 @@ { "metric_id": "caseloads.attendance_allowance", "year": 2028, - "value": 1736415.4675818533, + "value": 1721046.7521996498, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "attendance_allowance", @@ -4210,7 +5142,9 @@ { "metric_id": "caseloads.attendance_allowance", "year": 2029, - "value": 1744055.7271453738, + "value": 1728619.3880579919, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "attendance_allowance", @@ -4219,7 +5153,9 @@ { "metric_id": "caseloads.attendance_allowance", "year": 2030, - "value": 1751904.025848925, + "value": 1736398.2265275419, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "attendance_allowance", @@ -4228,7 +5164,9 @@ { "metric_id": "caseloads.attendance_allowance", "year": 2031, - "value": 1759440.5596084595, + "value": 1743864.7361019552, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "attendance_allowance", @@ -4237,7 +5175,9 @@ { "metric_id": "spending.carers_allowance", "year": 2025, - "value": 4648737205.678978, + "value": 4498304384.942733, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "carers_allowance", @@ -4246,7 +5186,9 @@ { "metric_id": "spending.carers_allowance", "year": 2026, - "value": 4842862964.368323, + "value": 4686148233.621847, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "carers_allowance", @@ -4255,7 +5197,9 @@ { "metric_id": "spending.carers_allowance", "year": 2027, - "value": 4972568907.329457, + "value": 4811656899.117326, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "carers_allowance", @@ -4264,7 +5208,9 @@ { "metric_id": "spending.carers_allowance", "year": 2028, - "value": 5092300033.036156, + "value": 4927513579.343729, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "carers_allowance", @@ -4273,7 +5219,9 @@ { "metric_id": "spending.carers_allowance", "year": 2029, - "value": 5216995990.439329, + "value": 5048174373.178411, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "carers_allowance", @@ -4282,7 +5230,9 @@ { "metric_id": "spending.carers_allowance", "year": 2030, - "value": 5345270444.763329, + "value": 5168683430.088493, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "carers_allowance", @@ -4291,7 +5241,9 @@ { "metric_id": "spending.carers_allowance", "year": 2031, - "value": 5475632307.34242, + "value": 5294728594.298446, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "carers_allowance", @@ -4300,7 +5252,9 @@ { "metric_id": "caseloads.carers_allowance", "year": 2025, - "value": 1073214.7707251012, + "value": 1038485.6135211289, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "carers_allowance", @@ -4309,7 +5263,9 @@ { "metric_id": "caseloads.carers_allowance", "year": 2026, - "value": 1077293.0261095166, + "value": 1042431.8938074112, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "carers_allowance", @@ -4318,7 +5274,9 @@ { "metric_id": "caseloads.carers_allowance", "year": 2027, - "value": 1081279.032247901, + "value": 1046288.9127022028, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "carers_allowance", @@ -4327,7 +5285,9 @@ { "metric_id": "caseloads.carers_allowance", "year": 2028, - "value": 1085604.089460224, + "value": 1050474.0211501122, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "carers_allowance", @@ -4336,7 +5296,9 @@ { "metric_id": "caseloads.carers_allowance", "year": 2029, - "value": 1090380.7663949132, + "value": 1055096.1227512658, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "carers_allowance", @@ -4345,7 +5307,9 @@ { "metric_id": "caseloads.carers_allowance", "year": 2030, - "value": 1095287.5083169043, + "value": 1059103.4548994005, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "carers_allowance", @@ -4354,7 +5318,9 @@ { "metric_id": "caseloads.carers_allowance", "year": 2031, - "value": 1099999.3295924067, + "value": 1063657.5973686576, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "carers_allowance", @@ -4363,7 +5329,9 @@ { "metric_id": "spending.carer_support_payment", "year": 2025, - "value": 375132605.30346316, + "value": 352284662.9714799, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "carer_support_payment", @@ -4372,7 +5340,9 @@ { "metric_id": "spending.carer_support_payment", "year": 2026, - "value": 390797693.02699834, + "value": 366995656.0579343, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "carer_support_payment", @@ -4381,7 +5351,9 @@ { "metric_id": "spending.carer_support_payment", "year": 2027, - "value": 401264392.71339667, + "value": 376824870.322693, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "carer_support_payment", @@ -4390,7 +5362,9 @@ { "metric_id": "spending.carer_support_payment", "year": 2028, - "value": 410926172.48663545, + "value": 385898182.16357577, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "carer_support_payment", @@ -4399,7 +5373,9 @@ { "metric_id": "spending.carer_support_payment", "year": 2029, - "value": 420988584.3188077, + "value": 395347728.7181926, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "carer_support_payment", @@ -4408,7 +5384,9 @@ { "metric_id": "spending.carer_support_payment", "year": 2030, - "value": 431339766.7553348, + "value": 405068460.50986433, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "carer_support_payment", @@ -4417,7 +5395,9 @@ { "metric_id": "spending.carer_support_payment", "year": 2031, - "value": 441859394.4117867, + "value": 414946587.8089589, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "carer_support_payment", @@ -4426,7 +5406,9 @@ { "metric_id": "caseloads.carer_support_payment", "year": 2025, - "value": 86603.70229154825, + "value": 81328.99044907093, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "carer_support_payment", @@ -4435,7 +5417,9 @@ { "metric_id": "caseloads.carer_support_payment", "year": 2026, - "value": 86932.79830861092, + "value": 81638.04422974586, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "carer_support_payment", @@ -4444,7 +5428,9 @@ { "metric_id": "caseloads.carer_support_payment", "year": 2027, - "value": 87254.451836586, + "value": 81940.10755866766, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "carer_support_payment", @@ -4453,7 +5439,9 @@ { "metric_id": "caseloads.carer_support_payment", "year": 2028, - "value": 87603.46610051394, + "value": 82267.86362826824, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "carer_support_payment", @@ -4462,7 +5450,9 @@ { "metric_id": "caseloads.carer_support_payment", "year": 2029, - "value": 87988.92237108946, + "value": 82629.84296369553, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "carer_support_payment", @@ -4471,7 +5461,9 @@ { "metric_id": "caseloads.carer_support_payment", "year": 2030, - "value": 88384.87467557192, + "value": 83001.67959588766, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "carer_support_payment", @@ -4480,7 +5472,9 @@ { "metric_id": "caseloads.carer_support_payment", "year": 2031, - "value": 88765.09786373377, + "value": 83358.58633065224, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "carer_support_payment", @@ -4490,6 +5484,8 @@ "metric_id": "spending.scottish_carer_supplement", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "scottish_carer_supplement", @@ -4498,7 +5494,9 @@ { "metric_id": "spending.scottish_carer_supplement", "year": 2026, - "value": 52889916.61334165, + "value": 49668588.102493696, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "scottish_carer_supplement", @@ -4507,7 +5505,9 @@ { "metric_id": "spending.scottish_carer_supplement", "year": 2027, - "value": 53085610.62761456, + "value": 49852363.43918431, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "scottish_carer_supplement", @@ -4516,7 +5516,9 @@ { "metric_id": "spending.scottish_carer_supplement", "year": 2028, - "value": 53297950.914309174, + "value": 50051770.239931166, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "scottish_carer_supplement", @@ -4525,7 +5527,9 @@ { "metric_id": "spending.scottish_carer_supplement", "year": 2029, - "value": 53532462.518737875, + "value": 50271998.47644251, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "scottish_carer_supplement", @@ -4534,7 +5538,9 @@ { "metric_id": "spending.scottish_carer_supplement", "year": 2030, - "value": 53773359.910451815, + "value": 50498223.892546244, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "scottish_carer_supplement", @@ -4543,7 +5549,9 @@ { "metric_id": "spending.scottish_carer_supplement", "year": 2031, - "value": 54004687.70741227, + "value": 50715365.95869056, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "scottish_carer_supplement", @@ -4553,6 +5561,8 @@ "metric_id": "caseloads.scottish_carer_supplement", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "scottish_carer_supplement", @@ -4561,7 +5571,9 @@ { "metric_id": "caseloads.scottish_carer_supplement", "year": 2026, - "value": 86932.79830861092, + "value": 81638.04422974586, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "scottish_carer_supplement", @@ -4570,7 +5582,9 @@ { "metric_id": "caseloads.scottish_carer_supplement", "year": 2027, - "value": 87254.451836586, + "value": 81940.10755866766, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "scottish_carer_supplement", @@ -4579,7 +5593,9 @@ { "metric_id": "caseloads.scottish_carer_supplement", "year": 2028, - "value": 87603.46610051394, + "value": 82267.86362826824, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "scottish_carer_supplement", @@ -4588,7 +5604,9 @@ { "metric_id": "caseloads.scottish_carer_supplement", "year": 2029, - "value": 87988.92237108946, + "value": 82629.84296369553, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "scottish_carer_supplement", @@ -4597,7 +5615,9 @@ { "metric_id": "caseloads.scottish_carer_supplement", "year": 2030, - "value": 88384.87467557192, + "value": 83001.67959588766, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "scottish_carer_supplement", @@ -4606,7 +5626,9 @@ { "metric_id": "caseloads.scottish_carer_supplement", "year": 2031, - "value": 88765.09786373377, + "value": 83358.58633065224, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "scottish_carer_supplement", @@ -4615,7 +5637,9 @@ { "metric_id": "spending.sda", "year": 2025, - "value": 22916850.46898842, + "value": 26001911.186065674, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "sda", @@ -4624,7 +5648,9 @@ { "metric_id": "spending.sda", "year": 2026, - "value": 23874085.23946771, + "value": 27088007.985394344, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "sda", @@ -4633,7 +5659,9 @@ { "metric_id": "spending.sda", "year": 2027, - "value": 24513501.268621735, + "value": 27813501.58527428, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "sda", @@ -4642,7 +5670,9 @@ { "metric_id": "spending.sda", "year": 2028, - "value": 25103746.46338744, + "value": 28483206.305987563, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "sda", @@ -4651,7 +5681,9 @@ { "metric_id": "spending.sda", "year": 2029, - "value": 25718463.554498497, + "value": 29180676.754239403, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "sda", @@ -4660,7 +5692,9 @@ { "metric_id": "spending.sda", "year": 2030, - "value": 26350824.69866039, + "value": 29898167.047436927, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "sda", @@ -4669,7 +5703,9 @@ { "metric_id": "spending.sda", "year": 2031, - "value": 26993475.082385655, + "value": 30627272.264840692, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "sda", @@ -4678,7 +5714,9 @@ { "metric_id": "caseloads.sda", "year": 2025, - "value": 3832.2492423057556, + "value": 4348.145683288574, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "sda", @@ -4687,7 +5725,9 @@ { "metric_id": "caseloads.sda", "year": 2026, - "value": 3846.8119764328003, + "value": 4364.668739795685, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "sda", @@ -4696,7 +5736,9 @@ { "metric_id": "caseloads.sda", "year": 2027, - "value": 3861.0452857017517, + "value": 4380.818064212799, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "sda", @@ -4705,7 +5747,9 @@ { "metric_id": "caseloads.sda", "year": 2028, - "value": 3876.4891839027405, + "value": 4398.341153144836, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "sda", @@ -4714,7 +5758,9 @@ { "metric_id": "caseloads.sda", "year": 2029, - "value": 3893.5458583831787, + "value": 4417.694038391113, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "sda", @@ -4723,7 +5769,9 @@ { "metric_id": "caseloads.sda", "year": 2030, - "value": 3911.066900253296, + "value": 4437.573884487152, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "sda", @@ -4732,7 +5780,9 @@ { "metric_id": "caseloads.sda", "year": 2031, - "value": 3927.8920154571533, + "value": 4456.655462741852, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "sda", @@ -4741,7 +5791,9 @@ { "metric_id": "spending.iidb", "year": 2025, - "value": 507122677.50677097, + "value": 505396316.7142715, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "iidb", @@ -4750,7 +5802,9 @@ { "metric_id": "spending.iidb", "year": 2026, - "value": 520757913.07925874, + "value": 518985130.7359581, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "iidb", @@ -4759,7 +5813,9 @@ { "metric_id": "spending.iidb", "year": 2027, - "value": 533138408.2492215, + "value": 531323482.42515385, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "iidb", @@ -4768,7 +5824,9 @@ { "metric_id": "spending.iidb", "year": 2028, - "value": 545976365.926789, + "value": 544117734.2383146, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "iidb", @@ -4777,7 +5835,9 @@ { "metric_id": "spending.iidb", "year": 2029, - "value": 559346215.9575605, + "value": 557442066.9128101, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "iidb", @@ -4786,7 +5846,9 @@ { "metric_id": "spending.iidb", "year": 2030, - "value": 573100581.8244832, + "value": 571149605.5284191, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "iidb", @@ -4795,7 +5857,9 @@ { "metric_id": "spending.iidb", "year": 2031, - "value": 587077716.6684005, + "value": 585077668.0455391, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "iidb", @@ -4804,7 +5868,9 @@ { "metric_id": "caseloads.iidb", "year": 2025, - "value": 136309.47050744295, + "value": 137473.5583550036, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "iidb", @@ -4813,7 +5879,9 @@ { "metric_id": "caseloads.iidb", "year": 2026, - "value": 136827.45147165656, + "value": 137995.96156597137, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "iidb", @@ -4822,7 +5890,9 @@ { "metric_id": "caseloads.iidb", "year": 2027, - "value": 137333.71539336443, + "value": 138506.54905071855, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "iidb", @@ -4831,7 +5901,9 @@ { "metric_id": "caseloads.iidb", "year": 2028, - "value": 137883.04356488585, + "value": 139060.56764179468, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "iidb", @@ -4840,7 +5912,9 @@ { "metric_id": "caseloads.iidb", "year": 2029, - "value": 138489.7313208878, + "value": 139672.4357754588, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "iidb", @@ -4849,7 +5923,9 @@ { "metric_id": "caseloads.iidb", "year": 2030, - "value": 139112.9398522377, + "value": 140300.96557214856, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "iidb", @@ -4858,7 +5934,9 @@ { "metric_id": "caseloads.iidb", "year": 2031, - "value": 139711.38968542218, + "value": 140904.25975701213, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "iidb", @@ -4867,7 +5945,9 @@ { "metric_id": "spending.afcs", "year": 2025, - "value": 568151093.7335573, + "value": 608337715.55495, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "afcs", @@ -4876,7 +5956,9 @@ { "metric_id": "spending.afcs", "year": 2026, - "value": 583427211.5685618, + "value": 624694356.9666108, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "afcs", @@ -4885,7 +5967,9 @@ { "metric_id": "spending.afcs", "year": 2027, - "value": 597297627.7972465, + "value": 639545878.8404102, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "afcs", @@ -4894,7 +5978,9 @@ { "metric_id": "spending.afcs", "year": 2028, - "value": 611680516.7185693, + "value": 654946115.3175836, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "afcs", @@ -4903,7 +5989,9 @@ { "metric_id": "spending.afcs", "year": 2029, - "value": 626659337.1968452, + "value": 670984438.3106201, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "afcs", @@ -4912,7 +6000,9 @@ { "metric_id": "spending.afcs", "year": 2030, - "value": 642068929.7703295, + "value": 687483985.4915761, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "afcs", @@ -4921,7 +6011,9 @@ { "metric_id": "spending.afcs", "year": 2031, - "value": 657728126.7655065, + "value": 704248973.1763016, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "afcs", @@ -4930,7 +6022,9 @@ { "metric_id": "caseloads.afcs", "year": 2025, - "value": 87231.42297008634, + "value": 93556.20288914442, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "afcs", @@ -4939,7 +6033,9 @@ { "metric_id": "caseloads.afcs", "year": 2026, - "value": 87562.9048769474, + "value": 93911.72057116032, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "afcs", @@ -4948,7 +6044,9 @@ { "metric_id": "caseloads.afcs", "year": 2027, - "value": 87886.88816124201, + "value": 94259.19729825854, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "afcs", @@ -4957,7 +6055,9 @@ { "metric_id": "caseloads.afcs", "year": 2028, - "value": 88238.43054047227, + "value": 94636.23070755601, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "afcs", @@ -4966,7 +6066,9 @@ { "metric_id": "caseloads.afcs", "year": 2029, - "value": 88626.6806499958, + "value": 95052.63239446282, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "afcs", @@ -4975,7 +6077,9 @@ { "metric_id": "caseloads.afcs", "year": 2030, - "value": 89025.50376203656, + "value": 95480.37335321307, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "afcs", @@ -4984,7 +6088,9 @@ { "metric_id": "caseloads.afcs", "year": 2031, - "value": 89408.48312401772, + "value": 95890.9378361702, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "afcs", @@ -4993,7 +6099,9 @@ { "metric_id": "spending.child_benefit", "year": 2025, - "value": 16225320972.639776, + "value": 16193470845.603186, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "child_benefit", @@ -5002,7 +6110,9 @@ { "metric_id": "spending.child_benefit", "year": 2026, - "value": 16896152580.691387, + "value": 16865082606.210407, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "child_benefit", @@ -5011,7 +6121,9 @@ { "metric_id": "spending.child_benefit", "year": 2027, - "value": 17341380924.037914, + "value": 17309224587.32687, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "child_benefit", @@ -5020,7 +6132,9 @@ { "metric_id": "spending.child_benefit", "year": 2028, - "value": 17755008028.657654, + "value": 17722732649.511974, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "child_benefit", @@ -5029,7 +6143,9 @@ { "metric_id": "spending.child_benefit", "year": 2029, - "value": 18184587501.076538, + "value": 18149355497.8589, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "child_benefit", @@ -5038,7 +6154,9 @@ { "metric_id": "spending.child_benefit", "year": 2030, - "value": 18623367766.380272, + "value": 18589683648.812527, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "child_benefit", @@ -5047,7 +6165,9 @@ { "metric_id": "spending.child_benefit", "year": 2031, - "value": 19051556819.483387, + "value": 19019347515.30189, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "child_benefit", @@ -5056,7 +6176,9 @@ { "metric_id": "caseloads.child_benefit", "year": 2025, - "value": 8144503.8247400075, + "value": 8124933.04077065, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "child_benefit", @@ -5065,7 +6187,9 @@ { "metric_id": "caseloads.child_benefit", "year": 2026, - "value": 8170465.289068207, + "value": 8151661.30214186, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "child_benefit", @@ -5074,7 +6198,9 @@ { "metric_id": "caseloads.child_benefit", "year": 2027, - "value": 8197312.676083803, + "value": 8178496.28433007, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "child_benefit", @@ -5083,7 +6209,9 @@ { "metric_id": "caseloads.child_benefit", "year": 2028, - "value": 8228525.797302961, + "value": 8209901.52580525, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "child_benefit", @@ -5092,7 +6220,9 @@ { "metric_id": "caseloads.child_benefit", "year": 2029, - "value": 8262403.058013514, + "value": 8242994.678169802, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "child_benefit", @@ -5101,7 +6231,9 @@ { "metric_id": "caseloads.child_benefit", "year": 2030, - "value": 8295971.741483018, + "value": 8277445.224295765, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "child_benefit", @@ -5110,7 +6242,9 @@ { "metric_id": "caseloads.child_benefit", "year": 2031, - "value": 8318393.685991436, + "value": 8301138.966311127, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "child_benefit", @@ -5119,7 +6253,9 @@ { "metric_id": "spending.scottish_child_payment", "year": 2025, - "value": 497726869.8419192, + "value": 496826543.81597674, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "scottish_child_payment", @@ -5128,7 +6264,9 @@ { "metric_id": "spending.scottish_child_payment", "year": 2026, - "value": 519612809.90459955, + "value": 518442587.758203, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "scottish_child_payment", @@ -5137,7 +6275,9 @@ { "metric_id": "spending.scottish_child_payment", "year": 2027, - "value": 533556568.34392536, + "value": 532354940.6639104, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "scottish_child_payment", @@ -5146,7 +6286,9 @@ { "metric_id": "spending.scottish_child_payment", "year": 2028, - "value": 546831672.8782737, + "value": 545600150.271133, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "scottish_child_payment", @@ -5155,7 +6297,9 @@ { "metric_id": "spending.scottish_child_payment", "year": 2029, - "value": 557690457.6552503, + "value": 557257209.815226, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "scottish_child_payment", @@ -5164,7 +6308,9 @@ { "metric_id": "spending.scottish_child_payment", "year": 2030, - "value": 571385467.1006676, + "value": 570941579.8039502, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "scottish_child_payment", @@ -5173,7 +6319,9 @@ { "metric_id": "spending.scottish_child_payment", "year": 2031, - "value": 579782864.4065932, + "value": 579837131.7746521, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "scottish_child_payment", @@ -5182,7 +6330,9 @@ { "metric_id": "caseloads.scottish_child_payment", "year": 2025, - "value": 352547.7069185972, + "value": 351909.9919484854, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "scottish_child_payment", @@ -5191,7 +6341,9 @@ { "metric_id": "caseloads.scottish_child_payment", "year": 2026, - "value": 354345.8819241524, + "value": 353547.8581060171, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "scottish_child_payment", @@ -5200,7 +6352,9 @@ { "metric_id": "caseloads.scottish_child_payment", "year": 2027, - "value": 355656.9695440531, + "value": 354855.99119508266, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "scottish_child_payment", @@ -5209,7 +6363,9 @@ { "metric_id": "caseloads.scottish_child_payment", "year": 2028, - "value": 357079.5769625902, + "value": 356275.3960905075, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "scottish_child_payment", @@ -5218,7 +6374,9 @@ { "metric_id": "caseloads.scottish_child_payment", "year": 2029, - "value": 356899.05693626404, + "value": 356621.7960590124, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "scottish_child_payment", @@ -5227,7 +6385,9 @@ { "metric_id": "caseloads.scottish_child_payment", "year": 2030, - "value": 358505.11331129074, + "value": 358226.60453784466, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "scottish_child_payment", @@ -5236,7 +6396,9 @@ { "metric_id": "caseloads.scottish_child_payment", "year": 2031, - "value": 356640.845736742, + "value": 356674.22713041306, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "scottish_child_payment", @@ -5246,6 +6408,8 @@ "metric_id": "spending.two_child_limit_payment", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "two_child_limit_payment", @@ -5255,6 +6419,8 @@ "metric_id": "spending.two_child_limit_payment", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "two_child_limit_payment", @@ -5264,6 +6430,8 @@ "metric_id": "spending.two_child_limit_payment", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "two_child_limit_payment", @@ -5273,6 +6441,8 @@ "metric_id": "spending.two_child_limit_payment", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "two_child_limit_payment", @@ -5282,6 +6452,8 @@ "metric_id": "spending.two_child_limit_payment", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "two_child_limit_payment", @@ -5291,6 +6463,8 @@ "metric_id": "spending.two_child_limit_payment", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "two_child_limit_payment", @@ -5300,6 +6474,8 @@ "metric_id": "spending.two_child_limit_payment", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "two_child_limit_payment", @@ -5309,6 +6485,8 @@ "metric_id": "caseloads.two_child_limit_payment", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "two_child_limit_payment", @@ -5318,6 +6496,8 @@ "metric_id": "caseloads.two_child_limit_payment", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "two_child_limit_payment", @@ -5327,6 +6507,8 @@ "metric_id": "caseloads.two_child_limit_payment", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "two_child_limit_payment", @@ -5336,6 +6518,8 @@ "metric_id": "caseloads.two_child_limit_payment", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "two_child_limit_payment", @@ -5345,6 +6529,8 @@ "metric_id": "caseloads.two_child_limit_payment", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "two_child_limit_payment", @@ -5354,6 +6540,8 @@ "metric_id": "caseloads.two_child_limit_payment", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "two_child_limit_payment", @@ -5363,6 +6551,8 @@ "metric_id": "caseloads.two_child_limit_payment", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "two_child_limit_payment", @@ -5371,7 +6561,9 @@ { "metric_id": "spending.healthy_start_vouchers", "year": 2025, - "value": 53970826.290031455, + "value": 52030589.486631, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "healthy_start_vouchers", @@ -5380,7 +6572,9 @@ { "metric_id": "spending.healthy_start_vouchers", "year": 2026, - "value": 54175917.177720994, + "value": 52228307.60199582, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "healthy_start_vouchers", @@ -5389,7 +6583,9 @@ { "metric_id": "spending.healthy_start_vouchers", "year": 2027, - "value": 54376369.043138646, + "value": 52421553.321768366, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "healthy_start_vouchers", @@ -5398,7 +6594,9 @@ { "metric_id": "spending.healthy_start_vouchers", "year": 2028, - "value": 54593871.5011113, + "value": 52631236.984368056, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "healthy_start_vouchers", @@ -5407,7 +6605,9 @@ { "metric_id": "spending.healthy_start_vouchers", "year": 2029, - "value": 54834085.12924674, + "value": 52862815.027035154, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "healthy_start_vouchers", @@ -5416,7 +6616,9 @@ { "metric_id": "spending.healthy_start_vouchers", "year": 2030, - "value": 55080840.175692044, + "value": 53100698.99261543, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "healthy_start_vouchers", @@ -5425,7 +6627,9 @@ { "metric_id": "spending.healthy_start_vouchers", "year": 2031, - "value": 55317793.086847685, + "value": 53329031.82253713, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "healthy_start_vouchers", @@ -5434,7 +6638,9 @@ { "metric_id": "caseloads.healthy_start_vouchers", "year": 2025, - "value": 208602.1595891416, + "value": 200297.54610317945, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "healthy_start_vouchers", @@ -5443,7 +6649,9 @@ { "metric_id": "caseloads.healthy_start_vouchers", "year": 2026, - "value": 209394.85441070795, + "value": 201058.68415096402, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "healthy_start_vouchers", @@ -5452,7 +6660,9 @@ { "metric_id": "caseloads.healthy_start_vouchers", "year": 2027, - "value": 210169.61887291074, + "value": 201802.60497659445, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "healthy_start_vouchers", @@ -5461,7 +6671,9 @@ { "metric_id": "caseloads.healthy_start_vouchers", "year": 2028, - "value": 211010.2855282426, + "value": 202609.80542340875, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "healthy_start_vouchers", @@ -5470,7 +6682,9 @@ { "metric_id": "caseloads.healthy_start_vouchers", "year": 2029, - "value": 211938.73312041163, + "value": 203501.29058858752, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "healthy_start_vouchers", @@ -5479,7 +6693,9 @@ { "metric_id": "caseloads.healthy_start_vouchers", "year": 2030, - "value": 212892.46397477388, + "value": 204417.0512445569, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "healthy_start_vouchers", @@ -5488,7 +6704,9 @@ { "metric_id": "caseloads.healthy_start_vouchers", "year": 2031, - "value": 213808.30855458975, + "value": 205296.04370743036, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "healthy_start_vouchers", @@ -5498,6 +6716,8 @@ "metric_id": "spending.maternity_allowance", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "maternity_allowance", @@ -5507,6 +6727,8 @@ "metric_id": "spending.maternity_allowance", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "maternity_allowance", @@ -5516,6 +6738,8 @@ "metric_id": "spending.maternity_allowance", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "maternity_allowance", @@ -5525,6 +6749,8 @@ "metric_id": "spending.maternity_allowance", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "maternity_allowance", @@ -5534,6 +6760,8 @@ "metric_id": "spending.maternity_allowance", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "maternity_allowance", @@ -5543,6 +6771,8 @@ "metric_id": "spending.maternity_allowance", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "maternity_allowance", @@ -5552,6 +6782,8 @@ "metric_id": "spending.maternity_allowance", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "maternity_allowance", @@ -5561,6 +6793,8 @@ "metric_id": "caseloads.maternity_allowance", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "maternity_allowance", @@ -5570,6 +6804,8 @@ "metric_id": "caseloads.maternity_allowance", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "maternity_allowance", @@ -5579,6 +6815,8 @@ "metric_id": "caseloads.maternity_allowance", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "maternity_allowance", @@ -5588,6 +6826,8 @@ "metric_id": "caseloads.maternity_allowance", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "maternity_allowance", @@ -5597,6 +6837,8 @@ "metric_id": "caseloads.maternity_allowance", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "maternity_allowance", @@ -5606,6 +6848,8 @@ "metric_id": "caseloads.maternity_allowance", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "maternity_allowance", @@ -5615,6 +6859,8 @@ "metric_id": "caseloads.maternity_allowance", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "maternity_allowance", @@ -5623,7 +6869,9 @@ { "metric_id": "spending.statutory_maternity_pay", "year": 2025, - "value": 3337974284.302048, + "value": 3318182317.450847, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "statutory_maternity_pay", @@ -5632,7 +6880,9 @@ { "metric_id": "spending.statutory_maternity_pay", "year": 2026, - "value": 3427723791.796866, + "value": 3407399609.1208797, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "statutory_maternity_pay", @@ -5641,7 +6891,9 @@ { "metric_id": "spending.statutory_maternity_pay", "year": 2027, - "value": 3509214573.900618, + "value": 3488407179.3860164, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "statutory_maternity_pay", @@ -5650,7 +6902,9 @@ { "metric_id": "spending.statutory_maternity_pay", "year": 2028, - "value": 3593716240.856939, + "value": 3572407800.478435, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "statutory_maternity_pay", @@ -5659,7 +6913,9 @@ { "metric_id": "spending.statutory_maternity_pay", "year": 2029, - "value": 3681719191.086521, + "value": 3659888978.871894, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "statutory_maternity_pay", @@ -5668,7 +6924,9 @@ { "metric_id": "spending.statutory_maternity_pay", "year": 2030, - "value": 3772252863.671072, + "value": 3749885904.2724175, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "statutory_maternity_pay", @@ -5677,7 +6935,9 @@ { "metric_id": "spending.statutory_maternity_pay", "year": 2031, - "value": 3864252917.3662605, + "value": 3841330547.982543, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "statutory_maternity_pay", @@ -5686,7 +6946,9 @@ { "metric_id": "caseloads.statutory_maternity_pay", "year": 2025, - "value": 321312.8473469913, + "value": 333845.906548053, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "statutory_maternity_pay", @@ -5695,7 +6957,9 @@ { "metric_id": "caseloads.statutory_maternity_pay", "year": 2026, - "value": 322533.84839725494, + "value": 335114.53039878607, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "statutory_maternity_pay", @@ -5704,7 +6968,9 @@ { "metric_id": "caseloads.statutory_maternity_pay", "year": 2027, - "value": 323727.22941863537, + "value": 336354.45804458857, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "statutory_maternity_pay", @@ -5713,7 +6979,9 @@ { "metric_id": "caseloads.statutory_maternity_pay", "year": 2028, - "value": 325022.1207540333, + "value": 337699.85739299655, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "statutory_maternity_pay", @@ -5722,7 +6990,9 @@ { "metric_id": "caseloads.statutory_maternity_pay", "year": 2029, - "value": 326452.22118473053, + "value": 339185.7411582172, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "statutory_maternity_pay", @@ -5731,7 +7001,9 @@ { "metric_id": "caseloads.statutory_maternity_pay", "year": 2030, - "value": 327921.2663208842, + "value": 340712.0907050073, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "statutory_maternity_pay", @@ -5740,16 +7012,174 @@ { "metric_id": "caseloads.statutory_maternity_pay", "year": 2031, - "value": 329331.95074787736, + "value": 342177.1517958939, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "statutory_maternity_pay", "label": "Statutory Maternity Pay" }, + { + "metric_id": "spending.statutory_paternity_pay", + "year": 2025, + "value": 0.0, + "suppressed": false, + "excludes": [], + "unit": "gbp", + "kind": "spending", + "partition": "statutory_paternity_pay", + "label": "Statutory Paternity Pay" + }, + { + "metric_id": "spending.statutory_paternity_pay", + "year": 2026, + "value": 0.0, + "suppressed": false, + "excludes": [], + "unit": "gbp", + "kind": "spending", + "partition": "statutory_paternity_pay", + "label": "Statutory Paternity Pay" + }, + { + "metric_id": "spending.statutory_paternity_pay", + "year": 2027, + "value": 0.0, + "suppressed": false, + "excludes": [], + "unit": "gbp", + "kind": "spending", + "partition": "statutory_paternity_pay", + "label": "Statutory Paternity Pay" + }, + { + "metric_id": "spending.statutory_paternity_pay", + "year": 2028, + "value": 0.0, + "suppressed": false, + "excludes": [], + "unit": "gbp", + "kind": "spending", + "partition": "statutory_paternity_pay", + "label": "Statutory Paternity Pay" + }, + { + "metric_id": "spending.statutory_paternity_pay", + "year": 2029, + "value": 0.0, + "suppressed": false, + "excludes": [], + "unit": "gbp", + "kind": "spending", + "partition": "statutory_paternity_pay", + "label": "Statutory Paternity Pay" + }, + { + "metric_id": "spending.statutory_paternity_pay", + "year": 2030, + "value": 0.0, + "suppressed": false, + "excludes": [], + "unit": "gbp", + "kind": "spending", + "partition": "statutory_paternity_pay", + "label": "Statutory Paternity Pay" + }, + { + "metric_id": "spending.statutory_paternity_pay", + "year": 2031, + "value": 0.0, + "suppressed": false, + "excludes": [], + "unit": "gbp", + "kind": "spending", + "partition": "statutory_paternity_pay", + "label": "Statutory Paternity Pay" + }, + { + "metric_id": "caseloads.statutory_paternity_pay", + "year": 2025, + "value": 0.0, + "suppressed": false, + "excludes": [], + "unit": "count", + "kind": "caseload", + "partition": "statutory_paternity_pay", + "label": "Statutory Paternity Pay" + }, + { + "metric_id": "caseloads.statutory_paternity_pay", + "year": 2026, + "value": 0.0, + "suppressed": false, + "excludes": [], + "unit": "count", + "kind": "caseload", + "partition": "statutory_paternity_pay", + "label": "Statutory Paternity Pay" + }, + { + "metric_id": "caseloads.statutory_paternity_pay", + "year": 2027, + "value": 0.0, + "suppressed": false, + "excludes": [], + "unit": "count", + "kind": "caseload", + "partition": "statutory_paternity_pay", + "label": "Statutory Paternity Pay" + }, + { + "metric_id": "caseloads.statutory_paternity_pay", + "year": 2028, + "value": 0.0, + "suppressed": false, + "excludes": [], + "unit": "count", + "kind": "caseload", + "partition": "statutory_paternity_pay", + "label": "Statutory Paternity Pay" + }, + { + "metric_id": "caseloads.statutory_paternity_pay", + "year": 2029, + "value": 0.0, + "suppressed": false, + "excludes": [], + "unit": "count", + "kind": "caseload", + "partition": "statutory_paternity_pay", + "label": "Statutory Paternity Pay" + }, + { + "metric_id": "caseloads.statutory_paternity_pay", + "year": 2030, + "value": 0.0, + "suppressed": false, + "excludes": [], + "unit": "count", + "kind": "caseload", + "partition": "statutory_paternity_pay", + "label": "Statutory Paternity Pay" + }, + { + "metric_id": "caseloads.statutory_paternity_pay", + "year": 2031, + "value": 0.0, + "suppressed": false, + "excludes": [], + "unit": "count", + "kind": "caseload", + "partition": "statutory_paternity_pay", + "label": "Statutory Paternity Pay" + }, { "metric_id": "spending.statutory_sick_pay", "year": 2025, - "value": 1179772370.051021, + "value": 1129666049.2058818, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "statutory_sick_pay", @@ -5758,7 +7188,9 @@ { "metric_id": "spending.statutory_sick_pay", "year": 2026, - "value": 1211493383.3111763, + "value": 1160039811.2081735, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "statutory_sick_pay", @@ -5767,7 +7199,9 @@ { "metric_id": "spending.statutory_sick_pay", "year": 2027, - "value": 1240295431.5737867, + "value": 1187618628.8419445, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "statutory_sick_pay", @@ -5776,7 +7210,9 @@ { "metric_id": "spending.statutory_sick_pay", "year": 2028, - "value": 1270161726.4028587, + "value": 1216216439.2552707, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "statutory_sick_pay", @@ -5785,7 +7221,9 @@ { "metric_id": "spending.statutory_sick_pay", "year": 2029, - "value": 1301265465.0001216, + "value": 1245999166.4642668, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "statutory_sick_pay", @@ -5794,7 +7232,9 @@ { "metric_id": "spending.statutory_sick_pay", "year": 2030, - "value": 1333263686.1531434, + "value": 1276638374.6988342, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "statutory_sick_pay", @@ -5803,7 +7243,9 @@ { "metric_id": "spending.statutory_sick_pay", "year": 2031, - "value": 1365780194.8969457, + "value": 1307770469.3172994, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "statutory_sick_pay", @@ -5812,7 +7254,9 @@ { "metric_id": "caseloads.statutory_sick_pay", "year": 2025, - "value": 185810.46695950627, + "value": 181849.49628841877, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "statutory_sick_pay", @@ -5821,7 +7265,9 @@ { "metric_id": "caseloads.statutory_sick_pay", "year": 2026, - "value": 186516.55576607585, + "value": 182540.52988168597, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "statutory_sick_pay", @@ -5830,7 +7276,9 @@ { "metric_id": "caseloads.statutory_sick_pay", "year": 2027, - "value": 187206.66695040464, + "value": 183215.93420261145, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "statutory_sick_pay", @@ -5839,7 +7287,9 @@ { "metric_id": "caseloads.statutory_sick_pay", "year": 2028, - "value": 187955.48840495944, + "value": 183948.78862804174, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "statutory_sick_pay", @@ -5848,7 +7298,9 @@ { "metric_id": "caseloads.statutory_sick_pay", "year": 2029, - "value": 188782.49710434675, + "value": 184758.16779726744, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "statutory_sick_pay", @@ -5857,7 +7309,9 @@ { "metric_id": "caseloads.statutory_sick_pay", "year": 2030, - "value": 189632.02460759878, + "value": 185589.58406233788, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "statutory_sick_pay", @@ -5866,7 +7320,9 @@ { "metric_id": "caseloads.statutory_sick_pay", "year": 2031, - "value": 190447.80656796694, + "value": 186387.61916735768, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "statutory_sick_pay", @@ -5875,7 +7331,9 @@ { "metric_id": "spending.ssmg", "year": 2025, - "value": 14081577.514007688, + "value": 13125578.55695486, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "ssmg", @@ -5884,7 +7342,9 @@ { "metric_id": "spending.ssmg", "year": 2026, - "value": 14135088.059857488, + "value": 13175456.283032894, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "ssmg", @@ -5893,7 +7353,9 @@ { "metric_id": "spending.ssmg", "year": 2027, - "value": 14187388.068765402, + "value": 13224205.684065819, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "ssmg", @@ -5902,7 +7364,9 @@ { "metric_id": "spending.ssmg", "year": 2028, - "value": 14244136.843547225, + "value": 13277101.755604148, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "ssmg", @@ -5911,7 +7375,9 @@ { "metric_id": "spending.ssmg", "year": 2029, - "value": 14306811.286181211, + "value": 13335521.275147796, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "ssmg", @@ -5920,7 +7386,9 @@ { "metric_id": "spending.ssmg", "year": 2030, - "value": 14371192.14501977, + "value": 13395531.273916364, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "ssmg", @@ -5929,7 +7397,9 @@ { "metric_id": "spending.ssmg", "year": 2031, - "value": 14433015.649303794, + "value": 13453131.819739938, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "ssmg", @@ -5938,7 +7408,9 @@ { "metric_id": "caseloads.ssmg", "year": 2025, - "value": 28163.155028015375, + "value": 26251.15711390972, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "ssmg", @@ -5947,7 +7419,9 @@ { "metric_id": "caseloads.ssmg", "year": 2026, - "value": 28270.176119714975, + "value": 26350.91256606579, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "ssmg", @@ -5956,7 +7430,9 @@ { "metric_id": "caseloads.ssmg", "year": 2027, - "value": 28374.776137530804, + "value": 26448.411368131638, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "ssmg", @@ -5965,7 +7441,9 @@ { "metric_id": "caseloads.ssmg", "year": 2028, - "value": 28488.27368709445, + "value": 26554.203511208296, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "ssmg", @@ -5974,7 +7452,9 @@ { "metric_id": "caseloads.ssmg", "year": 2029, - "value": 28613.622572362423, + "value": 26671.04255029559, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "ssmg", @@ -5983,7 +7463,9 @@ { "metric_id": "caseloads.ssmg", "year": 2030, - "value": 28742.38429003954, + "value": 26791.062547832727, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "ssmg", @@ -5992,7 +7474,9 @@ { "metric_id": "caseloads.ssmg", "year": 2031, - "value": 28866.031298607588, + "value": 26906.263639479876, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "ssmg", @@ -6001,7 +7485,9 @@ { "metric_id": "spending.bsp", "year": 2025, - "value": 654447661.0694321, + "value": 670117436.1645457, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "bsp", @@ -6010,7 +7496,9 @@ { "metric_id": "spending.bsp", "year": 2026, - "value": 672044090.7987709, + "value": 688135183.9490275, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "bsp", @@ -6019,7 +7507,9 @@ { "metric_id": "spending.bsp", "year": 2027, - "value": 688021282.8463899, + "value": 704494923.9662163, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "bsp", @@ -6028,7 +7518,9 @@ { "metric_id": "spending.bsp", "year": 2028, - "value": 704588777.7902418, + "value": 721459099.2289677, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "bsp", @@ -6037,7 +7529,9 @@ { "metric_id": "spending.bsp", "year": 2029, - "value": 721842764.085712, + "value": 739126209.3696653, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "bsp", @@ -6046,7 +7540,9 @@ { "metric_id": "spending.bsp", "year": 2030, - "value": 739592896.5915165, + "value": 757301345.0579464, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "bsp", @@ -6055,7 +7551,9 @@ { "metric_id": "spending.bsp", "year": 2031, - "value": 757630569.6200083, + "value": 775768909.9039654, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "bsp", @@ -6064,7 +7562,9 @@ { "metric_id": "caseloads.bsp", "year": 2025, - "value": 92227.57971167564, + "value": 98107.17104572058, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "bsp", @@ -6073,7 +7573,9 @@ { "metric_id": "caseloads.bsp", "year": 2026, - "value": 92578.04749596119, + "value": 98479.98137193918, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "bsp", @@ -6082,7 +7584,9 @@ { "metric_id": "caseloads.bsp", "year": 2027, - "value": 92920.58816957474, + "value": 98844.35904490948, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "bsp", @@ -6091,7 +7595,9 @@ { "metric_id": "caseloads.bsp", "year": 2028, - "value": 93292.26550346613, + "value": 99239.73120433092, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "bsp", @@ -6100,7 +7606,9 @@ { "metric_id": "caseloads.bsp", "year": 2029, - "value": 93702.75265604258, + "value": 99676.38774478436, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "bsp", @@ -6109,7 +7617,9 @@ { "metric_id": "caseloads.bsp", "year": 2030, - "value": 94124.41794991493, + "value": 100124.9348872304, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "bsp", @@ -6118,7 +7628,9 @@ { "metric_id": "caseloads.bsp", "year": 2031, - "value": 94529.3324996233, + "value": 100555.47150915861, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "bsp", @@ -6127,7 +7639,9 @@ { "metric_id": "spending.tax_free_childcare", "year": 2025, - "value": 563525940.8773441, + "value": 551460799.5583543, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "tax_free_childcare", @@ -6136,7 +7650,9 @@ { "metric_id": "spending.tax_free_childcare", "year": 2026, - "value": 568299173.1681643, + "value": 556759454.765603, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "tax_free_childcare", @@ -6145,7 +7661,9 @@ { "metric_id": "spending.tax_free_childcare", "year": 2027, - "value": 573445937.53699, + "value": 566094705.6608063, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "tax_free_childcare", @@ -6154,7 +7672,9 @@ { "metric_id": "spending.tax_free_childcare", "year": 2028, - "value": 585862809.08509, + "value": 577814275.3520343, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "tax_free_childcare", @@ -6163,7 +7683,9 @@ { "metric_id": "spending.tax_free_childcare", "year": 2029, - "value": 561084451.3935778, + "value": 546986429.725085, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "tax_free_childcare", @@ -6172,7 +7694,9 @@ { "metric_id": "spending.tax_free_childcare", "year": 2030, - "value": 580251499.0481504, + "value": 566235601.269679, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "tax_free_childcare", @@ -6181,7 +7705,9 @@ { "metric_id": "spending.tax_free_childcare", "year": 2031, - "value": 560322627.8579925, + "value": 577475011.8886111, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "tax_free_childcare", @@ -6190,7 +7716,9 @@ { "metric_id": "caseloads.tax_free_childcare", "year": 2025, - "value": 974133.2423208505, + "value": 1011592.7329891622, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "tax_free_childcare", @@ -6199,7 +7727,9 @@ { "metric_id": "caseloads.tax_free_childcare", "year": 2026, - "value": 979682.5571617931, + "value": 1021183.6429007053, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "tax_free_childcare", @@ -6208,7 +7738,9 @@ { "metric_id": "caseloads.tax_free_childcare", "year": 2027, - "value": 971293.5103004575, + "value": 1020334.1701015085, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "tax_free_childcare", @@ -6217,7 +7749,9 @@ { "metric_id": "caseloads.tax_free_childcare", "year": 2028, - "value": 976896.6010332257, + "value": 1023999.8023810685, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "tax_free_childcare", @@ -6226,7 +7760,9 @@ { "metric_id": "caseloads.tax_free_childcare", "year": 2029, - "value": 957558.250394702, + "value": 972793.2253160179, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "tax_free_childcare", @@ -6235,7 +7771,9 @@ { "metric_id": "caseloads.tax_free_childcare", "year": 2030, - "value": 966774.040873915, + "value": 980748.0028229207, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "tax_free_childcare", @@ -6244,7 +7782,9 @@ { "metric_id": "caseloads.tax_free_childcare", "year": 2031, - "value": 914534.0746401399, + "value": 980979.6002974808, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "tax_free_childcare", @@ -6253,7 +7793,9 @@ { "metric_id": "spending.extended_childcare_entitlement", "year": 2025, - "value": 4769443952.411871, + "value": 2648748217.184513, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "extended_childcare_entitlement", @@ -6262,7 +7804,9 @@ { "metric_id": "spending.extended_childcare_entitlement", "year": 2026, - "value": 5307606110.253133, + "value": 3074999356.8385277, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "extended_childcare_entitlement", @@ -6271,7 +7815,9 @@ { "metric_id": "spending.extended_childcare_entitlement", "year": 2027, - "value": 5433878200.598173, + "value": 3151701029.7253556, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "extended_childcare_entitlement", @@ -6280,7 +7826,9 @@ { "metric_id": "spending.extended_childcare_entitlement", "year": 2028, - "value": 5575606222.716693, + "value": 3235525477.42588, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "extended_childcare_entitlement", @@ -6289,7 +7837,9 @@ { "metric_id": "spending.extended_childcare_entitlement", "year": 2029, - "value": 5682980459.519588, + "value": 3310370308.099014, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "extended_childcare_entitlement", @@ -6298,7 +7848,9 @@ { "metric_id": "spending.extended_childcare_entitlement", "year": 2030, - "value": 5856928114.420198, + "value": 3398248782.2036104, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "extended_childcare_entitlement", @@ -6307,7 +7859,9 @@ { "metric_id": "spending.extended_childcare_entitlement", "year": 2031, - "value": 5926506204.517755, + "value": 3482394959.2131405, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "extended_childcare_entitlement", @@ -6316,7 +7870,9 @@ { "metric_id": "caseloads.extended_childcare_entitlement", "year": 2025, - "value": 962176.1845641136, + "value": 664320.1943173409, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "extended_childcare_entitlement", @@ -6325,7 +7881,9 @@ { "metric_id": "caseloads.extended_childcare_entitlement", "year": 2026, - "value": 957668.9594607353, + "value": 669802.4551296234, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "extended_childcare_entitlement", @@ -6334,7 +7892,9 @@ { "metric_id": "caseloads.extended_childcare_entitlement", "year": 2027, - "value": 959484.9431653023, + "value": 672223.7327985764, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "extended_childcare_entitlement", @@ -6343,7 +7903,9 @@ { "metric_id": "caseloads.extended_childcare_entitlement", "year": 2028, - "value": 963973.5987744331, + "value": 673895.0757799149, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "extended_childcare_entitlement", @@ -6352,7 +7914,9 @@ { "metric_id": "caseloads.extended_childcare_entitlement", "year": 2029, - "value": 955768.6225590706, + "value": 676376.3725852966, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "extended_childcare_entitlement", @@ -6361,7 +7925,9 @@ { "metric_id": "caseloads.extended_childcare_entitlement", "year": 2030, - "value": 963198.3530750275, + "value": 681117.3323864937, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "extended_childcare_entitlement", @@ -6370,7 +7936,9 @@ { "metric_id": "caseloads.extended_childcare_entitlement", "year": 2031, - "value": 953890.9335918427, + "value": 683408.1116919518, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "extended_childcare_entitlement", @@ -6379,7 +7947,9 @@ { "metric_id": "spending.universal_childcare_entitlement", "year": 2025, - "value": 1303677004.8374069, + "value": 3266472521.328236, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "universal_childcare_entitlement", @@ -6388,7 +7958,9 @@ { "metric_id": "spending.universal_childcare_entitlement", "year": 2026, - "value": 1372546985.2564154, + "value": 3388720332.016673, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "universal_childcare_entitlement", @@ -6397,7 +7969,9 @@ { "metric_id": "spending.universal_childcare_entitlement", "year": 2027, - "value": 1412467299.31001, + "value": 3479027407.998313, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "universal_childcare_entitlement", @@ -6406,7 +7980,9 @@ { "metric_id": "spending.universal_childcare_entitlement", "year": 2028, - "value": 1447975936.2291465, + "value": 3565630277.573733, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "universal_childcare_entitlement", @@ -6415,7 +7991,9 @@ { "metric_id": "spending.universal_childcare_entitlement", "year": 2029, - "value": 1528607528.5243466, + "value": 3653067234.422063, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "universal_childcare_entitlement", @@ -6424,7 +8002,9 @@ { "metric_id": "spending.universal_childcare_entitlement", "year": 2030, - "value": 1568458954.5961401, + "value": 3757717185.8182206, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "universal_childcare_entitlement", @@ -6433,7 +8013,9 @@ { "metric_id": "spending.universal_childcare_entitlement", "year": 2031, - "value": 1607433548.773115, + "value": 3846294804.2724795, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "universal_childcare_entitlement", @@ -6442,7 +8024,9 @@ { "metric_id": "caseloads.universal_childcare_entitlement", "year": 2025, - "value": 379484.6813406944, + "value": 985445.4297113419, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "universal_childcare_entitlement", @@ -6451,7 +8035,9 @@ { "metric_id": "caseloads.universal_childcare_entitlement", "year": 2026, - "value": 386394.35359191895, + "value": 988718.9267745018, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "universal_childcare_entitlement", @@ -6460,7 +8046,9 @@ { "metric_id": "caseloads.universal_childcare_entitlement", "year": 2027, - "value": 388693.47555303574, + "value": 992135.8684687614, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "universal_childcare_entitlement", @@ -6469,7 +8057,9 @@ { "metric_id": "caseloads.universal_childcare_entitlement", "year": 2028, - "value": 390652.560110569, + "value": 996884.7139797211, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "universal_childcare_entitlement", @@ -6478,7 +8068,9 @@ { "metric_id": "caseloads.universal_childcare_entitlement", "year": 2029, - "value": 404320.32845020294, + "value": 1001194.633936882, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "universal_childcare_entitlement", @@ -6487,7 +8079,9 @@ { "metric_id": "caseloads.universal_childcare_entitlement", "year": 2030, - "value": 406727.4603328705, + "value": 1010204.9373459816, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "universal_childcare_entitlement", @@ -6496,7 +8090,9 @@ { "metric_id": "caseloads.universal_childcare_entitlement", "year": 2031, - "value": 408660.8797736168, + "value": 1013771.0637845993, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "universal_childcare_entitlement", @@ -6505,7 +8101,9 @@ { "metric_id": "spending.targeted_childcare_entitlement", "year": 2025, - "value": 443196400.7338863, + "value": 572024783.1285633, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "targeted_childcare_entitlement", @@ -6514,7 +8112,9 @@ { "metric_id": "spending.targeted_childcare_entitlement", "year": 2026, - "value": 460006640.4923033, + "value": 593721428.6371526, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "targeted_childcare_entitlement", @@ -6523,7 +8123,9 @@ { "metric_id": "spending.targeted_childcare_entitlement", "year": 2027, - "value": 472326964.79148394, + "value": 609623032.498304, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "targeted_childcare_entitlement", @@ -6532,7 +8134,9 @@ { "metric_id": "spending.targeted_childcare_entitlement", "year": 2028, - "value": 483699822.07395244, + "value": 624301765.4036878, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "targeted_childcare_entitlement", @@ -6541,7 +8145,9 @@ { "metric_id": "spending.targeted_childcare_entitlement", "year": 2029, - "value": 495544205.88908577, + "value": 639589086.6096659, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "targeted_childcare_entitlement", @@ -6550,7 +8156,9 @@ { "metric_id": "spending.targeted_childcare_entitlement", "year": 2030, - "value": 497331070.06473446, + "value": 655315201.2710408, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "targeted_childcare_entitlement", @@ -6559,7 +8167,9 @@ { "metric_id": "spending.targeted_childcare_entitlement", "year": 2031, - "value": 504378844.1796443, + "value": 664824494.3626773, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "targeted_childcare_entitlement", @@ -6568,7 +8178,9 @@ { "metric_id": "caseloads.targeted_childcare_entitlement", "year": 2025, - "value": 91615.18099975586, + "value": 119291.62903356552, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "targeted_childcare_entitlement", @@ -6577,7 +8189,9 @@ { "metric_id": "caseloads.targeted_childcare_entitlement", "year": 2026, - "value": 91963.32138204575, + "value": 119744.94127082825, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "targeted_childcare_entitlement", @@ -6586,7 +8200,9 @@ { "metric_id": "caseloads.targeted_childcare_entitlement", "year": 2027, - "value": 92303.58706235886, + "value": 120188.00064563751, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "targeted_childcare_entitlement", @@ -6595,7 +8211,9 @@ { "metric_id": "caseloads.targeted_childcare_entitlement", "year": 2028, - "value": 92672.79612493515, + "value": 120668.74804401398, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "targeted_childcare_entitlement", @@ -6604,7 +8222,9 @@ { "metric_id": "caseloads.targeted_childcare_entitlement", "year": 2029, - "value": 93080.55707216263, + "value": 121199.69331502914, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "targeted_childcare_entitlement", @@ -6613,7 +8233,9 @@ { "metric_id": "caseloads.targeted_childcare_entitlement", "year": 2030, - "value": 91584.69786310196, + "value": 121745.09483098984, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "targeted_childcare_entitlement", @@ -6622,7 +8244,9 @@ { "metric_id": "caseloads.targeted_childcare_entitlement", "year": 2031, - "value": 91061.30740070343, + "value": 121100.23704528809, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "targeted_childcare_entitlement", @@ -6632,6 +8256,8 @@ "metric_id": "spending.care_to_learn", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "care_to_learn", @@ -6641,6 +8267,8 @@ "metric_id": "spending.care_to_learn", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "care_to_learn", @@ -6650,6 +8278,8 @@ "metric_id": "spending.care_to_learn", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "care_to_learn", @@ -6659,6 +8289,8 @@ "metric_id": "spending.care_to_learn", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "care_to_learn", @@ -6668,6 +8300,8 @@ "metric_id": "spending.care_to_learn", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "care_to_learn", @@ -6677,6 +8311,8 @@ "metric_id": "spending.care_to_learn", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "care_to_learn", @@ -6686,6 +8322,8 @@ "metric_id": "spending.care_to_learn", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "care_to_learn", @@ -6695,6 +8333,8 @@ "metric_id": "caseloads.care_to_learn", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "care_to_learn", @@ -6704,6 +8344,8 @@ "metric_id": "caseloads.care_to_learn", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "care_to_learn", @@ -6713,6 +8355,8 @@ "metric_id": "caseloads.care_to_learn", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "care_to_learn", @@ -6722,6 +8366,8 @@ "metric_id": "caseloads.care_to_learn", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "care_to_learn", @@ -6731,6 +8377,8 @@ "metric_id": "caseloads.care_to_learn", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "care_to_learn", @@ -6740,6 +8388,8 @@ "metric_id": "caseloads.care_to_learn", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "care_to_learn", @@ -6749,6 +8399,8 @@ "metric_id": "caseloads.care_to_learn", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "care_to_learn", @@ -6758,6 +8410,8 @@ "metric_id": "spending.childcare_grant", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "childcare_grant", @@ -6767,6 +8421,8 @@ "metric_id": "spending.childcare_grant", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "childcare_grant", @@ -6776,6 +8432,8 @@ "metric_id": "spending.childcare_grant", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "childcare_grant", @@ -6785,6 +8443,8 @@ "metric_id": "spending.childcare_grant", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "childcare_grant", @@ -6794,6 +8454,8 @@ "metric_id": "spending.childcare_grant", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "childcare_grant", @@ -6803,6 +8465,8 @@ "metric_id": "spending.childcare_grant", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "childcare_grant", @@ -6812,6 +8476,8 @@ "metric_id": "spending.childcare_grant", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "childcare_grant", @@ -6821,6 +8487,8 @@ "metric_id": "caseloads.childcare_grant", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "childcare_grant", @@ -6830,6 +8498,8 @@ "metric_id": "caseloads.childcare_grant", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "childcare_grant", @@ -6839,6 +8509,8 @@ "metric_id": "caseloads.childcare_grant", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "childcare_grant", @@ -6848,6 +8520,8 @@ "metric_id": "caseloads.childcare_grant", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "childcare_grant", @@ -6857,6 +8531,8 @@ "metric_id": "caseloads.childcare_grant", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "childcare_grant", @@ -6866,6 +8542,8 @@ "metric_id": "caseloads.childcare_grant", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "childcare_grant", @@ -6875,6 +8553,8 @@ "metric_id": "caseloads.childcare_grant", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "childcare_grant", @@ -6883,7 +8563,9 @@ { "metric_id": "spending.parents_learning_allowance", "year": 2025, - "value": 200089205.6251793, + "value": 199163916.0120163, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "parents_learning_allowance", @@ -6892,7 +8574,9 @@ { "metric_id": "spending.parents_learning_allowance", "year": 2026, - "value": 200849551.41910172, + "value": 199920745.4944954, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "parents_learning_allowance", @@ -6901,7 +8585,9 @@ { "metric_id": "spending.parents_learning_allowance", "year": 2027, - "value": 201592698.65725708, + "value": 200660457.07904816, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "parents_learning_allowance", @@ -6910,7 +8596,9 @@ { "metric_id": "spending.parents_learning_allowance", "year": 2028, - "value": 202399059.3290062, + "value": 201463089.27254868, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "parents_learning_allowance", @@ -6919,7 +8607,9 @@ { "metric_id": "spending.parents_learning_allowance", "year": 2029, - "value": 203289618.08014297, + "value": 202349531.5649414, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "parents_learning_allowance", @@ -6928,7 +8618,9 @@ { "metric_id": "spending.parents_learning_allowance", "year": 2030, - "value": 167103353.08280182, + "value": 203188174.47846603, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "parents_learning_allowance", @@ -6937,7 +8629,9 @@ { "metric_id": "spending.parents_learning_allowance", "year": 2031, - "value": 167822216.12641907, + "value": 204061882.82292938, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "parents_learning_allowance", @@ -6946,7 +8640,9 @@ { "metric_id": "caseloads.parents_learning_allowance", "year": 2025, - "value": 98858.3031744957, + "value": 98401.14427471161, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "parents_learning_allowance", @@ -6955,7 +8651,9 @@ { "metric_id": "caseloads.parents_learning_allowance", "year": 2026, - "value": 99233.96809244156, + "value": 98775.07188463211, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "parents_learning_allowance", @@ -6964,7 +8662,9 @@ { "metric_id": "caseloads.parents_learning_allowance", "year": 2027, - "value": 99601.13570022583, + "value": 99140.54203510284, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "parents_learning_allowance", @@ -6973,7 +8673,9 @@ { "metric_id": "caseloads.parents_learning_allowance", "year": 2028, - "value": 99999.53524160385, + "value": 99537.09944295883, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "parents_learning_allowance", @@ -6982,7 +8684,9 @@ { "metric_id": "caseloads.parents_learning_allowance", "year": 2029, - "value": 100439.53462457657, + "value": 99975.0650024414, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "parents_learning_allowance", @@ -6991,7 +8695,9 @@ { "metric_id": "caseloads.parents_learning_allowance", "year": 2030, - "value": 82560.94519901276, + "value": 100389.41426801682, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "parents_learning_allowance", @@ -7000,7 +8706,9 @@ { "metric_id": "caseloads.parents_learning_allowance", "year": 2031, - "value": 82916.11468696594, + "value": 100821.0883512497, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "parents_learning_allowance", @@ -7009,7 +8717,9 @@ { "metric_id": "spending.adult_dependants_grant", "year": 2025, - "value": 37181344.76393461, + "value": 62362242.98413515, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "adult_dependants_grant", @@ -7018,7 +8728,9 @@ { "metric_id": "spending.adult_dependants_grant", "year": 2026, - "value": 37322635.825378895, + "value": 62599222.553822994, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "adult_dependants_grant", @@ -7027,7 +8739,9 @@ { "metric_id": "spending.adult_dependants_grant", "year": 2027, - "value": 37460730.62564373, + "value": 44187742.20506668, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "adult_dependants_grant", @@ -7036,7 +8750,9 @@ { "metric_id": "spending.adult_dependants_grant", "year": 2028, - "value": 37610571.710464954, + "value": 44364490.80733061, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "adult_dependants_grant", @@ -7045,7 +8761,9 @@ { "metric_id": "spending.adult_dependants_grant", "year": 2029, - "value": 37776058.51188898, + "value": 44559696.51651859, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "adult_dependants_grant", @@ -7054,7 +8772,9 @@ { "metric_id": "spending.adult_dependants_grant", "year": 2030, - "value": 37946051.452560425, + "value": 44760217.169840336, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "adult_dependants_grant", @@ -7063,7 +8783,9 @@ { "metric_id": "spending.adult_dependants_grant", "year": 2031, - "value": 38109291.55965805, + "value": 44952685.864076614, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "adult_dependants_grant", @@ -7072,7 +8794,9 @@ { "metric_id": "caseloads.adult_dependants_grant", "year": 2025, - "value": 10488.390624523163, + "value": 17591.605919361115, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "adult_dependants_grant", @@ -7081,7 +8805,9 @@ { "metric_id": "caseloads.adult_dependants_grant", "year": 2026, - "value": 10528.247059345245, + "value": 17658.454881191254, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "adult_dependants_grant", @@ -7090,7 +8816,9 @@ { "metric_id": "caseloads.adult_dependants_grant", "year": 2027, - "value": 10567.201869010925, + "value": 12464.807392120361, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "adult_dependants_grant", @@ -7099,7 +8827,9 @@ { "metric_id": "caseloads.adult_dependants_grant", "year": 2028, - "value": 10609.470158100128, + "value": 12514.665954113007, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "adult_dependants_grant", @@ -7108,7 +8838,9 @@ { "metric_id": "caseloads.adult_dependants_grant", "year": 2029, - "value": 10656.151907444, + "value": 12569.73103427887, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "adult_dependants_grant", @@ -7117,7 +8849,9 @@ { "metric_id": "caseloads.adult_dependants_grant", "year": 2030, - "value": 10704.104782104492, + "value": 12626.29539346695, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "adult_dependants_grant", @@ -7126,7 +8860,9 @@ { "metric_id": "caseloads.adult_dependants_grant", "year": 2031, - "value": 10750.152767181396, + "value": 12680.588396072388, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "adult_dependants_grant", @@ -7136,6 +8872,8 @@ "metric_id": "spending.travel_grant", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "travel_grant", @@ -7145,6 +8883,8 @@ "metric_id": "spending.travel_grant", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "travel_grant", @@ -7154,6 +8894,8 @@ "metric_id": "spending.travel_grant", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "travel_grant", @@ -7163,6 +8905,8 @@ "metric_id": "spending.travel_grant", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "travel_grant", @@ -7172,6 +8916,8 @@ "metric_id": "spending.travel_grant", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "travel_grant", @@ -7181,6 +8927,8 @@ "metric_id": "spending.travel_grant", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "travel_grant", @@ -7190,6 +8938,8 @@ "metric_id": "spending.travel_grant", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "travel_grant", @@ -7199,6 +8949,8 @@ "metric_id": "caseloads.travel_grant", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "travel_grant", @@ -7208,6 +8960,8 @@ "metric_id": "caseloads.travel_grant", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "travel_grant", @@ -7217,6 +8971,8 @@ "metric_id": "caseloads.travel_grant", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "travel_grant", @@ -7226,6 +8982,8 @@ "metric_id": "caseloads.travel_grant", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "travel_grant", @@ -7235,6 +8993,8 @@ "metric_id": "caseloads.travel_grant", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "travel_grant", @@ -7244,6 +9004,8 @@ "metric_id": "caseloads.travel_grant", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "travel_grant", @@ -7253,6 +9015,8 @@ "metric_id": "caseloads.travel_grant", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "travel_grant", @@ -7261,7 +9025,9 @@ { "metric_id": "spending.disabled_students_allowance", "year": 2025, - "value": 31398271.13342285, + "value": null, + "suppressed": true, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "disabled_students_allowance", @@ -7270,7 +9036,9 @@ { "metric_id": "spending.disabled_students_allowance", "year": 2026, - "value": 31517584.991455078, + "value": null, + "suppressed": true, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "disabled_students_allowance", @@ -7279,7 +9047,9 @@ { "metric_id": "spending.disabled_students_allowance", "year": 2027, - "value": 31634201.431274414, + "value": null, + "suppressed": true, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "disabled_students_allowance", @@ -7288,7 +9058,9 @@ { "metric_id": "spending.disabled_students_allowance", "year": 2028, - "value": 31760736.053466797, + "value": null, + "suppressed": true, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "disabled_students_allowance", @@ -7297,7 +9069,9 @@ { "metric_id": "spending.disabled_students_allowance", "year": 2029, - "value": 31900483.795166016, + "value": null, + "suppressed": true, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "disabled_students_allowance", @@ -7306,7 +9080,9 @@ { "metric_id": "spending.disabled_students_allowance", "year": 2030, - "value": 32044037.338256836, + "value": null, + "suppressed": true, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "disabled_students_allowance", @@ -7315,7 +9091,9 @@ { "metric_id": "spending.disabled_students_allowance", "year": 2031, - "value": 32181888.01574707, + "value": null, + "suppressed": true, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "disabled_students_allowance", @@ -7324,7 +9102,9 @@ { "metric_id": "caseloads.disabled_students_allowance", "year": 2025, - "value": 1744.3483963012695, + "value": null, + "suppressed": true, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "disabled_students_allowance", @@ -7333,7 +9113,9 @@ { "metric_id": "caseloads.disabled_students_allowance", "year": 2026, - "value": 1750.9769439697266, + "value": null, + "suppressed": true, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "disabled_students_allowance", @@ -7342,7 +9124,9 @@ { "metric_id": "caseloads.disabled_students_allowance", "year": 2027, - "value": 1757.4556350708008, + "value": null, + "suppressed": true, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "disabled_students_allowance", @@ -7351,7 +9135,9 @@ { "metric_id": "caseloads.disabled_students_allowance", "year": 2028, - "value": 1764.485336303711, + "value": null, + "suppressed": true, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "disabled_students_allowance", @@ -7360,7 +9146,9 @@ { "metric_id": "caseloads.disabled_students_allowance", "year": 2029, - "value": 1772.2490997314453, + "value": null, + "suppressed": true, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "disabled_students_allowance", @@ -7369,7 +9157,9 @@ { "metric_id": "caseloads.disabled_students_allowance", "year": 2030, - "value": 1780.2242965698242, + "value": null, + "suppressed": true, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "disabled_students_allowance", @@ -7378,7 +9168,9 @@ { "metric_id": "caseloads.disabled_students_allowance", "year": 2031, - "value": 1787.882667541504, + "value": null, + "suppressed": true, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "disabled_students_allowance", @@ -7388,6 +9180,8 @@ "metric_id": "spending.bursary_fund_16_to_19", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "bursary_fund_16_to_19", @@ -7397,6 +9191,8 @@ "metric_id": "spending.bursary_fund_16_to_19", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "bursary_fund_16_to_19", @@ -7406,6 +9202,8 @@ "metric_id": "spending.bursary_fund_16_to_19", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "bursary_fund_16_to_19", @@ -7415,6 +9213,8 @@ "metric_id": "spending.bursary_fund_16_to_19", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "bursary_fund_16_to_19", @@ -7424,6 +9224,8 @@ "metric_id": "spending.bursary_fund_16_to_19", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "bursary_fund_16_to_19", @@ -7433,6 +9235,8 @@ "metric_id": "spending.bursary_fund_16_to_19", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "bursary_fund_16_to_19", @@ -7442,6 +9246,8 @@ "metric_id": "spending.bursary_fund_16_to_19", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "bursary_fund_16_to_19", @@ -7451,6 +9257,8 @@ "metric_id": "caseloads.bursary_fund_16_to_19", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "bursary_fund_16_to_19", @@ -7460,6 +9268,8 @@ "metric_id": "caseloads.bursary_fund_16_to_19", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "bursary_fund_16_to_19", @@ -7469,6 +9279,8 @@ "metric_id": "caseloads.bursary_fund_16_to_19", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "bursary_fund_16_to_19", @@ -7478,6 +9290,8 @@ "metric_id": "caseloads.bursary_fund_16_to_19", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "bursary_fund_16_to_19", @@ -7487,6 +9301,8 @@ "metric_id": "caseloads.bursary_fund_16_to_19", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "bursary_fund_16_to_19", @@ -7496,6 +9312,8 @@ "metric_id": "caseloads.bursary_fund_16_to_19", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "bursary_fund_16_to_19", @@ -7505,6 +9323,8 @@ "metric_id": "caseloads.bursary_fund_16_to_19", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "bursary_fund_16_to_19", @@ -7513,7 +9333,9 @@ { "metric_id": "spending.nhs_spending", "year": 2025, - "value": 205232332361.1096, + "value": 204681602159.08142, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "nhs_spending", @@ -7522,7 +9344,9 @@ { "metric_id": "spending.nhs_spending", "year": 2026, - "value": 206012222586.4446, + "value": 205459399297.22324, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "nhs_spending", @@ -7531,7 +9355,9 @@ { "metric_id": "spending.nhs_spending", "year": 2027, - "value": 206774471228.05975, + "value": 206219602604.32385, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "nhs_spending", @@ -7540,7 +9366,9 @@ { "metric_id": "spending.nhs_spending", "year": 2028, - "value": 207601558499.668, + "value": 207044470471.60086, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "nhs_spending", @@ -7549,7 +9377,9 @@ { "metric_id": "spending.nhs_spending", "year": 2029, - "value": 208515008515.17273, + "value": 207955469002.00323, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "nhs_spending", @@ -7558,7 +9388,9 @@ { "metric_id": "spending.nhs_spending", "year": 2030, - "value": 209453332677.40167, + "value": 208891275075.5078, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "nhs_spending", @@ -7567,7 +9399,9 @@ { "metric_id": "spending.nhs_spending", "year": 2031, - "value": 210354381149.51398, + "value": 209789506836.96567, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "nhs_spending", @@ -7576,7 +9410,9 @@ { "metric_id": "spending.dfe_education_spending", "year": 2025, - "value": 33304098.421608984, + "value": 23991604.347275984, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "dfe_education_spending", @@ -7585,7 +9421,9 @@ { "metric_id": "spending.dfe_education_spending", "year": 2026, - "value": 33430655.237596173, + "value": 24082773.488280036, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "dfe_education_spending", @@ -7594,7 +9432,9 @@ { "metric_id": "spending.dfe_education_spending", "year": 2027, - "value": 33554349.3340033, + "value": 24171879.76151417, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "dfe_education_spending", @@ -7603,7 +9443,9 @@ { "metric_id": "spending.dfe_education_spending", "year": 2028, - "value": 33688564.45852884, + "value": 24268565.8560597, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "dfe_education_spending", @@ -7612,7 +9454,9 @@ { "metric_id": "spending.dfe_education_spending", "year": 2029, - "value": 33836794.51014231, + "value": 24375348.2293824, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "dfe_education_spending", @@ -7621,7 +9465,9 @@ { "metric_id": "spending.dfe_education_spending", "year": 2030, - "value": 33989060.95758362, + "value": 24485037.725156102, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "dfe_education_spending", @@ -7630,7 +9476,9 @@ { "metric_id": "spending.dfe_education_spending", "year": 2031, - "value": 34135278.81945166, + "value": 24590323.320610803, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "dfe_education_spending", @@ -7639,7 +9487,9 @@ { "metric_id": "spending.dft_subsidy_spending", "year": 2025, - "value": 25151126510.800682, + "value": 25151126494.365833, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "dft_subsidy_spending", @@ -7648,7 +9498,9 @@ { "metric_id": "spending.dft_subsidy_spending", "year": 2026, - "value": 25246701591.88542, + "value": 25246701555.2342, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "dft_subsidy_spending", @@ -7657,7 +9509,9 @@ { "metric_id": "spending.dft_subsidy_spending", "year": 2027, - "value": 25340114855.52831, + "value": 25340114784.780163, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "dft_subsidy_spending", @@ -7666,7 +9520,9 @@ { "metric_id": "spending.dft_subsidy_spending", "year": 2028, - "value": 25441474019.590816, + "value": 25441473946.770885, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "dft_subsidy_spending", @@ -7675,7 +9531,9 @@ { "metric_id": "spending.dft_subsidy_spending", "year": 2029, - "value": 25553416910.70827, + "value": 25553416805.737003, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "dft_subsidy_spending", @@ -7684,7 +9542,9 @@ { "metric_id": "spending.dft_subsidy_spending", "year": 2030, - "value": 25668408066.936726, + "value": 25668407910.982876, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "dft_subsidy_spending", @@ -7693,7 +9553,9 @@ { "metric_id": "spending.dft_subsidy_spending", "year": 2031, - "value": 30944615266.675636, + "value": 25778782013.14279, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "dft_subsidy_spending", @@ -7703,6 +9565,8 @@ "metric_id": "spending.cost_of_living_support_payment", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "cost_of_living_support_payment", @@ -7712,6 +9576,8 @@ "metric_id": "spending.cost_of_living_support_payment", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "cost_of_living_support_payment", @@ -7721,6 +9587,8 @@ "metric_id": "spending.cost_of_living_support_payment", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "cost_of_living_support_payment", @@ -7730,6 +9598,8 @@ "metric_id": "spending.cost_of_living_support_payment", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "cost_of_living_support_payment", @@ -7739,6 +9609,8 @@ "metric_id": "spending.cost_of_living_support_payment", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "cost_of_living_support_payment", @@ -7748,6 +9620,8 @@ "metric_id": "spending.cost_of_living_support_payment", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "cost_of_living_support_payment", @@ -7757,6 +9631,8 @@ "metric_id": "spending.cost_of_living_support_payment", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "cost_of_living_support_payment", @@ -7766,6 +9642,8 @@ "metric_id": "caseloads.cost_of_living_support_payment", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "cost_of_living_support_payment", @@ -7775,6 +9653,8 @@ "metric_id": "caseloads.cost_of_living_support_payment", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "cost_of_living_support_payment", @@ -7784,6 +9664,8 @@ "metric_id": "caseloads.cost_of_living_support_payment", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "cost_of_living_support_payment", @@ -7793,6 +9675,8 @@ "metric_id": "caseloads.cost_of_living_support_payment", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "cost_of_living_support_payment", @@ -7802,6 +9686,8 @@ "metric_id": "caseloads.cost_of_living_support_payment", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "cost_of_living_support_payment", @@ -7811,6 +9697,8 @@ "metric_id": "caseloads.cost_of_living_support_payment", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "cost_of_living_support_payment", @@ -7820,6 +9708,8 @@ "metric_id": "caseloads.cost_of_living_support_payment", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "cost_of_living_support_payment", @@ -7829,6 +9719,8 @@ "metric_id": "spending.energy_bills_rebate", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "energy_bills_rebate", @@ -7838,6 +9730,8 @@ "metric_id": "spending.energy_bills_rebate", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "energy_bills_rebate", @@ -7847,6 +9741,8 @@ "metric_id": "spending.energy_bills_rebate", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "energy_bills_rebate", @@ -7856,6 +9752,8 @@ "metric_id": "spending.energy_bills_rebate", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "energy_bills_rebate", @@ -7865,6 +9763,8 @@ "metric_id": "spending.energy_bills_rebate", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "energy_bills_rebate", @@ -7874,6 +9774,8 @@ "metric_id": "spending.energy_bills_rebate", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "energy_bills_rebate", @@ -7883,6 +9785,8 @@ "metric_id": "spending.energy_bills_rebate", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "energy_bills_rebate", @@ -7892,6 +9796,8 @@ "metric_id": "caseloads.energy_bills_rebate", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "energy_bills_rebate", @@ -7901,6 +9807,8 @@ "metric_id": "caseloads.energy_bills_rebate", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "energy_bills_rebate", @@ -7910,6 +9818,8 @@ "metric_id": "caseloads.energy_bills_rebate", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "energy_bills_rebate", @@ -7919,6 +9829,8 @@ "metric_id": "caseloads.energy_bills_rebate", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "energy_bills_rebate", @@ -7928,6 +9840,8 @@ "metric_id": "caseloads.energy_bills_rebate", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "energy_bills_rebate", @@ -7937,6 +9851,8 @@ "metric_id": "caseloads.energy_bills_rebate", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "energy_bills_rebate", @@ -7946,6 +9862,8 @@ "metric_id": "caseloads.energy_bills_rebate", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "energy_bills_rebate", @@ -7955,6 +9873,8 @@ "metric_id": "spending.epg_subsidy", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "epg_subsidy", @@ -7964,6 +9884,8 @@ "metric_id": "spending.epg_subsidy", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "epg_subsidy", @@ -7973,6 +9895,8 @@ "metric_id": "spending.epg_subsidy", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "epg_subsidy", @@ -7982,6 +9906,8 @@ "metric_id": "spending.epg_subsidy", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "epg_subsidy", @@ -7991,6 +9917,8 @@ "metric_id": "spending.epg_subsidy", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "epg_subsidy", @@ -8000,6 +9928,8 @@ "metric_id": "spending.epg_subsidy", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "epg_subsidy", @@ -8009,6 +9939,8 @@ "metric_id": "spending.epg_subsidy", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "epg_subsidy", @@ -8018,6 +9950,8 @@ "metric_id": "caseloads.epg_subsidy", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "epg_subsidy", @@ -8027,6 +9961,8 @@ "metric_id": "caseloads.epg_subsidy", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "epg_subsidy", @@ -8036,6 +9972,8 @@ "metric_id": "caseloads.epg_subsidy", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "epg_subsidy", @@ -8045,6 +9983,8 @@ "metric_id": "caseloads.epg_subsidy", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "epg_subsidy", @@ -8054,6 +9994,8 @@ "metric_id": "caseloads.epg_subsidy", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "epg_subsidy", @@ -8063,6 +10005,8 @@ "metric_id": "caseloads.epg_subsidy", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "epg_subsidy", @@ -8072,6 +10016,8 @@ "metric_id": "caseloads.epg_subsidy", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "epg_subsidy", @@ -8081,6 +10027,8 @@ "metric_id": "spending.basic_income", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "basic_income", @@ -8090,6 +10038,8 @@ "metric_id": "spending.basic_income", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "basic_income", @@ -8099,6 +10049,8 @@ "metric_id": "spending.basic_income", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "basic_income", @@ -8108,6 +10060,8 @@ "metric_id": "spending.basic_income", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "basic_income", @@ -8117,6 +10071,8 @@ "metric_id": "spending.basic_income", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "basic_income", @@ -8126,6 +10082,8 @@ "metric_id": "spending.basic_income", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "basic_income", @@ -8135,6 +10093,8 @@ "metric_id": "spending.basic_income", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "basic_income", @@ -8144,6 +10104,8 @@ "metric_id": "caseloads.basic_income", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "basic_income", @@ -8153,6 +10115,8 @@ "metric_id": "caseloads.basic_income", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "basic_income", @@ -8162,6 +10126,8 @@ "metric_id": "caseloads.basic_income", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "basic_income", @@ -8171,6 +10137,8 @@ "metric_id": "caseloads.basic_income", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "basic_income", @@ -8180,6 +10148,8 @@ "metric_id": "caseloads.basic_income", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "basic_income", @@ -8189,6 +10159,8 @@ "metric_id": "caseloads.basic_income", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "basic_income", @@ -8198,6 +10170,8 @@ "metric_id": "caseloads.basic_income", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "basic_income", @@ -8207,6 +10181,8 @@ "metric_id": "spending.disability_basic_income", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "disability_basic_income", @@ -8216,6 +10192,8 @@ "metric_id": "spending.disability_basic_income", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "disability_basic_income", @@ -8225,6 +10203,8 @@ "metric_id": "spending.disability_basic_income", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "disability_basic_income", @@ -8234,6 +10214,8 @@ "metric_id": "spending.disability_basic_income", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "disability_basic_income", @@ -8243,6 +10225,8 @@ "metric_id": "spending.disability_basic_income", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "disability_basic_income", @@ -8252,6 +10236,8 @@ "metric_id": "spending.disability_basic_income", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "disability_basic_income", @@ -8261,6 +10247,8 @@ "metric_id": "spending.disability_basic_income", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "disability_basic_income", @@ -8270,6 +10258,8 @@ "metric_id": "caseloads.disability_basic_income", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "disability_basic_income", @@ -8279,6 +10269,8 @@ "metric_id": "caseloads.disability_basic_income", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "disability_basic_income", @@ -8288,6 +10280,8 @@ "metric_id": "caseloads.disability_basic_income", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "disability_basic_income", @@ -8297,6 +10291,8 @@ "metric_id": "caseloads.disability_basic_income", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "disability_basic_income", @@ -8306,6 +10302,8 @@ "metric_id": "caseloads.disability_basic_income", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "disability_basic_income", @@ -8315,6 +10313,8 @@ "metric_id": "caseloads.disability_basic_income", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "disability_basic_income", @@ -8324,6 +10324,8 @@ "metric_id": "caseloads.disability_basic_income", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "caseload", "partition": "disability_basic_income", @@ -8333,6 +10335,8 @@ "metric_id": "spending.other_public_spending_budget_change", "year": 2025, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "other_public_spending_budget_change", @@ -8342,6 +10346,8 @@ "metric_id": "spending.other_public_spending_budget_change", "year": 2026, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "other_public_spending_budget_change", @@ -8351,6 +10357,8 @@ "metric_id": "spending.other_public_spending_budget_change", "year": 2027, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "other_public_spending_budget_change", @@ -8360,6 +10368,8 @@ "metric_id": "spending.other_public_spending_budget_change", "year": 2028, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "other_public_spending_budget_change", @@ -8369,6 +10379,8 @@ "metric_id": "spending.other_public_spending_budget_change", "year": 2029, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "other_public_spending_budget_change", @@ -8378,6 +10390,8 @@ "metric_id": "spending.other_public_spending_budget_change", "year": 2030, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "other_public_spending_budget_change", @@ -8387,6 +10401,8 @@ "metric_id": "spending.other_public_spending_budget_change", "year": 2031, "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "spending", "partition": "other_public_spending_budget_change", @@ -8395,7 +10411,9 @@ { "metric_id": "double_counts.corporate_sdlt", "year": 2025, - "value": 3130000070.860857, + "value": 3130000159.912464, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "double_count", "partition": null, @@ -8404,7 +10422,9 @@ { "metric_id": "double_counts.corporate_sdlt", "year": 2026, - "value": 3129999934.869108, + "value": 3130000023.6063724, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "double_count", "partition": null, @@ -8413,7 +10433,9 @@ { "metric_id": "double_counts.corporate_sdlt", "year": 2027, - "value": 3129999659.4758515, + "value": 3129999836.909186, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "double_count", "partition": null, @@ -8422,7 +10444,9 @@ { "metric_id": "double_counts.corporate_sdlt", "year": 2028, - "value": 3129999971.286581, + "value": 3129999962.584343, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "double_count", "partition": null, @@ -8431,7 +10455,9 @@ { "metric_id": "double_counts.corporate_sdlt", "year": 2029, - "value": 3129999604.8102255, + "value": 3129999544.0565424, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "double_count", "partition": null, @@ -8440,7 +10466,9 @@ { "metric_id": "double_counts.corporate_sdlt", "year": 2030, - "value": 3129999725.6754894, + "value": 3129999895.007397, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "double_count", "partition": null, @@ -8449,7 +10477,9 @@ { "metric_id": "double_counts.corporate_sdlt", "year": 2031, - "value": 3129999838.862631, + "value": 3129999484.877694, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "double_count", "partition": null, @@ -8458,7 +10488,9 @@ { "metric_id": "model.gov_tax", "year": 2025, - "value": 978966763914.5134, + "value": 969745776128.1699, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8467,7 +10499,9 @@ { "metric_id": "model.gov_tax", "year": 2026, - "value": 1021443831661.053, + "value": 1011784948712.7561, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8476,7 +10510,9 @@ { "metric_id": "model.gov_tax", "year": 2027, - "value": 1060540354380.0239, + "value": 1050610465294.2213, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8485,7 +10521,9 @@ { "metric_id": "model.gov_tax", "year": 2028, - "value": 1096036577748.5464, + "value": 1085614034747.1652, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8494,7 +10532,9 @@ { "metric_id": "model.gov_tax", "year": 2029, - "value": 1133645091567.8396, + "value": 1124265122009.6616, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8503,7 +10543,9 @@ { "metric_id": "model.gov_tax", "year": 2030, - "value": 1172964045336.6704, + "value": 1163453498626.6191, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8512,7 +10554,9 @@ { "metric_id": "model.gov_tax", "year": 2031, - "value": 1217259329604.8296, + "value": 1206982869582.7024, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8521,7 +10565,9 @@ { "metric_id": "model.household_tax", "year": 2025, - "value": 507289555585.61816, + "value": 503977430092.485, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8530,7 +10576,9 @@ { "metric_id": "model.household_tax", "year": 2026, - "value": 534626593895.75964, + "value": 531055850973.52136, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8539,7 +10587,9 @@ { "metric_id": "model.household_tax", "year": 2027, - "value": 560967047377.9646, + "value": 557277774892.158, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8548,7 +10598,9 @@ { "metric_id": "model.household_tax", "year": 2028, - "value": 583794322841.5969, + "value": 579764609886.5848, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8557,7 +10609,9 @@ { "metric_id": "model.household_tax", "year": 2029, - "value": 606736767704.2439, + "value": 603325541929.8473, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8566,7 +10620,9 @@ { "metric_id": "model.household_tax", "year": 2030, - "value": 631883079371.0518, + "value": 628508152120.9532, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8575,7 +10631,9 @@ { "metric_id": "model.household_tax", "year": 2031, - "value": 660238702302.3933, + "value": 656263699478.5581, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8584,7 +10642,9 @@ { "metric_id": "model.pre_budget_change_household_tax", "year": 2025, - "value": 499459280987.149, + "value": 496150814427.7457, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8593,7 +10653,9 @@ { "metric_id": "model.pre_budget_change_household_tax", "year": 2026, - "value": 526499323434.2302, + "value": 522932377454.86273, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8602,7 +10664,9 @@ { "metric_id": "model.pre_budget_change_household_tax", "year": 2027, - "value": 552613929618.1678, + "value": 548928559890.4607, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8611,7 +10675,9 @@ { "metric_id": "model.pre_budget_change_household_tax", "year": 2028, - "value": 574737815078.9714, + "value": 570722062751.3651, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8620,7 +10686,9 @@ { "metric_id": "model.pre_budget_change_household_tax", "year": 2029, - "value": 597441283752.3987, + "value": 594044368863.5272, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8629,7 +10697,9 @@ { "metric_id": "model.pre_budget_change_household_tax", "year": 2030, - "value": 622323704519.8606, + "value": 618963456079.3445, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8638,7 +10708,9 @@ { "metric_id": "model.pre_budget_change_household_tax", "year": 2031, - "value": 651647666882.8048, + "value": 646366448427.6294, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8647,7 +10719,11 @@ { "metric_id": "model.gov_spending", "year": 2025, - "value": 538033639372.52985, + "value": 536882494246.02844, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8656,7 +10732,11 @@ { "metric_id": "model.gov_spending", "year": 2026, - "value": 552208058548.4539, + "value": 551017143116.2849, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8665,7 +10745,11 @@ { "metric_id": "model.gov_spending", "year": 2027, - "value": 559025643057.2411, + "value": 557190195649.4889, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8674,7 +10758,11 @@ { "metric_id": "model.gov_spending", "year": 2028, - "value": 566053472893.2496, + "value": 564067532600.854, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8683,7 +10771,11 @@ { "metric_id": "model.gov_spending", "year": 2029, - "value": 574523316911.5459, + "value": 572364658929.4899, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8692,7 +10784,11 @@ { "metric_id": "model.gov_spending", "year": 2030, - "value": 579305085703.9962, + "value": 577022180786.2144, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8701,7 +10797,11 @@ { "metric_id": "model.gov_spending", "year": 2031, - "value": 589946933468.4061, + "value": 586109747489.8334, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8710,7 +10810,11 @@ { "metric_id": "model.household_benefits", "year": 2025, - "value": 538389684305.1851, + "value": 536882494246.02844, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8719,7 +10823,11 @@ { "metric_id": "model.household_benefits", "year": 2026, - "value": 552578598164.1414, + "value": 551017143116.2849, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8728,7 +10836,11 @@ { "metric_id": "model.household_benefits", "year": 2027, - "value": 559406220932.2922, + "value": 557190195649.4889, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8737,7 +10849,11 @@ { "metric_id": "model.household_benefits", "year": 2028, - "value": 566443704502.9469, + "value": 564067532600.854, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8746,7 +10862,11 @@ { "metric_id": "model.household_benefits", "year": 2029, - "value": 574919476375.7018, + "value": 572364658929.4899, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8755,7 +10875,11 @@ { "metric_id": "model.household_benefits", "year": 2030, - "value": 579709866219.54, + "value": 577022180786.2144, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8764,7 +10888,11 @@ { "metric_id": "model.household_benefits", "year": 2031, - "value": 590354941802.2732, + "value": 586109747489.8334, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "model_total", "partition": null, @@ -8773,7 +10901,9 @@ { "metric_id": "balance.receipts", "year": 2025, - "value": 975836764403.4154, + "value": 966615777128.9729, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "balance", "partition": null, @@ -8782,7 +10912,9 @@ { "metric_id": "balance.receipts", "year": 2026, - "value": 1018313832613.0851, + "value": 1008654948197.3245, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "balance", "partition": null, @@ -8791,7 +10923,9 @@ { "metric_id": "balance.receipts", "year": 2027, - "value": 1057410354079.6709, + "value": 1047480466355.038, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "balance", "partition": null, @@ -8800,7 +10934,9 @@ { "metric_id": "balance.receipts", "year": 2028, - "value": 1092906577896.0876, + "value": 1082484034898.3741, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "balance", "partition": null, @@ -8809,7 +10945,9 @@ { "metric_id": "balance.receipts", "year": 2029, - "value": 1130515092103.1807, + "value": 1121135120971.1062, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "balance", "partition": null, @@ -8818,7 +10956,9 @@ { "metric_id": "balance.receipts", "year": 2030, - "value": 1169834045361.7195, + "value": 1160323499762.114, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "balance", "partition": null, @@ -8827,7 +10967,9 @@ { "metric_id": "balance.receipts", "year": 2031, - "value": 1214129326993.4458, + "value": 1203852872416.6934, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "balance", "partition": null, @@ -8836,7 +10978,11 @@ { "metric_id": "balance.spending", "year": 2025, - "value": 538033639676.7738, + "value": 536882494246.02844, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "balance", "partition": null, @@ -8845,7 +10991,11 @@ { "metric_id": "balance.spending", "year": 2026, - "value": 552208059037.354, + "value": 551017143116.2849, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "balance", "partition": null, @@ -8854,7 +11004,11 @@ { "metric_id": "balance.spending", "year": 2027, - "value": 559025643307.1086, + "value": 557190195649.4889, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "balance", "partition": null, @@ -8863,7 +11017,11 @@ { "metric_id": "balance.spending", "year": 2028, - "value": 566053472435.6144, + "value": 564067532600.854, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "balance", "partition": null, @@ -8872,7 +11030,11 @@ { "metric_id": "balance.spending", "year": 2029, - "value": 574523317043.8452, + "value": 572364658929.4899, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "balance", "partition": null, @@ -8881,7 +11043,11 @@ { "metric_id": "balance.spending", "year": 2030, - "value": 579305085287.3065, + "value": 577022180786.2144, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "balance", "partition": null, @@ -8890,7 +11056,11 @@ { "metric_id": "balance.spending", "year": 2031, - "value": 589946932722.4471, + "value": 586109747489.8334, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "balance", "partition": null, @@ -8899,7 +11069,11 @@ { "metric_id": "balance.balance", "year": 2025, - "value": 437803124726.64154, + "value": 429733282882.94446, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "balance", "partition": null, @@ -8908,7 +11082,11 @@ { "metric_id": "balance.balance", "year": 2026, - "value": 466105773575.731, + "value": 457637805081.0396, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "balance", "partition": null, @@ -8917,7 +11095,11 @@ { "metric_id": "balance.balance", "year": 2027, - "value": 498384710772.5623, + "value": 490290270705.5491, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "balance", "partition": null, @@ -8926,7 +11108,11 @@ { "metric_id": "balance.balance", "year": 2028, - "value": 526853105460.47296, + "value": 518416502297.52026, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "balance", "partition": null, @@ -8935,7 +11121,11 @@ { "metric_id": "balance.balance", "year": 2029, - "value": 555991775059.3357, + "value": 548770462041.61646, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "balance", "partition": null, @@ -8944,7 +11134,11 @@ { "metric_id": "balance.balance", "year": 2030, - "value": 590528960074.4128, + "value": 583301318975.8997, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "balance", "partition": null, @@ -8953,7 +11147,11 @@ { "metric_id": "balance.balance", "year": 2031, - "value": 624182394270.9988, + "value": 617743124926.8599, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "balance", "partition": null, @@ -8962,7 +11160,9 @@ { "metric_id": "balance.household_only_benefits", "year": 2025, - "value": 551697696.1319505, + "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "balance", "partition": null, @@ -8971,7 +11171,9 @@ { "metric_id": "balance.household_only_benefits", "year": 2026, - "value": 573788727.0823206, + "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "balance", "partition": null, @@ -8980,7 +11182,9 @@ { "metric_id": "balance.household_only_benefits", "year": 2027, - "value": 587932937.3870641, + "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "balance", "partition": null, @@ -8989,7 +11193,9 @@ { "metric_id": "balance.household_only_benefits", "year": 2028, - "value": 601425544.379385, + "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "balance", "partition": null, @@ -8998,7 +11204,9 @@ { "metric_id": "balance.household_only_benefits", "year": 2029, - "value": 612524542.784497, + "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "balance", "partition": null, @@ -9007,7 +11215,9 @@ { "metric_id": "balance.household_only_benefits", "year": 2030, - "value": 626466307.2763597, + "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "balance", "partition": null, @@ -9016,7 +11226,9 @@ { "metric_id": "balance.household_only_benefits", "year": 2031, - "value": 635100657.4934409, + "value": 0.0, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "balance", "partition": null, @@ -9025,7 +11237,11 @@ { "metric_id": "model.gov_balance", "year": 2025, - "value": 440933124873.35913, + "value": 432863283042.85693, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "model_total", "partition": null, @@ -9034,7 +11250,11 @@ { "metric_id": "model.gov_balance", "year": 2026, - "value": 469235773431.7386, + "value": 460767805104.64594, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "model_total", "partition": null, @@ -9043,7 +11263,11 @@ { "metric_id": "model.gov_balance", "year": 2027, - "value": 501514711424.7265, + "value": 493420270542.4583, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "model_total", "partition": null, @@ -9052,7 +11276,11 @@ { "metric_id": "model.gov_balance", "year": 2028, - "value": 529983106859.2174, + "value": 521546502260.1046, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "model_total", "partition": null, @@ -9061,7 +11289,11 @@ { "metric_id": "model.gov_balance", "year": 2029, - "value": 559121775135.3358, + "value": 551900461585.6729, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "model_total", "partition": null, @@ -9070,7 +11302,11 @@ { "metric_id": "model.gov_balance", "year": 2030, - "value": 593658959431.4342, + "value": 586431318870.907, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "model_total", "partition": null, @@ -9079,7 +11315,11 @@ { "metric_id": "model.gov_balance", "year": 2031, - "value": 627312396103.4205, + "value": 620873124411.7375, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "model_total", "partition": null, @@ -9088,7 +11328,9 @@ { "metric_id": "household.household_market_income", "year": 2025, - "value": 1671225658932.162, + "value": 1657055494245.5037, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "household_total", "partition": null, @@ -9097,7 +11339,9 @@ { "metric_id": "household.household_market_income", "year": 2026, - "value": 1733933903918.711, + "value": 1719245701089.3281, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "household_total", "partition": null, @@ -9106,7 +11350,9 @@ { "metric_id": "household.household_market_income", "year": 2027, - "value": 1786792811393.0068, + "value": 1771683231648.2764, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "household_total", "partition": null, @@ -9115,7 +11361,9 @@ { "metric_id": "household.household_market_income", "year": 2028, - "value": 1837490253867.1548, + "value": 1821985672731.2063, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "household_total", "partition": null, @@ -9124,7 +11372,9 @@ { "metric_id": "household.household_market_income", "year": 2029, - "value": 1899443273442.607, + "value": 1887412879505.8608, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "household_total", "partition": null, @@ -9133,7 +11383,9 @@ { "metric_id": "household.household_market_income", "year": 2030, - "value": 1958070419692.7725, + "value": 1945587770944.968, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "household_total", "partition": null, @@ -9142,7 +11394,9 @@ { "metric_id": "household.household_market_income", "year": 2031, - "value": 2030307938225.9048, + "value": 2017368706417.267, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "household_total", "partition": null, @@ -9151,7 +11405,11 @@ { "metric_id": "household.household_net_income", "year": 2025, - "value": 1662845456756.1794, + "value": 1650695092699.1787, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "household_total", "partition": null, @@ -9160,7 +11418,11 @@ { "metric_id": "household.household_net_income", "year": 2026, - "value": 1710908123095.9045, + "value": 1698452218971.148, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "household_total", "partition": null, @@ -9169,7 +11431,11 @@ { "metric_id": "household.household_net_income", "year": 2027, - "value": 1743115474011.6213, + "value": 1729708349505.7048, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "household_total", "partition": null, @@ -9178,7 +11444,11 @@ { "metric_id": "household.household_net_income", "year": 2028, - "value": 1776966674392.025, + "value": 1763350595681.0042, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "household_total", "partition": null, @@ -9187,7 +11457,11 @@ { "metric_id": "household.household_net_income", "year": 2029, - "value": 1812648751541.618, + "value": 1797840584674.6392, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "household_total", "partition": null, @@ -9196,7 +11470,11 @@ { "metric_id": "household.household_net_income", "year": 2030, - "value": 1849604189724.0015, + "value": 1834164055321.444, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "household_total", "partition": null, @@ -9205,7 +11483,11 @@ { "metric_id": "household.household_net_income", "year": 2031, - "value": 1901814852667.9023, + "value": 1884778958157.876, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp", "kind": "household_total", "partition": null, @@ -9214,7 +11496,9 @@ { "metric_id": "household.hbai_household_net_income", "year": 2025, - "value": 1477497599801.4927, + "value": 1468438454639.119, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "household_total", "partition": null, @@ -9223,7 +11507,9 @@ { "metric_id": "household.hbai_household_net_income", "year": 2026, - "value": 1524365447451.7742, + "value": 1515139365275.6355, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "household_total", "partition": null, @@ -9232,7 +11518,9 @@ { "metric_id": "household.hbai_household_net_income", "year": 2027, - "value": 1557424708805.0208, + "value": 1547358223256.206, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "household_total", "partition": null, @@ -9241,7 +11529,9 @@ { "metric_id": "household.hbai_household_net_income", "year": 2028, - "value": 1590631579327.68, + "value": 1580410096999.486, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "household_total", "partition": null, @@ -9250,7 +11540,9 @@ { "metric_id": "household.hbai_household_net_income", "year": 2029, - "value": 1624770529416.2014, + "value": 1613429021347.468, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "household_total", "partition": null, @@ -9259,7 +11551,9 @@ { "metric_id": "household.hbai_household_net_income", "year": 2030, - "value": 1659800503787.3513, + "value": 1647838190515.2617, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "household_total", "partition": null, @@ -9268,7 +11562,9 @@ { "metric_id": "household.hbai_household_net_income", "year": 2031, - "value": 1706265955643.35, + "value": 1697900004504.373, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "household_total", "partition": null, @@ -9277,7 +11573,9 @@ { "metric_id": "poverty.absolute_bhc.all", "year": 2025, - "value": 0.15790499791115192, + "value": 0.158961068989031, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9286,7 +11584,9 @@ { "metric_id": "poverty.absolute_bhc.all", "year": 2026, - "value": 0.15015054717546153, + "value": 0.149417048095037, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9295,7 +11595,9 @@ { "metric_id": "poverty.absolute_bhc.all", "year": 2027, - "value": 0.1549582355031067, + "value": 0.1551359605887892, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9304,7 +11606,9 @@ { "metric_id": "poverty.absolute_bhc.all", "year": 2028, - "value": 0.15586605016301394, + "value": 0.15590985583220196, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9313,7 +11617,9 @@ { "metric_id": "poverty.absolute_bhc.all", "year": 2029, - "value": 0.15679856209322698, + "value": 0.15717923007921353, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9322,7 +11628,9 @@ { "metric_id": "poverty.absolute_bhc.all", "year": 2030, - "value": 0.15996963062767566, + "value": 0.1610142002033216, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9331,7 +11639,9 @@ { "metric_id": "poverty.absolute_bhc.all", "year": 2031, - "value": 0.15916276272552643, + "value": 0.1599545027297433, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9340,7 +11650,9 @@ { "metric_id": "poverty_count.absolute_bhc.all", "year": 2025, - "value": 11008006.535612345, + "value": 11050012.62085329, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9349,7 +11661,9 @@ { "metric_id": "poverty_count.absolute_bhc.all", "year": 2026, - "value": 10507198.299471915, + "value": 10426039.302517518, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9358,7 +11672,9 @@ { "metric_id": "poverty_count.absolute_bhc.all", "year": 2027, - "value": 10883751.14921306, + "value": 10865147.24560164, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9367,7 +11683,9 @@ { "metric_id": "poverty_count.absolute_bhc.all", "year": 2028, - "value": 10991302.525305092, + "value": 10963024.831684813, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9376,7 +11694,9 @@ { "metric_id": "poverty_count.absolute_bhc.all", "year": 2029, - "value": 11105712.280909285, + "value": 11100912.898740932, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9385,7 +11705,9 @@ { "metric_id": "poverty_count.absolute_bhc.all", "year": 2030, - "value": 11381299.168434069, + "value": 11422934.10709335, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9394,7 +11716,9 @@ { "metric_id": "poverty_count.absolute_bhc.all", "year": 2031, - "value": 11372607.559264764, + "value": 11396550.62013276, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9403,7 +11727,9 @@ { "metric_id": "poverty.absolute_bhc.children", "year": 2025, - "value": 0.23024237894583952, + "value": 0.2372510378251411, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9412,7 +11738,9 @@ { "metric_id": "poverty.absolute_bhc.children", "year": 2026, - "value": 0.20587063573611564, + "value": 0.20852661548421755, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9421,7 +11749,9 @@ { "metric_id": "poverty.absolute_bhc.children", "year": 2027, - "value": 0.21312205523439626, + "value": 0.21671681039197135, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9430,7 +11760,9 @@ { "metric_id": "poverty.absolute_bhc.children", "year": 2028, - "value": 0.21148974274821794, + "value": 0.21457714000706526, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9439,7 +11771,9 @@ { "metric_id": "poverty.absolute_bhc.children", "year": 2029, - "value": 0.2129381736428246, + "value": 0.21642597560772944, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9448,7 +11782,9 @@ { "metric_id": "poverty.absolute_bhc.children", "year": 2030, - "value": 0.2171366623415043, + "value": 0.2217104975392767, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9457,7 +11793,9 @@ { "metric_id": "poverty.absolute_bhc.children", "year": 2031, - "value": 0.2168645562087503, + "value": 0.22078118293404653, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9466,7 +11804,9 @@ { "metric_id": "poverty_count.absolute_bhc.children", "year": 2025, - "value": 3458586.670649603, + "value": 3559375.146835327, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9475,7 +11815,9 @@ { "metric_id": "poverty_count.absolute_bhc.children", "year": 2026, - "value": 3104238.0042080134, + "value": 3140323.1707639247, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9484,7 +11826,9 @@ { "metric_id": "poverty_count.absolute_bhc.children", "year": 2027, - "value": 3225469.4537050426, + "value": 3275739.6749524027, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9493,7 +11837,9 @@ { "metric_id": "poverty_count.absolute_bhc.children", "year": 2028, - "value": 3213568.3187645674, + "value": 3256371.3432342857, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9502,7 +11848,9 @@ { "metric_id": "poverty_count.absolute_bhc.children", "year": 2029, - "value": 3249813.6879644096, + "value": 3298880.366600305, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9511,7 +11859,9 @@ { "metric_id": "poverty_count.absolute_bhc.children", "year": 2030, - "value": 3328802.6769966334, + "value": 3394637.414582446, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9520,7 +11870,9 @@ { "metric_id": "poverty_count.absolute_bhc.children", "year": 2031, - "value": 3338933.418882489, + "value": 3394944.311651394, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9529,7 +11881,9 @@ { "metric_id": "poverty.absolute_bhc.working_age_adults", "year": 2025, - "value": 0.13730515589263637, + "value": 0.13767748825105397, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9538,7 +11892,9 @@ { "metric_id": "poverty.absolute_bhc.working_age_adults", "year": 2026, - "value": 0.13444889083444914, + "value": 0.13372106552488075, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9547,7 +11903,9 @@ { "metric_id": "poverty.absolute_bhc.working_age_adults", "year": 2027, - "value": 0.13964335698946462, + "value": 0.13989204520959575, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9556,7 +11914,9 @@ { "metric_id": "poverty.absolute_bhc.working_age_adults", "year": 2028, - "value": 0.14095635404241666, + "value": 0.14124164361087443, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9565,7 +11925,9 @@ { "metric_id": "poverty.absolute_bhc.working_age_adults", "year": 2029, - "value": 0.14196947141222863, + "value": 0.14248707378049913, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9574,7 +11936,9 @@ { "metric_id": "poverty.absolute_bhc.working_age_adults", "year": 2030, - "value": 0.1453637344339517, + "value": 0.14658630153368837, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9583,7 +11947,9 @@ { "metric_id": "poverty.absolute_bhc.working_age_adults", "year": 2031, - "value": 0.1424988521749652, + "value": 0.14525417694146392, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9592,7 +11958,9 @@ { "metric_id": "poverty_count.absolute_bhc.working_age_adults", "year": 2025, - "value": 5861346.487035349, + "value": 5863952.6221417785, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9601,7 +11969,9 @@ { "metric_id": "poverty_count.absolute_bhc.working_age_adults", "year": 2026, - "value": 5780330.343414247, + "value": 5736660.92677407, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9610,7 +11980,9 @@ { "metric_id": "poverty_count.absolute_bhc.working_age_adults", "year": 2027, - "value": 6067671.953066379, + "value": 6072487.460049972, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9619,7 +11991,9 @@ { "metric_id": "poverty_count.absolute_bhc.working_age_adults", "year": 2028, - "value": 6169748.167899072, + "value": 6178484.984416798, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9628,7 +12002,9 @@ { "metric_id": "poverty_count.absolute_bhc.working_age_adults", "year": 2029, - "value": 6241435.053964257, + "value": 6260390.306578115, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9637,7 +12013,9 @@ { "metric_id": "poverty_count.absolute_bhc.working_age_adults", "year": 2030, - "value": 6419415.955847114, + "value": 6469478.6622083485, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9646,7 +12024,9 @@ { "metric_id": "poverty_count.absolute_bhc.working_age_adults", "year": 2031, - "value": 6319971.187485427, + "value": 6438252.252475888, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9655,7 +12035,9 @@ { "metric_id": "poverty.absolute_bhc.pensioners", "year": 2025, - "value": 0.14063908804109557, + "value": 0.13647330334302774, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9664,7 +12046,9 @@ { "metric_id": "poverty.absolute_bhc.pensioners", "year": 2026, - "value": 0.13628217188144012, + "value": 0.13107228723131284, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9673,7 +12057,9 @@ { "metric_id": "poverty.absolute_bhc.pensioners", "year": 2027, - "value": 0.1365202033742876, + "value": 0.13176164489560352, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9682,7 +12068,9 @@ { "metric_id": "poverty.absolute_bhc.pensioners", "year": 2028, - "value": 0.1391945511558675, + "value": 0.13408989504529978, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9691,7 +12079,9 @@ { "metric_id": "poverty.absolute_bhc.pensioners", "year": 2029, - "value": 0.1391430413120495, + "value": 0.13467956142673865, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9700,7 +12090,9 @@ { "metric_id": "poverty.absolute_bhc.pensioners", "year": 2030, - "value": 0.14011702215368302, + "value": 0.13556998964969896, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9709,7 +12101,9 @@ { "metric_id": "poverty.absolute_bhc.pensioners", "year": 2031, - "value": 0.14640454331430913, + "value": 0.13538234298373342, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9718,7 +12112,9 @@ { "metric_id": "poverty_count.absolute_bhc.pensioners", "year": 2025, - "value": 1688073.3779273927, + "value": 1626684.8518761843, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9727,7 +12123,9 @@ { "metric_id": "poverty_count.absolute_bhc.pensioners", "year": 2026, - "value": 1622629.9518496543, + "value": 1549055.204979524, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9736,7 +12134,9 @@ { "metric_id": "poverty_count.absolute_bhc.pensioners", "year": 2027, - "value": 1590609.7424416393, + "value": 1516920.1105992645, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9745,7 +12145,9 @@ { "metric_id": "poverty_count.absolute_bhc.pensioners", "year": 2028, - "value": 1607986.0386414528, + "value": 1528168.5040337294, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9754,7 +12156,9 @@ { "metric_id": "poverty_count.absolute_bhc.pensioners", "year": 2029, - "value": 1614463.5389806181, + "value": 1541642.2255625129, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9763,7 +12167,9 @@ { "metric_id": "poverty_count.absolute_bhc.pensioners", "year": 2030, - "value": 1633080.5355903208, + "value": 1558818.0303025544, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9772,7 +12178,9 @@ { "metric_id": "poverty_count.absolute_bhc.pensioners", "year": 2031, - "value": 1713702.9528968483, + "value": 1563354.056005478, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9781,7 +12189,9 @@ { "metric_id": "poverty.absolute_ahc.all", "year": 2025, - "value": 0.2084922594723321, + "value": 0.20913249144654364, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9790,7 +12200,9 @@ { "metric_id": "poverty.absolute_ahc.all", "year": 2026, - "value": 0.2033983080431449, + "value": 0.20368321654160576, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9799,7 +12211,9 @@ { "metric_id": "poverty.absolute_ahc.all", "year": 2027, - "value": 0.2085258023862174, + "value": 0.2099396779334123, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9808,7 +12222,9 @@ { "metric_id": "poverty.absolute_ahc.all", "year": 2028, - "value": 0.21083623822359046, + "value": 0.21265695145642433, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9817,7 +12233,9 @@ { "metric_id": "poverty.absolute_ahc.all", "year": 2029, - "value": 0.21373904608988534, + "value": 0.2154006487190125, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9826,7 +12244,9 @@ { "metric_id": "poverty.absolute_ahc.all", "year": 2030, - "value": 0.2213187707909106, + "value": 0.22356054596434546, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9835,7 +12255,9 @@ { "metric_id": "poverty.absolute_ahc.all", "year": 2031, - "value": 0.2195671141063277, + "value": 0.223770468364186, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9844,7 +12266,9 @@ { "metric_id": "poverty_count.absolute_ahc.all", "year": 2025, - "value": 14534588.42504394, + "value": 14537626.631551296, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9853,7 +12277,9 @@ { "metric_id": "poverty_count.absolute_ahc.all", "year": 2026, - "value": 14233357.097853199, + "value": 14212630.00441049, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9862,7 +12288,9 @@ { "metric_id": "poverty_count.absolute_ahc.all", "year": 2027, - "value": 14646158.908514857, + "value": 14703396.329152241, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9871,7 +12299,9 @@ { "metric_id": "poverty_count.absolute_ahc.all", "year": 2028, - "value": 14867669.227449715, + "value": 14953278.142699987, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9880,7 +12310,9 @@ { "metric_id": "poverty_count.absolute_ahc.all", "year": 2029, - "value": 15138686.971242383, + "value": 15212848.660455883, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9889,7 +12321,9 @@ { "metric_id": "poverty_count.absolute_ahc.all", "year": 2030, - "value": 15746083.378938913, + "value": 15860199.797730953, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9898,7 +12332,9 @@ { "metric_id": "poverty_count.absolute_ahc.all", "year": 2031, - "value": 15688660.958704859, + "value": 15943355.307177946, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9907,7 +12343,9 @@ { "metric_id": "poverty.absolute_ahc.children", "year": 2025, - "value": 0.31720685844300495, + "value": 0.3176647822027365, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9916,7 +12354,9 @@ { "metric_id": "poverty.absolute_ahc.children", "year": 2026, - "value": 0.30038158814530413, + "value": 0.29976792277040976, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9925,7 +12365,9 @@ { "metric_id": "poverty.absolute_ahc.children", "year": 2027, - "value": 0.3065600330656107, + "value": 0.3075246154957757, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9934,7 +12376,9 @@ { "metric_id": "poverty.absolute_ahc.children", "year": 2028, - "value": 0.3089024392477794, + "value": 0.31040394928891696, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9943,7 +12387,9 @@ { "metric_id": "poverty.absolute_ahc.children", "year": 2029, - "value": 0.3131465359163617, + "value": 0.31404388184177656, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9952,7 +12398,9 @@ { "metric_id": "poverty.absolute_ahc.children", "year": 2030, - "value": 0.32764715169339104, + "value": 0.32925032071219956, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9961,7 +12409,9 @@ { "metric_id": "poverty.absolute_ahc.children", "year": 2031, - "value": 0.32587820140005935, + "value": 0.3295364201437651, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -9970,7 +12420,9 @@ { "metric_id": "poverty_count.absolute_ahc.children", "year": 2025, - "value": 4764923.892259136, + "value": 4765787.92304638, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9979,7 +12431,9 @@ { "metric_id": "poverty_count.absolute_ahc.children", "year": 2026, - "value": 4529329.490584716, + "value": 4514378.90334405, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9988,7 +12442,9 @@ { "metric_id": "poverty_count.absolute_ahc.children", "year": 2027, - "value": 4639595.002462, + "value": 4648326.921118781, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -9997,7 +12453,9 @@ { "metric_id": "poverty_count.absolute_ahc.children", "year": 2028, - "value": 4693745.802781373, + "value": 4710616.076148167, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10006,7 +12464,9 @@ { "metric_id": "poverty_count.absolute_ahc.children", "year": 2029, - "value": 4779170.786289513, + "value": 4786824.655172229, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10015,7 +12475,9 @@ { "metric_id": "poverty_count.absolute_ahc.children", "year": 2030, - "value": 5022978.173772946, + "value": 5041193.222052559, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10024,7 +12486,9 @@ { "metric_id": "poverty_count.absolute_ahc.children", "year": 2031, - "value": 5017351.0884489715, + "value": 5067269.683862701, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10033,7 +12497,9 @@ { "metric_id": "poverty.absolute_ahc.working_age_adults", "year": 2025, - "value": 0.19375179335562778, + "value": 0.19431403398519395, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10042,7 +12508,9 @@ { "metric_id": "poverty.absolute_ahc.working_age_adults", "year": 2026, - "value": 0.1915301826384273, + "value": 0.19237286661348602, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10051,7 +12519,9 @@ { "metric_id": "poverty.absolute_ahc.working_age_adults", "year": 2027, - "value": 0.19779351466886932, + "value": 0.1997992793069061, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10060,7 +12530,9 @@ { "metric_id": "poverty.absolute_ahc.working_age_adults", "year": 2028, - "value": 0.19985745387449372, + "value": 0.20238185535311953, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10069,7 +12541,9 @@ { "metric_id": "poverty.absolute_ahc.working_age_adults", "year": 2029, - "value": 0.20299186364561206, + "value": 0.20530273277647584, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10078,7 +12552,9 @@ { "metric_id": "poverty.absolute_ahc.working_age_adults", "year": 2030, - "value": 0.21009860237041597, + "value": 0.2131128866367783, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10087,7 +12563,9 @@ { "metric_id": "poverty.absolute_ahc.working_age_adults", "year": 2031, - "value": 0.205233615867211, + "value": 0.21322897588420822, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10096,7 +12574,9 @@ { "metric_id": "poverty_count.absolute_ahc.working_age_adults", "year": 2025, - "value": 8270966.854513526, + "value": 8276213.515957296, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10105,7 +12585,9 @@ { "metric_id": "poverty_count.absolute_ahc.working_age_adults", "year": 2026, - "value": 8234413.236980796, + "value": 8252835.130660608, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10114,7 +12596,9 @@ { "metric_id": "poverty_count.absolute_ahc.working_age_adults", "year": 2027, - "value": 8594366.300899416, + "value": 8672963.61491029, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10123,7 +12607,9 @@ { "metric_id": "poverty_count.absolute_ahc.working_age_adults", "year": 2028, - "value": 8747886.310340255, + "value": 8853006.963460386, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10132,7 +12618,9 @@ { "metric_id": "poverty_count.absolute_ahc.working_age_adults", "year": 2029, - "value": 8924175.886719018, + "value": 9020293.589352593, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10141,7 +12629,9 @@ { "metric_id": "poverty_count.absolute_ahc.working_age_adults", "year": 2030, - "value": 9278176.056839228, + "value": 9405580.591863185, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10150,7 +12640,9 @@ { "metric_id": "poverty_count.absolute_ahc.working_age_adults", "year": 2031, - "value": 9102322.714793772, + "value": 9451170.101861268, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10159,7 +12651,9 @@ { "metric_id": "poverty.absolute_ahc.pensioners", "year": 2025, - "value": 0.1248615596202156, + "value": 0.12547784554248842, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10168,7 +12662,9 @@ { "metric_id": "poverty.absolute_ahc.pensioners", "year": 2026, - "value": 0.12343063061462466, + "value": 0.12230292156970884, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10177,7 +12673,9 @@ { "metric_id": "poverty.absolute_ahc.pensioners", "year": 2027, - "value": 0.12120729498631465, + "value": 0.12005149872375881, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10186,7 +12684,9 @@ { "metric_id": "poverty.absolute_ahc.pensioners", "year": 2028, - "value": 0.12344422855077232, + "value": 0.12193596873043704, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10195,7 +12695,9 @@ { "metric_id": "poverty.absolute_ahc.pensioners", "year": 2029, - "value": 0.12370524920005636, + "value": 0.12280615616424372, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10204,7 +12706,9 @@ { "metric_id": "poverty.absolute_ahc.pensioners", "year": 2030, - "value": 0.12397378149719714, + "value": 0.1229252820223357, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10213,7 +12717,9 @@ { "metric_id": "poverty.absolute_ahc.pensioners", "year": 2031, - "value": 0.13404122784123754, + "value": 0.12339393057336441, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10222,7 +12728,9 @@ { "metric_id": "poverty_count.absolute_ahc.pensioners", "year": 2025, - "value": 1498697.6782712787, + "value": 1495625.1925476193, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10231,7 +12739,9 @@ { "metric_id": "poverty_count.absolute_ahc.pensioners", "year": 2026, - "value": 1469614.3702876866, + "value": 1445415.970405832, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10240,7 +12750,9 @@ { "metric_id": "poverty_count.absolute_ahc.pensioners", "year": 2027, - "value": 1412197.6051534414, + "value": 1382105.7931231707, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10249,7 +12761,9 @@ { "metric_id": "poverty_count.absolute_ahc.pensioners", "year": 2028, - "value": 1426037.1143280864, + "value": 1389655.1030914336, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10258,7 +12772,9 @@ { "metric_id": "poverty_count.absolute_ahc.pensioners", "year": 2029, - "value": 1435340.2982338518, + "value": 1405730.415931061, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10267,7 +12783,9 @@ { "metric_id": "poverty_count.absolute_ahc.pensioners", "year": 2030, - "value": 1444929.1483267397, + "value": 1413425.983815208, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10276,7 +12794,9 @@ { "metric_id": "poverty_count.absolute_ahc.pensioners", "year": 2031, - "value": 1568987.155462116, + "value": 1424915.5214539766, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10285,7 +12805,9 @@ { "metric_id": "poverty.relative_bhc.all", "year": 2025, - "value": 0.17062007668867718, + "value": 0.16996315965340555, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10294,7 +12816,9 @@ { "metric_id": "poverty.relative_bhc.all", "year": 2026, - "value": 0.1647051950949729, + "value": 0.1641757039106901, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10303,7 +12827,9 @@ { "metric_id": "poverty.relative_bhc.all", "year": 2027, - "value": 0.1644876206126917, + "value": 0.1658306356282735, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10312,7 +12838,9 @@ { "metric_id": "poverty.relative_bhc.all", "year": 2028, - "value": 0.16684150829295824, + "value": 0.16675706960047298, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10321,7 +12849,9 @@ { "metric_id": "poverty.relative_bhc.all", "year": 2029, - "value": 0.1684367435335271, + "value": 0.16818506457390087, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10330,7 +12860,9 @@ { "metric_id": "poverty.relative_bhc.all", "year": 2030, - "value": 0.1631533914075491, + "value": 0.16603686894151898, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10339,7 +12871,9 @@ { "metric_id": "poverty.relative_bhc.all", "year": 2031, - "value": 0.169943728112801, + "value": 0.16939429823668872, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10348,7 +12882,9 @@ { "metric_id": "poverty_count.relative_bhc.all", "year": 2025, - "value": 11894410.842856497, + "value": 11814811.457891181, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10357,7 +12893,9 @@ { "metric_id": "poverty_count.relative_bhc.all", "year": 2026, - "value": 11525699.895011187, + "value": 11455870.419837251, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10366,7 +12904,9 @@ { "metric_id": "poverty_count.relative_bhc.all", "year": 2027, - "value": 11553063.469406977, + "value": 11614162.616421178, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10375,7 +12915,9 @@ { "metric_id": "poverty_count.relative_bhc.all", "year": 2028, - "value": 11765265.684914708, + "value": 11725762.204902157, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10384,7 +12926,9 @@ { "metric_id": "poverty_count.relative_bhc.all", "year": 2029, - "value": 11930020.187968686, + "value": 11878209.046851024, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10393,7 +12937,9 @@ { "metric_id": "poverty_count.relative_bhc.all", "year": 2030, - "value": 11607812.999679968, + "value": 11779260.530264333, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10402,7 +12948,9 @@ { "metric_id": "poverty_count.relative_bhc.all", "year": 2031, - "value": 12142936.53797774, + "value": 12069123.79252024, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10411,7 +12959,9 @@ { "metric_id": "poverty.relative_bhc.children", "year": 2025, - "value": 0.25579913589553366, + "value": 0.2576548985094404, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10420,7 +12970,9 @@ { "metric_id": "poverty.relative_bhc.children", "year": 2026, - "value": 0.23345621726435167, + "value": 0.2349385317072657, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10429,7 +12981,9 @@ { "metric_id": "poverty.relative_bhc.children", "year": 2027, - "value": 0.22912843225646004, + "value": 0.23473844147435505, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10438,7 +12992,9 @@ { "metric_id": "poverty.relative_bhc.children", "year": 2028, - "value": 0.23084457664090657, + "value": 0.23360704801218143, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10447,7 +13003,9 @@ { "metric_id": "poverty.relative_bhc.children", "year": 2029, - "value": 0.23197251050977175, + "value": 0.23495351453647773, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10456,7 +13014,9 @@ { "metric_id": "poverty.relative_bhc.children", "year": 2030, - "value": 0.2220824501863291, + "value": 0.23174222961978033, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10465,7 +13025,9 @@ { "metric_id": "poverty.relative_bhc.children", "year": 2031, - "value": 0.23445025294767866, + "value": 0.23914597293246234, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10474,7 +13036,9 @@ { "metric_id": "poverty_count.relative_bhc.children", "year": 2025, - "value": 3842487.581228867, + "value": 3865485.4816306233, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10483,7 +13047,9 @@ { "metric_id": "poverty_count.relative_bhc.children", "year": 2026, - "value": 3520189.556705728, + "value": 3538075.5262937695, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10492,7 +13058,9 @@ { "metric_id": "poverty_count.relative_bhc.children", "year": 2027, - "value": 3467715.9921610057, + "value": 3548142.041142389, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10501,7 +13069,9 @@ { "metric_id": "poverty_count.relative_bhc.children", "year": 2028, - "value": 3507663.3429688513, + "value": 3545164.6745751947, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10510,7 +13080,9 @@ { "metric_id": "poverty_count.relative_bhc.children", "year": 2029, - "value": 3540311.3823575675, + "value": 3581287.015071422, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10519,7 +13091,9 @@ { "metric_id": "poverty_count.relative_bhc.children", "year": 2030, - "value": 3404623.8287089914, + "value": 3548234.530783549, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10528,7 +13102,9 @@ { "metric_id": "poverty_count.relative_bhc.children", "year": 2031, - "value": 3609689.837369889, + "value": 3677339.0271395296, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10537,7 +13113,9 @@ { "metric_id": "poverty.relative_bhc.working_age_adults", "year": 2025, - "value": 0.14589881032453236, + "value": 0.14512498963363443, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10546,7 +13124,9 @@ { "metric_id": "poverty.relative_bhc.working_age_adults", "year": 2026, - "value": 0.14416151943670144, + "value": 0.14359366405754964, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10555,7 +13135,9 @@ { "metric_id": "poverty.relative_bhc.working_age_adults", "year": 2027, - "value": 0.1465298878616869, + "value": 0.1475713897931732, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10564,7 +13146,9 @@ { "metric_id": "poverty.relative_bhc.working_age_adults", "year": 2028, - "value": 0.14949165839067746, + "value": 0.1494918942688663, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10573,7 +13157,9 @@ { "metric_id": "poverty.relative_bhc.working_age_adults", "year": 2029, - "value": 0.15186122947304564, + "value": 0.1516084128453753, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10582,7 +13168,9 @@ { "metric_id": "poverty.relative_bhc.working_age_adults", "year": 2030, - "value": 0.14784727703111472, + "value": 0.1503840561165627, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10591,7 +13179,9 @@ { "metric_id": "poverty.relative_bhc.working_age_adults", "year": 2031, - "value": 0.15069757220037083, + "value": 0.15254973464975796, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10600,7 +13190,9 @@ { "metric_id": "poverty_count.relative_bhc.working_age_adults", "year": 2025, - "value": 6228196.412573293, + "value": 6181156.224673748, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10609,7 +13201,9 @@ { "metric_id": "poverty_count.relative_bhc.working_age_adults", "year": 2026, - "value": 6197903.1584480405, + "value": 6160197.413159236, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10618,7 +13212,9 @@ { "metric_id": "poverty_count.relative_bhc.working_age_adults", "year": 2027, - "value": 6366900.008937746, + "value": 6405835.3899862915, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10627,7 +13223,9 @@ { "metric_id": "poverty_count.relative_bhc.working_age_adults", "year": 2028, - "value": 6543343.801262975, + "value": 6539384.56406565, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10636,7 +13234,9 @@ { "metric_id": "poverty_count.relative_bhc.working_age_adults", "year": 2029, - "value": 6676308.586224228, + "value": 6661150.467831269, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10645,7 +13245,9 @@ { "metric_id": "poverty_count.relative_bhc.working_age_adults", "year": 2030, - "value": 6529091.818519026, + "value": 6637089.76898399, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10654,7 +13256,9 @@ { "metric_id": "poverty_count.relative_bhc.working_age_adults", "year": 2031, - "value": 6683592.883688301, + "value": 6761620.8594070375, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10663,7 +13267,9 @@ { "metric_id": "poverty.relative_bhc.pensioners", "year": 2025, - "value": 0.15194083636457575, + "value": 0.14834340320557673, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10672,7 +13278,9 @@ { "metric_id": "poverty.relative_bhc.pensioners", "year": 2026, - "value": 0.15181812223954255, + "value": 0.14871795468967855, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10681,7 +13289,9 @@ { "metric_id": "poverty.relative_bhc.pensioners", "year": 2027, - "value": 0.1474923682419708, + "value": 0.14420583478126237, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10690,7 +13300,9 @@ { "metric_id": "poverty.relative_bhc.pensioners", "year": 2028, - "value": 0.14839398004790294, + "value": 0.14400903683858882, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10699,7 +13311,9 @@ { "metric_id": "poverty.relative_bhc.pensioners", "year": 2029, - "value": 0.1476699298274378, + "value": 0.14290280401894626, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10708,7 +13322,9 @@ { "metric_id": "poverty.relative_bhc.pensioners", "year": 2030, - "value": 0.14363623269573814, + "value": 0.1386242101836538, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10717,7 +13333,9 @@ { "metric_id": "poverty.relative_bhc.pensioners", "year": 2031, - "value": 0.1580190556933559, + "value": 0.14116789999709253, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10726,7 +13344,9 @@ { "metric_id": "poverty_count.relative_bhc.pensioners", "year": 2025, - "value": 1823726.8490543365, + "value": 1768169.7515868098, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10735,7 +13355,9 @@ { "metric_id": "poverty_count.relative_bhc.pensioners", "year": 2026, - "value": 1807607.179857418, + "value": 1757597.4803842455, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10744,7 +13366,9 @@ { "metric_id": "poverty_count.relative_bhc.pensioners", "year": 2027, - "value": 1718447.4683082253, + "value": 1660185.1852924973, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10753,7 +13377,9 @@ { "metric_id": "poverty_count.relative_bhc.pensioners", "year": 2028, - "value": 1714258.540682882, + "value": 1641212.9662613124, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10762,7 +13388,9 @@ { "metric_id": "poverty_count.relative_bhc.pensioners", "year": 2029, - "value": 1713400.2193868905, + "value": 1635771.5639483333, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10771,7 +13399,9 @@ { "metric_id": "poverty_count.relative_bhc.pensioners", "year": 2030, - "value": 1674097.3524519503, + "value": 1593936.230496794, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10780,7 +13410,9 @@ { "metric_id": "poverty_count.relative_bhc.pensioners", "year": 2031, - "value": 1849653.8169195503, + "value": 1630163.9059736729, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10789,7 +13421,9 @@ { "metric_id": "poverty.relative_ahc.all", "year": 2025, - "value": 0.21330212332422502, + "value": 0.21456512996755925, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10798,7 +13432,9 @@ { "metric_id": "poverty.relative_ahc.all", "year": 2026, - "value": 0.2105464759711648, + "value": 0.2108568153025047, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10807,7 +13443,9 @@ { "metric_id": "poverty.relative_ahc.all", "year": 2027, - "value": 0.21119415618195903, + "value": 0.21280995156860974, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10816,7 +13454,9 @@ { "metric_id": "poverty.relative_ahc.all", "year": 2028, - "value": 0.2124423499774284, + "value": 0.2141820445617756, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10825,7 +13465,9 @@ { "metric_id": "poverty.relative_ahc.all", "year": 2029, - "value": 0.2140000786845929, + "value": 0.2155949209344568, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10834,7 +13476,9 @@ { "metric_id": "poverty.relative_ahc.all", "year": 2030, - "value": 0.2204001169903213, + "value": 0.21996997492343381, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10843,7 +13487,9 @@ { "metric_id": "poverty.relative_ahc.all", "year": 2031, - "value": 0.2194456696036841, + "value": 0.2227237561956704, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10852,7 +13498,9 @@ { "metric_id": "poverty_count.relative_ahc.all", "year": 2025, - "value": 14869897.714917302, + "value": 14915270.822066262, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10861,7 +13509,9 @@ { "metric_id": "poverty_count.relative_ahc.all", "year": 2026, - "value": 14733569.846394584, + "value": 14713190.171909258, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10870,7 +13520,9 @@ { "metric_id": "poverty_count.relative_ahc.all", "year": 2027, - "value": 14833575.205535918, + "value": 14904419.64807345, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10879,7 +13531,9 @@ { "metric_id": "poverty_count.relative_ahc.all", "year": 2028, - "value": 14980928.401961535, + "value": 15060517.248883188, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10888,7 +13542,9 @@ { "metric_id": "poverty_count.relative_ahc.all", "year": 2029, - "value": 15157175.360766247, + "value": 15226569.296071708, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10897,7 +13553,9 @@ { "metric_id": "poverty_count.relative_ahc.all", "year": 2030, - "value": 15680724.262363464, + "value": 15605471.6038488, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10906,7 +13564,9 @@ { "metric_id": "poverty_count.relative_ahc.all", "year": 2031, - "value": 15679983.42229405, + "value": 15868778.424316749, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10915,7 +13575,9 @@ { "metric_id": "poverty.relative_ahc.children", "year": 2025, - "value": 0.3248406624741081, + "value": 0.32573092950864546, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10924,7 +13586,9 @@ { "metric_id": "poverty.relative_ahc.children", "year": 2026, - "value": 0.3131278902007049, + "value": 0.3129215499802995, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10933,7 +13597,9 @@ { "metric_id": "poverty.relative_ahc.children", "year": 2027, - "value": 0.30979319184398263, + "value": 0.31080197766773193, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10942,7 +13608,9 @@ { "metric_id": "poverty.relative_ahc.children", "year": 2028, - "value": 0.3102686929501225, + "value": 0.3112443481181635, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10951,7 +13619,9 @@ { "metric_id": "poverty.relative_ahc.children", "year": 2029, - "value": 0.3134903767691043, + "value": 0.31435135617461696, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10960,7 +13630,9 @@ { "metric_id": "poverty.relative_ahc.children", "year": 2030, - "value": 0.3252235647703323, + "value": 0.32341397660487087, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10969,7 +13641,9 @@ { "metric_id": "poverty.relative_ahc.children", "year": 2031, - "value": 0.3257920669222945, + "value": 0.32841073439755847, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -10978,7 +13652,9 @@ { "metric_id": "poverty_count.relative_ahc.children", "year": 2025, - "value": 4879595.105218306, + "value": 4886800.85733974, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10987,7 +13663,9 @@ { "metric_id": "poverty_count.relative_ahc.children", "year": 2026, - "value": 4721525.697256014, + "value": 4712466.999728724, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -10996,7 +13674,9 @@ { "metric_id": "poverty_count.relative_ahc.children", "year": 2027, - "value": 4688526.845143169, + "value": 4697865.234627768, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -11005,7 +13685,9 @@ { "metric_id": "poverty_count.relative_ahc.children", "year": 2028, - "value": 4714505.909423858, + "value": 4723369.767731324, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -11014,7 +13696,9 @@ { "metric_id": "poverty_count.relative_ahc.children", "year": 2029, - "value": 4784418.406716645, + "value": 4791511.343251109, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -11023,7 +13707,9 @@ { "metric_id": "poverty_count.relative_ahc.children", "year": 2030, - "value": 4985823.496389523, + "value": 4951832.22069715, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -11032,7 +13718,9 @@ { "metric_id": "poverty_count.relative_ahc.children", "year": 2031, - "value": 5016024.927589148, + "value": 5049960.054618016, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -11041,7 +13729,9 @@ { "metric_id": "poverty.relative_ahc.working_age_adults", "year": 2025, - "value": 0.19713460206621386, + "value": 0.19817681755370278, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -11050,7 +13740,9 @@ { "metric_id": "poverty.relative_ahc.working_age_adults", "year": 2026, - "value": 0.19751408902821108, + "value": 0.19800752646020686, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -11059,7 +13751,9 @@ { "metric_id": "poverty.relative_ahc.working_age_adults", "year": 2027, - "value": 0.19980334977328973, + "value": 0.2018228258946827, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -11068,7 +13762,9 @@ { "metric_id": "poverty.relative_ahc.working_age_adults", "year": 2028, - "value": 0.20092494834158509, + "value": 0.20314734474442595, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -11077,7 +13773,9 @@ { "metric_id": "poverty.relative_ahc.working_age_adults", "year": 2029, - "value": 0.20323204364702235, + "value": 0.2054474903629614, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -11086,7 +13784,9 @@ { "metric_id": "poverty.relative_ahc.working_age_adults", "year": 2030, - "value": 0.2095568415310035, + "value": 0.21027795561183132, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -11095,7 +13795,9 @@ { "metric_id": "poverty.relative_ahc.working_age_adults", "year": 2031, - "value": 0.2051403722499053, + "value": 0.2126635701601802, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -11104,7 +13806,9 @@ { "metric_id": "poverty_count.relative_ahc.working_age_adults", "year": 2025, - "value": 8415373.769339144, + "value": 8440736.998503834, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -11113,7 +13817,9 @@ { "metric_id": "poverty_count.relative_ahc.working_age_adults", "year": 2026, - "value": 8491677.952683121, + "value": 8494563.18488653, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -11122,7 +13828,9 @@ { "metric_id": "poverty_count.relative_ahc.working_age_adults", "year": 2027, - "value": 8681696.055470556, + "value": 8760802.499964043, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -11131,7 +13839,9 @@ { "metric_id": "poverty_count.relative_ahc.working_age_adults", "year": 2028, - "value": 8794611.213785172, + "value": 8886492.58844325, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -11140,7 +13850,9 @@ { "metric_id": "poverty_count.relative_ahc.working_age_adults", "year": 2029, - "value": 8934734.972874314, + "value": 9026653.738152012, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -11149,7 +13861,9 @@ { "metric_id": "poverty_count.relative_ahc.working_age_adults", "year": 2030, - "value": 9254251.326298147, + "value": 9280462.995042503, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -11158,7 +13872,9 @@ { "metric_id": "poverty_count.relative_ahc.working_age_adults", "year": 2031, - "value": 9098187.264116138, + "value": 9426109.034751624, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -11167,7 +13883,9 @@ { "metric_id": "poverty.relative_ahc.pensioners", "year": 2025, - "value": 0.1312126349091424, + "value": 0.133205373171771, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -11176,7 +13894,9 @@ { "metric_id": "poverty.relative_ahc.pensioners", "year": 2026, - "value": 0.12769319774473814, + "value": 0.12744273660248256, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -11185,7 +13905,9 @@ { "metric_id": "poverty.relative_ahc.pensioners", "year": 2027, - "value": 0.12559784398751747, + "value": 0.125579883146286, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -11194,7 +13916,9 @@ { "metric_id": "poverty.relative_ahc.pensioners", "year": 2028, - "value": 0.12740664745148308, + "value": 0.12728842519447406, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -11203,7 +13927,9 @@ { "metric_id": "poverty.relative_ahc.pensioners", "year": 2029, - "value": 0.12393637087688392, + "value": 0.12303974216451169, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -11212,7 +13938,9 @@ { "metric_id": "poverty.relative_ahc.pensioners", "year": 2030, - "value": 0.1236065858698001, + "value": 0.119424785385011, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -11221,7 +13949,9 @@ { "metric_id": "poverty.relative_ahc.pensioners", "year": 2031, - "value": 0.13376648593709345, + "value": 0.12060495966103543, + "suppressed": false, + "excludes": [], "unit": "rate", "kind": "poverty", "partition": null, @@ -11230,7 +13960,9 @@ { "metric_id": "poverty_count.relative_ahc.pensioners", "year": 2025, - "value": 1574928.8403598517, + "value": 1587732.9662226886, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -11239,7 +13971,9 @@ { "metric_id": "poverty_count.relative_ahc.pensioners", "year": 2026, - "value": 1520366.1964554489, + "value": 1506159.9872940034, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -11248,7 +13982,9 @@ { "metric_id": "poverty_count.relative_ahc.pensioners", "year": 2027, - "value": 1463352.3049221933, + "value": 1445751.9134816378, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -11257,7 +13993,9 @@ { "metric_id": "poverty_count.relative_ahc.pensioners", "year": 2028, - "value": 1471811.2787525058, + "value": 1450654.8927086145, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -11266,7 +14004,9 @@ { "metric_id": "poverty_count.relative_ahc.pensioners", "year": 2029, - "value": 1438021.9811752886, + "value": 1408404.2146685869, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -11275,7 +14015,9 @@ { "metric_id": "poverty_count.relative_ahc.pensioners", "year": 2030, - "value": 1440649.439675793, + "value": 1373176.3881091475, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -11284,7 +14026,9 @@ { "metric_id": "poverty_count.relative_ahc.pensioners", "year": 2031, - "value": 1565771.230588764, + "value": 1392709.3349471092, + "suppressed": false, + "excludes": [], "unit": "count", "kind": "poverty_count", "partition": null, @@ -11293,7 +14037,9 @@ { "metric_id": "inequality.gini_equiv_hbai_bhc", "year": 2025, - "value": 0.31169660677586286, + "value": 0.3077487914075191, + "suppressed": false, + "excludes": [], "unit": "index", "kind": "inequality", "partition": null, @@ -11302,7 +14048,9 @@ { "metric_id": "inequality.gini_equiv_hbai_bhc", "year": 2026, - "value": 0.3094015441232131, + "value": 0.3054631654461407, + "suppressed": false, + "excludes": [], "unit": "index", "kind": "inequality", "partition": null, @@ -11311,7 +14059,9 @@ { "metric_id": "inequality.gini_equiv_hbai_bhc", "year": 2027, - "value": 0.3105687571293162, + "value": 0.3069197698442653, + "suppressed": false, + "excludes": [], "unit": "index", "kind": "inequality", "partition": null, @@ -11320,7 +14070,9 @@ { "metric_id": "inequality.gini_equiv_hbai_bhc", "year": 2028, - "value": 0.3112819865588672, + "value": 0.3077757166797609, + "suppressed": false, + "excludes": [], "unit": "index", "kind": "inequality", "partition": null, @@ -11329,7 +14081,9 @@ { "metric_id": "inequality.gini_equiv_hbai_bhc", "year": 2029, - "value": 0.31188628846609523, + "value": 0.3082329014779346, + "suppressed": false, + "excludes": [], "unit": "index", "kind": "inequality", "partition": null, @@ -11338,7 +14092,9 @@ { "metric_id": "inequality.gini_equiv_hbai_bhc", "year": 2030, - "value": 0.3137188460113969, + "value": 0.3099891970371004, + "suppressed": false, + "excludes": [], "unit": "index", "kind": "inequality", "partition": null, @@ -11347,7 +14103,9 @@ { "metric_id": "inequality.gini_equiv_hbai_bhc", "year": 2031, - "value": 0.3126616094414172, + "value": 0.3110144570254967, + "suppressed": false, + "excludes": [], "unit": "index", "kind": "inequality", "partition": null, @@ -11356,7 +14114,11 @@ { "metric_id": "deciles.mean_income.1", "year": 2025, - "value": 18262.585926938675, + "value": 17676.754667048575, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11365,7 +14127,11 @@ { "metric_id": "deciles.mean_income.1", "year": 2026, - "value": 18565.573452097553, + "value": 17959.072766481713, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11374,7 +14140,11 @@ { "metric_id": "deciles.mean_income.1", "year": 2027, - "value": 18587.9409768735, + "value": 17890.694840247495, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11383,7 +14153,11 @@ { "metric_id": "deciles.mean_income.1", "year": 2028, - "value": 18712.32311277851, + "value": 17941.1511777277, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11392,7 +14166,11 @@ { "metric_id": "deciles.mean_income.1", "year": 2029, - "value": 19079.33376464379, + "value": 18267.238369432558, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11401,7 +14179,11 @@ { "metric_id": "deciles.mean_income.1", "year": 2030, - "value": 19168.884477875916, + "value": 18350.30992490091, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11410,7 +14192,11 @@ { "metric_id": "deciles.mean_income.1", "year": 2031, - "value": 19487.832363597438, + "value": 18550.46356681594, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11419,7 +14205,11 @@ { "metric_id": "deciles.mean_income.2", "year": 2025, - "value": 28212.59715391376, + "value": 28179.055803438234, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11428,7 +14218,11 @@ { "metric_id": "deciles.mean_income.2", "year": 2026, - "value": 29005.91280891695, + "value": 28837.04533117914, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11437,7 +14231,11 @@ { "metric_id": "deciles.mean_income.2", "year": 2027, - "value": 28622.542707465953, + "value": 28424.564554846565, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11446,7 +14244,11 @@ { "metric_id": "deciles.mean_income.2", "year": 2028, - "value": 28878.39944749893, + "value": 28883.45566735774, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11455,7 +14257,11 @@ { "metric_id": "deciles.mean_income.2", "year": 2029, - "value": 29211.074914268487, + "value": 29061.95653619478, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11464,7 +14270,11 @@ { "metric_id": "deciles.mean_income.2", "year": 2030, - "value": 29528.185297717675, + "value": 29759.483201387062, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11473,7 +14283,11 @@ { "metric_id": "deciles.mean_income.2", "year": 2031, - "value": 30103.165466505827, + "value": 30221.58748982937, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11482,7 +14296,11 @@ { "metric_id": "deciles.mean_income.3", "year": 2025, - "value": 34413.19157264763, + "value": 34530.61843120579, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11491,7 +14309,11 @@ { "metric_id": "deciles.mean_income.3", "year": 2026, - "value": 35673.03127903994, + "value": 35774.3120618477, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11500,7 +14322,11 @@ { "metric_id": "deciles.mean_income.3", "year": 2027, - "value": 36287.079062372846, + "value": 36424.80493358469, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11509,7 +14335,11 @@ { "metric_id": "deciles.mean_income.3", "year": 2028, - "value": 36891.915260352755, + "value": 36772.53572338885, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11518,7 +14348,11 @@ { "metric_id": "deciles.mean_income.3", "year": 2029, - "value": 37204.02706843331, + "value": 37156.5637359853, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11527,7 +14361,11 @@ { "metric_id": "deciles.mean_income.3", "year": 2030, - "value": 37191.52316634799, + "value": 36685.78880542181, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11536,7 +14374,11 @@ { "metric_id": "deciles.mean_income.3", "year": 2031, - "value": 37443.87462441918, + "value": 37377.12158903903, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11545,7 +14387,11 @@ { "metric_id": "deciles.mean_income.4", "year": 2025, - "value": 37642.82250138588, + "value": 38934.091210418585, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11554,7 +14400,11 @@ { "metric_id": "deciles.mean_income.4", "year": 2026, - "value": 39339.82023962752, + "value": 40539.44017480899, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11563,7 +14413,11 @@ { "metric_id": "deciles.mean_income.4", "year": 2027, - "value": 40283.78733924495, + "value": 41468.195696983545, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11572,7 +14426,11 @@ { "metric_id": "deciles.mean_income.4", "year": 2028, - "value": 41009.69588636075, + "value": 42373.92850208078, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11581,7 +14439,11 @@ { "metric_id": "deciles.mean_income.4", "year": 2029, - "value": 41559.21709716546, + "value": 42841.52793419517, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11590,7 +14452,11 @@ { "metric_id": "deciles.mean_income.4", "year": 2030, - "value": 42169.73199175639, + "value": 43336.4971038302, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11599,7 +14465,11 @@ { "metric_id": "deciles.mean_income.4", "year": 2031, - "value": 43752.63830672907, + "value": 44285.75677905547, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11608,7 +14478,11 @@ { "metric_id": "deciles.mean_income.5", "year": 2025, - "value": 45171.99281201596, + "value": 44653.353783363804, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11617,7 +14491,11 @@ { "metric_id": "deciles.mean_income.5", "year": 2026, - "value": 46058.866814268324, + "value": 46131.613207371694, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11626,7 +14504,11 @@ { "metric_id": "deciles.mean_income.5", "year": 2027, - "value": 46923.63741254213, + "value": 47073.502879079664, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11635,7 +14517,11 @@ { "metric_id": "deciles.mean_income.5", "year": 2028, - "value": 47337.90189430204, + "value": 47372.95055950299, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11644,7 +14530,11 @@ { "metric_id": "deciles.mean_income.5", "year": 2029, - "value": 48018.33585686029, + "value": 48085.54776182688, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11653,7 +14543,11 @@ { "metric_id": "deciles.mean_income.5", "year": 2030, - "value": 48015.10342326575, + "value": 48110.89818838793, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11662,7 +14556,11 @@ { "metric_id": "deciles.mean_income.5", "year": 2031, - "value": 49372.799605199805, + "value": 48857.4314782977, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11671,7 +14569,11 @@ { "metric_id": "deciles.mean_income.6", "year": 2025, - "value": 48820.920957344184, + "value": 48283.828312490165, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11680,7 +14582,11 @@ { "metric_id": "deciles.mean_income.6", "year": 2026, - "value": 50247.0931869786, + "value": 49405.72352548862, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11689,7 +14595,11 @@ { "metric_id": "deciles.mean_income.6", "year": 2027, - "value": 51421.09655308313, + "value": 50162.973103580414, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11698,7 +14608,11 @@ { "metric_id": "deciles.mean_income.6", "year": 2028, - "value": 52276.76979311605, + "value": 51093.240160099325, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11707,7 +14621,11 @@ { "metric_id": "deciles.mean_income.6", "year": 2029, - "value": 52861.797979942385, + "value": 52375.72388322683, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11716,7 +14634,11 @@ { "metric_id": "deciles.mean_income.6", "year": 2030, - "value": 54632.18051219701, + "value": 53906.52504776521, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11725,7 +14647,11 @@ { "metric_id": "deciles.mean_income.6", "year": 2031, - "value": 56251.724813561, + "value": 55326.758982061125, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11734,7 +14660,11 @@ { "metric_id": "deciles.mean_income.7", "year": 2025, - "value": 55387.77506364148, + "value": 54559.719261696424, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11743,7 +14673,11 @@ { "metric_id": "deciles.mean_income.7", "year": 2026, - "value": 56756.00462516803, + "value": 55738.7030110715, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11752,7 +14686,11 @@ { "metric_id": "deciles.mean_income.7", "year": 2027, - "value": 57200.40880691023, + "value": 56769.742467299, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11761,7 +14699,11 @@ { "metric_id": "deciles.mean_income.7", "year": 2028, - "value": 58134.97463181802, + "value": 57552.98337993226, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11770,7 +14712,11 @@ { "metric_id": "deciles.mean_income.7", "year": 2029, - "value": 58986.25591531483, + "value": 58018.55725963795, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11779,7 +14725,11 @@ { "metric_id": "deciles.mean_income.7", "year": 2030, - "value": 60251.89005484455, + "value": 59147.87210110048, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11788,7 +14738,11 @@ { "metric_id": "deciles.mean_income.7", "year": 2031, - "value": 62408.99721436145, + "value": 60637.60697260916, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11797,7 +14751,11 @@ { "metric_id": "deciles.mean_income.8", "year": 2025, - "value": 70806.00916651895, + "value": 69236.41966938555, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11806,7 +14764,11 @@ { "metric_id": "deciles.mean_income.8", "year": 2026, - "value": 72028.31133150091, + "value": 70232.37813773785, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11815,7 +14777,11 @@ { "metric_id": "deciles.mean_income.8", "year": 2027, - "value": 73225.66554327721, + "value": 71531.33103123217, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11824,7 +14790,11 @@ { "metric_id": "deciles.mean_income.8", "year": 2028, - "value": 74341.65681045009, + "value": 72791.02280987396, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11833,7 +14803,11 @@ { "metric_id": "deciles.mean_income.8", "year": 2029, - "value": 75651.30440928646, + "value": 74106.60242542511, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11842,7 +14816,11 @@ { "metric_id": "deciles.mean_income.8", "year": 2030, - "value": 76728.81669615183, + "value": 75628.31856190029, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11851,7 +14829,11 @@ { "metric_id": "deciles.mean_income.8", "year": 2031, - "value": 77557.30506779443, + "value": 77611.71088167054, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11860,7 +14842,11 @@ { "metric_id": "deciles.mean_income.9", "year": 2025, - "value": 78613.5574256512, + "value": 79276.26633204655, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11869,7 +14855,11 @@ { "metric_id": "deciles.mean_income.9", "year": 2026, - "value": 80276.59014426098, + "value": 81581.90782711905, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11878,7 +14868,11 @@ { "metric_id": "deciles.mean_income.9", "year": 2027, - "value": 81556.99374054834, + "value": 83106.87038322185, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11887,7 +14881,11 @@ { "metric_id": "deciles.mean_income.9", "year": 2028, - "value": 83394.03807203949, + "value": 84575.49840158923, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11896,7 +14894,11 @@ { "metric_id": "deciles.mean_income.9", "year": 2029, - "value": 84834.09750237051, + "value": 85864.95896332423, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11905,7 +14907,11 @@ { "metric_id": "deciles.mean_income.9", "year": 2030, - "value": 86472.88055967825, + "value": 87649.69567899546, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11914,7 +14920,11 @@ { "metric_id": "deciles.mean_income.9", "year": 2031, - "value": 90591.67357463166, + "value": 90654.08333059541, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11923,7 +14933,11 @@ { "metric_id": "deciles.mean_income.10", "year": 2025, - "value": 121628.70831615487, + "value": 118030.04118236576, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11932,7 +14946,11 @@ { "metric_id": "deciles.mean_income.10", "year": 2026, - "value": 124668.9979412319, + "value": 120826.03138084599, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11941,7 +14959,11 @@ { "metric_id": "deciles.mean_income.10", "year": 2027, - "value": 125904.42260266874, + "value": 122592.51237304772, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11950,7 +14972,11 @@ { "metric_id": "deciles.mean_income.10", "year": 2028, - "value": 128224.60518010141, + "value": 124339.6078872293, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11959,7 +14985,11 @@ { "metric_id": "deciles.mean_income.10", "year": 2029, - "value": 130772.6528624675, + "value": 126219.29213328264, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11968,7 +14998,11 @@ { "metric_id": "deciles.mean_income.10", "year": 2030, - "value": 133647.48170630506, + "value": 128486.66905357645, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11977,7 +15011,11 @@ { "metric_id": "deciles.mean_income.10", "year": 2031, - "value": 135669.54991935962, + "value": 131631.3290311054, + "suppressed": false, + "excludes": [ + "spending.disabled_students_allowance" + ], "unit": "gbp_household", "kind": "decile", "partition": null, @@ -11986,7 +15024,9 @@ { "metric_id": "reforms.basic_rate_plus_1pp", "year": 2025, - "value": 6231978976.779907, + "value": 6222687308.254578, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -11995,7 +15035,9 @@ { "metric_id": "reforms.basic_rate_plus_1pp", "year": 2026, - "value": 6514784443.9122925, + "value": 6508759614.741272, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12004,7 +15046,9 @@ { "metric_id": "reforms.basic_rate_plus_1pp", "year": 2027, - "value": 6724056114.445618, + "value": 6714986157.079834, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12013,7 +15057,9 @@ { "metric_id": "reforms.basic_rate_plus_1pp", "year": 2028, - "value": 6921661403.251404, + "value": 6913272334.154663, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12022,7 +15068,9 @@ { "metric_id": "reforms.basic_rate_plus_1pp", "year": 2029, - "value": 7132082771.443726, + "value": 7118288039.173706, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12031,7 +15079,9 @@ { "metric_id": "reforms.basic_rate_plus_1pp", "year": 2030, - "value": 7370366483.297607, + "value": 7356266082.489136, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12040,7 +15090,9 @@ { "metric_id": "reforms.basic_rate_plus_1pp", "year": 2031, - "value": 7650165153.850464, + "value": 7633159472.480713, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12049,7 +15101,9 @@ { "metric_id": "reform_targets.basic_rate_plus_1pp", "year": 2025, - "value": 6375058856.060486, + "value": 6366582048.682007, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12058,7 +15112,9 @@ { "metric_id": "reform_targets.basic_rate_plus_1pp", "year": 2026, - "value": 6667124628.2039795, + "value": 6660786957.415405, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12067,7 +15123,9 @@ { "metric_id": "reform_targets.basic_rate_plus_1pp", "year": 2027, - "value": 6885617422.428345, + "value": 6876392706.334412, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12076,7 +15134,9 @@ { "metric_id": "reform_targets.basic_rate_plus_1pp", "year": 2028, - "value": 7091326778.457153, + "value": 7081815371.239807, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12085,7 +15145,9 @@ { "metric_id": "reform_targets.basic_rate_plus_1pp", "year": 2029, - "value": 7306154419.062439, + "value": 7290951197.121887, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12094,7 +15156,9 @@ { "metric_id": "reform_targets.basic_rate_plus_1pp", "year": 2030, - "value": 7546544692.554932, + "value": 7531692335.065491, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12103,7 +15167,9 @@ { "metric_id": "reform_targets.basic_rate_plus_1pp", "year": 2031, - "value": 7822055582.338684, + "value": 7809724834.753845, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12112,7 +15178,9 @@ { "metric_id": "reforms.higher_rate_plus_1pp", "year": 2025, - "value": 3666986552.897339, + "value": 3548582094.3916626, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12121,7 +15189,9 @@ { "metric_id": "reforms.higher_rate_plus_1pp", "year": 2026, - "value": 3977030845.7789307, + "value": 3840615655.607727, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12130,7 +15200,9 @@ { "metric_id": "reforms.higher_rate_plus_1pp", "year": 2027, - "value": 4223083637.6138306, + "value": 4076238853.5632935, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12139,7 +15211,9 @@ { "metric_id": "reforms.higher_rate_plus_1pp", "year": 2028, - "value": 4369415244.928589, + "value": 4299497163.4904785, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12148,7 +15222,9 @@ { "metric_id": "reforms.higher_rate_plus_1pp", "year": 2029, - "value": 4609416868.0217285, + "value": 4571859488.912842, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12157,7 +15233,9 @@ { "metric_id": "reforms.higher_rate_plus_1pp", "year": 2030, - "value": 4888880522.356812, + "value": 4855874568.11499, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12166,7 +15244,9 @@ { "metric_id": "reforms.higher_rate_plus_1pp", "year": 2031, - "value": 5111936398.052734, + "value": 5076062695.494751, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12175,7 +15255,9 @@ { "metric_id": "reform_targets.higher_rate_plus_1pp", "year": 2025, - "value": 3671386650.1765137, + "value": 3554390535.588806, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12184,7 +15266,9 @@ { "metric_id": "reform_targets.higher_rate_plus_1pp", "year": 2026, - "value": 3982920392.3969727, + "value": 3848232118.605835, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12193,7 +15277,9 @@ { "metric_id": "reform_targets.higher_rate_plus_1pp", "year": 2027, - "value": 4229920079.0026245, + "value": 4084949832.10614, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12202,7 +15288,9 @@ { "metric_id": "reform_targets.higher_rate_plus_1pp", "year": 2028, - "value": 4377131336.593445, + "value": 4309251584.078491, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12211,7 +15299,9 @@ { "metric_id": "reform_targets.higher_rate_plus_1pp", "year": 2029, - "value": 4618077924.957153, + "value": 4582787139.6779785, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12220,7 +15310,9 @@ { "metric_id": "reform_targets.higher_rate_plus_1pp", "year": 2030, - "value": 4898722761.492981, + "value": 4868223711.304871, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12229,7 +15321,9 @@ { "metric_id": "reform_targets.higher_rate_plus_1pp", "year": 2031, - "value": 5122219947.487732, + "value": 5089139733.0060425, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12238,7 +15332,9 @@ { "metric_id": "reforms.personal_allowance_13000", "year": 2025, - "value": -3823707824.9178467, + "value": -3822246893.5978394, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12247,7 +15343,9 @@ { "metric_id": "reforms.personal_allowance_13000", "year": 2026, - "value": -3938856676.534912, + "value": -3970099818.8598022, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12256,7 +15354,9 @@ { "metric_id": "reforms.personal_allowance_13000", "year": 2027, - "value": -4026654105.0057983, + "value": -4052308604.757263, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12265,7 +15365,9 @@ { "metric_id": "reforms.personal_allowance_13000", "year": 2028, - "value": -4071413798.9171143, + "value": -4101725729.7006836, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12274,7 +15376,9 @@ { "metric_id": "reforms.personal_allowance_13000", "year": 2029, - "value": -4134957766.1256104, + "value": -4183390396.729248, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12283,7 +15387,9 @@ { "metric_id": "reforms.personal_allowance_13000", "year": 2030, - "value": -4229688107.533081, + "value": -4290067047.536621, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12292,7 +15398,9 @@ { "metric_id": "reforms.personal_allowance_13000", "year": 2031, - "value": -1711397144.4260254, + "value": -2026458045.3624268, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12301,7 +15409,9 @@ { "metric_id": "reform_targets.personal_allowance_13000", "year": 2025, - "value": -3955109908.810852, + "value": -3954063036.4473877, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12310,7 +15420,9 @@ { "metric_id": "reform_targets.personal_allowance_13000", "year": 2026, - "value": -4086527957.4680176, + "value": -4117335693.9852905, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12319,7 +15431,9 @@ { "metric_id": "reform_targets.personal_allowance_13000", "year": 2027, - "value": -4183341947.9663086, + "value": -4209427536.251709, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12328,7 +15442,9 @@ { "metric_id": "reform_targets.personal_allowance_13000", "year": 2028, - "value": -4230614997.3900757, + "value": -4261098604.1522827, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12337,7 +15453,9 @@ { "metric_id": "reform_targets.personal_allowance_13000", "year": 2029, - "value": -4295011805.698914, + "value": -4343355439.515015, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12346,7 +15464,9 @@ { "metric_id": "reform_targets.personal_allowance_13000", "year": 2030, - "value": -4392504289.538818, + "value": -4452755767.392151, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12355,7 +15475,9 @@ { "metric_id": "reform_targets.personal_allowance_13000", "year": 2031, - "value": -1765597207.2024536, + "value": -1780300034.5704956, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12364,7 +15486,9 @@ { "metric_id": "reforms.child_benefit_additional_25", "year": 2025, - "value": -1977222467.3527832, + "value": -1978301080.5203857, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12373,7 +15497,9 @@ { "metric_id": "reforms.child_benefit_additional_25", "year": 2026, - "value": -1744958365.3483887, + "value": -1746066703.213379, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12382,7 +15508,9 @@ { "metric_id": "reforms.child_benefit_additional_25", "year": 2027, - "value": -1629814465.277588, + "value": -1629668073.130188, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12391,7 +15519,9 @@ { "metric_id": "reforms.child_benefit_additional_25", "year": 2028, - "value": -1534763674.378479, + "value": -1530858259.5943604, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12400,7 +15530,9 @@ { "metric_id": "reforms.child_benefit_additional_25", "year": 2029, - "value": -1428204556.7736816, + "value": -1428323970.4534912, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12409,7 +15541,9 @@ { "metric_id": "reforms.child_benefit_additional_25", "year": 2030, - "value": -1322075255.131958, + "value": -1325576053.7683105, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12418,7 +15552,9 @@ { "metric_id": "reforms.child_benefit_additional_25", "year": 2031, - "value": -1215395543.2149658, + "value": -1219354845.269043, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12427,7 +15563,9 @@ { "metric_id": "reform_targets.child_benefit_additional_25", "year": 2025, - "value": 2332987565.3313274, + "value": 2330588637.038988, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12436,7 +15574,9 @@ { "metric_id": "reform_targets.child_benefit_additional_25", "year": 2026, - "value": 2143319353.6422234, + "value": 2141486725.888443, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12445,7 +15585,9 @@ { "metric_id": "reform_targets.child_benefit_additional_25", "year": 2027, - "value": 2025631616.9500465, + "value": 2023775956.2239304, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12454,7 +15596,9 @@ { "metric_id": "reform_targets.child_benefit_additional_25", "year": 2028, - "value": 1921833405.853962, + "value": 1920161279.352703, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12463,7 +15607,9 @@ { "metric_id": "reform_targets.child_benefit_additional_25", "year": 2029, - "value": 1815708316.6814766, + "value": 1813779891.1509056, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12472,7 +15618,9 @@ { "metric_id": "reform_targets.child_benefit_additional_25", "year": 2030, - "value": 1706257920.2213326, + "value": 1704712527.6125221, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12481,7 +15629,9 @@ { "metric_id": "reform_targets.child_benefit_additional_25", "year": 2031, - "value": 1592582974.3537292, + "value": 1591189257.2969856, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12490,7 +15640,9 @@ { "metric_id": "reforms.uc_taper_20pc", "year": 2025, - "value": -19987138619.665894, + "value": -20527842919.80768, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12499,7 +15651,9 @@ { "metric_id": "reforms.uc_taper_20pc", "year": 2026, - "value": -20585697292.380737, + "value": -21100518260.464355, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12508,7 +15662,9 @@ { "metric_id": "reforms.uc_taper_20pc", "year": 2027, - "value": -20867244208.72113, + "value": -21383710367.08246, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12517,7 +15673,9 @@ { "metric_id": "reforms.uc_taper_20pc", "year": 2028, - "value": -21212204041.55127, + "value": -21736411484.46698, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12526,7 +15684,9 @@ { "metric_id": "reforms.uc_taper_20pc", "year": 2029, - "value": -21266028636.272034, + "value": -21748894837.86438, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12535,7 +15695,9 @@ { "metric_id": "reforms.uc_taper_20pc", "year": 2030, - "value": -21323353884.143677, + "value": -21876938936.24524, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12544,7 +15706,9 @@ { "metric_id": "reforms.uc_taper_20pc", "year": 2031, - "value": -21417216822.362915, + "value": -22330952654.634155, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12553,7 +15717,9 @@ { "metric_id": "reform_targets.uc_taper_20pc", "year": 2025, - "value": 20026032932.944794, + "value": 20519585447.911682, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12562,7 +15728,9 @@ { "metric_id": "reform_targets.uc_taper_20pc", "year": 2026, - "value": 20623599493.57924, + "value": 21090575767.801956, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12571,7 +15739,9 @@ { "metric_id": "reform_targets.uc_taper_20pc", "year": 2027, - "value": 20905978230.628372, + "value": 21373214076.36197, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12580,7 +15750,9 @@ { "metric_id": "reform_targets.uc_taper_20pc", "year": 2028, - "value": 21252138646.154373, + "value": 21725838011.858963, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12589,7 +15761,9 @@ { "metric_id": "reform_targets.uc_taper_20pc", "year": 2029, - "value": 21307648843.63382, + "value": 21742175658.693848, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12598,7 +15772,9 @@ { "metric_id": "reform_targets.uc_taper_20pc", "year": 2030, - "value": 21364495790.550797, + "value": 21868780192.75914, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12607,7 +15783,9 @@ { "metric_id": "reform_targets.uc_taper_20pc", "year": 2031, - "value": 21460406654.06598, + "value": 22322933920.91278, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12616,7 +15794,9 @@ { "metric_id": "reforms.employee_nics_main_10pc", "year": 2025, - "value": 11191545342.31836, + "value": 11064401706.310059, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12625,7 +15805,9 @@ { "metric_id": "reforms.employee_nics_main_10pc", "year": 2026, - "value": 11645153494.695984, + "value": 11510324242.230225, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12634,7 +15816,9 @@ { "metric_id": "reforms.employee_nics_main_10pc", "year": 2027, - "value": 11972824309.717712, + "value": 11834108533.458801, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12643,7 +15827,9 @@ { "metric_id": "reforms.employee_nics_main_10pc", "year": 2028, - "value": 12257716047.155273, + "value": 12138956950.555908, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12652,7 +15838,9 @@ { "metric_id": "reforms.employee_nics_main_10pc", "year": 2029, - "value": 12566231791.670166, + "value": 12464179087.056396, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12661,7 +15849,9 @@ { "metric_id": "reforms.employee_nics_main_10pc", "year": 2030, - "value": 12912911611.737793, + "value": 12812306848.333618, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12670,7 +15860,9 @@ { "metric_id": "reforms.employee_nics_main_10pc", "year": 2031, - "value": 13392154732.762207, + "value": 13289675311.854004, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12679,7 +15871,9 @@ { "metric_id": "reform_targets.employee_nics_main_10pc", "year": 2025, - "value": 11458770099.1045, + "value": 11329957618.034607, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12688,7 +15882,9 @@ { "metric_id": "reform_targets.employee_nics_main_10pc", "year": 2026, - "value": 11919342691.629387, + "value": 11791691034.516708, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12697,7 +15893,9 @@ { "metric_id": "reform_targets.employee_nics_main_10pc", "year": 2027, - "value": 12255153227.885277, + "value": 12126516761.37503, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12706,7 +15904,9 @@ { "metric_id": "reform_targets.employee_nics_main_10pc", "year": 2028, - "value": 12566120848.304436, + "value": 12442433003.455788, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12715,7 +15915,9 @@ { "metric_id": "reform_targets.employee_nics_main_10pc", "year": 2029, - "value": 12878237799.178757, + "value": 12770326792.025597, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12724,7 +15926,9 @@ { "metric_id": "reform_targets.employee_nics_main_10pc", "year": 2030, - "value": 13226533370.28511, + "value": 13120133297.630943, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12733,7 +15937,9 @@ { "metric_id": "reform_targets.employee_nics_main_10pc", "year": 2031, - "value": 13713984420.560326, + "value": 13607405556.501923, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12742,7 +15948,9 @@ { "metric_id": "reforms.vat_standard_plus_2pp", "year": 2025, - "value": 31259132637.84729, + "value": 30863021596.225952, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12751,7 +15959,9 @@ { "metric_id": "reforms.vat_standard_plus_2pp", "year": 2026, - "value": 32099610265.377075, + "value": 31692844228.266296, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12760,7 +15970,9 @@ { "metric_id": "reforms.vat_standard_plus_2pp", "year": 2027, - "value": 32862745005.17981, + "value": 32446311527.309143, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12769,7 +15981,9 @@ { "metric_id": "reforms.vat_standard_plus_2pp", "year": 2028, - "value": 33654079646.918335, + "value": 33227617036.870483, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12778,7 +15992,9 @@ { "metric_id": "reforms.vat_standard_plus_2pp", "year": 2029, - "value": 34478200723.7262, + "value": 34041293064.6344, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12787,7 +16003,9 @@ { "metric_id": "reforms.vat_standard_plus_2pp", "year": 2030, - "value": 35326019624.22656, + "value": 34878374451.18152, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12796,7 +16014,9 @@ { "metric_id": "reforms.vat_standard_plus_2pp", "year": 2031, - "value": 36187574723.726685, + "value": 35728921387.40991, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12805,7 +16025,9 @@ { "metric_id": "reform_targets.vat_standard_plus_2pp", "year": 2025, - "value": 31259131903.187378, + "value": 30863018576.160828, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12814,7 +16036,9 @@ { "metric_id": "reform_targets.vat_standard_plus_2pp", "year": 2026, - "value": 32099610338.78839, + "value": 31692847105.070984, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12823,7 +16047,9 @@ { "metric_id": "reform_targets.vat_standard_plus_2pp", "year": 2027, - "value": 32862746112.62982, + "value": 32446312252.777954, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12832,7 +16058,9 @@ { "metric_id": "reform_targets.vat_standard_plus_2pp", "year": 2028, - "value": 33654077425.53827, + "value": 33227616036.71393, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12841,7 +16069,9 @@ { "metric_id": "reform_targets.vat_standard_plus_2pp", "year": 2029, - "value": 34478201429.00751, + "value": 34041297530.920654, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12850,7 +16080,9 @@ { "metric_id": "reform_targets.vat_standard_plus_2pp", "year": 2030, - "value": 35326020466.349304, + "value": 34878372560.67273, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12859,7 +16091,9 @@ { "metric_id": "reform_targets.vat_standard_plus_2pp", "year": 2031, - "value": 36187575185.13623, + "value": 35728918405.68787, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12868,7 +16102,9 @@ { "metric_id": "reforms.additional_rate_plus_3pp", "year": 2025, - "value": 2825467413.079834, + "value": 2798505716.117798, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12877,7 +16113,9 @@ { "metric_id": "reforms.additional_rate_plus_3pp", "year": 2026, - "value": 3049458999.274414, + "value": 3023336469.8702393, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12886,7 +16124,9 @@ { "metric_id": "reforms.additional_rate_plus_3pp", "year": 2027, - "value": 3238599613.133667, + "value": 3213071953.8966064, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12895,7 +16135,9 @@ { "metric_id": "reforms.additional_rate_plus_3pp", "year": 2028, - "value": 3549931915.0806885, + "value": 3394779601.3947754, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12904,7 +16146,9 @@ { "metric_id": "reforms.additional_rate_plus_3pp", "year": 2029, - "value": 3756212324.8634033, + "value": 3594508773.6256104, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12913,7 +16157,9 @@ { "metric_id": "reforms.additional_rate_plus_3pp", "year": 2030, - "value": 3997750150.373169, + "value": 3822543323.427368, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12922,7 +16168,9 @@ { "metric_id": "reforms.additional_rate_plus_3pp", "year": 2031, - "value": 4332961887.065674, + "value": 4125743282.83667, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -12931,7 +16179,9 @@ { "metric_id": "reform_targets.additional_rate_plus_3pp", "year": 2025, - "value": 2825466843.0894775, + "value": 2798504994.492798, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12940,7 +16190,9 @@ { "metric_id": "reform_targets.additional_rate_plus_3pp", "year": 2026, - "value": 3049458483.8516235, + "value": 3023336460.849365, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12949,7 +16201,9 @@ { "metric_id": "reform_targets.additional_rate_plus_3pp", "year": 2027, - "value": 3238600146.871582, + "value": 3213071862.152466, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12958,7 +16212,9 @@ { "metric_id": "reform_targets.additional_rate_plus_3pp", "year": 2028, - "value": 3549931957.5039062, + "value": 3394780483.9908447, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12967,7 +16223,9 @@ { "metric_id": "reform_targets.additional_rate_plus_3pp", "year": 2029, - "value": 3756211982.0652466, + "value": 3594509097.7042236, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12976,7 +16234,9 @@ { "metric_id": "reform_targets.additional_rate_plus_3pp", "year": 2030, - "value": 3997750696.064453, + "value": 3822542242.9839478, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12985,7 +16245,9 @@ { "metric_id": "reform_targets.additional_rate_plus_3pp", "year": 2031, - "value": 4332963129.139282, + "value": 4125743186.885071, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -12994,7 +16256,9 @@ { "metric_id": "reforms.uc_standard_allowance_plus_10pc", "year": 2025, - "value": -3024426671.0059814, + "value": -3038583641.996826, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -13003,7 +16267,9 @@ { "metric_id": "reforms.uc_standard_allowance_plus_10pc", "year": 2026, - "value": -3159166047.906311, + "value": -3168138984.6657715, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -13012,7 +16278,9 @@ { "metric_id": "reforms.uc_standard_allowance_plus_10pc", "year": 2027, - "value": -3213933471.489624, + "value": -3225527730.8588867, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -13021,7 +16289,9 @@ { "metric_id": "reforms.uc_standard_allowance_plus_10pc", "year": 2028, - "value": -3272574045.103821, + "value": -3282105874.806885, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -13030,7 +16300,9 @@ { "metric_id": "reforms.uc_standard_allowance_plus_10pc", "year": 2029, - "value": -3304278267.8723145, + "value": -3307346412.4144287, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -13039,7 +16311,9 @@ { "metric_id": "reforms.uc_standard_allowance_plus_10pc", "year": 2030, - "value": -3329443110.629883, + "value": -3331520951.5113525, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -13048,7 +16322,9 @@ { "metric_id": "reforms.uc_standard_allowance_plus_10pc", "year": 2031, - "value": -3364831042.0513916, + "value": -3373553161.4073486, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -13057,7 +16333,9 @@ { "metric_id": "reform_targets.uc_standard_allowance_plus_10pc", "year": 2025, - "value": 3028001830.553894, + "value": 3041523709.2714844, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -13066,7 +16344,9 @@ { "metric_id": "reform_targets.uc_standard_allowance_plus_10pc", "year": 2026, - "value": 3162547160.014694, + "value": 3171636381.1340485, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -13075,7 +16355,9 @@ { "metric_id": "reform_targets.uc_standard_allowance_plus_10pc", "year": 2027, - "value": 3218303161.6876984, + "value": 3226364754.786072, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -13084,7 +16366,9 @@ { "metric_id": "reform_targets.uc_standard_allowance_plus_10pc", "year": 2028, - "value": 3277244745.4717865, + "value": 3282674243.09433, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -13093,7 +16377,9 @@ { "metric_id": "reform_targets.uc_standard_allowance_plus_10pc", "year": 2029, - "value": 3309693715.520218, + "value": 3312220329.68396, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -13102,7 +16388,9 @@ { "metric_id": "reform_targets.uc_standard_allowance_plus_10pc", "year": 2030, - "value": 3335295107.935898, + "value": 3337058613.859558, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -13111,7 +16399,9 @@ { "metric_id": "reform_targets.uc_standard_allowance_plus_10pc", "year": 2031, - "value": 3368860316.26828, + "value": 3377518834.7556, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -13120,7 +16410,9 @@ { "metric_id": "reforms.state_pension_plus_10pc", "year": 2025, - "value": -9035141432.653503, + "value": -8927432756.88562, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -13129,7 +16421,9 @@ { "metric_id": "reforms.state_pension_plus_10pc", "year": 2026, - "value": -9262484295.463745, + "value": -9142939686.93689, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -13138,7 +16432,9 @@ { "metric_id": "reforms.state_pension_plus_10pc", "year": 2027, - "value": -9298804936.553955, + "value": -9062725924.750671, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -13147,7 +16443,9 @@ { "metric_id": "reforms.state_pension_plus_10pc", "year": 2028, - "value": -9371209948.825623, + "value": -9114943836.081665, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -13156,7 +16454,9 @@ { "metric_id": "reforms.state_pension_plus_10pc", "year": 2029, - "value": -9561709368.57013, + "value": -9306907164.58667, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -13165,7 +16465,9 @@ { "metric_id": "reforms.state_pension_plus_10pc", "year": 2030, - "value": -9807065305.57251, + "value": -9548783655.451294, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -13174,7 +16476,9 @@ { "metric_id": "reforms.state_pension_plus_10pc", "year": 2031, - "value": -10306378596.512695, + "value": -9816145928.907349, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform", "partition": null, @@ -13183,7 +16487,9 @@ { "metric_id": "reform_targets.state_pension_plus_10pc", "year": 2025, - "value": 12360890321.875732, + "value": 12250304093.31047, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -13192,7 +16498,9 @@ { "metric_id": "reform_targets.state_pension_plus_10pc", "year": 2026, - "value": 12831378854.052383, + "value": 12711504064.702667, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -13201,7 +16509,9 @@ { "metric_id": "reform_targets.state_pension_plus_10pc", "year": 2027, - "value": 13012698482.677444, + "value": 12828062954.26825, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -13210,7 +16520,9 @@ { "metric_id": "reform_targets.state_pension_plus_10pc", "year": 2028, - "value": 13223877715.22789, + "value": 13020927023.28334, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -13219,7 +16531,9 @@ { "metric_id": "reform_targets.state_pension_plus_10pc", "year": 2029, - "value": 13614122674.000916, + "value": 13405169512.460327, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -13228,7 +16542,9 @@ { "metric_id": "reform_targets.state_pension_plus_10pc", "year": 2030, - "value": 14017293680.398499, + "value": 13802157356.131042, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -13237,7 +16553,9 @@ { "metric_id": "reform_targets.state_pension_plus_10pc", "year": 2031, - "value": 14429529140.882904, + "value": 14208043135.872528, + "suppressed": false, + "excludes": [], "unit": "gbp", "kind": "reform_target", "partition": null, @@ -13435,7 +16753,7 @@ "2030", "2031" ], - "detail": "2025-26: 76 units below zero, a weighted \u00a3-69,996,281 in total; 2026-27: 76 units below zero, a weighted \u00a3-71,878,301 in total; 2027-28: 76 units below zero, a weighted \u00a3-73,587,136 in total; 2028-29: 76 units below zero, a weighted \u00a3-75,359,106 in total; 2029-30: 76 units below zero, a weighted \u00a3-77,204,504 in total; 2030-31: 76 units below zero, a weighted \u00a3-79,102,963 in total; 2031-32: 76 units below zero, a weighted \u00a3-81,032,183 in total" + "detail": "2025-26: 76 units below zero, a weighted \u00a3-67,632,237 in total; 2026-27: 76 units below zero, a weighted \u00a3-69,450,693 in total; 2027-28: 76 units below zero, a weighted \u00a3-71,101,816 in total; 2028-29: 76 units below zero, a weighted \u00a3-72,813,940 in total; 2029-30: 76 units below zero, a weighted \u00a3-74,597,010 in total; 2030-31: 76 units below zero, a weighted \u00a3-76,431,349 in total; 2031-32: 76 units below zero, a weighted \u00a3-78,295,212 in total" }, { "identity_id": "inert:vat", @@ -14625,6 +17943,38 @@ "failing_scopes": [], "detail": "" }, + { + "identity_id": "finite:statutory_paternity_pay", + "year": null, + "status": "pass", + "severity": "fail", + "failing_scopes": [], + "detail": "" + }, + { + "identity_id": "sign:statutory_paternity_pay", + "year": null, + "status": "pass", + "severity": "fail", + "failing_scopes": [], + "detail": "" + }, + { + "identity_id": "inert:statutory_paternity_pay", + "year": null, + "status": "warn", + "severity": "warn", + "failing_scopes": [ + "2025", + "2026", + "2027", + "2028", + "2029", + "2030", + "2031" + ], + "detail": "2025-26: zero for every unit; 2026-27: zero for every unit; 2027-28: zero for every unit; 2028-29: zero for every unit; 2029-30: zero for every unit; 2030-31: zero for every unit; 2031-32: zero for every unit" + }, { "identity_id": "finite:statutory_sick_pay", "year": null, @@ -14948,10 +18298,10 @@ { "identity_id": "sign:disabled_students_allowance", "year": null, - "status": "pass", + "status": "skipped", "severity": "fail", "failing_scopes": [], - "detail": "" + "detail": "2025-26: not checked, from fewer than 10 records; 2026-27: not checked, from fewer than 10 records; 2027-28: not checked, from fewer than 10 records; 2028-29: not checked, from fewer than 10 records; 2029-30: not checked, from fewer than 10 records; 2030-31: not checked, from fewer than 10 records; 2031-32: not checked, from fewer than 10 records" }, { "identity_id": "inert:disabled_students_allowance", @@ -15140,18 +18490,10 @@ { "identity_id": "overlap_guard:property_transaction_tax_geography", "year": null, - "status": "fail", + "status": "pass", "severity": "fail", - "failing_scopes": [ - "2025", - "2026", - "2027", - "2028", - "2029", - "2030", - "2031" - ], - "detail": "2025-26: 86 households have more than one, a weighted 39,273; 2026-27: 86 households have more than one, a weighted 39,422; 2027-28: 88 households have more than one, a weighted 39,718; 2028-29: 92 households have more than one, a weighted 40,335; 2029-30: 94 households have more than one, a weighted 40,724; 2030-31: 96 households have more than one, a weighted 41,410; 2031-32: 104 households have more than one, a weighted 42,213" + "failing_scopes": [], + "detail": "" }, { "identity_id": "overlap_guard:local_tax_geography", @@ -15740,22 +19082,26 @@ { "identity_id": "counted_once:statutory_maternity_pay", "year": null, - "status": "fail", + "status": "pass", "severity": "fail", - "failing_scopes": [ - "" - ], - "detail": "gov_spending: universal_credit rises by 0.0068 per unit of statutory_maternity_pay; household_benefits: universal_credit rises by 0.0068 per unit of statutory_maternity_pay" + "failing_scopes": [], + "detail": "" + }, + { + "identity_id": "counted_once:statutory_paternity_pay", + "year": null, + "status": "pass", + "severity": "fail", + "failing_scopes": [], + "detail": "" }, { "identity_id": "counted_once:statutory_sick_pay", "year": null, - "status": "fail", + "status": "pass", "severity": "fail", - "failing_scopes": [ - "" - ], - "detail": "gov_spending: universal_credit rises by 0.0099 per unit of statutory_sick_pay; household_benefits: universal_credit rises by 0.0099 per unit of statutory_sick_pay" + "failing_scopes": [], + "detail": "" }, { "identity_id": "counted_once:ssmg", From 31d9b2433bcac535c07bcd07e3f4ea005f127a0b Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Fri, 16 Oct 2026 02:15:35 -0400 Subject: [PATCH 6/9] Let scorecard's record of a mixed known gap pass; counters must equal rows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Round 3 of #637 found that a known gap where the candidate is missing and the base inert always failed: scorecard records it as a coverage row with the base's £0 and no candidate value (a "lost result") plus a base-only inertness flag, and records the inert/missing mirror as a £0 coverage gain. The d1344 decision says a known gap does not block. - At a known gap, a coverage row with exactly £0 on the inert side and nothing on the other, and (candidate missing, base inert) the base-only inertness flag, are the gap itself: neither fail nor review. The gate records them as known_gap_rows. Any other row at a known gap is judged as usual: a material base value is still a lost result, and a candidate value contradicts the candidate's record. - flag_counts must equal the flags the rows carry, either way (equal on all three real receipts); a counter with no row is a contradiction, which retires the counted_flag kind. - replay_policy.md says both, with the revision dated. - Tests: the four producer-shaped known-gap kinds, other coverage rows at a gap, the reviewer's 18 round-3 probes (one adapted to the revised rule), a Hypothesis property against an independent restating of the policy with known gaps, and the real 6.5.0 receipt (first with base_events): needs_review, 8 flagged moves, all AB2024 CGT. Co-Authored-By: Claude Opus 5.5 --- .../data/qualification/replay_policy.md | 29 +- src/policyengine/provenance/qualification.py | 101 +++- tests/fixtures/uk_replay/README.md | 9 + .../receipt_6.5.0/REPLAY_RECEIPT.json | 560 ++++++++++++++++++ .../uk_replay/receipt_6.5.0/REQUEST.json | 59 ++ .../uk_replay/receipt_6.5.0/STATUS.json | 24 + tests/test_qualification_contracts.py | 413 ++++++++++++- 7 files changed, 1142 insertions(+), 53 deletions(-) create mode 100644 tests/fixtures/uk_replay/receipt_6.5.0/REPLAY_RECEIPT.json create mode 100644 tests/fixtures/uk_replay/receipt_6.5.0/REQUEST.json create mode 100644 tests/fixtures/uk_replay/receipt_6.5.0/STATUS.json diff --git a/src/policyengine/data/qualification/replay_policy.md b/src/policyengine/data/qualification/replay_policy.md index a194dec70..bfc9a4346 100644 --- a/src/policyengine/data/qualification/replay_policy.md +++ b/src/policyengine/data/qualification/replay_policy.md @@ -2,7 +2,10 @@ Decided under cos d1344 by workstream W4 on 15 October 2026, after two independent reviews. The pull request that added this file records the -decision, the reviews and the alternatives considered. +decision, the reviews and the alternatives considered. Revised on 16 +October 2026, before first use, after the third review of +policyengine.py#637: scorecard's own record of a mixed known gap no longer +blocks, and flag counters must equal the flags the rows carry. `evaluate_replay_receipt` in `policyengine.provenance.qualification` applies this text. Each qualification receipt records the policy id and this file's SHA-256 in its `replay` gate details. @@ -16,9 +19,9 @@ comparison base. It sends every other flagged move to a named reviewer. - A rejected request, `no_supported_years`, integrity `failed` (a crash or missing outputs, persistent or not), or a receipt not bound to the request. -- A mapping flag, whether a flagged row carries it or only the receipt's - counters state it. -- A lost result: a coverage row with a base value and no candidate value. +- A mapping flag. +- A lost result: a coverage row with a base value and no candidate value, + unless it is the record of a known gap (below). - A lost response: - a measure-year the candidate lists as inert, unless it is a known gap; - a measure-year total at exactly £0 where the base's absolute value is @@ -33,7 +36,9 @@ comparison base. It sends every other flagged move to a named reviewer. A receipt whose integrity is `incomplete` with no incomplete event also fails. - A receipt that contradicts itself, including a complete event that lists - an inert, or missing and supported, measure-year. + an inert, or missing and supported, measure-year; flag counters that + differ, either way, from the flags its rows carry; and a candidate value + for a measure-year that is a known gap. ## Known gaps @@ -46,6 +51,15 @@ gate records each known gap with the base's staging manifest SHA-256. A legacy-layout base, or an event the base did not replay, has no record, so none of its gaps are known. +A known gap does not block. Where one side is inert and the other missing, +scorecard records the gap as a coverage row with exactly £0 on the inert +side and no value on the other, and, where the base is the inert side, an +inertness flag on the base only. Those rows are the gap itself: they +neither fail nor go to review, and the gate records them beside the known +gaps. Any other row at a known gap is judged as usual: a material base +value is still a lost result, and a candidate value contradicts the +candidate's own record. + ## Review A needs-review verdict blocks automatic promotion. It stays blocked until a @@ -59,8 +73,9 @@ review: - support flags (the separate `supported_years` gate fails a candidate that loses a year the previous certificate supported); - coverage gains, coverage rows with no value on either side, and any other - coverage row that is not a lost result; -- inertness flags on a measure-year the candidate does not list as inert; + coverage row that is not a lost result or the record of a known gap; +- inertness flags on a measure-year the candidate does not list as inert, + other than the record of a known gap; - a receipt with no diff against a certified variant. Unsupported years alone never fail. A move below the diff's bound raises diff --git a/src/policyengine/provenance/qualification.py b/src/policyengine/provenance/qualification.py index 31d6b2685..fa3c3bc83 100644 --- a/src/policyengine/provenance/qualification.py +++ b/src/policyengine/provenance/qualification.py @@ -860,6 +860,22 @@ def _status_shape(self) -> ReplayReceipt: return self +def _is_the_gap(row: FlaggedRow, gap: Mapping[str, Any]) -> bool: + """Whether a coverage row is scorecard's own record of a mixed known gap. + + Where one side is inert and the other missing, scorecard compares an + inert artifact (identical worlds, a total of exactly £0) with none, and + writes a coverage row with £0 on the inert side and nothing on the + other. Any other shape at a known gap is judged as usual. + """ + + if gap["candidate"] == "inert" and gap["why"] == "missing in the base": + return row.base_gbp is None and row.head_gbp == 0 + if gap["candidate"] == "missing" and gap["why"] == "inert in the base": + return row.head_gbp is None and row.base_gbp == 0 + return False + + def evaluate_replay_receipt( request: ReplayQualificationRequest, status: ReplayStatus, @@ -877,19 +893,22 @@ def evaluate_replay_receipt( the candidate lists as inert, or a measure-year total of exactly £0 against a base at least the diff's bound away) and incomplete grids, unless a gap is known: the base's own record (``diff.base_events``) - lists the same measure-year as inert, or missing and supported; + lists the same measure-year as inert, or missing and supported. A + known gap does not block, and neither do the rows by which scorecard + records a mixed one (``_is_the_gap``, and the base-only inertness + where the candidate is missing and the base inert); a material value + at a known gap still fails; - send every other flagged move to review. Unsupported years are reported, never failed on their own. The gate's - details record the policy id, the policy text's SHA-256, the known gaps, - the regressions and the review items. - - The receipt is read as a whole, not by its summary counters: a flag - counts when either ``flag_counts`` or a flagged row carries it, and a - receipt that contradicts itself fails (failures listed under a complete - integrity, more flagged rows of a kind than its count, supported years - with no artifacts, nothing replayed at all) or contradicts the request - (a comparison base other than the ``compare_to`` asked for). + details record the policy id, the policy text's SHA-256, the known gaps + and the rows that record them, the regressions and the review items. + + The receipt is read as a whole: a receipt that contradicts itself fails + (failures listed under a complete integrity, ``flag_counts`` that differ + from its rows' flags, supported years with no artifacts, nothing + replayed at all) or contradicts the request (a comparison base other + than the ``compare_to`` asked for). """ request_id = request.request_id @@ -1073,11 +1092,13 @@ def fail_early(kind: str, summary: str, **extra: Any) -> GateResult: for row in rows: for kind in row.flags: row_counts[kind] = row_counts.get(kind, 0) + 1 - for kind, seen in sorted(row_counts.items()): - if counts.get(kind, 0) < seen: + # Scorecard's counters are tallies of its rows' flags, so any difference, + # either way, is a receipt that contradicts itself. + for kind in sorted(set(row_counts) | {kind for kind, n in counts.items() if n}): + seen, counted = row_counts.get(kind, 0), counts.get(kind, 0) + if seen != counted: contradictions.append( - f"{seen} flagged row(s) carry {kind} but flag_counts says " - f"{counts.get(kind, 0)}" + f"{seen} flagged row(s) carry {kind} but flag_counts says {counted}" ) details["flag_counts"] = counts details["flagged_row_counts"] = row_counts @@ -1098,10 +1119,6 @@ def fail_early(kind: str, summary: str, **extra: Any) -> GateResult: + "; ".join(contradictions), contradictions=contradictions, ) - # Flags come from every place the receipt can state them, never from the - # summary counters alone: a flag a counter states but no row carries - # still needs review. - present = {kind for kind, n in counts.items() if n} | set(row_counts) # A gap is known only where the base's own grid record (scorecard#183) # lists the same measure-year as inert, or missing and supported, for the # same event. A legacy-layout base, or an event the base did not replay, @@ -1147,7 +1164,10 @@ def missing_supported(record: Any) -> Optional[set[tuple[str, int]]]: "base_staging_manifest_sha256": base.staging_manifest_sha256, } ) - known = {(gap["event"], gap["measure_key"], gap["year"]) for gap in known_gaps} + gaps_at = { + (gap["event"], gap["measure_key"], gap["year"]): gap for gap in known_gaps + } + known = set(gaps_at) listed_inert = set(inert) candidate_inert = {where for where in listed_inert if where not in known} regressions: list[dict[str, Any]] = [] @@ -1208,16 +1228,39 @@ def item(kind: str, row: Any = None, **fields: Any) -> dict[str, Any]: regressions.append( item("incomplete", why="integrity is incomplete with no incomplete event") ) + gap_rows: list[dict[str, Any]] = [] for row in rows: flags = set(row.flags) where = (row.event, row.measure_key, row.year) + gap = gaps_at.get(where) lost = False + if gap is not None and "coverage" in flags and _is_the_gap(row, gap): + # Scorecard's own expression of a mixed known gap: one side has no + # artifact and the other an inert one (identical worlds, £0). + flags.discard("coverage") if flags & BLOCKING_REPLAY_FLAGS: regressions.append(item("mapping", row)) lost = True if "coverage" in flags and row.base_gbp is not None and row.head_gbp is None: regressions.append(item("lost_result", row)) lost = True + if ( + gap is not None + and "coverage" in flags + and row.base_gbp is None + and row.head_gbp not in (None, 0) + ): + # The candidate's record lists the measure-year as inert or + # missing, so it cannot also hold a value for it. + regressions.append( + item( + "contradiction", + row, + why="a candidate value for a measure-year its record lists " + "as a gap", + ) + ) + lost = True zero_total = ( row.level == "measure_year" and row.head_gbp == 0 @@ -1244,10 +1287,19 @@ def item(kind: str, row: Any = None, **fields: Any) -> dict[str, Any]: elif zero_total: regressions.append(item("lost_response", row, why="£0 against the base")) lost = True - if where in listed_inert: + if where in listed_inert or ( + gap is not None + and gap["candidate"] == "missing" + and gap["why"] == "inert in the base" + ): # The candidate's inert list decides its inertness (a lost response - # above, or a known gap); the row's other flags are judged as usual. + # above, or a known gap). Where the candidate is missing and the + # base inert, the base-only inertness is the known gap itself. The + # row's other flags are judged as usual. flags = flags - {"inertness"} + if gap is not None and flags != set(row.flags): + # A row the known gap accounts for, in whole or in part. + gap_rows.append(item("known_gap_row", row)) if not lost and flags & REVIEW_REPLAY_FLAGS: if "coverage" in flags and row.base_gbp is None: kind = ( @@ -1260,17 +1312,12 @@ def item(kind: str, row: Any = None, **fields: Any) -> dict[str, Any]: else: kind = "flagged_move" review_items.append(item(kind, row)) - for kind in sorted(present - row_counts.keys()): - # A flag the counters state but no row carries: a blocking kind still - # fails, so a reviewer can never accept it. - (regressions if kind in BLOCKING_REPLAY_FLAGS else review_items).append( - item("counted_flag", flag=kind, count=counts.get(kind, 0)) - ) details.update( { "policy": REPLAY_POLICY_ID, "policy_sha256": replay_policy_sha256(), "known_gaps": known_gaps, + "known_gap_rows": gap_rows, "regressions": regressions, "review_items": review_items, } diff --git a/tests/fixtures/uk_replay/README.md b/tests/fixtures/uk_replay/README.md index 3c15e2c82..98f2d9d6e 100644 --- a/tests/fixtures/uk_replay/README.md +++ b/tests/fixtures/uk_replay/README.md @@ -15,3 +15,12 @@ were copied unchanged from the scorecard's `replay-state` branch at commit `4166508f` (`requests//`). The receipt holds aggregate fiscal totals only. `tests/test_qualification_contracts.py` checks that the replay policy fails it on exactly what the d1344 decision says it should. + +`receipt_6.5.0/` holds the request, terminal status and receipt for the pair +policyengine 6.5.0, policyengine-uk 2.130.1 and uk-data 1.58.1 (request +`d83eaf59…`), copied unchanged from the scorecard's `replay-state` branch +head on 16 October 2026. The status names receipt commit `19a9ccdc` and +`receipt_sha256` `a7a67c26…`; the status at that commit itself still says +`running`, because the terminal status lands one commit later. It is the +first real receipt with `diff.base_events` (scorecard#183), and holds +aggregate fiscal totals only. diff --git a/tests/fixtures/uk_replay/receipt_6.5.0/REPLAY_RECEIPT.json b/tests/fixtures/uk_replay/receipt_6.5.0/REPLAY_RECEIPT.json new file mode 100644 index 000000000..c66460517 --- /dev/null +++ b/tests/fixtures/uk_replay/receipt_6.5.0/REPLAY_RECEIPT.json @@ -0,0 +1,560 @@ +{ + "corpus": { + "corpus_version": "uk-fiscal-event-replay/2", + "events": { + "autumn_budget_2024": { + "artifacts": 30, + "comparison_provenance_sha256": "214c7afe8d9703fed378d0e4386d47abea4c535c3f0b8a2d6ee93bccab822727", + "full_supported_grid_complete": true, + "inert_measure_years": [], + "missing_measure_years": [], + "registry_sha256": "89784d34920fb2d6aae702fb4028f84d7bf87f1694df77a0c9c5d255edbcdd34", + "run_manifest_sha256": "23ab600e88ef0269fa7d73f5e403ec3500e7b0a7d5fcddd60ba14c8239e39fda", + "staging_manifest_sha256": "1d882c1d4eb7a13b523bf99ac31945e2d4a3ebf836d6789565a006d2b71e789e", + "supported_years": [ + 2024, + 2025, + 2026, + 2027, + 2028, + 2029 + ], + "unsupported_measure_years": [], + "unsupported_years": [] + }, + "autumn_budget_2025": { + "artifacts": 54, + "comparison_provenance_sha256": "f8b8f13cdf1541f387b474721e2d86efac099ada938165be08e71b9f8a806c04", + "full_supported_grid_complete": true, + "inert_measure_years": [], + "missing_measure_years": [], + "registry_sha256": "3da50f9af6c7986fd5fe453ae2dac34275f319d1f2ccd441e3c438f51a18656e", + "run_manifest_sha256": "413acf6342a0e0a3a277cf1f2e9c0bf3c4be1e103204201f9171b90ab21ff5c5", + "staging_manifest_sha256": "5e4df8946e6cea2fa728200d1af2e6803cb74020cac521dd9b99f8869f80d456", + "supported_years": [ + 2025, + 2026, + 2027, + 2028, + 2029, + 2030 + ], + "unsupported_measure_years": [], + "unsupported_years": [] + }, + "autumn_statement_2023": { + "artifacts": 20, + "comparison_provenance_sha256": "74b8fba87ffc7a67706e4388009295f28e9da67db15a074c69d9537eb845d699", + "full_supported_grid_complete": true, + "inert_measure_years": [], + "missing_measure_years": [ + { + "measure_key": "autumn_statement_2023__class_1_employee_nics_main_rate_cut_2p", + "year": 2023 + }, + { + "measure_key": "autumn_statement_2023__class_2_self_employed_nics_abolition", + "year": 2023 + }, + { + "measure_key": "autumn_statement_2023__class_4_self_employed_nics_main_rate_cut_1p", + "year": 2023 + }, + { + "measure_key": "autumn_statement_2023__lha_reset_to_30th_percentile", + "year": 2023 + } + ], + "registry_sha256": "197d5583f0171104c673ca1f40b402a77ca2b003f496de37d6bc913fb9fd1021", + "run_manifest_sha256": "eb3705d7edb480a91eb37555c3fd52169861ceee84c5514b5529e248247d882a", + "staging_manifest_sha256": "239703b8c314f555fcaf96adaf573a7831962433fcb0e2b26713a217ec48ec7e", + "supported_years": [ + 2024, + 2025, + 2026, + 2027, + 2028 + ], + "unsupported_measure_years": [ + { + "measure_key": "autumn_statement_2023__class_1_employee_nics_main_rate_cut_2p", + "year": 2023 + }, + { + "measure_key": "autumn_statement_2023__class_2_self_employed_nics_abolition", + "year": 2023 + }, + { + "measure_key": "autumn_statement_2023__class_4_self_employed_nics_main_rate_cut_1p", + "year": 2023 + }, + { + "measure_key": "autumn_statement_2023__lha_reset_to_30th_percentile", + "year": 2023 + } + ], + "unsupported_years": [ + { + "reason": "before_data_year", + "year": 2023 + } + ] + }, + "spring_budget_2023": { + "artifacts": 8, + "comparison_provenance_sha256": "c23f0eef316404f78f23f3b7e429bdde59496f5ea2a93b883e20e1bcfb648c2b", + "full_supported_grid_complete": true, + "inert_measure_years": [], + "missing_measure_years": [ + { + "measure_key": "spring_budget_2023__pension_annual_allowance_package", + "year": 2023 + }, + { + "measure_key": "spring_budget_2023__uc_childcare_cap_increase", + "year": 2023 + } + ], + "registry_sha256": "0a78bfe32712bd30bdf9137bdf182e82a266c7da0e9885dd61cac6ef99a76357", + "run_manifest_sha256": "29944c4e0393091d621f260f658f700549c207dda4996dce198907665a2b3baa", + "staging_manifest_sha256": "a298924c7ed24832820ddb95196db1d9e9b7b40d32103762e7a5ac59477ef8fd", + "supported_years": [ + 2024, + 2025, + 2026, + 2027 + ], + "unsupported_measure_years": [ + { + "measure_key": "spring_budget_2023__pension_annual_allowance_package", + "year": 2023 + }, + { + "measure_key": "spring_budget_2023__uc_childcare_cap_increase", + "year": 2023 + } + ], + "unsupported_years": [ + { + "reason": "before_data_year", + "year": 2023 + } + ] + }, + "spring_budget_2024": { + "artifacts": 15, + "comparison_provenance_sha256": "e15bb23ddc567b3a5afc3b0b5eeaae8bb08f12a1f17378f64bb7e2b67085011b", + "full_supported_grid_complete": true, + "inert_measure_years": [], + "missing_measure_years": [ + { + "measure_key": "spring_budget_2024__class_1_employee_nics_main_rate_cut_2pp", + "year": 2023 + }, + { + "measure_key": "spring_budget_2024__class_4_self_employed_nics_main_rate_cut_2pp", + "year": 2023 + }, + { + "measure_key": "spring_budget_2024__hicbc_threshold_and_taper", + "year": 2023 + } + ], + "registry_sha256": "64a3bccfd950e868ffc5d6261bf3903df88a3ebedc9b4444494acc717259817a", + "run_manifest_sha256": "458f2f27eb954422bb8e8a3063b629b43f2ffae9cdf901680924c8846a3e9666", + "staging_manifest_sha256": "3679f6e865bd2068efe46db2ea3358f92d6be9d6ade8d2c1c901901ce9813d07", + "supported_years": [ + 2024, + 2025, + 2026, + 2027, + 2028 + ], + "unsupported_measure_years": [ + { + "measure_key": "spring_budget_2024__class_1_employee_nics_main_rate_cut_2pp", + "year": 2023 + }, + { + "measure_key": "spring_budget_2024__class_4_self_employed_nics_main_rate_cut_2pp", + "year": 2023 + }, + { + "measure_key": "spring_budget_2024__hicbc_threshold_and_taper", + "year": 2023 + } + ], + "unsupported_years": [ + { + "reason": "before_data_year", + "year": 2023 + } + ] + }, + "spring_statement_2025": { + "artifacts": 12, + "comparison_provenance_sha256": "01874dea549c740dbb714f5615c45fc090554e47207d06c16641f3b01dfc4703", + "full_supported_grid_complete": true, + "inert_measure_years": [], + "missing_measure_years": [], + "registry_sha256": "d01ce0612f3f24830a8d8ea0abaaa6b2626963316b16750310d303f404fbab5b", + "run_manifest_sha256": "01d97cd339b9a389390e2de1eec9617ab4d3a0e0d3374cd2dd9d466bba717fe4", + "staging_manifest_sha256": "dcd2e1349596fa7cd26140ea2b4d29e3f6a2c2b7744359e93143af98d83bdb6c", + "supported_years": [ + 2024, + 2025, + 2026, + 2027, + 2028, + 2029 + ], + "unsupported_measure_years": [], + "unsupported_years": [] + } + } + }, + "diff": { + "base_events": { + "autumn_budget_2024": { + "full_supported_grid_complete": true, + "inert_measure_years": [], + "missing_measure_years": [], + "run_manifest_sha256": "593a3e37a69faf3c5c4afeda26375aba2e748c208b8193178f6fbef179da6761", + "staging_manifest_sha256": "e9abe69562c9f8c0ccc2973331acb66d5b7d2971be7a22d257fb3a64057f8afb", + "supported_years": [ + 2024, + 2025, + 2026, + 2027, + 2028, + 2029 + ], + "unsupported_measure_years": [] + }, + "autumn_budget_2025": { + "full_supported_grid_complete": true, + "inert_measure_years": [], + "missing_measure_years": [], + "run_manifest_sha256": "927266db92c873170b3c85617f041a9b37a31343e02543de0ad71285f9f8dabc", + "staging_manifest_sha256": "2f4550aa28e20b1498df5c8d790d751368381ae06a2b2934bb72ec9aa9a7856e", + "supported_years": [ + 2025, + 2026, + 2027, + 2028, + 2029, + 2030 + ], + "unsupported_measure_years": [] + }, + "autumn_statement_2023": { + "full_supported_grid_complete": true, + "inert_measure_years": [], + "missing_measure_years": [ + { + "measure_key": "autumn_statement_2023__class_1_employee_nics_main_rate_cut_2p", + "year": 2023 + }, + { + "measure_key": "autumn_statement_2023__class_2_self_employed_nics_abolition", + "year": 2023 + }, + { + "measure_key": "autumn_statement_2023__class_4_self_employed_nics_main_rate_cut_1p", + "year": 2023 + }, + { + "measure_key": "autumn_statement_2023__lha_reset_to_30th_percentile", + "year": 2023 + } + ], + "run_manifest_sha256": "debb2ffec8011fe577e57ef3e334f72aa0e50d90ab46a8536ab2c231c2259c31", + "staging_manifest_sha256": "f2ed6a429597e7bc42e46398cdb03f69d92511c266762c4bfde6d00cf4beae08", + "supported_years": [ + 2024, + 2025, + 2026, + 2027, + 2028 + ], + "unsupported_measure_years": [ + { + "measure_key": "autumn_statement_2023__class_1_employee_nics_main_rate_cut_2p", + "year": 2023 + }, + { + "measure_key": "autumn_statement_2023__class_2_self_employed_nics_abolition", + "year": 2023 + }, + { + "measure_key": "autumn_statement_2023__class_4_self_employed_nics_main_rate_cut_1p", + "year": 2023 + }, + { + "measure_key": "autumn_statement_2023__lha_reset_to_30th_percentile", + "year": 2023 + } + ] + }, + "spring_budget_2023": { + "full_supported_grid_complete": true, + "inert_measure_years": [], + "missing_measure_years": [ + { + "measure_key": "spring_budget_2023__pension_annual_allowance_package", + "year": 2023 + }, + { + "measure_key": "spring_budget_2023__uc_childcare_cap_increase", + "year": 2023 + } + ], + "run_manifest_sha256": "e242bf40a01f186fd6b7c759d8d3927058a5a9e382d08d48df618f28199a6d64", + "staging_manifest_sha256": "7a74c574a781e37e45d5adb05afc694b4ba3fb1665fb45f5630c063ac75bec51", + "supported_years": [ + 2024, + 2025, + 2026, + 2027 + ], + "unsupported_measure_years": [ + { + "measure_key": "spring_budget_2023__pension_annual_allowance_package", + "year": 2023 + }, + { + "measure_key": "spring_budget_2023__uc_childcare_cap_increase", + "year": 2023 + } + ] + }, + "spring_budget_2024": { + "full_supported_grid_complete": true, + "inert_measure_years": [], + "missing_measure_years": [ + { + "measure_key": "spring_budget_2024__class_1_employee_nics_main_rate_cut_2pp", + "year": 2023 + }, + { + "measure_key": "spring_budget_2024__class_4_self_employed_nics_main_rate_cut_2pp", + "year": 2023 + }, + { + "measure_key": "spring_budget_2024__hicbc_threshold_and_taper", + "year": 2023 + } + ], + "run_manifest_sha256": "0bce7f6e84de2cec8305ecfc8e769cd2c79e73ec736feb8282e9adaf944a4592", + "staging_manifest_sha256": "161ae8d04e51c4180d1c78ccd5fd21d0fae410f4d9237228bd7c2d9e61b90d37", + "supported_years": [ + 2024, + 2025, + 2026, + 2027, + 2028 + ], + "unsupported_measure_years": [ + { + "measure_key": "spring_budget_2024__class_1_employee_nics_main_rate_cut_2pp", + "year": 2023 + }, + { + "measure_key": "spring_budget_2024__class_4_self_employed_nics_main_rate_cut_2pp", + "year": 2023 + }, + { + "measure_key": "spring_budget_2024__hicbc_threshold_and_taper", + "year": 2023 + } + ] + }, + "spring_statement_2025": { + "full_supported_grid_complete": true, + "inert_measure_years": [], + "missing_measure_years": [], + "run_manifest_sha256": "e3ad05199bc1285c3f2752db7322652a0c275f4f42a0917425150ce55f094767", + "staging_manifest_sha256": "f663172c6be69557dbe1b533731559e5fa1aacbfd5c9151c030fffca5ebeff93", + "supported_years": [ + 2024, + 2025, + 2026, + 2027, + 2028, + 2029 + ], + "unsupported_measure_years": [] + } + }, + "base_variant_id": "pe6.4.1_uk2.130.1_policyengine-uk-data-1.58.1", + "diff_sha256": "131405d7b5555dbe0bd148629896c7eb439a5dd0647f723a1315c28188bbe65e", + "flag_counts": { + "construction": 6, + "coverage": 0, + "inertness": 0, + "mapping": 0, + "numerical": 3, + "structural": 0, + "support": 0 + }, + "flagged_rows": [ + { + "base_gbp": 574999000.021347, + "event": "autumn_budget_2024", + "flags": [ + "numerical" + ], + "head_gbp": 956314309.095192, + "key": "obr_pmd_nov2025:11682:73295721bdfdb9e8", + "level": "source_row", + "measure_key": "autumn_budget_2024__capital_gains_main_rates_and_reliefs", + "year": 2024 + }, + { + "base_gbp": 574999000.021347, + "event": "autumn_budget_2024", + "flags": [ + "numerical", + "construction" + ], + "head_gbp": 956314309.095192, + "key": "total", + "level": "measure_year", + "measure_key": "autumn_budget_2024__capital_gains_main_rates_and_reliefs", + "year": 2024 + }, + { + "base_gbp": 574999000.021347, + "event": "autumn_budget_2024", + "flags": [ + "numerical" + ], + "head_gbp": 956314309.095192, + "key": "capital_gains_tax", + "level": "head", + "measure_key": "autumn_budget_2024__capital_gains_main_rates_and_reliefs", + "year": 2024 + }, + { + "base_gbp": 2321626476.090164, + "event": "autumn_budget_2024", + "flags": [ + "construction" + ], + "head_gbp": 2321626476.090164, + "key": "total", + "level": "measure_year", + "measure_key": "autumn_budget_2024__capital_gains_main_rates_and_reliefs", + "year": 2025 + }, + { + "base_gbp": 2397857290.327587, + "event": "autumn_budget_2024", + "flags": [ + "construction" + ], + "head_gbp": 2397857290.327587, + "key": "total", + "level": "measure_year", + "measure_key": "autumn_budget_2024__capital_gains_main_rates_and_reliefs", + "year": 2026 + }, + { + "base_gbp": 2484671863.66201, + "event": "autumn_budget_2024", + "flags": [ + "construction" + ], + "head_gbp": 2484671863.66201, + "key": "total", + "level": "measure_year", + "measure_key": "autumn_budget_2024__capital_gains_main_rates_and_reliefs", + "year": 2027 + }, + { + "base_gbp": 2572403121.83226, + "event": "autumn_budget_2024", + "flags": [ + "construction" + ], + "head_gbp": 2572403121.83226, + "key": "total", + "level": "measure_year", + "measure_key": "autumn_budget_2024__capital_gains_main_rates_and_reliefs", + "year": 2028 + }, + { + "base_gbp": 2660288740.9552917, + "event": "autumn_budget_2024", + "flags": [ + "construction" + ], + "head_gbp": 2660288740.9552917, + "key": "total", + "level": "measure_year", + "measure_key": "autumn_budget_2024__capital_gains_main_rates_and_reliefs", + "year": 2029 + } + ] + }, + "execution": { + "dataset_sha256": "056e80fd8e9151d78f432a25cde863340baee81304c6216a37fb575ce8563784", + "packaged_bundle_manifest_sha256": "6de668d4f0b417c82d981e334ee5a4b95d3c02904491109e94c62ce84246761c", + "packages": { + "policyengine": { + "record_sha256": "8710127f5a784e9fc0867c34912a03092e6f2b6c3627c046fab6a95d217533b4", + "version": "6.5.0", + "wheel_sha256": "312a04f7ceb7058aa803d012ed836a8fdd0ed4885dea46112f5c205a42193856" + }, + "policyengine-core": { + "record_sha256": "53a92f2e67982a16faeba61b8b3d145d3ab9a50d298e92c512d61166ffe5d5d4", + "version": "3.33.0", + "wheel_sha256": "2e32d02a8910ab683a2b7600987904b351d058fc2bd5910a8ea6641438bcd789" + }, + "policyengine-uk": { + "record_sha256": "365cc5256f85b474bd445403462e17e468a1c2f5da6cc2c2b1cbf626ac20e243", + "version": "2.130.1", + "wheel_sha256": "f8b1b8b917c9297ff66937811dbebd9a62d3b1796ce894c326e98051cac4c873" + } + }, + "platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39", + "python": "3.12.3", + "release_bundle": { + "bundle_id": "uk-6.5.0", + "certified_by": "policyengine.py bundle certification", + "certified_data_artifact_sha256": "056e80fd8e9151d78f432a25cde863340baee81304c6216a37fb575ce8563784", + "certified_data_build_id": "policyengine-uk-data-1.58.1", + "compatibility_basis": "legacy_compatible_model_package", + "country_id": "uk", + "data_build_fingerprint": "sha256:c094d7006fdd81df220090284212f16bbffb15624643bc442c4bb3e1b1e5dac8", + "data_build_model_git_sha": "daad71cd26c107f1b784ff600d1464ba59c70e4a", + "data_build_model_version": "2.122.2", + "data_package": "policyengine-uk-data", + "data_version": "1.58.1", + "default_dataset": "enhanced_frs_2024_25", + "default_dataset_uri": "hf://policyengine/policyengine-uk-data-private/enhanced_frs_2024_25.h5@1.58.1", + "model_package": "policyengine-uk", + "model_version": "2.130.1", + "policyengine_version": "6.5.0" + }, + "requirements_sha256": "f37ab7eac78e2b29f2f4b51b2af189ef63517cdda38a7150d60af0dd86f42b99", + "runner": "github-actions Linux X64" + }, + "integrity": { + "failures": [], + "status": "complete" + }, + "receipt_sha256": "a7a67c268c21b983ed47930ea5816a23dcd6b37f75373b1a5fc59883b08f5551", + "rejection": null, + "request_id": "d83eaf590d3ebe846506d9ce9be399fe5b9b95dc58362d573d4e19fd501a649a", + "results": { + "manifest_sha256": "3bd9b294472469aea0b17a57b0fa3ba3c1bde6fa51b6940169b91679d0a76c29", + "path": "requests/d83eaf590d3ebe846506d9ce9be399fe5b9b95dc58362d573d4e19fd501a649a/results/", + "ref": "replay-state", + "repository": "PolicyEngine/policyengine-scorecard" + }, + "schema": "policyengine.uk-replay-receipt/v1", + "status": "complete", + "variant_id": "pe6.5.0_uk2.130.1_policyengine-uk-data-1.58.1", + "variant_identity_sha256": "8d5dcd6ae41f0e7685871806c24de41786f414b8f2079ad62ff8acfb28ed4f3c" +} diff --git a/tests/fixtures/uk_replay/receipt_6.5.0/REQUEST.json b/tests/fixtures/uk_replay/receipt_6.5.0/REQUEST.json new file mode 100644 index 000000000..39ab17e15 --- /dev/null +++ b/tests/fixtures/uk_replay/receipt_6.5.0/REQUEST.json @@ -0,0 +1,59 @@ +{ + "attempt": 1, + "candidate": { + "data": { + "build_id": "policyengine-uk-data-1.58.1", + "dataset": "enhanced_frs_2024_25", + "path": "enhanced_frs_2024_25.h5", + "release_manifest_sha256": "545797bf231cd3681e64b677065d921304e9a32f1e46e757a940a412b4136c17", + "repo_id": "policyengine/policyengine-uk-data-private", + "repo_type": "model", + "revision": "1.58.1", + "sha256": "056e80fd8e9151d78f432a25cde863340baee81304c6216a37fb575ce8563784", + "size_bytes": 128409762 + }, + "expected_release_bundle": { + "bundle_id": "uk-6.5.0", + "certified_by": "policyengine.py bundle certification", + "certified_data_artifact_sha256": "056e80fd8e9151d78f432a25cde863340baee81304c6216a37fb575ce8563784", + "certified_data_build_id": "policyengine-uk-data-1.58.1", + "compatibility_basis": "legacy_compatible_model_package", + "country_id": "uk", + "data_build_fingerprint": "sha256:c094d7006fdd81df220090284212f16bbffb15624643bc442c4bb3e1b1e5dac8", + "data_build_model_git_sha": "daad71cd26c107f1b784ff600d1464ba59c70e4a", + "data_build_model_version": "2.122.2", + "data_package": "policyengine-uk-data", + "data_version": "1.58.1", + "default_dataset": "enhanced_frs_2024_25", + "default_dataset_uri": "hf://policyengine/policyengine-uk-data-private/enhanced_frs_2024_25.h5@1.58.1", + "model_package": "policyengine-uk", + "model_version": "2.130.1", + "policyengine_version": "6.5.0" + }, + "policyengine": { + "packaged_bundle_manifest_sha256": "6de668d4f0b417c82d981e334ee5a4b95d3c02904491109e94c62ce84246761c", + "source": { + "pypi": { + "wheel_sha256": "312a04f7ceb7058aa803d012ed836a8fdd0ed4885dea46112f5c205a42193856" + } + }, + "version": "6.5.0" + }, + "policyengine_core": { + "version": "3.33.0", + "wheel_sha256": "2e32d02a8910ab683a2b7600987904b351d058fc2bd5910a8ea6641438bcd789" + }, + "policyengine_uk": { + "version": "2.130.1", + "wheel_sha256": "f8b1b8b917c9297ff66937811dbebd9a62d3b1796ce894c326e98051cac4c873" + } + }, + "compare_to": "latest_certified", + "kind": "released_bundle", + "requested_by": { + "commit": "8a30363671e76a4a303bfe806a4223f58c2d4c0f", + "note": "Built by hand by the W4 session on 2026-10-16 for policyengine 6.5.0 (release commit 8a303636, the version production sim-api serves), with released_bundle_request from policyengine.py PR #574 at 61155b5d, because the push workflow's NotifyConsumers request is not on main yet. No workflow run produced it.", + "repository": "PolicyEngine/policyengine.py" + }, + "schema": "policyengine.uk-replay-qualification-request/v1" +} diff --git a/tests/fixtures/uk_replay/receipt_6.5.0/STATUS.json b/tests/fixtures/uk_replay/receipt_6.5.0/STATUS.json new file mode 100644 index 000000000..90904abad --- /dev/null +++ b/tests/fixtures/uk_replay/receipt_6.5.0/STATUS.json @@ -0,0 +1,24 @@ +{ + "history": [ + { + "at": "2026-10-16T05:15:40Z", + "run_url": "https://github.com/PolicyEngine/policyengine-scorecard/actions/runs/38854823607", + "status": "queued" + }, + { + "at": "2026-10-16T05:16:00Z", + "run_url": "https://github.com/PolicyEngine/policyengine-scorecard/actions/runs/38854853696", + "status": "running" + }, + { + "at": "2026-10-16T05:55:28Z", + "run_url": "https://github.com/PolicyEngine/policyengine-scorecard/actions/runs/38854853696", + "status": "complete" + } + ], + "receipt_commit": "19a9ccdc46bcda78a01e81844a838859c4e859d2", + "receipt_sha256": "a7a67c268c21b983ed47930ea5816a23dcd6b37f75373b1a5fc59883b08f5551", + "request_id": "d83eaf590d3ebe846506d9ce9be399fe5b9b95dc58362d573d4e19fd501a649a", + "schema": "policyengine.uk-replay-status/v1", + "status": "complete" +} diff --git a/tests/test_qualification_contracts.py b/tests/test_qualification_contracts.py index 9e54da7e5..dadbedf85 100644 --- a/tests/test_qualification_contracts.py +++ b/tests/test_qualification_contracts.py @@ -21,7 +21,9 @@ from __future__ import annotations import copy +import itertools import json +from pathlib import Path import jsonschema import pytest @@ -1237,6 +1239,290 @@ def gate(flags): assert [item["kind"] for item in mixed.details["review_items"]] == ["flagged_move"] +#: The rows scorecard writes for each kind of known gap, from its own +#: compare_artifacts and compare_source_rows (round 3 of #637, executed at +#: scorecard 4d44449): an inert artifact has identical worlds (£0); a missing +#: one has no artifact. (candidate, base) -> rows. +PRODUCER_GAP_ROWS = { + ("inert", "inert"): [], + ("missing", "missing"): [], + ("inert", "missing"): [ + {"flags": ["coverage"], "base_gbp": None, "head_gbp": 0.0}, + { + "flags": ["inertness"], + "base_gbp": None, + "head_gbp": None, + "level": "source_row", + "key": "obr_row_1", + }, + ], + ("missing", "inert"): [ + {"flags": ["coverage"], "base_gbp": 0.0, "head_gbp": None}, + { + "flags": ["inertness"], + "base_gbp": None, + "head_gbp": None, + "level": "source_row", + "key": "obr_row_1", + }, + ], +} + + +def _known_gap(rows, candidate="inert", base="inert", second_event=False): + """The gate on a schema-valid, sealed receipt whose one measure-year is a + known gap of this kind, with these flagged rows.""" + + doc = _receipt_with( + rows=rows, + inert=[GAP] if candidate == "inert" else [], + missing=[] if candidate == "inert" else [GAP], + complete=False, + integrity="incomplete", + base_events={EVENT: _base_event(**{base: [GAP]})}, + sealed=False, + ) + if second_event: + other = copy.deepcopy(doc["corpus"]["events"][EVENT]) + other.update( + inert_measure_years=[], + missing_measure_years=[], + full_supported_grid_complete=True, + ) + doc["corpus"]["events"]["autumn_budget_2025"] = other + doc = _sealed(doc) + _validator("replay_receipt.v1.json").validate(doc) + return _gate(doc) + + +@pytest.mark.parametrize( + ("candidate", "base"), sorted(PRODUCER_GAP_ROWS), ids=lambda side: side +) +def test_every_kind_of_known_gap_passes_as_scorecard_writes_it(candidate, base): + """Round 3 of #637: a known gap does not block (d1344), including the + rows by which scorecard records a mixed one. Before, missing/inert + failed as a lost result and inert/missing went to review.""" + + gate = _known_gap(PRODUCER_GAP_ROWS[candidate, base], candidate, base) + assert gate.status == "pass", gate.summary + (gap,) = gate.details["known_gaps"] + assert (gap["candidate"], gap["why"]) == (candidate, f"{base} in the base") + mixed = candidate != base + assert [row["level"] for row in gate.details["known_gap_rows"]] == ( + ["measure_year", "source_row"] if mixed else [] + ) + + +@pytest.mark.parametrize( + ("candidate", "base", "row", "kind"), + [ + # £0 on the wrong side for the gap's kind: judged as usual. + ("inert", "missing", {"base_gbp": 0.0, "head_gbp": None}, "lost_result"), + ("missing", "inert", {"base_gbp": None, "head_gbp": 0.0}, "coverage_gain"), + # A material base value is still a lost result. + ("missing", "inert", {"base_gbp": 5e8, "head_gbp": None}, "lost_result"), + # A candidate value contradicts the candidate's own record. + ("inert", "missing", {"base_gbp": None, "head_gbp": 5e8}, "contradiction"), + ("missing", "missing", {"base_gbp": None, "head_gbp": 1.0}, "contradiction"), + # inert/inert and missing/missing write no coverage row at all. + ("inert", "inert", {"base_gbp": 0.0, "head_gbp": None}, "lost_result"), + ( + "missing", + "missing", + {"base_gbp": None, "head_gbp": None}, + "coverage_without_values", + ), + ], +) +def test_other_coverage_rows_at_a_known_gap_are_judged_as_usual( + candidate, base, row, kind +): + gate = _known_gap([{"flags": ["coverage"], **row}], candidate, base) + recorded = [r["kind"] for r in gate.details["regressions"]] + [ + r["kind"] for r in gate.details["review_items"] + ] + assert kind in recorded, gate.summary + assert gate.status == ("needs_review" if kind.startswith("coverage") else "fail") + assert gate.details["known_gap_rows"] == [] + + +def test_a_known_gap_row_still_carries_its_other_flags(): + rows = copy.deepcopy(PRODUCER_GAP_ROWS["missing", "inert"]) + rows[0]["flags"].append("construction") + gate = _known_gap(rows, "missing", "inert") + assert gate.status == "needs_review" + assert [r["kind"] for r in gate.details["review_items"]] == ["flagged_move"] + + +# Round 3 of #637: the reach of the inertness exemption. The reviewer's +# probes, kept; one changed with the policy (base-only inertness at a +# missing/inert gap is now the gap itself). +_FLAGS = [ + "numerical", + "structural", + "coverage", + "support", + "inertness", + "construction", + "mapping", +] + + +@pytest.mark.parametrize("n", range(1, len(_FLAGS) + 1)) +def test_a_known_inert_gap_strips_only_inertness_for_every_flag_set(n): + for combo in itertools.combinations(_FLAGS, n): + gate = _known_gap([{"flags": list(combo), "base_gbp": None, "head_gbp": None}]) + rest = set(combo) - {"inertness"} + expected = "fail" if "mapping" in rest else ("needs_review" if rest else "pass") + assert gate.status == expected, combo + assert len(gate.details["known_gaps"]) == 1 + + +@pytest.mark.parametrize( + "where", + [ + {"year": 2027}, + {"measure_key": MEASURE + "_other"}, + {"event": "autumn_budget_2025"}, + ], + ids=["another year", "another measure", "another event"], +) +def test_inertness_beside_a_known_inert_gap_still_needs_review(where): + gate = _known_gap( + [{"flags": ["inertness"], "base_gbp": 0.0, "head_gbp": 3e8, **where}], + second_event=True, + ) + assert gate.status == "needs_review", gate.summary + assert [i["kind"] for i in gate.details["review_items"]] == ["base_only_inertness"] + + +def test_inertness_alone_off_the_inert_list_needs_review(): + gate = _gate( + _receipt_with(rows=[{"flags": ["inertness"], "base_gbp": 0.0, "head_gbp": 3e8}]) + ) + assert gate.status == "needs_review" + assert [i["kind"] for i in gate.details["review_items"]] == ["base_only_inertness"] + + +@pytest.mark.parametrize( + ("base", "status"), [("inert", "pass"), ("missing", "needs_review")] +) +def test_inertness_on_a_known_missing_gap(base, status): + """Where the base is inert, the base-only inertness is the gap itself. + Where both are missing, an inertness flag contradicts both records and + goes to review.""" + + gate = _known_gap( + [ + { + "flags": ["inertness"], + "base_gbp": None, + "head_gbp": None, + "level": "source_row", + "key": "obr-row-1", + } + ], + candidate="missing", + base=base, + ) + assert gate.status == status, gate.summary + if status == "needs_review": + assert [i["kind"] for i in gate.details["review_items"]] == [ + "base_only_inertness" + ] + + +@pytest.mark.parametrize("level", ["source_row", "measure_year", "head"]) +def test_a_known_inert_gap_strips_inertness_at_every_level(level): + gate = _known_gap( + [ + { + "flags": ["inertness"], + "base_gbp": None, + "head_gbp": None, + "level": level, + "key": "k", + } + ] + ) + assert gate.status == "pass", gate.summary + + +def test_a_mixed_inertness_row_off_the_inert_list_is_a_flagged_move(): + gate = _gate( + _receipt_with( + rows=[ + {"flags": ["inertness", "numerical"], "base_gbp": 1e8, "head_gbp": 3e8} + ] + ) + ) + assert [i["kind"] for i in gate.details["review_items"]] == ["flagged_move"] + + +def test_an_unknown_inert_zero_total_is_one_lost_response_and_no_review(): + gate = _gate( + _receipt_with( + rows=[{"flags": ["structural"], "base_gbp": 5e8, "head_gbp": 0.0}], + inert=[GAP], + missing=[], + complete=False, + integrity="incomplete", + ) + ) + assert gate.status == "fail" + assert [r["kind"] for r in gate.details["regressions"]] == [ + "lost_response", + "incomplete", + ] + assert gate.details["review_items"] == [] + + +def test_the_real_6_5_0_receipt(): + """W6's 6.5.0 qualification (request d83eaf59, replay-state 19a9ccdc): + the first real receipt with diff.base_events. Eight flagged rows, all + Autumn Budget 2024's capital gains measure (#186's fiscal-year blend): + review, no regressions, no known gaps.""" + + import json + + path = Path(__file__).parent / "fixtures/uk_replay/receipt_6.5.0" + request = ReplayQualificationRequest.model_validate( + json.loads((path / "REQUEST.json").read_text()) + ) + status = ReplayStatus.model_validate(json.loads((path / "STATUS.json").read_text())) + receipt = ReplayReceipt.from_document( + json.loads((path / "REPLAY_RECEIPT.json").read_text()) + ) + assert ( + receipt.computed_receipt_sha256 + == status.receipt_sha256 + == ("a7a67c268c21b983ed47930ea5816a23dcd6b37f75373b1a5fc59883b08f5551") + ) + assert receipt.diff is not None and len(receipt.diff.base_events or {}) == 6 + gate = evaluate_replay_receipt(request, status, receipt) + assert gate.status == "needs_review", gate.summary + assert gate.details["regressions"] == gate.details["known_gaps"] == [] + items = gate.details["review_items"] + assert [item["kind"] for item in items] == ["flagged_move"] * 8 + assert {item["measure_key"] for item in items} == { + "autumn_budget_2024__capital_gains_main_rates_and_reliefs" + } + assert sorted(item["year"] for item in items) == [ + 2024, + 2024, + 2024, + 2025, + 2026, + 2027, + 2028, + 2029, + ] + assert ( + gate.details["base_variant_id"] + == "pe6.4.1_uk2.130.1_policyengine-uk-data-1.58.1" + ) + + # Round 2 of #637: combinations of a known gap with other rules, and # evidence that must stay within its own event. def test_a_known_gap_never_excuses_a_complete_event_listing_a_gap(): @@ -1253,21 +1539,21 @@ def test_a_known_gap_never_excuses_a_complete_event_listing_a_gap(): assert gate.details["policy"] == REPLAY_POLICY_ID -def test_a_known_gap_never_excuses_a_counted_mapping_flag_or_a_lost_result(): +def test_a_known_gap_never_excuses_a_mapping_flag_or_a_material_lost_result(): mapping = _gate( _receipt_with( + rows=[{"flags": ["mapping"], "base_gbp": None, "head_gbp": None}], inert=[GAP], missing=[], complete=False, integrity="incomplete", - counts={"mapping": 1}, base_events={EVENT: _base_event(inert=[GAP])}, ) ) assert mapping.status == "fail" and len(mapping.details["known_gaps"]) == 1 - assert mapping.details["regressions"] == [ - {"kind": "counted_flag", "flag": "mapping", "count": 1} - ] + assert [r["kind"] for r in mapping.details["regressions"]] == ["mapping"] + # A base inert by its own record cannot hold £500m: scorecard cannot + # write this row, and the gate still fails it as a lost result. lost = _gate( _receipt_with( rows=[{"flags": ["coverage"], "base_gbp": 5e8, "head_gbp": None}], @@ -1365,25 +1651,55 @@ def receipt(base_gbp): assert "though the base's record" in contradicted.details["regressions"][0]["why"] -def test_a_counted_flag_with_no_row_still_needs_review(): - gate = _gate(_receipt_with(counts={"numerical": 1})) - assert gate.status == "needs_review" - assert gate.details["review_items"] == [ - {"kind": "counted_flag", "flag": "numerical", "count": 1} - ] +@pytest.mark.parametrize("kind", ["numerical", "mapping", "inertness"]) +def test_a_counter_with_no_row_is_a_contradiction(kind): + """Scorecard's counters tally its rows' flags (equal on every real + receipt), so a flag only the counters state contradicts the rows: it + fails, whether or not its kind blocks.""" + + receipt = _receipt_with(counts={kind: 1}) + _validator("replay_receipt.v1.json").validate(receipt) + gate = _gate(receipt) + assert gate.status == "fail" + assert [r["kind"] for r in gate.details["regressions"]] == ["contradiction"] + assert f"0 flagged row(s) carry {kind} but flag_counts says 1" in gate.summary -def test_a_counted_mapping_flag_with_no_row_fails(): - """A blocking flag the counters state still fails, so no reviewer can - accept it.""" +def test_a_counter_above_its_rows_cannot_hide_behind_a_known_gap(): + """Round 3 of #637: one exempt row with flag_counts.inertness=5 passed; + the excess is a contradiction.""" - receipt = _receipt_with(counts={"mapping": 1}) - _validator("replay_receipt.v1.json").validate(receipt) + receipt = _receipt_with( + rows=[{"flags": ["inertness"], "base_gbp": 0.0, "head_gbp": 0.0}], + inert=[GAP], + missing=[], + complete=False, + integrity="incomplete", + counts={"inertness": 5}, + base_events={EVENT: _base_event(inert=[GAP])}, + ) gate = _gate(receipt) assert gate.status == "fail" - assert gate.details["regressions"] == [ - {"kind": "counted_flag", "flag": "mapping", "count": 1} - ] + assert "1 flagged row(s) carry inertness but flag_counts says 5" in gate.summary + + +@pytest.mark.parametrize( + "path", + [ + Path(__file__).parent / "fixtures/uk_replay/receipt_6.4.1_attempt1", + Path(__file__).parent / "fixtures/uk_replay/receipt_6.5.0", + ], + ids=["6.4.1 attempt 1", "6.5.0"], +) +def test_real_receipts_count_exactly_the_flags_their_rows_carry(path): + import json + + receipt = json.loads((path / "REPLAY_RECEIPT.json").read_text()) + tally: dict[str, int] = {} + for row in receipt["diff"]["flagged_rows"]: + for kind in row["flags"]: + tally[kind] = tally.get(kind, 0) + 1 + assert {k: n for k, n in receipt["diff"]["flag_counts"].items() if n} == tally def test_every_early_failure_carries_the_policy_record(): @@ -1568,6 +1884,65 @@ def oracle(these): assert gate.status == "fail" +@settings(max_examples=300, deadline=None) +@given( + rows=st.lists(_ROW, max_size=4), + candidate=st.sampled_from(["inert", "missing"]), + base=st.sampled_from(["inert", "missing", None]), +) +def test_the_replay_policy_with_known_gaps_against_a_reference(rows, candidate, base): + """Round 3 of #637: the policy restated independently, with the + measure-year 2026 inert or missing in the candidate and, unless ``base`` + is None, recorded inert or missing in the base (a known gap). Rows fall + on the gap (2026) or beside it (2025).""" + + kwargs = dict( + inert=[GAP] if candidate == "inert" else [], + missing=[] if candidate == "inert" else [GAP], + complete=False, + integrity="incomplete", + ) + if base is not None: + kwargs["base_events"] = {EVENT: _base_event(**{base: [GAP]})} + gate = _gate(_receipt_with(rows, **kwargs)) + + known = base is not None + fail = not known # an unknown inert or missing measure-year fails + review = False + for row in rows: + flags = set(row["flags"]) + b, h = row["base_gbp"], row["head_gbp"] + at_gap = known and row["year"] == 2026 + if at_gap and "coverage" in flags: + if (candidate, base) == ("inert", "missing") and b is None and h == 0: + flags.discard("coverage") + if (candidate, base) == ("missing", "inert") and h is None and b == 0: + flags.discard("coverage") + if "mapping" in flags: + fail = True + if "coverage" in flags and b is not None and h is None: + fail = True + if at_gap and "coverage" in flags and b is None and h not in (None, 0): + fail = True + if ( + row["level"] == "measure_year" + and h == 0 + and b is not None + and abs(b) >= max(1e6, 0.01 * abs(b)) + ): + fail = True + if (row["year"] == 2026 and candidate == "inert") or ( + at_gap and (candidate, base) == ("missing", "inert") + ): + flags.discard("inertness") + if flags - {"mapping"}: + review = True + expected = "fail" if fail else ("needs_review" if review else "pass") + assert gate.status == expected, (candidate, base, rows, gate.summary) + assert (gate.status == "fail") == bool(gate.details["regressions"]) + assert len(gate.details["known_gaps"]) == (1 if known else 0) + + def test_the_comparison_base_must_be_the_one_requested(): raw = copy.deepcopy(golden("qualification_request_golden")) base_variant = _clean_receipt()["diff"]["base_variant_id"] From b9f5574038bde0456bc52d6057dea2f21363eb92 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Fri, 16 Oct 2026 04:04:50 -0400 Subject: [PATCH 7/9] Fail any candidate value at a known gap; strip only valueless inertness MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Round 4 of #637: - The policy says any candidate value at a known gap contradicts the candidate's record, but the code checked only coverage rows; at a missing/inert gap, an inertness row carrying a £500m candidate value passed. Any row at a known gap with a candidate value other than £0 now fails as a contradiction (scorecard cannot write one: an inert artifact's effects are exactly £0 and a missing one has none). - The missing/inert base-only inertness strip applies only to a row with no base value, the shape scorecard writes. - replay_policy.md: the inert side's flag on a valueless row, rows accounted for in whole or in part, and "any base value other than exactly £0" for a lost result. - Tests: the reviewer's round-4 probes (the gap's event, measure and year; exactly £0; partly excused rows; three gaps at once), six candidate-value cases, and the reference property updated to match. Co-Authored-By: Claude Opus 5.5 --- .../data/qualification/replay_policy.md | 16 +- src/policyengine/provenance/qualification.py | 16 +- tests/test_qualification_contracts.py | 209 +++++++++++++++++- 3 files changed, 224 insertions(+), 17 deletions(-) diff --git a/src/policyengine/data/qualification/replay_policy.md b/src/policyengine/data/qualification/replay_policy.md index bfc9a4346..15ccb642e 100644 --- a/src/policyengine/data/qualification/replay_policy.md +++ b/src/policyengine/data/qualification/replay_policy.md @@ -53,12 +53,16 @@ none of its gaps are known. A known gap does not block. Where one side is inert and the other missing, scorecard records the gap as a coverage row with exactly £0 on the inert -side and no value on the other, and, where the base is the inert side, an -inertness flag on the base only. Those rows are the gap itself: they -neither fail nor go to review, and the gate records them beside the known -gaps. Any other row at a known gap is judged as usual: a material base -value is still a lost result, and a candidate value contradicts the -candidate's own record. +side and no value on the other, and an inertness flag on the inert side +only, on a row with no values. Those flags are the gap itself and neither +fail nor send the row to review. (Where the candidate is the inert side, its +inert list already decides that flag.) The gate records every row a known +gap accounts for, in whole or in part, beside the known gaps; the rest of a +partly excused row's flags are judged as usual. Any other row at a known gap +is judged as usual: a base value other than exactly £0 with no candidate +value is still a lost result, and any candidate value other than £0 at a +known gap contradicts the candidate's own record, which lists the +measure-year as inert (exactly £0) or missing (no value). ## Review diff --git a/src/policyengine/provenance/qualification.py b/src/policyengine/provenance/qualification.py index fa3c3bc83..fa337b406 100644 --- a/src/policyengine/provenance/qualification.py +++ b/src/policyengine/provenance/qualification.py @@ -1244,14 +1244,10 @@ def item(kind: str, row: Any = None, **fields: Any) -> dict[str, Any]: if "coverage" in flags and row.base_gbp is not None and row.head_gbp is None: regressions.append(item("lost_result", row)) lost = True - if ( - gap is not None - and "coverage" in flags - and row.base_gbp is None - and row.head_gbp not in (None, 0) - ): + if gap is not None and row.head_gbp not in (None, 0): # The candidate's record lists the measure-year as inert or - # missing, so it cannot also hold a value for it. + # missing, so no row can hold a candidate value for it (an inert + # artifact's effects are exactly £0; a missing one has none). regressions.append( item( "contradiction", @@ -1291,11 +1287,13 @@ def item(kind: str, row: Any = None, **fields: Any) -> dict[str, Any]: gap is not None and gap["candidate"] == "missing" and gap["why"] == "inert in the base" + and row.base_gbp in (None, 0) ): # The candidate's inert list decides its inertness (a lost response # above, or a known gap). Where the candidate is missing and the - # base inert, the base-only inertness is the known gap itself. The - # row's other flags are judged as usual. + # base inert, a base-only inertness flag on a row with no value + # (as scorecard writes it) is the known gap itself. The row's other + # flags are judged as usual. flags = flags - {"inertness"} if gap is not None and flags != set(row.flags): # A row the known gap accounts for, in whole or in part. diff --git a/tests/test_qualification_contracts.py b/tests/test_qualification_contracts.py index dadbedf85..7195e6157 100644 --- a/tests/test_qualification_contracts.py +++ b/tests/test_qualification_contracts.py @@ -1523,6 +1523,209 @@ def test_the_real_6_5_0_receipt(): ) +# Round 4 of #637: where the known-gap rules reach. The reviewer's probes. +_BESIDE = [ + {"year": 2027}, + {"measure_key": MEASURE + "_other"}, + {"event": "autumn_budget_2025"}, +] +_BESIDE_IDS = ["another year", "another measure", "another event"] + + +def _kinds(gate): + return ( + [r["kind"] for r in gate.details["regressions"]], + [r["kind"] for r in gate.details["review_items"]], + ) + + +@pytest.mark.parametrize("where", _BESIDE, ids=_BESIDE_IDS) +def test_a_zero_base_coverage_row_beside_a_missing_inert_gap_is_a_lost_result(where): + gate = _known_gap( + [{"flags": ["coverage"], "base_gbp": 0.0, "head_gbp": None, **where}], + "missing", + "inert", + second_event=True, + ) + assert gate.status == "fail" and _kinds(gate)[0] == ["lost_result"], gate.summary + assert gate.details["known_gap_rows"] == [] + + +@pytest.mark.parametrize("where", _BESIDE, ids=_BESIDE_IDS) +def test_a_zero_head_coverage_row_beside_an_inert_missing_gap_is_a_gain(where): + gate = _known_gap( + [{"flags": ["coverage"], "base_gbp": None, "head_gbp": 0.0, **where}], + "inert", + "missing", + second_event=True, + ) + assert gate.status == "needs_review" and _kinds(gate)[1] == ["coverage_gain"] + assert gate.details["known_gap_rows"] == [] + + +@pytest.mark.parametrize("where", _BESIDE, ids=_BESIDE_IDS) +def test_inertness_beside_a_missing_inert_gap_still_needs_review(where): + row = { + "flags": ["inertness"], + "base_gbp": None, + "head_gbp": None, + "level": "source_row", + "key": "obr-row-1", + **where, + } + gate = _known_gap([row], "missing", "inert", second_event=True) + assert gate.status == "needs_review" + assert _kinds(gate)[1] == ["base_only_inertness"], gate.summary + + +@pytest.mark.parametrize("where", _BESIDE, ids=_BESIDE_IDS) +def test_a_candidate_value_beside_a_gap_is_a_gain_not_a_contradiction(where): + gate = _known_gap( + [{"flags": ["coverage"], "base_gbp": None, "head_gbp": 5e8, **where}], + "missing", + "missing", + second_event=True, + ) + assert gate.status == "needs_review" and _kinds(gate)[1] == ["coverage_gain"] + + +@pytest.mark.parametrize( + ("candidate", "base", "row", "status", "kind"), + [ + # exactly £0, not merely immaterial + ( + "inert", + "missing", + {"base_gbp": None, "head_gbp": 0.4}, + "fail", + "contradiction", + ), + ( + "missing", + "inert", + {"base_gbp": 0.4, "head_gbp": None}, + "fail", + "lost_result", + ), + # £0 on both sides is not the gap's shape + ( + "inert", + "missing", + {"base_gbp": 0.0, "head_gbp": 0.0}, + "needs_review", + "flagged_move", + ), + ( + "missing", + "inert", + {"base_gbp": 0.0, "head_gbp": 0.0}, + "needs_review", + "flagged_move", + ), + ], +) +def test_only_exactly_the_gaps_shape_is_excused(candidate, base, row, status, kind): + gate = _known_gap([{"flags": ["coverage"], **row}], candidate, base) + assert gate.status == status, gate.summary + assert kind in _kinds(gate)[0] + _kinds(gate)[1] + assert gate.details["known_gap_rows"] == [] + + +@pytest.mark.parametrize( + ("candidate", "base", "row"), + [ + ("inert", "inert", {"flags": ["numerical"], "base_gbp": 1e8, "head_gbp": 3e8}), + ("missing", "inert", {"flags": ["coverage"], "base_gbp": 0.0, "head_gbp": 5e8}), + ( + "missing", + "missing", + { + "flags": ["construction"], + "base_gbp": None, + "head_gbp": 5e8, + "level": "head", + "key": "income_tax", + }, + ), + ( + "inert", + "missing", + {"flags": ["inertness"], "base_gbp": None, "head_gbp": 5e8}, + ), + ( + "missing", + "inert", + { + "flags": ["inertness"], + "base_gbp": None, + "head_gbp": 5e8, + "level": "source_row", + "key": "obr-row-1", + }, + ), + ("inert", "inert", {"flags": ["inertness"], "base_gbp": 0.0, "head_gbp": 5e8}), + ], +) +def test_any_candidate_value_at_a_known_gap_is_a_contradiction(candidate, base, row): + """Round 4 of #637: the policy says so for every row, not only coverage + rows; before, a missing/inert inertness row with a candidate value passed.""" + + gate = _known_gap([row], candidate, base) + assert gate.status == "fail", gate.summary + assert "contradiction" in _kinds(gate)[0] + assert _kinds(gate)[1] == [] + + +def test_a_candidate_value_contradiction_is_never_also_reviewed(): + gate = _known_gap( + [{"flags": ["coverage"], "base_gbp": None, "head_gbp": 5e8}], "inert", "missing" + ) + assert _kinds(gate) == (["contradiction"], []) + + +def test_a_counter_above_a_non_gap_row_is_a_contradiction(): + doc = _receipt_with( + rows=[{"flags": ["numerical"], "base_gbp": 1e8, "head_gbp": 3e8}], + counts={"numerical": 2}, + ) + _validator("replay_receipt.v1.json").validate(doc) + gate = _gate(doc) + assert gate.status == "fail" and _kinds(gate)[0] == ["contradiction"], gate.summary + + +def test_three_producer_shaped_gaps_at_once_pass(): + """Gaps of three kinds in one event, with rows as scorecard writes them.""" + + gaps = { + 2025: ("missing", "inert"), + 2026: ("inert", "missing"), + 2027: ("inert", "inert"), + } + rows = [] + for year, kind in gaps.items(): + rows += [ + {**row, "year": year} for row in copy.deepcopy(PRODUCER_GAP_ROWS[kind]) + ] + doc = _receipt_with( + rows=rows, + inert=[(MEASURE, y) for y, (c, _) in gaps.items() if c == "inert"], + missing=[(MEASURE, y) for y, (c, _) in gaps.items() if c == "missing"], + complete=False, + integrity="incomplete", + base_events={ + EVENT: _base_event( + inert=[(MEASURE, y) for y, (_, b) in gaps.items() if b == "inert"], + missing=[(MEASURE, y) for y, (_, b) in gaps.items() if b == "missing"], + ) + }, + ) + _validator("replay_receipt.v1.json").validate(doc) + gate = _gate(doc) + assert gate.status == "pass", gate.summary + assert len(gate.details["known_gaps"]) == 3 + assert len(gate.details["known_gap_rows"]) == 4 + + # Round 2 of #637: combinations of a known gap with other rules, and # evidence that must stay within its own event. def test_a_known_gap_never_excuses_a_complete_event_listing_a_gap(): @@ -1922,7 +2125,9 @@ def test_the_replay_policy_with_known_gaps_against_a_reference(rows, candidate, fail = True if "coverage" in flags and b is not None and h is None: fail = True - if at_gap and "coverage" in flags and b is None and h not in (None, 0): + # Any candidate value at a known gap contradicts the candidate's + # record (round 4 of #637). + if at_gap and h not in (None, 0): fail = True if ( row["level"] == "measure_year" @@ -1932,7 +2137,7 @@ def test_the_replay_policy_with_known_gaps_against_a_reference(rows, candidate, ): fail = True if (row["year"] == 2026 and candidate == "inert") or ( - at_gap and (candidate, base) == ("missing", "inert") + at_gap and (candidate, base) == ("missing", "inert") and b in (None, 0) ): flags.discard("inertness") if flags - {"mapping"}: From 40a18a2545032cd5c547d29d88d7f69da865bfe7 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Fri, 16 Oct 2026 04:52:45 -0400 Subject: [PATCH 8/9] Excuse only a valueless inertness row; correct the lost-result sentence MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Round 5 of #637: - The missing/inert base-only inertness strip also excused rows with £0 on either side, though the policy text and scorecard (which flags inertness only on a row with no value either side) say a valueless row. It now needs no value on either side. - replay_policy.md said a base of exactly £0 with no candidate value is not a lost result; the code fails it at every known gap except the missing/inert gap's own record. The text now says so. The fail list says "a candidate value other than £0", the revision note covers rounds 3 to 5, and the gate's docstring matches. - Tests: the reviewer's round-5 probes (valued inertness rows, the coverage record carrying inertness, partly excused and partly stripped rows, negative candidate values) and the text probes, with the Hypothesis reference updated to the valueless rule. Co-Authored-By: Claude Opus 5.5 --- .../data/qualification/replay_policy.md | 11 +- src/policyengine/provenance/qualification.py | 16 +- tests/test_qualification_contracts.py | 163 +++++++++++++++++- 3 files changed, 177 insertions(+), 13 deletions(-) diff --git a/src/policyengine/data/qualification/replay_policy.md b/src/policyengine/data/qualification/replay_policy.md index 15ccb642e..872014e22 100644 --- a/src/policyengine/data/qualification/replay_policy.md +++ b/src/policyengine/data/qualification/replay_policy.md @@ -3,9 +3,10 @@ Decided under cos d1344 by workstream W4 on 15 October 2026, after two independent reviews. The pull request that added this file records the decision, the reviews and the alternatives considered. Revised on 16 -October 2026, before first use, after the third review of +October 2026, before first use, after the third to fifth reviews of policyengine.py#637: scorecard's own record of a mixed known gap no longer -blocks, and flag counters must equal the flags the rows carry. +blocks, flag counters must equal the flags the rows carry, and any +candidate value other than £0 at a known gap is a contradiction. `evaluate_replay_receipt` in `policyengine.provenance.qualification` applies this text. Each qualification receipt records the policy id and this file's SHA-256 in its `replay` gate details. @@ -38,7 +39,7 @@ comparison base. It sends every other flagged move to a named reviewer. - A receipt that contradicts itself, including a complete event that lists an inert, or missing and supported, measure-year; flag counters that differ, either way, from the flags its rows carry; and a candidate value - for a measure-year that is a known gap. + other than £0 for a measure-year that is a known gap. ## Known gaps @@ -59,8 +60,8 @@ fail nor send the row to review. (Where the candidate is the inert side, its inert list already decides that flag.) The gate records every row a known gap accounts for, in whole or in part, beside the known gaps; the rest of a partly excused row's flags are judged as usual. Any other row at a known gap -is judged as usual: a base value other than exactly £0 with no candidate -value is still a lost result, and any candidate value other than £0 at a +is judged as usual: a coverage row with a base value and no candidate value, +even £0, is still a lost result, and any candidate value other than £0 at a known gap contradicts the candidate's own record, which lists the measure-year as inert (exactly £0) or missing (no value). diff --git a/src/policyengine/provenance/qualification.py b/src/policyengine/provenance/qualification.py index fa337b406..1ae020295 100644 --- a/src/policyengine/provenance/qualification.py +++ b/src/policyengine/provenance/qualification.py @@ -895,9 +895,10 @@ def evaluate_replay_receipt( unless a gap is known: the base's own record (``diff.base_events``) lists the same measure-year as inert, or missing and supported. A known gap does not block, and neither do the rows by which scorecard - records a mixed one (``_is_the_gap``, and the base-only inertness - where the candidate is missing and the base inert); a material value - at a known gap still fails; + records a mixed one (``_is_the_gap``, and the base-only inertness on a + valueless row where the candidate is missing and the base inert); any + candidate value other than £0 at a known gap fails as a contradiction, + and any other base value with no candidate value is a lost result; - send every other flagged move to review. Unsupported years are reported, never failed on their own. The gate's @@ -1287,13 +1288,14 @@ def item(kind: str, row: Any = None, **fields: Any) -> dict[str, Any]: gap is not None and gap["candidate"] == "missing" and gap["why"] == "inert in the base" - and row.base_gbp in (None, 0) + and row.base_gbp is None + and row.head_gbp is None ): # The candidate's inert list decides its inertness (a lost response # above, or a known gap). Where the candidate is missing and the - # base inert, a base-only inertness flag on a row with no value - # (as scorecard writes it) is the known gap itself. The row's other - # flags are judged as usual. + # base inert, a base-only inertness flag on a row with no value on + # either side (as scorecard writes it) is the known gap itself. + # The row's other flags are judged as usual. flags = flags - {"inertness"} if gap is not None and flags != set(row.flags): # A row the known gap accounts for, in whole or in part. diff --git a/tests/test_qualification_contracts.py b/tests/test_qualification_contracts.py index 7195e6157..8ed80a7bf 100644 --- a/tests/test_qualification_contracts.py +++ b/tests/test_qualification_contracts.py @@ -1726,6 +1726,164 @@ def test_three_producer_shaped_gaps_at_once_pass(): assert len(gate.details["known_gap_rows"]) == 4 +# Round 5 of #637: the reviewer's probes on the strip and the text. +_GAP_KINDS = [ + ("inert", "inert"), + ("missing", "missing"), + ("inert", "missing"), + ("missing", "inert"), +] +_SOURCE_ROW = {"level": "source_row", "key": "obr-row-1"} + + +@pytest.mark.parametrize( + "row", + [ + {"flags": ["inertness"], "base_gbp": 0.0, "head_gbp": None, **_SOURCE_ROW}, + {"flags": ["inertness"], "base_gbp": None, "head_gbp": 0.0, **_SOURCE_ROW}, + {"flags": ["inertness"], "base_gbp": 0.0, "head_gbp": 0.0, **_SOURCE_ROW}, + {"flags": ["inertness"], "base_gbp": 0.0, "head_gbp": None}, + {"flags": ["inertness"], "base_gbp": 5e8, "head_gbp": None, **_SOURCE_ROW}, + {"flags": ["inertness"], "base_gbp": -5e8, "head_gbp": None, **_SOURCE_ROW}, + ], + ids=[ + "base £0", + "head £0", + "both £0", + "measure-year base £0", + "base £500m", + "base -£500m", + ], +) +def test_only_a_valueless_inertness_row_is_the_gaps_record(row): + """At a missing/inert gap scorecard flags inertness only on a row with no + value on either side; one with any value, even £0, is judged as usual.""" + + gate = _known_gap([row], "missing", "inert") + assert gate.status == "needs_review", (gate.status, _kinds(gate)) + assert _kinds(gate) == ([], ["base_only_inertness"]) + assert gate.details["known_gap_rows"] == [] + + +def test_the_coverage_record_carrying_inertness_too_is_reviewed(): + gate = _known_gap( + [{"flags": ["coverage", "inertness"], "base_gbp": 0.0, "head_gbp": None}], + "missing", + "inert", + ) + assert gate.status == "needs_review" and _kinds(gate) == ( + [], + ["base_only_inertness"], + ) + + +@pytest.mark.parametrize("base_gbp,head_gbp", [(None, None), (None, 0.0), (0.0, 0.0)]) +def test_inertness_at_an_inert_missing_gap_is_decided_by_the_inert_list( + base_gbp, head_gbp +): + gate = _known_gap( + [ + { + "flags": ["inertness"], + "base_gbp": base_gbp, + "head_gbp": head_gbp, + **_SOURCE_ROW, + } + ], + "inert", + "missing", + ) + assert gate.status == "pass", (gate.status, _kinds(gate)) + + +def test_a_partly_excused_row_is_recorded_and_its_rest_reviewed(): + rows = copy.deepcopy(PRODUCER_GAP_ROWS["missing", "inert"]) + rows[0]["flags"].append("construction") + gate = _known_gap(rows, "missing", "inert") + assert [r["level"] for r in gate.details["known_gap_rows"]] == [ + "measure_year", + "source_row", + ] + assert _kinds(gate) == ([], ["flagged_move"]) + + +def test_a_partly_stripped_inertness_row_is_recorded(): + rows = [ + { + "flags": ["inertness", "numerical"], + "base_gbp": None, + "head_gbp": None, + **_SOURCE_ROW, + } + ] + gate = _known_gap(rows, "missing", "inert") + assert len(gate.details["known_gap_rows"]) == 1 + assert _kinds(gate) == ([], ["flagged_move"]) + + +def test_a_row_the_gap_does_not_account_for_is_not_recorded(): + gate = _known_gap( + [{"flags": ["numerical"], "base_gbp": 0.0, "head_gbp": 0.0}], "inert", "inert" + ) + assert gate.details["known_gap_rows"] == [] + + +@pytest.mark.parametrize( + ("candidate", "base"), [k for k in _GAP_KINDS if k != ("missing", "inert")] +) +@pytest.mark.parametrize("base_gbp", [0.0, 0.4]) +def test_a_base_value_with_no_candidate_value_is_a_lost_result( + candidate, base, base_gbp +): + """Even £0, except as the missing/inert gap's own record (the policy text + said the opposite at £0 until round 5).""" + + gate = _known_gap( + [{"flags": ["coverage"], "base_gbp": base_gbp, "head_gbp": None}], + candidate, + base, + ) + assert gate.status == "fail" and "lost_result" in _kinds(gate)[0], ( + gate.status, + _kinds(gate), + ) + + +@pytest.mark.parametrize(("candidate", "base"), _GAP_KINDS) +@pytest.mark.parametrize("head", [5e8, -5e8, 0.4, -1e-9]) +@pytest.mark.parametrize( + ("flags", "level"), + [ + (["inertness"], "source_row"), + (["numerical"], "head"), + (["construction"], "measure_year"), + (["support"], "measure_year"), + (["structural"], "head"), + (["coverage"], "source_row"), + ], +) +def test_any_candidate_value_other_than_zero_at_a_known_gap_fails( + candidate, base, head, flags, level +): + gate = _known_gap( + [ + { + "flags": flags, + "base_gbp": None, + "head_gbp": head, + "level": level, + "key": "k", + } + ], + candidate, + base, + ) + assert gate.status == "fail" and _kinds(gate) == (["contradiction"], []), ( + gate.status, + _kinds(gate), + ) + + # Round 2 of #637: combinations of a known gap with other rules, and # evidence that must stay within its own event. def test_a_known_gap_never_excuses_a_complete_event_listing_a_gap(): @@ -2137,7 +2295,10 @@ def test_the_replay_policy_with_known_gaps_against_a_reference(rows, candidate, ): fail = True if (row["year"] == 2026 and candidate == "inert") or ( - at_gap and (candidate, base) == ("missing", "inert") and b in (None, 0) + at_gap + and (candidate, base) == ("missing", "inert") + and b is None + and h is None ): flags.discard("inertness") if flags - {"mapping"}: From 656eeded83c23ad0e2b379467eaa3bc74e2d60e4 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Fri, 16 Oct 2026 06:26:21 -0400 Subject: [PATCH 9/9] Correct the replay gate's docstring; pin the gap record's level and shape MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Round 6 of #637 (approved; lows): - The docstring said any base value with no candidate value is a lost result; only a coverage row is, as the code and policy say. It also read as if a known gap excused mapping flags and the £0-total lost response, which it never does. Both corrected. - replay_policy.md's summary now says the gate passes the rows that record a known gap. - Tests (the reviewer's probes): a valueless inertness row at a missing/inert gap is the gap's record at every level; a coverage row with no value on either side at a mixed gap is not its record. Co-Authored-By: Claude Opus 5.5 --- .../data/qualification/replay_policy.md | 3 +- src/policyengine/provenance/qualification.py | 23 ++++++----- tests/test_qualification_contracts.py | 38 +++++++++++++++++++ 3 files changed, 53 insertions(+), 11 deletions(-) diff --git a/src/policyengine/data/qualification/replay_policy.md b/src/policyengine/data/qualification/replay_policy.md index 872014e22..bb6aa65e6 100644 --- a/src/policyengine/data/qualification/replay_policy.md +++ b/src/policyengine/data/qualification/replay_policy.md @@ -13,7 +13,8 @@ this file's SHA-256 in its `replay` gate details. The replay gate fails on the regressions a scorecard replay receipt identifies. It calls a gap known only on positive evidence from the -comparison base. It sends every other flagged move to a named reviewer. +comparison base, and passes the rows that record a known gap. It sends +every other flagged move to a named reviewer. ## Fail diff --git a/src/policyengine/provenance/qualification.py b/src/policyengine/provenance/qualification.py index 1ae020295..29c505bd7 100644 --- a/src/policyengine/provenance/qualification.py +++ b/src/policyengine/provenance/qualification.py @@ -889,16 +889,19 @@ def evaluate_replay_receipt( (``data/qualification/replay_policy.md``): - fail on rejected or failed replays, mapping flags, lost results - (a base value with no candidate value), lost responses (a measure-year - the candidate lists as inert, or a measure-year total of exactly £0 - against a base at least the diff's bound away) and incomplete grids, - unless a gap is known: the base's own record (``diff.base_events``) - lists the same measure-year as inert, or missing and supported. A - known gap does not block, and neither do the rows by which scorecard - records a mixed one (``_is_the_gap``, and the base-only inertness on a - valueless row where the candidate is missing and the base inert); any - candidate value other than £0 at a known gap fails as a contradiction, - and any other base value with no candidate value is a lost result; + (a coverage row with a base value and no candidate value), lost + responses (a measure-year total of exactly £0 against a base at least + the diff's bound away, which a known gap never excuses, or a + measure-year the candidate lists as inert, unless it is a known gap) + and incomplete grids (unless every gap in them is known). A gap is + known when the base's own record (``diff.base_events``) lists the same + measure-year as inert, or missing and supported. A known gap does not + block, and neither do the rows by which scorecard records a mixed one + (``_is_the_gap``, and the base-only inertness on a valueless row where + the candidate is missing and the base inert); any candidate value + other than £0 at a known gap fails as a contradiction, and any other + coverage row with a base value and no candidate value, even £0, is a + lost result; - send every other flagged move to review. Unsupported years are reported, never failed on their own. The gate's diff --git a/tests/test_qualification_contracts.py b/tests/test_qualification_contracts.py index 8ed80a7bf..a81330bd6 100644 --- a/tests/test_qualification_contracts.py +++ b/tests/test_qualification_contracts.py @@ -1884,6 +1884,44 @@ def test_any_candidate_value_other_than_zero_at_a_known_gap_fails( ) +# Round 6 of #637: the reviewer's probes. +@pytest.mark.parametrize( + ("level", "key"), [("source_row", "r"), ("measure_year", "total"), ("head", "v")] +) +def test_a_valueless_inertness_row_at_a_missing_inert_gap_is_the_gap_at_any_level( + level, key +): + gate = _known_gap( + [ + { + "flags": ["inertness"], + "base_gbp": None, + "head_gbp": None, + "level": level, + "key": key, + } + ], + "missing", + "inert", + ) + assert gate.status == "pass" and len(gate.details["known_gap_rows"]) == 1 + + +@pytest.mark.parametrize( + ("candidate", "base"), [("missing", "inert"), ("inert", "missing")] +) +def test_a_valueless_coverage_row_at_a_mixed_gap_is_not_its_record(candidate, base): + """The coverage record is £0 on the inert side; a coverage row with no + value on either side is reviewed, at that gap too.""" + + gate = _known_gap( + [{"flags": ["coverage"], "base_gbp": None, "head_gbp": None}], candidate, base + ) + assert gate.status == "needs_review" + assert _kinds(gate) == ([], ["coverage_without_values"]) + assert gate.details["known_gap_rows"] == [] + + # Round 2 of #637: combinations of a known gap with other rules, and # evidence that must stay within its own event. def test_a_known_gap_never_excuses_a_complete_event_listing_a_gap():