@kernhq/module-hr 0.16.0 → 0.17.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 (49) hide show
  1. package/dist/contract/index.d.ts +1 -0
  2. package/dist/contract/index.d.ts.map +1 -1
  3. package/dist/contract/index.js +1 -0
  4. package/dist/contract/index.js.map +1 -1
  5. package/dist/contract/models.d.ts +1 -0
  6. package/dist/contract/models.d.ts.map +1 -1
  7. package/dist/contract/models.js +15 -0
  8. package/dist/contract/models.js.map +1 -1
  9. package/dist/contract/permissions.d.ts +8 -0
  10. package/dist/contract/permissions.d.ts.map +1 -1
  11. package/dist/contract/permissions.js +20 -0
  12. package/dist/contract/permissions.js.map +1 -1
  13. package/dist/contract/privacy.d.ts +860 -0
  14. package/dist/contract/privacy.d.ts.map +1 -0
  15. package/dist/contract/privacy.js +412 -0
  16. package/dist/contract/privacy.js.map +1 -0
  17. package/dist/contract/router.d.ts +815 -0
  18. package/dist/contract/router.d.ts.map +1 -1
  19. package/dist/contract/router.js +105 -0
  20. package/dist/contract/router.js.map +1 -1
  21. package/dist/server/router.d.ts +876 -0
  22. package/dist/server/router.d.ts.map +1 -1
  23. package/dist/server/router.js +312 -2
  24. package/dist/server/router.js.map +1 -1
  25. package/dist/server/schema.d.ts +397 -1
  26. package/dist/server/schema.d.ts.map +1 -1
  27. package/dist/server/schema.js +109 -0
  28. package/dist/server/schema.js.map +1 -1
  29. package/dist/server/services/audit.d.ts +249 -0
  30. package/dist/server/services/audit.d.ts.map +1 -0
  31. package/dist/server/services/audit.js +230 -0
  32. package/dist/server/services/audit.js.map +1 -0
  33. package/dist/server/services/people.d.ts +53 -1
  34. package/dist/server/services/people.d.ts.map +1 -1
  35. package/dist/server/services/people.js +74 -1
  36. package/dist/server/services/people.js.map +1 -1
  37. package/dist/server/services/privacy.d.ts +514 -0
  38. package/dist/server/services/privacy.d.ts.map +1 -0
  39. package/dist/server/services/privacy.js +972 -0
  40. package/dist/server/services/privacy.js.map +1 -0
  41. package/migrations/0011_privacy.sql +77 -0
  42. package/migrations/meta/0011_snapshot.json +4450 -0
  43. package/migrations/meta/_journal.json +7 -0
  44. package/package.json +1 -1
  45. package/src/contract/index.ts +1 -0
  46. package/src/contract/models.ts +15 -0
  47. package/src/contract/permissions.ts +22 -0
  48. package/src/contract/privacy.ts +452 -0
  49. package/src/contract/router.ts +121 -0
