@kernhq/module-hr 0.1.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.
Files changed (75) hide show
  1. package/LICENSE +662 -0
  2. package/README.md +71 -0
  3. package/dist/contract/capabilities.d.ts +45 -0
  4. package/dist/contract/capabilities.d.ts.map +1 -0
  5. package/dist/contract/capabilities.js +114 -0
  6. package/dist/contract/capabilities.js.map +1 -0
  7. package/dist/contract/events.d.ts +74 -0
  8. package/dist/contract/events.d.ts.map +1 -0
  9. package/dist/contract/events.js +63 -0
  10. package/dist/contract/events.js.map +1 -0
  11. package/dist/contract/index.d.ts +15 -0
  12. package/dist/contract/index.d.ts.map +1 -0
  13. package/dist/contract/index.js +15 -0
  14. package/dist/contract/index.js.map +1 -0
  15. package/dist/contract/models.d.ts +457 -0
  16. package/dist/contract/models.d.ts.map +1 -0
  17. package/dist/contract/models.js +381 -0
  18. package/dist/contract/models.js.map +1 -0
  19. package/dist/contract/permissions.d.ts +174 -0
  20. package/dist/contract/permissions.d.ts.map +1 -0
  21. package/dist/contract/permissions.js +209 -0
  22. package/dist/contract/permissions.js.map +1 -0
  23. package/dist/contract/router.d.ts +2720 -0
  24. package/dist/contract/router.d.ts.map +1 -0
  25. package/dist/contract/router.js +520 -0
  26. package/dist/contract/router.js.map +1 -0
  27. package/dist/contract/settings.d.ts +20 -0
  28. package/dist/contract/settings.d.ts.map +1 -0
  29. package/dist/contract/settings.js +34 -0
  30. package/dist/contract/settings.js.map +1 -0
  31. package/dist/policy/calendar.d.ts +64 -0
  32. package/dist/policy/calendar.d.ts.map +1 -0
  33. package/dist/policy/calendar.js +113 -0
  34. package/dist/policy/calendar.js.map +1 -0
  35. package/dist/server/index.d.ts +8 -0
  36. package/dist/server/index.d.ts.map +1 -0
  37. package/dist/server/index.js +141 -0
  38. package/dist/server/index.js.map +1 -0
  39. package/dist/server/packs/index.d.ts +50 -0
  40. package/dist/server/packs/index.d.ts.map +1 -0
  41. package/dist/server/packs/index.js +121 -0
  42. package/dist/server/packs/index.js.map +1 -0
  43. package/dist/server/router.d.ts +3095 -0
  44. package/dist/server/router.d.ts.map +1 -0
  45. package/dist/server/router.js +1537 -0
  46. package/dist/server/router.js.map +1 -0
  47. package/dist/server/schema.d.ts +2828 -0
  48. package/dist/server/schema.d.ts.map +1 -0
  49. package/dist/server/schema.js +313 -0
  50. package/dist/server/schema.js.map +1 -0
  51. package/dist/server/services/db.d.ts +22 -0
  52. package/dist/server/services/db.d.ts.map +1 -0
  53. package/dist/server/services/db.js +23 -0
  54. package/dist/server/services/db.js.map +1 -0
  55. package/dist/server/services/people.d.ts +110 -0
  56. package/dist/server/services/people.d.ts.map +1 -0
  57. package/dist/server/services/people.js +182 -0
  58. package/dist/server/services/people.js.map +1 -0
  59. package/dist/server/services/resolve.d.ts +66 -0
  60. package/dist/server/services/resolve.d.ts.map +1 -0
  61. package/dist/server/services/resolve.js +145 -0
  62. package/dist/server/services/resolve.js.map +1 -0
  63. package/migrations/0000_init.sql +223 -0
  64. package/migrations/0001_rls.sql +141 -0
  65. package/migrations/meta/0000_snapshot.json +1715 -0
  66. package/migrations/meta/_journal.json +20 -0
  67. package/package.json +59 -0
  68. package/src/client/index.ts +62 -0
  69. package/src/contract/capabilities.ts +117 -0
  70. package/src/contract/events.ts +84 -0
  71. package/src/contract/index.ts +14 -0
  72. package/src/contract/models.ts +437 -0
  73. package/src/contract/permissions.ts +217 -0
  74. package/src/contract/router.ts +611 -0
  75. package/src/contract/settings.ts +35 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/contract/router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,520 @@
