@opencrvs/toolkit 2.0.0-rc.fe94e41 → 2.0.0-rc.fea498b

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.
@@ -75,4 +75,5 @@ export type FieldType = (typeof fieldTypes)[number];
75
75
  */
76
76
  export declare const compositeFieldTypes: ("NAME" | "ADDRESS" | "DATE_RANGE" | "FILE" | "FILE_WITH_OPTIONS" | "DATA" | "ID_READER")[];
77
77
  export declare const FieldTypesToHideInReview: ("IMAGE_VIEW" | "PARAGRAPH" | "PAGE_HEADER" | "BULLET_LIST" | "DIVIDER" | "DATA" | "ALPHA_PRINT_BUTTON" | "HTTP" | "QUERY_PARAM_READER" | "ID_READER" | "LOADER" | "ALPHA_HIDDEN")[];
78
+ export declare const HiddenFieldTypes: ("HTTP" | "QUERY_PARAM_READER" | "ALPHA_HIDDEN")[];
78
79
  //# sourceMappingURL=FieldType.d.ts.map
@@ -690,7 +690,7 @@ export declare const isHiddenFieldType: (field: {
690
690
  value: undefined;
691
691
  config: HiddenField;
692
692
  };
693
- export type NonInteractiveFieldType = Divider | PageHeader | ImageViewField | Paragraph | Heading | BulletList | DataField | AlphaPrintButton | HttpField | LinkButtonField | QueryParamReaderField | LoaderField | AutocompleteField;
693
+ export type NonInteractiveFieldType = Divider | PageHeader | ImageViewField | Paragraph | Heading | BulletList | DataField | AlphaPrintButton | LinkButtonField | LoaderField | AutocompleteField;
694
694
  export type InteractiveFieldType = Exclude<FieldConfig, NonInteractiveFieldType>;
695
695
  export declare const isNonInteractiveFieldType: (field: FieldConfig) => field is NonInteractiveFieldType;
696
696
  export {};
@@ -58,6 +58,12 @@ export declare const CheckboxFieldValue: z.ZodBoolean;
58
58
  export type CheckboxFieldValue = z.infer<typeof CheckboxFieldValue>;
59
59
  export declare const NumberFieldValue: z.ZodNumber;
60
60
  export type NumberFieldValue = z.infer<typeof NumberFieldValue>;
61
+ export declare const SignatureFieldValue: z.ZodObject<{
62
+ path: z.core.$ZodBranded<z.ZodString, "DocumentPath", "out">;
63
+ originalFilename: z.ZodString;
64
+ type: z.ZodString;
65
+ }, z.core.$strip>;
66
+ export type SignatureFieldValue = z.infer<typeof SignatureFieldValue>;
61
67
  export declare const ButtonFieldValue: z.ZodNumber;
62
68
  export type ButtonFieldValue = z.infer<typeof ButtonFieldValue>;
63
69
  export declare const VerificationStatusValue: z.ZodEnum<{
@@ -1,6 +1,31 @@
1
+ import { FormConditionalParameters } from '../conditionals/conditionals';
1
2
  import { FieldConditional } from './Conditional';
2
3
  import { TranslationConfig } from './TranslationConfig';
3
- import { SelectOption, ValidationConfig } from './FieldConfig';
4
+ import { JurisdictionReference } from '../users/userReferences';
5
+ import { ComputedDefaultValue, SelectOption, ValidationConfig } from './FieldConfig';
6
+ /**
7
+ * Creates a {@link ComputedDefaultValue} descriptor for use in a field's `defaultValue`.
8
+ *
9
+ * Unlike `field(id).customClientEvaluation(fn)`, this builder is **not tied to any
10
+ * specific field**. Use it when the initial value should be derived purely from
11
+ * context variables (`$now`, `$online`, system variables such as `$user`) rather
12
+ * than from another field's current value.
13
+ *
14
+ * The serialised function receives `(undefined, context)` at runtime, where
15
+ * `context` is a {@link FormConditionalParameters} object.
16
+ *
17
+ * External references (e.g. lodash) are **not** available inside the function body —
18
+ * all logic must be self-contained so the code survives serialisation.
19
+ *
20
+ * @example
21
+ * // Default a date field to today
22
+ * defaultValue: evaluate((_, ctx) => ctx.$now)
23
+ *
24
+ * @example
25
+ * // Default to the current user's role
26
+ * defaultValue: evaluate((_, ctx) => ctx.user.role)
27
+ */
28
+ export declare function evaluate(computationFn: (fieldValue: undefined, context: FormConditionalParameters) => unknown): ComputedDefaultValue;
4
29
  /**
5
30
  * Entry point for defining conditional logic or configuration for a form field.
6
31
  * @param fieldId - The ID of the field to define rules or config for.
@@ -11,12 +36,14 @@ export declare function field(fieldId: string, options?: {
11
36
  conditionals?: FieldConditional[];
12
37
  validations?: ValidationConfig[];
13
38
  searchCriteriaLabelPrefix?: TranslationConfig;
39
+ allowedLocations?: JurisdictionReference;
14
40
  }): {
15
41
  range: () => {
16
42
  options?: SelectOption[];
17
43
  conditionals?: FieldConditional[];
18
44
  validations?: ValidationConfig[];
19
45
  searchCriteriaLabelPrefix?: TranslationConfig;
46
+ allowedLocations?: JurisdictionReference;
20
47
  fieldId: string;
21
48
  fieldType: "field";
22
49
  } & {
@@ -29,6 +56,7 @@ export declare function field(fieldId: string, options?: {
29
56
  conditionals?: FieldConditional[];
30
57
  validations?: ValidationConfig[];
31
58
  searchCriteriaLabelPrefix?: TranslationConfig;
59
+ allowedLocations?: JurisdictionReference;
32
60
  fieldId: string;
33
61
  fieldType: "field";
34
62
  } & {
@@ -41,6 +69,7 @@ export declare function field(fieldId: string, options?: {
41
69
  conditionals?: FieldConditional[];
42
70
  validations?: ValidationConfig[];
43
71
  searchCriteriaLabelPrefix?: TranslationConfig;
72
+ allowedLocations?: JurisdictionReference;
44
73
  fieldId: string;
45
74
  fieldType: "field";
46
75
  } & {
@@ -53,6 +82,7 @@ export declare function field(fieldId: string, options?: {
53
82
  conditionals?: FieldConditional[];
54
83
  validations?: ValidationConfig[];
55
84
  searchCriteriaLabelPrefix?: TranslationConfig;
85
+ allowedLocations?: JurisdictionReference;
56
86
  fieldId: string;
57
87
  fieldType: "field";
58
88
  } & {
@@ -107,6 +137,8 @@ export declare function field(fieldId: string, options?: {
107
137
  fieldId: string;
108
138
  };
109
139
  object: (options: Record<string, any>) => import("../conditionals/conditionals").JSONSchema;
140
+ customClientValidator(validationFn: (fieldValue: unknown, context: import(".").ClientFunctionContext) => boolean): import("../conditionals/conditionals").JSONSchema;
141
+ customClientEvaluation(computationFn: (fieldValue: unknown, context: import(".").ClientFunctionContext) => unknown): import("./FieldConfig").CodeToEvaluate;
110
142
  };
111
143
  asDob(): any;
112
144
  asAge(): any;
@@ -144,6 +176,8 @@ export declare function field(fieldId: string, options?: {
144
176
  fieldId: string;
145
177
  };
146
178
  object: (options: Record<string, any>) => import("../conditionals/conditionals").JSONSchema;
179
+ customClientValidator(validationFn: (fieldValue: unknown, context: import(".").ClientFunctionContext) => boolean): import("../conditionals/conditionals").JSONSchema;
180
+ customClientEvaluation(computationFn: (fieldValue: unknown, context: import(".").ClientFunctionContext) => unknown): import("./FieldConfig").CodeToEvaluate;
147
181
  };
148
182
  getByPath(fieldPath: string[]): {
149
183
  $$subfield: string[];
@@ -189,6 +223,8 @@ export declare function field(fieldId: string, options?: {
189
223
  fieldId: string;
190
224
  };
191
225
  object: (options: Record<string, any>) => import("../conditionals/conditionals").JSONSchema;
226
+ customClientValidator(validationFn: (fieldValue: unknown, context: import(".").ClientFunctionContext) => boolean): import("../conditionals/conditionals").JSONSchema;
227
+ customClientEvaluation(computationFn: (fieldValue: unknown, context: import(".").ClientFunctionContext) => unknown): import("./FieldConfig").CodeToEvaluate;
192
228
  };
193
229
  getByPath(fieldPath: string[]): any;
194
230
  asDob(): {
@@ -232,6 +268,8 @@ export declare function field(fieldId: string, options?: {
232
268
  fieldId: string;
233
269
  };
234
270
  object: (options: Record<string, any>) => import("../conditionals/conditionals").JSONSchema;
271
+ customClientValidator(validationFn: (fieldValue: unknown, context: import(".").ClientFunctionContext) => boolean): import("../conditionals/conditionals").JSONSchema;
272
+ customClientEvaluation(computationFn: (fieldValue: unknown, context: import(".").ClientFunctionContext) => unknown): import("./FieldConfig").CodeToEvaluate;
235
273
  };
236
274
  asAge(): {
237
275
  $$subfield: string[];
@@ -274,6 +312,8 @@ export declare function field(fieldId: string, options?: {
274
312
  fieldId: string;
275
313
  };
276
314
  object: (options: Record<string, any>) => import("../conditionals/conditionals").JSONSchema;
315
+ customClientValidator(validationFn: (fieldValue: unknown, context: import(".").ClientFunctionContext) => boolean): import("../conditionals/conditionals").JSONSchema;
316
+ customClientEvaluation(computationFn: (fieldValue: unknown, context: import(".").ClientFunctionContext) => unknown): import("./FieldConfig").CodeToEvaluate;
277
317
  };
278
318
  isAfter(): {
279
319
  days: (days: number) => {
@@ -309,6 +349,8 @@ export declare function field(fieldId: string, options?: {
309
349
  fieldId: string;
310
350
  };
311
351
  object: (options: Record<string, any>) => import("../conditionals/conditionals").JSONSchema;
352
+ customClientValidator(validationFn: (fieldValue: unknown, context: import(".").ClientFunctionContext) => boolean): import("../conditionals/conditionals").JSONSchema;
353
+ customClientEvaluation(computationFn: (fieldValue: unknown, context: import(".").ClientFunctionContext) => unknown): import("./FieldConfig").CodeToEvaluate;
312
354
  };
313
355
  asDob(): {
314
356
  $$subfield: string[];
@@ -355,6 +397,8 @@ export declare function field(fieldId: string, options?: {
355
397
  fieldId: string;
356
398
  };
357
399
  object: (options: Record<string, any>) => import("../conditionals/conditionals").JSONSchema;
400
+ customClientValidator(validationFn: (fieldValue: unknown, context: import(".").ClientFunctionContext) => boolean): import("../conditionals/conditionals").JSONSchema;
401
+ customClientEvaluation(computationFn: (fieldValue: unknown, context: import(".").ClientFunctionContext) => unknown): import("./FieldConfig").CodeToEvaluate;
358
402
  };
359
403
  asDob(): any;
360
404
  asAge(): any;
@@ -392,6 +436,8 @@ export declare function field(fieldId: string, options?: {
392
436
  fieldId: string;
393
437
  };
394
438
  object: (options: Record<string, any>) => import("../conditionals/conditionals").JSONSchema;
439
+ customClientValidator(validationFn: (fieldValue: unknown, context: import(".").ClientFunctionContext) => boolean): import("../conditionals/conditionals").JSONSchema;
440
+ customClientEvaluation(computationFn: (fieldValue: unknown, context: import(".").ClientFunctionContext) => unknown): import("./FieldConfig").CodeToEvaluate;
395
441
  };
396
442
  asAge(): {
397
443
  $$subfield: string[];
@@ -438,6 +484,8 @@ export declare function field(fieldId: string, options?: {
438
484
  fieldId: string;
439
485
  };
440
486
  object: (options: Record<string, any>) => import("../conditionals/conditionals").JSONSchema;
487
+ customClientValidator(validationFn: (fieldValue: unknown, context: import(".").ClientFunctionContext) => boolean): import("../conditionals/conditionals").JSONSchema;
488
+ customClientEvaluation(computationFn: (fieldValue: unknown, context: import(".").ClientFunctionContext) => unknown): import("./FieldConfig").CodeToEvaluate;
441
489
  };
442
490
  asDob(): any;
443
491
  asAge(): any;
@@ -475,6 +523,8 @@ export declare function field(fieldId: string, options?: {
475
523
  fieldId: string;
476
524
  };
477
525
  object: (options: Record<string, any>) => import("../conditionals/conditionals").JSONSchema;
526
+ customClientValidator(validationFn: (fieldValue: unknown, context: import(".").ClientFunctionContext) => boolean): import("../conditionals/conditionals").JSONSchema;
527
+ customClientEvaluation(computationFn: (fieldValue: unknown, context: import(".").ClientFunctionContext) => unknown): import("./FieldConfig").CodeToEvaluate;
478
528
  };
479
529
  isAfter(): {
480
530
  days: (days: number) => {
@@ -510,5 +560,7 @@ export declare function field(fieldId: string, options?: {
510
560
  fieldId: string;
511
561
  };
512
562
  object: (options: Record<string, any>) => import("../conditionals/conditionals").JSONSchema;
563
+ customClientValidator(validationFn: (fieldValue: unknown, context: import(".").ClientFunctionContext) => boolean): import("../conditionals/conditionals").JSONSchema;
564
+ customClientEvaluation(computationFn: (fieldValue: unknown, context: import(".").ClientFunctionContext) => unknown): import("./FieldConfig").CodeToEvaluate;
513
565
  };
514
566
  //# sourceMappingURL=field.d.ts.map
@@ -1,282 +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
- content?: {
245
- immediateCorrection?: boolean | undefined;
246
- } | undefined;
247
- } | {
248
- id: string & import("zod").$brand<"UUID">;
249
- transactionId: string;
250
- createdByUserType: "user" | "system";
251
- createdAt: string;
252
- createdBy: string;
253
- declaration: Record<string, import("..").FieldUpdateValue>;
254
- status: "Requested" | "Accepted" | "Rejected";
255
- type: "REJECT_CORRECTION";
256
- requestId: string;
257
- content: {
258
- reason: string;
259
- };
260
- createdByRole?: string | undefined;
261
- createdBySignature?: (string & import("zod").$brand<"DocumentPath">) | null | undefined;
262
- createdAtLocation?: (string & import("zod").$brand<"UUID">) | null | undefined;
263
- annotation?: Record<string, import("..").FieldUpdateValue> | null | undefined;
264
- originalActionId?: (string & import("zod").$brand<"UUID">) | null | undefined;
265
- } | {
266
- id: string & import("zod").$brand<"UUID">;
267
- transactionId: string;
268
- createdByUserType: "user" | "system";
269
- createdAt: string;
270
- createdBy: string;
271
- declaration: Record<string, import("..").FieldUpdateValue>;
272
- status: "Requested" | "Accepted" | "Rejected";
273
- type: "UNASSIGN";
274
- createdByRole?: string | undefined;
275
- createdBySignature?: (string & import("zod").$brand<"DocumentPath">) | null | undefined;
276
- createdAtLocation?: (string & import("zod").$brand<"UUID">) | null | undefined;
277
- annotation?: Record<string, import("..").FieldUpdateValue> | null | undefined;
278
- originalActionId?: (string & import("zod").$brand<"UUID">) | null | undefined;
279
- } | {
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<{
280
15
  id: string & import("zod").$brand<"UUID">;
281
16
  transactionId: string;
282
17
  createdByUserType: "user" | "system";
@@ -284,25 +19,12 @@ export declare function getActionUpdateMetadata(actions: Action[]): Partial<{
284
19
  createdBy: string;
285
20
  declaration: Record<string, import("..").FieldUpdateValue>;
286
21
  status: "Requested" | "Accepted" | "Rejected";
287
- type: "READ";
288
22
  createdByRole?: string | undefined;
289
23
  createdBySignature?: (string & import("zod").$brand<"DocumentPath">) | null | undefined;
290
24
  createdAtLocation?: (string & import("zod").$brand<"UUID">) | null | undefined;
291
25
  annotation?: Record<string, import("..").FieldUpdateValue> | null | undefined;
292
26
  originalActionId?: (string & import("zod").$brand<"UUID">) | null | undefined;
293
- } | {
294
- id: string & import("zod").$brand<"UUID">;
295
- transactionId: string;
296
- createdByUserType: "user" | "system";
297
- createdAt: string;
298
- createdBy: string;
299
- type: "CUSTOM" | "NOTIFY" | "DECLARE" | "REGISTER" | "EDIT" | "REJECT" | "ARCHIVE" | "PRINT_CERTIFICATE" | "REQUEST_CORRECTION" | "REJECT_CORRECTION" | "APPROVE_CORRECTION";
300
- status: "Rejected";
301
- createdByRole?: string | undefined;
302
- createdBySignature?: (string & import("zod").$brand<"DocumentPath">) | null | undefined;
303
- createdAtLocation?: (string & import("zod").$brand<"UUID">) | null | undefined;
304
- originalActionId?: (string & import("zod").$brand<"UUID">) | null | undefined;
305
- }>;
27
+ }, "createdByUserType" | "createdAt" | "createdBy" | "createdByRole" | "createdAtLocation">;
306
28
  /**
307
29
  * @returns the legal statuses of the event. Event is considered legal if it has been accepted.
308
30
  * @see EventIndex for the description of the returned object.
@@ -562,7 +562,7 @@ export declare function timePeriodToDateRange(value: SelectDateRangeValue): {
562
562
  };
563
563
  export declare function mergeDrafts(currentDraft: Draft, incomingDraft: Draft): Draft;
564
564
  export declare function getPendingAction(actions: Action[]): ActionDocument;
565
- export declare function getCompleteActionAnnotation(annotation: ActionUpdate, event: EventDocument, action: ActionDocument): ActionUpdate;
565
+ export declare function getCompleteActionAnnotation(event: EventDocument, action: ActionDocument): ActionUpdate;
566
566
  /**
567
567
  * Resolves the complete content for an action, inheriting from its original
568
568
  * Requested action when the Accepted action carries no content of its own.
@@ -1005,7 +1005,54 @@ function createFieldConditionals(fieldId) {
1005
1005
  }
1006
1006
  },
1007
1007
  required: [fieldId]
1008
- })
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
+ }
1009
1056
  };
1010
1057
  }
1011
1058