Skip to content

Fix Scottish additional dwelling supplement rate - #2455

Merged
juaristi22 merged 2 commits into
mainfrom
fix-1795-scottish-ads-rate
Oct 19, 2026
Merged

juaristi22 merged 2 commits into
mainfrom
fix-1795-scottish-ads-rate

Conversation

@juaristi22

@juaristi22 juaristi22 commented Oct 16, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #1795.

The Scottish Land and Buildings Transaction Tax (LBTT) additional dwelling supplement still used 6%. This adds the statutory 2024-12-05: 0.08 rate, preserving earlier values and the existing purchase calculation.

SSI 2024/367, articles 1–3 introduces 8% for transactions with effective dates from 5 December 2024 and protects contracts entered into by 4 December 2024 at 6%. Revenue Scotland’s ADS guidance confirms both rules.

The model samples annual transaction-tax parameters on 30 April. Annual 2024 therefore retains 6%; annual 2025 onward uses 8%. The raw parameter test checks the actual December boundary. The model has no contract or completion-date input, so it cannot distinguish protected contracts or individual purchases around that boundary. The parameter README documents these limits. Its top heading remains Residential, with the ADS explanation nested beneath it, so the folder keeps its correct parameter label.

For an additional-property purchase of £300,000 in Scotland, the unchanged residential bands produce £4,600 of base LBTT. The updated annual 2025 calculation adds £24,000 ADS, giving £28,600 total; the previous result was £22,600. The annual 2024 control remains £22,600. Main-home and England controls remain unchanged.

Original implementation validation: 45 focused checks passed (9 new, 36 existing); the new checks first recorded five failures and four passing controls. After rebasing onto current main, this review fix passed all nine ADS checks (four Python and five YAML) and a direct Core parameter-label diagnostic. Formatting, Ruff, diff and the trusted fix-evidence gate passed. The nine checks use Core 3.32.27 and microdf 1.2.1; locked CI uses Core 3.33.2 and microdf 1.5.11. The full locked suite, documentation build and private population analysis were not run locally.

Reproducer: policyengine_uk/tests/test_lbtt_additional_dwelling_rate.py::test_raw_ads_rate_keeps_history_and_changes_on_5_december_2024

Draft #2315 explicitly defers this rate correction and contains a strict expected-failure case for #1795. When that branch integrates this fix, its owner will need to promote the case to the passing statutory set.

axiom: needed

Maintainer follow-up: verify RuleSpec/Axiom parity for the corrected ADS rate and statutory date. No encoder or parity verification has been run.

@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.

Fine once the README heading is restored.

@juaristi22, the rate and date are right. SSI 2024/367 art 2 raises the Sch 2A para 4(2) amount from 6% to 8%. The Order came into force on 5 December 2024, and art 3 protects contracts entered into on or before 4 December 2024.

  1. should, policyengine_uk/parameters/gov/revenue_scotland/lbtt/residential/README.md:1: this README covers the whole residential folder, which also holds rate.yaml and first_time_buyer_rate.yaml. policyengine-core reads the first line of a folder README as that node's label (parameter_node.py, around line 98). So this change relabels the whole gov.revenue_scotland.lbtt.residential node as "Additional Dwelling Supplement". Please keep "# Residential" and put the ADS text under a "## Additional Dwelling Supplement" subheading.
  2. nit, additional_residence_surcharge.yaml:13: the instrument's full title is "The Land and Buildings Transaction Tax (additional amount: transactions relating to second homes etc.) (Scotland) Amendment Order 2024".
  3. nit, the additional_dwelling_supplement.yaml header comments have lost their spaces ("arts1–3:8% from5December2024", "samples30April, so2024"). Worth tidying.

What I checked

  • Read the full diff, including test_lbtt_additional_dwelling_rate.py and the new YAML file.
  • Read SSI 2024/367 (arts 1 to 3) on legislation.gov.uk.
  • Worked £300,000 by hand: 105,000 x 2% + 50,000 x 5% = £4,600 base LBTT; ADS is £18,000 at 6% and £24,000 at 8%. The totals of £22,600 (2024) and £28,600 (2025) match.
  • Ran policyengine-core test .../additional_dwelling_supplement.yaml: 5 passed. pytest test_lbtt_additional_dwelling_rate.py: 4 passed. With the parameter reverted to main: 2 YAML cases and 3 pytest cases fail.
  • ruff check and ruff format --check on the new test file: clean.
  • Hosted CI on 6e6a743 is green.
  • Process: the changelog fragment is .fixed.md; the Reproducer and axiom lines are present; the Fix evidence check is green.
  • Not checked: the RuleSpec parity follow-up, and how #2315 will take up its expected-failure case.

🤖 Generated with Claude Code

@juaristi22
juaristi22 force-pushed the fix-1795-scottish-ads-rate branch from 6e6a743 to 927f4fe Compare October 18, 2026 16:28
@juaristi22

Copy link
Copy Markdown
Collaborator Author

Restored the Residential top heading and nested the existing ADS explanation beneath it. The Core parameter-label diagnostic now returns Residential, and all nine existing ADS checks pass (four Python and five YAML) after rebasing onto current main. Formatting, Ruff, diff and the trusted fix-evidence gate pass.

The rate, statutory-date and contract limitations, source links and test expectations are preserved. I kept the two optional citation-title and test-comment nits outside this heading fix. The draft #2315 landing step and Axiom parity follow-up remain open.

@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.

@juaristi22 round 2, at 927f4fed7. I looked at what changed since 6e6a743d5.

Verdict: the one should is fixed. Approving.

Round-1 points

  1. README label: fixed. residential/README.md starts with # Residential again, and the ADS text now sits under ## Additional Dwelling Supplement. I loaded the parameter tree, and gov.revenue_scotland.lbtt.residential is labelled "Residential". Apart from the rebase, that heading is the only change since round 1. I compared the PR's own diff at both heads.
  2. nit, instrument title: not changed. You said you'd leave it, and that's fine.
  3. nit, missing spaces in the YAML header comments: not changed. Also fine to leave.

New findings

None.

What I checked

  • Fresh worktree at 927f4fed7 with its own uv venv.
  • policyengine-core test .../additional_dwelling_supplement.yaml: 5 passed. pytest test_lbtt_additional_dwelling_rate.py: 4 passed.
  • Read additional_residence_surcharge off the loaded tree. It gives 6% through 2024 and 8% from 1 January 2025, because the annual conversion samples 30 April as the README says. So the 5 December date is stored but has no effect inside a year. That's the documented convention, not a new problem.
  • Overlaps: it merges cleanly with current main (8b12bce94), and with the open LBTT PRs #2315, #2329 and #2363 (all drafts). None of them touches the ADS parameter.
  • CI is green at this head.
  • Not checked: the RuleSpec parity follow-up.

🤖 Generated with Claude Code

@juaristi22
juaristi22 added this pull request to the merge queue Oct 19, 2026
Merged via the queue into main with commit f9940ce Oct 19, 2026
15 checks passed
@juaristi22
juaristi22 deleted the fix-1795-scottish-ads-rate branch October 19, 2026 19:15
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.

Scottish LBTT Additional Dwelling Supplement stale at 6% (should be 8% from 5 December 2024)

2 participants