Review payroll batch cutoffs and retries

src/payroll-types.tsTypeScript
@@ -0,0 +1,48 @@
1+export interface PayPeriod {
2+ id: string;
3+ startDate: string;
4+ endDateExclusive: string;
5+ timeZone: string;
6+}
7+
8+export interface TimesheetLine {
9+ id: string;
10+ employeeId: string;
11+ workedAt: string;
12+ minutes: number;
13+ hourlyRateCents: number;
14+ adjustmentCents: number;
15+ approved: boolean;
16+ version: number;
17+}
18+
19+export interface ProviderDelivery {
20+ acknowledgement: Promise<void>;
21+}
22+
23+export interface PayrollDependencies {
24+ employees: {
25+ listForRun(payRunId: string): Promise<string[]>;
26+ };
27+ timesheets: {
28+ listForEmployee(employeeId: string): Promise<TimesheetLine[]>;
29+ };
30+ provider: {
31+ startDisbursement(input: {
32+ employeeId: string;
33+ amountCents: number;
34+ idempotencyKey: string;
35+ }): Promise<ProviderDelivery>;
36+ };
37+ payRuns: {
38+ markPaid(payRunId: string, employeeId: string, amountCents: number): Promise<void>;
39+ recordFailure(payRunId: string, employeeId: string, message: string): Promise<void>;
40+ };
41+ checkpoint: {
42+ load(payRunId: string): Promise<number>;
43+ save(payRunId: string, nextEmployeeIndex: number): Promise<void>;
44+ };
45+ ids: {
46+ next(): string;
47+ };
48+}