From 64e63f0f1f11aa38d376406b230001067125a1f6 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sun, 25 Oct 2026 05:26:12 -0400 Subject: [PATCH 1/3] Give both OBR placements of NI domestic rates in the fiscal partition MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The domestic_rates note said only that the OBR adds NI domestic rates to council tax receipts. The OBR's March 2026 tables show them in two places, labelled neither regional nor district: expenditure Table 4.1 "NI domestic rates" (£0.494bn flat, inside council tax) and receipts Table 3.2 "Northern Ireland domestic rates" (£485.3m in 2024-25, other taxes). domestic_rates charges the whole bill. The note now gives both, with the regional and district attribution stated as inference, as in the finance_ni.domestic_rates comment (d870). The head keeps the Council tax row, where the OBR says it adds NI domestic rates; the Other taxes row of uncovered_receipts records that its two NI lines are partly measured. Fixes #2662 Co-Authored-By: Claude Opus 5.5 --- changelog.d/2662.changed.md | 1 + policyengine_uk/data/fiscal_partition.yaml | 47 ++++++++++++++++++++-- 2 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 changelog.d/2662.changed.md diff --git a/changelog.d/2662.changed.md b/changelog.d/2662.changed.md new file mode 100644 index 0000000000..597847196e --- /dev/null +++ b/changelog.d/2662.changed.md @@ -0,0 +1 @@ +Documented that the OBR shows Northern Ireland domestic rates in two places, a council tax line that appears to be the district rates and an other taxes line that appears to be the regional rate, while `domestic_rates` charges both. diff --git a/policyengine_uk/data/fiscal_partition.yaml b/policyengine_uk/data/fiscal_partition.yaml index 5fb8ec17c4..3d82663a57 100644 --- a/policyengine_uk/data/fiscal_partition.yaml +++ b/policyengine_uk/data/fiscal_partition.yaml @@ -88,6 +88,20 @@ sources: a forecast of Northern Irish domestic rates to Great Britain's, and are net of discounts and reduction schemes. Read 2026-10-11 from https://obr.uk/forecasts-in-depth/tax-by-tax-spend-by-spend/council-tax/ + ni_domestic_rates: >- + OBR, Economic and fiscal outlook, March 2026, detailed forecast tables: + expenditure Table 4.1 ("Council tax receipts"), which its footnote calls + a breakdown of Table A.5's council tax line, and receipts Table 3.2 + ("Other taxes"), which its footnote calls consistent with Table A.5's + other taxes line. ONS, Country and regional public sector finances, + financial year ending 2025, Northern Ireland revenue rows "Northern + Ireland Regional Domestic Rates" and "Northern Ireland District Domestic + Rates". Land & Property Services, "Rates paid by District Council and + Sector", domestic rates paid. Cells read 2026-10-25. Published at + https://obr.uk/efo/economic-and-fiscal-outlook-march-2026/, + https://www.ons.gov.uk/economy/governmentpublicsectorandtaxes/publicsectorfinance/datasets/countryandregionalpublicsectorfinancesrevenuetables + and + https://www.data.gov.uk/dataset/30535a44-0a05-4bff-98cf-001301a6b4d6/rates-paid-by-district-council-and-sector student_loans: >- Student loan repayments are not a row of Table A.5. In the March 2026 EFO only the interest accrued on the loans enters receipts, in "Interest @@ -447,8 +461,29 @@ tax_heads: obr_line: Council tax obr_table_3_1: null obr_line_note: >- - The OBR adds Northern Irish domestic rates to its council tax receipts - (see sources). + domestic_rates is the whole Northern Ireland domestic bill, the + regional rate and the council's district rate together (Land & + Property Services (LPS) domestic rates paid, £889.5m in 2024-25). The + OBR shows NI domestic rates in two places and labels neither as + regional or district (see sources): "NI domestic rates" in its council + tax receipts, a flat £0.494bn in every year from the 2024-25 outturn to + 2030-31 (expenditure Table 4.1), which appears to be the district + rates; and "Northern Ireland domestic rates" under other taxes, £485.3m + in 2024-25 (receipts Table 3.2), which appears to cover the regional + rate only. ONS records NI regional domestic rates (central government, + £498m in 2024-25) and district domestic rates (local government, with + council tax, £441m) separately. The head keeps the Council tax row, + where the OBR says it adds NI domestic rates; its regional part appears + to sit in Other taxes. On this reading the head corresponds to the two + lines together (£0.979bn in 2024-25), not to either alone. The comment + on gov.economic_assumptions.yoy_growth.finance_ni.domestic_rates gives + the evidence for the reading. + data_note: >- + On the certified dataset (policyengine-uk-data 1.58.1) the head totals + £0.52bn in 2024, the FRS 2024-25 year, against £0.89bn of LPS domestic + rates paid in 2024-25. policyengine-uk-data issue 520 tracks the level + and the data build's obr/domestic_rates target, which it reads from the + Table 4.1 line alone. Measured 2026-10-25. report_group: local_taxes payer: household totals: [gov_tax, household_tax, pre_budget_change_household_tax] @@ -805,7 +840,13 @@ uncovered_receipts: - {obr_line: Emissions Trading Scheme} - {obr_line: Energy profits levy} - {obr_line: Electricity generator levy} - - {obr_line: Other taxes} + - obr_line: Other taxes + note: >- + Partly measured. Its "Northern Ireland domestic rates" and "Northern + Ireland business rates" lines (receipts Table 3.2) appear to be the + regional rate, which domestic_rates and business_rates include + together with the district rate (see those heads). The rest of the row + has no household measure. spending_heads: # Pensioners From c7cdbfc987a4c3e9d8a69bfd340f9e5e2d524fea Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sun, 25 Oct 2026 07:22:04 -0400 Subject: [PATCH 2/3] Address review r1 on the NI domestic rates partition note MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - State that the reading rests on where each OBR line sits, not its size: the £0.494bn Table 4.1 line is nearer ONS's regional row than its district row, and the two lines together exceed LPS and ONS. Add the same clause to the finance_ni.domestic_rates comment. - Say the 2024-25 Table A.5 council tax row (£47.417bn) is £0.273bn below Table 4.1's total, so its outturn may not include NI domestic rates. - Define uncovered_receipts by what the closure test checks (rows no head's obr_line names) and let a note record partial measurement. - Explain obr_table_3_1: null in the note; reword the LPS figure so it does not read as the head's own level. Co-Authored-By: Claude Opus 5.5 --- policyengine_uk/data/fiscal_partition.yaml | 45 +++++++++++-------- .../gov/economic_assumptions/yoy_growth.yaml | 8 ++-- 2 files changed, 32 insertions(+), 21 deletions(-) diff --git a/policyengine_uk/data/fiscal_partition.yaml b/policyengine_uk/data/fiscal_partition.yaml index a3b566cd28..da3d3baa74 100644 --- a/policyengine_uk/data/fiscal_partition.yaml +++ b/policyengine_uk/data/fiscal_partition.yaml @@ -56,9 +56,10 @@ # model_double_counts[]: known violations still in the model: a variable a # total lists although the head variable `contained_in` already adds it. # None since the #2159 fix gave corporate_sdlt its own head. -# uncovered_receipts[]: rows of Table A.5 the model has no household -# measure for. With the heads' obr_line values they account for every -# tax row of the table. +# uncovered_receipts[]: rows of Table A.5 that no head's obr_line names. +# With the heads' obr_line values they account for every tax row of the +# table. A row's note records any part of it that heads naming other +# rows measure. # overlap_guards[]: the places double counting could occur, and the # property the tests check for each. overlapping_base records a receipt # allocation between heads sharing an imputed base. The report also @@ -461,9 +462,9 @@ tax_heads: obr_line: Council tax obr_table_3_1: null obr_line_note: >- - domestic_rates is the whole Northern Ireland domestic bill, the - regional rate and the council's district rate together (Land & - Property Services (LPS) domestic rates paid, £889.5m in 2024-25). The + The head is the whole Northern Ireland domestic bill, the regional rate + and the council's district rate together. Land & Property Services + (LPS) reports £889.5m of domestic rates paid across NI in 2024-25. The OBR shows NI domestic rates in two places and labels neither as regional or district (see sources): "NI domestic rates" in its council tax receipts, a flat £0.494bn in every year from the 2024-25 outturn to @@ -472,12 +473,20 @@ tax_heads: in 2024-25 (receipts Table 3.2), which appears to cover the regional rate only. ONS records NI regional domestic rates (central government, £498m in 2024-25) and district domestic rates (local government, with - council tax, £441m) separately. The head keeps the Council tax row, - where the OBR says it adds NI domestic rates; its regional part appears - to sit in Other taxes. On this reading the head corresponds to the two - lines together (£0.979bn in 2024-25), not to either alone. The comment - on gov.economic_assumptions.yoy_growth.finance_ni.domestic_rates gives - the evidence for the reading. + council tax, £441m) separately. The reading rests on where each line + sits, not on its size: £0.494bn is nearer ONS's regional row than its + district row, and the two lines together (£0.979bn in 2024-25) exceed + both LPS's figure and ONS's two rows (£0.939bn). The head keeps the + Council tax row, where the OBR says its forecast adds NI domestic + rates. In the 2024-25 outturn that row (March 2026 Table A.5, + £47.417bn) is £0.273bn below Table 4.1's total (£47.690bn), so whether + it then includes NI domestic rates is not established; the two agree + in the forecast years. The regional part appears to sit in Other + taxes. On this reading the head's scope is the two lines together, not + either alone. obr_table_3_1 is null because Table 3.1's footnotes do + not place NI domestic rates and the head spans two Table A.5 rows. The + comment on gov.economic_assumptions.yoy_growth.finance_ni.domestic_rates + gives the evidence for the reading. data_note: >- On the certified dataset (policyengine-uk-data 1.58.1) the head totals £0.52bn in 2024, the FRS 2024-25 year, against £0.89bn of LPS domestic @@ -827,7 +836,7 @@ overlap_guards: microdata (policyengine-uk-data issue 568). uncovered_receipts: - # Rows of Table A.5 with no household measure in the model. + # Rows of Table A.5 that no head's obr_line names. - {obr_line: Corporation tax} - {obr_line: Petroleum revenue tax} - {obr_line: VAT refunds, note: "A National Accounts adjustment, not a tax on households."} @@ -846,11 +855,11 @@ uncovered_receipts: - {obr_line: Electricity generator levy} - obr_line: Other taxes note: >- - Partly measured. Its "Northern Ireland domestic rates" and "Northern - Ireland business rates" lines (receipts Table 3.2) appear to be the - regional rate, which domestic_rates and business_rates include - together with the district rate (see those heads). The rest of the row - has no household measure. + Partly measured by heads that name other rows. Its "Northern Ireland + domestic rates" and "Northern Ireland business rates" lines (receipts + Table 3.2) appear to be the regional rate, which domestic_rates and + business_rates include together with the district rate (see those + heads). The rest of the row has no household measure. spending_heads: # Pensioners diff --git a/policyengine_uk/parameters/gov/economic_assumptions/yoy_growth.yaml b/policyengine_uk/parameters/gov/economic_assumptions/yoy_growth.yaml index e69980e45a..c5c23ba3ac 100644 --- a/policyengine_uk/parameters/gov/economic_assumptions/yoy_growth.yaml +++ b/policyengine_uk/parameters/gov/economic_assumptions/yoy_growth.yaml @@ -1529,9 +1529,11 @@ finance_ni: # taxes") appears to be the regional rate: ONS classes the regional # domestic rate as a central government tax, and with Table 3.2's NI # business rates line it sums to £0.914bn in 2026-27, against DoF's - # "just over £900million" from the regional rate that year. Receipts - # growth is not bill growth either: Table 3.2 grows 2.0% in 2026-27, a - # year whose domestic regional rate rose 5.0%. + # "just over £900million" from the regional rate that year. The reading + # rests on where the lines sit, not on their size: the £0.494bn line is + # nearer ONS's 2024-25 regional domestic row (£498m) than its district + # row (£441m). Receipts growth is not bill growth either: Table 3.2 + # grows 2.0% in 2026-27, a year whose domestic regional rate rose 5.0%. values: # Outturn: published poundages. Regional rate 0.4574p in 2019-20 to # 2022-23, then 0.4848p, 0.5042p, 0.5294p and 0.5559p (2026-27). The From 1e7b26521c3b3be53f62486b4d5a5dc51eaa1a70 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sun, 25 Oct 2026 11:25:14 -0400 Subject: [PATCH 3/3] Address review r2 on the NI domestic rates partition note - Keep uncovered_receipts' documented meaning and drop the Other taxes note: a schema_version bump would break the pinned aggregate-impact tool copies in policyengine.py and policyengine-uk-data for a prose change no code reads. The two heads' notes carry the overlap. - Hedge 'the head appears to span two Table A.5 rows'; ground the yoy_growth 'neither line covers the whole bill' in size. - Drop the repeated regional sentence; define ONS and the Family Resources Survey. Co-Authored-By: Claude Opus 5.5 --- policyengine_uk/data/fiscal_partition.yaml | 35 ++++++++----------- .../gov/economic_assumptions/yoy_growth.yaml | 3 +- 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/policyengine_uk/data/fiscal_partition.yaml b/policyengine_uk/data/fiscal_partition.yaml index da3d3baa74..c2d81496a6 100644 --- a/policyengine_uk/data/fiscal_partition.yaml +++ b/policyengine_uk/data/fiscal_partition.yaml @@ -56,10 +56,9 @@ # model_double_counts[]: known violations still in the model: a variable a # total lists although the head variable `contained_in` already adds it. # None since the #2159 fix gave corporate_sdlt its own head. -# uncovered_receipts[]: rows of Table A.5 that no head's obr_line names. -# With the heads' obr_line values they account for every tax row of the -# table. A row's note records any part of it that heads naming other -# rows measure. +# uncovered_receipts[]: rows of Table A.5 the model has no household +# measure for. With the heads' obr_line values they account for every +# tax row of the table. # overlap_guards[]: the places double counting could occur, and the # property the tests check for each. overlapping_base records a receipt # allocation between heads sharing an imputed base. The report also @@ -471,9 +470,10 @@ tax_heads: 2030-31 (expenditure Table 4.1), which appears to be the district rates; and "Northern Ireland domestic rates" under other taxes, £485.3m in 2024-25 (receipts Table 3.2), which appears to cover the regional - rate only. ONS records NI regional domestic rates (central government, - £498m in 2024-25) and district domestic rates (local government, with - council tax, £441m) separately. The reading rests on where each line + rate only. The Office for National Statistics (ONS) records NI + regional domestic rates (central government, £498m in 2024-25) and + district domestic rates (local government, with council tax, £441m) + separately. The reading rests on where each line sits, not on its size: £0.494bn is nearer ONS's regional row than its district row, and the two lines together (£0.979bn in 2024-25) exceed both LPS's figure and ONS's two rows (£0.939bn). The head keeps the @@ -481,15 +481,16 @@ tax_heads: rates. In the 2024-25 outturn that row (March 2026 Table A.5, £47.417bn) is £0.273bn below Table 4.1's total (£47.690bn), so whether it then includes NI domestic rates is not established; the two agree - in the forecast years. The regional part appears to sit in Other - taxes. On this reading the head's scope is the two lines together, not - either alone. obr_table_3_1 is null because Table 3.1's footnotes do - not place NI domestic rates and the head spans two Table A.5 rows. The + in the forecast years. If the regional and district reading holds, the + head's scope is the two lines together, not either alone. obr_table_3_1 is null because Table + 3.1's footnotes do not place NI domestic rates and the head appears to + span two Table A.5 rows. The comment on gov.economic_assumptions.yoy_growth.finance_ni.domestic_rates gives the evidence for the reading. data_note: >- On the certified dataset (policyengine-uk-data 1.58.1) the head totals - £0.52bn in 2024, the FRS 2024-25 year, against £0.89bn of LPS domestic + £0.52bn in 2024, the Family Resources Survey 2024-25 year, against + £0.89bn of LPS domestic rates paid in 2024-25. policyengine-uk-data issue 520 tracks the level and the data build's obr/domestic_rates target, which it reads from the Table 4.1 line alone. Measured 2026-10-25. @@ -836,7 +837,7 @@ overlap_guards: microdata (policyengine-uk-data issue 568). uncovered_receipts: - # Rows of Table A.5 that no head's obr_line names. + # Rows of Table A.5 with no household measure in the model. - {obr_line: Corporation tax} - {obr_line: Petroleum revenue tax} - {obr_line: VAT refunds, note: "A National Accounts adjustment, not a tax on households."} @@ -853,13 +854,7 @@ uncovered_receipts: - {obr_line: Emissions Trading Scheme} - {obr_line: Energy profits levy} - {obr_line: Electricity generator levy} - - obr_line: Other taxes - note: >- - Partly measured by heads that name other rows. Its "Northern Ireland - domestic rates" and "Northern Ireland business rates" lines (receipts - Table 3.2) appear to be the regional rate, which domestic_rates and - business_rates include together with the district rate (see those - heads). The rest of the row has no household measure. + - {obr_line: Other taxes} spending_heads: # Pensioners diff --git a/policyengine_uk/parameters/gov/economic_assumptions/yoy_growth.yaml b/policyengine_uk/parameters/gov/economic_assumptions/yoy_growth.yaml index c5c23ba3ac..4d068d8022 100644 --- a/policyengine_uk/parameters/gov/economic_assumptions/yoy_growth.yaml +++ b/policyengine_uk/parameters/gov/economic_assumptions/yoy_growth.yaml @@ -1520,7 +1520,8 @@ finance_ni: # 2019-20, the first year not published). It is a national average: it # does not reproduce any one council's bill or changes in reliefs. # - # Neither OBR March 2026 line covers the whole bill, and OBR labels + # Neither OBR March 2026 line is large enough to cover the whole bill + # (each is about half of LPS's £889.5m paid in 2024-25), and OBR labels # neither as regional or district; the attribution here is inferred. # Expenditure Table 4.1 holds "NI domestic rates" at £0.494bn in every # year to 2030-31 inside its council tax total, and ONS classes district