FAILURE MAP
← Case archive

FA-62611 / Tax bracket computation / Open access

First-time-buyer relief is granted on an additional dwelling · case 01

A buyer flagged as both first-time and additional-dwelling gets relief plus a surcharge on relief slices.

Verified by executionVariant 1 · 7 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

Relief eligibility does not exclude additional dwellings.

VERIFIED REPAIR

Deny first-time-buyer relief whenever the purchase is an additional dwelling.

Unsuccessful approach: Dropping the surcharge for first-time buyers instead of denying relief under-taxes the purchase.

Case contract

solve(price, ftb, additional, nonresident): stipulated property transfer tax in whole pounds. Normal slices: 0% to 250000, 5% to 925000, 10% to 1500000, 12% above. First-time-buyer slices (0% to 425000, 5% to 625000) apply only when ftb is true, the purchase is not an additional dwelling, and price <= 625000; otherwise normal slices. Surcharges add percentage points to every slice including 0% slices: +3 for an additional dwelling when price >= 40000, +2 for a non-resident buyer; they stack. Return the tax rounded down to whole pounds.

Why this case matters

Tax computations hinge on which slice, threshold, ordering and rounding rule applies at each step; a misplaced boundary silently misstates liabilities.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(price, ftb, additional, nonresident):
    normal = [(250000, 0), (925000, 5), (1500000, 10), (None, 12)]
    first = [(425000, 0), (625000, 5)]
    use_ftb = ftb and price <= 625000
    bands = first if use_ftb else normal
    sur = (3 if additional and price >= 40000 else 0) + (2 if nonresident else 0)
    tax, lower = 0, 0
    for upper, rate in bands:
        top = price if upper is None else min(price, upper)
        if top > lower: tax += (top - lower) * (rate + sur)
        if upper is None or price <= upper: break
        lower = upper
    return tax // 100
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[('regression ftb-with-additional 1', (400000, True, True, False), 19500),
  ('regression ftb-with-additional 2', (625000, True, True, False), 37500),
  ('partial repair guard 2', (625001, True, True, False), 37500),
  ('control: normal', (300000, False, False, False), 2500),
  ('control: first-time buyer', (500000, True, False, False), 3750),
  ('control: ftb at cap', (625000, True, False, False), 10000),
  ('control: ftb over cap', (625001, True, False, False), 18750)],
 [('regression ftb-with-additional 1', (349659, True, True, False), 15472),
  ('regression ftb-with-additional 2', (625000, True, True, True), 50000),
  ('partial repair guard 1', (919321, True, True, False), 61045),
  ('partial repair guard 2', (925000, True, True, False), 61500),
  ('control: ftb over cap', (625001, True, False, False), 18750),
  ('control: additional dwelling', (300000, False, True, False), 11500),
  ('control: additional nonresident', (300000, False, True, True), 17500),
  ('control: below surcharge floor', (39999, False, True, False), 0)],
 [('regression ftb-with-additional 1', (539991, True, True, False), 30699),
  ('regression ftb-with-additional 2', (488087, True, True, False), 26546),
  ('partial repair guard 1', (628677, True, True, True), 50367),
  ('partial repair guard 2', (250001, True, True, False), 7500),
  ('control: below surcharge floor', (39999, False, True, False), 0),
  ('control: nonresident cheap', (39999, False, False, True), 799),
  ('control: ftb additional', (400000, True, True, False), 19500),
  ('control: expensive', (2000000, False, False, False), 151250)],
 [('regression ftb-with-additional 1', (402343, True, True, False), 19687),
  ('regression ftb-with-additional 2', (523207, True, True, False), 29356),
  ('partial repair guard 1', (625000, True, True, False), 37500),
  ('partial repair guard 2', (40000, True, True, False), 1200),
  ('control: expensive', (2000000, False, False, False), 151250),
  ('control: odd pounds', (250013, False, False, False), 0), ('control: normal', (300000, False, False, False), 2500),
  ('control: first-time buyer', (500000, True, False, False), 3750)],
 [('regression ftb-with-additional 1', (459827, True, True, False), 24286),
  ('regression ftb-with-additional 2', (443484, True, True, True), 31848),
  ('partial repair guard 1', (625001, True, True, True), 50000),
  ('partial repair guard 2', (745541, True, True, True), 62054),
  ('control: first-time buyer', (500000, True, False, False), 3750),
  ('control: ftb at cap', (625000, True, False, False), 10000),
  ('control: ftb over cap', (625001, True, False, False), 18750),
  ('control: additional dwelling', (300000, False, True, False), 11500)]]
