Skip to content

expected_sdlt adds the property sale rate; expected_lbtt and expected_ltt discount purchases twice #2246

Open

Description

@MaxGhenis

What happens

  • expected_sdlt returns stamp_duty_land_tax + property_sale_rate + corporate_sdlt. The sale rate (0.045) is added as pounds, so every household gets £0.045 of phantom SDLT.
  • expected_lbtt = property_sale_rate × land_and_buildings_transaction_tax and expected_ltt = property_sale_rate × land_transaction_tax multiply. But LBTT and LTT are already charged only on the dataset's purchase draw (main_residential_property_purchased = main_residence_value × property_purchased, a 3.85% seeded draw in policyengine-uk-data). The 4.5% sale rate therefore discounts them a second time.
  • On enhanced_frs_2024_25.h5@1.58.0, FY2025 on main: LBTT is £2.21bn, but expected_lbtt, which feeds gov_tax and household_tax, is £0.10bn. After Stop charging property stocks as purchases when a household buys its home #2241, LBTT on main-residence purchases is £0.37bn, and £0.02bn expected.

Fix

Decide one convention: either the purchase draw is the expectation, so drop property_sale_rate from all three, or the taxes are on full stocks times a sale rate. Do not combine both. property_sale_rate.yaml itself is a 2021 placeholder ("TODO add proper calculations"). Add a property test that expected and realised transaction taxes agree in total under the chosen convention.

Found while fixing #2238 (#2241).

Activity

  1. MaxGhenis commented on Oct 10, 2026

    @MaxGhenis
    CollaboratorAuthor

    The expected_sdlt part (adding property_sale_rate as pounds) is fixed in #2235, which also stops corporate SDLT being counted twice. What remains here is the LBTT/LTT double discount: expected_lbtt and expected_ltt still multiply transaction taxes that already sit on the purchase draw by the 4.5% sale rate. #2235's convention (the purchase draw is the expectation, no further scaling) is the natural one to extend to them.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions