Functional Weave
Code in Rust

invest.capital-gains-tax@1.0.1

vectors.json

23,986 bytes · view raw

[
 {
  "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"
 }
]