Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/2318.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- Charge VAT at the standard rate on private school fees from 1 January 2025 (Finance Act 2025 ss.47 and 49), through the new `gov.hmrc.vat.private_school_fees_exempt` parameter. The contributed rate `gov.contrib.labour.private_school_vat` now raises the rate rather than adding to it, so reforms that set it to 20% score nothing from 2025. Household taxes include private school VAT as a change from baseline (`private_school_vat_change`), as they do VAT; government tax revenue includes the level.
97 changes: 81 additions & 16 deletions policyengine_uk/data/fiscal_partition.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,15 @@
# analytical decomposition already inside `head` through its inputs),
# composite (spans several heads), duplicate (same value as `head`),
# baseline_measure.
# model_double_counts[]: known violations still in the model (none).
# model_double_counts[]: heads whose formulas count the same receipt
# twice (none). Where two heads read separate inputs but their bases are
# not separated, the overlap, in the formulas or in the data, is
# recorded under its guard.
# overlap_guards[]: the places double counting could occur, and the
# property the tests check for each.
# property the tests check for each. kind: payer_split,
# geographic_exclusivity, level_and_change, shared_allocation_key,
# overlapping_base (the heads read separate inputs but their bases are
# not separated household by household), read_not_inclusion.
schema_version: 1

sources:
Expand Down Expand Up @@ -74,9 +80,9 @@ totals:
label: Taxes borne by the household
description: >-
Taxes subtracted from household net income. VAT and employer NI enter
only as reform-induced changes (vat_change and the employer NI response
incidence), because baseline VAT and employer NI are not deducted from
the incomes the model starts from.
only as reform-induced changes (vat_change, private_school_vat_change
and the employer NI response incidence), because baseline VAT and
employer NI are not deducted from the incomes the model starts from.
dropped_when:
gov.contrib.abolish_council_tax:
- council_tax
Expand Down Expand Up @@ -183,6 +189,13 @@ tax_heads:
payer: consumer incidence
totals: [gov_tax]
sign: nonnegative
data_note: >-
Negative for 76 households on policyengine-uk-data 1.58.0
(enhanced_frs_2024_25) in every year from 2025 to 2030, -£72m weighted
in 2026: full_rate_vat_consumption is negative there because the
dataset's consumption (44 households) or full_rate_vat_expenditure_rate
(32 households, as low as -1.02) is negative. policyengine-uk-data
issue 565. Measured 2026-10-11.
- id: vat_change
label: Change in VAT from its baseline
variable: vat_change
Expand All @@ -198,6 +211,11 @@ tax_heads:
- head: vat
route: vat_change adds vat and subtracts baseline_vat
why: a change measure built from the level; the two are never in the same total
# Standard-rated from 1 January 2025: Finance Act 2025 s.47 inserts VATA
# 1994 Sch 9 Part 3, taking private school education, vocational training
# and closely related board and lodging out of the Group 6 exemption, for
# supplies on or after that date (s.49). Before it the head is zero unless
# the contributed reform rate is set.
- id: private_school_vat
label: VAT on private school fees
variable: private_school_vat
Expand All @@ -206,12 +224,8 @@ tax_heads:
obr_table_3_1: Value added tax
report_group: vat
payer: household
totals: [gov_tax, household_tax]
totals: [gov_tax]
sign: nonnegative
zero_at_baseline: expected
zero_at_baseline_note: >-
gov.contrib.labour.private_school_vat is 0 at current law in this
model, so the head is reform-only here.
reads:
- head: income_tax
route: private_school_vat -> attends_private_school -> income_tax
Expand All @@ -222,6 +236,30 @@ tax_heads:
- head: council_tax
route: private_school_vat -> attends_private_school -> household_benefits -> council_tax_benefit -> council_tax
why: as above
- id: private_school_vat_change
label: Change in private school VAT from its baseline
variable: private_school_vat_change
entity: household
obr_line: Value added tax
obr_table_3_1: Value added tax
report_group: vat
payer: household
totals: [household_tax]
sign: any
zero_at_baseline: expected
reads:
- head: private_school_vat
route: private_school_vat_change adds private_school_vat and subtracts baseline_private_school_vat
why: a change measure built from the level; the two are never in the same total
- head: income_tax
route: private_school_vat_change -> private_school_vat -> attends_private_school -> income_tax
why: attendance is imputed from income; it decides who attends, not how much tax is counted
- head: nics_individual
route: private_school_vat_change -> private_school_vat -> attends_private_school -> (net income) -> national_insurance
why: as above
- head: council_tax
route: private_school_vat_change -> private_school_vat -> attends_private_school -> household_benefits -> council_tax_benefit -> council_tax
why: as above
- id: fuel_duty
label: Fuel duties
variable: fuel_duty
Expand Down Expand Up @@ -509,6 +547,7 @@ exclusions:
- {variable: student_loan_repayment, kind: component, head: student_loan_repayments}
# Consumption
- {variable: baseline_vat, kind: baseline_measure, head: vat_change, note: "Subtracted inside vat_change."}
- {variable: baseline_private_school_vat, kind: baseline_measure, head: private_school_vat_change, note: "Subtracted inside private_school_vat_change."}
- {variable: beer_duty, kind: component, head: alcohol_duty}
- {variable: cider_duty, kind: component, head: alcohol_duty}
- {variable: sparkling_cider_duty, kind: component, head: alcohol_duty}
Expand Down Expand Up @@ -554,18 +593,44 @@ overlap_guards:
property: >-
Each allocates a different receipt by shareholding; none reads another.
corporate_tax_incidence sums two of them and is excluded.
- id: private_school_vat_level_and_change
kind: level_and_change
heads: [private_school_vat, private_school_vat_change]
property: >-
Never in the same total: the level is in gov_tax and the change in
household_tax, as for vat and vat_change. private_school_vat_change
reads private_school_vat.
- id: private_school_vat_and_vat
kind: possible_base_overlap
kind: overlapping_base
heads: [vat, private_school_vat]
property: >-
vat applies to imputed consumption; if that consumption includes school
fees, turning on private_school_vat would tax them twice. The head is
zero at baseline, so baseline totals are unaffected; check the
consumption imputation before costing a reform that sets it.
The two heads read separate inputs and parameters (tested in
test_private_school_vat_properties.py), but their bases are not
separated household by household. vat applies one household full-rate
share (full_rate_vat_expenditure_rate) to all imputed consumption,
education included. On the microdata the share is trained on ETB VAT
paid in the financial year ending 2024, when private school fees were
exempt, and predicted from household composition and income only
(policyengine-uk-data datasets/imputations/vat.py): in aggregate it
prices the fees as exempt, and a fee-paying household's fees are
charged at its blended share. In a household calculation with the
default share of 0.5, education consumption entered as an input is
charged in vat as well as in private_school_vat, where attendance is
an input. private_school_vat charges the fees once, at the higher of
the statutory and contributed reform rates. On calibrated data the two
overlap in aggregate: policyengine-uk-data calibrates weighted vat to
the OBR VAT receipts line, which includes VAT on private school fees
from 2025-26 (costed at 1,505m pounds for 2025-26), so gov_tax counts
that VAT in both heads until the target nets it out
(policyengine-uk-data issue 567).
- id: eligibility_reads
kind: read_not_inclusion
heads: [tv_licence, private_school_vat]
heads: [tv_licence, private_school_vat, private_school_vat_change]
property: >-
These heads reach other heads of the same total only through
eligibility or imputation (see each head's reads). Raising the other
head by a small amount leaves them unchanged on the test population.
For the private school heads that check is vacuous: attendance is
imputed only on a dataset (on a situation it is zero or an input), so
a tax change moves them only through re-imputed attendance on the
microdata (policyengine-uk-data issue 568).
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
description: VAT rate applied to private schools.
description: Contributed reform rate of VAT on private school fees. The fees bear VAT at the higher of this rate and the statutory rate (the standard rate from 1 January 2025, when the exemption ended), so the reform can raise the rate but never charges VAT on the fees twice.
values:
2000-01-01: 0
metadata:
unit: /1
label: Private school VAT rate
period: year
label: Private school VAT rate (reform)
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
description: Education, vocational training and closely related board and lodging supplied by a private school are exempt from VAT if this is true. From 1 January 2025 they are not exempt, so the fees bear VAT at the standard rate.
values:
1973-04-01:
value: true
metadata:
reference:
- title: Finance Act 1972, Schedule 5, Group 6, item 1 (as enacted)
href: https://www.legislation.gov.uk/ukpga/1972/41/schedule/5/enacted
- title: Value Added Tax Act 1994, Schedule 9, Group 6, item 1 and note 1(a) (as enacted)
href: https://www.legislation.gov.uk/ukpga/1994/23/schedule/9/enacted
2025-01-01:
value: false
metadata:
reference:
- title: Finance Act 2025, section 47 (removal of exemption for private school fees; inserts Value Added Tax Act 1994, Schedule 9, Part 3)
href: https://www.legislation.gov.uk/ukpga/2025/8/section/47/enacted
- title: Finance Act 2025, section 49 (effect for supplies on or after 1 January 2025)
href: https://www.legislation.gov.uk/ukpga/2025/8/section/49/enacted
metadata:
unit: bool
period: year
label: Private school fees exempt from VAT
reference:
- title: Value Added Tax Act 1994, Schedule 9 (exemptions)
href: https://www.legislation.gov.uk/ukpga/1994/23/schedule/9

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
ni_employer: 0
non_primary_residence_wealth_tax: 0
private_school_vat: 0
private_school_vat_change: 0
student_loan_repayments: 0
tv_licence: 0
vat: 0
Expand Down
Loading