for label, args, expected in cases[N - 1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression ftb-with-additional 11200019500Failed
regression ftb-with-additional 22875037500Failed
partial repair guard 23750037500Passed
control: normal25002500Passed
control: first-time buyer37503750Passed
control: ftb at cap1000010000Passed
control: ftb over cap1875018750Passed

SHA-256 / 8eeebf60f8a90d83a1e57ffe1b03a5b3afabceb24b4ba78238d849a9425271de

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(price, ftb, additional, nonresident):
    normal = [(250000, 0), (925000, 5), (1500000, 10), (None, 12)]
    first = [(425000, 0), (625000, 5)]
    use_ftb = ftb and not additional and price <= 625000
    bands = first if use_ftb else normal
    sur = (3 if additional and not ftb and price >= 40000 else 0) + (2 if nonresident else 0)
    tax, lower = 0, 0
    for upper, rate in bands:
        top = price if upper is None else min(price, upper)
        if top > lower: tax += (top - lower) * (rate + sur)
        if upper is None or price <= upper: break
        lower = upper
    return tax // 100
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[('regression ftb-with-additional 1', (400000, True, True, False), 19500),
  ('regression ftb-with-additional 2', (625000, True, True, False), 37500),
  ('partial repair guard 2', (625001, True, True, False), 37500),
  ('control: normal', (300000, False, False, False), 2500),
  ('control: first-time buyer', (500000, True, False, False), 3750),
  ('control: ftb at cap', (625000, True, False, False), 10000),
  ('control: ftb over cap', (625001, True, False, False), 18750)],
 [('regression ftb-with-additional 1', (349659, True, True, False), 15472),
  ('regression ftb-with-additional 2', (625000, True, True, True), 50000),
  ('partial repair guard 1', (919321, True, True, False), 61045),
  ('partial repair guard 2', (925000, True, True, False), 61500),
  ('control: ftb over cap', (625001, True, False, False), 18750),
  ('control: additional dwelling', (300000, False, True, False), 11500),
  ('control: additional nonresident', (300000, False, True, True), 17500),
  ('control: below surcharge floor', (39999, False, True, False), 0)],
 [('regression ftb-with-additional 1', (539991, True, True, False), 30699),
  ('regression ftb-with-additional 2', (488087, True, True, False), 26546),
  ('partial repair guard 1', (628677, True, True, True), 50367),
  ('partial repair guard 2', (250001, True, True, False), 7500),
  ('control: below surcharge floor', (39999, False, True, False), 0),
  ('control: nonresident cheap', (39999, False, False, True), 799),
  ('control: ftb additional', (400000, True, True, False), 19500),
  ('control: expensive', (2000000, False, False, False), 151250)],
 [('regression ftb-with-additional 1', (402343, True, True, False), 19687),
  ('regression ftb-with-additional 2', (523207, True, True, False), 29356),
  ('partial repair guard 1', (625000, True, True, False), 37500),
  ('partial repair guard 2', (40000, True, True, False), 1200),
  ('control: expensive', (2000000, False, False, False), 151250),
  ('control: odd pounds', (250013, False, False, False), 0), ('control: normal', (300000, False, False, False), 2500),
  ('control: first-time buyer', (500000, True, False, False), 3750)],
 [('regression ftb-with-additional 1', (459827, True, True, False), 24286),
  ('regression ftb-with-additional 2', (443484, True, True, True), 31848),
  ('partial repair guard 1', (625001, True, True, True), 50000),
  ('partial repair guard 2', (745541, True, True, True), 62054),
  ('control: first-time buyer', (500000, True, False, False), 3750),
  ('control: ftb at cap', (625000, True, False, False), 10000),
  ('control: ftb over cap', (625001, True, False, False), 18750),
  ('control: additional dwelling', (300000, False, True, False), 11500)]]
