[ { "name": "2025/26: £20,000 gain, £30,000 taxable income: £7,700 of band at 18%, the rest at 24%", "args": [ "2025-10-01", [ { "date": "2025-06-01", "kind": "other", "gain": { "minor": 2000000, "currency": "GBP" } } ], { "minor": 3000000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" } ], "expect": { "taxYear": "2025/26", "gains": { "minor": 2000000, "currency": "GBP" }, "losses": { "minor": 0, "currency": "GBP" }, "lossesBroughtForwardUsed": { "minor": 0, "currency": "GBP" }, "annualExemptAmount": { "minor": 300000, "currency": "GBP" }, "annualExemptAmountUsed": { "minor": 300000, "currency": "GBP" }, "taxableGains": { "minor": 1700000, "currency": "GBP" }, "basicRateBandAvailable": { "minor": 770000, "currency": "GBP" }, "lines": [ { "rateBasisPoints": 1800, "gains": { "minor": 770000, "currency": "GBP" }, "tax": { "minor": 138600, "currency": "GBP" } }, { "rateBasisPoints": 2400, "gains": { "minor": 930000, "currency": "GBP" }, "tax": { "minor": 223200, "currency": "GBP" } } ], "tax": { "minor": 361800, "currency": "GBP" }, "lossesCarriedForward": { "minor": 0, "currency": "GBP" } } }, { "name": "2024/25 either side of 30 October: the exempt amount goes against the 24% gain, not the first one", "args": [ "2025-01-15", [ { "date": "2024-09-01", "kind": "other", "gain": { "minor": 1000000, "currency": "GBP" } }, { "date": "2024-11-15", "kind": "other", "gain": { "minor": 1000000, "currency": "GBP" } } ], { "minor": 5000000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" } ], "expect": { "taxYear": "2024/25", "gains": { "minor": 2000000, "currency": "GBP" }, "losses": { "minor": 0, "currency": "GBP" }, "lossesBroughtForwardUsed": { "minor": 0, "currency": "GBP" }, "annualExemptAmount": { "minor": 300000, "currency": "GBP" }, "annualExemptAmountUsed": { "minor": 300000, "currency": "GBP" }, "taxableGains": { "minor": 1700000, "currency": "GBP" }, "basicRateBandAvailable": { "minor": 0, "currency": "GBP" }, "lines": [ { "rateBasisPoints": 2000, "gains": { "minor": 1000000, "currency": "GBP" }, "tax": { "minor": 200000, "currency": "GBP" } }, { "rateBasisPoints": 2400, "gains": { "minor": 700000, "currency": "GBP" }, "tax": { "minor": 168000, "currency": "GBP" } } ], "tax": { "minor": 368000, "currency": "GBP" }, "lossesCarriedForward": { "minor": 0, "currency": "GBP" } } }, { "name": "2024/25 with band left: the band goes to the 10%/20% gain, where it saves most", "args": [ "2024-04-06", [ { "date": "2024-09-01", "kind": "other", "gain": { "minor": 1000000, "currency": "GBP" } }, { "date": "2024-11-15", "kind": "other", "gain": { "minor": 1000000, "currency": "GBP" } } ], { "minor": 2770000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" } ], "expect": { "taxYear": "2024/25", "gains": { "minor": 2000000, "currency": "GBP" }, "losses": { "minor": 0, "currency": "GBP" }, "lossesBroughtForwardUsed": { "minor": 0, "currency": "GBP" }, "annualExemptAmount": { "minor": 300000, "currency": "GBP" }, "annualExemptAmountUsed": { "minor": 300000, "currency": "GBP" }, "taxableGains": { "minor": 1700000, "currency": "GBP" }, "basicRateBandAvailable": { "minor": 1000000, "currency": "GBP" }, "lines": [ { "rateBasisPoints": 1000, "gains": { "minor": 1000000, "currency": "GBP" }, "tax": { "minor": 100000, "currency": "GBP" } }, { "rateBasisPoints": 2400, "gains": { "minor": 700000, "currency": "GBP" }, "tax": { "minor": 168000, "currency": "GBP" } } ], "tax": { "minor": 268000, "currency": "GBP" }, "lossesCarriedForward": { "minor": 0, "currency": "GBP" } } }, { "name": "2024/25 residential property is 24% from 6 April 2024, not 28%", "args": [ "2024-05-01", [ { "date": "2024-05-01", "kind": "residential", "gain": { "minor": 1000000, "currency": "GBP" } } ], { "minor": 5000000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" } ], "expect": { "taxYear": "2024/25", "gains": { "minor": 1000000, "currency": "GBP" }, "losses": { "minor": 0, "currency": "GBP" }, "lossesBroughtForwardUsed": { "minor": 0, "currency": "GBP" }, "annualExemptAmount": { "minor": 300000, "currency": "GBP" }, "annualExemptAmountUsed": { "minor": 300000, "currency": "GBP" }, "taxableGains": { "minor": 700000, "currency": "GBP" }, "basicRateBandAvailable": { "minor": 0, "currency": "GBP" }, "lines": [ { "rateBasisPoints": 2400, "gains": { "minor": 700000, "currency": "GBP" }, "tax": { "minor": 168000, "currency": "GBP" } } ], "tax": { "minor": 168000, "currency": "GBP" }, "lossesCarriedForward": { "minor": 0, "currency": "GBP" } } }, { "name": "5 April 2024 residential gain is still 28%, with the £6,000 exempt amount of 2023/24", "args": [ "2024-04-05", [ { "date": "2024-04-05", "kind": "residential", "gain": { "minor": 1000000, "currency": "GBP" } } ], { "minor": 5000000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" } ], "expect": { "taxYear": "2023/24", "gains": { "minor": 1000000, "currency": "GBP" }, "losses": { "minor": 0, "currency": "GBP" }, "lossesBroughtForwardUsed": { "minor": 0, "currency": "GBP" }, "annualExemptAmount": { "minor": 600000, "currency": "GBP" }, "annualExemptAmountUsed": { "minor": 600000, "currency": "GBP" }, "taxableGains": { "minor": 400000, "currency": "GBP" }, "basicRateBandAvailable": { "minor": 0, "currency": "GBP" }, "lines": [ { "rateBasisPoints": 2800, "gains": { "minor": 400000, "currency": "GBP" }, "tax": { "minor": 112000, "currency": "GBP" } } ], "tax": { "minor": 112000, "currency": "GBP" }, "lossesCarriedForward": { "minor": 0, "currency": "GBP" } } }, { "name": "2023/24: exempt amount against residential property (28%) before shares (20%)", "args": [ "2023-12-01", [ { "date": "2023-07-01", "kind": "other", "gain": { "minor": 1000000, "currency": "GBP" } }, { "date": "2023-08-01", "kind": "residential", "gain": { "minor": 2000000, "currency": "GBP" } } ], { "minor": 4000000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" } ], "expect": { "taxYear": "2023/24", "gains": { "minor": 3000000, "currency": "GBP" }, "losses": { "minor": 0, "currency": "GBP" }, "lossesBroughtForwardUsed": { "minor": 0, "currency": "GBP" }, "annualExemptAmount": { "minor": 600000, "currency": "GBP" }, "annualExemptAmountUsed": { "minor": 600000, "currency": "GBP" }, "taxableGains": { "minor": 2400000, "currency": "GBP" }, "basicRateBandAvailable": { "minor": 0, "currency": "GBP" }, "lines": [ { "rateBasisPoints": 2000, "gains": { "minor": 1000000, "currency": "GBP" }, "tax": { "minor": 200000, "currency": "GBP" } }, { "rateBasisPoints": 2800, "gains": { "minor": 1400000, "currency": "GBP" }, "tax": { "minor": 392000, "currency": "GBP" } } ], "tax": { "minor": 592000, "currency": "GBP" }, "lossesCarriedForward": { "minor": 0, "currency": "GBP" } } }, { "name": "2022/23: in-year losses are set off in full even though that wastes the exempt amount; losses brought forward are kept", "args": [ "2022-06-01", [ { "date": "2022-05-01", "kind": "other", "gain": { "minor": 1000000, "currency": "GBP" } }, { "date": "2022-06-01", "kind": "other", "gain": { "minor": -800000, "currency": "GBP" } } ], { "minor": 2000000, "currency": "GBP" }, { "minor": 500000, "currency": "GBP" } ], "expect": { "taxYear": "2022/23", "gains": { "minor": 1000000, "currency": "GBP" }, "losses": { "minor": 800000, "currency": "GBP" }, "lossesBroughtForwardUsed": { "minor": 0, "currency": "GBP" }, "annualExemptAmount": { "minor": 1230000, "currency": "GBP" }, "annualExemptAmountUsed": { "minor": 200000, "currency": "GBP" }, "taxableGains": { "minor": 0, "currency": "GBP" }, "basicRateBandAvailable": { "minor": 1770000, "currency": "GBP" }, "lines": [], "tax": { "minor": 0, "currency": "GBP" }, "lossesCarriedForward": { "minor": 500000, "currency": "GBP" } } }, { "name": "2023/24: losses brought forward only bring gains down to the exempt amount", "args": [ "2023-06-01", [ { "date": "2023-06-01", "kind": "other", "gain": { "minor": 2000000, "currency": "GBP" } } ], { "minor": 1000000, "currency": "GBP" }, { "minor": 3000000, "currency": "GBP" } ], "expect": { "taxYear": "2023/24", "gains": { "minor": 2000000, "currency": "GBP" }, "losses": { "minor": 0, "currency": "GBP" }, "lossesBroughtForwardUsed": { "minor": 1400000, "currency": "GBP" }, "annualExemptAmount": { "minor": 600000, "currency": "GBP" }, "annualExemptAmountUsed": { "minor": 600000, "currency": "GBP" }, "taxableGains": { "minor": 0, "currency": "GBP" }, "basicRateBandAvailable": { "minor": 2770000, "currency": "GBP" }, "lines": [], "tax": { "minor": 0, "currency": "GBP" }, "lossesCarriedForward": { "minor": 1600000, "currency": "GBP" } } }, { "name": "2025/26: losses bigger than gains are carried forward with the old ones", "args": [ "2025-06-01", [ { "date": "2025-06-01", "kind": "other", "gain": { "minor": 500000, "currency": "GBP" } }, { "date": "2025-07-01", "kind": "other", "gain": { "minor": -800000, "currency": "GBP" } } ], { "minor": 0, "currency": "GBP" }, { "minor": 100000, "currency": "GBP" } ], "expect": { "taxYear": "2025/26", "gains": { "minor": 500000, "currency": "GBP" }, "losses": { "minor": 800000, "currency": "GBP" }, "lossesBroughtForwardUsed": { "minor": 0, "currency": "GBP" }, "annualExemptAmount": { "minor": 300000, "currency": "GBP" }, "annualExemptAmountUsed": { "minor": 0, "currency": "GBP" }, "taxableGains": { "minor": 0, "currency": "GBP" }, "basicRateBandAvailable": { "minor": 3770000, "currency": "GBP" }, "lines": [], "tax": { "minor": 0, "currency": "GBP" }, "lossesCarriedForward": { "minor": 400000, "currency": "GBP" } } }, { "name": "2020/21: basic rate band £37,500 and exempt amount £12,300", "args": [ "2020-10-01", [ { "date": "2020-10-01", "kind": "residential", "gain": { "minor": 5000000, "currency": "GBP" } } ], { "minor": 2000000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" } ], "expect": { "taxYear": "2020/21", "gains": { "minor": 5000000, "currency": "GBP" }, "losses": { "minor": 0, "currency": "GBP" }, "lossesBroughtForwardUsed": { "minor": 0, "currency": "GBP" }, "annualExemptAmount": { "minor": 1230000, "currency": "GBP" }, "annualExemptAmountUsed": { "minor": 1230000, "currency": "GBP" }, "taxableGains": { "minor": 3770000, "currency": "GBP" }, "basicRateBandAvailable": { "minor": 1750000, "currency": "GBP" }, "lines": [ { "rateBasisPoints": 1800, "gains": { "minor": 1750000, "currency": "GBP" }, "tax": { "minor": 315000, "currency": "GBP" } }, { "rateBasisPoints": 2800, "gains": { "minor": 2020000, "currency": "GBP" }, "tax": { "minor": 565600, "currency": "GBP" } } ], "tax": { "minor": 880600, "currency": "GBP" }, "lossesCarriedForward": { "minor": 0, "currency": "GBP" } } }, { "name": "2021/22: basic rate band £37,700", "args": [ "2021-10-01", [ { "date": "2021-10-01", "kind": "residential", "gain": { "minor": 5000000, "currency": "GBP" } } ], { "minor": 2000000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" } ], "expect": { "taxYear": "2021/22", "gains": { "minor": 5000000, "currency": "GBP" }, "losses": { "minor": 0, "currency": "GBP" }, "lossesBroughtForwardUsed": { "minor": 0, "currency": "GBP" }, "annualExemptAmount": { "minor": 1230000, "currency": "GBP" }, "annualExemptAmountUsed": { "minor": 1230000, "currency": "GBP" }, "taxableGains": { "minor": 3770000, "currency": "GBP" }, "basicRateBandAvailable": { "minor": 1770000, "currency": "GBP" }, "lines": [ { "rateBasisPoints": 1800, "gains": { "minor": 1770000, "currency": "GBP" }, "tax": { "minor": 318600, "currency": "GBP" } }, { "rateBasisPoints": 2800, "gains": { "minor": 2000000, "currency": "GBP" }, "tax": { "minor": 560000, "currency": "GBP" } } ], "tax": { "minor": 878600, "currency": "GBP" }, "lossesCarriedForward": { "minor": 0, "currency": "GBP" } } }, { "name": "tax on each rate is rounded down to the penny", "args": [ "2026-06-01", [ { "date": "2026-06-01", "kind": "other", "gain": { "minor": 310055, "currency": "GBP" } } ], { "minor": 6000000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" } ], "expect": { "taxYear": "2026/27", "gains": { "minor": 310055, "currency": "GBP" }, "losses": { "minor": 0, "currency": "GBP" }, "lossesBroughtForwardUsed": { "minor": 0, "currency": "GBP" }, "annualExemptAmount": { "minor": 300000, "currency": "GBP" }, "annualExemptAmountUsed": { "minor": 300000, "currency": "GBP" }, "taxableGains": { "minor": 10055, "currency": "GBP" }, "basicRateBandAvailable": { "minor": 0, "currency": "GBP" }, "lines": [ { "rateBasisPoints": 2400, "gains": { "minor": 10055, "currency": "GBP" }, "tax": { "minor": 2413, "currency": "GBP" } } ], "tax": { "minor": 2413, "currency": "GBP" }, "lossesCarriedForward": { "minor": 0, "currency": "GBP" } } }, { "name": "income exactly filling the basic rate band leaves none for gains", "args": [ "2025-06-01", [ { "date": "2025-06-01", "kind": "other", "gain": { "minor": 400000, "currency": "GBP" } } ], { "minor": 3770000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" } ], "expect": { "taxYear": "2025/26", "gains": { "minor": 400000, "currency": "GBP" }, "losses": { "minor": 0, "currency": "GBP" }, "lossesBroughtForwardUsed": { "minor": 0, "currency": "GBP" }, "annualExemptAmount": { "minor": 300000, "currency": "GBP" }, "annualExemptAmountUsed": { "minor": 300000, "currency": "GBP" }, "taxableGains": { "minor": 100000, "currency": "GBP" }, "basicRateBandAvailable": { "minor": 0, "currency": "GBP" }, "lines": [ { "rateBasisPoints": 2400, "gains": { "minor": 100000, "currency": "GBP" }, "tax": { "minor": 24000, "currency": "GBP" } } ], "tax": { "minor": 24000, "currency": "GBP" }, "lossesCarriedForward": { "minor": 0, "currency": "GBP" } } }, { "name": "2025/26: residential and other gains share 18% and 24%, and each rate is one line", "args": [ "2025-06-01", [ { "date": "2025-06-01", "kind": "residential", "gain": { "minor": 1000000, "currency": "GBP" } }, { "date": "2025-09-01", "kind": "other", "gain": { "minor": 500000, "currency": "GBP" } } ], { "minor": 3500000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" } ], "expect": { "taxYear": "2025/26", "gains": { "minor": 1500000, "currency": "GBP" }, "losses": { "minor": 0, "currency": "GBP" }, "lossesBroughtForwardUsed": { "minor": 0, "currency": "GBP" }, "annualExemptAmount": { "minor": 300000, "currency": "GBP" }, "annualExemptAmountUsed": { "minor": 300000, "currency": "GBP" }, "taxableGains": { "minor": 1200000, "currency": "GBP" }, "basicRateBandAvailable": { "minor": 270000, "currency": "GBP" }, "lines": [ { "rateBasisPoints": 1800, "gains": { "minor": 270000, "currency": "GBP" }, "tax": { "minor": 48600, "currency": "GBP" } }, { "rateBasisPoints": 2400, "gains": { "minor": 930000, "currency": "GBP" }, "tax": { "minor": 223200, "currency": "GBP" } } ], "tax": { "minor": 271800, "currency": "GBP" }, "lossesCarriedForward": { "minor": 0, "currency": "GBP" } } }, { "name": "no disposals: nothing to pay, losses carried as they were", "args": [ "2025-06-01", [], { "minor": 1000000, "currency": "GBP" }, { "minor": 250000, "currency": "GBP" } ], "expect": { "taxYear": "2025/26", "gains": { "minor": 0, "currency": "GBP" }, "losses": { "minor": 0, "currency": "GBP" }, "lossesBroughtForwardUsed": { "minor": 0, "currency": "GBP" }, "annualExemptAmount": { "minor": 300000, "currency": "GBP" }, "annualExemptAmountUsed": { "minor": 0, "currency": "GBP" }, "taxableGains": { "minor": 0, "currency": "GBP" }, "basicRateBandAvailable": { "minor": 2770000, "currency": "GBP" }, "lines": [], "tax": { "minor": 0, "currency": "GBP" }, "lossesCarriedForward": { "minor": 250000, "currency": "GBP" } } }, { "name": "a loss on property and a gain on shares in 2024/25 after 30 October net off", "args": [ "2024-12-01", [ { "date": "2024-11-01", "kind": "other", "gain": { "minor": 1200000, "currency": "GBP" } }, { "date": "2024-12-01", "kind": "residential", "gain": { "minor": -400000, "currency": "GBP" } } ], { "minor": 8000000, "currency": "GBP" }, { "minor": 0, "currency": "GBP" } ], "expect": { "taxYear": "2024/25", "gains": { "minor": 1200000, "currency": "GBP" }, "losses": { "minor": 400000, "currency": "GBP" }, "lossesBroughtForwardUsed": { "minor": 0, "currency": "GBP" }, "annualExemptAmount": { "minor": 300000, "currency": "GBP" }, "annualExemptAmountUsed": { "minor": 300000, "currency": "GBP" }, "taxableGains": { "minor": 500000, "currency": "GBP" }, "basicRateBandAvailable": { "minor": 0, "currency": "GBP" }, "lines": [ { "rateBasisPoints": 2400, "gains": { "minor": 500000, "currency": "GBP" }, "tax": { "minor": 120000, "currency": "GBP" } } ], "tax": { "minor": 120000, "currency": "GBP" }, "lossesCarriedForward": { "minor": 0, "currency": "GBP" } } }, { "name": "a tax year before the rules held is refused", "args": [ "2019-07-01", [], { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" } ], "expectError": "no CGT rules for the 2019/20 tax year" }, { "name": "a tax year after the rules held is refused", "args": [ "2027-05-01", [], { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" } ], "expectError": "no CGT rules for the 2027/28 tax year" }, { "name": "a disposal outside the tax year is refused", "args": [ "2025-06-01", [ { "date": "2025-04-05", "kind": "other", "gain": { "minor": 10000, "currency": "GBP" } } ], { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" } ], "expectError": "the disposal on 2025-04-05 is outside the 2025/26 tax year" }, { "name": "amounts must be in sterling", "args": [ "2025-06-01", [ { "date": "2025-06-01", "kind": "other", "gain": { "minor": 100, "currency": "USD" } } ], { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" } ], "expectError": "gain must be in GBP" }, { "name": "negative taxable income is refused", "args": [ "2025-06-01", [], { "minor": -100, "currency": "GBP" }, { "minor": 0, "currency": "GBP" } ], "expectError": "taxableIncome must not be negative" }, { "name": "negative losses brought forward are refused", "args": [ "2025-06-01", [], { "minor": 0, "currency": "GBP" }, { "minor": -100, "currency": "GBP" } ], "expectError": "lossesBroughtForward must not be negative" }, { "name": "an unknown kind is refused", "args": [ "2025-06-01", [ { "date": "2025-06-01", "kind": "shares", "gain": { "minor": 10000, "currency": "GBP" } } ], { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" } ], "expectError": "kind must be residential or other" }, { "name": "fractional pence are refused", "args": [ "2025-06-01", [ { "date": "2025-06-01", "kind": "other", "gain": { "minor": 100.5, "currency": "GBP" } } ], { "minor": 0, "currency": "GBP" }, { "minor": 0, "currency": "GBP" } ], "expectError": "gain must be a whole number of pence" } ]