@t4dhg/mcp-factorial 10.0.0 → 10.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +46 -28
- package/dist/api/documents.js +11 -11
- package/dist/api/documents.js.map +1 -1
- package/dist/api/index.d.ts +1 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +1 -1
- package/dist/api/index.js.map +1 -1
- package/dist/api/time-off.d.ts +6 -0
- package/dist/api/time-off.d.ts.map +1 -1
- package/dist/api/time-off.js +16 -5
- package/dist/api/time-off.js.map +1 -1
- package/dist/attendance/backfill.d.ts +10 -2
- package/dist/attendance/backfill.d.ts.map +1 -1
- package/dist/attendance/backfill.js +24 -6
- package/dist/attendance/backfill.js.map +1 -1
- package/dist/attendance/gate.js +1 -1
- package/dist/attendance/gate.js.map +1 -1
- package/dist/attendance/planner.d.ts +72 -2
- package/dist/attendance/planner.d.ts.map +1 -1
- package/dist/attendance/planner.js +174 -6
- package/dist/attendance/planner.js.map +1 -1
- package/dist/attendance/report.d.ts +36 -0
- package/dist/attendance/report.d.ts.map +1 -0
- package/dist/attendance/report.js +62 -0
- package/dist/attendance/report.js.map +1 -0
- package/dist/confirmation.d.ts.map +1 -1
- package/dist/confirmation.js +3 -2
- package/dist/confirmation.js.map +1 -1
- package/dist/http-client.d.ts +45 -1
- package/dist/http-client.d.ts.map +1 -1
- package/dist/http-client.js +47 -3
- package/dist/http-client.js.map +1 -1
- package/dist/prompts/attendance.d.ts +38 -0
- package/dist/prompts/attendance.d.ts.map +1 -0
- package/dist/prompts/attendance.js +366 -0
- package/dist/prompts/attendance.js.map +1 -0
- package/dist/tools/attendance.d.ts.map +1 -1
- package/dist/tools/attendance.js +89 -18
- package/dist/tools/attendance.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +4 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/shared.d.ts +1 -1
- package/dist/tools/shared.d.ts.map +1 -1
- package/dist/tools/shared.js +1 -0
- package/dist/tools/shared.js.map +1 -1
- package/llms.txt +5 -2
- package/package.json +1 -1
|
@@ -41,6 +41,20 @@ export interface LeaveLike {
|
|
|
41
41
|
approved: boolean | null;
|
|
42
42
|
deleted_at: string | null;
|
|
43
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* How much of the requested window the API actually returned data for. Printed
|
|
46
|
+
* at the top of every audit, gaps and bulk-write preview so that a gap in the
|
|
47
|
+
* data is visible before anyone reasons from it.
|
|
48
|
+
*/
|
|
49
|
+
export interface FactsCoverage {
|
|
50
|
+
days_in_window: number;
|
|
51
|
+
days_with_contract_data: number;
|
|
52
|
+
/** First and last date in the window with no contract data, if any */
|
|
53
|
+
first_uncovered: string | null;
|
|
54
|
+
last_uncovered: string | null;
|
|
55
|
+
leave_records: number;
|
|
56
|
+
shift_records: number;
|
|
57
|
+
}
|
|
44
58
|
export interface PlanFacts {
|
|
45
59
|
/** Today's date, YYYY-MM-DD, in the zone the caller considers local */
|
|
46
60
|
today: string;
|
|
@@ -50,13 +64,21 @@ export interface PlanFacts {
|
|
|
50
64
|
shifts: ExistingShift[];
|
|
51
65
|
/** Approved leave cover per date, see expandLeaves */
|
|
52
66
|
leaves: Map<string, LeaveCover>;
|
|
67
|
+
/** What the reads covered; absent when the facts were not read from the API */
|
|
68
|
+
coverage?: FactsCoverage;
|
|
53
69
|
}
|
|
70
|
+
/** Measure how much of a date window the per-day facts cover */
|
|
71
|
+
export declare function measureCoverage(dates: string[], days: Map<string, DayFacts>, leaveRecords: number, shiftRecords: number): FactsCoverage;
|
|
72
|
+
/** One line for the header of an audit, gaps or preview */
|
|
73
|
+
export declare function formatCoverage(coverage: FactsCoverage): string;
|
|
54
74
|
export interface RangeRequest {
|
|
55
75
|
mode: 'range';
|
|
56
76
|
employee_id: number;
|
|
57
77
|
dates: string[];
|
|
58
78
|
segments: Segment[];
|
|
59
79
|
skip_leave: boolean;
|
|
80
|
+
/** Vary each written time by up to this many minutes, deterministically per record */
|
|
81
|
+
jitter_minutes?: number;
|
|
60
82
|
}
|
|
61
83
|
export interface DaysRequest {
|
|
62
84
|
mode: 'days';
|
|
@@ -66,9 +88,11 @@ export interface DaysRequest {
|
|
|
66
88
|
segments: Segment[];
|
|
67
89
|
}>;
|
|
68
90
|
skip_leave: boolean;
|
|
91
|
+
/** Vary each written time by up to this many minutes, deterministically per record */
|
|
92
|
+
jitter_minutes?: number;
|
|
69
93
|
}
|
|
70
94
|
export type PlanRequest = RangeRequest | DaysRequest;
|
|
71
|
-
export type SkipReason = 'future_date' | 'weekend' | 'bank_holiday' | 'not_workable' | 'on_leave' | 'half_day_leave';
|
|
95
|
+
export type SkipReason = 'future_date' | 'weekend' | 'bank_holiday' | 'not_workable' | 'no_contract_data' | 'on_leave' | 'half_day_leave';
|
|
72
96
|
export interface SkippedDay {
|
|
73
97
|
date: string;
|
|
74
98
|
reason: SkipReason;
|
|
@@ -96,6 +120,14 @@ export interface Gap {
|
|
|
96
120
|
missing_minutes: number;
|
|
97
121
|
half_day_leave: 'beggining_of_day' | 'end_of_day' | null;
|
|
98
122
|
}
|
|
123
|
+
/**
|
|
124
|
+
* A day whose tracked minutes are within this distance of the expected minutes
|
|
125
|
+
* counts as complete. Real clock-ins are never exact, and jittered backfills
|
|
126
|
+
* are deliberately not, so a strict comparison would flag nearly every day.
|
|
127
|
+
*/
|
|
128
|
+
export declare const DEFAULT_TOLERANCE_MINUTES = 15;
|
|
129
|
+
/** A preview lists every record up to this many; above it, the first and last few */
|
|
130
|
+
export declare const PREVIEW_FULL_LIST_MAX = 62;
|
|
99
131
|
/** Parse "HH:MM" into minutes since midnight; anything else is rejected */
|
|
100
132
|
export declare function parseHHMM(value: string): number;
|
|
101
133
|
/** True when two [start, end) intervals share any time; touching does not count */
|
|
@@ -113,6 +145,22 @@ export declare function validateSegments(segments: Segment[]): void;
|
|
|
113
145
|
* anything. A later leave over the same date never downgrades a full cover.
|
|
114
146
|
*/
|
|
115
147
|
export declare function expandLeaves(leaves: LeaveLike[]): Map<string, LeaveCover>;
|
|
148
|
+
/**
|
|
149
|
+
* Apply per-record variation to a day's segments. Nobody clocks in at exactly
|
|
150
|
+
* 09:00 every day, so a month of identical times is the one pattern a real
|
|
151
|
+
* registro never shows. The variation is derived from a hash of the employee,
|
|
152
|
+
* the date and the segment, so re-planning the same request yields the same
|
|
153
|
+
* times: the preview shows exactly what will be written, the confirmation
|
|
154
|
+
* token binds to it, and a retry after a partial failure recognises its own
|
|
155
|
+
* earlier writes. Segments never cross each other or midnight.
|
|
156
|
+
*
|
|
157
|
+
* Both ends of a segment move by the same offset, so the day's total is
|
|
158
|
+
* unchanged and an audit of a jittered backfill reads complete at any
|
|
159
|
+
* tolerance. Only where a segment would otherwise run into its neighbour or
|
|
160
|
+
* past midnight is an end clamped, and then that segment shrinks by at most
|
|
161
|
+
* the magnitude.
|
|
162
|
+
*/
|
|
163
|
+
export declare function jitterSegments(employeeId: number, date: string, segments: Segment[], magnitude: number): Segment[];
|
|
116
164
|
/**
|
|
117
165
|
* Build the plan. Skip reasons are evaluated in the documented order and the
|
|
118
166
|
* first match wins. Explicit days skip the weekday, holiday and workability
|
|
@@ -129,7 +177,29 @@ export declare function planFingerprint(employeeId: number, writes: PlannedWrite
|
|
|
129
177
|
* full-day leave applies. Future dates are left out, since log_range would
|
|
130
178
|
* refuse them anyway.
|
|
131
179
|
*/
|
|
132
|
-
export declare function computeGaps(facts: PlanFacts): Gap[];
|
|
180
|
+
export declare function computeGaps(facts: PlanFacts, toleranceMinutes?: number): Gap[];
|
|
181
|
+
export type LedgerStatus = 'future' | 'weekend' | 'bank_holiday' | 'not_workable' | 'no_contract_data' | 'on_leave' | 'half_day_leave' | 'complete' | 'missing' | 'over';
|
|
182
|
+
export interface LedgerDay {
|
|
183
|
+
date: string;
|
|
184
|
+
day_type: string | null;
|
|
185
|
+
expected_minutes: number;
|
|
186
|
+
tracked_minutes: number;
|
|
187
|
+
leave: LeaveCover | null;
|
|
188
|
+
shifts: Array<{
|
|
189
|
+
clock_in: string;
|
|
190
|
+
clock_out: string | null;
|
|
191
|
+
minutes: number | null;
|
|
192
|
+
}>;
|
|
193
|
+
status: LedgerStatus;
|
|
194
|
+
/** tracked minus expected; negative means hours are missing */
|
|
195
|
+
delta_minutes: number;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* One row per calendar day in the range, with everything the planner knows
|
|
199
|
+
* about it, for auditing what was clocked against what the contract, the
|
|
200
|
+
* company calendar and the leave record say should have been.
|
|
201
|
+
*/
|
|
202
|
+
export declare function computeLedger(dates: string[], facts: PlanFacts, toleranceMinutes?: number): LedgerDay[];
|
|
133
203
|
/** 720 -> "12h", 750 -> "12h30" */
|
|
134
204
|
export declare function hours(minutes: number): string;
|
|
135
205
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../../src/attendance/planner.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,qEAAqE;AACrE,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,+BAA+B;AAC/B,MAAM,WAAW,YAAa,SAAQ,OAAO;IAC3C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,4DAA4D;AAC5D,MAAM,WAAW,QAAQ;IACvB,wEAAwE;IACxE,QAAQ,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,gBAAgB,EAAE,MAAM,CAAC;IACzB,mCAAmC;IACnC,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,+EAA+E;AAC/E,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,0CAA0C;AAC1C,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,kBAAkB,GAAG,YAAY,CAAC;AAEpE,qDAAqD;AACrD,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,SAAS;IACxB,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5B,gEAAgE;IAChE,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,sDAAsD;IACtD,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../../src/attendance/planner.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,qEAAqE;AACrE,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,+BAA+B;AAC/B,MAAM,WAAW,YAAa,SAAQ,OAAO;IAC3C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,4DAA4D;AAC5D,MAAM,WAAW,QAAQ;IACvB,wEAAwE;IACxE,QAAQ,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,gBAAgB,EAAE,MAAM,CAAC;IACzB,mCAAmC;IACnC,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,+EAA+E;AAC/E,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,0CAA0C;AAC1C,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,kBAAkB,GAAG,YAAY,CAAC;AAEpE,qDAAqD;AACrD,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,uBAAuB,EAAE,MAAM,CAAC;IAChC,sEAAsE;IACtE,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5B,gEAAgE;IAChE,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,sDAAsD;IACtD,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChC,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAED,gEAAgE;AAChE,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EAC3B,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GACnB,aAAa,CAUf;AAED,2DAA2D;AAC3D,wBAAgB,cAAc,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAU9D;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,sFAAsF;IACtF,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC,CAAC;IACnD,UAAU,EAAE,OAAO,CAAC;IACpB,sFAAsF;IACtF,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,WAAW,CAAC;AAErD,MAAM,MAAM,UAAU,GAClB,aAAa,GACb,SAAS,GACT,cAAc,GACd,cAAc,GACd,kBAAkB,GAClB,UAAU,GACV,gBAAgB,CAAC;AAErB,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAe,SAAQ,OAAO;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,mBAAmB,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5D;AAED,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,kBAAkB,GAAG,YAAY,GAAG,IAAI,CAAC;CAC1D;AAMD;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAE5C,qFAAqF;AACrF,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAIxC,2EAA2E;AAC3E,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM/C;AAED,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAElF;AAQD,6CAA6C;AAC7C,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAcnE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CA8B1D;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAezE;AAmFD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,EAAE,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,EAAE,CAwBX;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,GAAG,YAAY,CAkEtF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,YAAY,EAAE,EACtB,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,CAQR;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,gBAAgB,SAA4B,GAAG,GAAG,EAAE,CAiBjG;AAED,MAAM,MAAM,YAAY,GACpB,QAAQ,GACR,SAAS,GACT,cAAc,GACd,cAAc,GACd,kBAAkB,GAClB,UAAU,GACV,gBAAgB,GAChB,UAAU,GACV,SAAS,GACT,MAAM,CAAC;AAEX,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IACtF,MAAM,EAAE,YAAY,CAAC;IACrB,+DAA+D;IAC/D,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EAAE,EACf,KAAK,EAAE,SAAS,EAChB,gBAAgB,SAA4B,GAC3C,SAAS,EAAE,CAoCb;AAED,mCAAmC;AACnC,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAI7C;AAQD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EACtC,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EACrC,OAAO,EAAE,WAAW,EACpB,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,CAqER"}
|
|
@@ -8,9 +8,41 @@
|
|
|
8
8
|
* a unit test in src/__tests__/unit/attendance/planner.test.ts.
|
|
9
9
|
*/
|
|
10
10
|
import { createHash } from 'node:crypto';
|
|
11
|
+
/** Measure how much of a date window the per-day facts cover */
|
|
12
|
+
export function measureCoverage(dates, days, leaveRecords, shiftRecords) {
|
|
13
|
+
const uncovered = dates.filter(date => !days.has(date));
|
|
14
|
+
return {
|
|
15
|
+
days_in_window: dates.length,
|
|
16
|
+
days_with_contract_data: dates.length - uncovered.length,
|
|
17
|
+
first_uncovered: uncovered[0] ?? null,
|
|
18
|
+
last_uncovered: uncovered.length > 0 ? uncovered[uncovered.length - 1] : null,
|
|
19
|
+
leave_records: leaveRecords,
|
|
20
|
+
shift_records: shiftRecords,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/** One line for the header of an audit, gaps or preview */
|
|
24
|
+
export function formatCoverage(coverage) {
|
|
25
|
+
const base = `Data read: contract data for ${coverage.days_with_contract_data} of ${coverage.days_in_window} days, ` +
|
|
26
|
+
`${coverage.leave_records} leave records, ${coverage.shift_records} shift records.`;
|
|
27
|
+
if (coverage.days_with_contract_data === coverage.days_in_window)
|
|
28
|
+
return base;
|
|
29
|
+
return (`${base} Days without contract data (${coverage.first_uncovered} to ${coverage.last_uncovered}) ` +
|
|
30
|
+
'are reported as no_contract_data and are never written; they usually precede the start of ' +
|
|
31
|
+
'employment. If that is not the case here, the read is incomplete and the result must not be trusted.');
|
|
32
|
+
}
|
|
11
33
|
const HHMM = /^([01]\d|2[0-3]):([0-5]\d)$/;
|
|
12
34
|
const DATE = /^\d{4}-\d{2}-\d{2}$/;
|
|
13
35
|
const END_OF_DAY = 24 * 60;
|
|
36
|
+
/**
|
|
37
|
+
* A day whose tracked minutes are within this distance of the expected minutes
|
|
38
|
+
* counts as complete. Real clock-ins are never exact, and jittered backfills
|
|
39
|
+
* are deliberately not, so a strict comparison would flag nearly every day.
|
|
40
|
+
*/
|
|
41
|
+
export const DEFAULT_TOLERANCE_MINUTES = 15;
|
|
42
|
+
/** A preview lists every record up to this many; above it, the first and last few */
|
|
43
|
+
export const PREVIEW_FULL_LIST_MAX = 62;
|
|
44
|
+
const PREVIEW_HEAD = 20;
|
|
45
|
+
const PREVIEW_TAIL = 10;
|
|
14
46
|
/** Parse "HH:MM" into minutes since midnight; anything else is rejected */
|
|
15
47
|
export function parseHHMM(value) {
|
|
16
48
|
const match = HHMM.exec(value);
|
|
@@ -111,13 +143,19 @@ function daySkipReason(date, request, facts) {
|
|
|
111
143
|
if (day?.day_type === 'bank_holiday') {
|
|
112
144
|
return { date, reason: 'bank_holiday' };
|
|
113
145
|
}
|
|
114
|
-
|
|
146
|
+
// A date the API said nothing about is not a fact about the contract, so
|
|
147
|
+
// it gets its own reason: the planner must never present a gap in the
|
|
148
|
+
// data as a day that was not workable.
|
|
149
|
+
if (!day) {
|
|
115
150
|
return {
|
|
116
151
|
date,
|
|
117
|
-
reason: '
|
|
118
|
-
detail:
|
|
152
|
+
reason: 'no_contract_data',
|
|
153
|
+
detail: 'neither worked_times nor estimated_times returned this date',
|
|
119
154
|
};
|
|
120
155
|
}
|
|
156
|
+
if (day.expected_minutes <= 0) {
|
|
157
|
+
return { date, reason: 'not_workable', detail: 'contract expects 0 minutes' };
|
|
158
|
+
}
|
|
121
159
|
}
|
|
122
160
|
if (request.skip_leave) {
|
|
123
161
|
const cover = facts.leaves.get(date);
|
|
@@ -155,6 +193,58 @@ function existingIntervals(shifts, date) {
|
|
|
155
193
|
return [start, end, label];
|
|
156
194
|
});
|
|
157
195
|
}
|
|
196
|
+
function formatHHMM(minutes) {
|
|
197
|
+
const clamped = Math.max(0, Math.min(END_OF_DAY - 1, minutes));
|
|
198
|
+
return `${String(Math.floor(clamped / 60)).padStart(2, '0')}:${String(clamped % 60).padStart(2, '0')}`;
|
|
199
|
+
}
|
|
200
|
+
/** Deterministic integer in [-magnitude, magnitude] derived from the record's identity */
|
|
201
|
+
function deterministicOffset(seed, magnitude) {
|
|
202
|
+
if (magnitude <= 0)
|
|
203
|
+
return 0;
|
|
204
|
+
const digest = createHash('sha256').update(seed).digest();
|
|
205
|
+
const value = digest.readUInt32BE(0) % (2 * magnitude + 1);
|
|
206
|
+
return value - magnitude;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Apply per-record variation to a day's segments. Nobody clocks in at exactly
|
|
210
|
+
* 09:00 every day, so a month of identical times is the one pattern a real
|
|
211
|
+
* registro never shows. The variation is derived from a hash of the employee,
|
|
212
|
+
* the date and the segment, so re-planning the same request yields the same
|
|
213
|
+
* times: the preview shows exactly what will be written, the confirmation
|
|
214
|
+
* token binds to it, and a retry after a partial failure recognises its own
|
|
215
|
+
* earlier writes. Segments never cross each other or midnight.
|
|
216
|
+
*
|
|
217
|
+
* Both ends of a segment move by the same offset, so the day's total is
|
|
218
|
+
* unchanged and an audit of a jittered backfill reads complete at any
|
|
219
|
+
* tolerance. Only where a segment would otherwise run into its neighbour or
|
|
220
|
+
* past midnight is an end clamped, and then that segment shrinks by at most
|
|
221
|
+
* the magnitude.
|
|
222
|
+
*/
|
|
223
|
+
export function jitterSegments(employeeId, date, segments, magnitude) {
|
|
224
|
+
if (magnitude <= 0)
|
|
225
|
+
return segments;
|
|
226
|
+
const ordered = [...segments].sort((a, b) => parseHHMM(a.clock_in) - parseHHMM(b.clock_in));
|
|
227
|
+
const result = [];
|
|
228
|
+
let previousEnd = -Infinity;
|
|
229
|
+
ordered.forEach((segment, index) => {
|
|
230
|
+
const baseStart = parseHHMM(segment.clock_in);
|
|
231
|
+
const baseEnd = parseHHMM(segment.clock_out);
|
|
232
|
+
const nextStart = index + 1 < ordered.length ? parseHHMM(ordered[index + 1].clock_in) : Infinity;
|
|
233
|
+
const offset = deterministicOffset(`${employeeId}|${date}|${index}`, magnitude);
|
|
234
|
+
let start = baseStart + offset;
|
|
235
|
+
let end = baseEnd + offset;
|
|
236
|
+
// Never start before the previous segment ended, never end after the next one may start.
|
|
237
|
+
start = Math.max(start, previousEnd, 0);
|
|
238
|
+
end = Math.min(end, nextStart - magnitude - 1, END_OF_DAY - 1);
|
|
239
|
+
if (end <= start) {
|
|
240
|
+
start = baseStart;
|
|
241
|
+
end = baseEnd;
|
|
242
|
+
}
|
|
243
|
+
previousEnd = end;
|
|
244
|
+
result.push({ clock_in: formatHHMM(start), clock_out: formatHHMM(end) });
|
|
245
|
+
});
|
|
246
|
+
return result;
|
|
247
|
+
}
|
|
158
248
|
/**
|
|
159
249
|
* Build the plan. Skip reasons are evaluated in the documented order and the
|
|
160
250
|
* first match wins. Explicit days skip the weekday, holiday and workability
|
|
@@ -190,7 +280,8 @@ export function buildBackfillPlan(request, facts) {
|
|
|
190
280
|
continue;
|
|
191
281
|
}
|
|
192
282
|
const existing = existingIntervals(facts.shifts, date);
|
|
193
|
-
|
|
283
|
+
const planned = jitterSegments(request.employee_id, date, segments, request.jitter_minutes ?? 0);
|
|
284
|
+
for (const segment of planned) {
|
|
194
285
|
const interval = [
|
|
195
286
|
parseHHMM(segment.clock_in),
|
|
196
287
|
parseHHMM(segment.clock_out),
|
|
@@ -235,14 +326,14 @@ export function planFingerprint(employeeId, writes, observations) {
|
|
|
235
326
|
* full-day leave applies. Future dates are left out, since log_range would
|
|
236
327
|
* refuse them anyway.
|
|
237
328
|
*/
|
|
238
|
-
export function computeGaps(facts) {
|
|
329
|
+
export function computeGaps(facts, toleranceMinutes = DEFAULT_TOLERANCE_MINUTES) {
|
|
239
330
|
const gaps = [];
|
|
240
331
|
for (const [date, day] of [...facts.days.entries()].sort(([a], [b]) => a.localeCompare(b))) {
|
|
241
332
|
if (date > facts.today)
|
|
242
333
|
continue;
|
|
243
334
|
if (day.day_type !== 'workday')
|
|
244
335
|
continue;
|
|
245
|
-
if (day.expected_minutes
|
|
336
|
+
if (day.expected_minutes - day.tracked_minutes <= toleranceMinutes)
|
|
246
337
|
continue;
|
|
247
338
|
const cover = facts.leaves.get(date);
|
|
248
339
|
if (cover === 'full')
|
|
@@ -257,6 +348,58 @@ export function computeGaps(facts) {
|
|
|
257
348
|
}
|
|
258
349
|
return gaps;
|
|
259
350
|
}
|
|
351
|
+
/**
|
|
352
|
+
* One row per calendar day in the range, with everything the planner knows
|
|
353
|
+
* about it, for auditing what was clocked against what the contract, the
|
|
354
|
+
* company calendar and the leave record say should have been.
|
|
355
|
+
*/
|
|
356
|
+
export function computeLedger(dates, facts, toleranceMinutes = DEFAULT_TOLERANCE_MINUTES) {
|
|
357
|
+
return dates.map(date => {
|
|
358
|
+
const day = facts.days.get(date);
|
|
359
|
+
const leave = facts.leaves.get(date) ?? null;
|
|
360
|
+
const shifts = facts.shifts
|
|
361
|
+
.filter(s => s.date === date)
|
|
362
|
+
.sort((a, b) => a.clock_in.localeCompare(b.clock_in))
|
|
363
|
+
.map(s => ({
|
|
364
|
+
clock_in: s.clock_in,
|
|
365
|
+
clock_out: s.clock_out,
|
|
366
|
+
minutes: s.clock_out === null ? null : parseHHMM(s.clock_out) - parseHHMM(s.clock_in),
|
|
367
|
+
}));
|
|
368
|
+
const expected = day?.expected_minutes ?? 0;
|
|
369
|
+
const tracked = day?.tracked_minutes ?? 0;
|
|
370
|
+
let status;
|
|
371
|
+
if (date > facts.today)
|
|
372
|
+
status = 'future';
|
|
373
|
+
else if (!day)
|
|
374
|
+
status = 'no_contract_data';
|
|
375
|
+
else if (day?.day_type === 'saturday' || day?.day_type === 'sunday')
|
|
376
|
+
status = 'weekend';
|
|
377
|
+
else if (day?.day_type === 'bank_holiday')
|
|
378
|
+
status = 'bank_holiday';
|
|
379
|
+
else if (leave === 'full')
|
|
380
|
+
status = 'on_leave';
|
|
381
|
+
else if (leave)
|
|
382
|
+
status = 'half_day_leave';
|
|
383
|
+
else if (expected <= 0)
|
|
384
|
+
status = 'not_workable';
|
|
385
|
+
else if (expected - tracked > toleranceMinutes)
|
|
386
|
+
status = 'missing';
|
|
387
|
+
else if (tracked - expected > toleranceMinutes)
|
|
388
|
+
status = 'over';
|
|
389
|
+
else
|
|
390
|
+
status = 'complete';
|
|
391
|
+
return {
|
|
392
|
+
date,
|
|
393
|
+
day_type: day?.day_type ?? null,
|
|
394
|
+
expected_minutes: expected,
|
|
395
|
+
tracked_minutes: tracked,
|
|
396
|
+
leave,
|
|
397
|
+
shifts,
|
|
398
|
+
status,
|
|
399
|
+
delta_minutes: tracked - expected,
|
|
400
|
+
};
|
|
401
|
+
});
|
|
402
|
+
}
|
|
260
403
|
/** 720 -> "12h", 750 -> "12h30" */
|
|
261
404
|
export function hours(minutes) {
|
|
262
405
|
const whole = Math.floor(minutes / 60);
|
|
@@ -286,6 +429,30 @@ export function formatPlanPreview(plan, employee, range, request, observations)
|
|
|
286
429
|
if (observations) {
|
|
287
430
|
lines.push(` Note on every record: "${observations}"`);
|
|
288
431
|
}
|
|
432
|
+
if (request.jitter_minutes && request.jitter_minutes > 0) {
|
|
433
|
+
lines.push(` Each time varies by up to ${request.jitter_minutes} minutes from the pattern (fixed per record, listed below).`);
|
|
434
|
+
}
|
|
435
|
+
if (plan.writes.length > 0) {
|
|
436
|
+
lines.push('');
|
|
437
|
+
lines.push(' Records to write:');
|
|
438
|
+
const record = (w) => ` ${w.date} ${w.clock_in}-${w.clock_out}`;
|
|
439
|
+
if (plan.writes.length <= PREVIEW_FULL_LIST_MAX) {
|
|
440
|
+
for (const w of plan.writes)
|
|
441
|
+
lines.push(record(w));
|
|
442
|
+
}
|
|
443
|
+
else {
|
|
444
|
+
// Enough to check the pattern and the jitter at both ends without
|
|
445
|
+
// drowning the preview; the token binds to every record regardless.
|
|
446
|
+
const head = plan.writes.slice(0, PREVIEW_HEAD);
|
|
447
|
+
const tail = plan.writes.slice(-PREVIEW_TAIL);
|
|
448
|
+
const hidden = plan.writes.length - head.length - tail.length;
|
|
449
|
+
for (const w of head)
|
|
450
|
+
lines.push(record(w));
|
|
451
|
+
lines.push(` ... ${hidden} more records not listed; the confirmation token binds to all of them ...`);
|
|
452
|
+
for (const w of tail)
|
|
453
|
+
lines.push(record(w));
|
|
454
|
+
}
|
|
455
|
+
}
|
|
289
456
|
if (plan.skippedDays.length > 0) {
|
|
290
457
|
lines.push('');
|
|
291
458
|
lines.push(` Skipping ${plan.skippedDays.length} days:`);
|
|
@@ -295,6 +462,7 @@ export function formatPlanPreview(plan, employee, range, request, observations)
|
|
|
295
462
|
weekend: 'weekend',
|
|
296
463
|
bank_holiday: 'bank holiday',
|
|
297
464
|
not_workable: 'not workable under the contract',
|
|
465
|
+
no_contract_data: 'without contract data in Factorial for the date (not written; usually before the start of employment)',
|
|
298
466
|
on_leave: 'approved leave',
|
|
299
467
|
half_day_leave: 'half-day leave, write it with log_days if the other half was worked',
|
|
300
468
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planner.js","sourceRoot":"","sources":["../../src/attendance/planner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"planner.js","sourceRoot":"","sources":["../../src/attendance/planner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text rendering of an attendance audit. Shared by the `audit` action of the
|
|
3
|
+
* factorial_attendance tool and by the attendance prompts, so that a model
|
|
4
|
+
* reads the same report whichever way it arrives at it.
|
|
5
|
+
*/
|
|
6
|
+
import { type FactsCoverage, type Gap, type LedgerDay } from './planner.js';
|
|
7
|
+
export type AuditFormat = 'summary' | 'table' | 'json';
|
|
8
|
+
export interface AuditReportInput {
|
|
9
|
+
employee: {
|
|
10
|
+
id: number;
|
|
11
|
+
name: string;
|
|
12
|
+
};
|
|
13
|
+
startOn: string;
|
|
14
|
+
endOn: string;
|
|
15
|
+
ledger: LedgerDay[];
|
|
16
|
+
coverage: FactsCoverage;
|
|
17
|
+
toleranceMinutes: number;
|
|
18
|
+
format: AuditFormat;
|
|
19
|
+
}
|
|
20
|
+
export declare function ledgerRow(d: LedgerDay): string;
|
|
21
|
+
/** Count ledger days per status, in first-seen order */
|
|
22
|
+
export declare function countStatuses(ledger: LedgerDay[]): Map<LedgerDay['status'], number>;
|
|
23
|
+
export declare function formatAudit(input: AuditReportInput): string;
|
|
24
|
+
export interface GapsReportInput {
|
|
25
|
+
employee: {
|
|
26
|
+
id: number;
|
|
27
|
+
name: string;
|
|
28
|
+
};
|
|
29
|
+
startOn: string;
|
|
30
|
+
endOn: string;
|
|
31
|
+
gaps: Gap[];
|
|
32
|
+
coverage: FactsCoverage;
|
|
33
|
+
}
|
|
34
|
+
/** Text rendering of the `gaps` action, shared with the attendance prompts */
|
|
35
|
+
export declare function formatGaps(input: GapsReportInput): string;
|
|
36
|
+
//# sourceMappingURL=report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/attendance/report.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAyB,KAAK,aAAa,EAAE,KAAK,GAAG,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAEnG,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAEvD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,QAAQ,EAAE,aAAa,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,WAAW,CAAC;CACrB;AAKD,wBAAgB,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,MAAM,CAM9C;AAED,wDAAwD;AACxD,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAInF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAwB3D;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,QAAQ,EAAE,aAAa,CAAC;CACzB;AAED,8EAA8E;AAC9E,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAqBzD"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text rendering of an attendance audit. Shared by the `audit` action of the
|
|
3
|
+
* factorial_attendance tool and by the attendance prompts, so that a model
|
|
4
|
+
* reads the same report whichever way it arrives at it.
|
|
5
|
+
*/
|
|
6
|
+
import { formatCoverage, hours } from './planner.js';
|
|
7
|
+
/** Statuses an audit summary lists; the rest are counted in the header only */
|
|
8
|
+
const QUIET_STATUSES = new Set(['complete', 'weekend', 'future']);
|
|
9
|
+
export function ledgerRow(d) {
|
|
10
|
+
const shifts = d.shifts.length
|
|
11
|
+
? d.shifts.map(sh => `${sh.clock_in}-${sh.clock_out ?? 'open'}`).join(' ')
|
|
12
|
+
: '-';
|
|
13
|
+
const leave = d.leave ? ` leave:${d.leave}` : '';
|
|
14
|
+
return ` ${d.date} ${(d.day_type ?? '-').padEnd(12)} ${d.status.padEnd(16)} expected ${hours(d.expected_minutes).padEnd(6)} tracked ${hours(d.tracked_minutes).padEnd(6)} ${shifts}${leave}`;
|
|
15
|
+
}
|
|
16
|
+
/** Count ledger days per status, in first-seen order */
|
|
17
|
+
export function countStatuses(ledger) {
|
|
18
|
+
const counts = new Map();
|
|
19
|
+
for (const day of ledger)
|
|
20
|
+
counts.set(day.status, (counts.get(day.status) ?? 0) + 1);
|
|
21
|
+
return counts;
|
|
22
|
+
}
|
|
23
|
+
export function formatAudit(input) {
|
|
24
|
+
const { employee, startOn, endOn, ledger, coverage, toleranceMinutes, format } = input;
|
|
25
|
+
const counts = countStatuses(ledger);
|
|
26
|
+
const expected = ledger.reduce((sum, d) => sum + d.expected_minutes, 0);
|
|
27
|
+
const tracked = ledger.reduce((sum, d) => sum + d.tracked_minutes, 0);
|
|
28
|
+
const summary = [...counts.entries()].map(([k, v]) => `${v} ${k}`).join(', ');
|
|
29
|
+
const header = `Attendance audit for ${employee.name} (${employee.id}), ${startOn} to ${endOn}\n` +
|
|
30
|
+
`Expected ${hours(expected)} across the range, tracked ${hours(tracked)}; days: ${summary}.\n` +
|
|
31
|
+
`${formatCoverage(coverage)}\n` +
|
|
32
|
+
'Expected comes from the contract pattern; day type and bank holidays from the company ' +
|
|
33
|
+
'calendar in Factorial; leave from approved timeoff records. Times are HH:MM company local. ' +
|
|
34
|
+
`A day within ${toleranceMinutes} minutes of its expected total counts as complete.`;
|
|
35
|
+
if (format === 'json') {
|
|
36
|
+
return `${header}\n\nMachine-readable ledger:\n${JSON.stringify(ledger)}`;
|
|
37
|
+
}
|
|
38
|
+
const listed = format === 'table' ? ledger : ledger.filter(d => !QUIET_STATUSES.has(d.status));
|
|
39
|
+
const rows = listed.map(ledgerRow);
|
|
40
|
+
const footer = format === 'table'
|
|
41
|
+
? ''
|
|
42
|
+
: `\n\n${listed.length} of ${ledger.length} days listed; complete days, weekends and future dates are ` +
|
|
43
|
+
'only counted above. Pass format: "table" for every day or format: "json" for the ledger.';
|
|
44
|
+
return `${header}\n\n${rows.length > 0 ? rows.join('\n') : ' (nothing needs attention)'}${footer}`;
|
|
45
|
+
}
|
|
46
|
+
/** Text rendering of the `gaps` action, shared with the attendance prompts */
|
|
47
|
+
export function formatGaps(input) {
|
|
48
|
+
const { employee, startOn, endOn, gaps, coverage } = input;
|
|
49
|
+
if (gaps.length === 0) {
|
|
50
|
+
return (`No gaps for ${employee.name} (${employee.id}) between ${startOn} and ${endOn}: ` +
|
|
51
|
+
'every workday not on leave has at least the expected minutes tracked.\n' +
|
|
52
|
+
formatCoverage(coverage));
|
|
53
|
+
}
|
|
54
|
+
const rows = gaps.map(g => ` ${g.date} expected ${hours(g.expected_minutes)} tracked ${hours(g.tracked_minutes)} ` +
|
|
55
|
+
`missing ${hours(g.missing_minutes)}${g.half_day_leave ? ` (half-day leave: ${g.half_day_leave})` : ''}`);
|
|
56
|
+
const total = gaps.reduce((sum, g) => sum + g.missing_minutes, 0);
|
|
57
|
+
return (`${gaps.length} days with missing hours for ${employee.name} (${employee.id}), ${hours(total)} in total.\n` +
|
|
58
|
+
`${formatCoverage(coverage)}\n\n` +
|
|
59
|
+
`${rows.join('\n')}\n\nWeekends, bank holidays and full-day leave are excluded. ` +
|
|
60
|
+
'Use log_range with the same dates and your daily segments to fill them.');
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/attendance/report.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confirmation.d.ts","sourceRoot":"","sources":["../src/confirmation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,4CAA4C;IAC5C,OAAO,EAAE,gBAAgB,CAAC;IAC1B,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wBAAwB;IACxB,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC3F,oCAAoC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,EAAE,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC1D,mCAAmC;IACnC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,oCAAoC;IACpC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,cAAM,mBAAmB;IACvB,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;
|
|
1
|
+
{"version":3,"file":"confirmation.d.ts","sourceRoot":"","sources":["../src/confirmation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,4CAA4C;IAC5C,OAAO,EAAE,gBAAgB,CAAC;IAC1B,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wBAAwB;IACxB,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC3F,oCAAoC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,EAAE,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC1D,mCAAmC;IACnC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,oCAAoC;IACpC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,cAAM,mBAAmB;IACvB,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAIxB,UAAU,SAAiB;IAIvC;;;;;;;OAOG;IACH,kBAAkB,CAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,mBAAmB,GAAG,WAAW,CAAC,GACjE,MAAM;IA0BT;;;;;;OAMG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB;IAkBxC;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAU/B;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAI9B;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAUlD;;OAEG;IACH,OAAO,CAAC,OAAO;IASf;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,eAAe,IAAI,MAAM;CAI1B;AAGD,eAAO,MAAM,mBAAmB,qBAA4B,CAAC;AAE7D;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,gBAAgB,CAAC,WAAW,CAAC,EACxC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,QAAQ,GAAE,MAAM,EAAO,GACtB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,CAW9C"}
|
package/dist/confirmation.js
CHANGED
|
@@ -16,8 +16,9 @@ import { ConfirmationExpiredError } from './errors.js';
|
|
|
16
16
|
class ConfirmationManager {
|
|
17
17
|
pending = new Map();
|
|
18
18
|
tokenTtlMs;
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
// 15 minutes: a human reads the preview, checks a calendar, asks a question,
|
|
20
|
+
// and confirms. Five minutes forced every preview to be regenerated.
|
|
21
|
+
constructor(tokenTtlMs = 15 * 60 * 1000) {
|
|
21
22
|
this.tokenTtlMs = tokenTtlMs;
|
|
22
23
|
}
|
|
23
24
|
/**
|
package/dist/confirmation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confirmation.js","sourceRoot":"","sources":["../src/confirmation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AA0CvD;;;;;GAKG;AACH,MAAM,mBAAmB;IACf,OAAO,GAAG,IAAI,GAAG,EAA4B,CAAC;IACrC,UAAU,CAAS;IAEpC,YAAY,UAAU,GAAG,
|
|
1
|
+
{"version":3,"file":"confirmation.js","sourceRoot":"","sources":["../src/confirmation.ts"],"names":[],"mappings":"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"}
|