[
{
"name": "two working weeks off in 2025-26: three waiting days, then the daily rate",
"args": [
[
{
"start": "2025-06-02",
"end": "2025-06-13"
}
],
[
1,
2,
3,
4,
5
],
{
"minor": 50000,
"currency": "GBP"
}
],
"expect": {
"total": {
"minor": 16625,
"currency": "GBP"
},
"paidDays": 7,
"waitingDays": 3,
"weeks": [
{
"weekStart": "2025-06-01",
"paidDays": 2,
"waitingDays": 3,
"amount": {
"minor": 4750,
"currency": "GBP"
}
},
{
"weekStart": "2025-06-08",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 11875,
"currency": "GBP"
}
}
],
"entitlementExhausted": false
}
},
{
"name": "a three-day spell before April 2026 is not a period of incapacity and pays nothing",
"args": [
[
{
"start": "2025-06-02",
"end": "2025-06-04"
}
],
[
1,
2,
3,
4,
5
],
{
"minor": 50000,
"currency": "GBP"
}
],
"expect": {
"total": {
"minor": 0,
"currency": "GBP"
},
"paidDays": 0,
"waitingDays": 0,
"weeks": [],
"entitlementExhausted": false
}
},
{
"name": "the same three-day spell after the 2026 reforms is paid from day one",
"args": [
[
{
"start": "2026-06-01",
"end": "2026-06-03"
}
],
[
1,
2,
3,
4,
5
],
{
"minor": 50000,
"currency": "GBP"
}
],
"expect": {
"total": {
"minor": 7395,
"currency": "GBP"
},
"paidDays": 3,
"waitingDays": 0,
"weeks": [
{
"weekStart": "2026-05-31",
"paidDays": 3,
"waitingDays": 0,
"amount": {
"minor": 7395,
"currency": "GBP"
}
}
],
"entitlementExhausted": false
}
},
{
"name": "from April 2026 low earners get 80% of earnings, kept exact and rounded up once",
"args": [
[
{
"start": "2026-06-01",
"end": "2026-06-01"
}
],
[
1,
2,
3,
4,
5
],
{
"minor": 12333,
"currency": "GBP"
}
],
"expect": {
"total": {
"minor": 1974,
"currency": "GBP"
},
"paidDays": 1,
"waitingDays": 0,
"weeks": [
{
"weekStart": "2026-05-31",
"paidDays": 1,
"waitingDays": 0,
"amount": {
"minor": 1974,
"currency": "GBP"
}
}
],
"entitlementExhausted": false
}
},
{
"name": "earnings below the lower earnings limit before April 2026 earn no SSP",
"args": [
[
{
"start": "2025-06-02",
"end": "2025-06-13"
}
],
[
1,
2,
3,
4,
5
],
{
"minor": 12499,
"currency": "GBP"
}
],
"expect": {
"total": {
"minor": 0,
"currency": "GBP"
},
"paidDays": 0,
"waitingDays": 0,
"weeks": [],
"entitlementExhausted": false
}
},
{
"name": "a spell 52 days after the last links to it and serves no new waiting days",
"args": [
[
{
"start": "2025-06-02",
"end": "2025-06-05"
},
{
"start": "2025-07-28",
"end": "2025-07-31"
}
],
[
1,
2,
3,
4,
5
],
{
"minor": 50000,
"currency": "GBP"
}
],
"expect": {
"total": {
"minor": 11875,
"currency": "GBP"
},
"paidDays": 5,
"waitingDays": 3,
"weeks": [
{
"weekStart": "2025-06-01",
"paidDays": 1,
"waitingDays": 3,
"amount": {
"minor": 2375,
"currency": "GBP"
}
},
{
"weekStart": "2025-07-27",
"paidDays": 4,
"waitingDays": 0,
"amount": {
"minor": 9500,
"currency": "GBP"
}
}
],
"entitlementExhausted": false
}
},
{
"name": "a gap of exactly 8 weeks still links",
"args": [
[
{
"start": "2025-06-02",
"end": "2025-06-05"
},
{
"start": "2025-08-01",
"end": "2025-08-04"
}
],
[
1,
2,
3,
4,
5
],
{
"minor": 50000,
"currency": "GBP"
}
],
"expect": {
"total": {
"minor": 7125,
"currency": "GBP"
},
"paidDays": 3,
"waitingDays": 3,
"weeks": [
{
"weekStart": "2025-06-01",
"paidDays": 1,
"waitingDays": 3,
"amount": {
"minor": 2375,
"currency": "GBP"
}
},
{
"weekStart": "2025-07-27",
"paidDays": 1,
"waitingDays": 0,
"amount": {
"minor": 2375,
"currency": "GBP"
}
},
{
"weekStart": "2025-08-03",
"paidDays": 1,
"waitingDays": 0,
"amount": {
"minor": 2375,
"currency": "GBP"
}
}
],
"entitlementExhausted": false
}
},
{
"name": "a gap of 59 days does not link, so waiting days are served again",
"args": [
[
{
"start": "2025-06-02",
"end": "2025-06-05"
},
{
"start": "2025-08-04",
"end": "2025-08-07"
}
],
[
1,
2,
3,
4,
5
],
{
"minor": 50000,
"currency": "GBP"
}
],
"expect": {
"total": {
"minor": 4750,
"currency": "GBP"
},
"paidDays": 2,
"waitingDays": 6,
"weeks": [
{
"weekStart": "2025-06-01",
"paidDays": 1,
"waitingDays": 3,
"amount": {
"minor": 2375,
"currency": "GBP"
}
},
{
"weekStart": "2025-08-03",
"paidDays": 1,
"waitingDays": 3,
"amount": {
"minor": 2375,
"currency": "GBP"
}
}
],
"entitlementExhausted": false
}
},
{
"name": "a short spell between two linked ones is ignored before 2026",
"args": [
[
{
"start": "2025-06-02",
"end": "2025-06-05"
},
{
"start": "2025-06-10",
"end": "2025-06-11"
},
{
"start": "2025-07-28",
"end": "2025-07-31"
}
],
[
1,
2,
3,
4,
5
],
{
"minor": 50000,
"currency": "GBP"
}
],
"expect": {
"total": {
"minor": 11875,
"currency": "GBP"
},
"paidDays": 5,
"waitingDays": 3,
"weeks": [
{
"weekStart": "2025-06-01",
"paidDays": 1,
"waitingDays": 3,
"amount": {
"minor": 2375,
"currency": "GBP"
}
},
{
"weekStart": "2025-07-27",
"paidDays": 4,
"waitingDays": 0,
"amount": {
"minor": 9500,
"currency": "GBP"
}
}
],
"entitlementExhausted": false
}
},
{
"name": "a spell across 6 April 2026 serves two old waiting days, then pays at the new rate",
"args": [
[
{
"start": "2026-04-02",
"end": "2026-04-10"
}
],
[
1,
2,
3,
4,
5
],
{
"minor": 50000,
"currency": "GBP"
}
],
"expect": {
"total": {
"minor": 12325,
"currency": "GBP"
},
"paidDays": 5,
"waitingDays": 2,
"weeks": [
{
"weekStart": "2026-03-29",
"paidDays": 0,
"waitingDays": 2,
"amount": {
"minor": 0,
"currency": "GBP"
}
},
{
"weekStart": "2026-04-05",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 12325,
"currency": "GBP"
}
}
],
"entitlementExhausted": false
}
},
{
"name": "seven qualifying days a week: one day is a seventh of the week, rounded up",
"args": [
[
{
"start": "2024-06-03",
"end": "2024-06-09"
}
],
[
1,
2,
3,
4,
5,
6,
7
],
{
"minor": 50000,
"currency": "GBP"
}
],
"expect": {
"total": {
"minor": 6672,
"currency": "GBP"
},
"paidDays": 4,
"waitingDays": 3,
"weeks": [
{
"weekStart": "2024-06-02",
"paidDays": 3,
"waitingDays": 3,
"amount": {
"minor": 5004,
"currency": "GBP"
}
},
{
"weekStart": "2024-06-09",
"paidDays": 1,
"waitingDays": 0,
"amount": {
"minor": 1668,
"currency": "GBP"
}
}
],
"entitlementExhausted": false
}
},
{
"name": "2023-24 rate on a Tuesday-and-Thursday pattern: waiting days run into the second week",
"args": [
[
{
"start": "2023-06-05",
"end": "2023-06-23"
}
],
[
2,
4
],
{
"minor": 40000,
"currency": "GBP"
}
],
"expect": {
"total": {
"minor": 16410,
"currency": "GBP"
},
"paidDays": 3,
"waitingDays": 3,
"weeks": [
{
"weekStart": "2023-06-04",
"paidDays": 0,
"waitingDays": 2,
"amount": {
"minor": 0,
"currency": "GBP"
}
},
{
"weekStart": "2023-06-11",
"paidDays": 1,
"waitingDays": 1,
"amount": {
"minor": 5470,
"currency": "GBP"
}
},
{
"weekStart": "2023-06-18",
"paidDays": 2,
"waitingDays": 0,
"amount": {
"minor": 10940,
"currency": "GBP"
}
}
],
"entitlementExhausted": false
}
},
{
"name": "28 weeks is the most SSP a period of entitlement pays",
"args": [
[
{
"start": "2026-06-01",
"end": "2026-12-18"
}
],
[
1,
2,
3,
4,
5
],
{
"minor": 50000,
"currency": "GBP"
}
],
"expect": {
"total": {
"minor": 345100,
"currency": "GBP"
},
"paidDays": 140,
"waitingDays": 0,
"weeks": [
{
"weekStart": "2026-05-31",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 12325,
"currency": "GBP"
}
},
{
"weekStart": "2026-06-07",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 12325,
"currency": "GBP"
}
},
{
"weekStart": "2026-06-14",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 12325,
"currency": "GBP"
}
},
{
"weekStart": "2026-06-21",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 12325,
"currency": "GBP"
}
},
{
"weekStart": "2026-06-28",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 12325,
"currency": "GBP"
}
},
{
"weekStart": "2026-07-05",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 12325,
"currency": "GBP"
}
},
{
"weekStart": "2026-07-12",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 12325,
"currency": "GBP"
}
},
{
"weekStart": "2026-07-19",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 12325,
"currency": "GBP"
}
},
{
"weekStart": "2026-07-26",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 12325,
"currency": "GBP"
}
},
{
"weekStart": "2026-08-02",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 12325,
"currency": "GBP"
}
},
{
"weekStart": "2026-08-09",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 12325,
"currency": "GBP"
}
},
{
"weekStart": "2026-08-16",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 12325,
"currency": "GBP"
}
},
{
"weekStart": "2026-08-23",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 12325,
"currency": "GBP"
}
},
{
"weekStart": "2026-08-30",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 12325,
"currency": "GBP"
}
},
{
"weekStart": "2026-09-06",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 12325,
"currency": "GBP"
}
},
{
"weekStart": "2026-09-13",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 12325,
"currency": "GBP"
}
},
{
"weekStart": "2026-09-20",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 12325,
"currency": "GBP"
}
},
{
"weekStart": "2026-09-27",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 12325,
"currency": "GBP"
}
},
{
"weekStart": "2026-10-04",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 12325,
"currency": "GBP"
}
},
{
"weekStart": "2026-10-11",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 12325,
"currency": "GBP"
}
},
{
"weekStart": "2026-10-18",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 12325,
"currency": "GBP"
}
},
{
"weekStart": "2026-10-25",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 12325,
"currency": "GBP"
}
},
{
"weekStart": "2026-11-01",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 12325,
"currency": "GBP"
}
},
{
"weekStart": "2026-11-08",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 12325,
"currency": "GBP"
}
},
{
"weekStart": "2026-11-15",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 12325,
"currency": "GBP"
}
},
{
"weekStart": "2026-11-22",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 12325,
"currency": "GBP"
}
},
{
"weekStart": "2026-11-29",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 12325,
"currency": "GBP"
}
},
{
"weekStart": "2026-12-06",
"paidDays": 5,
"waitingDays": 0,
"amount": {
"minor": 12325,
"currency": "GBP"
}
}
],
"entitlementExhausted": true
}
},
{
"name": "no qualifying days is an error",
"args": [
[
{
"start": "2025-06-02",
"end": "2025-06-13"
}
],
[],
{
"minor": 50000,
"currency": "GBP"
}
],
"expectError": "at least one qualifying day"
},
{
"name": "a weekday outside 1-7 is an error",
"args": [
[
{
"start": "2025-06-02",
"end": "2025-06-13"
}
],
[
0,
1
],
{
"minor": 50000,
"currency": "GBP"
}
],
"expectError": "qualifying weekdays must be 1 (Monday) to 7 (Sunday)"
},
{
"name": "a period that ends before it starts is an error",
"args": [
[
{
"start": "2025-06-13",
"end": "2025-06-02"
}
],
[
1,
2,
3,
4,
5
],
{
"minor": 50000,
"currency": "GBP"
}
],
"expectError": "ends before it starts"
},
{
"name": "overlapping periods are an error",
"args": [
[
{
"start": "2025-06-02",
"end": "2025-06-13"
},
{
"start": "2025-06-10",
"end": "2025-06-20"
}
],
[
1,
2,
3,
4,
5
],
{
"minor": 50000,
"currency": "GBP"
}
],
"expectError": "must be in date order and must not overlap"
},
{
"name": "sickness before the rules this capability carries is an error",
"args": [
[
{
"start": "2020-06-01",
"end": "2020-06-12"
}
],
[
1,
2,
3,
4,
5
],
{
"minor": 50000,
"currency": "GBP"
}
],
"expectError": "no SSP rule for 2020-06-01"
},
{
"name": "negative earnings are an error",
"args": [
[
{
"start": "2025-06-02",
"end": "2025-06-13"
}
],
[
1,
2,
3,
4,
5
],
{
"minor": -1,
"currency": "GBP"
}
],
"expectError": "must not be negative"
}
]