Functional Weave
Code in Rust

property.council-tax-band@1.0.2

vectors.json

6,704 bytes · view raw

[
 {
  "name": "England band A: six ninths of £2,000 is £1,333.33",
  "args": [
   {
    "minor": 200000,
    "currency": "GBP"
   },
   "A",
   "england",
   "2026-04-01"
  ],
  "expect": {
   "band": "A",
   "ratioNumerator": 6,
   "ratioDenominator": 9,
   "charge": {
    "minor": 133333,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "England band B: £1,555.56 (1555.555... rounds up)",
  "args": [
   {
    "minor": 200000,
    "currency": "GBP"
   },
   "B",
   "england",
   "2026-04-01"
  ],
  "expect": {
   "band": "B",
   "ratioNumerator": 7,
   "ratioDenominator": 9,
   "charge": {
    "minor": 155556,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "England band D is the Band D charge itself",
  "args": [
   {
    "minor": 200000,
    "currency": "GBP"
   },
   "D",
   "england",
   "2026-04-01"
  ],
  "expect": {
   "band": "D",
   "ratioNumerator": 9,
   "ratioDenominator": 9,
   "charge": {
    "minor": 200000,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "England band E: eleven ninths, £2,444.44",
  "args": [
   {
    "minor": 200000,
    "currency": "GBP"
   },
   "E",
   "england",
   "2026-04-01"
  ],
  "expect": {
   "band": "E",
   "ratioNumerator": 11,
   "ratioDenominator": 9,
   "charge": {
    "minor": 244444,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "England band H: twice Band D",
  "args": [
   {
    "minor": 200000,
    "currency": "GBP"
   },
   "H",
   "england",
   "2026-04-01"
  ],
  "expect": {
   "band": "H",
   "ratioNumerator": 18,
   "ratioDenominator": 9,
   "charge": {
    "minor": 400000,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "Wales band I: 21 ninths, £4,666.67",
  "args": [
   {
    "minor": 200000,
    "currency": "GBP"
   },
   "I",
   "wales",
   "2026-04-01"
  ],
  "expect": {
   "band": "I",
   "ratioNumerator": 21,
   "ratioDenominator": 9,
   "charge": {
    "minor": 466667,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "Wales had no band I before the 2005 revaluation",
  "args": [
   {
    "minor": 200000,
    "currency": "GBP"
   },
   "I",
   "wales",
   "2005-03-31"
  ],
  "expectError": "no council tax band I for wales on 2005-03-31"
 },
 {
  "name": "Wales band I on 1 April 2005",
  "args": [
   {
    "minor": 90000,
    "currency": "GBP"
   },
   "I",
   "wales",
   "2005-04-01"
  ],
  "expect": {
   "band": "I",
   "ratioNumerator": 21,
   "ratioDenominator": 9,
   "charge": {
    "minor": 210000,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "England has no band I",
  "args": [
   {
    "minor": 200000,
    "currency": "GBP"
   },
   "I",
   "england",
   "2026-04-01"
  ],
  "expectError": "no council tax band I for england"
 },
 {
  "name": "Scotland band E from April 2017: 473/360, £2,627.78",
  "args": [
   {
    "minor": 200000,
    "currency": "GBP"
   },
   "E",
   "scotland",
   "2026-04-01"
  ],
  "expect": {
   "band": "E",
   "ratioNumerator": 473,
   "ratioDenominator": 360,
   "charge": {
    "minor": 262778,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "Scotland band H from April 2017: 882/360 of £2,000 is £4,900",
  "args": [
   {
    "minor": 200000,
    "currency": "GBP"
   },
   "H",
   "scotland",
   "2017-04-01"
  ],
  "expect": {
   "band": "H",
   "ratioNumerator": 882,
   "ratioDenominator": 360,
   "charge": {
    "minor": 490000,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "Scotland band H the day before: 720/360, twice Band D",
  "args": [
   {
    "minor": 200000,
    "currency": "GBP"
   },
   "H",
   "scotland",
   "2017-03-31"
  ],
  "expect": {
   "band": "H",
   "ratioNumerator": 720,
   "ratioDenominator": 360,
   "charge": {
    "minor": 400000,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "Scotland band A unchanged by 2017: 240/360",
  "args": [
   {
    "minor": 150000,
    "currency": "GBP"
   },
   "A",
   "scotland",
   "2026-04-01"
  ],
  "expect": {
   "band": "A",
   "ratioNumerator": 240,
   "ratioDenominator": 360,
   "charge": {
    "minor": 100000,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "an exact half penny rounds up: Scottish band E of £1.80 is 236.5p, so £2.37",
  "args": [
   {
    "minor": 180,
    "currency": "GBP"
   },
   "E",
   "scotland",
   "2026-04-01"
  ],
  "expect": {
   "band": "E",
   "ratioNumerator": 473,
   "ratioDenominator": 360,
   "charge": {
    "minor": 237,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "band A of £1,789.47 is exactly £1,192.98, where 0.667 × Band D would give £1,193.58",
  "args": [
   {
    "minor": 178947,
    "currency": "GBP"
   },
   "A",
   "england",
   "2026-04-01"
  ],
  "expect": {
   "band": "A",
   "ratioNumerator": 6,
   "ratioDenominator": 9,
   "charge": {
    "minor": 119298,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "zero Band D",
  "args": [
   {
    "minor": 0,
    "currency": "GBP"
   },
   "C",
   "england",
   "2026-04-01"
  ],
  "expect": {
   "band": "C",
   "ratioNumerator": 8,
   "ratioDenominator": 9,
   "charge": {
    "minor": 0,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "a lower-case band is not a band",
  "args": [
   {
    "minor": 200000,
    "currency": "GBP"
   },
   "a",
   "england",
   "2026-04-01"
  ],
  "expectError": "no council tax band a for england"
 },
 {
  "name": "Northern Ireland is not a council tax nation",
  "args": [
   {
    "minor": 200000,
    "currency": "GBP"
   },
   "A",
   "northern-ireland",
   "2026-04-01"
  ],
  "expectError": "unknown nation"
 },
 {
  "name": "before council tax existed",
  "args": [
   {
    "minor": 200000,
    "currency": "GBP"
   },
   "A",
   "england",
   "1993-03-31"
  ],
  "expectError": "no council tax band A for england on 1993-03-31"
 },
 {
  "name": "a Band D in euros is refused",
  "args": [
   {
    "minor": 200000,
    "currency": "EUR"
   },
   "A",
   "england",
   "2026-04-01"
  ],
  "expectError": "bandDCharge must be in GBP"
 },
 {
  "name": "a negative Band D is refused",
  "args": [
   {
    "minor": -1,
    "currency": "GBP"
   },
   "A",
   "england",
   "2026-04-01"
  ],
  "expectError": "bandDCharge must be between 0 and"
 },
 {
  "name": "a malformed date is refused",
  "args": [
   {
    "minor": 200000,
    "currency": "GBP"
   },
   "A",
   "england",
   "2026-4-1"
  ],
  "expectError": "onDate must be an ISO date"
 },
 {
  "name": "a trailing newline is not part of an ISO date",
  "args": [
   {
    "minor": 200000,
    "currency": "GBP"
   },
   "A",
   "england",
   "2026-04-01\n"
  ],
  "expectError": "onDate must be an ISO date"
 },
 {
  "name": "Arabic-Indic digits are not an ISO date",
  "args": [
   {
    "minor": 200000,
    "currency": "GBP"
   },
   "A",
   "england",
   "٢٠٢٦-٠٤-٠١"
  ],
  "expectError": "onDate must be an ISO date"
 }
]