@opencrvs/toolkit 2.0.0-rc.fef9d21 → 2.0.0-rc.ff1424b

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 (62) hide show
  1. package/create-countryconfig/index.js +103 -0
  2. package/create-countryconfig/package.json +21 -0
  3. package/dist/application-config/index.js +312 -130
  4. package/dist/cli.js +548 -178
  5. package/dist/commons/api/router.d.ts +3390 -241
  6. package/dist/commons/application-config/index.d.ts +17 -4
  7. package/dist/commons/conditionals/conditionals.d.ts +360 -10
  8. package/dist/commons/conditionals/validate.d.ts +52 -2
  9. package/dist/commons/events/ActionConfig.d.ts +28 -2
  10. package/dist/commons/events/ActionDocument.d.ts +6 -0
  11. package/dist/commons/events/ActionInput.d.ts +114 -0
  12. package/dist/commons/events/AdvancedSearchConfig.d.ts +342 -0
  13. package/dist/commons/events/Draft.d.ts +4 -2
  14. package/dist/commons/events/EventDocument.d.ts +3 -0
  15. package/dist/commons/events/EventIndex.d.ts +0 -3
  16. package/dist/commons/events/EventMetadata.d.ts +0 -7
  17. package/dist/commons/events/FieldConfig.d.ts +388 -50
  18. package/dist/commons/events/FieldType.d.ts +1 -0
  19. package/dist/commons/events/FieldTypeMapping.d.ts +1 -1
  20. package/dist/commons/events/FieldValue.d.ts +6 -0
  21. package/dist/commons/events/WorkqueueConfig.d.ts +150 -150
  22. package/dist/commons/events/field.d.ts +53 -1
  23. package/dist/commons/events/index.d.ts +2 -0
  24. package/dist/commons/events/locations.d.ts +38 -1
  25. package/dist/commons/events/mocks.test.utils.d.ts +19 -0
  26. package/dist/commons/events/scopes.d.ts +24 -1
  27. package/dist/commons/events/state/flags.d.ts +16 -0
  28. package/dist/commons/events/state/index.d.ts +0 -4
  29. package/dist/commons/events/state/utils.d.ts +12 -289
  30. package/dist/commons/events/utils.d.ts +13 -2
  31. package/dist/conditionals/index.js +92 -9
  32. package/dist/events/index.js +1204 -290
  33. package/dist/migrations/v2.0/add-birth-certificate-issuance-flag.d.ts.map +1 -1
  34. package/dist/migrations/v2.0/add-birth-certificate-issuance-flag.js +60 -35
  35. package/dist/migrations/v2.0/checkout-upstream-files.d.ts +1 -1
  36. package/dist/migrations/v2.0/checkout-upstream-files.d.ts.map +1 -1
  37. package/dist/migrations/v2.0/checkout-upstream-files.js +1 -2
  38. package/dist/migrations/v2.0/delete-infrastructure-directory.d.ts +9 -1
  39. package/dist/migrations/v2.0/delete-infrastructure-directory.d.ts.map +1 -1
  40. package/dist/migrations/v2.0/delete-infrastructure-directory.js +66 -20
  41. package/dist/migrations/v2.0/fix-accept-requested-registration-function-type.d.ts +3 -0
  42. package/dist/migrations/v2.0/fix-accept-requested-registration-function-type.d.ts.map +1 -0
  43. package/dist/migrations/v2.0/fix-accept-requested-registration-function-type.js +110 -0
  44. package/dist/migrations/v2.0/index.d.ts +5 -3
  45. package/dist/migrations/v2.0/index.d.ts.map +1 -1
  46. package/dist/migrations/v2.0/index.js +546 -176
  47. package/dist/migrations/v2.0/make-built-in-validate-actions-custom.d.ts.map +1 -1
  48. package/dist/migrations/v2.0/make-built-in-validate-actions-custom.js +90 -1
  49. package/dist/migrations/v2.0/merge-infrastructure-directory.d.ts +11 -1
  50. package/dist/migrations/v2.0/merge-infrastructure-directory.d.ts.map +1 -1
  51. package/dist/migrations/v2.0/merge-infrastructure-directory.js +17 -16
  52. package/dist/migrations/v2.0/migrate-scopes.d.ts.map +1 -1
  53. package/dist/migrations/v2.0/migrate-scopes.js +54 -30
  54. package/dist/migrations/v2.0/migrate-workqueue-configs.d.ts.map +1 -1
  55. package/dist/migrations/v2.0/migrate-workqueue-configs.js +140 -59
  56. package/dist/notification/index.js +936 -162
  57. package/dist/scopes/index.d.ts +91 -16
  58. package/dist/scopes/index.js +55 -12
  59. package/opencrvs-toolkit-2.0.0-rc.ff1424b.tgz +0 -0
  60. package/package.json +6 -2
  61. package/tsconfig.tsbuildinfo +1 -1
  62. package/opencrvs-toolkit-2.0.0-rc.fef9d21.tgz +0 -0
@@ -1,8 +1,9 @@
1
1
  import { DisplayableAction } from './ActionType';