for label, args, expected in cases[N - 1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression ftb-with-additional 1750019500Failed
regression ftb-with-additional 21875037500Failed
partial repair guard 21875037500Failed
control: normal25002500Passed
control: first-time buyer37503750Passed
control: ftb at cap1000010000Passed
control: ftb over cap1875018750Passed

SHA-256 / 4ea0bdf3f43833f03967d0fe3ed70a4cbd8b7df13ed227ca6a74606f26998eee

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(price, ftb, additional, nonresident):
    normal = [(250000, 0), (925000, 5), (1500000, 10), (None, 12)]
    first = [(425000, 0), (625000, 5)]
    use_ftb = ftb and not additional and price <= 625000
    bands = first if use_ftb else normal
    sur = (3 if additional and price >= 40000 else 0) + (2 if nonresident else 0)
    tax, lower = 0, 0
    for upper, rate in bands:
        top = price if upper is None else min(price, upper)
        if top > lower: tax += (top - lower) * (rate + sur)
        if upper is None or price <= upper: break
        lower = upper
    return tax // 100
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[('regression ftb-with-additional 1', (400000, True, True, False), 19500),
  ('regression ftb-with-additional 2', (625000, True, True, False), 37500),
  ('partial repair guard 2', (625001, True, True, False), 37500),
  ('control: normal', (300000, False, False, False), 2500),
  ('control: first-time buyer', (500000, True, False, False), 3750),
  ('control: ftb at cap', (625000, True, False, False), 10000),
  ('control: ftb over cap', (625001, True, False, False), 18750)],
 [('regression ftb-with-additional 1', (349659, True, True, False), 15472),
  ('regression ftb-with-additional 2', (625000, True, True, True), 50000),
  ('partial repair guard 1', (919321, True, True, False), 61045),
  ('partial repair guard 2', (925000, True, True, False), 61500),
  ('control: ftb over cap', (625001, True, False, False), 18750),
  ('control: additional dwelling', (300000, False, True, False), 11500),
  ('control: additional nonresident', (300000, False, True, True), 17500),
  ('control: below surcharge floor', (39999, False, True, False), 0)],
 [('regression ftb-with-additional 1', (539991, True, True, False), 30699),
  ('regression ftb-with-additional 2', (488087, True, True, False), 26546),
  ('partial repair guard 1', (628677, True, True, True), 50367),
  ('partial repair guard 2', (250001, True, True, False), 7500),
  ('control: below surcharge floor', (39999, False, True, False), 0),
  ('control: nonresident cheap', (39999, False, False, True), 799),
  ('control: ftb additional', (400000, True, True, False), 19500),
  ('control: expensive', (2000000, False, False, False), 151250)],
 [('regression ftb-with-additional 1', (402343, True, True, False), 19687),
  ('regression ftb-with-additional 2', (523207, True, True, False), 29356),
  ('partial repair guard 1', (625000, True, True, False), 37500),
  ('partial repair guard 2', (40000, True, True, False), 1200),
  ('control: expensive', (2000000, False, False, False), 151250),
  ('control: odd pounds', (250013, False, False, False), 0), ('control: normal', (300000, False, False, False), 2500),
  ('control: first-time buyer', (500000, True, False, False), 3750)],
 [('regression ftb-with-additional 1', (459827, True, True, False), 24286),
  ('regression ftb-with-additional 2', (443484, True, True, True), 31848),
  ('partial repair guard 1', (625001, True, True, True), 50000),
  ('partial repair guard 2', (745541, True, True, True), 62054),
  ('control: first-time buyer', (500000, True, False, False), 3750),
  ('control: ftb at cap', (625000, True, False, False), 10000),
  ('control: ftb over cap', (625001, True, False, False), 18750),
  ('control: additional dwelling', (300000, False, True, False), 11500)]]
for label, args, expected in cases[N - 1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression ftb-with-additional 11950019500Passed
regression ftb-with-additional 23750037500Passed
partial repair guard 23750037500Passed
control: normal25002500Passed
control: first-time buyer37503750Passed
control: ftb at cap1000010000Passed
control: ftb over cap1875018750Passed

SHA-256 / 883b2ebc60c8b8316af4a71939c0d9722b75ac7885f002c423ddf5266b3e5e72

Verification & scope

A deterministic, bounded teaching model with a stipulated toy contract; it makes no claim of conformance to any real regulation, standard, or institution's rules. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.

Observations recorded using Python 3.12.14 at 2026-09-29T14:47:06.236013+00:00.

Case digest / 1467d0b828f3c8f9ca0367da8dae79c3ab44f92441bd1db48c1e4d754ab37b87