[ { "name": "September starter by calendar days: 17 of 30", "args": [{ "minor": 300000, "currency": "GBP" }, 10000, "2026-09-01", "2026-09-30", "2026-09-14", "2026-09-30", "calendar-days", []], "expect": { "pay": { "minor": 170000, "currency": "GBP" }, "daysCounted": 17, "daysInPeriod": 30 } }, { "name": "the same starter by working days: 13 of 22 gives a different answer", "args": [{ "minor": 300000, "currency": "GBP" }, 10000, "2026-09-01", "2026-09-30", "2026-09-14", "2026-09-30", "working-days", []], "expect": { "pay": { "minor": 177273, "currency": "GBP" }, "daysCounted": 13, "daysInPeriod": 22 } }, { "name": "part-time for a whole month", "args": [{ "minor": 300000, "currency": "GBP" }, 6000, "2026-09-01", "2026-09-30", "2026-09-01", "2026-09-30", "calendar-days", []], "expect": { "pay": { "minor": 180000, "currency": "GBP" }, "daysCounted": 30, "daysInPeriod": 30 } }, { "name": "leaver on the 10th", "args": [{ "minor": 300000, "currency": "GBP" }, 10000, "2026-09-01", "2026-09-30", "2026-09-01", "2026-09-10", "calendar-days", []], "expect": { "pay": { "minor": 100000, "currency": "GBP" }, "daysCounted": 10, "daysInPeriod": 30 } }, { "name": "a bank holiday comes out of both counts", "args": [{ "minor": 300000, "currency": "GBP" }, 10000, "2026-08-01", "2026-08-31", "2026-08-17", "2026-08-31", "working-days", ["2026-08-31"]], "expect": { "pay": { "minor": 150000, "currency": "GBP" }, "daysCounted": 10, "daysInPeriod": 20 } }, { "name": "a leap February has 29 days", "args": [{ "minor": 250000, "currency": "GBP" }, 10000, "2024-02-01", "2024-02-29", "2024-02-15", "2024-02-29", "calendar-days", []], "expect": { "pay": { "minor": 129310, "currency": "GBP" }, "daysCounted": 15, "daysInPeriod": 29 } }, { "name": "part-time and part-period together, rounded once", "args": [{ "minor": 300000, "currency": "GBP" }, 8000, "2026-09-01", "2026-09-30", "2026-09-14", "2026-09-30", "working-days", []], "expect": { "pay": { "minor": 141818, "currency": "GBP" }, "daysCounted": 13, "daysInPeriod": 22 } }, { "name": "half a penny rounds up", "args": [{ "minor": 1001, "currency": "GBP" }, 10000, "2026-09-01", "2026-09-02", "2026-09-02", "2026-09-02", "calendar-days", []], "expect": { "pay": { "minor": 501, "currency": "GBP" }, "daysCounted": 1, "daysInPeriod": 2 } }, { "name": "worked dates outside the period are an error", "args": [{ "minor": 300000, "currency": "GBP" }, 10000, "2026-09-01", "2026-09-30", "2026-08-25", "2026-09-30", "calendar-days", []], "expectError": "inside the pay period" }, { "name": "reversed worked dates are an error", "args": [{ "minor": 300000, "currency": "GBP" }, 10000, "2026-09-01", "2026-09-30", "2026-09-20", "2026-09-10", "calendar-days", []], "expectError": "workedTo is before workedFrom" }, { "name": "an FTE of zero is an error", "args": [{ "minor": 300000, "currency": "GBP" }, 0, "2026-09-01", "2026-09-30", "2026-09-01", "2026-09-30", "calendar-days", []], "expectError": "fteBasisPoints must be" }, { "name": "a weekend-only period has no working days", "args": [{ "minor": 300000, "currency": "GBP" }, 10000, "2026-09-19", "2026-09-20", "2026-09-19", "2026-09-20", "working-days", []], "expectError": "no working days" }, { "name": "an unknown method is an error", "args": [{ "minor": 300000, "currency": "GBP" }, 10000, "2026-09-01", "2026-09-30", "2026-09-01", "2026-09-30", "hours", []], "expectError": "unknown pro-rata method" } ]