Skip to content

Correct the capital gains rate effective date and annualise the split year#1806

Open
MaxGhenis wants to merge 1 commit into
mainfrom
cgt-rate-effective-dates
Open

Correct the capital gains rate effective date and annualise the split year#1806
MaxGhenis wants to merge 1 commit into
mainfrom
cgt-rate-effective-dates

Conversation

@MaxGhenis

Copy link
Copy Markdown
Collaborator

Why

Finance Act 2025 s.7 states that its amendments "have effect in relation to disposals made on or after 30 October 2024" (https://www.legislation.gov.uk/ukpga/2025/8/section/7). The CGT rate parameters cite that section but date the rise to 2025-04-06, so 2024-25 is modelled entirely at 10%/20% for a tax year in which 18%/24% applied to disposals over its final five months. Raised as B2 in #1775.

Why re-dating alone does not fix it

convert_to_fiscal_year_parameters samples every parameter at 30 April and writes that one value across the whole year. A value dated 2024-10-30 is sampled at 2024-04-30, so it never reaches the year it belongs to. Correcting the date on its own would leave the model unchanged while making the file look right.

The same mechanism silently drops other mid-year changes. National Insurance carries 2022-11-06: 0.12 for the Health and Social Care Levy repeal, and the model returns 0.1325 for every date in 2022, including 31 December.

What changed

  • Corrected the effective date to 2024-10-30 on the basic, higher and additional rates.
  • Added opt-in day-weighted annualisation, fiscal_year_blend: true, and applied it to those three rates. 2024-25 becomes 207 days at 10%/20% and 158 days at 18%/24%: 13.463% and 21.732%.
  • Values for all years are now computed before any are written, so rewriting one year cannot affect the reading of another.
  • Moved the rate mechanics tests to 2025-26, where one schedule applies to the whole year, and added cases 16 and 17 covering the blended year.

Why opt-in rather than model-wide

Day-weighting is the right annual figure for a rate applied to a flow spread across the year — it reproduces HMRC's own blended 2022-23 NI primary threshold, for instance. It is wrong for a tax charged on a transaction, which applies at the rate in force on the transaction date: averaging the stamp duty thresholds that changed on 8 July 2020 would tax every purchase at a rate no purchase faced.

93 parameters carry 205 values in the dropped window, including the private rent index, minimum wage, energy price cap and land transaction tax. Each needs its own decision, so this PR adds the mechanism and applies it only where the answer is clear. Blending an annual average is also an approximation for CGT, since disposals were not spread evenly across 2024-25 — forestalling ahead of the Budget pulled them forward — and it is closer to the law than either schedule applied to the whole year.

Effect

CGT on the enhanced FRS: 2024 £15.72bn → £17.34bn. 2023 and 2025 unchanged.

Tests

  • policyengine-core test policyengine_uk/tests/policy: 1112 passed, so nothing outside CGT moved.
  • pytest -m "not microsimulation": 126 passed, 15 skipped.
  • New cases in test_fiscal_year_parameters.py cover the blend, the statutory dates read before conversion, and that a parameter without the flag keeps a single sampled value.

Depends on #1804 for Lint, which is red on main for unrelated formatting drift.

🤖 Generated with Claude Code

… year

Finance Act 2025 s.7 has effect for disposals made on or after 30 October
2024, but the rate parameters cited that section while dating the rise to
6 April 2025, placing a change the legislation makes in 2024-25 into the
following year.

Re-dating alone changes nothing, because fiscal year conversion samples each
parameter at 30 April and writes that value across the year, so any change
taking effect later in the year is dropped. Add opt-in day-weighted
annualisation for parameters where a within-year average is the right annual
figure, and apply it to the capital gains rates: 2024-25 becomes 207 days at
the old rates and 158 days at the new.

Blending stays opt-in because it is wrong for much of the model. A tax charged
on a transaction applies at the rate in force on the date of the transaction,
so stamp duty thresholds that changed mid-year must not be averaged. 93
parameters carry values in the dropped window and each needs its own decision.

Rate mechanics move to 2025-26, where one schedule applies to the whole year,
with the blended year covered by its own cases.

CGT revenue on the enhanced FRS moves from £15.72bn to £17.34bn for 2024;
2023 and 2025 are unchanged, as is the rest of the YAML policy suite.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant