@kernhq/module-hr 0.3.0 → 0.5.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/dist/contract/attendance.d.ts +240 -0
- package/dist/contract/attendance.d.ts.map +1 -0
- package/dist/contract/attendance.js +154 -0
- package/dist/contract/attendance.js.map +1 -0
- package/dist/contract/capabilities.d.ts.map +1 -1
- package/dist/contract/capabilities.js +36 -0
- package/dist/contract/capabilities.js.map +1 -1
- package/dist/contract/events.d.ts +18 -0
- package/dist/contract/events.d.ts.map +1 -1
- package/dist/contract/events.js +18 -0
- package/dist/contract/events.js.map +1 -1
- package/dist/contract/index.d.ts +1 -0
- package/dist/contract/index.d.ts.map +1 -1
- package/dist/contract/index.js +1 -0
- package/dist/contract/index.js.map +1 -1
- package/dist/contract/permissions.d.ts +43 -0
- package/dist/contract/permissions.d.ts.map +1 -1
- package/dist/contract/permissions.js +50 -0
- package/dist/contract/permissions.js.map +1 -1
- package/dist/contract/router.d.ts +996 -0
- package/dist/contract/router.d.ts.map +1 -1
- package/dist/contract/router.js +165 -1
- package/dist/contract/router.js.map +1 -1
- package/dist/policy/time.d.ts +48 -0
- package/dist/policy/time.d.ts.map +1 -0
- package/dist/policy/time.js +144 -0
- package/dist/policy/time.js.map +1 -0
- package/dist/policy/working-time.d.ts +98 -0
- package/dist/policy/working-time.d.ts.map +1 -0
- package/dist/policy/working-time.js +190 -0
- package/dist/policy/working-time.js.map +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/jobs.d.ts +16 -0
- package/dist/server/jobs.d.ts.map +1 -0
- package/dist/server/jobs.js +166 -0
- package/dist/server/jobs.js.map +1 -0
- package/dist/server/router.d.ts +1087 -0
- package/dist/server/router.d.ts.map +1 -1
- package/dist/server/router.js +521 -3
- package/dist/server/router.js.map +1 -1
- package/dist/server/schema.d.ts +1261 -1
- package/dist/server/schema.d.ts.map +1 -1
- package/dist/server/schema.js +116 -0
- package/dist/server/schema.js.map +1 -1
- package/dist/server/services/attendance.d.ts +150 -0
- package/dist/server/services/attendance.d.ts.map +1 -0
- package/dist/server/services/attendance.js +239 -0
- package/dist/server/services/attendance.js.map +1 -0
- package/dist/server/services/ledger.d.ts +2 -2
- package/migrations/0003_attendance.sql +206 -0
- package/migrations/meta/0003_snapshot.json +3681 -0
- package/migrations/meta/_journal.json +7 -0
- package/package.json +1 -1
- package/src/client/index.ts +18 -0
- package/src/contract/attendance.ts +180 -0
- package/src/contract/capabilities.ts +36 -0
- package/src/contract/events.ts +24 -0
- package/src/contract/index.ts +1 -0
- package/src/contract/permissions.ts +51 -0
- package/src/contract/router.ts +203 -1
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Attendance: who was at work, when, and for how long.
|
|
4
|
+
*
|
|
5
|
+
* Two rules shape everything here:
|
|
6
|
+
*
|
|
7
|
+
* - **Raw punches are immutable.** A wrong punch is *voided* by a correcting row, never edited. An
|
|
8
|
+
* attendance record somebody can quietly rewrite is worth nothing in the dispute it exists for.
|
|
9
|
+
* - **The day sheet is derived.** `AttendanceDay` is a projection of punches + schedule + calendar +
|
|
10
|
+
* leave, recomputable from scratch at any time. It is never the source of truth, so a bad
|
|
11
|
+
* computation is a bug to fix and re-run rather than data to repair by hand.
|
|
12
|
+
*/
|
|
13
|
+
export declare const PunchDirection: z.ZodEnum<{
|
|
14
|
+
out: "out";
|
|
15
|
+
in: "in";
|
|
16
|
+
break_start: "break_start";
|
|
17
|
+
break_end: "break_end";
|
|
18
|
+
}>;
|
|
19
|
+
export type PunchDirection = z.infer<typeof PunchDirection>;
|
|
20
|
+
export declare const PunchMethod: z.ZodEnum<{
|
|
21
|
+
web: "web";
|
|
22
|
+
mobile: "mobile";
|
|
23
|
+
kiosk: "kiosk";
|
|
24
|
+
qr: "qr";
|
|
25
|
+
device: "device";
|
|
26
|
+
import: "import";
|
|
27
|
+
manual: "manual";
|
|
28
|
+
}>;
|
|
29
|
+
export type PunchMethod = z.infer<typeof PunchMethod>;
|
|
30
|
+
/**
|
|
31
|
+
* How much the recorded instant can be trusted.
|
|
32
|
+
*
|
|
33
|
+
* `trusted` was stamped by the server as it happened. `claimed` came from a client that was offline
|
|
34
|
+
* and is asserting when it happened — believed within a policy threshold, flagged beyond it.
|
|
35
|
+
* `disputed` is a claim somebody has to look at. Client clocks lie, sometimes by accident and
|
|
36
|
+
* sometimes not, and a system that cannot say which is which cannot defend any of its numbers.
|
|
37
|
+
*/
|
|
38
|
+
export declare const PunchTrust: z.ZodEnum<{
|
|
39
|
+
trusted: "trusted";
|
|
40
|
+
claimed: "claimed";
|
|
41
|
+
disputed: "disputed";
|
|
42
|
+
}>;
|
|
43
|
+
export type PunchTrust = z.infer<typeof PunchTrust>;
|
|
44
|
+
export declare const Punch: z.ZodObject<{
|
|
45
|
+
personId: z.ZodUUID;
|
|
46
|
+
direction: z.ZodEnum<{
|
|
47
|
+
out: "out";
|
|
48
|
+
in: "in";
|
|
49
|
+
break_start: "break_start";
|
|
50
|
+
break_end: "break_end";
|
|
51
|
+
}>;
|
|
52
|
+
at: z.ZodISODateTime;
|
|
53
|
+
clientReportedAt: z.ZodNullable<z.ZodISODateTime>;
|
|
54
|
+
skewMs: z.ZodNullable<z.ZodNumber>;
|
|
55
|
+
businessDate: z.ZodISODate;
|
|
56
|
+
timezone: z.ZodString;
|
|
57
|
+
method: z.ZodEnum<{
|
|
58
|
+
web: "web";
|
|
59
|
+
mobile: "mobile";
|
|
60
|
+
kiosk: "kiosk";
|
|
61
|
+
qr: "qr";
|
|
62
|
+
device: "device";
|
|
63
|
+
import: "import";
|
|
64
|
+
manual: "manual";
|
|
65
|
+
}>;
|
|
66
|
+
officeId: z.ZodNullable<z.ZodUUID>;
|
|
67
|
+
deviceId: z.ZodNullable<z.ZodUUID>;
|
|
68
|
+
geo: z.ZodNullable<z.ZodObject<{
|
|
69
|
+
lat: z.ZodNumber;
|
|
70
|
+
lng: z.ZodNumber;
|
|
71
|
+
accuracyM: z.ZodOptional<z.ZodNumber>;
|
|
72
|
+
}, z.core.$strip>>;
|
|
73
|
+
trust: z.ZodEnum<{
|
|
74
|
+
trusted: "trusted";
|
|
75
|
+
claimed: "claimed";
|
|
76
|
+
disputed: "disputed";
|
|
77
|
+
}>;
|
|
78
|
+
voidedByPunchId: z.ZodNullable<z.ZodUUID>;
|
|
79
|
+
note: z.ZodNullable<z.ZodString>;
|
|
80
|
+
createdAt: z.ZodISODateTime;
|
|
81
|
+
workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
|
|
82
|
+
id: z.ZodUUID;
|
|
83
|
+
}, z.core.$strip>;
|
|
84
|
+
export type Punch = z.infer<typeof Punch>;
|
|
85
|
+
export declare const AttendanceStatus: z.ZodEnum<{
|
|
86
|
+
leave: "leave";
|
|
87
|
+
pending: "pending";
|
|
88
|
+
present: "present";
|
|
89
|
+
absent: "absent";
|
|
90
|
+
holiday: "holiday";
|
|
91
|
+
weekend: "weekend";
|
|
92
|
+
partial: "partial";
|
|
93
|
+
}>;
|
|
94
|
+
export type AttendanceStatus = z.infer<typeof AttendanceStatus>;
|
|
95
|
+
/**
|
|
96
|
+
* One person, one day, derived.
|
|
97
|
+
*
|
|
98
|
+
* Recomputable from punches, schedule, calendar and leave at any moment. `policyHash` records what
|
|
99
|
+
* produced it, so a recomputation can tell whether a row is stale; `locked` mirrors the period, so
|
|
100
|
+
* a closed month cannot silently move.
|
|
101
|
+
*/
|
|
102
|
+
export declare const AttendanceDay: z.ZodObject<{
|
|
103
|
+
personId: z.ZodUUID;
|
|
104
|
+
businessDate: z.ZodISODate;
|
|
105
|
+
scheduledMinutes: z.ZodNumber;
|
|
106
|
+
workedMinutes: z.ZodNumber;
|
|
107
|
+
breakMinutes: z.ZodNumber;
|
|
108
|
+
overtimeMinutes: z.ZodNumber;
|
|
109
|
+
lateMinutes: z.ZodNumber;
|
|
110
|
+
earlyLeaveMinutes: z.ZodNumber;
|
|
111
|
+
status: z.ZodEnum<{
|
|
112
|
+
leave: "leave";
|
|
113
|
+
pending: "pending";
|
|
114
|
+
present: "present";
|
|
115
|
+
absent: "absent";
|
|
116
|
+
holiday: "holiday";
|
|
117
|
+
weekend: "weekend";
|
|
118
|
+
partial: "partial";
|
|
119
|
+
}>;
|
|
120
|
+
leaveRequestId: z.ZodNullable<z.ZodUUID>;
|
|
121
|
+
anomalies: z.ZodArray<z.ZodString>;
|
|
122
|
+
firstIn: z.ZodNullable<z.ZodISODateTime>;
|
|
123
|
+
lastOut: z.ZodNullable<z.ZodISODateTime>;
|
|
124
|
+
policyHash: z.ZodNullable<z.ZodString>;
|
|
125
|
+
locked: z.ZodBoolean;
|
|
126
|
+
computedAt: z.ZodISODateTime;
|
|
127
|
+
workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
|
|
128
|
+
id: z.ZodUUID;
|
|
129
|
+
}, z.core.$strip>;
|
|
130
|
+
export type AttendanceDay = z.infer<typeof AttendanceDay>;
|
|
131
|
+
/** A week of shifts, in wall-clock readings. Meaningless until a date and a zone arrive. */
|
|
132
|
+
export declare const ScheduleWeek: z.ZodRecord<z.ZodEnum<{
|
|
133
|
+
mon: "mon";
|
|
134
|
+
tue: "tue";
|
|
135
|
+
wed: "wed";
|
|
136
|
+
thu: "thu";
|
|
137
|
+
fri: "fri";
|
|
138
|
+
sat: "sat";
|
|
139
|
+
sun: "sun";
|
|
140
|
+
}>, z.ZodNullable<z.ZodObject<{
|
|
141
|
+
start: z.ZodString;
|
|
142
|
+
end: z.ZodString;
|
|
143
|
+
breakMinutes: z.ZodDefault<z.ZodNumber>;
|
|
144
|
+
}, z.core.$strip>>>;
|
|
145
|
+
export type ScheduleWeek = z.infer<typeof ScheduleWeek>;
|
|
146
|
+
export declare const Schedule: z.ZodObject<{
|
|
147
|
+
name: z.ZodString;
|
|
148
|
+
kind: z.ZodEnum<{
|
|
149
|
+
fixed: "fixed";
|
|
150
|
+
flexible: "flexible";
|
|
151
|
+
shift: "shift";
|
|
152
|
+
}>;
|
|
153
|
+
week: z.ZodRecord<z.ZodEnum<{
|
|
154
|
+
mon: "mon";
|
|
155
|
+
tue: "tue";
|
|
156
|
+
wed: "wed";
|
|
157
|
+
thu: "thu";
|
|
158
|
+
fri: "fri";
|
|
159
|
+
sat: "sat";
|
|
160
|
+
sun: "sun";
|
|
161
|
+
}>, z.ZodNullable<z.ZodObject<{
|
|
162
|
+
start: z.ZodString;
|
|
163
|
+
end: z.ZodString;
|
|
164
|
+
breakMinutes: z.ZodDefault<z.ZodNumber>;
|
|
165
|
+
}, z.core.$strip>>>;
|
|
166
|
+
tzMode: z.ZodEnum<{
|
|
167
|
+
person: "person";
|
|
168
|
+
office: "office";
|
|
169
|
+
fixed: "fixed";
|
|
170
|
+
}>;
|
|
171
|
+
tz: z.ZodNullable<z.ZodString>;
|
|
172
|
+
graceInMinutes: z.ZodNumber;
|
|
173
|
+
graceOutMinutes: z.ZodNumber;
|
|
174
|
+
roundingStepMinutes: z.ZodNumber;
|
|
175
|
+
roundingDirection: z.ZodEnum<{
|
|
176
|
+
nearest: "nearest";
|
|
177
|
+
employee: "employee";
|
|
178
|
+
employer: "employer";
|
|
179
|
+
}>;
|
|
180
|
+
autoClockOutAfterMinutes: z.ZodNullable<z.ZodNumber>;
|
|
181
|
+
archivedAt: z.ZodNullable<z.ZodISODateTime>;
|
|
182
|
+
workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
|
|
183
|
+
id: z.ZodUUID;
|
|
184
|
+
}, z.core.$strip>;
|
|
185
|
+
export type Schedule = z.infer<typeof Schedule>;
|
|
186
|
+
export declare const ScheduleAssignment: z.ZodObject<{
|
|
187
|
+
personId: z.ZodUUID;
|
|
188
|
+
scheduleId: z.ZodUUID;
|
|
189
|
+
effectiveFrom: z.ZodISODate;
|
|
190
|
+
effectiveTo: z.ZodNullable<z.ZodISODate>;
|
|
191
|
+
workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
|
|
192
|
+
id: z.ZodUUID;
|
|
193
|
+
}, z.core.$strip>;
|
|
194
|
+
export type ScheduleAssignment = z.infer<typeof ScheduleAssignment>;
|
|
195
|
+
/**
|
|
196
|
+
* A request to fix a wrong or missing punch.
|
|
197
|
+
*
|
|
198
|
+
* It does not edit anything. Approving it writes *new* punches that void the old ones, so the
|
|
199
|
+
* original record and the correction both survive — which is the difference between a corrected
|
|
200
|
+
* timesheet and an edited one.
|
|
201
|
+
*/
|
|
202
|
+
export declare const Regularization: z.ZodObject<{
|
|
203
|
+
personId: z.ZodUUID;
|
|
204
|
+
businessDate: z.ZodISODate;
|
|
205
|
+
punchId: z.ZodNullable<z.ZodUUID>;
|
|
206
|
+
proposed: z.ZodArray<z.ZodObject<{
|
|
207
|
+
direction: z.ZodEnum<{
|
|
208
|
+
out: "out";
|
|
209
|
+
in: "in";
|
|
210
|
+
break_start: "break_start";
|
|
211
|
+
break_end: "break_end";
|
|
212
|
+
}>;
|
|
213
|
+
at: z.ZodISODateTime;
|
|
214
|
+
}, z.core.$strip>>;
|
|
215
|
+
reason: z.ZodString;
|
|
216
|
+
status: z.ZodEnum<{
|
|
217
|
+
pending: "pending";
|
|
218
|
+
approved: "approved";
|
|
219
|
+
rejected: "rejected";
|
|
220
|
+
cancelled: "cancelled";
|
|
221
|
+
}>;
|
|
222
|
+
approvalRequestId: z.ZodNullable<z.ZodUUID>;
|
|
223
|
+
appliedAt: z.ZodNullable<z.ZodISODateTime>;
|
|
224
|
+
createdAt: z.ZodISODateTime;
|
|
225
|
+
workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
|
|
226
|
+
id: z.ZodUUID;
|
|
227
|
+
}, z.core.$strip>;
|
|
228
|
+
export type Regularization = z.infer<typeof Regularization>;
|
|
229
|
+
/** The person's own live state: are they clocked in, since when, on a break? */
|
|
230
|
+
export declare const ClockState: z.ZodObject<{
|
|
231
|
+
personId: z.ZodUUID;
|
|
232
|
+
businessDate: z.ZodISODate;
|
|
233
|
+
clockedIn: z.ZodBoolean;
|
|
234
|
+
onBreak: z.ZodBoolean;
|
|
235
|
+
since: z.ZodNullable<z.ZodISODateTime>;
|
|
236
|
+
workedMinutesToday: z.ZodNumber;
|
|
237
|
+
timezone: z.ZodString;
|
|
238
|
+
}, z.core.$strip>;
|
|
239
|
+
export type ClockState = z.infer<typeof ClockState>;
|
|
240
|
+
//# sourceMappingURL=attendance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attendance.d.ts","sourceRoot":"","sources":["../../src/contract/attendance.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,cAAc;;;;;EAAoD,CAAA;AAC/E,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAE3D,eAAO,MAAM,WAAW;;;;;;;;EAAyE,CAAA;AACjG,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AAErD;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU;;;;EAA6C,CAAA;AACpE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA;AAEnD,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyBhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,CAAA;AAEzC,eAAO,MAAM,gBAAgB;;;;;;;;EAS3B,CAAA;AACF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAE/D;;;;;;GAMG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmBxB,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAA;AAEzD,4FAA4F;AAC5F,eAAO,MAAM,YAAY;;;;;;;;;;;;mBASxB,CAAA;AACD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AAEvD,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgBnB,CAAA;AACF,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA;AAE/C,eAAO,MAAM,kBAAkB;;;;;;;iBAO7B,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEnE;;;;;;GAMG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;iBAazB,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAE3D,gFAAgF;AAChF,eAAO,MAAM,UAAU;;;;;;;;iBAQrB,CAAA;AACF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { Timestamp, WorkspaceId } from '@kernhq/contracts';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { IsoDate, TimeZone, WallClock } from './models.js';
|
|
4
|
+
const ws = { workspaceId: WorkspaceId };
|
|
5
|
+
/**
|
|
6
|
+
* Attendance: who was at work, when, and for how long.
|
|
7
|
+
*
|
|
8
|
+
* Two rules shape everything here:
|
|
9
|
+
*
|
|
10
|
+
* - **Raw punches are immutable.** A wrong punch is *voided* by a correcting row, never edited. An
|
|
11
|
+
* attendance record somebody can quietly rewrite is worth nothing in the dispute it exists for.
|
|
12
|
+
* - **The day sheet is derived.** `AttendanceDay` is a projection of punches + schedule + calendar +
|
|
13
|
+
* leave, recomputable from scratch at any time. It is never the source of truth, so a bad
|
|
14
|
+
* computation is a bug to fix and re-run rather than data to repair by hand.
|
|
15
|
+
*/
|
|
16
|
+
export const PunchDirection = z.enum(['in', 'out', 'break_start', 'break_end']);
|
|
17
|
+
export const PunchMethod = z.enum(['web', 'mobile', 'kiosk', 'qr', 'device', 'import', 'manual']);
|
|
18
|
+
/**
|
|
19
|
+
* How much the recorded instant can be trusted.
|
|
20
|
+
*
|
|
21
|
+
* `trusted` was stamped by the server as it happened. `claimed` came from a client that was offline
|
|
22
|
+
* and is asserting when it happened — believed within a policy threshold, flagged beyond it.
|
|
23
|
+
* `disputed` is a claim somebody has to look at. Client clocks lie, sometimes by accident and
|
|
24
|
+
* sometimes not, and a system that cannot say which is which cannot defend any of its numbers.
|
|
25
|
+
*/
|
|
26
|
+
export const PunchTrust = z.enum(['trusted', 'claimed', 'disputed']);
|
|
27
|
+
export const Punch = z.object({
|
|
28
|
+
id: z.uuid(),
|
|
29
|
+
...ws,
|
|
30
|
+
personId: z.uuid(),
|
|
31
|
+
direction: PunchDirection,
|
|
32
|
+
/** Server-stamped, or the client's claim when it was offline. Always an instant, never a local time. */
|
|
33
|
+
at: Timestamp,
|
|
34
|
+
/** What the client believed the time was. Kept for audit even when it disagrees. */
|
|
35
|
+
clientReportedAt: Timestamp.nullable(),
|
|
36
|
+
/** How far the client's clock was out, in milliseconds. Null when the server stamped it. */
|
|
37
|
+
skewMs: z.number().int().nullable(),
|
|
38
|
+
/** The day this belongs to, in the person's schedule zone. A night shift lands on its start date. */
|
|
39
|
+
businessDate: IsoDate,
|
|
40
|
+
/** The zone the punch actually happened in — for audit, not for attribution. */
|
|
41
|
+
timezone: TimeZone,
|
|
42
|
+
method: PunchMethod,
|
|
43
|
+
/** The office whose geofence or allowlist accepted it; any office the person is assigned to. */
|
|
44
|
+
officeId: z.uuid().nullable(),
|
|
45
|
+
deviceId: z.uuid().nullable(),
|
|
46
|
+
geo: z.object({ lat: z.number(), lng: z.number(), accuracyM: z.number().optional() }).nullable(),
|
|
47
|
+
trust: PunchTrust,
|
|
48
|
+
/** Set when a later correction voided this row. The row itself never changes otherwise. */
|
|
49
|
+
voidedByPunchId: z.uuid().nullable(),
|
|
50
|
+
note: z.string().max(500).nullable(),
|
|
51
|
+
createdAt: Timestamp,
|
|
52
|
+
});
|
|
53
|
+
export const AttendanceStatus = z.enum([
|
|
54
|
+
'present',
|
|
55
|
+
'absent',
|
|
56
|
+
'leave',
|
|
57
|
+
'holiday',
|
|
58
|
+
'weekend',
|
|
59
|
+
'partial',
|
|
60
|
+
/** Something is unpaired — usually a missing clock-out. Needs a human. */
|
|
61
|
+
'pending',
|
|
62
|
+
]);
|
|
63
|
+
/**
|
|
64
|
+
* One person, one day, derived.
|
|
65
|
+
*
|
|
66
|
+
* Recomputable from punches, schedule, calendar and leave at any moment. `policyHash` records what
|
|
67
|
+
* produced it, so a recomputation can tell whether a row is stale; `locked` mirrors the period, so
|
|
68
|
+
* a closed month cannot silently move.
|
|
69
|
+
*/
|
|
70
|
+
export const AttendanceDay = z.object({
|
|
71
|
+
id: z.uuid(),
|
|
72
|
+
...ws,
|
|
73
|
+
personId: z.uuid(),
|
|
74
|
+
businessDate: IsoDate,
|
|
75
|
+
scheduledMinutes: z.number().int(),
|
|
76
|
+
workedMinutes: z.number().int(),
|
|
77
|
+
breakMinutes: z.number().int(),
|
|
78
|
+
overtimeMinutes: z.number().int(),
|
|
79
|
+
lateMinutes: z.number().int(),
|
|
80
|
+
earlyLeaveMinutes: z.number().int(),
|
|
81
|
+
status: AttendanceStatus,
|
|
82
|
+
leaveRequestId: z.uuid().nullable(),
|
|
83
|
+
anomalies: z.array(z.string()),
|
|
84
|
+
firstIn: Timestamp.nullable(),
|
|
85
|
+
lastOut: Timestamp.nullable(),
|
|
86
|
+
policyHash: z.string().max(64).nullable(),
|
|
87
|
+
locked: z.boolean(),
|
|
88
|
+
computedAt: Timestamp,
|
|
89
|
+
});
|
|
90
|
+
/** A week of shifts, in wall-clock readings. Meaningless until a date and a zone arrive. */
|
|
91
|
+
export const ScheduleWeek = z.record(z.enum(['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun']), z
|
|
92
|
+
.object({
|
|
93
|
+
start: WallClock,
|
|
94
|
+
end: WallClock,
|
|
95
|
+
breakMinutes: z.number().int().min(0).max(480).default(0),
|
|
96
|
+
})
|
|
97
|
+
.nullable());
|
|
98
|
+
export const Schedule = z.object({
|
|
99
|
+
id: z.uuid(),
|
|
100
|
+
...ws,
|
|
101
|
+
name: z.string().min(1).max(120),
|
|
102
|
+
kind: z.enum(['fixed', 'flexible', 'shift']),
|
|
103
|
+
week: ScheduleWeek,
|
|
104
|
+
/** `office` means the person's primary office — the default, and almost always right. */
|
|
105
|
+
tzMode: z.enum(['office', 'person', 'fixed']),
|
|
106
|
+
tz: TimeZone.nullable(),
|
|
107
|
+
graceInMinutes: z.number().int().min(0).max(240),
|
|
108
|
+
graceOutMinutes: z.number().int().min(0).max(240),
|
|
109
|
+
roundingStepMinutes: z.number().int().min(0).max(60),
|
|
110
|
+
roundingDirection: z.enum(['nearest', 'employee', 'employer']),
|
|
111
|
+
/** Close an open shift automatically after this many minutes. Null leaves it for a human. */
|
|
112
|
+
autoClockOutAfterMinutes: z.number().int().min(60).nullable(),
|
|
113
|
+
archivedAt: Timestamp.nullable(),
|
|
114
|
+
});
|
|
115
|
+
export const ScheduleAssignment = z.object({
|
|
116
|
+
id: z.uuid(),
|
|
117
|
+
...ws,
|
|
118
|
+
personId: z.uuid(),
|
|
119
|
+
scheduleId: z.uuid(),
|
|
120
|
+
effectiveFrom: IsoDate,
|
|
121
|
+
effectiveTo: IsoDate.nullable(),
|
|
122
|
+
});
|
|
123
|
+
/**
|
|
124
|
+
* A request to fix a wrong or missing punch.
|
|
125
|
+
*
|
|
126
|
+
* It does not edit anything. Approving it writes *new* punches that void the old ones, so the
|
|
127
|
+
* original record and the correction both survive — which is the difference between a corrected
|
|
128
|
+
* timesheet and an edited one.
|
|
129
|
+
*/
|
|
130
|
+
export const Regularization = z.object({
|
|
131
|
+
id: z.uuid(),
|
|
132
|
+
...ws,
|
|
133
|
+
personId: z.uuid(),
|
|
134
|
+
businessDate: IsoDate,
|
|
135
|
+
/** Null when the person never punched at all and is asking for the whole day to be recorded. */
|
|
136
|
+
punchId: z.uuid().nullable(),
|
|
137
|
+
proposed: z.array(z.object({ direction: PunchDirection, at: Timestamp })),
|
|
138
|
+
reason: z.string().min(1).max(1000),
|
|
139
|
+
status: z.enum(['pending', 'approved', 'rejected', 'cancelled']),
|
|
140
|
+
approvalRequestId: z.uuid().nullable(),
|
|
141
|
+
appliedAt: Timestamp.nullable(),
|
|
142
|
+
createdAt: Timestamp,
|
|
143
|
+
});
|
|
144
|
+
/** The person's own live state: are they clocked in, since when, on a break? */
|
|
145
|
+
export const ClockState = z.object({
|
|
146
|
+
personId: z.uuid(),
|
|
147
|
+
businessDate: IsoDate,
|
|
148
|
+
clockedIn: z.boolean(),
|
|
149
|
+
onBreak: z.boolean(),
|
|
150
|
+
since: Timestamp.nullable(),
|
|
151
|
+
workedMinutesToday: z.number().int(),
|
|
152
|
+
timezone: TimeZone,
|
|
153
|
+
});
|
|
154
|
+
//# sourceMappingURL=attendance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attendance.js","sourceRoot":"","sources":["../../src/contract/attendance.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/contract/capabilities.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,cAAc;;;;;;;;
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/contract/capabilities.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,cAAc;;;;;;;;GAuFzB,CAAA;AAEF,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAA;AAElE;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAsEpE,CAAA"}
|
|
@@ -83,6 +83,24 @@ export const hrCapabilities = defineCapabilities([
|
|
|
83
83
|
defaultEnabled: false,
|
|
84
84
|
level: 2,
|
|
85
85
|
},
|
|
86
|
+
{
|
|
87
|
+
id: 'attendance',
|
|
88
|
+
label: 'Attendance',
|
|
89
|
+
description: 'Clock in and out, schedules and a daily sheet',
|
|
90
|
+
dependsOn: ['core', 'calendars'],
|
|
91
|
+
// Off by default. Plenty of companies never clock anybody in, and a directory that offers a
|
|
92
|
+
// clock button to salaried staff is offering a feature nobody asked for.
|
|
93
|
+
defaultEnabled: false,
|
|
94
|
+
level: 1,
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
id: 'overtime',
|
|
98
|
+
label: 'Overtime',
|
|
99
|
+
description: 'Detect and approve time worked beyond the schedule',
|
|
100
|
+
dependsOn: ['attendance'],
|
|
101
|
+
defaultEnabled: false,
|
|
102
|
+
level: 2,
|
|
103
|
+
},
|
|
86
104
|
{
|
|
87
105
|
id: 'documents',
|
|
88
106
|
label: 'Employee documents',
|
|
@@ -145,6 +163,24 @@ export const hrCapabilityProcedures = {
|
|
|
145
163
|
'leave.requests.cancel',
|
|
146
164
|
'leave.team.calendar',
|
|
147
165
|
],
|
|
166
|
+
attendance: [
|
|
167
|
+
'attendance.state',
|
|
168
|
+
'attendance.clockIn',
|
|
169
|
+
'attendance.clockOut',
|
|
170
|
+
'attendance.breakStart',
|
|
171
|
+
'attendance.breakEnd',
|
|
172
|
+
'attendance.punches.list',
|
|
173
|
+
'attendance.punches.void',
|
|
174
|
+
'attendance.days.list',
|
|
175
|
+
'attendance.days.recompute',
|
|
176
|
+
'attendance.schedules.list',
|
|
177
|
+
'attendance.schedules.create',
|
|
178
|
+
'attendance.schedules.update',
|
|
179
|
+
'attendance.schedules.archive',
|
|
180
|
+
'attendance.schedules.assign',
|
|
181
|
+
'attendance.regularizations.list',
|
|
182
|
+
'attendance.regularizations.request',
|
|
183
|
+
],
|
|
148
184
|
approvals: [
|
|
149
185
|
'approvals.chains.list',
|
|
150
186
|
'approvals.chains.create',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/contract/capabilities.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/contract/capabilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -106,6 +106,24 @@ export declare const hrEvents: {
|
|
|
106
106
|
subjectId: z.ZodUUID;
|
|
107
107
|
status: z.ZodString;
|
|
108
108
|
}, z.core.$strip>>;
|
|
109
|
+
punchRecorded: import("@kernhq/contracts").EventDef<"hr.punch.recorded", z.ZodObject<{
|
|
110
|
+
punchId: z.ZodUUID;
|
|
111
|
+
workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
|
|
112
|
+
personId: z.ZodUUID;
|
|
113
|
+
direction: z.ZodString;
|
|
114
|
+
businessDate: z.ZodISODate;
|
|
115
|
+
}, z.core.$strip>>;
|
|
116
|
+
/**
|
|
117
|
+
* A derived day changed. Carries the date so a consumer recomputes that window rather than
|
|
118
|
+
* everything — this fires on every punch, so a coarse payload would be a stampede.
|
|
119
|
+
*/
|
|
120
|
+
attendanceDayComputed: import("@kernhq/contracts").EventDef<"hr.attendance.day_computed", z.ZodObject<{
|
|
121
|
+
workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
|
|
122
|
+
personId: z.ZodUUID;
|
|
123
|
+
businessDate: z.ZodISODate;
|
|
124
|
+
status: z.ZodString;
|
|
125
|
+
workedMinutes: z.ZodNumber;
|
|
126
|
+
}, z.core.$strip>>;
|
|
109
127
|
calendarChanged: import("@kernhq/contracts").EventDef<"hr.calendar.changed", z.ZodObject<{
|
|
110
128
|
calendarId: z.ZodUUID;
|
|
111
129
|
workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/contract/events.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;IASnB;;;;;;OAMG;;;;;;;;;;;;;;IAoBH;;;;;OAKG;;;;;;;;;;;;;IAeH;;;;;;OAMG;;;;;;;;IAWH;;;;;OAKG;;;;;;;;;IAYH,mFAAmF
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/contract/events.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;IASnB;;;;;;OAMG;;;;;;;;;;;;;;IAoBH;;;;;OAKG;;;;;;;;;;;;;IAeH;;;;;;OAMG;;;;;;;;IAWH;;;;;OAKG;;;;;;;;;IAYH,mFAAmF;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAwCnF;;;OAGG;;;;;;;;;;;;;;CAoBJ,CAAA"}
|
package/dist/contract/events.js
CHANGED
|
@@ -95,6 +95,24 @@ export const hrEvents = {
|
|
|
95
95
|
subjectId: z.uuid(),
|
|
96
96
|
status: z.string(),
|
|
97
97
|
})),
|
|
98
|
+
punchRecorded: defineEvent('hr.punch.recorded', z.object({
|
|
99
|
+
punchId: z.uuid(),
|
|
100
|
+
workspaceId: WorkspaceId,
|
|
101
|
+
personId: z.uuid(),
|
|
102
|
+
direction: z.string(),
|
|
103
|
+
businessDate: z.iso.date(),
|
|
104
|
+
})),
|
|
105
|
+
/**
|
|
106
|
+
* A derived day changed. Carries the date so a consumer recomputes that window rather than
|
|
107
|
+
* everything — this fires on every punch, so a coarse payload would be a stampede.
|
|
108
|
+
*/
|
|
109
|
+
attendanceDayComputed: defineEvent('hr.attendance.day_computed', z.object({
|
|
110
|
+
workspaceId: WorkspaceId,
|
|
111
|
+
personId: z.uuid(),
|
|
112
|
+
businessDate: z.iso.date(),
|
|
113
|
+
status: z.string(),
|
|
114
|
+
workedMinutes: z.number().int(),
|
|
115
|
+
})),
|
|
98
116
|
calendarChanged: defineEvent('hr.calendar.changed', z.object({
|
|
99
117
|
calendarId: z.uuid(),
|
|
100
118
|
workspaceId: WorkspaceId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/contract/events.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/contract/events.ts"],"names":[],"mappings":"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"}
|
package/dist/contract/index.d.ts
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* and also that every procedure listed in `hrCapabilityProcedures` carries its capability guard.
|
|
8
8
|
*/
|
|
9
9
|
export * from './approvals.js';
|
|
10
|
+
export * from './attendance.js';
|
|
10
11
|
export * from './capabilities.js';
|
|
11
12
|
export * from './events.js';
|
|
12
13
|
export * from './leave.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contract/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contract/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA"}
|
package/dist/contract/index.js
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* and also that every procedure listed in `hrCapabilityProcedures` carries its capability guard.
|
|
8
8
|
*/
|
|
9
9
|
export * from './approvals.js';
|
|
10
|
+
export * from './attendance.js';
|
|
10
11
|
export * from './capabilities.js';
|
|
11
12
|
export * from './events.js';
|
|
12
13
|
export * from './leave.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contract/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contract/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA"}
|
|
@@ -177,6 +177,43 @@ export declare const hrPermissions: readonly [{
|
|
|
177
177
|
readonly scope: "workspace";
|
|
178
178
|
readonly defaultRoles: [];
|
|
179
179
|
readonly dangerous: true;
|
|
180
|
+
}, {
|
|
181
|
+
readonly key: "hr.attendance.punch";
|
|
182
|
+
readonly label: "Clock yourself in and out";
|
|
183
|
+
readonly scope: "workspace";
|
|
184
|
+
readonly defaultRoles: ["owner", "admin", "member"];
|
|
185
|
+
readonly dangerous: false;
|
|
186
|
+
}, {
|
|
187
|
+
readonly key: "hr.attendance.view";
|
|
188
|
+
readonly label: "View your own attendance";
|
|
189
|
+
readonly scope: "workspace";
|
|
190
|
+
readonly defaultRoles: ["owner", "admin", "member"];
|
|
191
|
+
readonly dangerous: false;
|
|
192
|
+
}, {
|
|
193
|
+
readonly key: "hr.attendance.view_team";
|
|
194
|
+
readonly label: "View your team's attendance";
|
|
195
|
+
readonly scope: "object";
|
|
196
|
+
readonly defaultRoles: ["owner", "admin"];
|
|
197
|
+
readonly dangerous: false;
|
|
198
|
+
}, {
|
|
199
|
+
readonly key: "hr.attendance.manage";
|
|
200
|
+
readonly label: "Correct punches, schedules and day sheets";
|
|
201
|
+
readonly description: "Voids punches and recomputes days. Every change leaves the original visible.";
|
|
202
|
+
readonly scope: "workspace";
|
|
203
|
+
readonly defaultRoles: ["owner", "admin"];
|
|
204
|
+
readonly dangerous: true;
|
|
205
|
+
}, {
|
|
206
|
+
readonly key: "hr.overtime.view";
|
|
207
|
+
readonly label: "View overtime";
|
|
208
|
+
readonly scope: "workspace";
|
|
209
|
+
readonly defaultRoles: ["owner", "admin"];
|
|
210
|
+
readonly dangerous: false;
|
|
211
|
+
}, {
|
|
212
|
+
readonly key: "hr.overtime.manage";
|
|
213
|
+
readonly label: "Approve and adjust overtime";
|
|
214
|
+
readonly scope: "workspace";
|
|
215
|
+
readonly defaultRoles: ["owner", "admin"];
|
|
216
|
+
readonly dangerous: false;
|
|
180
217
|
}, {
|
|
181
218
|
readonly key: "hr.approval.manage";
|
|
182
219
|
readonly label: "Configure approval chains";
|
|
@@ -225,6 +262,12 @@ export declare const HR_PERMISSIONS: {
|
|
|
225
262
|
readonly leaveViewLedger: "hr.leave.view_ledger";
|
|
226
263
|
readonly leaveManage: "hr.leave.manage";
|
|
227
264
|
readonly leaveAdjust: "hr.leave.adjust";
|
|
265
|
+
readonly attendancePunch: "hr.attendance.punch";
|
|
266
|
+
readonly attendanceView: "hr.attendance.view";
|
|
267
|
+
readonly attendanceViewTeam: "hr.attendance.view_team";
|
|
268
|
+
readonly attendanceManage: "hr.attendance.manage";
|
|
269
|
+
readonly overtimeView: "hr.overtime.view";
|
|
270
|
+
readonly overtimeManage: "hr.overtime.manage";
|
|
228
271
|
readonly approvalManage: "hr.approval.manage";
|
|
229
272
|
readonly approvalDelegate: "hr.approval.delegate";
|
|
230
273
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/contract/permissions.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,aAAa
|
|
1
|
+
{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/contract/permissions.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoRxB,CAAA;AAEF,+DAA+D;AAC/D,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCjB,CAAA"}
|