2
- import { EncodedScope } from '../scopes';
2
+ import { EncodedScope, UserScopeV2 } from '../scopes';
3
3
  import { EventIndexWithAdministrativeHierarchy } from './locations';
4
4
  import { UserContext } from '../users/User';
5
5
  import { EventIndex } from './EventIndex';
6
+ import { UUID } from 'src/uuid';
6
7
  export declare const ACTION_SCOPE_MAP: {
7
8
  READ: "record.read"[];
8
9
  CREATE: "record.create"[];
@@ -53,4 +54,26 @@ export declare function isActionInScope({ scopes, action, event, currentUser }:
53
54
  event: EventIndexWithAdministrativeHierarchy;
54
55
  currentUser: UserContext;
55
56
  }): boolean;
57
+ /**
58
+ *
59
+ *
60
+ * @param allRoles - All possible roles in the system
61
+ * @param userLocation - The location and role information of the user whose role options are being determined
62
+ * @param acceptedScopes - The scopes of the user requesting the role update, used to determine which roles they can assign.
63
+ * @param userRequesting - The user context of the user requesting the role update, used to check location-based access to the target user's location.
64
+ *
65
+ * @returns An array of roles that the requesting user is allowed to assign to the target user based on their scopes and location
66
+ *
67
+ * 1) Used to determine which roles should be available in the dropdown when a user is editing another user's role in the user management interface.
68
+ * 2) Used to check if payload includes valid role.
69
+ */
70
+ export declare function getAvailableRolesForUserUpdatePayload({ allRoles, userLocation, acceptedScopes, userRequesting }: {
71
+ allRoles: string[];
72
+ userRequesting: UserContext;
73
+ acceptedScopes: UserScopeV2[];
74
+ userLocation: {
75
+ administrativeHierarchy: UUID[];
76
+ primaryOfficeId: UUID;
77
+ };
78
+ }): string[];
56
79
  //# sourceMappingURL=scopes.d.ts.map
@@ -1,6 +1,9 @@
1
+ import { Action, RequestedCorrectionAction } from '../ActionDocument';
1
2
  import { Flag, CustomFlag } from '../Flag';
2
3
  import { EventConfig } from '../EventConfig';
3
4
  import { EventDocument } from '../EventDocument';
5
+ export declare function findPendingCorrectionAction(writeActions: Action[]): RequestedCorrectionAction | undefined;
6
+ export declare function isPotentialDuplicate(actions: Action[]): boolean;
4
7
  /**
5
8
  * This function resolves custom flags for an event based on its actions.
6
9
  * Flags are not stored to the event state or any database directly, instead they are always computed/evaluated from the event actions.
@@ -18,5 +21,18 @@ import { EventDocument } from '../EventDocument';
18
21
  * // Returns: ['flag-1', 'flag-3']
19
22
  */
20
23
  export declare function resolveEventCustomFlags(event: EventDocument, eventConfiguration: EventConfig): CustomFlag[];
24
+ /**
25
+ * Computes all flags (inherent, action status, and custom) that should be attached to the given event,
26
+ * based on its actions and event-specific configuration.
27
+ *
28
+ * Flags are determined by combining:
29
+ * - Action status flags (format 'ActionType:ActionStatus')
30
+ * - Inherent flags (e.g. incomplete, rejected, correction requested, potential duplicate, edit in progress)
31
+ * - Event type-specific custom flags defined in the event configuration
32
+ *
33
+ * @param event - The EventDocument containing the action history and payload
34
+ * @param config - The EventConfig providing rules for custom flag evaluation
35
+ * @returns An array of flags currently relevant/applicable to the event
36
+ */
21
37
  export declare function getEventFlags(event: EventDocument, config: EventConfig): Flag[];
22
38
  //# sourceMappingURL=flags.d.ts.map
@@ -9,7 +9,6 @@ import { UUID } from '../../uuid';
9
9
  import { DocumentPath } from '../../documents';
10
10
  export declare function getStatusFromActions(actions: Array<Action>): "CREATED" | "NOTIFIED" | "DECLARED" | "REGISTERED" | "ARCHIVED";
11
11
  export declare function getAssignedUserFromActions(actions: Array<ActionDocument>): string | null;
