Skip to content

Update Welsh residential Land Transaction Tax rates - #2456

Merged
juaristi22 merged 1 commit into
mainfrom
fix-1796-welsh-ltt-rates
Oct 19, 2026
Merged

juaristi22 merged 1 commit into
mainfrom
fix-1796-welsh-ltt-rates

Conversation

@juaristi22

Copy link
Copy Markdown
Collaborator

Fixes #1796.

Welsh residential Land Transaction Tax (LTT) still used the main rates from before October 2022 and higher rates from before December 2024. This updates the two dated scales and preserves earlier values, purchase inputs, the Wales liability gate and annual conversion.

WSI 2022/1027, regulations 1, 3 and 7 introduces the £225,000 main-rate nil band and 6% band to £400,000 from 10 October 2022. WSI 2024/1311, regulations 1, 3 and 6 increases each higher residential rate by one percentage point from 11 December 2024. The obsolete £250,000 main-rate bracket ends with dated null values; its history remains intact.

For ordinary purchases without a contract exception, the updated annual model gives:

Annual year and purchase Previous LTT Updated LTT
2023, £300,000 main home in Wales £4,950 £4,500
2023, £400,000 main home in Wales £9,950 £10,500
2025, £300,000 additional property in Wales £16,950 £19,950

The existing model samples transaction-tax parameters on 30 April. Annual 2022 retains the old main table; annual 2023 onward uses the new table. Annual 2024 retains the old higher table; annual 2025 onward uses the new table. Raw-parameter tests check the actual October and December commencement dates.

The instruments distinguish qualifying older contracts: the 2022 rules permit a beneficial old-rates election, while the 2024 rules protect qualifying contracts automatically, subject to their exclusions. The annual model has no contract-date, effective-date or election inputs, so it cannot select these exceptions or distinguish individual transactions around the change dates. The README documents these limits using the operative statutory rules.

Validation: 64 focused tests passed (27 new, 37 existing), 4.58s pytest / 8.896s invocation. On unchanged production, the new tests recorded 12 failures and 15 passing historical/control cases. Existing historical WRA fixtures remain unchanged. Formatting, Ruff and diff checks pass. Local Python 3.13.14 / Core 3.32.27 differs from locked Core 3.33.2; full locked CI, documentation build and private population analysis were not run locally.

Reproducer: policyengine_uk/tests/test_welsh_residential_ltt_rates.py::test_new_tables_apply_marginal_rates_across_all_bands

Draft #2315 explicitly defers these rate updates and records strict expected failures for #1796. Its owner will need to promote those cases when integrating this fix. The separate Scottish ADS fix in #2455 remains independent; no combined unpublished-tree validation is claimed.

axiom: needed

Maintainer follow-up: verify RuleSpec/Axiom parity for the dated main and higher residential schedules. No encoder or parity verification has been run.

@juaristi22 juaristi22 self-assigned this Oct 16, 2026

@vahid-ahmadi vahid-ahmadi left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks right, fine to approve.

@juaristi22, both tables match the instruments. WSI 2022/1027 reg 7 sets the main bands at 0% to £225,000, 6% to £400,000, then 7.5%, 10% and 12%, from 10 October 2022. WSI 2024/1311 reg 6 sets the higher bands at 5%, 8.5%, 10%, 12.5%, 15% and 17% on the unchanged thresholds, from 11 December 2024. Ending the £250,000 main bracket with dated nulls follows the pattern the file already uses for July 2020.

No findings. The README describes the transitional rules accurately: the 2022 rules work by an election that must not increase tax (regs 4 to 6), and the 2024 rules give automatic protection, subject to the reg 5 exclusions.

What I checked

  • Read both instruments, including the commencement dates and the transitional regulations, on legislation.gov.uk.
  • Read the full diff, including test_welsh_residential_ltt_rates.py.
  • Worked four cases by hand. The £2,000,000 cases in the test file: main table 10,500 + 26,250 + 75,000 + 60,000 = £171,750; higher table 9,000 + 5,950 + 15,000 + 43,750 + 112,500 + 85,000 = £271,200. A £300,000 main home in 2023: 75,000 x 6% = £4,500. A £400,000 main home: 175,000 x 6% = £10,500. A £300,000 additional property in 2025: 9,000 + 5,950 + 5,000 = £19,950. All match.
  • Read the processed scales for 2023 and 2025 and confirmed the expected brackets.
  • Ran policyengine-core test .../residential_rate_changes.yaml: 11 passed. pytest test_welsh_residential_ltt_rates.py: 16 passed. With both parameter files reverted: 6 YAML cases and 6 pytest cases fail. The whole tests/policy/baseline/gov/wra directory passes (18 cases).
  • ruff check and ruff format --check on the new test file: clean.
  • Hosted CI on 86c380b is green.
  • Process: the changelog fragment is .fixed.md; the Reproducer and axiom lines are present; the Fix evidence check is green.
  • Not checked: RuleSpec parity, and the non-residential LTT tables (out of scope).

🤖 Generated with Claude Code

@vahid-ahmadi vahid-ahmadi left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving, per my review above. The shoulds and nits can follow.

@juaristi22
juaristi22 added this pull request to the merge queue Oct 19, 2026
Merged via the queue into main with commit 39fbc3d Oct 19, 2026
14 checks passed
@juaristi22
juaristi22 deleted the fix-1796-welsh-ltt-rates branch October 19, 2026 20:38
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.

Welsh LTT residential rates stale (missing 10 October 2022 main and 11 December 2024 higher-rate changes)

2 participants