@@ -38,6 +38,7 @@ export declare const hrContract: {
38
38
  timezone: z.ZodNullable<z.ZodString>;
39
39
  custom: z.ZodRecord<z.ZodString, z.ZodUnknown>;
40
40
  personnelHidden: z.ZodDefault<z.ZodBoolean>;
41
+ erasedAt: z.ZodNullable<z.ZodISODateTime>;
41
42
  createdAt: z.ZodISODateTime;
42
43
  updatedAt: z.ZodISODateTime;
43
44
  workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
@@ -93,6 +94,7 @@ export declare const hrContract: {
93
94
  timezone: z.ZodNullable<z.ZodString>;
94
95
  custom: z.ZodRecord<z.ZodString, z.ZodUnknown>;
95
96
  personnelHidden: z.ZodDefault<z.ZodBoolean>;
97
+ erasedAt: z.ZodNullable<z.ZodISODateTime>;
96
98
  createdAt: z.ZodISODateTime;
97
99
  updatedAt: z.ZodISODateTime;
98
100
  workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
@@ -149,6 +151,7 @@ export declare const hrContract: {
149
151
  timezone: z.ZodNullable<z.ZodString>;
150
152
  custom: z.ZodRecord<z.ZodString, z.ZodUnknown>;
151
153
  personnelHidden: z.ZodDefault<z.ZodBoolean>;
154
+ erasedAt: z.ZodNullable<z.ZodISODateTime>;
152
155
  createdAt: z.ZodISODateTime;
153
156
  updatedAt: z.ZodISODateTime;
154
157
  workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
@@ -215,6 +218,7 @@ export declare const hrContract: {
215
218
  timezone: z.ZodNullable<z.ZodString>;
216
219
  custom: z.ZodRecord<z.ZodString, z.ZodUnknown>;
217
220
  personnelHidden: z.ZodDefault<z.ZodBoolean>;
221
+ erasedAt: z.ZodNullable<z.ZodISODateTime>;
218
222
  createdAt: z.ZodISODateTime;
219
223
  updatedAt: z.ZodISODateTime;
220
224
  workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
@@ -272,6 +276,7 @@ export declare const hrContract: {
272
276
  timezone: z.ZodNullable<z.ZodString>;
273
277
  custom: z.ZodRecord<z.ZodString, z.ZodUnknown>;
274
278
  personnelHidden: z.ZodDefault<z.ZodBoolean>;
279
+ erasedAt: z.ZodNullable<z.ZodISODateTime>;
275
280
  createdAt: z.ZodISODateTime;
276
281
  updatedAt: z.ZodISODateTime;
277
282
  workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
@@ -325,6 +330,7 @@ export declare const hrContract: {
325
330
  timezone: z.ZodNullable<z.ZodString>;
326
331
  custom: z.ZodRecord<z.ZodString, z.ZodUnknown>;
327
332
  personnelHidden: z.ZodDefault<z.ZodBoolean>;
333
+ erasedAt: z.ZodNullable<z.ZodISODateTime>;
328
334
  createdAt: z.ZodISODateTime;
329
335
  updatedAt: z.ZodISODateTime;
330
336
  workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
@@ -1336,6 +1342,7 @@ export declare const hrContract: {
1336
1342
  timezone: z.ZodNullable<z.ZodString>;
1337
1343
  custom: z.ZodRecord<z.ZodString, z.ZodUnknown>;
1338
1344
  personnelHidden: z.ZodDefault<z.ZodBoolean>;
1345
+ erasedAt: z.ZodNullable<z.ZodISODateTime>;
1339
1346
  createdAt: z.ZodISODateTime;
1340
1347
  updatedAt: z.ZodISODateTime;
1341
1348
  workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
@@ -5898,6 +5905,814 @@ export declare const hrContract: {
5898
5905
  };
5899
5906
  }>, Record<never, never>>;
5900
5907
  };
5908
+ /**
5909
+ * Subject access, erasure and retention. All four behind `hr.privacy.manage`, which is granted to
5910
+ * nobody by default and ships in the same change as these — see `privacy.ts` for why there is one
5911
+ * key rather than four, and why none of this is a capability.
5912
+ */
5913
+ privacy: {
5914
+ /**
5915
+ * Everything HR holds about one person, in one response.
5916
+ *
5917
+ * `personId` is required and there is no filter: a workspace-wide export is two and a half
5918
+ * million rows with decrypted bank details in flight, and it is not offered.
5919
+ *
5920
+ * The decrypt makes this a bulk read of the sensitive record, so it writes a
5921
+ * `sensitive_access_log` row with `via: 'export'` in the same transaction.
5922
+ */
5923
+ subjectAccess: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
5924
+ workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
5925
+ personId: z.ZodUUID;
5926
+ purpose: z.ZodOptional<z.ZodNullable<z.ZodString>>;
5927
+ }, z.core.$strip>, z.ZodObject<{
5928
+ manifest: z.ZodObject<{
5929
+ personId: z.ZodUUID;
5930
+ generatedAt: z.ZodISODateTime;
5931
+ generatedBy: z.ZodNullable<z.ZodUUID>;
5932
+ moduleVersion: z.ZodString;
5933
+ truncated: z.ZodArray<z.ZodObject<{
5934
+ section: z.ZodString;
5935
+ returned: z.ZodNumber;
5936
+ cap: z.ZodNumber;
5937
+ }, z.core.$strip>>;
5938
+ excluded: z.ZodArray<z.ZodObject<{
5939
+ section: z.ZodString;
5940
+ reason: z.ZodEnum<{
5941
+ fileContentsNotExportable: "fileContentsNotExportable";
5942
+ notRequested: "notRequested";
5943
+ }>;
5944
+ }, z.core.$strip>>;
5945
+ workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
5946
+ }, z.core.$strip>;
5947
+ person: z.ZodObject<{
5948
+ userId: z.ZodNullable<z.ZodUUID>;
5949
+ employeeNo: z.ZodNullable<z.ZodString>;
5950
+ displayName: z.ZodString;
5951
+ workEmail: z.ZodNullable<z.ZodEmail>;
5952
+ personalEmail: z.ZodNullable<z.ZodEmail>;
5953
+ phone: z.ZodNullable<z.ZodString>;
5954
+ photoFileId: z.ZodNullable<z.ZodUUID>;
5955
+ status: z.ZodEnum<{
5956
+ onboarding: "onboarding";
5957
+ active: "active";
5958
+ on_leave: "on_leave";
5959
+ offboarding: "offboarding";
5960
+ terminated: "terminated";
5961
+ }>;
5962
+ hiredOn: z.ZodNullable<z.ZodISODate>;
5963
+ terminatedOn: z.ZodNullable<z.ZodISODate>;
5964
+ timezone: z.ZodNullable<z.ZodString>;
5965
+ custom: z.ZodRecord<z.ZodString, z.ZodUnknown>;
5966
+ personnelHidden: z.ZodDefault<z.ZodBoolean>;
5967
+ erasedAt: z.ZodNullable<z.ZodISODateTime>;
5968
+ createdAt: z.ZodISODateTime;
5969
+ updatedAt: z.ZodISODateTime;
5970
+ workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
5971
+ id: z.ZodUUID;
5972
+ }, z.core.$strip>;
5973
+ sensitive: z.ZodObject<{
5974
+ nationalId: z.ZodNullable<z.ZodString>;
5975
+ birthDate: z.ZodNullable<z.ZodISODate>;
5976
+ iban: z.ZodNullable<z.ZodString>;
5977
+ emergencyContact: z.ZodNullable<z.ZodObject<{
5978
+ name: z.ZodString;
5979
+ relationship: z.ZodOptional<z.ZodString>;
5980
+ phone: z.ZodString;
5981
+ }, z.core.$strip>>;
5982
+ workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
5983
+ personId: z.ZodUUID;
5984
+ }, z.core.$strip>;
5985
+ employment: z.ZodArray<z.ZodObject<{
5986
+ personId: z.ZodUUID;
5987
+ effectiveFrom: z.ZodISODate;
5988
+ effectiveTo: z.ZodNullable<z.ZodISODate>;
5989
+ orgUnitId: z.ZodNullable<z.ZodUUID>;
5990
+ positionId: z.ZodNullable<z.ZodUUID>;
5991
+ legalEntityId: z.ZodNullable<z.ZodUUID>;
5992
+ costCenterId: z.ZodNullable<z.ZodUUID>;
5993
+ managerPersonId: z.ZodNullable<z.ZodUUID>;
5994
+ employmentType: z.ZodEnum<{
5995
+ full_time: "full_time";
5996
+ part_time: "part_time";
5997
+ contract: "contract";
5998
+ intern: "intern";
5999
+ temporary: "temporary";
6000
+ freelance: "freelance";
6001
+ }>;
6002
+ fte: z.ZodNumber;
6003
+ contractHoursWeek: z.ZodNullable<z.ZodNumber>;
6004
+ reason: z.ZodNullable<z.ZodString>;
6005
+ createdAt: z.ZodISODateTime;
6006
+ workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
6007
+ id: z.ZodUUID;
6008
+ }, z.core.$strip>>;
6009
+ offices: z.ZodArray<z.ZodObject<{
6010
+ personId: z.ZodUUID;
6011
+ officeId: z.ZodUUID;
6012
+ isPrimary: z.ZodBoolean;
6013
+ effectiveFrom: z.ZodISODate;
6014
+ effectiveTo: z.ZodNullable<z.ZodISODate>;
6015
+ reason: z.ZodNullable<z.ZodString>;
6016
+ createdAt: z.ZodISODateTime;
6017
+ workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
6018
+ id: z.ZodUUID;
6019
+ }, z.core.$strip>>;
6020
+ history: z.ZodArray<z.ZodObject<{
6021
+ id: z.ZodUUID;
6022
+ field: z.ZodString;
6023
+ from: z.ZodUnknown;
6024
+ to: z.ZodUnknown;
6025
+ at: z.ZodISODateTime;
6026
+ actorId: z.ZodNullable<z.ZodUUID>;
6027
+ source: z.ZodString;
6028
+ }, z.core.$strip>>;
6029
+ documents: z.ZodArray<z.ZodObject<{
6030
+ personId: z.ZodUUID;
6031
+ fileId: z.ZodUUID;
6032
+ name: z.ZodString;
6033
+ kind: z.ZodString;
6034
+ issuedOn: z.ZodNullable<z.ZodISODate>;
6035
+ expiresOn: z.ZodNullable<z.ZodISODate>;
6036
+ uploadedBy: z.ZodNullable<z.ZodUUID>;
6037
+ createdAt: z.ZodISODateTime;
6038
+ workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
6039
+ id: z.ZodUUID;
6040
+ }, z.core.$strip>>;
6041
+ leave: z.ZodObject<{
6042
+ types: z.ZodArray<z.ZodObject<{
6043
+ key: z.ZodString;
6044
+ name: z.ZodString;
6045
+ paid: z.ZodBoolean;
6046
+ unit: z.ZodEnum<{
6047
+ half_day: "half_day";
6048
+ day: "day";
6049
+ hour: "hour";
6050
+ }>;
6051
+ color: z.ZodNullable<z.ZodString>;
6052
+ icon: z.ZodNullable<z.ZodString>;
6053
+ requiresDocumentAfterDays: z.ZodNullable<z.ZodNumber>;
6054
+ countsWorkingDaysOnly: z.ZodBoolean;
6055
+ allowNegative: z.ZodBoolean;
6056
+ maxNegativeMinutes: z.ZodNumber;
6057
+ order: z.ZodNumber;
6058
+ archivedAt: z.ZodNullable<z.ZodISODateTime>;
6059
+ workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
6060
+ id: z.ZodUUID;
6061
+ }, z.core.$strip>>;
6062
+ requests: z.ZodArray<z.ZodObject<{
6063
+ personId: z.ZodUUID;
6064
+ leaveTypeId: z.ZodUUID;
6065
+ startsOn: z.ZodISODate;
6066
+ endsOn: z.ZodISODate;
6067
+ startPart: z.ZodEnum<{
6068
+ full: "full";
6069
+ morning: "morning";
6070
+ afternoon: "afternoon";
6071
+ }>;
6072
+ endPart: z.ZodEnum<{
6073
+ full: "full";
6074
+ morning: "morning";
6075
+ afternoon: "afternoon";
6076
+ }>;
6077
+ hours: z.ZodNullable<z.ZodNumber>;
6078
+ workingDays: z.ZodNumber;
6079
+ minutes: z.ZodNumber;
6080
+ status: z.ZodEnum<{
6081
+ pending: "pending";
6082
+ approved: "approved";
6083
+ rejected: "rejected";
6084
+ cancelled: "cancelled";
6085
+ draft: "draft";
6086
+ withdrawn: "withdrawn";
6087
+ }>;
6088
+ reason: z.ZodNullable<z.ZodString>;
6089
+ documentFileId: z.ZodNullable<z.ZodUUID>;
6090
+ approvalRequestId: z.ZodNullable<z.ZodUUID>;
6091
+ decidedAt: z.ZodNullable<z.ZodISODateTime>;
6092
+ createdAt: z.ZodISODateTime;
6093
+ updatedAt: z.ZodISODateTime;
6094
+ workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
6095
+ id: z.ZodUUID;
6096
+ }, z.core.$strip>>;
6097
+ days: z.ZodArray<z.ZodObject<{
6098
+ id: z.ZodUUID;
6099
+ requestId: z.ZodUUID;
6100
+ date: z.ZodISODate;
6101
+ fraction: z.ZodNumber;
6102
+ counted: z.ZodBoolean;
6103
+ status: z.ZodString;
6104
+ }, z.core.$strip>>;
6105
+ ledger: z.ZodArray<z.ZodObject<{
6106
+ personId: z.ZodUUID;
6107
+ leaveTypeId: z.ZodUUID;
6108
+ kind: z.ZodEnum<{
6109
+ grant: "grant";
6110
+ accrual: "accrual";
6111
+ consumption: "consumption";
6112
+ reversal: "reversal";
6113
+ expiry: "expiry";
6114
+ adjustment: "adjustment";
6115
+ carry_in: "carry_in";
6116
+ carry_out: "carry_out";
6117
+ encashment: "encashment";
6118
+ }>;
6119
+ amountMinutes: z.ZodNumber;
6120
+ effectiveOn: z.ZodISODate;
6121
+ periodYear: z.ZodNumber;
6122
+ requestId: z.ZodNullable<z.ZodUUID>;
6123
+ reversesEntryId: z.ZodNullable<z.ZodUUID>;
6124
+ policyHash: z.ZodNullable<z.ZodString>;
6125
+ reason: z.ZodNullable<z.ZodString>;
6126
+ createdBy: z.ZodNullable<z.ZodUUID>;
6127
+ createdAt: z.ZodISODateTime;
6128
+ workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
6129
+ id: z.ZodUUID;
6130
+ }, z.core.$strip>>;
6131
+ closingBalanceMinutes: z.ZodNumber;
6132
+ }, z.core.$strip>;
6133
+ attendance: z.ZodObject<{
6134
+ punches: z.ZodArray<z.ZodObject<{
6135
+ personId: z.ZodUUID;
6136
+ direction: z.ZodEnum<{
6137
+ out: "out";
6138
+ in: "in";
6139
+ break_start: "break_start";
6140
+ break_end: "break_end";
6141
+ }>;
6142
+ at: z.ZodISODateTime;
6143
+ clientReportedAt: z.ZodNullable<z.ZodISODateTime>;
6144
+ skewMs: z.ZodNullable<z.ZodNumber>;
6145
+ businessDate: z.ZodISODate;
6146
+ timezone: z.ZodString;
6147
+ method: z.ZodEnum<{
6148
+ web: "web";
6149
+ mobile: "mobile";
6150
+ kiosk: "kiosk";
6151
+ qr: "qr";
6152
+ device: "device";
6153
+ import: "import";
6154
+ manual: "manual";
6155
+ auto: "auto";
6156
+ }>;
6157
+ officeId: z.ZodNullable<z.ZodUUID>;
6158
+ deviceId: z.ZodNullable<z.ZodUUID>;
6159
+ geo: z.ZodNullable<z.ZodObject<{
6160
+ lat: z.ZodNumber;
6161
+ lng: z.ZodNumber;
6162
+ accuracyM: z.ZodOptional<z.ZodNumber>;
6163
+ }, z.core.$strip>>;
6164
+ trust: z.ZodEnum<{
6165
+ trusted: "trusted";
6166
+ claimed: "claimed";
6167
+ disputed: "disputed";
6168
+ }>;
6169
+ voidedByPunchId: z.ZodNullable<z.ZodUUID>;
6170
+ note: z.ZodNullable<z.ZodString>;
6171
+ createdAt: z.ZodISODateTime;
6172
+ workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
6173
+ id: z.ZodUUID;
6174
+ }, z.core.$strip>>;
6175
+ days: z.ZodArray<z.ZodObject<{
6176
+ personId: z.ZodUUID;
6177
+ businessDate: z.ZodISODate;
6178
+ scheduledMinutes: z.ZodNumber;
6179
+ workedMinutes: z.ZodNumber;
6180
+ breakMinutes: z.ZodNumber;
6181
+ overtimeMinutes: z.ZodNumber;
6182
+ beyondCapMinutes: z.ZodNullable<z.ZodNumber>;
6183
+ lateMinutes: z.ZodNumber;
6184
+ earlyLeaveMinutes: z.ZodNumber;
6185
+ status: z.ZodEnum<{
6186
+ leave: "leave";
6187
+ pending: "pending";
6188
+ present: "present";
6189
+ absent: "absent";
6190
+ holiday: "holiday";
6191
+ weekend: "weekend";
6192
+ partial: "partial";
6193
+ }>;
6194
+ leaveRequestId: z.ZodNullable<z.ZodUUID>;
6195
+ anomalies: z.ZodArray<z.ZodString>;
6196
+ firstIn: z.ZodNullable<z.ZodISODateTime>;
6197
+ lastOut: z.ZodNullable<z.ZodISODateTime>;
6198
+ policyHash: z.ZodNullable<z.ZodString>;
6199
+ locked: z.ZodBoolean;
6200
+ computedAt: z.ZodISODateTime;
6201
+ workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
6202
+ id: z.ZodUUID;
6203
+ }, z.core.$strip>>;
6204
+ }, z.core.$strip>;
6205
+ regularizations: z.ZodArray<z.ZodObject<{
6206
+ personId: z.ZodUUID;
6207
+ businessDate: z.ZodISODate;
6208
+ punchId: z.ZodNullable<z.ZodUUID>;
6209
+ proposed: z.ZodArray<z.ZodObject<{
6210
+ direction: z.ZodEnum<{
6211
+ out: "out";
6212
+ in: "in";
6213
+ break_start: "break_start";
6214
+ break_end: "break_end";
6215
+ }>;
6216
+ at: z.ZodISODateTime;
6217
+ }, z.core.$strip>>;
6218
+ reason: z.ZodString;
6219
+ status: z.ZodEnum<{
6220
+ pending: "pending";
6221
+ approved: "approved";
6222
+ rejected: "rejected";
6223
+ cancelled: "cancelled";
6224
+ }>;
6225
+ approvalRequestId: z.ZodNullable<z.ZodUUID>;
6226
+ appliedAt: z.ZodNullable<z.ZodISODateTime>;
6227
+ createdAt: z.ZodISODateTime;
6228
+ workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
6229
+ id: z.ZodUUID;
6230
+ }, z.core.$strip>>;
6231
+ approvals: z.ZodObject<{
6232
+ raised: z.ZodArray<z.ZodObject<{
6233
+ subjectType: z.ZodEnum<{
6234
+ leave: "leave";
6235
+ regularization: "regularization";
6236
+ overtime: "overtime";
6237
+ timesheet: "timesheet";
6238
+ shift_swap: "shift_swap";
6239
+ }>;
6240
+ subjectId: z.ZodUUID;
6241
+ summary: z.ZodString;
6242
+ summaryParams: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
6243
+ status: z.ZodEnum<{
6244
+ pending: "pending";
6245
+ approved: "approved";
6246
+ rejected: "rejected";
6247
+ cancelled: "cancelled";
6248
+ }>;
6249
+ currentStep: z.ZodNumber;
6250
+ requestedBy: z.ZodNullable<z.ZodUUID>;
6251
+ requesterPersonId: z.ZodNullable<z.ZodUUID>;
6252
+ requesterName: z.ZodNullable<z.ZodString>;
6253
+ requestedAt: z.ZodISODateTime;
6254
+ decidedAt: z.ZodNullable<z.ZodISODateTime>;
6255
+ steps: z.ZodArray<z.ZodObject<{
6256
+ id: z.ZodUUID;
6257
+ requestId: z.ZodUUID;
6258
+ stepIndex: z.ZodNumber;
6259
+ name: z.ZodString;
6260
+ mode: z.ZodEnum<{
6261
+ any: "any";
6262
+ all: "all";
6263
+ quorum: "quorum";
6264
+ }>;
6265
+ minApprovals: z.ZodNumber;
6266
+ approverIds: z.ZodArray<z.ZodUUID>;
6267
+ status: z.ZodEnum<{
6268
+ pending: "pending";
6269
+ approved: "approved";
6270
+ rejected: "rejected";
6271
+ cancelled: "cancelled";
6272
+ }>;
6273
+ dueAt: z.ZodNullable<z.ZodISODateTime>;
6274
+ escalatedAt: z.ZodNullable<z.ZodISODateTime>;
6275
+ decisions: z.ZodArray<z.ZodObject<{
6276
+ id: z.ZodUUID;
6277
+ stepId: z.ZodUUID;
6278
+ approverId: z.ZodUUID;
6279
+ onBehalfOfId: z.ZodNullable<z.ZodUUID>;
6280
+ decision: z.ZodEnum<{
6281
+ approve: "approve";
6282
+ reject: "reject";
6283
+ }>;
6284
+ comment: z.ZodNullable<z.ZodString>;
6285
+ at: z.ZodISODateTime;
6286
+ }, z.core.$strip>>;
6287
+ }, z.core.$strip>>;
6288
+ workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
6289
+ id: z.ZodUUID;
6290
+ }, z.core.$strip>>;
6291
+ approverOn: z.ZodArray<z.ZodObject<{
6292
+ id: z.ZodUUID;
6293
+ requestId: z.ZodUUID;
6294
+ stepIndex: z.ZodNumber;
6295
+ name: z.ZodString;
6296
+ mode: z.ZodEnum<{
6297
+ any: "any";
6298
+ all: "all";
6299
+ quorum: "quorum";
6300
+ }>;
6301
+ minApprovals: z.ZodNumber;
6302
+ approverIds: z.ZodArray<z.ZodUUID>;
6303
+ status: z.ZodEnum<{
6304
+ pending: "pending";
6305
+ approved: "approved";
6306
+ rejected: "rejected";
6307
+ cancelled: "cancelled";
6308
+ }>;
6309
+ dueAt: z.ZodNullable<z.ZodISODateTime>;
6310
+ escalatedAt: z.ZodNullable<z.ZodISODateTime>;
6311
+ decisions: z.ZodArray<z.ZodObject<{
6312
+ id: z.ZodUUID;
6313
+ stepId: z.ZodUUID;
6314
+ approverId: z.ZodUUID;
6315
+ onBehalfOfId: z.ZodNullable<z.ZodUUID>;
6316
+ decision: z.ZodEnum<{
6317
+ approve: "approve";
6318
+ reject: "reject";
6319
+ }>;
6320
+ comment: z.ZodNullable<z.ZodString>;
6321
+ at: z.ZodISODateTime;
6322
+ }, z.core.$strip>>;
6323
+ }, z.core.$strip>>;
6324
+ decisions: z.ZodArray<z.ZodObject<{
6325
+ id: z.ZodUUID;
6326
+ stepId: z.ZodUUID;
6327
+ approverId: z.ZodUUID;
6328
+ onBehalfOfId: z.ZodNullable<z.ZodUUID>;
6329
+ decision: z.ZodEnum<{
6330
+ approve: "approve";
6331
+ reject: "reject";
6332
+ }>;
6333
+ comment: z.ZodNullable<z.ZodString>;
6334
+ at: z.ZodISODateTime;
6335
+ }, z.core.$strip>>;
6336
+ }, z.core.$strip>;
6337
+ delegations: z.ZodObject<{
6338
+ given: z.ZodArray<z.ZodObject<{
6339
+ fromPersonId: z.ZodUUID;
6340
+ toPersonId: z.ZodUUID;
6341
+ subjectType: z.ZodNullable<z.ZodEnum<{
6342
+ leave: "leave";
6343
+ regularization: "regularization";
6344
+ overtime: "overtime";
6345
+ timesheet: "timesheet";
6346
+ shift_swap: "shift_swap";
6347
+ }>>;
6348
+ startsOn: z.ZodISODate;
6349
+ endsOn: z.ZodISODate;
6350
+ reason: z.ZodNullable<z.ZodString>;
6351
+ createdAt: z.ZodISODateTime;
6352
+ workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
6353
+ id: z.ZodUUID;
6354
+ }, z.core.$strip>>;
6355
+ received: z.ZodArray<z.ZodObject<{
6356
+ fromPersonId: z.ZodUUID;
6357
+ toPersonId: z.ZodUUID;
6358
+ subjectType: z.ZodNullable<z.ZodEnum<{
6359
+ leave: "leave";
6360
+ regularization: "regularization";
6361
+ overtime: "overtime";
6362
+ timesheet: "timesheet";
6363
+ shift_swap: "shift_swap";
6364
+ }>>;
6365
+ startsOn: z.ZodISODate;
6366
+ endsOn: z.ZodISODate;
6367
+ reason: z.ZodNullable<z.ZodString>;
6368
+ createdAt: z.ZodISODateTime;
6369
+ workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
6370
+ id: z.ZodUUID;
6371
+ }, z.core.$strip>>;
6372
+ }, z.core.$strip>;
6373
+ policiesInForce: z.ZodArray<z.ZodObject<{
6374
+ kind: z.ZodEnum<{
6375
+ overtime: "overtime";
6376
+ accrual: "accrual";
6377
+ carry_forward: "carry_forward";
6378
+ rounding: "rounding";
6379
+ working_time: "working_time";
6380
+ }>;
6381
+ policyId: z.ZodNullable<z.ZodUUID>;
6382
+ policyName: z.ZodNullable<z.ZodString>;
6383
+ config: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
6384
+ from: z.ZodNullable<z.ZodEnum<{
6385
+ person: "person";
6386
+ office: "office";
6387
+ legal_entity: "legal_entity";
6388
+ org_unit: "org_unit";
6389
+ position: "position";
6390
+ workspace: "workspace";
6391
+ }>>;
6392
+ fromSubjectId: z.ZodNullable<z.ZodUUID>;
6393
+ }, z.core.$strip>>;
6394
+ accessLog: z.ZodArray<z.ZodObject<{
6395
+ id: z.ZodUUID;
6396
+ personId: z.ZodUUID;
6397
+ actorUserId: z.ZodUUID;
6398
+ actorPersonId: z.ZodNullable<z.ZodUUID>;
6399
+ fields: z.ZodArray<z.ZodString>;
6400
+ purpose: z.ZodNullable<z.ZodString>;
6401
+ via: z.ZodEnum<{
6402
+ ui: "ui";
6403
+ api: "api";
6404
+ export: "export";
6405
+ }>;
6406
+ at: z.ZodISODateTime;
6407
+ }, z.core.$strip>>;
6408
+ }, z.core.$strip>, import("@orpc/contract").MergedErrorMap<Record<never, never>, {
6409
+ BAD_REQUEST: {
6410
+ data: z.ZodOptional<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
6411
+ };
6412
+ UNAUTHORIZED: {};
6413
+ FORBIDDEN: {
6414
+ data: z.ZodOptional<z.ZodObject<{
6415
+ permission: z.ZodOptional<z.ZodString>;
6416
+ }, z.core.$strip>>;
6417
+ };
6418
+ NOT_FOUND: {};
6419
+ CONFLICT: {
6420
+ data: z.ZodOptional<z.ZodObject<{
6421
+ reason: z.ZodOptional<z.ZodString>;
6422
+ }, z.core.$strip>>;
6423
+ };
6424
+ RATE_LIMITED: {};
6425
+ MODULE_DISABLED: {
6426
+ data: z.ZodObject<{
6427
+ module: z.ZodString;
6428
+ }, z.core.$strip>;
6429
+ };
6430
+ }>, Record<never, never>>;
6431
+ /**
6432
+ * Redact a person, and say what survived.
6433
+ *
6434
+ * **`dryRun` defaults to true**, which is the opposite of every other write in this module and
6435
+ * deliberate. This is the one irreversible act HR offers, so a caller that forgets the flag has
6436
+ * to get the preview rather than the erasure. It matters more than it reads: core generates an
6437
+ * MCP tool from every hosted module's OpenAPI document, so a procedure with a REST route is
6438
+ * agent-callable the day it ships, and the call made with no arguments has to be the harmless
6439
+ * one. The preview runs the same predicates the run does and returns the same shape.
6440
+ *
6441
+ * Nothing is deleted. The identifying columns are cleared and every record a wage, an
6442
+ * entitlement or an authorisation was computed from stays, listed in `kept` with the basis it
6443
+ * survived under. Running it twice is safe and reports zero rows the second time: each step
6444
+ * matches only rows that still have something to clear.
6445
+ */
6446
+ erase: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
6447
+ workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
6448
+ personId: z.ZodUUID;
6449
+ dryRun: z.ZodDefault<z.ZodBoolean>;
6450
+ reason: z.ZodOptional<z.ZodNullable<z.ZodString>>;
6451
+ keepNationalIdForAudit: z.ZodDefault<z.ZodBoolean>;
6452
+ }, z.core.$strip>, z.ZodObject<{
6453
+ personId: z.ZodUUID;
6454
+ dryRun: z.ZodBoolean;
6455
+ erasedAt: z.ZodNullable<z.ZodISODateTime>;
6456
+ displayName: z.ZodString;
6457
+ redacted: z.ZodArray<z.ZodObject<{
6458
+ class: z.ZodEnum<{
6459
+ sensitive: "sensitive";
6460
+ employment: "employment";
6461
+ approvals: "approvals";
6462
+ attendance: "attendance";
6463
+ documents: "documents";
6464
+ punches: "punches";
6465
+ identity: "identity";
6466
+ history: "history";
6467
+ leaveRequests: "leaveRequests";
6468
+ leaveLedger: "leaveLedger";
6469
+ officeAssignments: "officeAssignments";
6470
+ approvalDecisions: "approvalDecisions";
6471
+ regularizations: "regularizations";
6472
+ delegations: "delegations";
6473
+ headship: "headship";
6474
+ }>;
6475
+ table: z.ZodString;
6476
+ rows: z.ZodNumber;
6477
+ columns: z.ZodArray<z.ZodString>;
6478
+ }, z.core.$strip>>;
6479
+ kept: z.ZodArray<z.ZodObject<{
6480
+ class: z.ZodEnum<{
6481
+ sensitive: "sensitive";
6482
+ employment: "employment";
6483
+ approvals: "approvals";
6484
+ attendance: "attendance";
6485
+ documents: "documents";
6486
+ punches: "punches";
6487
+ identity: "identity";
6488
+ history: "history";
6489
+ leaveRequests: "leaveRequests";
6490
+ leaveLedger: "leaveLedger";
6491
+ officeAssignments: "officeAssignments";
6492
+ approvalDecisions: "approvalDecisions";
6493
+ regularizations: "regularizations";
6494
+ delegations: "delegations";
6495
+ headship: "headship";
6496
+ }>;
6497
+ table: z.ZodString;
6498
+ rows: z.ZodNumber;
6499
+ basis: z.ZodEnum<{
6500
+ payRecord: "payRecord";
6501
+ auditTrail: "auditTrail";
6502
+ retentionHorizon: "retentionHorizon";
6503
+ notRemovable: "notRemovable";
6504
+ anotherPersonsRecord: "anotherPersonsRecord";
6505
+ }>;
6506
+ retentionDays: z.ZodNullable<z.ZodNumber>;
6507
+ }, z.core.$strip>>;
6508
+ caveats: z.ZodArray<z.ZodEnum<{
6509
+ documentFilesRemain: "documentFilesRemain";
6510
+ photoFileOrphaned: "photoFileOrphaned";
6511
+ leaveDocumentFilesRemain: "leaveDocumentFilesRemain";
6512
+ nationalIdKeptForAudit: "nationalIdKeptForAudit";
6513
+ actorHistoryKept: "actorHistoryKept";
6514
+ lockedPeriodUntouched: "lockedPeriodUntouched";
6515
+ }>>;
6516
+ filesRemaining: z.ZodArray<z.ZodUUID>;
6517
+ workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
6518
+ }, z.core.$strip>, import("@orpc/contract").MergedErrorMap<Record<never, never>, {
6519
+ BAD_REQUEST: {
6520
+ data: z.ZodOptional<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
6521
+ };
6522
+ UNAUTHORIZED: {};
6523
+ FORBIDDEN: {
6524
+ data: z.ZodOptional<z.ZodObject<{
6525
+ permission: z.ZodOptional<z.ZodString>;
6526
+ }, z.core.$strip>>;
6527
+ };
6528
+ NOT_FOUND: {};
6529
+ CONFLICT: {
6530
+ data: z.ZodOptional<z.ZodObject<{
6531
+ reason: z.ZodOptional<z.ZodString>;
6532
+ }, z.core.$strip>>;
6533
+ };
6534
+ RATE_LIMITED: {};
6535
+ MODULE_DISABLED: {
6536
+ data: z.ZodObject<{
6537
+ module: z.ZodString;
6538
+ }, z.core.$strip>;
6539
+ };
6540
+ }>, Record<never, never>>;
6541
+ /**
6542
+ * Who read somebody's identity, birth date or bank details.
6543
+ *
6544
+ * **About yourself this carries no permission**, which is why it has no `requires()` and sits in
6545
+ * `module.test.ts`'s `SELF_SERVICE` allowlist. Reading your own access log is a thing nobody may
6546
+ * lack, exactly like `people.me`; a grantable key here could only ever be one somebody could be
6547
+ * denied, and being denied sight of who has been looking at your bank details is not a state
6548
+ * this product should be able to express.
6549
+ *
6550
+ * About anybody else it needs `hr.privacy.manage`, and the handler is what asks — a `personId`
6551
+ * that is not the caller's own, or an `actorUserId` at all. The second is not a smaller question
6552
+ * than the first: "what has this account been looking at" is an investigation into a colleague,
6553
+ * and it is the query that makes this log something to be careful with rather than only
6554
+ * something to be reassured by.
6555
+ */
6556
+ accessLog: {
6557
+ list: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
6558
+ workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
6559
+ personId: z.ZodOptional<z.ZodUUID>;
6560
+ actorUserId: z.ZodOptional<z.ZodUUID>;
6561
+ cursor: z.ZodOptional<z.ZodString>;
6562
+ limit: z.ZodDefault<z.ZodNumber>;
6563
+ }, z.core.$strip>, z.ZodObject<{
6564
+ items: z.ZodArray<z.ZodObject<{
6565
+ id: z.ZodUUID;
6566
+ personId: z.ZodUUID;
6567
+ actorUserId: z.ZodUUID;
6568
+ actorPersonId: z.ZodNullable<z.ZodUUID>;
6569
+ fields: z.ZodArray<z.ZodString>;
6570
+ purpose: z.ZodNullable<z.ZodString>;
6571
+ via: z.ZodEnum<{
6572
+ ui: "ui";
6573
+ api: "api";
6574
+ export: "export";
6575
+ }>;
6576
+ at: z.ZodISODateTime;
6577
+ }, z.core.$strip>>;
6578
+ nextCursor: z.ZodNullable<z.ZodString>;
6579
+ total: z.ZodOptional<z.ZodNumber>;
6580
+ }, z.core.$strip>, import("@orpc/contract").MergedErrorMap<Record<never, never>, {
6581
+ BAD_REQUEST: {
6582
+ data: z.ZodOptional<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
6583
+ };
6584
+ UNAUTHORIZED: {};
6585
+ FORBIDDEN: {
6586
+ data: z.ZodOptional<z.ZodObject<{
6587
+ permission: z.ZodOptional<z.ZodString>;
6588
+ }, z.core.$strip>>;
6589
+ };
6590
+ NOT_FOUND: {};
6591
+ CONFLICT: {
6592
+ data: z.ZodOptional<z.ZodObject<{
6593
+ reason: z.ZodOptional<z.ZodString>;
6594
+ }, z.core.$strip>>;
6595
+ };
6596
+ RATE_LIMITED: {};
6597
+ MODULE_DISABLED: {
6598
+ data: z.ZodObject<{
6599
+ module: z.ZodString;
6600
+ }, z.core.$strip>;
6601
+ };
6602
+ }>, Record<never, never>>;
6603
+ };
6604
+ retention: {
6605
+ /**
6606
+ * The horizons, and — with `withCounts` — how much is already past each one.
6607
+ *
6608
+ * The counts are the dry run. They cost a query per class that has a horizon set, so they are
6609
+ * asked for rather than always computed; a retention screen should ask for them.
6610
+ */
6611
+ get: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
6612
+ workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
6613
+ withCounts: z.ZodDefault<z.ZodBoolean>;
6614
+ }, z.core.$strip>, z.ZodObject<{
6615
+ classes: z.ZodArray<z.ZodObject<{
6616
+ class: z.ZodEnum<{
6617
+ leave: "leave";
6618
+ punchDetail: "punchDetail";
6619
+ punches: "punches";
6620
+ attendanceDays: "attendanceDays";
6621
+ personHistory: "personHistory";
6622
+ personDocuments: "personDocuments";
6623
+ terminatedPeople: "terminatedPeople";
6624
+ sensitiveAccessLog: "sensitiveAccessLog";
6625
+ }>;
6626
+ days: z.ZodNullable<z.ZodNumber>;
6627
+ dueNow: z.ZodNullable<z.ZodNumber>;
6628
+ }, z.core.$strip>>;
6629
+ updatedAt: z.ZodNullable<z.ZodISODateTime>;
6630
+ updatedBy: z.ZodNullable<z.ZodUUID>;
6631
+ sweepEnabled: z.ZodLiteral<false>;
6632
+ workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
6633
+ }, z.core.$strip>, import("@orpc/contract").MergedErrorMap<Record<never, never>, {
6634
+ BAD_REQUEST: {
6635
+ data: z.ZodOptional<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
6636
+ };
6637
+ UNAUTHORIZED: {};
6638
+ FORBIDDEN: {
6639
+ data: z.ZodOptional<z.ZodObject<{
6640
+ permission: z.ZodOptional<z.ZodString>;
6641
+ }, z.core.$strip>>;
6642
+ };
6643
+ NOT_FOUND: {};
6644
+ CONFLICT: {
6645
+ data: z.ZodOptional<z.ZodObject<{
6646
+ reason: z.ZodOptional<z.ZodString>;
6647
+ }, z.core.$strip>>;
6648
+ };
6649
+ RATE_LIMITED: {};
6650
+ MODULE_DISABLED: {
6651
+ data: z.ZodObject<{
6652
+ module: z.ZodString;
6653
+ }, z.core.$strip>;
6654
+ };
6655
+ }>, Record<never, never>>;
6656
+ /**
6657
+ * Set them. A field left out is unchanged; a field sent as `null` goes back to "keep
6658
+ * indefinitely", which is what every class ships as.
6659
+ */
6660
+ set: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
6661
+ workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
6662
+ retention: z.ZodObject<{
6663
+ punchDetail: z.ZodOptional<z.ZodDefault<z.ZodNullable<z.ZodNumber>>>;
6664
+ punches: z.ZodOptional<z.ZodDefault<z.ZodNullable<z.ZodNumber>>>;
6665
+ attendanceDays: z.ZodOptional<z.ZodDefault<z.ZodNullable<z.ZodNumber>>>;
6666
+ leave: z.ZodOptional<z.ZodDefault<z.ZodNullable<z.ZodNumber>>>;
6667
+ personHistory: z.ZodOptional<z.ZodDefault<z.ZodNullable<z.ZodNumber>>>;
6668
+ personDocuments: z.ZodOptional<z.ZodDefault<z.ZodNullable<z.ZodNumber>>>;
6669
+ terminatedPeople: z.ZodOptional<z.ZodDefault<z.ZodNullable<z.ZodNumber>>>;
6670
+ sensitiveAccessLog: z.ZodOptional<z.ZodDefault<z.ZodNullable<z.ZodNumber>>>;
6671
+ }, z.core.$strip>;
6672
+ }, z.core.$strip>, z.ZodObject<{
6673
+ classes: z.ZodArray<z.ZodObject<{
6674
+ class: z.ZodEnum<{
6675
+ leave: "leave";
6676
+ punchDetail: "punchDetail";
6677
+ punches: "punches";
6678
+ attendanceDays: "attendanceDays";
6679
+ personHistory: "personHistory";
6680
+ personDocuments: "personDocuments";
6681
+ terminatedPeople: "terminatedPeople";
6682
+ sensitiveAccessLog: "sensitiveAccessLog";
6683
+ }>;
6684
+ days: z.ZodNullable<z.ZodNumber>;
6685
+ dueNow: z.ZodNullable<z.ZodNumber>;
6686
+ }, z.core.$strip>>;
6687
+ updatedAt: z.ZodNullable<z.ZodISODateTime>;
6688
+ updatedBy: z.ZodNullable<z.ZodUUID>;
6689
+ sweepEnabled: z.ZodLiteral<false>;
6690
+ workspaceId: z.core.$ZodBranded<z.ZodUUID, "WorkspaceId", "out">;
6691
+ }, z.core.$strip>, import("@orpc/contract").MergedErrorMap<Record<never, never>, {
6692
+ BAD_REQUEST: {
6693
+ data: z.ZodOptional<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
6694
+ };
6695
+ UNAUTHORIZED: {};
6696
+ FORBIDDEN: {
6697
+ data: z.ZodOptional<z.ZodObject<{
6698
+ permission: z.ZodOptional<z.ZodString>;
6699
+ }, z.core.$strip>>;
6700
+ };
6701
+ NOT_FOUND: {};
6702
+ CONFLICT: {
6703
+ data: z.ZodOptional<z.ZodObject<{
6704
+ reason: z.ZodOptional<z.ZodString>;
6705
+ }, z.core.$strip>>;
6706
+ };
6707
+ RATE_LIMITED: {};
6708
+ MODULE_DISABLED: {
6709
+ data: z.ZodObject<{
6710
+ module: z.ZodString;
6711
+ }, z.core.$strip>;
6712
+ };
6713
+ }>, Record<never, never>>;
6714
+ };
6715
+ };
5901
6716
  };
5902
6717
  export type HrContract = typeof hrContract;
5903
6718
  //# sourceMappingURL=router.d.ts.map