12
- export declare function getAssignedUserSignatureFromActions(actions: Array<ActionDocument>): string | null;
13
12
  type NonNullableDeep<T> = T extends [unknown, ...unknown[]] ? {
14
13
  [K in keyof T]: NonNullableDeep<NonNullable<T[K]>>;
15
14
  } : T extends UUID ? T : T extends DocumentPath ? T : T extends string ? NonNullable<T> : T extends (infer U)[] ? NonNullableDeep<U>[] : T extends object ? {
@@ -73,7 +72,6 @@ export declare function applyDraftToEventIndex(eventIndex: EventIndex, draft: Dr
73
72
  createdAtLocation?: (string & import("zod").$brand<"UUID">) | null | undefined;
74
73
  createdByUserType?: "user" | "system" | null | undefined;
75
74
  createdByRole?: string | undefined;
76
- createdBySignature?: string | null | undefined;
77
75
  } | null | undefined;
78
76
  REGISTERED?: {
79
77
  createdAt: string;
@@ -83,7 +81,6 @@ export declare function applyDraftToEventIndex(eventIndex: EventIndex, draft: Dr
83
81
  createdAtLocation?: (string & import("zod").$brand<"UUID">) | null | undefined;
84
82
  createdByUserType?: "user" | "system" | null | undefined;
85
83
  createdByRole?: string | undefined;
86
- createdBySignature?: string | null | undefined;
87
84
  } | null | undefined;
88
85
  };
89
86
  createdAt: string;
@@ -101,7 +98,6 @@ export declare function applyDraftToEventIndex(eventIndex: EventIndex, draft: Dr
101
98
  createdByUserType?: "user" | "system" | null | undefined;
102
99
  updatedByUserRole?: string | null | undefined;
103
100
  createdAtLocation?: (string & import("zod").$brand<"UUID">) | null | undefined;
104
- createdBySignature?: (string & import("zod").$brand<"DocumentPath">) | null | undefined;
105
101
  updatedAtLocation?: (string & import("zod").$brand<"UUID">) | null | undefined;
106
102
  assignedTo?: string | null | undefined;
107
103
  updatedBy?: string | null | undefined;
@@ -1,279 +1,17 @@
1
1
  import { Action } from '../ActionDocument';
2
2
  /**
3
- * Given action type and actions, returns the action creation metadata for the event.
4
- * Since we do not consistently store the request action, we need to check if it exists.
5
- * @returns details of last user who triggered **Declaration** action.
6
- * @see EventIndex for the description of the returned object.
3
+ * Returns the creation metadata of the last update action (Requested or Accepted).
4
+ * Requested actions are included so that async flows (202) correctly reflect the
5
+ * metadata of the user who triggered the action before country config accepts it.
7
6
  *
8
- * */
9
- export declare function getActionUpdateMetadata(actions: Action[]): Partial<{
10
- id: string & import("zod").$brand<"UUID">;
11
- transactionId: string;
12
- createdByUserType: "user" | "system";
13
- createdAt: string;
14
- createdBy: string;
15
- declaration: Record<string, import("..").FieldUpdateValue>;
16
- status: "Requested" | "Accepted" | "Rejected";
17
- type: "REGISTER";
18
- createdByRole?: string | undefined;
19
- createdBySignature?: (string & import("zod").$brand<"DocumentPath">) | null | undefined;
20
- createdAtLocation?: (string & import("zod").$brand<"UUID">) | null | undefined;
21
- annotation?: Record<string, import("..").FieldUpdateValue> | null | undefined;
22
- originalActionId?: (string & import("zod").$brand<"UUID">) | null | undefined;
23
- registrationNumber?: string | undefined;
24
- } | {
25
- id: string & import("zod").$brand<"UUID">;
26
- transactionId: string;
27
- createdByUserType: "user" | "system";
28
- createdAt: string;
29
- createdBy: string;
30
- declaration: Record<string, import("..").FieldUpdateValue>;
31
- status: "Requested" | "Accepted" | "Rejected";
32
- type: "DUPLICATE_DETECTED";
33
- content: {
34
- duplicates: {
35
- id: string & import("zod").$brand<"UUID">;
36
- trackingId: string;
37
- }[];
38
- };
39
- createdByRole?: string | undefined;
40
- createdBySignature?: (string & import("zod").$brand<"DocumentPath">) | null | undefined;
41
- createdAtLocation?: (string & import("zod").$brand<"UUID">) | null | undefined;
42
- annotation?: Record<string, import("..").FieldUpdateValue> | null | undefined;
43
- originalActionId?: (string & import("zod").$brand<"UUID">) | null | undefined;
44
- } | {
45
- id: string & import("zod").$brand<"UUID">;
46
- transactionId: string;
47
- createdByUserType: "user" | "system";
48
- createdAt: string;
49
- createdBy: string;
50
- declaration: Record<string, import("..").FieldUpdateValue>;
51
- status: "Requested" | "Accepted" | "Rejected";
52
- type: "EDIT";
53
- content: {
54
- comment?: string | undefined;
55
- };
56
- createdByRole?: string | undefined;
57
- createdBySignature?: (string & import("zod").$brand<"DocumentPath">) | null | undefined;
58
- createdAtLocation?: (string & import("zod").$brand<"UUID">) | null | undefined;
59
- annotation?: Record<string, import("..").FieldUpdateValue> | null | undefined;
60
- originalActionId?: (string & import("zod").$brand<"UUID">) | null | undefined;
61
- } | {
62
- id: string & import("zod").$brand<"UUID">;
63
- transactionId: string;
64
- createdByUserType: "user" | "system";
65
- createdAt: string;
66
- createdBy: string;
67
- declaration: Record<string, import("..").FieldUpdateValue>;
68
- status: "Requested" | "Accepted" | "Rejected";
69
- type: "PRINT_CERTIFICATE";
70
- createdByRole?: string | undefined;
71
- createdBySignature?: (string & import("zod").$brand<"DocumentPath">) | null | undefined;
72
- createdAtLocation?: (string & import("zod").$brand<"UUID">) | null | undefined;
73
- annotation?: Record<string, import("..").FieldUpdateValue> | null | undefined;
74
- originalActionId?: (string & import("zod").$brand<"UUID">) | null | undefined;
75
- content?: {
76
- templateId?: string | undefined;
77
- } | null | undefined;
78
- } | {
79
- id: string & import("zod").$brand<"UUID">;
80
- transactionId: string;
81
- createdByUserType: "user" | "system";
82
- createdAt: string;
83
- createdBy: string;
84
- declaration: Record<string, import("..").FieldUpdateValue>;
85
- status: "Requested" | "Accepted" | "Rejected";
86
- type: "REQUEST_CORRECTION";
87
- createdByRole?: string | undefined;
88
- createdBySignature?: (string & import("zod").$brand<"DocumentPath">) | null | undefined;
89
- createdAtLocation?: (string & import("zod").$brand<"UUID">) | null | undefined;
90
- annotation?: Record<string, import("..").FieldUpdateValue> | null | undefined;
91
- originalActionId?: (string & import("zod").$brand<"UUID">) | null | undefined;
92
- } | {
93
- id: string & import("zod").$brand<"UUID">;
94
- transactionId: string;
95
- createdByUserType: "user" | "system";
96
- createdAt: string;
97
- createdBy: string;
98
- declaration: Record<string, import("..").FieldUpdateValue>;
99
- status: "Requested" | "Accepted" | "Rejected";
100
- type: "CUSTOM";
101
- customActionType: string;
102
- createdByRole?: string | undefined;
103
- createdBySignature?: (string & import("zod").$brand<"DocumentPath">) | null | undefined;
104
- createdAtLocation?: (string & import("zod").$brand<"UUID">) | null | undefined;
105
- annotation?: Record<string, import("..").FieldUpdateValue> | null | undefined;
106
- originalActionId?: (string & import("zod").$brand<"UUID">) | null | undefined;
107
- } | {
108
- id: string & import("zod").$brand<"UUID">;
109
- transactionId: string;
110
- createdByUserType: "user" | "system";
111
- createdAt: string;
112
- createdBy: string;
113
- declaration: Record<string, import("..").FieldUpdateValue>;
114
- status: "Requested" | "Accepted" | "Rejected";
115
- type: "CREATE";
116
- createdByRole?: string | undefined;
117
- createdBySignature?: (string & import("zod").$brand<"DocumentPath">) | null | undefined;
118
- createdAtLocation?: (string & import("zod").$brand<"UUID">) | null | undefined;
119
- annotation?: Record<string, import("..").FieldUpdateValue> | null | undefined;
120
- originalActionId?: (string & import("zod").$brand<"UUID">) | null | undefined;
121
- } | {
122
- id: string & import("zod").$brand<"UUID">;
123
- transactionId: string;
124
- createdByUserType: "user" | "system";
125
- createdAt: string;
126
- createdBy: string;
127
- declaration: Record<string, import("..").FieldUpdateValue>;
128
- status: "Requested" | "Accepted" | "Rejected";
129
- type: "REJECT";
130
- content: {
131
- reason: string;
132
- };
133
- createdByRole?: string | undefined;
134
- createdBySignature?: (string & import("zod").$brand<"DocumentPath">) | null | undefined;
135
- createdAtLocation?: (string & import("zod").$brand<"UUID">) | null | undefined;
136
- annotation?: Record<string, import("..").FieldUpdateValue> | null | undefined;
137
- originalActionId?: (string & import("zod").$brand<"UUID">) | null | undefined;
138
- } | {
139
- id: string & import("zod").$brand<"UUID">;
140
- transactionId: string;
141
- createdByUserType: "user" | "system";
142
- createdAt: string;
143
- createdBy: string;
144
- declaration: Record<string, import("..").FieldUpdateValue>;
145
- status: "Requested" | "Accepted" | "Rejected";
146
- type: "MARK_AS_NOT_DUPLICATE";
147
- createdByRole?: string | undefined;
148
- createdBySignature?: (string & import("zod").$brand<"DocumentPath">) | null | undefined;
149
- createdAtLocation?: (string & import("zod").$brand<"UUID">) | null | undefined;
150
- annotation?: Record<string, import("..").FieldUpdateValue> | null | undefined;
151
- originalActionId?: (string & import("zod").$brand<"UUID">) | null | undefined;
152
- } | {
153
- id: string & import("zod").$brand<"UUID">;
154
- transactionId: string;
155
- createdByUserType: "user" | "system";
156
- createdAt: string;
157
- createdBy: string;
158
- declaration: Record<string, import("..").FieldUpdateValue>;
159
- status: "Requested" | "Accepted" | "Rejected";
160
- type: "MARK_AS_DUPLICATE";
161
- createdByRole?: string | undefined;
162
- createdBySignature?: (string & import("zod").$brand<"DocumentPath">) | null | undefined;
163
- createdAtLocation?: (string & import("zod").$brand<"UUID">) | null | undefined;
164
- annotation?: Record<string, import("..").FieldUpdateValue> | null | undefined;
165
- originalActionId?: (string & import("zod").$brand<"UUID">) | null | undefined;
166
- content?: {
167
- duplicateOf: string & import("zod").$brand<"UUID">;
168
- } | undefined;
169
- } | {
170
- id: string & import("zod").$brand<"UUID">;
171
- transactionId: string;
172
- createdByUserType: "user" | "system";
173
- createdAt: string;
174
- createdBy: string;
175
- declaration: Record<string, import("..").FieldUpdateValue>;
176
- status: "Requested" | "Accepted" | "Rejected";
177
- type: "ARCHIVE";
178
- content: {
179
- reason: string;
180
- };
181
- createdByRole?: string | undefined;
182
- createdBySignature?: (string & import("zod").$brand<"DocumentPath">) | null | undefined;
183
- createdAtLocation?: (string & import("zod").$brand<"UUID">) | null | undefined;
184
- annotation?: Record<string, import("..").FieldUpdateValue> | null | undefined;
185
- originalActionId?: (string & import("zod").$brand<"UUID">) | null | undefined;
186
- } | {
187
- id: string & import("zod").$brand<"UUID">;
188
- transactionId: string;
189
- createdByUserType: "user" | "system";
190
- createdAt: string;
191
- createdBy: string;
192
- declaration: Record<string, import("..").FieldUpdateValue>;
193
- status: "Requested" | "Accepted" | "Rejected";
194
- type: "NOTIFY";
195
- createdByRole?: string | undefined;
196
- createdBySignature?: (string & import("zod").$brand<"DocumentPath">) | null | undefined;
197
- createdAtLocation?: (string & import("zod").$brand<"UUID">) | null | undefined;
198
- annotation?: Record<string, import("..").FieldUpdateValue> | null | undefined;
199
- originalActionId?: (string & import("zod").$brand<"UUID">) | null | undefined;
200
- } | {
201
- id: string & import("zod").$brand<"UUID">;
202
- transactionId: string;
203
- createdByUserType: "user" | "system";
204
- createdAt: string;
205
- createdBy: string;
206
- declaration: Record<string, import("..").FieldUpdateValue>;
207
- status: "Requested" | "Accepted" | "Rejected";
208
- type: "DECLARE";
209
- createdByRole?: string | undefined;
210
- createdBySignature?: (string & import("zod").$brand<"DocumentPath">) | null | undefined;
211
- createdAtLocation?: (string & import("zod").$brand<"UUID">) | null | undefined;
212
- annotation?: Record<string, import("..").FieldUpdateValue> | null | undefined;
213
- originalActionId?: (string & import("zod").$brand<"UUID">) | null | undefined;
214
- } | {
215
- id: string & import("zod").$brand<"UUID">;
216
- transactionId: string;
217
- createdByUserType: "user" | "system";
218
- createdAt: string;
219
- createdBy: string;
220
- declaration: Record<string, import("..").FieldUpdateValue>;
221
- status: "Requested" | "Accepted" | "Rejected";
222
- type: "ASSIGN";
223
- assignedTo: string;
224
- createdByRole?: string | undefined;
225
- createdBySignature?: (string & import("zod").$brand<"DocumentPath">) | null | undefined;
226
- createdAtLocation?: (string & import("zod").$brand<"UUID">) | null | undefined;
227
- annotation?: Record<string, import("..").FieldUpdateValue> | null | undefined;
228
- originalActionId?: (string & import("zod").$brand<"UUID">) | null | undefined;
229
- } | {
230
- id: string & import("zod").$brand<"UUID">;
231
- transactionId: string;
232
- createdByUserType: "user" | "system";
233
- createdAt: string;
234
- createdBy: string;
235
- declaration: Record<string, import("..").FieldUpdateValue>;
236
- status: "Requested" | "Accepted" | "Rejected";
237
- type: "APPROVE_CORRECTION";
238
- requestId: string;
239
- createdByRole?: string | undefined;
240
- createdBySignature?: (string & import("zod").$brand<"DocumentPath">) | null | undefined;
241
- createdAtLocation?: (string & import("zod").$brand<"UUID">) | null | undefined;
242
- annotation?: Record<string, import("..").FieldUpdateValue> | null | undefined;
243
- originalActionId?: (string & import("zod").$brand<"UUID">) | null | undefined;
244
- } | {
245
- id: string & import("zod").$brand<"UUID">;
246
- transactionId: string;
247
- createdByUserType: "user" | "system";
248
- createdAt: string;
249
- createdBy: string;
250
- declaration: Record<string, import("..").FieldUpdateValue>;
251
- status: "Requested" | "Accepted" | "Rejected";
252
- type: "REJECT_CORRECTION";
253
- requestId: string;
254
- content: {
255
- reason: string;
256
- };
257
- createdByRole?: string | undefined;
258
- createdBySignature?: (string & import("zod").$brand<"DocumentPath">) | null | undefined;
259
- createdAtLocation?: (string & import("zod").$brand<"UUID">) | null | undefined;
260
- annotation?: Record<string, import("..").FieldUpdateValue> | null | undefined;
261
- originalActionId?: (string & import("zod").$brand<"UUID">) | null | undefined;
262
- } | {
263
- id: string & import("zod").$brand<"UUID">;
264
- transactionId: string;
265
- createdByUserType: "user" | "system";
266
- createdAt: string;
267
- createdBy: string;
268
- declaration: Record<string, import("..").FieldUpdateValue>;
269
- status: "Requested" | "Accepted" | "Rejected";
270
- type: "UNASSIGN";
271
- createdByRole?: string | undefined;
272
- createdBySignature?: (string & import("zod").$brand<"DocumentPath">) | null | undefined;
273
- createdAtLocation?: (string & import("zod").$brand<"UUID">) | null | undefined;
274
- annotation?: Record<string, import("..").FieldUpdateValue> | null | undefined;
275
- originalActionId?: (string & import("zod").$brand<"UUID">) | null | undefined;
276
- } | {
7
+ * When an Accepted action carries an originalActionId, its metadata is sourced from
8
+ * the original Requested action (the human who triggered it), not from the system
9
+ * or 3rd party that accepted it.
10
+ *
11
+ * @returns metadata of the last user who triggered a status-changing action.
12
+ * @see EventIndex for the description of the returned object.
13
+ */
14
+ export declare function getActionUpdateMetadata(actions: Action[]): Pick<{
277
15
  id: string & import("zod").$brand<"UUID">;
278
16
  transactionId: string;
279
17
  createdByUserType: "user" | "system";
@@ -281,25 +19,12 @@ export declare function getActionUpdateMetadata(actions: Action[]): Partial<{
281
19
  createdBy: string;
282
20
  declaration: Record<string, import("..").FieldUpdateValue>;
283
21
  status: "Requested" | "Accepted" | "Rejected";
284
- type: "READ";
285
22
  createdByRole?: string | undefined;
286
23
  createdBySignature?: (string & import("zod").$brand<"DocumentPath">) | null | undefined;
287
24
  createdAtLocation?: (string & import("zod").$brand<"UUID">) | null | undefined;
288
25
  annotation?: Record<string, import("..").FieldUpdateValue> | null | undefined;
289
26
  originalActionId?: (string & import("zod").$brand<"UUID">) | null | undefined;
290
- } | {
291
- id: string & import("zod").$brand<"UUID">;
292
- transactionId: string;
293
- createdByUserType: "user" | "system";
294
- createdAt: string;
295
- createdBy: string;
296
- type: "CUSTOM" | "NOTIFY" | "DECLARE" | "REGISTER" | "EDIT" | "REJECT" | "ARCHIVE" | "PRINT_CERTIFICATE" | "REQUEST_CORRECTION" | "REJECT_CORRECTION" | "APPROVE_CORRECTION";
297
- status: "Rejected";
298
- createdByRole?: string | undefined;
299
- createdBySignature?: (string & import("zod").$brand<"DocumentPath">) | null | undefined;
300
- createdAtLocation?: (string & import("zod").$brand<"UUID">) | null | undefined;
301
- originalActionId?: (string & import("zod").$brand<"UUID">) | null | undefined;
302
- }>;
27
+ }, "createdByUserType" | "createdAt" | "createdBy" | "createdByRole" | "createdAtLocation">;
303
28
  /**
304
29
  * @returns the legal statuses of the event. Event is considered legal if it has been accepted.
305
30
  * @see EventIndex for the description of the returned object.
@@ -312,7 +37,6 @@ export declare function getLegalStatuses(actions: Action[]): {
312
37
  createdAtLocation: (string & import("zod").$brand<"UUID">) | null | undefined;
313
38
  acceptedAt: string;
314
39
  createdByRole: string | undefined;
315
- createdBySignature: (string & import("zod").$brand<"DocumentPath">) | null | undefined;
316
40
  registrationNumber: string | null | undefined;
317
41
  } | null;
318
42
  REGISTERED: {
@@ -322,7 +46,6 @@ export declare function getLegalStatuses(actions: Action[]): {
322
46
  createdAtLocation: (string & import("zod").$brand<"UUID">) | null | undefined;
323
47
  acceptedAt: string;
324
48
  createdByRole: string | undefined;
325
- createdBySignature: (string & import("zod").$brand<"DocumentPath">) | null | undefined;
326
49
  registrationNumber: string | null | undefined;
327
50
  } | null;
328
51
  };
@@ -131,7 +131,7 @@ export declare function isPageVisible(page: PageConfig, formValues: ActionUpdate
131
131
  * * @param validatorContext - custom validation context
132
132
  * @returns {Partial<T>} A new object containing only the values for visible fields
133
133
  */
134
- export declare function omitHiddenFields<T extends EventState | ActionUpdate>(fields: FieldConfig[], formValues: T, validatorContext: ValidatorContext, includeHiddenFieldsWithNullValues?: boolean, declarationContext?: EventState): Partial<T>;
134
+ export declare function omitHiddenFields<T extends EventState | ActionUpdate>(fields: FieldConfig[], formValues: T, validatorContext: ValidatorContext, includeHiddenFieldsWithNullValues?: boolean): Partial<T>;
135
135
  export declare function omitHiddenPaginatedFields<T extends EventState | ActionUpdate>(formConfig: FormConfig, values: T, validatorContext: ValidatorContext, includeHiddenFieldsWithNullValues?: boolean): Partial<Partial<T>>;
136
136
  /**
137
137
  *
@@ -386,6 +386,9 @@ export declare function findLastAssignmentAction(actions: Action[]): {
386
386
  createdAtLocation?: (string & import("zod").$brand<"UUID">) | null | undefined;
387
387
  annotation?: Record<string, import("./FieldValue").FieldUpdateValue> | null | undefined;
388
388
  originalActionId?: (string & import("zod").$brand<"UUID">) | null | undefined;
389
+ content?: {
390
+ immediateCorrection?: boolean | undefined;
391
+ } | undefined;
389
392
  } | {
390
393
  id: string & import("zod").$brand<"UUID">;
391
394
  transactionId: string;
@@ -559,7 +562,15 @@ export declare function timePeriodToDateRange(value: SelectDateRangeValue): {
559
562
  };
560
563
  export declare function mergeDrafts(currentDraft: Draft, incomingDraft: Draft): Draft;
561
564
  export declare function getPendingAction(actions: Action[]): ActionDocument;
562
- export declare function getCompleteActionAnnotation(annotation: ActionUpdate, event: EventDocument, action: ActionDocument): ActionUpdate;
565
+ export declare function getCompleteActionAnnotation(event: EventDocument, action: ActionDocument): ActionUpdate;
566
+ /**
567
+ * Resolves the complete content for an action, inheriting from its original
568
+ * Requested action when the Accepted action carries no content of its own.
569
+ *
570
+ * Mirrors the same "originalActionId → merge from Requested" pattern used by
571
+ * getCompleteActionAnnotation and getCompleteActionDeclaration.
572
+ */
573
+ export declare function getCompleteActionContent(event: EventDocument, action: ActionDocument): Record<string, unknown> | null | undefined;
563
574
  export declare function getCompleteActionDeclaration<T extends EventState | ActionUpdate>(declaration: T, event: EventDocument, action: ActionDocument): T;
564
575
  export declare function getAcceptedActions(event: EventDocument): ActionDocument[];
565
576
  export declare function aggregateActionDeclarations(event: EventDocument): EventState;
@@ -30,6 +30,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
30
30
  // src/conditionals/index.ts
31
31
  var conditionals_exports = {};
32
32
  __export(conditionals_exports, {
33
+ always: () => always,
33
34
  alwaysTrue: () => alwaysTrue,
34
35
  and: () => and,
35
36
  createFieldConditionals: () => createFieldConditionals,
@@ -182,6 +183,10 @@ var scopeByEvent = z6.preprocess(
182
183
  (val) => val === void 0 ? void 0 : [val].flat(),
183
184
  z6.array(z6.string()).optional()
184
185
  ).describe("Event type, e.g. birth, death");
186
+ var userRole = z6.preprocess(
187
+ (val) => val === void 0 ? void 0 : [val].flat(),
188
+ z6.array(z6.string()).optional()
189
+ ).describe("User role, e.g. admin, field agent");
185
190
  var scopeOptionsPlaceEvent = z6.object({
186
191
  event: scopeByEvent,
187
192
  placeOfEvent: JurisdictionFilter.optional()
@@ -205,6 +210,9 @@ var CustomActionScopeOptions = AllRecordScopeOptions.extend({
205
210
  var AccessLevelOptions = z6.object({
206
211
  accessLevel: JurisdictionFilter.optional()
207
212
  });
213
+ var AllUserScopeOptions = AccessLevelOptions.extend({
214
+ role: userRole.optional()
215
+ });
208
216
  var WorkqueueOrDashboardOptions = z6.object({
209
217
  ids: z6.preprocess(
210
218
  (val) => val === void 0 ? void 0 : [val].flat(),
@@ -214,6 +222,7 @@ var WorkqueueOrDashboardOptions = z6.object({
214
222
  var AllScopeOptions = z6.object({
215
223
  ...AllRecordScopeOptions.shape,
216
224
  ...AccessLevelOptions.shape,
225
+ ...AllUserScopeOptions.shape,
217
226
  ...WorkqueueOrDashboardOptions.shape
218
227
  });
219
228
  var ScopeOptionKey = AllScopeOptions.keyof();
@@ -286,6 +295,30 @@ var RecordScopeV2 = z6.discriminatedUnion("type", [
286
295
  ]).describe(
287
296
  "Scopes used to check user's permission to perform actions on a record."
288
297
  );
298
+ var SystemScopeType = z6.enum([
299
+ "organisation.read-locations",
300
+ "user.read",
301
+ "user.create",
302
+ "user.edit",
303
+ "user.search"
304
+ ]);
305
+ var UserScopeType = SystemScopeType.extract([
306
+ "user.read",
307
+ "user.create",
308
+ "user.edit",
309
+ "user.search"
310
+ ]);
311
+ var ScopesWithRoleOption = UserScopeType.extract(["user.edit", "user.create"]);
312
+ var UserScopeV2 = z6.discriminatedUnion("type", [
313
+ z6.object({
314
+ type: ScopesWithRoleOption,
315
+ options: AllUserScopeOptions.optional()
316
+ }),
317
+ z6.object({
318
+ type: UserScopeType.extract(["user.read", "user.search"]),
319
+ options: AccessLevelOptions.optional()
320
+ })
321
+ ]);
289
322
  var ResolvedRecordScopeV2 = z6.discriminatedUnion("type", [
290
323
  z6.object({
291
324
  type: ScopesWithPlaceEventOptions,
@@ -306,16 +339,14 @@ var ResolvedRecordScopeV2 = z6.discriminatedUnion("type", [
306
339
  }).optional()
307
340
  })
308
341
  ]).describe("Resolved scope with location/user IDs instead of filters.");
309
- var SystemScopeType = z6.enum([
310
- "organisation.read-locations",
311
- "user.read",
312
- "user.create",
313
- "user.edit"
314
- ]);
315
342
  var Scope2 = z6.discriminatedUnion("type", [
316
343
  z6.object({ type: PlainScopeType }),
317
344
  ...RecordScopeV2.options,
318
- z6.object({ type: SystemScopeType, options: AccessLevelOptions.optional() }),
345
+ ...UserScopeV2.options,
346
+ z6.object({
347
+ type: z6.literal("organisation.read-locations"),
348
+ options: AccessLevelOptions.optional()
349
+ }),
319
350
  z6.object({
320
351
  type: z6.literal("workqueue"),
321
352
  options: WorkqueueOrDashboardOptions
@@ -335,7 +366,9 @@ var ScopeType2 = z6.enum([
335
366
  var EncodedScope2 = z6.string().brand("EncodedScope");
336
367
  var DEFAULT_SCOPE_OPTIONS = {
337
368
  placeOfEvent: JurisdictionFilter.enum.all,
338
- accessLevel: JurisdictionFilter.enum.all
369
+ accessLevel: JurisdictionFilter.enum.all,
370
+ registeredIn: JurisdictionFilter.enum.all,
371
+ declaredIn: JurisdictionFilter.enum.all
339
372
  };
340
373
 
341
374
  // ../commons/src/users/userReferences.ts
@@ -422,6 +455,9 @@ function not(condition) {
422
455
  function never() {
423
456
  return not(alwaysTrue());
424
457
  }
458
+ function always() {
459
+ return defineConditional(alwaysTrue());
460
+ }
425
461
  function jsonFieldPath(field) {
426
462
  return [field.$$field, ...field.$$subfield].join("/");
427
463
  }
@@ -969,7 +1005,54 @@ function createFieldConditionals(fieldId) {
969
1005
  }
970
1006
  },
971
1007
  required: [fieldId]
972
- })
1008
+ }),
1009
+ /**
1010
+ * Custom client-side validator. The provided function is serialised and executed
1011
+ * just-in-time on the client only. External references (e.g. lodash) are not
1012
+ * available inside the function body — all logic must be self-contained.
1013
+ *
1014
+ * @example
1015
+ * field('nid').customClientValidator((value) => {
1016
+ * // LUHN check — all logic must be inline
1017
+ * const digits = String(value).split('').map(Number)
1018
+ * // ...
1019
+ * return isValid
1020
+ * })
1021
+ */
1022
+ customClientValidator(validationFn) {
1023
+ const code = validationFn.toString();
1024
+ return defineFormConditional({
1025
+ type: "object",
1026
+ properties: wrapToPath(
1027
+ { [fieldId]: { customClientValidator: { code } } },
1028
+ this.$$subfield
1029
+ ),
1030
+ required: [fieldId]
1031
+ });
1032
+ },
1033
+ /**
1034
+ * Custom client-side evaluation. Returns a {@link FieldReference} descriptor
1035
+ * that can be used as the `value` property or a DATA component entry.
1036
+ * The function receives the referenced field's value as the first argument and
1037
+ * the full form context as the second; its return value replaces the field reference.
1038
+ * The function is serialised and executed just-in-time on the client only.
1039
+ * External references (e.g. lodash) are not available inside the function body.
1040
+ *
1041
+ * For computing a default value without referencing a specific field, use
1042
+ * `evaluate(fn)` in the `defaultValue` property instead.
1043
+ *
1044
+ * @example
1045
+ * field('a').customClientEvaluation((aValue, ctx) =>
1046
+ * Number(aValue) + Number(ctx.$form.b)
1047
+ * )
1048
+ */
1049
+ customClientEvaluation(computationFn) {
1050
+ return {
1051
+ $$code: computationFn.toString(),
1052
+ $$field: fieldId,
1053
+ $$subfield: this.$$subfield
1054
+ };
1055
+ }
973
1056
  };
974
1057
  }
975
1058