Functional Weave
Code in Python

payroll.statutory-maternity-pay@1.0.1

vectors.json

40,164 bytes · view raw

[
 {
  "name": "\u00a3600 a week: six weeks at \u00a3540, then 33 at the flat \u00a3194.32",
  "args": [
   {
    "minor": 60000,
    "currency": "GBP"
   },
   "2026-09-15",
   "2026-08-30"
  ],
  "expect": {
   "eligible": true,
   "qualifyingWeekStart": "2026-05-31",
   "lowerEarningsLimit": {
    "minor": 12900,
    "currency": "GBP"
   },
   "weeks": [
    {
     "week": 1,
     "start": "2026-08-30",
     "end": "2026-09-05",
     "amount": {
      "minor": 54000,
      "currency": "GBP"
     }
    },
    {
     "week": 2,
     "start": "2026-09-06",
     "end": "2026-09-12",
     "amount": {
      "minor": 54000,
      "currency": "GBP"
     }
    },
    {
     "week": 3,
     "start": "2026-09-13",
     "end": "2026-09-19",
     "amount": {
      "minor": 54000,
      "currency": "GBP"
     }
    },
    {
     "week": 4,
     "start": "2026-09-20",
     "end": "2026-09-26",
     "amount": {
      "minor": 54000,
      "currency": "GBP"
     }
    },
    {
     "week": 5,
     "start": "2026-09-27",
     "end": "2026-10-03",
     "amount": {
      "minor": 54000,
      "currency": "GBP"
     }
    },
    {
     "week": 6,
     "start": "2026-10-04",
     "end": "2026-10-10",
     "amount": {
      "minor": 54000,
      "currency": "GBP"
     }
    },
    {
     "week": 7,
     "start": "2026-10-11",
     "end": "2026-10-17",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 8,
     "start": "2026-10-18",
     "end": "2026-10-24",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 9,
     "start": "2026-10-25",
     "end": "2026-10-31",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 10,
     "start": "2026-11-01",
     "end": "2026-11-07",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 11,
     "start": "2026-11-08",
     "end": "2026-11-14",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 12,
     "start": "2026-11-15",
     "end": "2026-11-21",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 13,
     "start": "2026-11-22",
     "end": "2026-11-28",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 14,
     "start": "2026-11-29",
     "end": "2026-12-05",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 15,
     "start": "2026-12-06",
     "end": "2026-12-12",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 16,
     "start": "2026-12-13",
     "end": "2026-12-19",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 17,
     "start": "2026-12-20",
     "end": "2026-12-26",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 18,
     "start": "2026-12-27",
     "end": "2027-01-02",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 19,
     "start": "2027-01-03",
     "end": "2027-01-09",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 20,
     "start": "2027-01-10",
     "end": "2027-01-16",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 21,
     "start": "2027-01-17",
     "end": "2027-01-23",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 22,
     "start": "2027-01-24",
     "end": "2027-01-30",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 23,
     "start": "2027-01-31",
     "end": "2027-02-06",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 24,
     "start": "2027-02-07",
     "end": "2027-02-13",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 25,
     "start": "2027-02-14",
     "end": "2027-02-20",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 26,
     "start": "2027-02-21",
     "end": "2027-02-27",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 27,
     "start": "2027-02-28",
     "end": "2027-03-06",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 28,
     "start": "2027-03-07",
     "end": "2027-03-13",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 29,
     "start": "2027-03-14",
     "end": "2027-03-20",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 30,
     "start": "2027-03-21",
     "end": "2027-03-27",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 31,
     "start": "2027-03-28",
     "end": "2027-04-03",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 32,
     "start": "2027-04-04",
     "end": "2027-04-10",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 33,
     "start": "2027-04-11",
     "end": "2027-04-17",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 34,
     "start": "2027-04-18",
     "end": "2027-04-24",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 35,
     "start": "2027-04-25",
     "end": "2027-05-01",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 36,
     "start": "2027-05-02",
     "end": "2027-05-08",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 37,
     "start": "2027-05-09",
     "end": "2027-05-15",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 38,
     "start": "2027-05-16",
     "end": "2027-05-22",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 39,
     "start": "2027-05-23",
     "end": "2027-05-29",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    }
   ],
   "total": {
    "minor": 965256,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "leave across April 2026: the flat rate rises for weeks starting on or after 5 April",
  "args": [
   {
    "minor": 30000,
    "currency": "GBP"
   },
   "2026-01-20",
   "2026-01-05"
  ],
  "expect": {
   "eligible": true,
   "qualifyingWeekStart": "2025-10-05",
   "lowerEarningsLimit": {
    "minor": 12500,
    "currency": "GBP"
   },
   "weeks": [
    {
     "week": 1,
     "start": "2026-01-05",
     "end": "2026-01-11",
     "amount": {
      "minor": 27000,
      "currency": "GBP"
     }
    },
    {
     "week": 2,
     "start": "2026-01-12",
     "end": "2026-01-18",
     "amount": {
      "minor": 27000,
      "currency": "GBP"
     }
    },
    {
     "week": 3,
     "start": "2026-01-19",
     "end": "2026-01-25",
     "amount": {
      "minor": 27000,
      "currency": "GBP"
     }
    },
    {
     "week": 4,
     "start": "2026-01-26",
     "end": "2026-02-01",
     "amount": {
      "minor": 27000,
      "currency": "GBP"
     }
    },
    {
     "week": 5,
     "start": "2026-02-02",
     "end": "2026-02-08",
     "amount": {
      "minor": 27000,
      "currency": "GBP"
     }
    },
    {
     "week": 6,
     "start": "2026-02-09",
     "end": "2026-02-15",
     "amount": {
      "minor": 27000,
      "currency": "GBP"
     }
    },
    {
     "week": 7,
     "start": "2026-02-16",
     "end": "2026-02-22",
     "amount": {
      "minor": 18718,
      "currency": "GBP"
     }
    },
    {
     "week": 8,
     "start": "2026-02-23",
     "end": "2026-03-01",
     "amount": {
      "minor": 18718,
      "currency": "GBP"
     }
    },
    {
     "week": 9,
     "start": "2026-03-02",
     "end": "2026-03-08",
     "amount": {
      "minor": 18718,
      "currency": "GBP"
     }
    },
    {
     "week": 10,
     "start": "2026-03-09",
     "end": "2026-03-15",
     "amount": {
      "minor": 18718,
      "currency": "GBP"
     }
    },
    {
     "week": 11,
     "start": "2026-03-16",
     "end": "2026-03-22",
     "amount": {
      "minor": 18718,
      "currency": "GBP"
     }
    },
    {
     "week": 12,
     "start": "2026-03-23",
     "end": "2026-03-29",
     "amount": {
      "minor": 18718,
      "currency": "GBP"
     }
    },
    {
     "week": 13,
     "start": "2026-03-30",
     "end": "2026-04-05",
     "amount": {
      "minor": 18718,
      "currency": "GBP"
     }
    },
    {
     "week": 14,
     "start": "2026-04-06",
     "end": "2026-04-12",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 15,
     "start": "2026-04-13",
     "end": "2026-04-19",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 16,
     "start": "2026-04-20",
     "end": "2026-04-26",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 17,
     "start": "2026-04-27",
     "end": "2026-05-03",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 18,
     "start": "2026-05-04",
     "end": "2026-05-10",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 19,
     "start": "2026-05-11",
     "end": "2026-05-17",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 20,
     "start": "2026-05-18",
     "end": "2026-05-24",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 21,
     "start": "2026-05-25",
     "end": "2026-05-31",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 22,
     "start": "2026-06-01",
     "end": "2026-06-07",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 23,
     "start": "2026-06-08",
     "end": "2026-06-14",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 24,
     "start": "2026-06-15",
     "end": "2026-06-21",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 25,
     "start": "2026-06-22",
     "end": "2026-06-28",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 26,
     "start": "2026-06-29",
     "end": "2026-07-05",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 27,
     "start": "2026-07-06",
     "end": "2026-07-12",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 28,
     "start": "2026-07-13",
     "end": "2026-07-19",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 29,
     "start": "2026-07-20",
     "end": "2026-07-26",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 30,
     "start": "2026-07-27",
     "end": "2026-08-02",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 31,
     "start": "2026-08-03",
     "end": "2026-08-09",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 32,
     "start": "2026-08-10",
     "end": "2026-08-16",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 33,
     "start": "2026-08-17",
     "end": "2026-08-23",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 34,
     "start": "2026-08-24",
     "end": "2026-08-30",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 35,
     "start": "2026-08-31",
     "end": "2026-09-06",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 36,
     "start": "2026-09-07",
     "end": "2026-09-13",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 37,
     "start": "2026-09-14",
     "end": "2026-09-20",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 38,
     "start": "2026-09-21",
     "end": "2026-09-27",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    },
    {
     "week": 39,
     "start": "2026-09-28",
     "end": "2026-10-04",
     "amount": {
      "minor": 19432,
      "currency": "GBP"
     }
    }
   ],
   "total": {
    "minor": 798258,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "earnings under the flat rate: 90% for all 39 weeks",
  "args": [
   {
    "minor": 15000,
    "currency": "GBP"
   },
   "2025-11-12",
   "2025-10-29"
  ],
  "expect": {
   "eligible": true,
   "qualifyingWeekStart": "2025-07-27",
   "lowerEarningsLimit": {
    "minor": 12500,
    "currency": "GBP"
   },
   "weeks": [
    {
     "week": 1,
     "start": "2025-10-29",
     "end": "2025-11-04",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 2,
     "start": "2025-11-05",
     "end": "2025-11-11",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 3,
     "start": "2025-11-12",
     "end": "2025-11-18",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 4,
     "start": "2025-11-19",
     "end": "2025-11-25",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 5,
     "start": "2025-11-26",
     "end": "2025-12-02",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 6,
     "start": "2025-12-03",
     "end": "2025-12-09",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 7,
     "start": "2025-12-10",
     "end": "2025-12-16",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 8,
     "start": "2025-12-17",
     "end": "2025-12-23",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 9,
     "start": "2025-12-24",
     "end": "2025-12-30",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 10,
     "start": "2025-12-31",
     "end": "2026-01-06",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 11,
     "start": "2026-01-07",
     "end": "2026-01-13",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 12,
     "start": "2026-01-14",
     "end": "2026-01-20",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 13,
     "start": "2026-01-21",
     "end": "2026-01-27",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 14,
     "start": "2026-01-28",
     "end": "2026-02-03",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 15,
     "start": "2026-02-04",
     "end": "2026-02-10",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 16,
     "start": "2026-02-11",
     "end": "2026-02-17",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 17,
     "start": "2026-02-18",
     "end": "2026-02-24",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 18,
     "start": "2026-02-25",
     "end": "2026-03-03",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 19,
     "start": "2026-03-04",
     "end": "2026-03-10",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 20,
     "start": "2026-03-11",
     "end": "2026-03-17",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 21,
     "start": "2026-03-18",
     "end": "2026-03-24",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 22,
     "start": "2026-03-25",
     "end": "2026-03-31",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 23,
     "start": "2026-04-01",
     "end": "2026-04-07",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 24,
     "start": "2026-04-08",
     "end": "2026-04-14",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 25,
     "start": "2026-04-15",
     "end": "2026-04-21",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 26,
     "start": "2026-04-22",
     "end": "2026-04-28",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 27,
     "start": "2026-04-29",
     "end": "2026-05-05",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 28,
     "start": "2026-05-06",
     "end": "2026-05-12",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 29,
     "start": "2026-05-13",
     "end": "2026-05-19",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 30,
     "start": "2026-05-20",
     "end": "2026-05-26",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 31,
     "start": "2026-05-27",
     "end": "2026-06-02",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 32,
     "start": "2026-06-03",
     "end": "2026-06-09",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 33,
     "start": "2026-06-10",
     "end": "2026-06-16",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 34,
     "start": "2026-06-17",
     "end": "2026-06-23",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 35,
     "start": "2026-06-24",
     "end": "2026-06-30",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 36,
     "start": "2026-07-01",
     "end": "2026-07-07",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 37,
     "start": "2026-07-08",
     "end": "2026-07-14",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 38,
     "start": "2026-07-15",
     "end": "2026-07-21",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    },
    {
     "week": 39,
     "start": "2026-07-22",
     "end": "2026-07-28",
     "amount": {
      "minor": 13500,
      "currency": "GBP"
     }
    }
   ],
   "total": {
    "minor": 526500,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "90% of \u00a3123.45 is \u00a3111.105, rounded up to \u00a3111.11",
  "args": [
   {
    "minor": 12345,
    "currency": "GBP"
   },
   "2023-12-01",
   "2023-11-20"
  ],
  "expect": {
   "eligible": true,
   "qualifyingWeekStart": "2023-08-13",
   "lowerEarningsLimit": {
    "minor": 12300,
    "currency": "GBP"
   },
   "weeks": [
    {
     "week": 1,
     "start": "2023-11-20",
     "end": "2023-11-26",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 2,
     "start": "2023-11-27",
     "end": "2023-12-03",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 3,
     "start": "2023-12-04",
     "end": "2023-12-10",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 4,
     "start": "2023-12-11",
     "end": "2023-12-17",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 5,
     "start": "2023-12-18",
     "end": "2023-12-24",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 6,
     "start": "2023-12-25",
     "end": "2023-12-31",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 7,
     "start": "2024-01-01",
     "end": "2024-01-07",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 8,
     "start": "2024-01-08",
     "end": "2024-01-14",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 9,
     "start": "2024-01-15",
     "end": "2024-01-21",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 10,
     "start": "2024-01-22",
     "end": "2024-01-28",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 11,
     "start": "2024-01-29",
     "end": "2024-02-04",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 12,
     "start": "2024-02-05",
     "end": "2024-02-11",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 13,
     "start": "2024-02-12",
     "end": "2024-02-18",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 14,
     "start": "2024-02-19",
     "end": "2024-02-25",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 15,
     "start": "2024-02-26",
     "end": "2024-03-03",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 16,
     "start": "2024-03-04",
     "end": "2024-03-10",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 17,
     "start": "2024-03-11",
     "end": "2024-03-17",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 18,
     "start": "2024-03-18",
     "end": "2024-03-24",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 19,
     "start": "2024-03-25",
     "end": "2024-03-31",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 20,
     "start": "2024-04-01",
     "end": "2024-04-07",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 21,
     "start": "2024-04-08",
     "end": "2024-04-14",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 22,
     "start": "2024-04-15",
     "end": "2024-04-21",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 23,
     "start": "2024-04-22",
     "end": "2024-04-28",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 24,
     "start": "2024-04-29",
     "end": "2024-05-05",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 25,
     "start": "2024-05-06",
     "end": "2024-05-12",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 26,
     "start": "2024-05-13",
     "end": "2024-05-19",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 27,
     "start": "2024-05-20",
     "end": "2024-05-26",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 28,
     "start": "2024-05-27",
     "end": "2024-06-02",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 29,
     "start": "2024-06-03",
     "end": "2024-06-09",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 30,
     "start": "2024-06-10",
     "end": "2024-06-16",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 31,
     "start": "2024-06-17",
     "end": "2024-06-23",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 32,
     "start": "2024-06-24",
     "end": "2024-06-30",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 33,
     "start": "2024-07-01",
     "end": "2024-07-07",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 34,
     "start": "2024-07-08",
     "end": "2024-07-14",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 35,
     "start": "2024-07-15",
     "end": "2024-07-21",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 36,
     "start": "2024-07-22",
     "end": "2024-07-28",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 37,
     "start": "2024-07-29",
     "end": "2024-08-04",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 38,
     "start": "2024-08-05",
     "end": "2024-08-11",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    },
    {
     "week": 39,
     "start": "2024-08-12",
     "end": "2024-08-18",
     "amount": {
      "minor": 11111,
      "currency": "GBP"
     }
    }
   ],
   "total": {
    "minor": 433329,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "earnings a penny under the LEL: no SMP",
  "args": [
   {
    "minor": 12499,
    "currency": "GBP"
   },
   "2025-11-12",
   "2025-10-29"
  ],
  "expect": {
   "eligible": false,
   "qualifyingWeekStart": "2025-07-27",
   "lowerEarningsLimit": {
    "minor": 12500,
    "currency": "GBP"
   },
   "weeks": [],
   "total": {
    "minor": 0,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "earnings exactly at the LEL qualify",
  "args": [
   {
    "minor": 12500,
    "currency": "GBP"
   },
   "2025-11-12",
   "2025-10-29"
  ],
  "expect": {
   "eligible": true,
   "qualifyingWeekStart": "2025-07-27",
   "lowerEarningsLimit": {
    "minor": 12500,
    "currency": "GBP"
   },
   "weeks": [
    {
     "week": 1,
     "start": "2025-10-29",
     "end": "2025-11-04",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 2,
     "start": "2025-11-05",
     "end": "2025-11-11",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 3,
     "start": "2025-11-12",
     "end": "2025-11-18",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 4,
     "start": "2025-11-19",
     "end": "2025-11-25",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 5,
     "start": "2025-11-26",
     "end": "2025-12-02",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 6,
     "start": "2025-12-03",
     "end": "2025-12-09",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 7,
     "start": "2025-12-10",
     "end": "2025-12-16",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 8,
     "start": "2025-12-17",
     "end": "2025-12-23",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 9,
     "start": "2025-12-24",
     "end": "2025-12-30",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 10,
     "start": "2025-12-31",
     "end": "2026-01-06",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 11,
     "start": "2026-01-07",
     "end": "2026-01-13",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 12,
     "start": "2026-01-14",
     "end": "2026-01-20",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 13,
     "start": "2026-01-21",
     "end": "2026-01-27",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 14,
     "start": "2026-01-28",
     "end": "2026-02-03",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 15,
     "start": "2026-02-04",
     "end": "2026-02-10",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 16,
     "start": "2026-02-11",
     "end": "2026-02-17",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 17,
     "start": "2026-02-18",
     "end": "2026-02-24",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 18,
     "start": "2026-02-25",
     "end": "2026-03-03",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 19,
     "start": "2026-03-04",
     "end": "2026-03-10",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 20,
     "start": "2026-03-11",
     "end": "2026-03-17",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 21,
     "start": "2026-03-18",
     "end": "2026-03-24",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 22,
     "start": "2026-03-25",
     "end": "2026-03-31",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 23,
     "start": "2026-04-01",
     "end": "2026-04-07",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 24,
     "start": "2026-04-08",
     "end": "2026-04-14",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 25,
     "start": "2026-04-15",
     "end": "2026-04-21",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 26,
     "start": "2026-04-22",
     "end": "2026-04-28",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 27,
     "start": "2026-04-29",
     "end": "2026-05-05",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 28,
     "start": "2026-05-06",
     "end": "2026-05-12",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 29,
     "start": "2026-05-13",
     "end": "2026-05-19",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 30,
     "start": "2026-05-20",
     "end": "2026-05-26",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 31,
     "start": "2026-05-27",
     "end": "2026-06-02",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 32,
     "start": "2026-06-03",
     "end": "2026-06-09",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 33,
     "start": "2026-06-10",
     "end": "2026-06-16",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 34,
     "start": "2026-06-17",
     "end": "2026-06-23",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 35,
     "start": "2026-06-24",
     "end": "2026-06-30",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 36,
     "start": "2026-07-01",
     "end": "2026-07-07",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 37,
     "start": "2026-07-08",
     "end": "2026-07-14",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 38,
     "start": "2026-07-15",
     "end": "2026-07-21",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    },
    {
     "week": 39,
     "start": "2026-07-22",
     "end": "2026-07-28",
     "amount": {
      "minor": 11250,
      "currency": "GBP"
     }
    }
   ],
   "total": {
    "minor": 438750,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "a qualifying week ending after 6 April uses the new, higher LEL",
  "args": [
   {
    "minor": 12600,
    "currency": "GBP"
   },
   "2026-07-19",
   "2026-07-05"
  ],
  "expect": {
   "eligible": false,
   "qualifyingWeekStart": "2026-04-05",
   "lowerEarningsLimit": {
    "minor": 12900,
    "currency": "GBP"
   },
   "weeks": [],
   "total": {
    "minor": 0,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "a due date on a Saturday belongs to the week that began the Sunday before",
  "args": [
   {
    "minor": 12600,
    "currency": "GBP"
   },
   "2026-07-18",
   "2026-07-05"
  ],
  "expect": {
   "eligible": true,
   "qualifyingWeekStart": "2026-03-29",
   "lowerEarningsLimit": {
    "minor": 12500,
    "currency": "GBP"
   },
   "weeks": [
    {
     "week": 1,
     "start": "2026-07-05",
     "end": "2026-07-11",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 2,
     "start": "2026-07-12",
     "end": "2026-07-18",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 3,
     "start": "2026-07-19",
     "end": "2026-07-25",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 4,
     "start": "2026-07-26",
     "end": "2026-08-01",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 5,
     "start": "2026-08-02",
     "end": "2026-08-08",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 6,
     "start": "2026-08-09",
     "end": "2026-08-15",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 7,
     "start": "2026-08-16",
     "end": "2026-08-22",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 8,
     "start": "2026-08-23",
     "end": "2026-08-29",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 9,
     "start": "2026-08-30",
     "end": "2026-09-05",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 10,
     "start": "2026-09-06",
     "end": "2026-09-12",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 11,
     "start": "2026-09-13",
     "end": "2026-09-19",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 12,
     "start": "2026-09-20",
     "end": "2026-09-26",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 13,
     "start": "2026-09-27",
     "end": "2026-10-03",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 14,
     "start": "2026-10-04",
     "end": "2026-10-10",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 15,
     "start": "2026-10-11",
     "end": "2026-10-17",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 16,
     "start": "2026-10-18",
     "end": "2026-10-24",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 17,
     "start": "2026-10-25",
     "end": "2026-10-31",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 18,
     "start": "2026-11-01",
     "end": "2026-11-07",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 19,
     "start": "2026-11-08",
     "end": "2026-11-14",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 20,
     "start": "2026-11-15",
     "end": "2026-11-21",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 21,
     "start": "2026-11-22",
     "end": "2026-11-28",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 22,
     "start": "2026-11-29",
     "end": "2026-12-05",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 23,
     "start": "2026-12-06",
     "end": "2026-12-12",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 24,
     "start": "2026-12-13",
     "end": "2026-12-19",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 25,
     "start": "2026-12-20",
     "end": "2026-12-26",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 26,
     "start": "2026-12-27",
     "end": "2027-01-02",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 27,
     "start": "2027-01-03",
     "end": "2027-01-09",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 28,
     "start": "2027-01-10",
     "end": "2027-01-16",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 29,
     "start": "2027-01-17",
     "end": "2027-01-23",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 30,
     "start": "2027-01-24",
     "end": "2027-01-30",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 31,
     "start": "2027-01-31",
     "end": "2027-02-06",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 32,
     "start": "2027-02-07",
     "end": "2027-02-13",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 33,
     "start": "2027-02-14",
     "end": "2027-02-20",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 34,
     "start": "2027-02-21",
     "end": "2027-02-27",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 35,
     "start": "2027-02-28",
     "end": "2027-03-06",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 36,
     "start": "2027-03-07",
     "end": "2027-03-13",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 37,
     "start": "2027-03-14",
     "end": "2027-03-20",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 38,
     "start": "2027-03-21",
     "end": "2027-03-27",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    },
    {
     "week": 39,
     "start": "2027-03-28",
     "end": "2027-04-03",
     "amount": {
      "minor": 11340,
      "currency": "GBP"
     }
    }
   ],
   "total": {
    "minor": 442260,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "negative earnings are an error",
  "args": [
   {
    "minor": -1,
    "currency": "GBP"
   },
   "2026-09-15",
   "2026-08-30"
  ],
  "expectError": "must not be negative"
 },
 {
  "name": "a malformed due date is an error",
  "args": [
   {
    "minor": 60000,
    "currency": "GBP"
   },
   "15/09/2026",
   "2026-08-30"
  ],
  "expectError": "is not an ISO date"
 },
 {
  "name": "a qualifying week before the carried rules is an error",
  "args": [
   {
    "minor": 60000,
    "currency": "GBP"
   },
   "2022-09-15",
   "2022-08-30"
  ],
  "expectError": "no lower earnings limit for 2022-06-04"
 },
 {
  "name": "pay weeks before the carried SMP rates are an error",
  "args": [
   {
    "minor": 60000,
    "currency": "GBP"
   },
   "2023-07-31",
   "2023-01-02"
  ],
  "expectError": "no SMP rate for 2023-02-13"
 }
]