1
+ import { baseContract, PageInput, page, WorkspaceId } from '@kernhq/contracts';
2
+ import { z } from 'zod';
3
+ import { Calendar, CalendarDayKind, CostCenter, CountryCode, CustomFieldDef, Employment, EmploymentType, IsoDate, LegalEntity, Office, OfficeAssignment, OfficeKind, OrgUnit, Person, PersonDocument, PersonResolution, PersonSensitive, PersonStatus, Position, RegionCode, ResolvedCalendarDay, TimeZone, WorkingWeek, } from './models.js';
4
+ const ws = z.object({ workspaceId: WorkspaceId });
5
+ const t = ['hr'];
6
+ const ok = z.object({ ok: z.literal(true) });
7
+ export const hrContract = {
8
+ // ---------------------------------------------------------------- people
9
+ people: {
10
+ list: baseContract
11
+ .route({ method: 'GET', path: '/people', tags: t })
12
+ .input(ws.extend({
13
+ ...PageInput.shape,
14
+ q: z.string().max(120).optional(),
15
+ officeId: z.uuid().optional(),
16
+ orgUnitId: z.uuid().optional(),
17
+ /** Include the whole subtree below `orgUnitId`, not just its direct members. */
18
+ includeDescendants: z.boolean().default(true),
19
+ positionId: z.uuid().optional(),
20
+ status: z.array(PersonStatus).optional(),
21
+ }))
22
+ .output(page(Person)),
23
+ get: baseContract
24
+ .route({ method: 'GET', path: '/people/{personId}', tags: t })
25
+ .input(ws.extend({ personId: z.uuid() }))
26
+ .output(Person),
27
+ /**
28
+ * The caller's own record.
29
+ *
30
+ * No permission: everybody has one and everybody may read it. Returns null rather than erroring
31
+ * when the signed-in user has no HR record — plenty of members are not employees, and that is
32
+ * an ordinary answer rather than a failure.
33
+ */
34
+ me: baseContract
35
+ .route({ method: 'GET', path: '/people/me', tags: t })
36
+ .input(ws)
37
+ .output(Person.nullable()),
38
+ create: baseContract
39
+ .route({ method: 'POST', path: '/people', tags: t })
40
+ .input(ws.extend({
41
+ displayName: z.string().min(1).max(160),
42
+ userId: z.uuid().nullish(),
43
+ employeeNo: z.string().max(32).nullish(),
44
+ workEmail: z.email().max(254).nullish(),
45
+ hiredOn: IsoDate.nullish(),
46
+ officeId: z.uuid().nullish(),
47
+ orgUnitId: z.uuid().nullish(),
48
+ positionId: z.uuid().nullish(),
49
+ managerPersonId: z.uuid().nullish(),
50
+ employmentType: EmploymentType.default('full_time'),
51
+ }))
52
+ .output(Person),
53
+ update: baseContract
54
+ .route({ method: 'PATCH', path: '/people/{personId}', tags: t })
55
+ .input(ws.extend({
56
+ personId: z.uuid(),
57
+ displayName: z.string().min(1).max(160).optional(),
58
+ workEmail: z.email().max(254).nullish(),
59
+ personalEmail: z.email().max(254).nullish(),
60
+ phone: z.string().max(32).nullish(),
61
+ photoFileId: z.uuid().nullish(),
62
+ timezone: TimeZone.nullish(),
63
+ custom: z.record(z.string(), z.unknown()).optional(),
64
+ }))
65
+ .output(Person),
66
+ /** Ends employment. Keeps the record — a terminated person is history, not a deletion. */
67
+ offboard: baseContract
68
+ .route({ method: 'POST', path: '/people/{personId}/offboard', tags: t })
69
+ .input(ws.extend({ personId: z.uuid(), on: IsoDate, reason: z.string().max(200).optional() }))
70
+ .output(Person),
71
+ history: baseContract
72
+ .route({ method: 'GET', path: '/people/{personId}/history', tags: t })
73
+ .input(ws.extend({ personId: z.uuid(), ...PageInput.shape }))
74
+ .output(page(z.object({
75
+ id: z.uuid(),
76
+ field: z.string(),
77
+ from: z.unknown().nullable(),
78
+ to: z.unknown().nullable(),
79
+ at: z.string(),
80
+ actorId: z.uuid().nullable(),
81
+ source: z.string(),
82
+ }))),
83
+ sensitive: {
84
+ get: baseContract
85
+ .route({ method: 'GET', path: '/people/{personId}/sensitive', tags: t })
86
+ .input(ws.extend({ personId: z.uuid() }))
87
+ .output(PersonSensitive),
88
+ update: baseContract
89
+ .route({ method: 'PATCH', path: '/people/{personId}/sensitive', tags: t })
90
+ .input(ws.extend({
91
+ personId: z.uuid(),
92
+ nationalId: z.string().max(64).nullish(),
93
+ birthDate: IsoDate.nullish(),
94
+ iban: z.string().max(48).nullish(),
95
+ emergencyContact: z
96
+ .object({
97
+ name: z.string().max(160),
98
+ relationship: z.string().max(64).optional(),
99
+ phone: z.string().max(32),
100
+ })
101
+ .nullish(),
102
+ }))
103
+ .output(PersonSensitive),
104
+ },
105
+ },
106
+ // ---------------------------------------------------------------- employment
107
+ employment: {
108
+ current: baseContract
109
+ .route({ method: 'GET', path: '/people/{personId}/employment', tags: t })
110
+ .input(ws.extend({ personId: z.uuid(), on: IsoDate.optional() }))
111
+ .output(Employment.nullable()),
112
+ history: baseContract
113
+ .route({ method: 'GET', path: '/people/{personId}/employment/history', tags: t })
114
+ .input(ws.extend({ personId: z.uuid() }))
115
+ .output(z.array(Employment)),
116
+ /**
117
+ * Records a change from a date. Closes the current row and opens a new one — never an update.
118
+ *
119
+ * `effectiveFrom` may be in the past: a promotion agreed in March and entered in May is normal,
120
+ * and the record has to say March.
121
+ */
122
+ change: baseContract
123
+ .route({ method: 'POST', path: '/people/{personId}/employment', tags: t })
124
+ .input(ws.extend({
125
+ personId: z.uuid(),
126
+ effectiveFrom: IsoDate,
127
+ orgUnitId: z.uuid().nullish(),
128
+ positionId: z.uuid().nullish(),
129
+ legalEntityId: z.uuid().nullish(),
130
+ costCenterId: z.uuid().nullish(),
131
+ managerPersonId: z.uuid().nullish(),
132
+ employmentType: EmploymentType.optional(),
133
+ fte: z.number().min(0).max(1).optional(),
134
+ contractHoursWeek: z.number().min(0).max(168).nullish(),
135
+ reason: z.string().max(200).nullish(),
136
+ }))
137
+ .output(Employment),
138
+ },
139
+ // ---------------------------------------------------------------- org
140
+ org: {
141
+ units: {
142
+ tree: baseContract
143
+ .route({ method: 'GET', path: '/org/units', tags: t })
144
+ .input(ws.extend({ includeArchived: z.boolean().default(false) }))
145
+ .output(z.array(OrgUnit.extend({ headcount: z.number().int().nonnegative() }))),
146
+ create: baseContract
147
+ .route({ method: 'POST', path: '/org/units', tags: t })
148
+ .input(ws.extend({
149
+ name: z.string().min(1).max(160),
150
+ parentId: z.uuid().nullish(),
151
+ code: z.string().max(32).nullish(),
152
+ headPersonId: z.uuid().nullish(),
153
+ }))
154
+ .output(OrgUnit),
155
+ update: baseContract
156
+ .route({ method: 'PATCH', path: '/org/units/{unitId}', tags: t })
157
+ .input(ws.extend({
158
+ unitId: z.uuid(),
159
+ name: z.string().min(1).max(160).optional(),
160
+ code: z.string().max(32).nullish(),
161
+ headPersonId: z.uuid().nullish(),
162
+ }))
163
+ .output(OrgUnit),
164
+ /** Reparents a unit and rewrites the ltree path of everything beneath it. */
165
+ move: baseContract
166
+ .route({ method: 'POST', path: '/org/units/{unitId}/move', tags: t })
167
+ .input(ws.extend({ unitId: z.uuid(), parentId: z.uuid().nullable() }))
168
+ .output(z.array(OrgUnit)),
169
+ archive: baseContract
170
+ .route({ method: 'DELETE', path: '/org/units/{unitId}', tags: t })
171
+ .input(ws.extend({ unitId: z.uuid() }))
172
+ .output(ok),
173
+ },
174
+ positions: {
175
+ list: baseContract
176
+ .route({ method: 'GET', path: '/org/positions', tags: t })
177
+ .input(ws.extend({ includeArchived: z.boolean().default(false) }))
178
+ .output(z.array(Position)),
179
+ create: baseContract
180
+ .route({ method: 'POST', path: '/org/positions', tags: t })
181
+ .input(ws.extend({
182
+ title: z.string().min(1).max(160),
183
+ code: z.string().max(32).nullish(),
184
+ jobFamily: z.string().max(64).nullish(),
185
+ level: z.string().max(32).nullish(),
186
+ }))
187
+ .output(Position),
188
+ update: baseContract
189
+ .route({ method: 'PATCH', path: '/org/positions/{positionId}', tags: t })
190
+ .input(ws.extend({
191
+ positionId: z.uuid(),
192
+ title: z.string().min(1).max(160).optional(),
193
+ code: z.string().max(32).nullish(),
194
+ jobFamily: z.string().max(64).nullish(),
195
+ level: z.string().max(32).nullish(),
196
+ }))
197
+ .output(Position),
198
+ archive: baseContract
199
+ .route({ method: 'DELETE', path: '/org/positions/{positionId}', tags: t })
200
+ .input(ws.extend({ positionId: z.uuid() }))
201
+ .output(ok),
202
+ },
203
+ },
204
+ // ---------------------------------------------------------------- offices
205
+ offices: {
206
+ list: baseContract
207
+ .route({ method: 'GET', path: '/offices', tags: t })
208
+ .input(ws.extend({ includeArchived: z.boolean().default(false) }))
209
+ .output(z.array(Office.extend({ headcount: z.number().int().nonnegative() }))),
210
+ get: baseContract
211
+ .route({ method: 'GET', path: '/offices/{officeId}', tags: t })
212
+ .input(ws.extend({ officeId: z.uuid() }))
213
+ .output(Office),
214
+ create: baseContract
215
+ .route({ method: 'POST', path: '/offices', tags: t })
216
+ .input(ws.extend({
217
+ name: z.string().min(1).max(160),
218
+ kind: OfficeKind.default('branch'),
219
+ country: CountryCode,
220
+ region: RegionCode.nullish(),
221
+ city: z.string().max(120).nullish(),
222
+ timezone: TimeZone,
223
+ code: z.string().max(32).nullish(),
224
+ parentOfficeId: z.uuid().nullish(),
225
+ legalEntityId: z.uuid().nullish(),
226
+ /**
227
+ * Seed the office's calendar from a country pack. Omit to share the workspace default.
228
+ * The pack is copied as a *base* the office's calendar extends, never inlined.
229
+ */
230
+ seedCalendarFromPack: z.boolean().default(true),
231
+ }))
232
+ .output(Office),
233
+ update: baseContract
234
+ .route({ method: 'PATCH', path: '/offices/{officeId}', tags: t })
235
+ .input(ws.extend({
236
+ officeId: z.uuid(),
237
+ name: z.string().min(1).max(160).optional(),
238
+ kind: OfficeKind.optional(),
239
+ country: CountryCode.optional(),
240
+ region: RegionCode.nullish(),
241
+ city: z.string().max(120).nullish(),
242
+ timezone: TimeZone.optional(),
243
+ calendarId: z.uuid().nullish(),
244
+ legalEntityId: z.uuid().nullish(),
245
+ headPersonId: z.uuid().nullish(),
246
+ code: z.string().max(32).nullish(),
247
+ }))
248
+ .output(Office),
249
+ archive: baseContract
250
+ .route({ method: 'DELETE', path: '/offices/{officeId}', tags: t })
251
+ .input(ws.extend({ officeId: z.uuid() }))
252
+ .output(ok),
253
+ /** Moves the default flag. The old default keeps its people; only new arrivals change. */
254
+ setDefault: baseContract
255
+ .route({ method: 'POST', path: '/offices/{officeId}/default', tags: t })
256
+ .input(ws.extend({ officeId: z.uuid() }))
257
+ .output(Office),
258
+ people: baseContract
259
+ .route({ method: 'GET', path: '/offices/{officeId}/people', tags: t })
260
+ .input(ws.extend({ officeId: z.uuid(), ...PageInput.shape, primaryOnly: z.boolean().default(false) }))
261
+ .output(page(Person.extend({ isPrimaryHere: z.boolean() }))),
262
+ assign: baseContract
263
+ .route({ method: 'POST', path: '/offices/{officeId}/people', tags: t })
264
+ .input(ws.extend({
265
+ officeId: z.uuid(),
266
+ personId: z.uuid(),
267
+ isPrimary: z.boolean().default(true),
268
+ effectiveFrom: IsoDate,
269
+ reason: z.string().max(200).nullish(),
270
+ }))
271
+ .output(z.array(OfficeAssignment)),
272
+ unassign: baseContract
273
+ .route({ method: 'DELETE', path: '/offices/{officeId}/people/{personId}', tags: t })
274
+ .input(ws.extend({ officeId: z.uuid(), personId: z.uuid(), effectiveTo: IsoDate }))
275
+ .output(ok),
276
+ /**
277
+ * What actually applies to this person on this date, and which rung of the ladder answered.
278
+ *
279
+ * Not behind the `offices` capability: a workspace with one office still has a ladder, and this
280
+ * is the first thing anybody reaches for when a holiday or a policy looks wrong. It is the
281
+ * difference between answering a support question and opening a database session.
282
+ */
283
+ resolveFor: baseContract
284
+ .route({ method: 'GET', path: '/people/{personId}/resolution', tags: t })
285
+ .input(ws.extend({ personId: z.uuid(), on: IsoDate.optional() }))
286
+ .output(PersonResolution),
287
+ },
288
+ // ---------------------------------------------------------------- legal entities
289
+ entities: {
290
+ list: baseContract
291
+ .route({ method: 'GET', path: '/entities', tags: t })
292
+ .input(ws.extend({ includeArchived: z.boolean().default(false) }))
293
+ .output(z.array(LegalEntity)),
294
+ get: baseContract
295
+ .route({ method: 'GET', path: '/entities/{entityId}', tags: t })
296
+ .input(ws.extend({ entityId: z.uuid() }))
297
+ .output(LegalEntity),
298
+ create: baseContract
299
+ .route({ method: 'POST', path: '/entities', tags: t })
300
+ .input(ws.extend({
301
+ name: z.string().min(1).max(200),
302
+ country: CountryCode,
303
+ registrationNo: z.string().max(64).nullish(),
304
+ taxNo: z.string().max(64).nullish(),
305
+ currency: z.string().length(3).nullish(),
306
+ }))
307
+ .output(LegalEntity),
308
+ update: baseContract
309
+ .route({ method: 'PATCH', path: '/entities/{entityId}', tags: t })
310
+ .input(ws.extend({
311
+ entityId: z.uuid(),
312
+ name: z.string().min(1).max(200).optional(),
313
+ country: CountryCode.optional(),
314
+ registrationNo: z.string().max(64).nullish(),
315
+ taxNo: z.string().max(64).nullish(),
316
+ currency: z.string().length(3).nullish(),
317
+ }))
318
+ .output(LegalEntity),
319
+ archive: baseContract
320
+ .route({ method: 'DELETE', path: '/entities/{entityId}', tags: t })
321
+ .input(ws.extend({ entityId: z.uuid() }))
322
+ .output(ok),
323
+ costCenters: {
324
+ list: baseContract
325
+ .route({ method: 'GET', path: '/cost-centers', tags: t })
326
+ .input(ws.extend({ includeArchived: z.boolean().default(false) }))
327
+ .output(z.array(CostCenter)),
328
+ create: baseContract
329
+ .route({ method: 'POST', path: '/cost-centers', tags: t })
330
+ .input(ws.extend({
331
+ code: z.string().min(1).max(32),
332
+ name: z.string().min(1).max(160),
333
+ officeId: z.uuid().nullish(),
334
+ orgUnitId: z.uuid().nullish(),
335
+ legalEntityId: z.uuid().nullish(),
336
+ }))
337
+ .output(CostCenter),
338
+ archive: baseContract
339
+ .route({ method: 'DELETE', path: '/cost-centers/{costCenterId}', tags: t })
340
+ .input(ws.extend({ costCenterId: z.uuid() }))
341
+ .output(ok),
342
+ },
343
+ },
344
+ // ---------------------------------------------------------------- calendars
345
+ calendars: {
346
+ list: baseContract
347
+ .route({ method: 'GET', path: '/calendars', tags: t })
348
+ .input(ws.extend({ includeArchived: z.boolean().default(false) }))
349
+ .output(z.array(Calendar.extend({ officeIds: z.array(z.uuid()) }))),
350
+ get: baseContract
351
+ .route({ method: 'GET', path: '/calendars/{calendarId}', tags: t })
352
+ .input(ws.extend({ calendarId: z.uuid() }))
353
+ .output(Calendar),
354
+ create: baseContract
355
+ .route({ method: 'POST', path: '/calendars', tags: t })
356
+ .input(ws.extend({
357
+ name: z.string().min(1).max(160),
358
+ /** Build on a country pack. Its days stay `pack` and upgrade cleanly. */
359
+ extendsId: z.uuid().nullish(),
360
+ country: CountryCode.nullish(),
361
+ region: RegionCode.nullish(),
362
+ workingWeek: WorkingWeek.optional(),
363
+ }))
364
+ .output(Calendar),
365
+ update: baseContract
366
+ .route({ method: 'PATCH', path: '/calendars/{calendarId}', tags: t })
367
+ .input(ws.extend({
368
+ calendarId: z.uuid(),
369
+ name: z.string().min(1).max(160).optional(),
370
+ workingWeek: WorkingWeek.optional(),
371
+ extendsId: z.uuid().nullish(),
372
+ }))
373
+ .output(Calendar),
374
+ archive: baseContract
375
+ .route({ method: 'DELETE', path: '/calendars/{calendarId}', tags: t })
376
+ .input(ws.extend({ calendarId: z.uuid() }))
377
+ .output(ok),
378
+ days: {
379
+ /**
380
+ * The composed calendar: the pack's days and this calendar's own, each labelled with where it
381
+ * came from and whether it overrides something below it.
382
+ */
383
+ list: baseContract
384
+ .route({ method: 'GET', path: '/calendars/{calendarId}/days', tags: t })
385
+ .input(ws.extend({ calendarId: z.uuid(), from: IsoDate, to: IsoDate }))
386
+ .output(z.array(ResolvedCalendarDay)),
387
+ add: baseContract
388
+ .route({ method: 'POST', path: '/calendars/{calendarId}/days', tags: t })
389
+ .input(ws.extend({
390
+ calendarId: z.uuid(),
391
+ date: IsoDate,
392
+ name: z.string().min(1).max(160),
393
+ kind: CalendarDayKind.default('company_closure'),
394
+ workingFraction: z.number().min(0).max(1).default(0),
395
+ paid: z.boolean().default(true),
396
+ note: z.string().max(500).nullish(),
397
+ }))
398
+ .output(ResolvedCalendarDay),
399
+ update: baseContract
400
+ .route({ method: 'PATCH', path: '/calendars/{calendarId}/days/{dayId}', tags: t })
401
+ .input(ws.extend({
402
+ calendarId: z.uuid(),
403
+ dayId: z.uuid(),
404
+ name: z.string().min(1).max(160).optional(),
405
+ kind: CalendarDayKind.optional(),
406
+ workingFraction: z.number().min(0).max(1).optional(),
407
+ paid: z.boolean().optional(),
408
+ note: z.string().max(500).nullish(),
409
+ }))
410
+ .output(ResolvedCalendarDay),
411
+ /**
412
+ * Removes a day.
413
+ *
414
+ * A `custom` day is deleted. A `pack` day cannot be — it belongs to the pack, and deleting it
415
+ * would only bring it back on the next upgrade — so this writes a suppressing `custom` row
416
+ * over it instead, and says so in `suppressed`.
417
+ */
418
+ remove: baseContract
419
+ .route({ method: 'DELETE', path: '/calendars/{calendarId}/days/{dayId}', tags: t })
420
+ .input(ws.extend({ calendarId: z.uuid(), dayId: z.uuid() }))
421
+ .output(z.object({ ok: z.literal(true), suppressed: z.boolean() })),
422
+ },
423
+ pack: {
424
+ /** What applying this pack would add, change and remove — and what it would leave alone. */
425
+ preview: baseContract
426
+ .route({ method: 'POST', path: '/calendars/{calendarId}/pack/preview', tags: t })
427
+ .input(ws.extend({ calendarId: z.uuid(), packKey: z.string().max(32), year: z.number().int() }))
428
+ .output(z.object({
429
+ packKey: z.string(),
430
+ packVersion: z.string(),
431
+ added: z.array(z.object({ date: IsoDate, name: z.string() })),
432
+ changed: z.array(z.object({ date: IsoDate, name: z.string(), was: z.string() })),
433
+ removed: z.array(z.object({ date: IsoDate, name: z.string() })),
434
+ /** Days HR added themselves. Always untouched; listed so the dialog can say so. */
435
+ keptCustom: z.array(z.object({ date: IsoDate, name: z.string() })),
436
+ })),
437
+ apply: baseContract
438
+ .route({ method: 'POST', path: '/calendars/{calendarId}/pack/apply', tags: t })
439
+ .input(ws.extend({ calendarId: z.uuid(), packKey: z.string().max(32), year: z.number().int() }))
440
+ .output(z.object({ ok: z.literal(true), added: z.number(), changed: z.number(), removed: z.number() })),
441
+ },
442
+ /**
443
+ * How many working days a range holds for a given person, honouring their office's calendar,
444
+ * working week, half-days and closures.
445
+ *
446
+ * The one computation leave, attendance and reporting all need. Exposed on the API as well as
447
+ * through `kernel.call` so a screen can show the number before anything is submitted.
448
+ */
449
+ workingDays: baseContract
450
+ .route({ method: 'GET', path: '/calendars/working-days', tags: t })
451
+ .input(ws.extend({
452
+ personId: z.uuid().optional(),
453
+ calendarId: z.uuid().optional(),
454
+ from: IsoDate,
455
+ to: IsoDate,
456
+ }))
457
+ .output(z.object({
458
+ days: z.number(),
459
+ breakdown: z.array(z.object({ date: IsoDate, fraction: z.number(), reason: z.string().nullable() })),
460
+ })),
461
+ },
462
+ // ---------------------------------------------------------------- documents
463
+ documents: {
464
+ list: baseContract
465
+ .route({ method: 'GET', path: '/people/{personId}/documents', tags: t })
466
+ .input(ws.extend({ personId: z.uuid() }))
467
+ .output(z.array(PersonDocument)),
468
+ attach: baseContract
469
+ .route({ method: 'POST', path: '/people/{personId}/documents', tags: t })
470
+ .input(ws.extend({
471
+ personId: z.uuid(),
472
+ fileId: z.uuid(),
473
+ name: z.string().min(1).max(200),
474
+ kind: z.string().max(48).default('other'),
475
+ issuedOn: IsoDate.nullish(),
476
+ expiresOn: IsoDate.nullish(),
477
+ }))
478
+ .output(PersonDocument),
479
+ remove: baseContract
480
+ .route({ method: 'DELETE', path: '/people/{personId}/documents/{documentId}', tags: t })
481
+ .input(ws.extend({ personId: z.uuid(), documentId: z.uuid() }))
482
+ .output(ok),
483
+ },
484
+ // ---------------------------------------------------------------- custom fields
485
+ fields: {
486
+ list: baseContract
487
+ .route({ method: 'GET', path: '/fields', tags: t })
488
+ .input(ws.extend({ includeArchived: z.boolean().default(false) }))
489
+ .output(z.array(CustomFieldDef)),
490
+ create: baseContract
491
+ .route({ method: 'POST', path: '/fields', tags: t })
492
+ .input(ws.extend({
493
+ key: z.string().min(1).max(48),
494
+ name: z.string().min(1).max(120),
495
+ type: CustomFieldDef.shape.type,
496
+ options: CustomFieldDef.shape.options.optional(),
497
+ required: z.boolean().default(false),
498
+ sensitive: z.boolean().default(false),
499
+ section: CustomFieldDef.shape.section.default('profile'),
500
+ }))
501
+ .output(CustomFieldDef),
502
+ update: baseContract
503
+ .route({ method: 'PATCH', path: '/fields/{fieldId}', tags: t })
504
+ .input(ws.extend({
505
+ fieldId: z.uuid(),
506
+ name: z.string().min(1).max(120).optional(),
507
+ options: CustomFieldDef.shape.options.optional(),
508
+ required: z.boolean().optional(),
509
+ sensitive: z.boolean().optional(),
510
+ section: CustomFieldDef.shape.section.optional(),
511
+ order: z.number().int().optional(),
512
+ }))
513
+ .output(CustomFieldDef),
514
+ archive: baseContract
515
+ .route({ method: 'DELETE', path: '/fields/{fieldId}', tags: t })
516
+ .input(ws.extend({ fieldId: z.uuid() }))
517
+ .output(ok),
518
+ },
519
+ };
520
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/contract/router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Workspace-level settings for HR.
4
+ *
5
+ * Deliberately small. Almost everything an administrator can configure belongs to an office, a
6
+ * calendar or a policy record, because those are the things that differ between two groups of people
7
+ * in the same company. What is left here is genuinely workspace-wide.
8
+ *
9
+ * Note what is *not* here: the capability switches. Those live under a reserved `$capabilities` key
10
+ * that the platform owns, not in this schema — which is why turning one off cannot collide with a
11
+ * settings field and cannot be dropped by a settings round-trip.
12
+ */
13
+ export declare const HrSettings: z.ZodObject<{
14
+ country: z.ZodDefault<z.ZodString>;
15
+ employeeNumberPrefix: z.ZodDefault<z.ZodString>;
16
+ employeeNumberNext: z.ZodDefault<z.ZodNumber>;
17
+ directoryVisibleToMembers: z.ZodDefault<z.ZodBoolean>;
18
+ }, z.core.$strip>;
19
+ export type HrSettings = z.infer<typeof HrSettings>;
20
+ //# sourceMappingURL=settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/contract/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB;;;;;;;;;;GAUG;AACH,eAAO,MAAM,UAAU;;;;;iBAmBrB,CAAA;AACF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA"}
@@ -0,0 +1,34 @@
1
+ import { z } from 'zod';
2
+ import { CountryCode } from './models.js';
3
+ /**
4
+ * Workspace-level settings for HR.
5
+ *
6
+ * Deliberately small. Almost everything an administrator can configure belongs to an office, a
7
+ * calendar or a policy record, because those are the things that differ between two groups of people
8
+ * in the same company. What is left here is genuinely workspace-wide.
9
+ *
10
+ * Note what is *not* here: the capability switches. Those live under a reserved `$capabilities` key
11
+ * that the platform owns, not in this schema — which is why turning one off cannot collide with a
12
+ * settings field and cannot be dropped by a settings round-trip.
13
+ */
14
+ export const HrSettings = z.object({
15
+ /**
16
+ * The country the first office is built from, and the default for the next one.
17
+ *
18
+ * A seed, not a constraint. Once offices exist, each carries its own country and this is only
19
+ * consulted when creating one — a workspace headquartered in Turkey with a Dutch branch is
20
+ * ordinary, and nothing about the Dutch branch consults this value.
21
+ */
22
+ country: CountryCode.default('TR'),
23
+ /** Employee numbers are generated from this when a person is created without one. */
24
+ employeeNumberPrefix: z.string().max(8).default(''),
25
+ employeeNumberNext: z.number().int().min(1).default(1),
26
+ /**
27
+ * Whether a member who is not in HR can see the directory at all.
28
+ *
29
+ * Some companies publish their org chart to everyone; some treat it as HR-only. This is coarser
30
+ * than the permission and sits above it: off, and `hr.person.view` is not enough on its own.
31
+ */
32
+ directoryVisibleToMembers: z.boolean().default(true),
33
+ });
34
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/contract/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC;;;;;;OAMG;IACH,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;IAClC,qFAAqF;IACrF,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACnD,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACtD;;;;;OAKG;IACH,yBAAyB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CACrD,CAAC,CAAA"}