@opencrvs/toolkit 1.8.0-rc.f7910f3 → 1.8.0-rc.f82791e

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 (38) hide show
  1. package/README.md +1 -1
  2. package/dist/commons/api/router.d.ts +10107 -14906
  3. package/dist/commons/conditionals/conditionals.d.ts +30 -5
  4. package/dist/commons/conditionals/validate.d.ts +12 -17
  5. package/dist/commons/events/ActionConfig.d.ts +85214 -5919
  6. package/dist/commons/events/ActionDocument.d.ts +7706 -295
  7. package/dist/commons/events/ActionInput.d.ts +2164 -419
  8. package/dist/commons/events/ActionType.d.ts +26 -16
  9. package/dist/commons/events/AdvancedSearchConfig.d.ts +371 -25
  10. package/dist/commons/events/CompositeFieldValue.d.ts +3 -0
  11. package/dist/commons/events/Conditional.d.ts +21 -5
  12. package/dist/commons/events/Draft.d.ts +75 -45
  13. package/dist/commons/events/EventConfig.d.ts +40575 -3186
  14. package/dist/commons/events/EventConfigInput.d.ts +5 -2
  15. package/dist/commons/events/EventDocument.d.ts +1027 -379
  16. package/dist/commons/events/EventIndex.d.ts +921 -7
  17. package/dist/commons/events/EventInput.d.ts +13 -0
  18. package/dist/commons/events/EventMetadata.d.ts +16 -3
  19. package/dist/commons/events/FieldConfig.d.ts +3702 -757
  20. package/dist/commons/events/FieldType.d.ts +1 -2
  21. package/dist/commons/events/FieldValue.d.ts +1 -1
  22. package/dist/commons/events/FormConfig.d.ts +38913 -348
  23. package/dist/commons/events/PageConfig.d.ts +9803 -0
  24. package/dist/commons/events/SummaryConfig.d.ts +81 -42
  25. package/dist/commons/events/TemplateConfig.d.ts +5 -5
  26. package/dist/commons/events/User.d.ts +5 -0
  27. package/dist/commons/events/WorkqueueConfig.d.ts +44 -20
  28. package/dist/commons/events/defineConfig.d.ts +6747 -502
  29. package/dist/commons/events/event.d.ts +25 -0
  30. package/dist/commons/events/field.d.ts +68 -0
  31. package/dist/commons/events/index.d.ts +5 -1
  32. package/dist/commons/events/scopes.d.ts +26 -0
  33. package/dist/commons/events/test.utils.d.ts +63 -321
  34. package/dist/commons/events/utils.d.ts +3422 -206
  35. package/dist/commons/events/utils.test.d.ts +2 -0
  36. package/dist/conditionals/index.js +191 -120
  37. package/dist/events/index.js +1821 -1192
  38. package/package.json +3 -2
@@ -30,13 +30,18 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
30
30
  // src/events/index.ts
31
31
  var events_exports = {};
32
32
  __export(events_exports, {
33
+ ACTION_ALLOWED_SCOPES: () => ACTION_ALLOWED_SCOPES,
34
+ Action: () => Action,
33
35
  ActionBase: () => ActionBase,
34
36
  ActionConditional: () => ActionConditional,
35
37
  ActionConfig: () => ActionConfig,
36
38
  ActionConfigBase: () => ActionConfigBase,
37
39
  ActionDocument: () => ActionDocument,
40
+ ActionFormConfig: () => ActionFormConfig,
38
41
  ActionInput: () => ActionInput,
42
+ ActionStatus: () => ActionStatus,
39
43
  ActionType: () => ActionType,
44
+ ActionTypes: () => ActionTypes,
40
45
  ActionUpdate: () => ActionUpdate,
41
46
  AddressFieldUpdateValue: () => AddressFieldUpdateValue,
42
47
  AddressFieldValue: () => AddressFieldValue,
@@ -45,17 +50,30 @@ __export(events_exports, {
45
50
  AdvancedSearchConfig: () => AdvancedSearchConfig,
46
51
  ApproveCorrectionActionInput: () => ApproveCorrectionActionInput,
47
52
  ArchiveActionInput: () => ArchiveActionInput,
53
+ AssignActionInput: () => AssignActionInput,
54
+ AsyncRejectActionDocument: () => AsyncRejectActionDocument,
48
55
  BaseActionInput: () => BaseActionInput,
56
+ CONFIG_GET_ALLOWED_SCOPES: () => CONFIG_GET_ALLOWED_SCOPES,
57
+ CONFIG_SEARCH_ALLOWED_SCOPES: () => CONFIG_SEARCH_ALLOWED_SCOPES,
49
58
  CertificateConfig: () => CertificateConfig,
50
59
  CertificateTemplateConfig: () => CertificateTemplateConfig,
51
60
  CheckboxFieldValue: () => CheckboxFieldValue,
52
61
  Clause: () => Clause,
53
62
  Conditional: () => Conditional,
54
63
  ConditionalType: () => ConditionalType,
64
+ ConfirmableActions: () => ConfirmableActions,
65
+ DataEntry: () => DataEntry,
55
66
  DataFieldValue: () => DataFieldValue,
56
67
  DateValue: () => DateValue,
68
+ DeclarationActionConfig: () => DeclarationActionConfig,
69
+ DeclarationActions: () => DeclarationActions,
70
+ DeclarationFormConfig: () => DeclarationFormConfig,
71
+ DeclarationReviewConfig: () => DeclarationReviewConfig,
72
+ DeclarationUpdateActions: () => DeclarationUpdateActions,
57
73
  DeclareActionInput: () => DeclareActionInput,
58
74
  DeduplicationConfig: () => DeduplicationConfig,
75
+ DeleteActionInput: () => DeleteActionInput,
76
+ DisplayOnReviewConditional: () => DisplayOnReviewConditional,
59
77
  Draft: () => Draft,
60
78
  DraftInput: () => DraftInput,
61
79
  EmailField: () => EmailField,
@@ -63,13 +81,17 @@ __export(events_exports, {
63
81
  EnableConditional: () => EnableConditional,
64
82
  EventConfig: () => EventConfig,
65
83
  EventDocument: () => EventDocument,
84
+ EventFieldConfigSchema: () => EventFieldConfigSchema,
85
+ EventFieldId: () => EventFieldId,
66
86
  EventIndex: () => EventIndex,
67
87
  EventInput: () => EventInput,
68
88
  EventMetadata: () => EventMetadata,
69
89
  EventSearchIndex: () => EventSearchIndex,
70
90
  EventStatus: () => EventStatus,
71
91
  EventStatuses: () => EventStatuses,
92
+ FieldConditional: () => FieldConditional,
72
93
  FieldConfig: () => FieldConfig,
94
+ FieldConfigSchema: () => FieldConfigSchema,
73
95
  FieldType: () => FieldType,
74
96
  FieldUpdateValue: () => FieldUpdateValue,
75
97
  FieldValue: () => FieldValue,
@@ -77,49 +99,66 @@ __export(events_exports, {
77
99
  FileFieldValueWithOption: () => FileFieldValueWithOption,
78
100
  FileFieldWithOptionValue: () => FileFieldWithOptionValue,
79
101
  FormConfig: () => FormConfig,
80
- FormPage: () => FormPage,
81
102
  FormPageConfig: () => FormPageConfig,
82
- FormPageType: () => FormPageType,
83
103
  GenericAddressUpdateValue: () => GenericAddressUpdateValue,
84
104
  GenericAddressValue: () => GenericAddressValue,
85
105
  GeographicalArea: () => GeographicalArea,
86
106
  ImageMimeType: () => ImageMimeType,
87
107
  LanguageConfig: () => LanguageConfig,
88
- LatentActions: () => LatentActions,
89
108
  MarkedAsDuplicateActionInput: () => MarkedAsDuplicateActionInput,
109
+ MatchType: () => MatchType,
90
110
  MimeType: () => MimeType,
111
+ NonEmptyTextValue: () => NonEmptyTextValue,
91
112
  NotifyActionInput: () => NotifyActionInput,
92
113
  NumberFieldValue: () => NumberFieldValue,
114
+ PageConfig: () => PageConfig,
115
+ PageTypes: () => PageTypes,
93
116
  PrintCertificateActionInput: () => PrintCertificateActionInput,
117
+ QueryInput: () => QueryInput,
118
+ QueryType: () => QueryType,
119
+ ReadActionInput: () => ReadActionInput,
120
+ RegisterAction: () => RegisterAction,
94
121
  RegisterActionInput: () => RegisterActionInput,
95
122
  RejectCorrectionActionInput: () => RejectCorrectionActionInput,
96
123
  RejectDeclarationActionInput: () => RejectDeclarationActionInput,
97
124
  RequestCorrectionActionInput: () => RequestCorrectionActionInput,
98
- RequiredTextValue: () => RequiredTextValue,
99
125
  ResolvedUser: () => ResolvedUser,
100
126
  RuralAddressUpdateValue: () => RuralAddressUpdateValue,
101
127
  RuralAddressValue: () => RuralAddressValue,
128
+ SearchField: () => SearchField,
129
+ SelectOption: () => SelectOption,
102
130
  ShowConditional: () => ShowConditional,
103
131
  SummaryConfig: () => SummaryConfig,
104
132
  TextValue: () => TextValue,
105
133
  TranslationConfig: () => TranslationConfig,
134
+ UnassignActionInput: () => UnassignActionInput,
106
135
  UrbanAddressUpdateValue: () => UrbanAddressUpdateValue,
107
136
  UrbanAddressValue: () => UrbanAddressValue,
108
137
  ValidateActionInput: () => ValidateActionInput,
109
- VerificationPage: () => VerificationPage,
138
+ VerificationActionConfig: () => VerificationActionConfig,
110
139
  VerificationPageConfig: () => VerificationPageConfig,
111
140
  WorkqueueConfig: () => WorkqueueConfig,
141
+ ZodDate: () => ZodDate,
112
142
  alwaysTrue: () => alwaysTrue,
113
143
  and: () => and,
144
+ annotationActions: () => annotationActions,
114
145
  applyDraftsToEventIndex: () => applyDraftsToEventIndex,
146
+ areConditionsMet: () => areConditionsMet,
115
147
  compositeFieldTypes: () => compositeFieldTypes,
116
148
  createEmptyDraft: () => createEmptyDraft,
149
+ createEventConditionals: () => createEventConditionals,
150
+ createFieldConditionals: () => createFieldConditionals,
117
151
  createValidationSchema: () => createValidationSchema,
118
152
  deepDropNulls: () => deepDropNulls,
153
+ deepMerge: () => deepMerge,
154
+ defineActionForm: () => defineActionForm,
119
155
  defineConditional: () => defineConditional,
120
156
  defineConfig: () => defineConfig,
121
- defineForm: () => defineForm,
157
+ defineDeclarationForm: () => defineDeclarationForm,
158
+ defineFormConditional: () => defineFormConditional,
122
159
  defineFormPage: () => defineFormPage,
160
+ definePage: () => definePage,
161
+ defineWorkqueue: () => defineWorkqueue,
123
162
  errorMessages: () => errorMessages,
124
163
  event: () => event,
125
164
  eventMetadataLabelMap: () => eventMetadataLabelMap,
@@ -128,35 +167,38 @@ __export(events_exports, {
128
167
  eventStatuses: () => eventStatuses,
129
168
  field: () => field,
130
169
  fieldTypes: () => fieldTypes,
131
- findActiveActionFields: () => findActiveActionFields,
132
- findActiveActionForm: () => findActiveActionForm,
133
- findActiveActionFormFields: () => findActiveActionFormFields,
134
- findActiveActionFormPages: () => findActiveActionFormPages,
170
+ filterUnallowedActions: () => filterUnallowedActions,
135
171
  findActiveDrafts: () => findActiveDrafts,
136
- findInputPageFields: () => findInputPageFields,
137
- findPageFields: () => findPageFields,
172
+ findAllFields: () => findAllFields,
173
+ findLastAssignmentAction: () => findLastAssignmentAction,
174
+ findRecordActionPages: () => findRecordActionPages,
175
+ generateActionAnnotationInput: () => generateActionAnnotationInput,
176
+ generateActionDeclarationInput: () => generateActionDeclarationInput,
138
177
  generateActionDocument: () => generateActionDocument,
139
- generateActionInput: () => generateActionInput,
140
- generateActionMetadataInput: () => generateActionMetadataInput,
141
178
  generateEventDocument: () => generateEventDocument,
142
179
  generateEventDraftDocument: () => generateEventDraftDocument,
143
180
  generateTransactionId: () => generateTransactionId,
144
181
  generateTranslationConfig: () => generateTranslationConfig,
145
- getActiveActionFields: () => getActiveActionFields,
146
- getActiveActionFormPages: () => getActiveActionFormPages,
147
- getAllFields: () => getAllFields,
148
- getAllPages: () => getAllPages,
182
+ getAcceptedActions: () => getAcceptedActions,
183
+ getActionAnnotation: () => getActionAnnotation,
184
+ getActionAnnotationFields: () => getActionAnnotationFields,
185
+ getActionReview: () => getActionReview,
186
+ getActionReviewFields: () => getActionReviewFields,
187
+ getActionVerificationPageIds: () => getActionVerificationPageIds,
188
+ getAnnotationFromDrafts: () => getAnnotationFromDrafts,
189
+ getAssignedUserFromActions: () => getAssignedUserFromActions,
149
190
  getCurrentEventState: () => getCurrentEventState,
150
191
  getCurrentEventStateWithDrafts: () => getCurrentEventStateWithDrafts,
151
- getEventConfiguration: () => getEventConfiguration,
152
- getFieldValidationErrors: () => getFieldValidationErrors,
153
- getFormFields: () => getFormFields,
154
- getMetadataForAction: () => getMetadataForAction,
155
- getVisiblePagesFormFields: () => getVisiblePagesFormFields,
192
+ getDeclaration: () => getDeclaration,
193
+ getDeclarationFields: () => getDeclarationFields,
194
+ getDeclarationPages: () => getDeclarationPages,
195
+ getVisibleVerificationPageIds: () => getVisibleVerificationPageIds,
196
+ hasAnyOfScopes: () => hasAnyOfScopes,
156
197
  isAddressFieldType: () => isAddressFieldType,
157
198
  isAdministrativeAreaFieldType: () => isAdministrativeAreaFieldType,
158
199
  isBulletListFieldType: () => isBulletListFieldType,
159
200
  isCheckboxFieldType: () => isCheckboxFieldType,
201
+ isConditionMet: () => isConditionMet,
160
202
  isCountryFieldType: () => isCountryFieldType,
161
203
  isDataFieldType: () => isDataFieldType,
162
204
  isDateFieldType: () => isDateFieldType,
@@ -164,6 +206,7 @@ __export(events_exports, {
164
206
  isEmailFieldType: () => isEmailFieldType,
165
207
  isFacilityFieldType: () => isFacilityFieldType,
166
208
  isFieldConfigDefaultValue: () => isFieldConfigDefaultValue,
209
+ isFieldDisplayedOnReview: () => isFieldDisplayedOnReview,
167
210
  isFieldEnabled: () => isFieldEnabled,
168
211
  isFieldValue: () => isFieldValue,
169
212
  isFieldValueWithoutTemplates: () => isFieldValueWithoutTemplates,
@@ -184,50 +227,71 @@ __export(events_exports, {
184
227
  isTextFieldType: () => isTextFieldType,
185
228
  isUndeclaredDraft: () => isUndeclaredDraft,
186
229
  isVerificationPage: () => isVerificationPage,
230
+ isWriteAction: () => isWriteAction,
187
231
  mapFieldTypeToEmptyValue: () => mapFieldTypeToEmptyValue,
188
232
  mapFieldTypeToMockValue: () => mapFieldTypeToMockValue,
189
233
  mapFieldTypeToZod: () => mapFieldTypeToZod,
234
+ never: () => never,
190
235
  not: () => not,
236
+ omitHiddenAnnotationFields: () => omitHiddenAnnotationFields,
237
+ omitHiddenFields: () => omitHiddenFields,
238
+ omitHiddenPaginatedFields: () => omitHiddenPaginatedFields,
191
239
  or: () => or,
192
- resolveLabelsFromKnownFields: () => resolveLabelsFromKnownFields,
193
- stripHiddenFields: () => stripHiddenFields,
240
+ runFieldValidations: () => runFieldValidations,
194
241
  user: () => user,
195
242
  validate: () => validate,
196
243
  validateFieldInput: () => validateFieldInput,
197
- validateWorkqueueConfig: () => validateWorkqueueConfig
244
+ writeActions: () => writeActions
198
245
  });
199
246
  module.exports = __toCommonJS(events_exports);
200
247
 
201
248
  // ../commons/src/events/ActionConfig.ts
202
- var import_zod7 = require("zod");
249
+ var import_zod9 = require("zod");
203
250
 
204
251
  // ../commons/src/events/Conditional.ts
205
252
  var import_zod = require("zod");
206
- function Conditional() {
207
- return import_zod.z.custom((val) => typeof val === "object" && val !== null);
208
- }
253
+ var Conditional = import_zod.z.custom(
254
+ (val) => typeof val === "object" && val !== null
255
+ );
209
256
  var ConditionalType = {
210
- /** When 'SHOW' conditional is defined, the action is shown to the user only if the condition is met */
211
257
  SHOW: "SHOW",
212
- /** If 'ENABLE' conditional is defined, the action is enabled only if the condition is met */
213
- ENABLE: "ENABLE"
258
+ ENABLE: "ENABLE",
259
+ DISPLAY_ON_REVIEW: "DISPLAY_ON_REVIEW"
214
260
  };
215
261
  var ShowConditional = import_zod.z.object({
216
262
  type: import_zod.z.literal(ConditionalType.SHOW),
217
- conditional: Conditional()
218
- });
263
+ conditional: Conditional
264
+ }).describe(
265
+ "If 'SHOW' conditional is defined, the component is shown to the user only if the condition is met"
266
+ );
219
267
  var EnableConditional = import_zod.z.object({
220
268
  type: import_zod.z.literal(ConditionalType.ENABLE),
221
- conditional: Conditional()
222
- });
269
+ conditional: Conditional
270
+ }).describe(
271
+ "If 'ENABLE' conditional is defined, the component is enabled only if the condition is met"
272
+ );
223
273
  var ActionConditional = import_zod.z.discriminatedUnion("type", [
224
274
  // Action can be shown / hidden
225
275
  ShowConditional,
226
276
  // Action can be shown to the user in the list but as disabled
227
277
  EnableConditional
228
278
  ]);
279
+ var DisplayOnReviewConditional = import_zod.z.object({
280
+ type: import_zod.z.literal(ConditionalType.DISPLAY_ON_REVIEW),
281
+ conditional: Conditional
282
+ }).describe(
283
+ "If 'DISPLAY_ON_REVIEW' conditional is defined, the component is shown on the review page only if both the 'DISPLAY_ON_REVIEW' and 'SHOW' conditions are met. This should only be used for fields within declaration forms, as they are the only ones with review pages."
284
+ );
285
+ var FieldConditional = import_zod.z.discriminatedUnion("type", [
286
+ // Field input can be shown / hidden
287
+ ShowConditional,
288
+ // Field input can be shown to the user but as disabled
289
+ EnableConditional,
290
+ // Field output can be shown / hidden on the review page
291
+ DisplayOnReviewConditional
292
+ ]);
229
293
 
230
- // ../commons/src/events/FormConfig.ts
294
+ // ../commons/src/events/PageConfig.ts
231
295
  var import_zod6 = require("zod");
232
296
 
233
297
  // ../commons/src/events/FieldConfig.ts
@@ -258,7 +322,6 @@ var FieldType = {
258
322
  RADIO_GROUP: "RADIO_GROUP",
259
323
  FILE: "FILE",
260
324
  FILE_WITH_OPTIONS: "FILE_WITH_OPTIONS",
261
- HIDDEN: "HIDDEN",
262
325
  BULLET_LIST: "BULLET_LIST",
263
326
  CHECKBOX: "CHECKBOX",
264
327
  SELECT: "SELECT",
@@ -363,7 +426,7 @@ var FileFieldWithOptionValue = import_zod3.z.array(FileFieldValueWithOption);
363
426
 
364
427
  // ../commons/src/events/FieldValue.ts
365
428
  var TextValue = import_zod4.z.string();
366
- var RequiredTextValue = TextValue.min(1);
429
+ var NonEmptyTextValue = TextValue.min(1);
367
430
  var DateValue = import_zod4.z.string().date().describe("Date in the format YYYY-MM-DD");
368
431
  var EmailValue = import_zod4.z.string().email();
369
432
  var CheckboxFieldValue = import_zod4.z.boolean();
@@ -396,35 +459,28 @@ var FieldUpdateValue = import_zod4.z.union([
396
459
 
397
460
  // ../commons/src/events/FieldConfig.ts
398
461
  var FieldId = import_zod5.z.string();
399
- var DependencyExpression = import_zod5.z.object({
400
- dependsOn: import_zod5.z.array(FieldId).default([]),
401
- expression: import_zod5.z.string()
402
- });
462
+ var ParentReference = import_zod5.z.object({
463
+ _fieldId: FieldId.optional()
464
+ }).optional();
403
465
  var BaseField = import_zod5.z.object({
404
466
  id: FieldId,
405
467
  defaultValue: import_zod5.z.union([
406
- // These are the currently supported default values types
407
- import_zod5.z.union([
408
- TextValue,
409
- RequiredTextValue,
410
- DateValue,
411
- NumberFieldValue,
412
- CheckboxFieldValue
413
- ]),
414
- DependencyExpression
468
+ TextValue,
469
+ NonEmptyTextValue,
470
+ DateValue,
471
+ NumberFieldValue,
472
+ CheckboxFieldValue
415
473
  ]).optional(),
416
- conditionals: import_zod5.z.array(ActionConditional).default([]).optional(),
474
+ parent: ParentReference,
475
+ conditionals: import_zod5.z.array(FieldConditional).default([]).optional(),
417
476
  required: import_zod5.z.boolean().default(false).optional(),
418
- disabled: import_zod5.z.boolean().default(false).optional(),
419
- hidden: import_zod5.z.boolean().default(false).optional(),
420
477
  placeholder: TranslationConfig.optional(),
421
478
  validation: import_zod5.z.array(
422
479
  import_zod5.z.object({
423
- validator: Conditional(),
480
+ validator: Conditional,
424
481
  message: TranslationConfig
425
482
  })
426
483
  ).default([]).optional(),
427
- dependsOn: import_zod5.z.array(FieldId).default([]).optional(),
428
484
  label: TranslationConfig,
429
485
  hideLabel: import_zod5.z.boolean().default(false).optional()
430
486
  });
@@ -433,7 +489,7 @@ var Divider = BaseField.extend({
433
489
  });
434
490
  var TextField = BaseField.extend({
435
491
  type: import_zod5.z.literal(FieldType.TEXT),
436
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional(),
492
+ defaultValue: NonEmptyTextValue.optional(),
437
493
  configuration: import_zod5.z.object({
438
494
  maxLength: import_zod5.z.number().optional().describe("Maximum length of the text"),
439
495
  type: import_zod5.z.enum(["text", "password"]).optional(),
@@ -443,7 +499,7 @@ var TextField = BaseField.extend({
443
499
  }).describe("Text input");
444
500
  var NumberField = BaseField.extend({
445
501
  type: import_zod5.z.literal(FieldType.NUMBER),
446
- defaultValue: import_zod5.z.union([NumberFieldValue, DependencyExpression]).optional(),
502
+ defaultValue: NumberFieldValue.optional(),
447
503
  configuration: import_zod5.z.object({
448
504
  min: import_zod5.z.number().optional().describe("Minimum value"),
449
505
  max: import_zod5.z.number().optional().describe("Maximum value"),
@@ -453,7 +509,7 @@ var NumberField = BaseField.extend({
453
509
  }).describe("Number input");
454
510
  var TextAreaField = BaseField.extend({
455
511
  type: import_zod5.z.literal(FieldType.TEXTAREA),
456
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional(),
512
+ defaultValue: NonEmptyTextValue.optional(),
457
513
  configuration: import_zod5.z.object({
458
514
  maxLength: import_zod5.z.number().optional().describe("Maximum length of the text"),
459
515
  rows: import_zod5.z.number().optional().describe("Number of visible text lines"),
@@ -487,11 +543,11 @@ var EmailField = BaseField.extend({
487
543
  configuration: import_zod5.z.object({
488
544
  maxLength: import_zod5.z.number().optional().describe("Maximum length of the text")
489
545
  }).default({ maxLength: 10 }).optional(),
490
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional()
546
+ defaultValue: NonEmptyTextValue.optional()
491
547
  });
492
548
  var DateField = BaseField.extend({
493
549
  type: import_zod5.z.literal(FieldType.DATE),
494
- defaultValue: import_zod5.z.union([DateValue, DependencyExpression]).optional(),
550
+ defaultValue: DateValue.optional(),
495
551
  configuration: import_zod5.z.object({
496
552
  notice: TranslationConfig.describe(
497
553
  "Text to display above the date input"
@@ -510,7 +566,7 @@ var HtmlFontVariant = import_zod5.z.enum([
510
566
  ]);
511
567
  var Paragraph = BaseField.extend({
512
568
  type: import_zod5.z.literal(FieldType.PARAGRAPH),
513
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional(),
569
+ defaultValue: NonEmptyTextValue.optional(),
514
570
  configuration: import_zod5.z.object({
515
571
  styles: import_zod5.z.object({
516
572
  fontVariant: HtmlFontVariant.optional()
@@ -519,7 +575,7 @@ var Paragraph = BaseField.extend({
519
575
  }).describe("A read-only HTML <p> paragraph");
520
576
  var PageHeader = BaseField.extend({
521
577
  type: import_zod5.z.literal(FieldType.PAGE_HEADER),
522
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional()
578
+ defaultValue: NonEmptyTextValue.optional()
523
579
  }).describe("A read-only header component for form pages");
524
580
  var File = BaseField.extend({
525
581
  type: import_zod5.z.literal(FieldType.FILE),
@@ -530,7 +586,8 @@ var File = BaseField.extend({
530
586
  width: import_zod5.z.enum(["full", "auto"]).optional().describe(
531
587
  "Whether the file upload button should take the full width of the container or not"
532
588
  )
533
- }).optional()
589
+ }).optional(),
590
+ fileName: TranslationConfig.optional()
534
591
  }).default({
535
592
  maxFileSize: DEFAULT_MAX_FILE_SIZE_BYTES
536
593
  })
@@ -541,7 +598,7 @@ var SelectOption = import_zod5.z.object({
541
598
  });
542
599
  var RadioGroup = BaseField.extend({
543
600
  type: import_zod5.z.literal(FieldType.RADIO_GROUP),
544
- defaultValue: import_zod5.z.union([TextValue, DependencyExpression]).optional(),
601
+ defaultValue: TextValue.optional(),
545
602
  options: import_zod5.z.array(SelectOption).describe("A list of options"),
546
603
  configuration: import_zod5.z.object({
547
604
  styles: import_zod5.z.object({
@@ -551,7 +608,7 @@ var RadioGroup = BaseField.extend({
551
608
  }).describe("Grouped radio options");
552
609
  var BulletList = BaseField.extend({
553
610
  type: import_zod5.z.literal(FieldType.BULLET_LIST),
554
- defaultValue: import_zod5.z.string().optional(),
611
+ defaultValue: TextValue.optional(),
555
612
  items: import_zod5.z.array(TranslationConfig).describe("A list of items"),
556
613
  configuration: import_zod5.z.object({
557
614
  styles: import_zod5.z.object({
@@ -561,16 +618,16 @@ var BulletList = BaseField.extend({
561
618
  }).describe("A list of bullet points");
562
619
  var Select = BaseField.extend({
563
620
  type: import_zod5.z.literal(FieldType.SELECT),
564
- defaultValue: import_zod5.z.union([TextValue, DependencyExpression]).optional(),
621
+ defaultValue: TextValue.optional(),
565
622
  options: import_zod5.z.array(SelectOption).describe("A list of options")
566
623
  }).describe("Select input");
567
624
  var Checkbox = BaseField.extend({
568
625
  type: import_zod5.z.literal(FieldType.CHECKBOX),
569
- defaultValue: import_zod5.z.union([CheckboxFieldValue, DependencyExpression]).optional()
626
+ defaultValue: CheckboxFieldValue.optional()
570
627
  }).describe("Boolean checkbox field");
571
628
  var Country = BaseField.extend({
572
629
  type: import_zod5.z.literal(FieldType.COUNTRY),
573
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional()
630
+ defaultValue: NonEmptyTextValue.optional()
574
631
  }).describe("Country select field");
575
632
  var AdministrativeAreas = import_zod5.z.enum([
576
633
  "ADMIN_STRUCTURE",
@@ -579,18 +636,18 @@ var AdministrativeAreas = import_zod5.z.enum([
579
636
  ]);
580
637
  var AdministrativeAreaConfiguration = import_zod5.z.object({
581
638
  partOf: import_zod5.z.object({
582
- $data: import_zod5.z.string()
639
+ $declaration: import_zod5.z.string()
583
640
  }).optional().describe("Parent location"),
584
641
  type: AdministrativeAreas
585
642
  }).describe("Administrative area options");
586
643
  var AdministrativeArea = BaseField.extend({
587
644
  type: import_zod5.z.literal(FieldType.ADMINISTRATIVE_AREA),
588
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional(),
645
+ defaultValue: NonEmptyTextValue.optional(),
589
646
  configuration: AdministrativeAreaConfiguration
590
647
  }).describe("Administrative area input field e.g. facility, office");
591
648
  var Location = BaseField.extend({
592
649
  type: import_zod5.z.literal(FieldType.LOCATION),
593
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional()
650
+ defaultValue: NonEmptyTextValue.optional()
594
651
  }).describe("Input field for a location");
595
652
  var FileUploadWithOptions = BaseField.extend({
596
653
  type: import_zod5.z.literal(FieldType.FILE_WITH_OPTIONS),
@@ -604,21 +661,30 @@ var FileUploadWithOptions = BaseField.extend({
604
661
  });
605
662
  var Facility = BaseField.extend({
606
663
  type: import_zod5.z.literal(FieldType.FACILITY),
607
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional()
664
+ defaultValue: NonEmptyTextValue.optional()
608
665
  }).describe("Input field for a facility");
609
666
  var Office = BaseField.extend({
610
667
  type: import_zod5.z.literal(FieldType.OFFICE),
611
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional()
668
+ defaultValue: NonEmptyTextValue.optional()
612
669
  }).describe("Input field for an office");
613
670
  var Address = BaseField.extend({
614
671
  type: import_zod5.z.literal(FieldType.ADDRESS),
615
672
  defaultValue: AddressFieldValue.optional()
616
673
  }).describe("Address input field \u2013 a combination of location and text fields");
674
+ var DataEntry = import_zod5.z.union([
675
+ import_zod5.z.object({
676
+ label: TranslationConfig,
677
+ value: TranslationConfig.or(import_zod5.z.string())
678
+ }),
679
+ import_zod5.z.object({
680
+ fieldId: import_zod5.z.string()
681
+ })
682
+ ]);
617
683
  var DataField = BaseField.extend({
618
684
  type: import_zod5.z.literal(FieldType.DATA),
619
685
  configuration: import_zod5.z.object({
620
686
  subtitle: TranslationConfig.optional(),
621
- data: import_zod5.z.array(import_zod5.z.object({ fieldId: import_zod5.z.string() }))
687
+ data: import_zod5.z.array(DataEntry)
622
688
  })
623
689
  }).describe("Data field for displaying read-only data");
624
690
  var FieldConfig = import_zod5.z.discriminatedUnion("type", [
@@ -646,21 +712,20 @@ var FieldConfig = import_zod5.z.discriminatedUnion("type", [
646
712
  DataField
647
713
  ]);
648
714
 
649
- // ../commons/src/events/FormConfig.ts
650
- var FormPageType = {
651
- FORM: "FORM",
652
- VERIFICATION: "VERIFICATION"
653
- };
654
- var FormPage = import_zod6.z.object({
715
+ // ../commons/src/events/PageConfig.ts
716
+ var PageTypes = import_zod6.z.enum(["FORM", "VERIFICATION"]);
717
+ var PageConfigBase = import_zod6.z.object({
655
718
  id: import_zod6.z.string().describe("Unique identifier for the page"),
656
- type: import_zod6.z.literal(FormPageType.FORM).default(FormPageType.FORM),
657
719
  title: TranslationConfig.describe("Header title of the page"),
658
720
  fields: import_zod6.z.array(FieldConfig).describe("Fields to be rendered on the page"),
659
- conditional: Conditional().optional().describe(
721
+ conditional: Conditional.optional().describe(
660
722
  "Page will be shown if condition is met. If conditional is not defined, the page will be always shown."
661
723
  )
662
724
  });
663
- var VerificationPageConfig = import_zod6.z.object({
725
+ var FormPageConfig = PageConfigBase.extend({
726
+ type: import_zod6.z.literal(PageTypes.enum.FORM).default(PageTypes.enum.FORM)
727
+ });
728
+ var VerificationActionConfig = import_zod6.z.object({
664
729
  verify: import_zod6.z.object({ label: TranslationConfig }),
665
730
  cancel: import_zod6.z.object({
666
731
  label: TranslationConfig,
@@ -670,242 +735,304 @@ var VerificationPageConfig = import_zod6.z.object({
670
735
  })
671
736
  })
672
737
  }).describe("Actions available on the verification page");
673
- var VerificationPage = FormPage.extend({
674
- type: import_zod6.z.literal(FormPageType.VERIFICATION),
675
- actions: VerificationPageConfig
676
- });
677
- var FormPageConfig = import_zod6.z.preprocess(
678
- (pageConfig) => ({
679
- ...pageConfig,
680
- type: pageConfig.type ?? FormPageType.FORM
681
- // Default type to "FORM" if not provided
682
- }),
683
- import_zod6.z.discriminatedUnion("type", [FormPage, VerificationPage])
684
- );
685
- var FormConfig = import_zod6.z.object({
686
- label: TranslationConfig.describe("Human readable description of the form"),
687
- version: import_zod6.z.object({
688
- id: import_zod6.z.string().describe(
689
- "Form version. Semantic versioning recommended. Example: 0.0.1"
690
- ),
691
- label: TranslationConfig.describe(
692
- "Human readable description of the version"
693
- )
694
- }),
695
- active: import_zod6.z.boolean().default(false).describe("Whether the form is active"),
696
- pages: import_zod6.z.array(FormPageConfig),
697
- review: import_zod6.z.object({
698
- title: TranslationConfig.describe(
699
- "Title of the form to show in review page"
700
- ),
701
- fields: import_zod6.z.array(FieldConfig).describe("Fields to be rendered on the review page for metadata")
702
- })
738
+ var VerificationPageConfig = FormPageConfig.extend({
739
+ type: import_zod6.z.literal(PageTypes.enum.VERIFICATION),
740
+ actions: VerificationActionConfig
703
741
  });
742
+ var PageConfig = import_zod6.z.discriminatedUnion("type", [
743
+ FormPageConfig,
744
+ VerificationPageConfig
745
+ ]);
704
746
 
705
747
  // ../commons/src/events/ActionType.ts
748
+ var import_zod7 = require("zod");
706
749
  var ActionType = {
750
+ // Pre-declaration actions
751
+ DELETE: "DELETE",
707
752
  CREATE: "CREATE",
708
- ASSIGN: "ASSIGN",
709
- UNASSIGN: "UNASSIGN",
710
- REGISTER: "REGISTER",
711
- VALIDATE: "VALIDATE",
712
- REQUEST_CORRECTION: "REQUEST_CORRECTION",
713
- REJECT_CORRECTION: "REJECT_CORRECTION",
714
- APPROVE_CORRECTION: "APPROVE_CORRECTION",
715
- DETECT_DUPLICATE: "DETECT_DUPLICATE",
716
753
  NOTIFY: "NOTIFY",
754
+ // Declaration actions
717
755
  DECLARE: "DECLARE",
718
- DELETE: "DELETE",
719
- PRINT_CERTIFICATE: "PRINT_CERTIFICATE",
720
- CUSTOM: "CUSTOM",
756
+ VALIDATE: "VALIDATE",
757
+ REGISTER: "REGISTER",
758
+ // Declaration system actions. Non-configurable.
759
+ DETECT_DUPLICATE: "DETECT_DUPLICATE",
721
760
  REJECT: "REJECT",
761
+ // REJECT_DECLARATION
722
762
  MARKED_AS_DUPLICATE: "MARKED_AS_DUPLICATE",
723
- ARCHIVE: "ARCHIVE"
763
+ // MARK_AS_DUPLICATE
764
+ ARCHIVE: "ARCHIVE",
765
+ // Record actions
766
+ PRINT_CERTIFICATE: "PRINT_CERTIFICATE",
767
+ REQUEST_CORRECTION: "REQUEST_CORRECTION",
768
+ REJECT_CORRECTION: "REJECT_CORRECTION",
769
+ APPROVE_CORRECTION: "APPROVE_CORRECTION",
770
+ // General actions
771
+ READ: "READ",
772
+ ASSIGN: "ASSIGN",
773
+ UNASSIGN: "UNASSIGN"
724
774
  };
725
- var LatentActions = [ActionType.ARCHIVE, ActionType.REJECT];
775
+ var ConfirmableActions = [
776
+ ActionType.NOTIFY,
777
+ ActionType.DECLARE,
778
+ ActionType.VALIDATE,
779
+ ActionType.REGISTER,
780
+ ActionType.REJECT,
781
+ ActionType.ARCHIVE,
782
+ ActionType.PRINT_CERTIFICATE
783
+ ];
784
+ var ActionTypes = import_zod7.z.enum([
785
+ "DELETE",
786
+ "CREATE",
787
+ "NOTIFY",
788
+ "DECLARE",
789
+ "VALIDATE",
790
+ "REGISTER",
791
+ "DETECT_DUPLICATE",
792
+ "REJECT",
793
+ "MARKED_AS_DUPLICATE",
794
+ "ARCHIVE",
795
+ "PRINT_CERTIFICATE",
796
+ "REQUEST_CORRECTION",
797
+ "REJECT_CORRECTION",
798
+ "APPROVE_CORRECTION",
799
+ "READ",
800
+ "ASSIGN",
801
+ "UNASSIGN"
802
+ ]);
803
+ var declarationActionValues = [
804
+ ActionTypes.enum.DECLARE,
805
+ ActionTypes.enum.VALIDATE,
806
+ ActionTypes.enum.REGISTER
807
+ ];
808
+ var DeclarationActions = ActionTypes.extract(declarationActionValues);
809
+ var declarationUpdateActionValues = [
810
+ ...declarationActionValues,
811
+ ActionTypes.enum.REQUEST_CORRECTION
812
+ ];
813
+ var DeclarationUpdateActions = ActionTypes.extract(
814
+ declarationUpdateActionValues
815
+ );
816
+ var annotationActions = ActionTypes.exclude(declarationActionValues);
817
+ var writeActions = ActionTypes.exclude([
818
+ ActionType.CREATE,
819
+ ActionType.READ,
820
+ ActionType.ASSIGN,
821
+ ActionType.UNASSIGN
822
+ ]);
823
+
824
+ // ../commons/src/events/FormConfig.ts
825
+ var import_zod8 = require("zod");
826
+ var DeclarationFormConfig = import_zod8.z.object({
827
+ label: TranslationConfig.describe("Human readable description of the form"),
828
+ pages: import_zod8.z.array(FormPageConfig)
829
+ }).describe("Configuration for a declaration form");
830
+ var ActionFormConfig = import_zod8.z.object({
831
+ label: TranslationConfig.describe("Human readable description of the form"),
832
+ pages: import_zod8.z.array(PageConfig)
833
+ });
834
+ var FormConfig = import_zod8.z.union([DeclarationFormConfig, ActionFormConfig]);
726
835
 
727
836
  // ../commons/src/events/ActionConfig.ts
728
- var ActionConditional2 = import_zod7.z.discriminatedUnion("type", [
837
+ var import_zod_openapi = require("zod-openapi");
838
+ (0, import_zod_openapi.extendZodWithOpenApi)(import_zod9.z);
839
+ var ActionConditional2 = import_zod9.z.discriminatedUnion("type", [
729
840
  /** If conditional is defined, the action is shown to the user only if the condition is met */
730
841
  ShowConditional,
731
842
  /** If conditional is defined, the action is enabled only if the condition is met */
732
843
  EnableConditional
733
844
  ]);
734
- var ActionConfigBase = import_zod7.z.object({
845
+ var DeclarationReviewConfig = import_zod9.z.object({
846
+ title: TranslationConfig.describe("Title of the review page"),
847
+ fields: import_zod9.z.array(FieldConfig).describe("Fields to be rendered on the review page for annotations.")
848
+ }).describe("Configuration for **declaration** review page.");
849
+ var ActionConfigBase = import_zod9.z.object({
735
850
  label: TranslationConfig,
736
- conditionals: import_zod7.z.array(ActionConditional2).optional().default([]),
737
- draft: import_zod7.z.boolean().optional(),
738
- forms: import_zod7.z.array(FormConfig)
851
+ conditionals: import_zod9.z.array(ActionConditional2).optional().default([]),
852
+ draft: import_zod9.z.boolean().optional()
739
853
  });
740
854
  var DeclareConfig = ActionConfigBase.merge(
741
- import_zod7.z.object({
742
- type: import_zod7.z.literal(ActionType.DECLARE)
855
+ import_zod9.z.object({
856
+ type: import_zod9.z.literal(ActionType.DECLARE),
857
+ review: DeclarationReviewConfig
743
858
  })
744
859
  );
745
860
  var ValidateConfig = ActionConfigBase.merge(
746
- import_zod7.z.object({
747
- type: import_zod7.z.literal(ActionType.VALIDATE)
861
+ import_zod9.z.object({
862
+ type: import_zod9.z.literal(ActionType.VALIDATE),
863
+ review: DeclarationReviewConfig
864
+ })
865
+ );
866
+ var RegisterConfig = ActionConfigBase.merge(
867
+ import_zod9.z.object({
868
+ type: import_zod9.z.literal(ActionType.REGISTER),
869
+ review: DeclarationReviewConfig
748
870
  })
749
871
  );
750
872
  var RejectDeclarationConfig = ActionConfigBase.merge(
751
- import_zod7.z.object({
752
- type: import_zod7.z.literal(ActionType.REJECT)
873
+ import_zod9.z.object({
874
+ type: import_zod9.z.literal(ActionType.REJECT)
753
875
  })
754
876
  );
755
877
  var MarkedAsDuplicateConfig = ActionConfigBase.merge(
756
- import_zod7.z.object({
757
- type: import_zod7.z.literal(ActionType.MARKED_AS_DUPLICATE)
878
+ import_zod9.z.object({
879
+ type: import_zod9.z.literal(ActionType.MARKED_AS_DUPLICATE)
758
880
  })
759
881
  );
760
882
  var ArchiveConfig = ActionConfigBase.merge(
761
- import_zod7.z.object({
762
- type: import_zod7.z.literal(ActionType.ARCHIVE)
763
- })
764
- );
765
- var RegisterConfig = ActionConfigBase.merge(
766
- import_zod7.z.object({
767
- type: import_zod7.z.literal(ActionType.REGISTER)
883
+ import_zod9.z.object({
884
+ type: import_zod9.z.literal(ActionType.ARCHIVE)
768
885
  })
769
886
  );
770
887
  var DeleteConfig = ActionConfigBase.merge(
771
- import_zod7.z.object({
772
- type: import_zod7.z.literal(ActionType.DELETE)
888
+ import_zod9.z.object({
889
+ type: import_zod9.z.literal(ActionType.DELETE)
773
890
  })
774
891
  );
775
892
  var PrintCertificateActionConfig = ActionConfigBase.merge(
776
- import_zod7.z.object({
777
- type: import_zod7.z.literal(ActionType.PRINT_CERTIFICATE)
893
+ import_zod9.z.object({
894
+ type: import_zod9.z.literal(ActionType.PRINT_CERTIFICATE),
895
+ printForm: ActionFormConfig
778
896
  })
779
897
  );
780
898
  var RequestCorrectionConfig = ActionConfigBase.merge(
781
- import_zod7.z.object({
782
- type: import_zod7.z.literal(ActionType.REQUEST_CORRECTION),
783
- onboardingForm: import_zod7.z.array(FormPageConfig),
784
- additionalDetailsForm: import_zod7.z.array(FormPageConfig)
899
+ import_zod9.z.object({
900
+ type: import_zod9.z.literal(ActionType.REQUEST_CORRECTION),
901
+ onboardingForm: import_zod9.z.array(PageConfig),
902
+ additionalDetailsForm: import_zod9.z.array(PageConfig)
785
903
  })
786
904
  );
787
905
  var RejectCorrectionConfig = ActionConfigBase.merge(
788
- import_zod7.z.object({
789
- type: import_zod7.z.literal(ActionType.REJECT_CORRECTION)
906
+ import_zod9.z.object({
907
+ type: import_zod9.z.literal(ActionType.REJECT_CORRECTION)
790
908
  })
791
909
  );
792
910
  var ApproveCorrectionConfig = ActionConfigBase.merge(
793
- import_zod7.z.object({
794
- type: import_zod7.z.literal(ActionType.APPROVE_CORRECTION)
911
+ import_zod9.z.object({
912
+ type: import_zod9.z.literal(ActionType.APPROVE_CORRECTION)
795
913
  })
796
914
  );
797
- var CustomConfig = ActionConfigBase.merge(
798
- import_zod7.z.object({
799
- type: import_zod7.z.literal(ActionType.CUSTOM)
800
- })
801
- );
802
- var ActionConfig = import_zod7.z.discriminatedUnion("type", [
915
+ var ActionConfig = import_zod9.z.discriminatedUnion("type", [
916
+ /*
917
+ * OpenAPI references are defined here so our generated OpenAPI spec knows to reuse the models
918
+ * and treat them as "models" instead of duplicating the data structure in each endpoint.
919
+ */
920
+ DeclareConfig.openapi({ ref: "DeclareActionConfig" }),
921
+ ValidateConfig.openapi({ ref: "ValidateActionConfig" }),
922
+ RejectDeclarationConfig.openapi({ ref: "RejectDeclarationActionConfig" }),
923
+ MarkedAsDuplicateConfig.openapi({ ref: "MarkedAsDuplicateActionConfig" }),
924
+ ArchiveConfig.openapi({ ref: "ArchiveActionConfig" }),
925
+ RegisterConfig.openapi({ ref: "RegisterActionConfig" }),
926
+ DeleteConfig.openapi({ ref: "DeleteActionConfig" }),
927
+ PrintCertificateActionConfig.openapi({
928
+ ref: "PrintCertificateActionConfig"
929
+ }),
930
+ RequestCorrectionConfig.openapi({ ref: "RequestCorrectionActionConfig" }),
931
+ RejectCorrectionConfig.openapi({ ref: "RejectCorrectionActionConfig" }),
932
+ ApproveCorrectionConfig.openapi({ ref: "ApproveCorrectionActionConfig" })
933
+ ]).openapi({ ref: "ActionConfig" });
934
+ var DeclarationActionConfig = import_zod9.z.discriminatedUnion("type", [
803
935
  DeclareConfig,
804
936
  ValidateConfig,
805
- RejectDeclarationConfig,
806
- MarkedAsDuplicateConfig,
807
- ArchiveConfig,
808
- RegisterConfig,
809
- DeleteConfig,
810
- PrintCertificateActionConfig,
811
- RequestCorrectionConfig,
812
- RejectCorrectionConfig,
813
- ApproveCorrectionConfig,
814
- CustomConfig
937
+ RegisterConfig
815
938
  ]);
816
939
 
817
940
  // ../commons/src/events/offline/CertificateConfig.ts
818
- var import_zod8 = require("zod");
819
- var FontFamily = import_zod8.z.object({
820
- normal: import_zod8.z.string(),
821
- bold: import_zod8.z.string(),
822
- italics: import_zod8.z.string(),
823
- bolditalics: import_zod8.z.string()
941
+ var import_zod10 = require("zod");
942
+ var FontFamily = import_zod10.z.object({
943
+ normal: import_zod10.z.string(),
944
+ bold: import_zod10.z.string(),
945
+ italics: import_zod10.z.string(),
946
+ bolditalics: import_zod10.z.string()
824
947
  });
825
- var CertificateConfig = import_zod8.z.object({
826
- id: import_zod8.z.string(),
827
- event: import_zod8.z.string(),
948
+ var CertificateConfig = import_zod10.z.object({
949
+ id: import_zod10.z.string(),
950
+ event: import_zod10.z.string(),
828
951
  label: TranslationConfig,
829
- isDefault: import_zod8.z.boolean(),
830
- fee: import_zod8.z.object({
831
- onTime: import_zod8.z.number(),
832
- late: import_zod8.z.number(),
833
- delayed: import_zod8.z.number()
952
+ isDefault: import_zod10.z.boolean(),
953
+ fee: import_zod10.z.object({
954
+ onTime: import_zod10.z.number(),
955
+ late: import_zod10.z.number(),
956
+ delayed: import_zod10.z.number()
834
957
  }),
835
- svgUrl: import_zod8.z.string(),
836
- fonts: import_zod8.z.record(FontFamily).optional()
958
+ svgUrl: import_zod10.z.string(),
959
+ fonts: import_zod10.z.record(FontFamily).optional()
837
960
  });
838
961
  var CertificateTemplateConfig = CertificateConfig.extend({
839
- hash: import_zod8.z.string().optional(),
840
- svg: import_zod8.z.string()
962
+ hash: import_zod10.z.string().optional(),
963
+ svg: import_zod10.z.string()
841
964
  });
842
965
 
843
966
  // ../commons/src/events/offline/LanguageConfig.ts
844
- var import_zod9 = require("zod");
845
- var LanguageConfig = import_zod9.z.object({
846
- lang: import_zod9.z.string(),
967
+ var import_zod11 = require("zod");
968
+ var LanguageConfig = import_zod11.z.object({
969
+ lang: import_zod11.z.string(),
847
970
  /**
848
971
  * client.csv contents
849
972
  */
850
- messages: import_zod9.z.record(import_zod9.z.string())
973
+ messages: import_zod11.z.record(import_zod11.z.string())
851
974
  });
852
975
 
853
976
  // ../commons/src/events/EventConfig.ts
854
- var import_zod18 = require("zod");
977
+ var import_zod16 = require("zod");
855
978
 
856
979
  // ../commons/src/events/DeduplicationConfig.ts
857
- var import_zod10 = require("zod");
858
- var FieldReference = import_zod10.z.string();
859
- var Matcher = import_zod10.z.object({
860
- fieldId: import_zod10.z.string(),
861
- options: import_zod10.z.object({
862
- boost: import_zod10.z.number().optional()
980
+ var import_zod12 = require("zod");
981
+ var import_zod_openapi2 = require("zod-openapi");
982
+ (0, import_zod_openapi2.extendZodWithOpenApi)(import_zod12.z);
983
+ var FieldReference = import_zod12.z.string();
984
+ var Matcher = import_zod12.z.object({
985
+ fieldId: import_zod12.z.string(),
986
+ options: import_zod12.z.object({
987
+ boost: import_zod12.z.number().optional()
863
988
  }).optional().default({})
864
989
  });
865
990
  var FuzzyMatcher = Matcher.extend({
866
- type: import_zod10.z.literal("fuzzy"),
867
- options: import_zod10.z.object({
991
+ type: import_zod12.z.literal("fuzzy"),
992
+ options: import_zod12.z.object({
868
993
  /**
869
994
  * Names of length 3 or less characters = 0 edits allowed
870
995
  * Names of length 4 - 6 characters = 1 edit allowed
871
996
  * Names of length >7 characters = 2 edits allowed
872
997
  */
873
- fuzziness: import_zod10.z.union([import_zod10.z.string(), import_zod10.z.number()]).optional().default("AUTO:4,7"),
874
- boost: import_zod10.z.number().optional().default(1)
998
+ fuzziness: import_zod12.z.union([import_zod12.z.string(), import_zod12.z.number()]).optional().default("AUTO:4,7"),
999
+ boost: import_zod12.z.number().optional().default(1)
875
1000
  }).optional().default({})
876
1001
  });
877
1002
  var StrictMatcher = Matcher.extend({
878
- type: import_zod10.z.literal("strict"),
879
- options: import_zod10.z.object({
880
- boost: import_zod10.z.number().optional().default(1)
1003
+ type: import_zod12.z.literal("strict"),
1004
+ options: import_zod12.z.object({
1005
+ boost: import_zod12.z.number().optional().default(1)
881
1006
  }).optional().default({})
882
1007
  });
883
1008
  var DateRangeMatcher = Matcher.extend({
884
- type: import_zod10.z.literal("dateRange"),
885
- options: import_zod10.z.object({
886
- days: import_zod10.z.number(),
1009
+ type: import_zod12.z.literal("dateRange"),
1010
+ options: import_zod12.z.object({
1011
+ days: import_zod12.z.number(),
887
1012
  origin: FieldReference,
888
- boost: import_zod10.z.number().optional().default(1)
1013
+ boost: import_zod12.z.number().optional().default(1)
889
1014
  })
890
1015
  });
891
1016
  var DateDistanceMatcher = Matcher.extend({
892
- type: import_zod10.z.literal("dateDistance"),
893
- options: import_zod10.z.object({
894
- days: import_zod10.z.number(),
1017
+ type: import_zod12.z.literal("dateDistance"),
1018
+ options: import_zod12.z.object({
1019
+ days: import_zod12.z.number(),
895
1020
  origin: FieldReference,
896
- boost: import_zod10.z.number().optional().default(1)
1021
+ boost: import_zod12.z.number().optional().default(1)
897
1022
  })
898
1023
  });
899
- var And = import_zod10.z.object({
900
- type: import_zod10.z.literal("and"),
901
- clauses: import_zod10.z.lazy(() => Clause.array())
1024
+ var And = import_zod12.z.object({
1025
+ type: import_zod12.z.literal("and"),
1026
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
1027
+ clauses: import_zod12.z.lazy(() => Clause.array())
902
1028
  });
903
- var Or = import_zod10.z.object({
904
- type: import_zod10.z.literal("or"),
905
- clauses: import_zod10.z.lazy(() => Clause.array())
1029
+ var Or = import_zod12.z.object({
1030
+ type: import_zod12.z.literal("or"),
1031
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
1032
+ clauses: import_zod12.z.lazy(() => Clause.array())
906
1033
  });
907
- var Clause = import_zod10.z.lazy(
908
- () => import_zod10.z.discriminatedUnion("type", [
1034
+ var Clause = import_zod12.z.lazy(
1035
+ () => import_zod12.z.discriminatedUnion("type", [
909
1036
  And,
910
1037
  Or,
911
1038
  FuzzyMatcher,
@@ -913,275 +1040,73 @@ var Clause = import_zod10.z.lazy(
913
1040
  DateRangeMatcher,
914
1041
  DateDistanceMatcher
915
1042
  ])
916
- );
917
- var DeduplicationConfig = import_zod10.z.object({
918
- id: import_zod10.z.string(),
1043
+ ).openapi({
1044
+ ref: "Clause"
1045
+ });
1046
+ var DeduplicationConfig = import_zod12.z.object({
1047
+ id: import_zod12.z.string(),
919
1048
  label: TranslationConfig,
920
1049
  query: Clause
921
1050
  });
922
1051
 
923
1052
  // ../commons/src/events/SummaryConfig.ts
924
- var import_zod11 = require("zod");
925
- var Field = import_zod11.z.object({
926
- id: import_zod11.z.string().describe("Id of summary field"),
1053
+ var import_zod13 = require("zod");
1054
+ var BaseField2 = import_zod13.z.object({
1055
+ emptyValueMessage: TranslationConfig.optional(),
1056
+ conditionals: import_zod13.z.array(ShowConditional).default([]).optional()
1057
+ });
1058
+ var ReferenceField = BaseField2.extend({
1059
+ fieldId: import_zod13.z.string()
1060
+ }).describe("Field directly referencing event data with field id");
1061
+ var Field = BaseField2.extend({
1062
+ id: import_zod13.z.string().describe("Id of summary field"),
927
1063
  value: TranslationConfig.describe(
928
1064
  "Summary field value. Can utilise values defined in configuration and EventMetadata"
929
1065
  ),
930
1066
  label: TranslationConfig,
931
1067
  emptyValueMessage: TranslationConfig.optional()
932
- });
933
- var Title = import_zod11.z.object({
934
- id: import_zod11.z.string(),
935
- label: TranslationConfig.describe("Title content"),
936
- emptyValueMessage: TranslationConfig.optional()
937
- });
938
- var SummaryConfig = import_zod11.z.object({
939
- title: Title.describe("Title of summary view."),
940
- fields: import_zod11.z.array(Field).describe("Fields rendered in summary view.")
1068
+ }).describe("Custom configured field");
1069
+ var SummaryConfig = import_zod13.z.object({
1070
+ fields: import_zod13.z.array(import_zod13.z.union([Field, ReferenceField])).describe("Fields rendered in summary view.")
941
1071
  }).describe("Configuration for summary in event.");
942
1072
 
943
- // ../commons/src/events/WorkqueueConfig.ts
944
- var import_zod13 = require("zod");
945
-
946
- // ../commons/src/events/EventMetadata.ts
947
- var import_zod12 = require("zod");
948
- var EventStatus = {
949
- CREATED: "CREATED",
950
- NOTIFIED: "NOTIFIED",
951
- DECLARED: "DECLARED",
952
- VALIDATED: "VALIDATED",
953
- REGISTERED: "REGISTERED",
954
- CERTIFIED: "CERTIFIED",
955
- REJECTED: "REJECTED",
956
- ARCHIVED: "ARCHIVED"
957
- };
958
- var eventStatuses = Object.values(EventStatus);
959
- var EventStatuses = import_zod12.z.nativeEnum(EventStatus);
960
- var EventMetadata = import_zod12.z.object({
961
- id: import_zod12.z.string(),
962
- type: import_zod12.z.string(),
963
- status: EventStatuses,
964
- createdAt: import_zod12.z.string().datetime(),
965
- createdBy: import_zod12.z.string(),
966
- createdAtLocation: import_zod12.z.string(),
967
- modifiedAt: import_zod12.z.string().datetime(),
968
- assignedTo: import_zod12.z.string().nullish(),
969
- updatedBy: import_zod12.z.string(),
970
- trackingId: import_zod12.z.string()
971
- });
972
- var eventMetadataLabelMap = {
973
- "event.assignedTo": {
974
- id: "event.assignedTo.label",
975
- defaultMessage: "Assigned To",
976
- description: "Assigned To"
977
- },
978
- "event.createdAt": {
979
- id: "event.createdAt.label",
980
- defaultMessage: "Created",
981
- description: "Created At"
982
- },
983
- "event.createdAtLocation": {
984
- id: "event.createdAtLocation.label",
985
- defaultMessage: "Location",
986
- description: "Created At Location"
987
- },
988
- "event.createdBy": {
989
- id: "event.createdBy.label",
990
- defaultMessage: "Created By",
991
- description: "Created By"
992
- },
993
- "event.id": {
994
- id: "event.id.label",
995
- defaultMessage: "ID",
996
- description: "ID"
997
- },
998
- "event.modifiedAt": {
999
- id: "event.modifiedAt.label",
1000
- defaultMessage: "Updated",
1001
- description: "Modified At"
1002
- },
1003
- "event.status": {
1004
- id: "event.status.label",
1005
- defaultMessage: "Status",
1006
- description: "Status"
1007
- },
1008
- "event.type": {
1009
- id: "event.type.label",
1010
- defaultMessage: "Type",
1011
- description: "Type"
1012
- },
1013
- "event.updatedBy": {
1014
- id: "event.updatedBy.label",
1015
- defaultMessage: "Updated By",
1016
- description: "Updated By"
1017
- },
1018
- "event.trackingId": {
1019
- id: "event.trackingId.label",
1020
- defaultMessage: "Tracking ID",
1021
- description: "Tracking ID"
1022
- }
1023
- };
1024
-
1025
- // ../commons/src/events/WorkqueueConfig.ts
1026
- var WorkqueueConfig = import_zod13.z.object({
1027
- id: import_zod13.z.string().describe("Unique identifier for workqueue."),
1028
- filters: import_zod13.z.array(
1029
- import_zod13.z.object({
1030
- status: import_zod13.z.array(EventStatuses).describe("Defines which statusese are included in the workqueue.")
1031
- })
1032
- ).describe("Filters to be applied to workqueue.")
1033
- }).describe("Configuration for workqueue.");
1034
-
1035
1073
  // ../commons/src/events/AdvancedSearchConfig.ts
1036
1074
  var import_zod14 = require("zod");
1075
+ var MatchType = import_zod14.z.enum(["FUZZY", "EXACT", "RANGE", "ANY_OF"]);
1076
+ var BaseField3 = import_zod14.z.object({
1077
+ config: import_zod14.z.object({
1078
+ type: MatchType.describe("Determines the type of field")
1079
+ }),
1080
+ options: import_zod14.z.array(SelectOption).optional()
1081
+ });
1082
+ var FieldConfigSchema = BaseField3.extend({
1083
+ fieldId: import_zod14.z.string(),
1084
+ fieldType: import_zod14.z.literal("field")
1085
+ });
1086
+ var EventFieldId = import_zod14.z.enum(["trackingId", "status"]);
1087
+ var EventFieldConfigSchema = BaseField3.extend({
1088
+ fieldId: EventFieldId,
1089
+ fieldType: import_zod14.z.literal("event")
1090
+ });
1091
+ var SearchField = import_zod14.z.discriminatedUnion("fieldType", [
1092
+ FieldConfigSchema,
1093
+ EventFieldConfigSchema
1094
+ ]);
1037
1095
  var AdvancedSearchConfig = import_zod14.z.object({
1038
1096
  title: TranslationConfig.describe("Advanced search tab title"),
1039
- fields: import_zod14.z.array(
1040
- import_zod14.z.object({
1041
- fieldId: import_zod14.z.string(),
1042
- config: import_zod14.z.object({
1043
- type: import_zod14.z.enum(["FUZZY", "EXACT", "RANGE"]).describe("Determines the type of field")
1044
- }).optional().describe("Configuration options for the field")
1045
- })
1046
- ).optional().default([]).describe("Advanced search fields.")
1097
+ fields: import_zod14.z.array(SearchField).describe("Advanced search fields.")
1047
1098
  });
1048
1099
 
1049
1100
  // ../commons/src/events/utils.ts
1050
1101
  var import_lodash = require("lodash");
1051
1102
 
1052
- // ../commons/src/workqueues/WorkqueueConfig.ts
1053
- var import_zod16 = require("zod");
1054
-
1055
- // ../commons/src/workqueues/defaultColumns.ts
1056
- var import_zod15 = require("zod");
1057
- var WorkQueueColumnConfig = import_zod15.z.object({
1058
- id: import_zod15.z.string(),
1059
- label: TranslationConfig
1060
- });
1061
- var defaultColumns = {
1062
- event: {
1063
- id: "event",
1064
- label: {
1065
- defaultMessage: "Event",
1066
- description: "This is the label for the workqueue column",
1067
- id: "workqueue.default.column.event"
1068
- }
1069
- },
1070
- status: {
1071
- id: "status",
1072
- label: {
1073
- defaultMessage: "Status",
1074
- description: "This is the label for the workqueue column",
1075
- id: "workqueue.default.column.status"
1076
- }
1077
- },
1078
- createdAt: {
1079
- id: "createdAt",
1080
- label: {
1081
- defaultMessage: "Created",
1082
- description: "This is the label for the workqueue column",
1083
- id: "workqueue.default.column.createdAt"
1084
- }
1085
- },
1086
- modifiedAt: {
1087
- id: "modifiedAt",
1088
- label: {
1089
- defaultMessage: "Modified",
1090
- description: "This is the label for the workqueue column",
1091
- id: "workqueue.default.column.modifiedAt"
1092
- }
1093
- }
1094
- };
1095
- var DefaultColumnKeys = import_zod15.z.enum(
1096
- Object.keys(defaultColumns)
1097
- );
1098
-
1099
- // ../commons/src/workqueues/WorkqueueConfig.ts
1100
- var rootWorkqueueConfig = import_zod16.z.object({
1101
- id: import_zod16.z.string(),
1102
- title: TranslationConfig,
1103
- columns: import_zod16.z.array(WorkQueueColumnConfig),
1104
- defaultColumns: import_zod16.z.array(DefaultColumnKeys)
1105
- });
1106
- var defineWorkqueue = (config) => rootWorkqueueConfig.parse(config);
1107
-
1108
- // ../commons/src/workqueues/all.ts
1109
- var allWorkqueue = defineWorkqueue({
1110
- id: "all",
1111
- title: {
1112
- defaultMessage: "All events",
1113
- description: "This is the label for the workqueue",
1114
- id: "workqueue.all.label"
1115
- },
1116
- columns: [
1117
- {
1118
- id: "title",
1119
- label: {
1120
- defaultMessage: "Title",
1121
- description: "This is the label for the workqueue column",
1122
- id: "workqueue.all.column.title"
1123
- }
1124
- }
1125
- ],
1126
- defaultColumns: ["event", "status", "createdAt", "modifiedAt"]
1127
- });
1128
-
1129
- // ../commons/src/workqueues/readyForReview.ts
1130
- var inReviewWorkqueue = defineWorkqueue({
1131
- id: "ready-for-review",
1132
- title: {
1133
- defaultMessage: "Ready for review",
1134
- description: "Label for in review workqueue",
1135
- id: "event.workqueue.in-review.label"
1136
- },
1137
- columns: [
1138
- {
1139
- id: "title",
1140
- label: {
1141
- defaultMessage: "Title",
1142
- description: "This is the label for the workqueue column",
1143
- id: "workqueue.in-reveiw.column.title"
1144
- }
1145
- }
1146
- ],
1147
- defaultColumns: ["event", "createdAt", "modifiedAt"]
1148
- });
1149
-
1150
- // ../commons/src/workqueues/readyToPrint.ts
1151
- var registeredWorkqueue = defineWorkqueue({
1152
- id: "registered",
1153
- title: {
1154
- defaultMessage: "Ready to print",
1155
- description: "Label for registered workqueue",
1156
- id: "event.workqueue.registered.label"
1157
- },
1158
- columns: [
1159
- {
1160
- id: "title",
1161
- label: {
1162
- defaultMessage: "Title",
1163
- description: "This is the label for the workqueue column",
1164
- id: "workqueue.registered.column.title"
1165
- }
1166
- }
1167
- ],
1168
- defaultColumns: ["event", "createdAt", "modifiedAt"]
1169
- });
1170
-
1171
- // ../commons/src/workqueues/index.ts
1172
- var workqueues = {
1173
- all: allWorkqueue,
1174
- registered: registeredWorkqueue,
1175
- inReview: inReviewWorkqueue
1176
- };
1177
-
1178
1103
  // ../commons/src/conditionals/validate.ts
1179
1104
  var import_ajv = __toESM(require("ajv"));
1180
1105
  var import_ajv_formats = __toESM(require("ajv-formats"));
1181
1106
  var import_date_fns = require("date-fns");
1182
1107
 
1183
1108
  // ../commons/src/events/FieldTypeMapping.ts
1184
- var import_zod17 = require("zod");
1109
+ var import_zod15 = require("zod");
1185
1110
  function mapFieldTypeToZod(type, required) {
1186
1111
  let schema;
1187
1112
  switch (type) {
@@ -1205,8 +1130,7 @@ function mapFieldTypeToZod(type, required) {
1205
1130
  case FieldType.FACILITY:
1206
1131
  case FieldType.OFFICE:
1207
1132
  case FieldType.SIGNATURE:
1208
- case FieldType.HIDDEN:
1209
- schema = required ? RequiredTextValue : TextValue;
1133
+ schema = required ? NonEmptyTextValue : TextValue;
1210
1134
  break;
1211
1135
  case FieldType.NUMBER:
1212
1136
  schema = NumberFieldValue;
@@ -1234,7 +1158,7 @@ function createValidationSchema(config) {
1234
1158
  for (const field2 of config) {
1235
1159
  shape[field2.id] = mapFieldTypeToZod(field2.type, field2.required);
1236
1160
  }
1237
- return import_zod17.z.object(shape);
1161
+ return import_zod15.z.object(shape);
1238
1162
  }
1239
1163
  function mapFieldTypeToMockValue(field2, i) {
1240
1164
  switch (field2.type) {
@@ -1401,18 +1325,30 @@ var isDataFieldType = (field2) => {
1401
1325
 
1402
1326
  // ../commons/src/conditionals/validate.ts
1403
1327
  var ajv = new import_ajv.default({
1404
- $data: true
1328
+ $data: true,
1329
+ allowUnionTypes: true
1405
1330
  });
1406
1331
  (0, import_ajv_formats.default)(ajv);
1407
1332
  function validate(schema, data) {
1408
1333
  return ajv.validate(schema, data);
1409
1334
  }
1335
+ function isConditionMet(conditional, values) {
1336
+ return validate(conditional, {
1337
+ $form: values,
1338
+ $now: (0, import_date_fns.formatISO)(/* @__PURE__ */ new Date(), { representation: "date" })
1339
+ });
1340
+ }
1410
1341
  function getConditionalActionsForField(field2, values) {
1411
1342
  if (!field2.conditionals) {
1412
1343
  return [];
1413
1344
  }
1414
1345
  return field2.conditionals.filter((conditional) => validate(conditional.conditional, values)).map((conditional) => conditional.type);
1415
1346
  }
1347
+ function areConditionsMet(conditions, values) {
1348
+ return conditions.every(
1349
+ (condition) => isConditionMet(condition.conditional, values)
1350
+ );
1351
+ }
1416
1352
  function isFieldConditionMet(field2, form, conditionalType) {
1417
1353
  const hasRule = (field2.conditionals ?? []).some(
1418
1354
  (conditional) => conditional.type === conditionalType
@@ -1431,9 +1367,16 @@ function isFieldConditionMet(field2, form, conditionalType) {
1431
1367
  function isFieldVisible(field2, form) {
1432
1368
  return isFieldConditionMet(field2, form, ConditionalType.SHOW);
1433
1369
  }
1370
+ function isFieldEmptyAndNotRequired(field2, form) {
1371
+ const fieldValue = form[field2.id];
1372
+ return !field2.required && (fieldValue === void 0 || fieldValue === "");
1373
+ }
1434
1374
  function isFieldEnabled(field2, form) {
1435
1375
  return isFieldConditionMet(field2, form, ConditionalType.ENABLE);
1436
1376
  }
1377
+ function isFieldDisplayedOnReview(field2, form) {
1378
+ return isFieldVisible(field2, form) && isFieldConditionMet(field2, form, ConditionalType.DISPLAY_ON_REVIEW);
1379
+ }
1437
1380
  var errorMessages = {
1438
1381
  hiddenField: {
1439
1382
  id: "v2.error.hidden",
@@ -1461,12 +1404,14 @@ var errorMessages = {
1461
1404
  id: "v2.error.invalid"
1462
1405
  }
1463
1406
  };
1464
- var createIntlError = (message) => ({
1465
- message: {
1466
- message
1467
- }
1468
- });
1469
- var zodToIntlErrorMap = (issue, _ctx) => {
1407
+ function createIntlError(message) {
1408
+ return {
1409
+ message: {
1410
+ message
1411
+ }
1412
+ };
1413
+ }
1414
+ function zodToIntlErrorMap(issue, _ctx) {
1470
1415
  switch (issue.code) {
1471
1416
  case "invalid_string": {
1472
1417
  if (_ctx.data === "") {
@@ -1504,45 +1449,10 @@ var zodToIntlErrorMap = (issue, _ctx) => {
1504
1449
  }
1505
1450
  }
1506
1451
  return createIntlError(errorMessages.invalidInput);
1507
- };
1508
- function getFieldValidationErrors({
1452
+ }
1453
+ function runCustomFieldValidations({
1509
1454
  field: field2,
1510
- values
1511
- }) {
1512
- const conditionalParameters = {
1513
- $form: values,
1514
- $now: (0, import_date_fns.formatISO)(/* @__PURE__ */ new Date(), { representation: "date" })
1515
- };
1516
- if (!isFieldVisible(field2, values) || !isFieldEnabled(field2, values)) {
1517
- if (values[field2.id]) {
1518
- return {
1519
- errors: [
1520
- {
1521
- message: errorMessages.hiddenField
1522
- }
1523
- ]
1524
- };
1525
- }
1526
- return {
1527
- errors: []
1528
- };
1529
- }
1530
- const fieldValidationResult = validateFieldInput({
1531
- field: field2,
1532
- value: values[field2.id]
1533
- });
1534
- const customValidationResults = runCustomFieldValidations({
1535
- field: field2,
1536
- conditionalParameters
1537
- });
1538
- return {
1539
- // Assumes that custom validation errors are based on the field type, and extend the validation.
1540
- errors: [...fieldValidationResult, ...customValidationResults]
1541
- };
1542
- }
1543
- function runCustomFieldValidations({
1544
- field: field2,
1545
- conditionalParameters
1455
+ conditionalParameters
1546
1456
  }) {
1547
1457
  return (field2.validation ?? []).filter((validation) => {
1548
1458
  return !validate(validation.validator, conditionalParameters);
@@ -1561,13 +1471,31 @@ function validateFieldInput({
1561
1471
  );
1562
1472
  return rawError.error?.issues.map((issue) => issue.message) ?? [];
1563
1473
  }
1564
-
1565
- // ../commons/src/utils.ts
1566
- function getOrThrow(x, message) {
1567
- if (x === void 0 || x === null) {
1568
- throw new Error(message);
1474
+ function runFieldValidations({
1475
+ field: field2,
1476
+ values
1477
+ }) {
1478
+ if (!isFieldVisible(field2, values) || isFieldEmptyAndNotRequired(field2, values)) {
1479
+ return {
1480
+ errors: []
1481
+ };
1569
1482
  }
1570
- return x;
1483
+ const conditionalParameters = {
1484
+ $form: values,
1485
+ $now: (0, import_date_fns.formatISO)(/* @__PURE__ */ new Date(), { representation: "date" })
1486
+ };
1487
+ const fieldValidationResult = validateFieldInput({
1488
+ field: field2,
1489
+ value: values[field2.id]
1490
+ });
1491
+ const customValidationResults = runCustomFieldValidations({
1492
+ field: field2,
1493
+ conditionalParameters
1494
+ });
1495
+ return {
1496
+ // Assumes that custom validation errors are based on the field type, and extend the validation.
1497
+ errors: [...fieldValidationResult, ...customValidationResults]
1498
+ };
1571
1499
  }
1572
1500
 
1573
1501
  // ../commons/src/uuid.ts
@@ -1576,161 +1504,91 @@ function getUUID() {
1576
1504
  return (0, import_uuid.v4)();
1577
1505
  }
1578
1506
 
1507
+ // ../commons/src/utils.ts
1508
+ function getOrThrow(x, message) {
1509
+ if (x === void 0 || x === null) {
1510
+ throw new Error(message);
1511
+ }
1512
+ return x;
1513
+ }
1514
+
1579
1515
  // ../commons/src/events/utils.ts
1580
- var import_date_fns2 = require("date-fns");
1581
- function isMetadataField(field2) {
1582
- return field2 in eventMetadataLabelMap;
1583
- }
1584
- var findInputPageFields = (config) => {
1585
- return (0, import_lodash.flattenDeep)(
1586
- config.actions.map(
1587
- ({ forms }) => forms.map(
1588
- ({ pages }) => pages.map(
1589
- ({ fields }) => fields.map(({ id, label }) => ({ id, label }))
1590
- )
1591
- )
1592
- )
1593
- );
1594
- };
1595
- var findPageFields = (config) => {
1596
- return (0, import_lodash.flattenDeep)(
1597
- config.actions.map((action) => {
1598
- if (action.type === ActionType.REQUEST_CORRECTION) {
1599
- return [
1600
- ...action.forms.map(({ pages }) => pages.map(({ fields }) => fields)),
1601
- ...action.onboardingForm.flatMap(({ fields }) => fields),
1602
- ...action.additionalDetailsForm.flatMap(({ fields }) => fields)
1603
- ];
1604
- }
1605
- return action.forms.map(({ pages }) => pages.map(({ fields }) => fields));
1606
- })
1607
- );
1608
- };
1609
- var resolveLabelsFromKnownFields = ({
1610
- pageFields,
1611
- refFields
1612
- }) => {
1613
- return refFields.map((field2) => {
1614
- if (field2.label) {
1615
- return field2;
1616
- }
1617
- if (isMetadataField(field2.id)) {
1618
- return {
1619
- ...field2,
1620
- label: eventMetadataLabelMap[field2.id]
1621
- };
1622
- }
1623
- const pageLabel = pageFields.find((pageField) => pageField.id === field2.id);
1624
- if (!pageLabel) {
1625
- throw new Error(`Referenced field ${field2.id} does not have a label`);
1626
- }
1627
- return {
1628
- ...field2,
1629
- label: pageLabel.label
1630
- };
1631
- });
1632
- };
1633
- function getAllFields(configuration) {
1634
- return configuration.actions.flatMap((action) => action.forms.filter((form) => form.active)).flatMap((form) => [
1635
- ...form.review.fields,
1636
- ...form.pages.flatMap((page) => page.fields)
1637
- ]);
1516
+ function isDeclarationActionConfig(action) {
1517
+ return DeclarationActions.safeParse(action.type).success;
1638
1518
  }
1639
- function getAllPages(configuration) {
1640
- return configuration.actions.flatMap((action) => action.forms.filter((form) => form.active)).flatMap((form) => form.pages);
1519
+ function getDeclarationFields(configuration) {
1520
+ return configuration.declaration.pages.flatMap(({ fields }) => fields);
1641
1521
  }
1642
- function validateWorkqueueConfig(workqueueConfigs) {
1643
- workqueueConfigs.map((workqueue) => {
1644
- const rootWorkqueue = Object.values(workqueues).find(
1645
- (wq) => wq.id === workqueue.id
1646
- );
1647
- if (!rootWorkqueue) {
1648
- throw new Error(
1649
- `Invalid workqueue configuration: workqueue not found with id: ${workqueue.id}`
1650
- );
1651
- }
1652
- });
1522
+ function getDeclarationPages(configuration) {
1523
+ return configuration.declaration.pages;
1653
1524
  }
1654
- var findActiveActionForm = (configuration, action) => {
1655
- const actionConfig = configuration.actions.find((a) => a.type === action);
1656
- const form = actionConfig?.forms.find((f) => f.active);
1657
- return form;
1658
- };
1659
- var findActiveActionFormPages = (configuration, action) => {
1660
- return findActiveActionForm(configuration, action)?.pages;
1661
- };
1662
- var getFormFields = (formConfig) => {
1663
- return formConfig.pages.flatMap((p) => p.fields);
1664
- };
1665
- function isPageVisible(page, formValues) {
1666
- if (!page.conditional) {
1667
- return true;
1668
- }
1669
- return validate(page.conditional, {
1670
- $form: formValues,
1671
- $now: (0, import_date_fns2.formatISO)(/* @__PURE__ */ new Date(), { representation: "date" })
1672
- });
1525
+ function getDeclaration(configuration) {
1526
+ return configuration.declaration;
1673
1527
  }
1674
- var getVisiblePagesFormFields = (formConfig, formData) => {
1675
- return formConfig.pages.filter((p) => isPageVisible(p, formData)).flatMap((p) => p.fields);
1676
- };
1677
- var findActiveActionFormFields = (configuration, action) => {
1678
- const form = findActiveActionForm(configuration, action);
1679
- return form ? getFormFields(form) : void 0;
1528
+ var getActionAnnotationFields = (actionConfig) => {
1529
+ if (actionConfig.type === ActionType.REQUEST_CORRECTION) {
1530
+ return [
1531
+ ...actionConfig.onboardingForm.flatMap(({ fields }) => fields),
1532
+ ...actionConfig.additionalDetailsForm.flatMap(({ fields }) => fields)
1533
+ ];
1534
+ }
1535
+ if (actionConfig.type === ActionType.PRINT_CERTIFICATE) {
1536
+ return actionConfig.printForm.pages.flatMap(({ fields }) => fields);
1537
+ }
1538
+ if (isDeclarationActionConfig(actionConfig)) {
1539
+ return actionConfig.review.fields;
1540
+ }
1541
+ return [];
1680
1542
  };
1681
- var findActiveActionFields = (configuration, action, formData) => {
1682
- const form = findActiveActionForm(configuration, action);
1683
- const reviewFields = form?.review.fields;
1684
- let formFields = void 0;
1685
- if (form) {
1686
- formFields = formData ? getVisiblePagesFormFields(form, formData) : getFormFields(form);
1543
+ function getAllAnnotationFields(config) {
1544
+ return (0, import_lodash.flattenDeep)(config.actions.map(getActionAnnotationFields));
1545
+ }
1546
+ var findRecordActionPages = (config, actionType) => {
1547
+ const action = config.actions.find((a) => a.type === actionType);
1548
+ if (action?.type === ActionType.REQUEST_CORRECTION) {
1549
+ return [...action.onboardingForm, ...action.additionalDetailsForm];
1550
+ }
1551
+ if (action?.type === ActionType.PRINT_CERTIFICATE) {
1552
+ return action.printForm.pages;
1687
1553
  }
1688
- const allFields = formFields ? formFields.concat(reviewFields ?? []) : reviewFields;
1689
- return allFields;
1554
+ return [];
1690
1555
  };
1691
- var getActiveActionFormPages = (configuration, action) => {
1556
+ function getActionReview(configuration, actionType) {
1557
+ const [actionConfig] = configuration.actions.filter(
1558
+ (a) => a.type === actionType
1559
+ );
1692
1560
  return getOrThrow(
1693
- findActiveActionForm(configuration, action)?.pages,
1694
- "Form configuration not found for type: " + configuration.id
1561
+ actionConfig.review,
1562
+ `No review config found for ${actionType}`
1695
1563
  );
1696
- };
1697
- function getActiveActionFields(configuration, action) {
1698
- if (LatentActions.some((latentAction) => latentAction === action)) {
1699
- return getActiveActionFields(configuration, ActionType.DECLARE);
1700
- }
1701
- const fields = findActiveActionFields(configuration, action);
1702
- if (!fields) {
1703
- throw new Error(`No active field config found for action type ${action}`);
1704
- }
1705
- return fields;
1706
1564
  }
1707
- function getEventConfiguration(eventConfigurations, type) {
1708
- const config = eventConfigurations.find((config2) => config2.id === type);
1709
- if (!config) {
1710
- throw new Error(`Event configuration not found for type: ${type}`);
1711
- }
1712
- return config;
1565
+ function getActionReviewFields(configuration, actionType) {
1566
+ return getActionReview(configuration, actionType).fields;
1713
1567
  }
1714
- function isOptionalUncheckedCheckbox(field2, form) {
1715
- if (field2.type !== FieldType.CHECKBOX || field2.required) {
1716
- return false;
1568
+ function isPageVisible(page, formValues) {
1569
+ if (!page.conditional) {
1570
+ return true;
1717
1571
  }
1718
- return !form[field2.id];
1572
+ return isConditionMet(page.conditional, formValues);
1719
1573
  }
1720
- function stripHiddenFields(fields, data) {
1721
- return (0, import_lodash.omitBy)(data, (_2, fieldId) => {
1722
- const field2 = fields.find((f) => f.id === fieldId);
1723
- if (!field2) {
1724
- return true;
1574
+ function omitHiddenFields(fields, values, visibleVerificationPageIds = []) {
1575
+ return (0, import_lodash.omitBy)(values, (_, fieldId) => {
1576
+ if (visibleVerificationPageIds.includes(fieldId)) {
1577
+ return false;
1725
1578
  }
1726
- if (isOptionalUncheckedCheckbox(field2, data)) {
1579
+ const fieldConfigs = fields.filter((f) => f.id === fieldId);
1580
+ if (!fieldConfigs.length) {
1727
1581
  return true;
1728
1582
  }
1729
- return !isFieldVisible(field2, data);
1583
+ return fieldConfigs.every((f) => !isFieldVisible(f, values));
1730
1584
  });
1731
1585
  }
1586
+ function omitHiddenPaginatedFields(formConfig, declaration) {
1587
+ const visiblePagesFormFields = formConfig.pages.filter((p) => isPageVisible(p, declaration)).flatMap((p) => p.fields);
1588
+ return omitHiddenFields(visiblePagesFormFields, declaration);
1589
+ }
1732
1590
  function findActiveDrafts(event2, drafts) {
1733
- const actions = event2.actions.slice().sort((a, b) => a.createdAt.localeCompare(b.createdAt));
1591
+ const actions = event2.actions.slice().filter(({ type }) => type !== ActionType.READ).sort((a, b) => a.createdAt.localeCompare(b.createdAt));
1734
1592
  const lastAction = actions[actions.length - 1];
1735
1593
  return drafts.filter(({ createdAt }) => createdAt >= lastAction.createdAt).filter(({ eventId }) => eventId === event2.id);
1736
1594
  }
@@ -1742,8 +1600,8 @@ function createEmptyDraft(eventId, draftId, actionType) {
1742
1600
  transactionId: getUUID(),
1743
1601
  action: {
1744
1602
  type: actionType,
1745
- data: {},
1746
- metadata: {},
1603
+ declaration: {},
1604
+ annotation: {},
1747
1605
  createdAt: (/* @__PURE__ */ new Date()).toISOString(),
1748
1606
  createdBy: "@todo",
1749
1607
  createdAtLocation: "@todo"
@@ -1751,22 +1609,94 @@ function createEmptyDraft(eventId, draftId, actionType) {
1751
1609
  };
1752
1610
  }
1753
1611
  function isVerificationPage(page) {
1754
- return page.type === FormPageType.VERIFICATION;
1612
+ return page.type === PageTypes.enum.VERIFICATION;
1755
1613
  }
1614
+ function getVisibleVerificationPageIds(pages, annotation) {
1615
+ return pages.filter((page) => isVerificationPage(page)).filter((page) => isPageVisible(page, annotation)).map((page) => page.id);
1616
+ }
1617
+ function getActionVerificationPageIds(actionConfig, annotation) {
1618
+ if (actionConfig.type === ActionType.REQUEST_CORRECTION) {
1619
+ return [
1620
+ ...getVisibleVerificationPageIds(actionConfig.onboardingForm, annotation),
1621
+ ...getVisibleVerificationPageIds(
1622
+ actionConfig.additionalDetailsForm,
1623
+ annotation
1624
+ )
1625
+ ];
1626
+ }
1627
+ if (actionConfig.type === ActionType.PRINT_CERTIFICATE) {
1628
+ return getVisibleVerificationPageIds(
1629
+ actionConfig.printForm.pages,
1630
+ annotation
1631
+ );
1632
+ }
1633
+ return [];
1634
+ }
1635
+ function omitHiddenAnnotationFields(actionConfig, declaration, annotation) {
1636
+ const annotationFields = getActionAnnotationFields(actionConfig);
1637
+ const visibleVerificationPageIds = getActionVerificationPageIds(
1638
+ actionConfig,
1639
+ annotation
1640
+ );
1641
+ return omitHiddenFields(
1642
+ annotationFields,
1643
+ { ...declaration, ...annotation },
1644
+ visibleVerificationPageIds
1645
+ );
1646
+ }
1647
+ function deepMerge(currentDocument, actionDocument) {
1648
+ return (0, import_lodash.mergeWith)(
1649
+ currentDocument,
1650
+ actionDocument,
1651
+ (previousValue, incomingValue) => {
1652
+ if (incomingValue === void 0) {
1653
+ return previousValue;
1654
+ }
1655
+ if ((0, import_lodash.isArray)(incomingValue)) {
1656
+ return incomingValue;
1657
+ }
1658
+ if ((0, import_lodash.isObject)(previousValue) && (0, import_lodash.isObject)(incomingValue)) {
1659
+ return void 0;
1660
+ }
1661
+ return incomingValue;
1662
+ }
1663
+ );
1664
+ }
1665
+ function findLastAssignmentAction(actions) {
1666
+ return actions.filter(
1667
+ ({ type }) => type === ActionType.ASSIGN || type === ActionType.UNASSIGN
1668
+ ).reduce((latestAction, action) => !latestAction || action.createdAt > latestAction.createdAt ? action : latestAction, void 0);
1669
+ }
1670
+ function isWriteAction(actionType) {
1671
+ return writeActions.safeParse(actionType).success;
1672
+ }
1673
+ var findAllFields = (config) => {
1674
+ return (0, import_lodash.flattenDeep)([
1675
+ ...getDeclarationFields(config),
1676
+ ...getAllAnnotationFields(config)
1677
+ ]);
1678
+ };
1756
1679
 
1757
1680
  // ../commons/src/events/EventConfig.ts
1758
- var EventConfig = import_zod18.z.object({
1759
- id: import_zod18.z.string().describe(
1681
+ var import_zod_openapi3 = require("zod-openapi");
1682
+ (0, import_zod_openapi3.extendZodWithOpenApi)(import_zod16.z);
1683
+ var EventConfig = import_zod16.z.object({
1684
+ id: import_zod16.z.string().describe(
1760
1685
  'A machine-readable identifier for the event, e.g. "birth" or "death"'
1761
1686
  ),
1687
+ dateOfEvent: import_zod16.z.object({ fieldId: import_zod16.z.string() }).optional(),
1688
+ title: TranslationConfig,
1689
+ fallbackTitle: TranslationConfig.optional().describe(
1690
+ "This is a fallback title if actual title resolves to empty string"
1691
+ ),
1762
1692
  summary: SummaryConfig,
1763
1693
  label: TranslationConfig,
1764
- actions: import_zod18.z.array(ActionConfig),
1765
- workqueues: import_zod18.z.array(WorkqueueConfig),
1766
- deduplication: import_zod18.z.array(DeduplicationConfig).optional().default([]),
1767
- advancedSearch: import_zod18.z.array(AdvancedSearchConfig).optional().default([])
1694
+ actions: import_zod16.z.array(ActionConfig),
1695
+ declaration: DeclarationFormConfig,
1696
+ deduplication: import_zod16.z.array(DeduplicationConfig).optional().default([]),
1697
+ advancedSearch: import_zod16.z.array(AdvancedSearchConfig).optional().default([])
1768
1698
  }).superRefine((event2, ctx) => {
1769
- const allFields = findPageFields(event2);
1699
+ const allFields = findAllFields(event2);
1770
1700
  const fieldIds = allFields.map((field2) => field2.id);
1771
1701
  const advancedSearchFields = event2.advancedSearch.flatMap(
1772
1702
  (section) => section.fields.flatMap((field2) => field2.fieldId)
@@ -1780,287 +1710,497 @@ var EventConfig = import_zod18.z.object({
1780
1710
  });
1781
1711
  }
1782
1712
  const invalidFields = event2.advancedSearch.flatMap(
1783
- (section) => section.fields.filter((field2) => !fieldIds.includes(field2.fieldId))
1713
+ (section) => (
1714
+ // Check if the fieldId is not in the fieldIds array
1715
+ // and also not in the metadataFields array
1716
+ section.fields.filter(
1717
+ (field2) => !(fieldIds.includes(field2.fieldId) || EventFieldId.options.includes(field2.fieldId))
1718
+ )
1719
+ )
1784
1720
  );
1785
1721
  if (invalidFields.length > 0) {
1786
1722
  ctx.addIssue({
1787
1723
  code: "custom",
1788
- message: `Advanced search id must match a field id in fields array.
1724
+ message: `Advanced search id must match a field id of form fields or pre-defined metadata fields.
1789
1725
  Invalid AdvancedSearch field IDs for event ${event2.id}: ${invalidFields.map((f) => f.fieldId).join(", ")}`,
1790
1726
  path: ["advancedSearch"]
1791
1727
  });
1792
1728
  }
1729
+ if (event2.dateOfEvent) {
1730
+ const eventDateFieldId = getDeclarationFields(event2).find(
1731
+ ({ id }) => id === event2.dateOfEvent?.fieldId
1732
+ );
1733
+ if (!eventDateFieldId) {
1734
+ ctx.addIssue({
1735
+ code: "custom",
1736
+ message: `Date of event field id must match a field id in fields array.
1737
+ Invalid date of event field ID for event ${event2.id}: ${event2.dateOfEvent.fieldId}`,
1738
+ path: ["dateOfEvent"]
1739
+ });
1740
+ } else if (eventDateFieldId.type !== FieldType.DATE) {
1741
+ ctx.addIssue({
1742
+ code: "custom",
1743
+ message: `Field specified for date of event is of type: ${eventDateFieldId.type}, but it needs to be of type: ${FieldType.DATE}`,
1744
+ path: ["dateOfEvent.fieldType"]
1745
+ });
1746
+ }
1747
+ }
1748
+ }).openapi({
1749
+ ref: "EventConfig"
1793
1750
  });
1794
1751
 
1795
1752
  // ../commons/src/events/EventConfigInput.ts
1796
- var defineForm = (form) => FormConfig.parse(form);
1753
+ var defineDeclarationForm = (form) => DeclarationFormConfig.parse(form);
1754
+ var defineActionForm = (actionForm) => ActionFormConfig.parse(actionForm);
1755
+ var definePage = (page) => PageConfig.parse(page);
1797
1756
  var defineFormPage = (formPage) => FormPageConfig.parse(formPage);
1798
1757
 
1758
+ // ../commons/src/events/WorkqueueConfig.ts
1759
+ var import_zod17 = require("zod");
1760
+ var WorkqueueConfig = import_zod17.z.object({
1761
+ slug: import_zod17.z.string().describe("Determines the url of the workqueue."),
1762
+ name: TranslationConfig.describe(
1763
+ "Title of the workflow (both in navigation and on the page)"
1764
+ ),
1765
+ /**
1766
+ * Placeholder untill the following gets merged to develop
1767
+ * https://github.com/opencrvs/opencrvs-core/blob/5fbe9854a88504a7a13fcc856b3e82594b70c38c/packages/commons/src/events/EventIndex.ts#L92-L93
1768
+ */
1769
+ query: import_zod17.z.string(),
1770
+ actions: import_zod17.z.array(
1771
+ import_zod17.z.object({
1772
+ type: import_zod17.z.string(),
1773
+ conditionals: import_zod17.z.array(Conditional).optional()
1774
+ })
1775
+ )
1776
+ }).describe("Configuration for workqueue.");
1777
+ function defineWorkqueue(workqueues) {
1778
+ return workqueues.map((workqueue) => WorkqueueConfig.parse(workqueue));
1779
+ }
1780
+
1799
1781
  // ../commons/src/events/Draft.ts
1800
- var import_zod21 = require("zod");
1782
+ var import_zod20 = require("zod");
1801
1783
 
1802
1784
  // ../commons/src/events/ActionDocument.ts
1803
- var import_zod19 = require("zod");
1804
- var ActionUpdate = import_zod19.z.record(import_zod19.z.string(), FieldUpdateValue);
1805
- var ActionBase = import_zod19.z.object({
1806
- id: import_zod19.z.string(),
1807
- createdAt: import_zod19.z.string().datetime(),
1808
- createdBy: import_zod19.z.string(),
1809
- data: ActionUpdate,
1810
- metadata: ActionUpdate.optional(),
1811
- createdAtLocation: import_zod19.z.string()
1785
+ var import_zod18 = require("zod");
1786
+ var import_zod_openapi4 = require("zod-openapi");
1787
+ (0, import_zod_openapi4.extendZodWithOpenApi)(import_zod18.z);
1788
+ var ActionUpdate = import_zod18.z.record(import_zod18.z.string(), FieldUpdateValue);
1789
+ var ActionStatus = {
1790
+ Requested: "Requested",
1791
+ Accepted: "Accepted",
1792
+ Rejected: "Rejected"
1793
+ };
1794
+ var ActionBase = import_zod18.z.object({
1795
+ id: import_zod18.z.string(),
1796
+ transactionId: import_zod18.z.string(),
1797
+ createdAt: import_zod18.z.string().datetime(),
1798
+ createdBy: import_zod18.z.string(),
1799
+ createdByRole: import_zod18.z.string(),
1800
+ declaration: ActionUpdate,
1801
+ annotation: ActionUpdate.optional(),
1802
+ createdAtLocation: import_zod18.z.string().optional(),
1803
+ updatedAtLocation: import_zod18.z.string().optional(),
1804
+ status: import_zod18.z.enum([
1805
+ ActionStatus.Requested,
1806
+ ActionStatus.Accepted,
1807
+ ActionStatus.Rejected
1808
+ ]),
1809
+ // If the action is an asynchronous confirmation for another action, we will save the original action id here.
1810
+ originalActionId: import_zod18.z.string().optional()
1812
1811
  });
1813
1812
  var AssignedAction = ActionBase.merge(
1814
- import_zod19.z.object({
1815
- type: import_zod19.z.literal(ActionType.ASSIGN),
1816
- assignedTo: import_zod19.z.string()
1813
+ import_zod18.z.object({
1814
+ type: import_zod18.z.literal(ActionType.ASSIGN),
1815
+ assignedTo: import_zod18.z.string()
1817
1816
  })
1818
1817
  );
1819
1818
  var UnassignedAction = ActionBase.merge(
1820
- import_zod19.z.object({
1821
- type: import_zod19.z.literal(ActionType.UNASSIGN)
1819
+ import_zod18.z.object({
1820
+ type: import_zod18.z.literal(ActionType.UNASSIGN),
1821
+ assignedTo: import_zod18.z.literal(null)
1822
1822
  })
1823
1823
  );
1824
1824
  var RegisterAction = ActionBase.merge(
1825
- import_zod19.z.object({
1826
- type: import_zod19.z.literal(ActionType.REGISTER),
1827
- identifiers: import_zod19.z.object({
1828
- trackingId: import_zod19.z.string(),
1829
- registrationNumber: import_zod19.z.string()
1830
- })
1825
+ import_zod18.z.object({
1826
+ type: import_zod18.z.literal(ActionType.REGISTER),
1827
+ registrationNumber: import_zod18.z.string().optional()
1831
1828
  })
1832
1829
  );
1833
1830
  var DeclareAction = ActionBase.merge(
1834
- import_zod19.z.object({
1835
- type: import_zod19.z.literal(ActionType.DECLARE)
1831
+ import_zod18.z.object({
1832
+ type: import_zod18.z.literal(ActionType.DECLARE)
1836
1833
  })
1837
1834
  );
1838
1835
  var ValidateAction = ActionBase.merge(
1839
- import_zod19.z.object({
1840
- type: import_zod19.z.literal(ActionType.VALIDATE)
1836
+ import_zod18.z.object({
1837
+ type: import_zod18.z.literal(ActionType.VALIDATE)
1841
1838
  })
1842
1839
  );
1843
1840
  var RejectAction = ActionBase.merge(
1844
- import_zod19.z.object({
1845
- type: import_zod19.z.literal(ActionType.REJECT)
1841
+ import_zod18.z.object({
1842
+ type: import_zod18.z.literal(ActionType.REJECT)
1846
1843
  })
1847
1844
  );
1848
1845
  var MarkAsDuplicateAction = ActionBase.merge(
1849
- import_zod19.z.object({
1850
- type: import_zod19.z.literal(ActionType.MARKED_AS_DUPLICATE)
1846
+ import_zod18.z.object({
1847
+ type: import_zod18.z.literal(ActionType.MARKED_AS_DUPLICATE)
1851
1848
  })
1852
1849
  );
1853
1850
  var ArchiveAction = ActionBase.merge(
1854
- import_zod19.z.object({
1855
- type: import_zod19.z.literal(ActionType.ARCHIVE)
1851
+ import_zod18.z.object({
1852
+ type: import_zod18.z.literal(ActionType.ARCHIVE)
1856
1853
  })
1857
1854
  );
1858
1855
  var CreatedAction = ActionBase.merge(
1859
- import_zod19.z.object({
1860
- type: import_zod19.z.literal(ActionType.CREATE)
1856
+ import_zod18.z.object({
1857
+ type: import_zod18.z.literal(ActionType.CREATE)
1861
1858
  })
1862
1859
  );
1863
1860
  var NotifiedAction = ActionBase.merge(
1864
- import_zod19.z.object({
1865
- type: import_zod19.z.literal(ActionType.NOTIFY)
1861
+ import_zod18.z.object({
1862
+ type: import_zod18.z.literal(ActionType.NOTIFY)
1866
1863
  })
1867
1864
  );
1868
1865
  var PrintCertificateAction = ActionBase.merge(
1869
- import_zod19.z.object({
1870
- type: import_zod19.z.literal(ActionType.PRINT_CERTIFICATE)
1866
+ import_zod18.z.object({
1867
+ type: import_zod18.z.literal(ActionType.PRINT_CERTIFICATE)
1871
1868
  })
1872
1869
  );
1873
1870
  var RequestedCorrectionAction = ActionBase.merge(
1874
- import_zod19.z.object({
1875
- type: import_zod19.z.literal(ActionType.REQUEST_CORRECTION)
1871
+ import_zod18.z.object({
1872
+ type: import_zod18.z.literal(ActionType.REQUEST_CORRECTION)
1876
1873
  })
1877
1874
  );
1878
1875
  var ApprovedCorrectionAction = ActionBase.merge(
1879
- import_zod19.z.object({
1880
- type: import_zod19.z.literal(ActionType.APPROVE_CORRECTION),
1881
- requestId: import_zod19.z.string()
1876
+ import_zod18.z.object({
1877
+ type: import_zod18.z.literal(ActionType.APPROVE_CORRECTION),
1878
+ requestId: import_zod18.z.string()
1882
1879
  })
1883
1880
  );
1884
1881
  var RejectedCorrectionAction = ActionBase.merge(
1885
- import_zod19.z.object({
1886
- type: import_zod19.z.literal(ActionType.REJECT_CORRECTION),
1887
- requestId: import_zod19.z.string()
1882
+ import_zod18.z.object({
1883
+ type: import_zod18.z.literal(ActionType.REJECT_CORRECTION),
1884
+ requestId: import_zod18.z.string()
1888
1885
  })
1889
1886
  );
1890
- var CustomAction = ActionBase.merge(
1891
- import_zod19.z.object({
1892
- type: import_zod19.z.literal(ActionType.CUSTOM)
1887
+ var ReadAction = ActionBase.merge(
1888
+ import_zod18.z.object({
1889
+ type: import_zod18.z.literal(ActionType.READ)
1893
1890
  })
1894
1891
  );
1895
- var ActionDocument = import_zod19.z.discriminatedUnion("type", [
1896
- CreatedAction,
1897
- ValidateAction,
1898
- RejectAction,
1899
- MarkAsDuplicateAction,
1900
- ArchiveAction,
1901
- NotifiedAction,
1902
- RegisterAction,
1903
- DeclareAction,
1904
- AssignedAction,
1905
- RequestedCorrectionAction,
1906
- ApprovedCorrectionAction,
1907
- RejectedCorrectionAction,
1908
- UnassignedAction,
1909
- PrintCertificateAction,
1910
- CustomAction
1911
- ]);
1912
- var ResolvedUser = import_zod19.z.object({
1913
- id: import_zod19.z.string(),
1914
- role: import_zod19.z.string(),
1915
- name: import_zod19.z.array(
1916
- import_zod19.z.object({
1917
- use: import_zod19.z.string(),
1918
- given: import_zod19.z.array(import_zod19.z.string()),
1919
- family: import_zod19.z.string()
1892
+ var ActionDocument = import_zod18.z.discriminatedUnion("type", [
1893
+ CreatedAction.openapi({ ref: "CreatedAction" }),
1894
+ ValidateAction.openapi({ ref: "ValidateAction" }),
1895
+ RejectAction.openapi({ ref: "RejectAction" }),
1896
+ MarkAsDuplicateAction.openapi({ ref: "MarkAsDuplicateAction" }),
1897
+ ArchiveAction.openapi({ ref: "ArchiveAction" }),
1898
+ NotifiedAction.openapi({ ref: "NotifiedAction" }),
1899
+ RegisterAction.openapi({ ref: "RegisterAction" }),
1900
+ DeclareAction.openapi({ ref: "DeclareAction" }),
1901
+ AssignedAction.openapi({ ref: "AssignedAction" }),
1902
+ RequestedCorrectionAction.openapi({ ref: "RequestedCorrectionAction" }),
1903
+ ApprovedCorrectionAction.openapi({ ref: "ApprovedCorrectionAction" }),
1904
+ RejectedCorrectionAction.openapi({ ref: "RejectedCorrectionAction" }),
1905
+ UnassignedAction.openapi({ ref: "UnassignedAction" }),
1906
+ PrintCertificateAction.openapi({ ref: "PrintCertificateAction" }),
1907
+ ReadAction.openapi({ ref: "ReadAction" })
1908
+ ]).openapi({
1909
+ ref: "ActionDocument"
1910
+ });
1911
+ var AsyncRejectActionDocument = ActionBase.omit({
1912
+ declaration: true,
1913
+ annotation: true,
1914
+ createdBy: true,
1915
+ createdByRole: true,
1916
+ createdAtLocation: true
1917
+ }).merge(
1918
+ import_zod18.z.object({
1919
+ type: import_zod18.z.enum(ConfirmableActions),
1920
+ status: import_zod18.z.literal(ActionStatus.Rejected)
1921
+ })
1922
+ );
1923
+ var Action = import_zod18.z.union([ActionDocument, AsyncRejectActionDocument]);
1924
+ var ResolvedUser = import_zod18.z.object({
1925
+ id: import_zod18.z.string(),
1926
+ role: import_zod18.z.string(),
1927
+ name: import_zod18.z.array(
1928
+ import_zod18.z.object({
1929
+ use: import_zod18.z.string(),
1930
+ given: import_zod18.z.array(import_zod18.z.string()),
1931
+ family: import_zod18.z.string()
1920
1932
  })
1921
1933
  )
1922
1934
  });
1923
1935
 
1924
1936
  // ../commons/src/events/ActionInput.ts
1925
- var import_zod20 = require("zod");
1926
- var BaseActionInput = import_zod20.z.object({
1927
- eventId: import_zod20.z.string(),
1928
- transactionId: import_zod20.z.string(),
1929
- data: ActionUpdate,
1930
- metadata: ActionUpdate.optional()
1937
+ var import_zod19 = require("zod");
1938
+ var import_zod_openapi5 = require("zod-openapi");
1939
+ (0, import_zod_openapi5.extendZodWithOpenApi)(import_zod19.z);
1940
+ var BaseActionInput = import_zod19.z.object({
1941
+ eventId: import_zod19.z.string(),
1942
+ transactionId: import_zod19.z.string(),
1943
+ declaration: ActionUpdate.default({}),
1944
+ annotation: ActionUpdate.optional(),
1945
+ originalActionId: import_zod19.z.string().optional(),
1946
+ keepAssignment: import_zod19.z.boolean().optional()
1931
1947
  });
1932
1948
  var CreateActionInput = BaseActionInput.merge(
1933
- import_zod20.z.object({
1934
- type: import_zod20.z.literal(ActionType.CREATE).default(ActionType.CREATE),
1935
- createdAtLocation: import_zod20.z.string()
1949
+ import_zod19.z.object({
1950
+ type: import_zod19.z.literal(ActionType.CREATE).default(ActionType.CREATE),
1951
+ createdAtLocation: import_zod19.z.string()
1936
1952
  })
1937
1953
  );
1938
1954
  var RegisterActionInput = BaseActionInput.merge(
1939
- import_zod20.z.object({
1940
- type: import_zod20.z.literal(ActionType.REGISTER).default(ActionType.REGISTER),
1941
- identifiers: import_zod20.z.object({
1942
- trackingId: import_zod20.z.string(),
1943
- registrationNumber: import_zod20.z.string()
1944
- })
1955
+ import_zod19.z.object({
1956
+ type: import_zod19.z.literal(ActionType.REGISTER).default(ActionType.REGISTER),
1957
+ registrationNumber: import_zod19.z.string().optional()
1945
1958
  })
1946
1959
  );
1947
1960
  var ValidateActionInput = BaseActionInput.merge(
1948
- import_zod20.z.object({
1949
- type: import_zod20.z.literal(ActionType.VALIDATE).default(ActionType.VALIDATE),
1950
- duplicates: import_zod20.z.array(import_zod20.z.string())
1961
+ import_zod19.z.object({
1962
+ type: import_zod19.z.literal(ActionType.VALIDATE).default(ActionType.VALIDATE),
1963
+ duplicates: import_zod19.z.array(import_zod19.z.string())
1951
1964
  })
1952
1965
  );
1953
1966
  var NotifyActionInput = BaseActionInput.merge(
1954
- import_zod20.z.object({
1955
- type: import_zod20.z.literal(ActionType.NOTIFY).default(ActionType.NOTIFY)
1967
+ import_zod19.z.object({
1968
+ type: import_zod19.z.literal(ActionType.NOTIFY).default(ActionType.NOTIFY)
1956
1969
  })
1957
1970
  );
1958
1971
  var DeclareActionInput = BaseActionInput.merge(
1959
- import_zod20.z.object({
1960
- type: import_zod20.z.literal(ActionType.DECLARE).default(ActionType.DECLARE)
1972
+ import_zod19.z.object({
1973
+ type: import_zod19.z.literal(ActionType.DECLARE).default(ActionType.DECLARE)
1961
1974
  })
1962
1975
  );
1963
1976
  var PrintCertificateActionInput = BaseActionInput.merge(
1964
- import_zod20.z.object({
1965
- type: import_zod20.z.literal(ActionType.PRINT_CERTIFICATE).default(ActionType.PRINT_CERTIFICATE)
1977
+ import_zod19.z.object({
1978
+ type: import_zod19.z.literal(ActionType.PRINT_CERTIFICATE).default(ActionType.PRINT_CERTIFICATE)
1966
1979
  })
1967
1980
  );
1968
1981
  var RejectDeclarationActionInput = BaseActionInput.merge(
1969
- import_zod20.z.object({
1970
- type: import_zod20.z.literal(ActionType.REJECT).default(ActionType.REJECT)
1982
+ import_zod19.z.object({
1983
+ type: import_zod19.z.literal(ActionType.REJECT).default(ActionType.REJECT)
1971
1984
  })
1972
1985
  );
1973
1986
  var MarkedAsDuplicateActionInput = BaseActionInput.merge(
1974
- import_zod20.z.object({
1975
- type: import_zod20.z.literal(ActionType.MARKED_AS_DUPLICATE).default(ActionType.MARKED_AS_DUPLICATE)
1987
+ import_zod19.z.object({
1988
+ type: import_zod19.z.literal(ActionType.MARKED_AS_DUPLICATE).default(ActionType.MARKED_AS_DUPLICATE)
1976
1989
  })
1977
1990
  );
1978
1991
  var ArchiveActionInput = BaseActionInput.merge(
1979
- import_zod20.z.object({
1980
- type: import_zod20.z.literal(ActionType.ARCHIVE).default(ActionType.ARCHIVE)
1992
+ import_zod19.z.object({
1993
+ type: import_zod19.z.literal(ActionType.ARCHIVE).default(ActionType.ARCHIVE)
1981
1994
  })
1982
1995
  );
1983
1996
  var AssignActionInput = BaseActionInput.merge(
1984
- import_zod20.z.object({
1985
- type: import_zod20.z.literal(ActionType.ASSIGN).default(ActionType.ASSIGN),
1986
- assignedTo: import_zod20.z.string()
1997
+ import_zod19.z.object({
1998
+ type: import_zod19.z.literal(ActionType.ASSIGN).default(ActionType.ASSIGN),
1999
+ assignedTo: import_zod19.z.string()
1987
2000
  })
1988
2001
  );
1989
2002
  var UnassignActionInput = BaseActionInput.merge(
1990
- import_zod20.z.object({
1991
- type: import_zod20.z.literal(ActionType.UNASSIGN).default(ActionType.UNASSIGN)
2003
+ import_zod19.z.object({
2004
+ type: import_zod19.z.literal(ActionType.UNASSIGN).default(ActionType.UNASSIGN),
2005
+ assignedTo: import_zod19.z.literal(null).default(null)
1992
2006
  })
1993
2007
  );
1994
2008
  var RequestCorrectionActionInput = BaseActionInput.merge(
1995
- import_zod20.z.object({
1996
- type: import_zod20.z.literal(ActionType.REQUEST_CORRECTION).default(ActionType.REQUEST_CORRECTION)
2009
+ import_zod19.z.object({
2010
+ type: import_zod19.z.literal(ActionType.REQUEST_CORRECTION).default(ActionType.REQUEST_CORRECTION)
1997
2011
  })
1998
2012
  );
1999
2013
  var RejectCorrectionActionInput = BaseActionInput.merge(
2000
- import_zod20.z.object({
2001
- requestId: import_zod20.z.string(),
2002
- type: import_zod20.z.literal(ActionType.REJECT_CORRECTION).default(ActionType.REJECT_CORRECTION)
2014
+ import_zod19.z.object({
2015
+ requestId: import_zod19.z.string(),
2016
+ type: import_zod19.z.literal(ActionType.REJECT_CORRECTION).default(ActionType.REJECT_CORRECTION)
2003
2017
  })
2004
2018
  );
2005
2019
  var ApproveCorrectionActionInput = BaseActionInput.merge(
2006
- import_zod20.z.object({
2007
- requestId: import_zod20.z.string(),
2008
- type: import_zod20.z.literal(ActionType.APPROVE_CORRECTION).default(ActionType.APPROVE_CORRECTION)
2020
+ import_zod19.z.object({
2021
+ requestId: import_zod19.z.string(),
2022
+ type: import_zod19.z.literal(ActionType.APPROVE_CORRECTION).default(ActionType.APPROVE_CORRECTION)
2009
2023
  })
2010
2024
  );
2011
- var ActionInput = import_zod20.z.discriminatedUnion("type", [
2012
- CreateActionInput,
2013
- ValidateActionInput,
2014
- RegisterActionInput,
2015
- NotifyActionInput,
2016
- DeclareActionInput,
2017
- RejectDeclarationActionInput,
2018
- MarkedAsDuplicateActionInput,
2019
- ArchiveActionInput,
2020
- AssignActionInput,
2021
- UnassignActionInput,
2022
- PrintCertificateActionInput,
2023
- RequestCorrectionActionInput,
2024
- RejectCorrectionActionInput,
2025
- ApproveCorrectionActionInput
2026
- ]);
2025
+ var ReadActionInput = BaseActionInput.merge(
2026
+ import_zod19.z.object({
2027
+ type: import_zod19.z.literal(ActionType.READ).default(ActionType.READ)
2028
+ })
2029
+ );
2030
+ var DeleteActionInput = import_zod19.z.object({ eventId: import_zod19.z.string() });
2031
+ var ActionInput = import_zod19.z.discriminatedUnion("type", [
2032
+ CreateActionInput.openapi({ ref: "CreateActionInput" }),
2033
+ ValidateActionInput.openapi({ ref: "ValidateActionInput" }),
2034
+ RegisterActionInput.openapi({ ref: "RegisterActionInput" }),
2035
+ NotifyActionInput.openapi({ ref: "NotifyActionInput" }),
2036
+ DeclareActionInput.openapi({ ref: "DeclareActionInput" }),
2037
+ RejectDeclarationActionInput.openapi({
2038
+ ref: "RejectDeclarationActionInput"
2039
+ }),
2040
+ MarkedAsDuplicateActionInput.openapi({
2041
+ ref: "MarkedAsDuplicateActionInput"
2042
+ }),
2043
+ ArchiveActionInput.openapi({ ref: "ArchiveActionInput" }),
2044
+ AssignActionInput.openapi({ ref: "AssignActionInput" }),
2045
+ UnassignActionInput.openapi({ ref: "UnassignActionInput" }),
2046
+ PrintCertificateActionInput.openapi({ ref: "PrintCertificateActionInput" }),
2047
+ RequestCorrectionActionInput.openapi({
2048
+ ref: "RequestCorrectionActionInput"
2049
+ }),
2050
+ RejectCorrectionActionInput.openapi({ ref: "RejectCorrectionActionInput" }),
2051
+ ApproveCorrectionActionInput.openapi({
2052
+ ref: "ApproveCorrectionActionInput"
2053
+ }),
2054
+ ReadActionInput.openapi({ ref: "ReadActionInput" })
2055
+ ]).openapi({
2056
+ ref: "ActionInput"
2057
+ });
2027
2058
 
2028
2059
  // ../commons/src/events/Draft.ts
2029
- var Draft = import_zod21.z.object({
2030
- id: import_zod21.z.string(),
2031
- eventId: import_zod21.z.string(),
2032
- transactionId: import_zod21.z.string(),
2033
- createdAt: import_zod21.z.string().datetime(),
2060
+ var Draft = import_zod20.z.object({
2061
+ id: import_zod20.z.string(),
2062
+ eventId: import_zod20.z.string(),
2063
+ transactionId: import_zod20.z.string(),
2064
+ createdAt: import_zod20.z.string().datetime(),
2034
2065
  action: ActionBase.extend({
2035
- type: import_zod21.z.enum(Object.values(ActionType))
2066
+ type: ActionTypes
2036
2067
  }).omit({ id: true })
2037
2068
  });
2038
2069
  var DraftInput = BaseActionInput.extend({
2039
- type: import_zod21.z.enum(Object.values(ActionType))
2070
+ type: ActionTypes
2040
2071
  });
2041
2072
 
2073
+ // ../commons/src/events/EventMetadata.ts
2074
+ var import_zod21 = require("zod");
2075
+ var EventStatus = {
2076
+ CREATED: "CREATED",
2077
+ NOTIFIED: "NOTIFIED",
2078
+ DECLARED: "DECLARED",
2079
+ VALIDATED: "VALIDATED",
2080
+ REGISTERED: "REGISTERED",
2081
+ CERTIFIED: "CERTIFIED",
2082
+ REJECTED: "REJECTED",
2083
+ ARCHIVED: "ARCHIVED"
2084
+ };
2085
+ var eventStatuses = Object.values(EventStatus);
2086
+ var EventStatuses = import_zod21.z.nativeEnum(EventStatus);
2087
+ var ZodDate = import_zod21.z.string().date();
2088
+ var EventMetadata = import_zod21.z.object({
2089
+ id: import_zod21.z.string(),
2090
+ type: import_zod21.z.string(),
2091
+ status: EventStatuses,
2092
+ createdAt: import_zod21.z.string().datetime(),
2093
+ dateOfEvent: ZodDate.nullish(),
2094
+ createdBy: import_zod21.z.string(),
2095
+ updatedByUserRole: import_zod21.z.string(),
2096
+ createdAtLocation: import_zod21.z.string(),
2097
+ updatedAtLocation: import_zod21.z.string(),
2098
+ updatedAt: import_zod21.z.string().datetime(),
2099
+ assignedTo: import_zod21.z.string().nullish(),
2100
+ updatedBy: import_zod21.z.string(),
2101
+ trackingId: import_zod21.z.string(),
2102
+ registrationNumber: import_zod21.z.string().nullish()
2103
+ });
2104
+ var eventMetadataLabelMap = {
2105
+ "event.assignedTo": {
2106
+ id: "event.assignedTo.label",
2107
+ defaultMessage: "Assigned To",
2108
+ description: "Assigned To"
2109
+ },
2110
+ "event.createdAt": {
2111
+ id: "event.createdAt.label",
2112
+ defaultMessage: "Created",
2113
+ description: "Created At"
2114
+ },
2115
+ "event.dateOfEvent": {
2116
+ id: "event.dateOfEvent.label",
2117
+ defaultMessage: "Date of Event",
2118
+ description: "Date of Event"
2119
+ },
2120
+ "event.createdAtLocation": {
2121
+ id: "event.createdAtLocation.label",
2122
+ defaultMessage: "Location",
2123
+ description: "Created At Location"
2124
+ },
2125
+ "event.updatedAtLocation": {
2126
+ id: "event.updatedAtLocation.label",
2127
+ defaultMessage: "Location",
2128
+ description: "Updated At Location"
2129
+ },
2130
+ "event.createdBy": {
2131
+ id: "event.createdBy.label",
2132
+ defaultMessage: "Created By",
2133
+ description: "Created By"
2134
+ },
2135
+ "event.updatedByUserRole": {
2136
+ id: "event.updatedByUserRole.label",
2137
+ defaultMessage: "Updated By Role",
2138
+ description: "Updated By Role"
2139
+ },
2140
+ "event.id": {
2141
+ id: "event.id.label",
2142
+ defaultMessage: "ID",
2143
+ description: "ID"
2144
+ },
2145
+ "event.updatedAt": {
2146
+ id: "event.modifiedAt.label",
2147
+ defaultMessage: "Updated",
2148
+ description: "Modified At"
2149
+ },
2150
+ "event.status": {
2151
+ id: "event.status.label",
2152
+ defaultMessage: "Status",
2153
+ description: "Status"
2154
+ },
2155
+ "event.type": {
2156
+ id: "event.type.label",
2157
+ defaultMessage: "Type",
2158
+ description: "Type"
2159
+ },
2160
+ "event.updatedBy": {
2161
+ id: "event.updatedBy.label",
2162
+ defaultMessage: "Updated By",
2163
+ description: "Updated By"
2164
+ },
2165
+ "event.trackingId": {
2166
+ id: "event.trackingId.label",
2167
+ defaultMessage: "Tracking ID",
2168
+ description: "Tracking ID"
2169
+ },
2170
+ "event.registrationNumber": {
2171
+ id: "event.registrationNumber.label",
2172
+ defaultMessage: "Registration Number",
2173
+ description: "Registration Number"
2174
+ }
2175
+ };
2176
+
2042
2177
  // ../commons/src/events/EventInput.ts
2043
2178
  var import_zod22 = require("zod");
2044
2179
  var EventInput = import_zod22.z.object({
2045
2180
  transactionId: import_zod22.z.string(),
2046
- type: import_zod22.z.string()
2181
+ type: import_zod22.z.string(),
2182
+ dateOfEvent: import_zod22.z.object({ fieldId: import_zod22.z.string() }).optional()
2047
2183
  });
2048
2184
 
2049
2185
  // ../commons/src/events/EventDocument.ts
2050
2186
  var import_zod23 = require("zod");
2187
+ var import_zod_openapi6 = require("zod-openapi");
2188
+ (0, import_zod_openapi6.extendZodWithOpenApi)(import_zod23.z);
2051
2189
  var EventDocument = import_zod23.z.object({
2052
2190
  id: import_zod23.z.string(),
2053
2191
  type: import_zod23.z.string(),
2192
+ dateOfEvent: import_zod23.z.object({ fieldId: import_zod23.z.string() }).optional(),
2054
2193
  createdAt: import_zod23.z.string().datetime(),
2055
2194
  updatedAt: import_zod23.z.string().datetime(),
2056
- actions: import_zod23.z.array(ActionDocument),
2195
+ updatedAtLocation: import_zod23.z.string(),
2196
+ actions: import_zod23.z.array(Action),
2057
2197
  trackingId: import_zod23.z.string()
2058
- });
2198
+ }).openapi({ ref: "EventDocument" });
2059
2199
 
2060
2200
  // ../commons/src/events/EventIndex.ts
2061
2201
  var import_zod24 = require("zod");
2062
2202
  var EventIndex = EventMetadata.extend({
2063
- data: import_zod24.z.record(import_zod24.z.string(), import_zod24.z.any())
2203
+ declaration: import_zod24.z.record(import_zod24.z.string(), import_zod24.z.any())
2064
2204
  });
2065
2205
  var EventSearchIndex = import_zod24.z.record(import_zod24.z.string(), import_zod24.z.any()).and(
2066
2206
  import_zod24.z.object({
@@ -2068,35 +2208,94 @@ var EventSearchIndex = import_zod24.z.record(import_zod24.z.string(), import_zod
2068
2208
  // Ensures "type" (event-id) exists and is a string
2069
2209
  })
2070
2210
  );
2211
+ var Fuzzy = import_zod24.z.object({ type: import_zod24.z.literal("fuzzy"), term: import_zod24.z.string() });
2212
+ var Exact = import_zod24.z.object({ type: import_zod24.z.literal("exact"), term: import_zod24.z.string() });
2213
+ var AnyOf = import_zod24.z.object({
2214
+ type: import_zod24.z.literal("anyOf"),
2215
+ terms: import_zod24.z.array(import_zod24.z.string())
2216
+ });
2217
+ var Range = import_zod24.z.object({
2218
+ type: import_zod24.z.literal("range"),
2219
+ gte: import_zod24.z.string(),
2220
+ lte: import_zod24.z.string()
2221
+ });
2222
+ var Within = import_zod24.z.object({ type: import_zod24.z.literal("within"), location: import_zod24.z.string() });
2223
+ var DateCondition = import_zod24.z.union([Exact, Range]);
2224
+ var QueryInput = import_zod24.z.lazy(
2225
+ () => import_zod24.z.union([
2226
+ import_zod24.z.discriminatedUnion("type", [Fuzzy, Exact, Range, Within, AnyOf]),
2227
+ import_zod24.z.record(import_zod24.z.string(), QueryInput)
2228
+ ])
2229
+ );
2230
+ var QueryExpression = import_zod24.z.object({
2231
+ type: import_zod24.z.literal("and"),
2232
+ eventType: import_zod24.z.string(),
2233
+ status: import_zod24.z.optional(import_zod24.z.union([AnyOf, Exact])),
2234
+ createdAt: import_zod24.z.optional(DateCondition),
2235
+ updatedAt: import_zod24.z.optional(DateCondition),
2236
+ createAtLocation: import_zod24.z.optional(import_zod24.z.union([Within, Exact])),
2237
+ updatedAtLocation: import_zod24.z.optional(import_zod24.z.union([Within, Exact])),
2238
+ createdBy: import_zod24.z.optional(Exact),
2239
+ updatedBy: import_zod24.z.optional(Exact),
2240
+ trackingId: import_zod24.z.optional(Exact),
2241
+ data: QueryInput
2242
+ }).partial();
2243
+ var Or2 = import_zod24.z.object({
2244
+ type: import_zod24.z.literal("or"),
2245
+ clauses: import_zod24.z.array(QueryExpression)
2246
+ });
2247
+ var QueryType = import_zod24.z.discriminatedUnion("type", [QueryExpression, Or2]);
2071
2248
 
2072
2249
  // ../commons/src/events/state/index.ts
2073
- var _ = __toESM(require("lodash"));
2074
2250
  function getStatusFromActions(actions) {
2251
+ const hasRejectedAction = actions.some(
2252
+ (a) => a.status === ActionStatus.Rejected
2253
+ );
2254
+ if (hasRejectedAction) {
2255
+ return EventStatus.REJECTED;
2256
+ }
2075
2257
  return actions.reduce((status, action) => {
2076
- if (action.type === ActionType.CREATE) {
2077
- return EventStatus.CREATED;
2078
- }
2079
- if (action.type === ActionType.DECLARE) {
2080
- return EventStatus.DECLARED;
2081
- }
2082
- if (action.type === ActionType.VALIDATE) {
2083
- return EventStatus.VALIDATED;
2084
- }
2085
- if (action.type === ActionType.REGISTER) {
2086
- return EventStatus.REGISTERED;
2087
- }
2088
- if (action.type === ActionType.REJECT) {
2089
- return EventStatus.REJECTED;
2090
- }
2091
- if (action.type === ActionType.ARCHIVE) {
2092
- return EventStatus.ARCHIVED;
2093
- }
2094
- if (action.type === ActionType.NOTIFY) {
2095
- return EventStatus.NOTIFIED;
2258
+ switch (action.type) {
2259
+ case ActionType.CREATE:
2260
+ return EventStatus.CREATED;
2261
+ case ActionType.DECLARE:
2262
+ return EventStatus.DECLARED;
2263
+ case ActionType.VALIDATE:
2264
+ return EventStatus.VALIDATED;
2265
+ case ActionType.REGISTER:
2266
+ return EventStatus.REGISTERED;
2267
+ case ActionType.REJECT:
2268
+ return EventStatus.REJECTED;
2269
+ case ActionType.ARCHIVE:
2270
+ return EventStatus.ARCHIVED;
2271
+ case ActionType.NOTIFY:
2272
+ return EventStatus.NOTIFIED;
2273
+ case ActionType.PRINT_CERTIFICATE:
2274
+ return EventStatus.CERTIFIED;
2275
+ case ActionType.ASSIGN:
2276
+ case ActionType.UNASSIGN:
2277
+ case ActionType.REQUEST_CORRECTION:
2278
+ case ActionType.APPROVE_CORRECTION:
2279
+ case ActionType.MARKED_AS_DUPLICATE:
2280
+ case ActionType.REJECT_CORRECTION:
2281
+ case ActionType.READ:
2282
+ default:
2283
+ return status;
2096
2284
  }
2097
- return status;
2098
2285
  }, EventStatus.CREATED);
2099
2286
  }
2287
+ function getLastUpdatedByUserRoleFromActions(actions) {
2288
+ const actionsWithRoles = actions.filter(
2289
+ (action) => !isWriteAction(action.type) && action.status !== ActionStatus.Rejected
2290
+ ).sort((a, b) => a.createdAt.localeCompare(b.createdAt));
2291
+ const lastAction = actionsWithRoles.at(-1);
2292
+ if (!lastAction) {
2293
+ throw new Error(
2294
+ "Should never happen, at least CREATE action should be present"
2295
+ );
2296
+ }
2297
+ return ActionDocument.parse(lastAction).createdByRole;
2298
+ }
2100
2299
  function getAssignedUserFromActions(actions) {
2101
2300
  return actions.reduce((user2, action) => {
2102
2301
  if (action.type === ActionType.ASSIGN) {
@@ -2108,7 +2307,7 @@ function getAssignedUserFromActions(actions) {
2108
2307
  return user2;
2109
2308
  }, null);
2110
2309
  }
2111
- function getData(actions) {
2310
+ function aggregateActionDeclarations(actions) {
2112
2311
  const excludedActions = [
2113
2312
  ActionType.REQUEST_CORRECTION,
2114
2313
  ActionType.PRINT_CERTIFICATE
@@ -2122,47 +2321,35 @@ function getData(actions) {
2122
2321
  if (!requestAction) {
2123
2322
  return status;
2124
2323
  }
2125
- return deepMerge(status, requestAction.data);
2324
+ return deepMerge(status, requestAction.declaration);
2126
2325
  }
2127
- return deepMerge(status, action.data);
2326
+ return deepMerge(status, action.declaration);
2128
2327
  }, {});
2129
2328
  }
2130
2329
  function deepDropNulls(obj) {
2131
- if (!_.isObject(obj)) return obj;
2132
- return Object.entries(obj).reduce((acc, [key, value]) => {
2133
- if (_.isObject(value)) {
2134
- value = deepDropNulls(value);
2135
- }
2136
- if (value !== null) {
2137
- return {
2138
- ...acc,
2139
- [key]: value
2140
- };
2141
- }
2142
- return acc;
2143
- }, {});
2144
- }
2145
- function deepMerge(currentDocument, actionDocument) {
2146
- return _.mergeWith(
2147
- currentDocument,
2148
- actionDocument,
2149
- (previousValue, incomingValue) => {
2150
- if (incomingValue === void 0) {
2151
- return previousValue;
2152
- }
2153
- if (_.isArray(incomingValue)) {
2154
- return incomingValue;
2155
- }
2156
- if (_.isObject(previousValue) && _.isObject(incomingValue)) {
2157
- return void 0;
2330
+ if (Array.isArray(obj)) {
2331
+ return obj.map(deepDropNulls);
2332
+ }
2333
+ if (obj !== null && typeof obj === "object") {
2334
+ return Object.entries(obj).reduce((acc, [key, value]) => {
2335
+ const cleanedValue = deepDropNulls(value);
2336
+ if (cleanedValue !== null) {
2337
+ ;
2338
+ acc[key] = cleanedValue;
2158
2339
  }
2159
- return incomingValue;
2160
- }
2161
- );
2340
+ return acc;
2341
+ }, {});
2342
+ }
2343
+ return obj;
2162
2344
  }
2163
2345
  function isUndeclaredDraft(status) {
2164
2346
  return status === EventStatus.CREATED;
2165
2347
  }
2348
+ function getAcceptedActions(event2) {
2349
+ return event2.actions.filter(
2350
+ (a) => a.status === ActionStatus.Accepted
2351
+ );
2352
+ }
2166
2353
  function getCurrentEventState(event2) {
2167
2354
  const creationAction = event2.actions.find(
2168
2355
  (action) => action.type === ActionType.CREATE
@@ -2170,19 +2357,35 @@ function getCurrentEventState(event2) {
2170
2357
  if (!creationAction) {
2171
2358
  throw new Error(`Event ${event2.id} has no creation action`);
2172
2359
  }
2173
- const latestAction = event2.actions[event2.actions.length - 1];
2360
+ const activeActions = getAcceptedActions(event2);
2361
+ const latestAction = activeActions[activeActions.length - 1];
2362
+ const registrationAction = activeActions.find(
2363
+ (a) => a.type === ActionType.REGISTER && a.status === ActionStatus.Accepted
2364
+ );
2365
+ const registrationNumber = registrationAction?.registrationNumber ?? null;
2366
+ const declaration = aggregateActionDeclarations(activeActions);
2367
+ let dateOfEvent = event2.createdAt.split("T")[0];
2368
+ if (event2.dateOfEvent) {
2369
+ const parsedDate = ZodDate.safeParse(declaration[event2.dateOfEvent.fieldId]);
2370
+ dateOfEvent = parsedDate.success ? parsedDate.data : null;
2371
+ }
2174
2372
  return deepDropNulls({
2175
2373
  id: event2.id,
2176
2374
  type: event2.type,
2177
2375
  status: getStatusFromActions(event2.actions),
2178
2376
  createdAt: event2.createdAt,
2179
2377
  createdBy: creationAction.createdBy,
2180
- createdAtLocation: creationAction.createdAtLocation,
2181
- modifiedAt: latestAction.createdAt,
2182
- assignedTo: getAssignedUserFromActions(event2.actions),
2378
+ createdAtLocation: creationAction.createdAtLocation ?? "",
2379
+ // @todo remove using empty string
2380
+ updatedAt: latestAction.createdAt,
2381
+ assignedTo: getAssignedUserFromActions(activeActions),
2183
2382
  updatedBy: latestAction.createdBy,
2184
- data: getData(event2.actions),
2185
- trackingId: event2.trackingId
2383
+ updatedAtLocation: event2.updatedAtLocation,
2384
+ declaration,
2385
+ trackingId: event2.trackingId,
2386
+ registrationNumber,
2387
+ updatedByUserRole: getLastUpdatedByUserRoleFromActions(event2.actions),
2388
+ dateOfEvent
2186
2389
  });
2187
2390
  }
2188
2391
  function getCurrentEventStateWithDrafts(event2, drafts) {
@@ -2207,45 +2410,50 @@ function getCurrentEventStateWithDrafts(event2, drafts) {
2207
2410
  return getCurrentEventState(withDrafts);
2208
2411
  }
2209
2412
  function applyDraftsToEventIndex(eventIndex, drafts) {
2210
- const indexedAt = eventIndex.modifiedAt;
2413
+ const indexedAt = eventIndex.updatedAt;
2211
2414
  const activeDrafts = drafts.filter(({ createdAt }) => new Date(createdAt) > new Date(indexedAt)).map((draft) => draft.action).sort();
2212
2415
  if (activeDrafts.length === 0) {
2213
2416
  return eventIndex;
2214
2417
  }
2215
2418
  return {
2216
2419
  ...eventIndex,
2217
- data: {
2218
- ...eventIndex.data,
2219
- ...activeDrafts[activeDrafts.length - 1].data
2420
+ declaration: {
2421
+ ...eventIndex.declaration,
2422
+ ...activeDrafts[activeDrafts.length - 1].declaration
2220
2423
  }
2221
2424
  };
2222
2425
  }
2223
- function getMetadataForAction({
2426
+ function getAnnotationFromDrafts(drafts) {
2427
+ const actions = drafts.map((draft) => draft.action);
2428
+ const annotation = actions.reduce((ann, action) => {
2429
+ return deepMerge(ann, action.annotation ?? {});
2430
+ }, {});
2431
+ return deepDropNulls(annotation);
2432
+ }
2433
+ function getActionAnnotation({
2224
2434
  event: event2,
2225
2435
  actionType,
2226
- drafts
2436
+ drafts = []
2227
2437
  }) {
2228
- const action = event2.actions.find((action2) => actionType === action2.type);
2438
+ const activeActions = getAcceptedActions(event2);
2439
+ const action = activeActions.find(
2440
+ (activeAction) => actionType === activeAction.type
2441
+ );
2229
2442
  const eventDrafts = drafts.filter((draft) => draft.eventId === event2.id);
2230
2443
  const sorted = [
2231
2444
  ...action ? [action] : [],
2232
2445
  ...eventDrafts.map((draft) => draft.action)
2233
2446
  ].sort();
2234
- const metadata = sorted.reduce((metadata2, action2) => {
2235
- return deepMerge(metadata2, action2.metadata ?? {});
2447
+ const annotation = sorted.reduce((ann, sortedAction) => {
2448
+ return deepMerge(ann, sortedAction.annotation ?? {});
2236
2449
  }, {});
2237
- return deepDropNulls(metadata);
2450
+ return deepDropNulls(annotation);
2238
2451
  }
2239
2452
 
2240
2453
  // ../commons/src/events/defineConfig.ts
2241
2454
  var defineConfig = (config) => {
2242
- validateWorkqueueConfig(config.workqueues);
2243
2455
  const input = EventConfig.parse(config);
2244
- const pageFields = findInputPageFields(input);
2245
- return EventConfig.parse({
2246
- ...input,
2247
- pageFields
2248
- });
2456
+ return input;
2249
2457
  };
2250
2458
 
2251
2459
  // ../commons/src/events/transactions.ts
@@ -2260,6 +2468,16 @@ var import_lodash2 = require("lodash");
2260
2468
  function defineConditional(schema) {
2261
2469
  return schema;
2262
2470
  }
2471
+ function defineFormConditional(schema) {
2472
+ const schemaWithForm = {
2473
+ type: "object",
2474
+ properties: {
2475
+ $form: schema
2476
+ },
2477
+ required: ["$form"]
2478
+ };
2479
+ return defineConditional(schemaWithForm);
2480
+ }
2263
2481
  function alwaysTrue() {
2264
2482
  return {};
2265
2483
  }
@@ -2284,6 +2502,9 @@ function not(condition) {
2284
2502
  required: []
2285
2503
  });
2286
2504
  }
2505
+ function never() {
2506
+ return not(alwaysTrue());
2507
+ }
2287
2508
  var user = {
2288
2509
  hasScope: (scope) => defineConditional({
2289
2510
  type: "object",
@@ -2305,95 +2526,148 @@ var user = {
2305
2526
  required: ["$user"]
2306
2527
  })
2307
2528
  };
2308
- var event = {
2309
- hasAction: (action) => defineConditional({
2529
+ function createEventConditionals() {
2530
+ return {
2531
+ /**
2532
+ * Checks if the event contains a specific action type.
2533
+ * @param action - The action type to check for.
2534
+ */
2535
+ hasAction: (action) => defineConditional({
2536
+ type: "object",
2537
+ properties: {
2538
+ $event: {
2539
+ type: "object",
2540
+ properties: {
2541
+ actions: {
2542
+ type: "array",
2543
+ contains: {
2544
+ type: "object",
2545
+ properties: {
2546
+ type: {
2547
+ const: action
2548
+ }
2549
+ },
2550
+ required: ["type"]
2551
+ }
2552
+ }
2553
+ },
2554
+ required: ["actions"]
2555
+ }
2556
+ },
2557
+ required: ["$event"]
2558
+ })
2559
+ };
2560
+ }
2561
+ function getDateFromNow(days) {
2562
+ return new Date(Date.now() - days * 24 * 60 * 60 * 1e3).toISOString().split("T")[0];
2563
+ }
2564
+ function getDateRangeToFieldReference(fieldId, comparedFieldId, clause) {
2565
+ return {
2310
2566
  type: "object",
2311
2567
  properties: {
2312
- $event: {
2313
- type: "object",
2314
- properties: {
2315
- actions: {
2316
- type: "array",
2317
- contains: {
2318
- type: "object",
2319
- properties: {
2320
- type: {
2321
- const: action
2322
- }
2323
- },
2324
- required: ["type"]
2325
- }
2326
- }
2327
- },
2328
- required: ["actions"]
2329
- }
2568
+ [fieldId]: {
2569
+ type: "string",
2570
+ format: "date",
2571
+ [clause]: { $data: `1/${comparedFieldId}` }
2572
+ },
2573
+ [comparedFieldId]: { type: "string", format: "date" }
2330
2574
  },
2331
- required: ["$event"]
2332
- })
2333
- };
2334
- function field(fieldId) {
2335
- const getDateFromNow = (days) => new Date(Date.now() - days * 24 * 60 * 60 * 1e3).toISOString().split("T")[0];
2575
+ required: [fieldId]
2576
+ };
2577
+ }
2578
+ function isFieldReference(value) {
2579
+ return typeof value === "object" && value !== null && "_fieldId" in value;
2580
+ }
2581
+ function createFieldConditionals(fieldId) {
2336
2582
  const getDateRange = (date, clause) => ({
2337
2583
  type: "object",
2338
2584
  properties: {
2339
- $form: {
2340
- type: "object",
2341
- properties: {
2342
- [fieldId]: {
2343
- type: "string",
2344
- format: "date",
2345
- [clause]: date
2346
- }
2347
- },
2348
- required: [fieldId]
2585
+ [fieldId]: {
2586
+ type: "string",
2587
+ format: "date",
2588
+ [clause]: date
2349
2589
  }
2350
2590
  },
2351
- required: ["$form"]
2591
+ required: [fieldId]
2352
2592
  });
2353
2593
  return {
2354
2594
  isAfter: () => ({
2355
2595
  days: (days) => ({
2356
- inPast: () => defineConditional(
2596
+ inPast: () => defineFormConditional(
2357
2597
  getDateRange(getDateFromNow(days), "formatMinimum")
2358
2598
  ),
2359
- inFuture: () => defineConditional(
2599
+ inFuture: () => defineFormConditional(
2360
2600
  getDateRange(getDateFromNow(-days), "formatMinimum")
2361
2601
  )
2362
2602
  }),
2363
- date: (date) => defineConditional(getDateRange(date, "formatMinimum")),
2364
- now: () => defineConditional(getDateRange(getDateFromNow(0), "formatMinimum"))
2603
+ date: (date) => {
2604
+ if (isFieldReference(date)) {
2605
+ const comparedFieldId = date._fieldId;
2606
+ return defineFormConditional(
2607
+ getDateRangeToFieldReference(
2608
+ fieldId,
2609
+ comparedFieldId,
2610
+ "formatMinimum"
2611
+ )
2612
+ );
2613
+ }
2614
+ return defineFormConditional(getDateRange(date, "formatMinimum"));
2615
+ },
2616
+ now: () => defineFormConditional(getDateRange(getDateFromNow(0), "formatMinimum"))
2365
2617
  }),
2366
2618
  isBefore: () => ({
2367
2619
  days: (days) => ({
2368
- inPast: () => defineConditional(
2620
+ inPast: () => defineFormConditional(
2369
2621
  getDateRange(getDateFromNow(days), "formatMaximum")
2370
2622
  ),
2371
- inFuture: () => defineConditional(
2623
+ inFuture: () => defineFormConditional(
2372
2624
  getDateRange(getDateFromNow(-days), "formatMaximum")
2373
2625
  )
2374
2626
  }),
2375
- date: (date) => defineConditional(getDateRange(date, "formatMaximum")),
2376
- now: () => defineConditional(getDateRange(getDateFromNow(0), "formatMaximum"))
2627
+ date: (date) => {
2628
+ if (isFieldReference(date)) {
2629
+ const comparedFieldId = date._fieldId;
2630
+ return defineFormConditional(
2631
+ getDateRangeToFieldReference(
2632
+ fieldId,
2633
+ comparedFieldId,
2634
+ "formatMaximum"
2635
+ )
2636
+ );
2637
+ }
2638
+ return defineFormConditional(getDateRange(date, "formatMaximum"));
2639
+ },
2640
+ now: () => defineFormConditional(getDateRange(getDateFromNow(0), "formatMaximum"))
2377
2641
  }),
2378
- isEqualTo: (value) => defineConditional({
2379
- type: "object",
2380
- properties: {
2381
- $form: {
2642
+ isEqualTo: (value) => {
2643
+ if (isFieldReference(value)) {
2644
+ const comparedFieldId = value._fieldId;
2645
+ return defineFormConditional({
2382
2646
  type: "object",
2383
2647
  properties: {
2384
2648
  [fieldId]: {
2385
- oneOf: [
2386
- { type: "string", const: value },
2387
- { type: "boolean", const: value }
2388
- ],
2389
- const: value
2390
- }
2649
+ type: ["string", "boolean"],
2650
+ const: { $data: `1/${comparedFieldId}` }
2651
+ },
2652
+ [comparedFieldId]: { type: ["string", "boolean"] }
2391
2653
  },
2392
- required: [fieldId]
2393
- }
2394
- },
2395
- required: ["$form"]
2396
- }),
2654
+ required: [fieldId, comparedFieldId]
2655
+ });
2656
+ }
2657
+ return defineFormConditional({
2658
+ type: "object",
2659
+ properties: {
2660
+ [fieldId]: {
2661
+ oneOf: [
2662
+ { type: "string", const: value },
2663
+ { type: "boolean", const: value }
2664
+ ],
2665
+ const: value
2666
+ }
2667
+ },
2668
+ required: [fieldId]
2669
+ });
2670
+ },
2397
2671
  /**
2398
2672
  * Use case: Some fields are rendered when selection is not made, or boolean false is explicitly selected.
2399
2673
  * @example field('recommender.none').isFalsy() vs not(field('recommender.none').isEqualTo(true))
@@ -2402,108 +2676,166 @@ function field(fieldId) {
2402
2676
  * NOTE: For now, this only works with string, boolean, and null types. 0 is still allowed.
2403
2677
  *
2404
2678
  */
2405
- isFalsy: () => defineConditional({
2679
+ isFalsy: () => defineFormConditional({
2406
2680
  type: "object",
2407
2681
  properties: {
2408
- $form: {
2409
- type: "object",
2410
- properties: {
2411
- [fieldId]: {
2412
- anyOf: [
2413
- { const: "undefined" },
2414
- { const: false },
2415
- { const: null },
2416
- { const: "" }
2417
- ]
2418
- }
2419
- },
2682
+ [fieldId]: {
2420
2683
  anyOf: [
2421
- {
2422
- required: [fieldId]
2423
- },
2424
- {
2425
- not: {
2426
- required: [fieldId]
2427
- }
2428
- }
2684
+ { const: "undefined" },
2685
+ { const: false },
2686
+ { const: null },
2687
+ { const: "" }
2429
2688
  ]
2430
2689
  }
2431
2690
  },
2432
- required: ["$form"]
2433
- }),
2434
- isUndefined: () => defineConditional({
2435
- type: "object",
2436
- properties: {
2437
- $form: {
2438
- type: "object",
2439
- properties: {
2440
- [fieldId]: {
2441
- type: "string",
2442
- enum: ["undefined"]
2443
- }
2444
- },
2691
+ anyOf: [
2692
+ {
2693
+ required: [fieldId]
2694
+ },
2695
+ {
2445
2696
  not: {
2446
2697
  required: [fieldId]
2447
2698
  }
2448
2699
  }
2700
+ ]
2701
+ }),
2702
+ isUndefined: () => defineFormConditional({
2703
+ type: "object",
2704
+ properties: {
2705
+ [fieldId]: {
2706
+ type: "string",
2707
+ enum: ["undefined"]
2708
+ }
2449
2709
  },
2450
- required: ["$form"]
2710
+ not: {
2711
+ required: [fieldId]
2712
+ }
2451
2713
  }),
2452
- inArray: (values) => defineConditional({
2714
+ inArray: (values) => defineFormConditional({
2453
2715
  type: "object",
2454
2716
  properties: {
2455
- $form: {
2456
- type: "object",
2457
- properties: {
2458
- [fieldId]: {
2459
- type: "string",
2460
- enum: values
2461
- }
2462
- },
2463
- required: [fieldId]
2717
+ [fieldId]: {
2718
+ type: "string",
2719
+ enum: values
2464
2720
  }
2465
2721
  },
2466
- required: ["$form"]
2722
+ required: [fieldId]
2467
2723
  }),
2468
- isValidEnglishName: () => defineConditional({
2724
+ isValidEnglishName: () => defineFormConditional({
2469
2725
  type: "object",
2470
2726
  properties: {
2471
- $form: {
2472
- type: "object",
2473
- properties: {
2474
- [fieldId]: {
2475
- type: "string",
2476
- pattern: "^[\\p{Script=Latin}0-9'._-]*(\\([\\p{Script=Latin}0-9'._-]+\\))?[\\p{Script=Latin}0-9'._-]*( [\\p{Script=Latin}0-9'._-]*(\\([\\p{Script=Latin}0-9'._-]+\\))?[\\p{Script=Latin}0-9'._-]*)*$",
2477
- description: "Name must contain only letters, numbers, and allowed special characters ('._-). No double spaces."
2478
- }
2479
- },
2480
- required: [fieldId]
2727
+ [fieldId]: {
2728
+ type: "string",
2729
+ pattern: "^[\\p{Script=Latin}0-9'._-]*(\\([\\p{Script=Latin}0-9'._-]+\\))?[\\p{Script=Latin}0-9'._-]*( [\\p{Script=Latin}0-9'._-]*(\\([\\p{Script=Latin}0-9'._-]+\\))?[\\p{Script=Latin}0-9'._-]*)*$",
2730
+ description: "Name must contain only letters, numbers, and allowed special characters ('._-). No double spaces."
2731
+ }
2732
+ },
2733
+ required: [fieldId]
2734
+ }),
2735
+ /**
2736
+ * Checks if the field value matches a given regular expression pattern.
2737
+ * @param pattern - The regular expression pattern to match the field value against.
2738
+ * @returns A JSONSchema conditional that validates the field value against the pattern.
2739
+ */
2740
+ matches: (pattern) => defineFormConditional({
2741
+ type: "object",
2742
+ properties: {
2743
+ [fieldId]: {
2744
+ type: "string",
2745
+ pattern
2746
+ }
2747
+ },
2748
+ required: [fieldId]
2749
+ }),
2750
+ isBetween: (min, max) => defineFormConditional({
2751
+ type: "object",
2752
+ properties: {
2753
+ [fieldId]: {
2754
+ type: "number",
2755
+ minimum: min,
2756
+ maximum: max
2481
2757
  }
2482
2758
  },
2483
- required: ["$form"]
2759
+ required: [fieldId]
2760
+ }),
2761
+ getId: () => ({ fieldId })
2762
+ };
2763
+ }
2764
+
2765
+ // ../commons/src/field-config/field-configuration.ts
2766
+ function createFieldConfigs(fieldId) {
2767
+ const baseField = {
2768
+ fieldId,
2769
+ fieldType: "field"
2770
+ };
2771
+ return {
2772
+ /**
2773
+ * Creates a range configuration for the specified field.
2774
+ *
2775
+ * @returns An object containing the field ID and a configuration object with a type of 'RANGE'.
2776
+ *
2777
+ * @example field('age').range()
2778
+ * // {
2779
+ * // fieldId: 'age',
2780
+ * // config: { type: 'RANGE' }
2781
+ * // }
2782
+ */
2783
+ range: () => ({
2784
+ ...baseField,
2785
+ config: { type: "RANGE" }
2786
+ }),
2787
+ /**
2788
+ * Creates a configuration for exact matching of the specified field.
2789
+ * @returns An object containing the field ID and a configuration object with a type of 'EXACT'.
2790
+ * @example field('dob').exact()
2791
+ * // {
2792
+ * // fieldId: 'dob',
2793
+ * // config: { type: 'EXACT' }
2794
+ * // }
2795
+ */
2796
+ exact: () => ({
2797
+ ...baseField,
2798
+ config: { type: "EXACT" }
2799
+ }),
2800
+ /**
2801
+ * Creates a configuration for fuzzy matching of the specified field.
2802
+ * @returns An object containing the field ID and a configuration object with a type of 'EXACT'.
2803
+ * @example field('name').fuzzy()
2804
+ * // {
2805
+ * // fieldId: 'name',
2806
+ * // config: { type: 'FUZZY' }
2807
+ * // }
2808
+ */
2809
+ fuzzy: () => ({
2810
+ ...baseField,
2811
+ config: { type: "FUZZY" }
2484
2812
  })
2485
2813
  };
2486
2814
  }
2487
2815
 
2816
+ // ../commons/src/events/field.ts
2817
+ function field(fieldId) {
2818
+ return {
2819
+ /**
2820
+ * @private Internal property used for field reference tracking.
2821
+ */
2822
+ _fieldId: fieldId,
2823
+ ...createFieldConditionals(fieldId),
2824
+ ...createFieldConfigs(fieldId)
2825
+ };
2826
+ }
2827
+
2488
2828
  // ../commons/src/fixtures/tennis-club-membership-event.ts
2489
- var PRINT_CERTIFICATE_FORM = defineForm({
2829
+ var PRINT_CERTIFICATE_FORM = defineActionForm({
2490
2830
  label: {
2491
2831
  id: "v2.event.tennis-club-membership.action.certificate.form.label",
2492
2832
  defaultMessage: "Tennis club membership certificate collector",
2493
2833
  description: "This is what this form is referred as in the system"
2494
2834
  },
2495
- version: {
2496
- id: "1.0.0",
2497
- label: {
2498
- id: "v2.event.tennis-club-membership.action.certificate.form.version.1",
2499
- defaultMessage: "Version 1",
2500
- description: "This is the first version of the form"
2501
- }
2502
- },
2503
- active: true,
2504
2835
  pages: [
2505
2836
  {
2506
2837
  id: "collector",
2838
+ type: PageTypes.enum.FORM,
2507
2839
  title: {
2508
2840
  id: "v2.event.tennis-club-membership.action.certificate.form.section.who.title",
2509
2841
  defaultMessage: "Print certified copy",
@@ -2518,7 +2850,7 @@ var PRINT_CERTIFICATE_FORM = defineForm({
2518
2850
  defaultMessage: "Requester",
2519
2851
  description: "This is the label for the field"
2520
2852
  },
2521
- type: "SELECT",
2853
+ type: FieldType.SELECT,
2522
2854
  options: [
2523
2855
  {
2524
2856
  value: "INFORMANT",
@@ -2595,7 +2927,7 @@ var PRINT_CERTIFICATE_FORM = defineForm({
2595
2927
  defaultMessage: "Select Type of ID",
2596
2928
  description: "This is the label for selecting the type of ID"
2597
2929
  },
2598
- type: "SELECT",
2930
+ type: FieldType.SELECT,
2599
2931
  options: [
2600
2932
  {
2601
2933
  value: "PASSPORT",
@@ -2696,7 +3028,7 @@ var PRINT_CERTIFICATE_FORM = defineForm({
2696
3028
  defaultMessage: "Passport Details",
2697
3029
  description: "Field for entering Passport details"
2698
3030
  },
2699
- type: "TEXT"
3031
+ type: FieldType.TEXT
2700
3032
  },
2701
3033
  {
2702
3034
  id: "collector.DRIVING_LICENSE.details",
@@ -2747,7 +3079,7 @@ var PRINT_CERTIFICATE_FORM = defineForm({
2747
3079
  defaultMessage: "Driving License Details",
2748
3080
  description: "Field for entering Driving License details"
2749
3081
  },
2750
- type: "TEXT"
3082
+ type: FieldType.TEXT
2751
3083
  },
2752
3084
  {
2753
3085
  id: "collector.REFUGEE_NUMBER.details",
@@ -2798,7 +3130,7 @@ var PRINT_CERTIFICATE_FORM = defineForm({
2798
3130
  defaultMessage: "Refugee Number Details",
2799
3131
  description: "Field for entering Refugee Number details"
2800
3132
  },
2801
- type: "TEXT"
3133
+ type: FieldType.TEXT
2802
3134
  },
2803
3135
  {
2804
3136
  id: "collector.ALIEN_NUMBER.details",
@@ -2849,7 +3181,7 @@ var PRINT_CERTIFICATE_FORM = defineForm({
2849
3181
  defaultMessage: "Alien Number Details",
2850
3182
  description: "Field for entering Alien Number details"
2851
3183
  },
2852
- type: "TEXT"
3184
+ type: FieldType.TEXT
2853
3185
  },
2854
3186
  {
2855
3187
  id: "collector.OTHER.idTypeOther",
@@ -2900,7 +3232,7 @@ var PRINT_CERTIFICATE_FORM = defineForm({
2900
3232
  defaultMessage: "Other ID Type (if applicable)",
2901
3233
  description: 'Field for entering ID type if "Other" is selected'
2902
3234
  },
2903
- type: "TEXT"
3235
+ type: FieldType.TEXT
2904
3236
  },
2905
3237
  {
2906
3238
  id: "collector.OTHER.firstName",
@@ -2951,7 +3283,7 @@ var PRINT_CERTIFICATE_FORM = defineForm({
2951
3283
  defaultMessage: "First Name",
2952
3284
  description: "This is the label for the first name field"
2953
3285
  },
2954
- type: "TEXT"
3286
+ type: FieldType.TEXT
2955
3287
  },
2956
3288
  {
2957
3289
  id: "collector.OTHER.lastName",
@@ -3002,7 +3334,7 @@ var PRINT_CERTIFICATE_FORM = defineForm({
3002
3334
  defaultMessage: "Last Name",
3003
3335
  description: "This is the label for the last name field"
3004
3336
  },
3005
- type: "TEXT"
3337
+ type: FieldType.TEXT
3006
3338
  },
3007
3339
  {
3008
3340
  id: "collector.OTHER.relationshipToMember",
@@ -3053,7 +3385,7 @@ var PRINT_CERTIFICATE_FORM = defineForm({
3053
3385
  defaultMessage: "Relationship to Member",
3054
3386
  description: "This is the label for the relationship to member field"
3055
3387
  },
3056
- type: "TEXT"
3388
+ type: FieldType.TEXT
3057
3389
  },
3058
3390
  {
3059
3391
  id: "collector.OTHER.signedAffidavit",
@@ -3104,13 +3436,13 @@ var PRINT_CERTIFICATE_FORM = defineForm({
3104
3436
  defaultMessage: "Signed Affidavit (Optional)",
3105
3437
  description: "This is the label for uploading a signed affidavit"
3106
3438
  },
3107
- type: "FILE"
3439
+ type: FieldType.FILE
3108
3440
  }
3109
3441
  ]
3110
3442
  },
3111
3443
  {
3112
3444
  id: "collector.identity.verify",
3113
- type: FormPageType.VERIFICATION,
3445
+ type: PageTypes.enum.VERIFICATION,
3114
3446
  conditional: field("collector.requesterId").isEqualTo("INFORMANT"),
3115
3447
  title: {
3116
3448
  id: "event.tennis-club-membership.action.print.verifyIdentity",
@@ -3147,62 +3479,45 @@ var PRINT_CERTIFICATE_FORM = defineForm({
3147
3479
  }
3148
3480
  }
3149
3481
  }
3150
- ],
3151
- review: {
3152
- title: {
3153
- id: "v2.event.tennis-club-membership.action.certificate.form.review.title",
3154
- defaultMessage: "Member certificate collector for {firstname} {surname}",
3155
- description: "Title of the form to show in review page"
3156
- },
3157
- fields: []
3158
- }
3482
+ ]
3159
3483
  });
3160
- var TENNIS_CLUB_FORM = defineForm({
3161
- label: {
3162
- id: "v2.event.tennis-club-membership.action.declare.form.label",
3163
- defaultMessage: "Tennis club membership application",
3164
- description: "This is what this form is referred as in the system"
3165
- },
3166
- active: true,
3167
- version: {
3168
- id: "1.0.0",
3169
- label: {
3170
- id: "v2.event.tennis-club-membership.action.declare.form.version.1",
3171
- defaultMessage: "Version 1",
3172
- description: "This is the first version of the form"
3173
- }
3484
+ var TENNIS_CLUB_DECLARATION_REVIEW = {
3485
+ title: {
3486
+ id: "v2.event.tennis-club-membership.action.declare.form.review.title",
3487
+ defaultMessage: "{applicant.firstname, select, __EMPTY__ {Member declaration} other {{applicant.surname, select, __EMPTY__ {Member declaration} other {Member declaration for {applicant.firstname} {applicant.surname}}}}}",
3488
+ description: "Title of the review page"
3174
3489
  },
3175
- review: {
3176
- title: {
3177
- id: "v2.event.tennis-club-membership.action.declare.form.review.title",
3178
- defaultMessage: "{applicant.firstname, select, __EMPTY__ {Member declaration} other {{applicant.surname, select, __EMPTY__ {Member declaration} other {Member declaration for {applicant.firstname} {applicant.surname}}}}}",
3179
- description: "Title of the form to show in review page"
3490
+ fields: [
3491
+ {
3492
+ id: "review.comment",
3493
+ type: FieldType.TEXTAREA,
3494
+ label: {
3495
+ defaultMessage: "Comment",
3496
+ id: "v2.event.birth.action.declare.form.review.comment.label",
3497
+ description: "Label for the comment field in the review section"
3498
+ }
3180
3499
  },
3181
- fields: [
3182
- {
3183
- id: "review.comment",
3184
- type: "TEXTAREA",
3185
- label: {
3186
- defaultMessage: "Comment",
3187
- id: "v2.event.birth.action.declare.form.review.comment.label",
3188
- description: "Label for the comment field in the review section"
3189
- }
3500
+ {
3501
+ type: FieldType.SIGNATURE,
3502
+ id: "review.signature",
3503
+ label: {
3504
+ defaultMessage: "Signature of informant",
3505
+ id: "v2.event.birth.action.declare.form.review.signature.label",
3506
+ description: "Label for the signature field in the review section"
3190
3507
  },
3191
- {
3192
- type: "SIGNATURE",
3193
- id: "review.signature",
3194
- label: {
3195
- defaultMessage: "Signature of informant",
3196
- id: "v2.event.birth.action.declare.form.review.signature.label",
3197
- description: "Label for the signature field in the review section"
3198
- },
3199
- signaturePromptLabel: {
3200
- id: "v2.signature.upload.modal.title",
3201
- defaultMessage: "Draw signature",
3202
- description: "Title for the modal to draw signature"
3203
- }
3508
+ signaturePromptLabel: {
3509
+ id: "v2.signature.upload.modal.title",
3510
+ defaultMessage: "Draw signature",
3511
+ description: "Title for the modal to draw signature"
3204
3512
  }
3205
- ]
3513
+ }
3514
+ ]
3515
+ };
3516
+ var TENNIS_CLUB_DECLARATION_FORM = defineDeclarationForm({
3517
+ label: {
3518
+ id: "v2.event.tennis-club-membership.action.declare.form.label",
3519
+ defaultMessage: "Tennis club membership application",
3520
+ description: "This is what this form is referred as in the system"
3206
3521
  },
3207
3522
  pages: [
3208
3523
  {
@@ -3215,7 +3530,7 @@ var TENNIS_CLUB_FORM = defineForm({
3215
3530
  fields: [
3216
3531
  {
3217
3532
  id: "applicant.firstname",
3218
- type: "TEXT",
3533
+ type: FieldType.TEXT,
3219
3534
  required: true,
3220
3535
  conditionals: [],
3221
3536
  label: {
@@ -3226,7 +3541,7 @@ var TENNIS_CLUB_FORM = defineForm({
3226
3541
  },
3227
3542
  {
3228
3543
  id: "applicant.surname",
3229
- type: "TEXT",
3544
+ type: FieldType.TEXT,
3230
3545
  required: true,
3231
3546
  conditionals: [],
3232
3547
  label: {
@@ -3248,9 +3563,8 @@ var TENNIS_CLUB_FORM = defineForm({
3248
3563
  },
3249
3564
  {
3250
3565
  id: "applicant.dob",
3251
- type: "DATE",
3566
+ type: FieldType.DATE,
3252
3567
  required: true,
3253
- conditionals: [],
3254
3568
  validation: [
3255
3569
  {
3256
3570
  message: {
@@ -3261,15 +3575,53 @@ var TENNIS_CLUB_FORM = defineForm({
3261
3575
  validator: field("applicant.dob").isBefore().now()
3262
3576
  }
3263
3577
  ],
3578
+ conditionals: [
3579
+ {
3580
+ type: ConditionalType.SHOW,
3581
+ conditional: field("applicant.dobUnknown").isFalsy()
3582
+ }
3583
+ ],
3264
3584
  label: {
3265
3585
  defaultMessage: "Applicant's date of birth",
3266
3586
  description: "This is the label for the field",
3267
3587
  id: "v2.event.tennis-club-membership.action.declare.form.section.who.field.dob.label"
3268
3588
  }
3269
3589
  },
3590
+ {
3591
+ id: "applicant.dobUnknown",
3592
+ type: FieldType.CHECKBOX,
3593
+ required: false,
3594
+ label: {
3595
+ defaultMessage: "Exact date of birth unknown",
3596
+ description: "This is the label for the field",
3597
+ id: "v2.event.tennis-club-membership.action.declare.form.section.who.field.dobUnknown.label"
3598
+ },
3599
+ conditionals: [
3600
+ {
3601
+ type: ConditionalType.DISPLAY_ON_REVIEW,
3602
+ conditional: never()
3603
+ }
3604
+ ]
3605
+ },
3606
+ {
3607
+ id: "applicant.age",
3608
+ type: FieldType.NUMBER,
3609
+ required: true,
3610
+ label: {
3611
+ defaultMessage: "Age of tennis-member",
3612
+ description: "This is the label for the field",
3613
+ id: "v2.event.tennis-club-membership.action.declare.form.section.who.field.age.label"
3614
+ },
3615
+ conditionals: [
3616
+ {
3617
+ type: ConditionalType.SHOW,
3618
+ conditional: field("applicant.dobUnknown").isEqualTo(true)
3619
+ }
3620
+ ]
3621
+ },
3270
3622
  {
3271
3623
  id: "applicant.image",
3272
- type: "FILE",
3624
+ type: FieldType.FILE,
3273
3625
  required: false,
3274
3626
  label: {
3275
3627
  defaultMessage: "Applicant's profile picture",
@@ -3301,7 +3653,7 @@ var TENNIS_CLUB_FORM = defineForm({
3301
3653
  fields: [
3302
3654
  {
3303
3655
  id: "senior-pass.id",
3304
- type: "TEXT",
3656
+ type: FieldType.TEXT,
3305
3657
  required: true,
3306
3658
  label: {
3307
3659
  defaultMessage: "Senior pass ID",
@@ -3332,7 +3684,7 @@ var TENNIS_CLUB_FORM = defineForm({
3332
3684
  },
3333
3685
  {
3334
3686
  id: "recommender.firstname",
3335
- type: "TEXT",
3687
+ type: FieldType.TEXT,
3336
3688
  required: true,
3337
3689
  conditionals: [
3338
3690
  {
@@ -3348,7 +3700,7 @@ var TENNIS_CLUB_FORM = defineForm({
3348
3700
  },
3349
3701
  {
3350
3702
  id: "recommender.surname",
3351
- type: "TEXT",
3703
+ type: FieldType.TEXT,
3352
3704
  required: true,
3353
3705
  conditionals: [
3354
3706
  {
@@ -3364,7 +3716,7 @@ var TENNIS_CLUB_FORM = defineForm({
3364
3716
  },
3365
3717
  {
3366
3718
  id: "recommender.id",
3367
- type: "TEXT",
3719
+ type: FieldType.TEXT,
3368
3720
  required: true,
3369
3721
  conditionals: [
3370
3722
  {
@@ -3389,20 +3741,12 @@ var tennisClubMembershipEvent = defineConfig({
3389
3741
  description: "This is what this event is referred as in the system",
3390
3742
  id: "event.tennis-club-membership.label"
3391
3743
  },
3744
+ title: {
3745
+ defaultMessage: "{applicant.firstname} {applicant.surname}",
3746
+ description: "This is the title of the summary",
3747
+ id: "v2.event.tennis-club-membership.title"
3748
+ },
3392
3749
  summary: {
3393
- title: {
3394
- id: "event.tennis-club-membership.summary.title",
3395
- label: {
3396
- defaultMessage: "{applicant.firstname} {applicant.surname}",
3397
- description: "This is the title of the summary",
3398
- id: "v2.event.tennis-club-membership.summary.title"
3399
- },
3400
- emptyValueMessage: {
3401
- defaultMessage: "Membership application",
3402
- description: "This is the message shown when the applicant name is missing",
3403
- id: "event.tennis-club-membership.summary.title.empty"
3404
- }
3405
- },
3406
3750
  fields: [
3407
3751
  {
3408
3752
  id: "applicant.firstname",
@@ -3442,28 +3786,6 @@ var tennisClubMembershipEvent = defineConfig({
3442
3786
  }
3443
3787
  ]
3444
3788
  },
3445
- workqueues: [
3446
- {
3447
- id: "all",
3448
- filters: []
3449
- },
3450
- {
3451
- id: "ready-for-review",
3452
- filters: [
3453
- {
3454
- status: ["DECLARED"]
3455
- }
3456
- ]
3457
- },
3458
- {
3459
- id: "registered",
3460
- filters: [
3461
- {
3462
- status: ["REGISTERED"]
3463
- }
3464
- ]
3465
- }
3466
- ],
3467
3789
  actions: [
3468
3790
  {
3469
3791
  type: ActionType.DECLARE,
@@ -3472,7 +3794,7 @@ var tennisClubMembershipEvent = defineConfig({
3472
3794
  description: "This is shown as the action name anywhere the user can trigger the action from",
3473
3795
  id: "event.tennis-club-membership.action.declare.label"
3474
3796
  },
3475
- forms: [TENNIS_CLUB_FORM]
3797
+ review: TENNIS_CLUB_DECLARATION_REVIEW
3476
3798
  },
3477
3799
  {
3478
3800
  type: ActionType.VALIDATE,
@@ -3481,7 +3803,7 @@ var tennisClubMembershipEvent = defineConfig({
3481
3803
  description: "This is shown as the action name anywhere the user can trigger the action from",
3482
3804
  id: "event.tennis-club-membership.action.validate.label"
3483
3805
  },
3484
- forms: [TENNIS_CLUB_FORM]
3806
+ review: TENNIS_CLUB_DECLARATION_REVIEW
3485
3807
  },
3486
3808
  {
3487
3809
  type: ActionType.REGISTER,
@@ -3490,7 +3812,7 @@ var tennisClubMembershipEvent = defineConfig({
3490
3812
  description: "This is shown as the action name anywhere the user can trigger the action from",
3491
3813
  id: "event.tennis-club-membership.action.register.label"
3492
3814
  },
3493
- forms: [TENNIS_CLUB_FORM]
3815
+ review: TENNIS_CLUB_DECLARATION_REVIEW
3494
3816
  },
3495
3817
  {
3496
3818
  type: ActionType.REQUEST_CORRECTION,
@@ -3499,10 +3821,10 @@ var tennisClubMembershipEvent = defineConfig({
3499
3821
  description: "This is shown as the action name anywhere the user can trigger the action from",
3500
3822
  id: "event.tennis-club-membership.action.correction.request.label"
3501
3823
  },
3502
- forms: [TENNIS_CLUB_FORM],
3503
3824
  onboardingForm: [
3504
3825
  {
3505
3826
  id: "correction-requester",
3827
+ type: PageTypes.enum.FORM,
3506
3828
  title: {
3507
3829
  id: "event.tennis-club-membership.action.requestCorrection.form.section.corrector",
3508
3830
  defaultMessage: "Correction requester",
@@ -3566,6 +3888,7 @@ var tennisClubMembershipEvent = defineConfig({
3566
3888
  },
3567
3889
  {
3568
3890
  id: "identity-check",
3891
+ type: PageTypes.enum.FORM,
3569
3892
  title: {
3570
3893
  id: "event.tennis-club-membership.action.requestCorrection.form.section.verify",
3571
3894
  defaultMessage: "Verify their identity",
@@ -3608,6 +3931,7 @@ var tennisClubMembershipEvent = defineConfig({
3608
3931
  additionalDetailsForm: [
3609
3932
  {
3610
3933
  id: "correction-request.supporting-documents",
3934
+ type: PageTypes.enum.FORM,
3611
3935
  title: {
3612
3936
  id: "event.tennis-club-membership.action.requestCorrection.form.section.verify",
3613
3937
  defaultMessage: "Upload supporting documents",
@@ -3625,7 +3949,7 @@ var tennisClubMembershipEvent = defineConfig({
3625
3949
  },
3626
3950
  {
3627
3951
  id: "correction.supportingDocs",
3628
- type: "FILE",
3952
+ type: FieldType.FILE,
3629
3953
  label: {
3630
3954
  id: "correction.corrector.title",
3631
3955
  defaultMessage: "Upload supporting documents",
@@ -3669,6 +3993,7 @@ var tennisClubMembershipEvent = defineConfig({
3669
3993
  },
3670
3994
  {
3671
3995
  id: "correction-request.additional-details",
3996
+ type: PageTypes.enum.FORM,
3672
3997
  title: {
3673
3998
  id: "event.tennis-club-membership.action.requestCorrection.form.section.corrector",
3674
3999
  defaultMessage: "Reason for correction",
@@ -3677,7 +4002,7 @@ var tennisClubMembershipEvent = defineConfig({
3677
4002
  fields: [
3678
4003
  {
3679
4004
  id: "correction.request.reason",
3680
- type: "TEXT",
4005
+ type: FieldType.TEXT,
3681
4006
  label: {
3682
4007
  id: "correction.reason.title",
3683
4008
  defaultMessage: "Reason for correction?",
@@ -3690,7 +4015,6 @@ var tennisClubMembershipEvent = defineConfig({
3690
4015
  },
3691
4016
  {
3692
4017
  type: ActionType.APPROVE_CORRECTION,
3693
- forms: [TENNIS_CLUB_FORM],
3694
4018
  label: {
3695
4019
  defaultMessage: "Approve correction",
3696
4020
  description: "This is shown as the action name anywhere the user can trigger the action from",
@@ -3704,7 +4028,7 @@ var tennisClubMembershipEvent = defineConfig({
3704
4028
  defaultMessage: "Print certificate",
3705
4029
  description: "This is shown as the action name anywhere the user can trigger the action from"
3706
4030
  },
3707
- forms: [PRINT_CERTIFICATE_FORM],
4031
+ printForm: PRINT_CERTIFICATE_FORM,
3708
4032
  conditionals: [
3709
4033
  {
3710
4034
  type: "SHOW",
@@ -3751,8 +4075,7 @@ var tennisClubMembershipEvent = defineConfig({
3751
4075
  id: "v2.event.tennis-club-membership.action.archive.label",
3752
4076
  defaultMessage: "Archive",
3753
4077
  description: "This is shown as the action name anywhere the user can trigger the action from"
3754
- },
3755
- forms: [TENNIS_CLUB_FORM]
4078
+ }
3756
4079
  },
3757
4080
  {
3758
4081
  type: ActionType.REJECT,
@@ -3760,8 +4083,7 @@ var tennisClubMembershipEvent = defineConfig({
3760
4083
  id: "v2.event.tennis-club-membership.action.reject.label",
3761
4084
  defaultMessage: "Reject",
3762
4085
  description: "This is shown as the action name anywhere the user can trigger the action from"
3763
- },
3764
- forms: [TENNIS_CLUB_FORM]
4086
+ }
3765
4087
  }
3766
4088
  ],
3767
4089
  advancedSearch: [
@@ -3771,39 +4093,55 @@ var tennisClubMembershipEvent = defineConfig({
3771
4093
  description: "This is what this event is referred as in the system",
3772
4094
  id: "v2.event.tennis-club-membership.search"
3773
4095
  },
3774
- fields: [
3775
- {
3776
- fieldId: "applicant.dob"
3777
- }
3778
- ]
4096
+ fields: [field("applicant.dob").exact()]
3779
4097
  }
3780
- ]
4098
+ ],
4099
+ declaration: TENNIS_CLUB_DECLARATION_FORM
3781
4100
  });
3782
4101
 
3783
4102
  // ../commons/src/events/test.utils.ts
3784
- function generateActionInput(configuration, action) {
3785
- const fields = findActiveActionFormFields(configuration, action) ?? [];
3786
- const data = fields.reduce(
4103
+ function fieldConfigsToActionPayload(fields) {
4104
+ return fields.reduce(
3787
4105
  (acc, field2, i) => ({
3788
4106
  ...acc,
3789
4107
  [field2.id]: mapFieldTypeToMockValue(field2, i)
3790
4108
  }),
3791
4109
  {}
3792
4110
  );
3793
- return stripHiddenFields(fields, data);
3794
- }
3795
- function generateActionMetadataInput(configuration, action) {
3796
- const visibleVerificationPageIds = getActiveActionFormPages(
3797
- configuration,
3798
- action
3799
- ).filter((page) => isVerificationPage(page)).filter((page) => isPageVisible(page, {})).map((page) => page.id);
3800
- return visibleVerificationPageIds.reduce(
4111
+ }
4112
+ function generateActionDeclarationInput(configuration, action) {
4113
+ const parsed = DeclarationUpdateActions.safeParse(action);
4114
+ if (parsed.success) {
4115
+ const fields = getDeclarationFields(configuration);
4116
+ const declarationConfig = getDeclaration(configuration);
4117
+ const declaration = fieldConfigsToActionPayload(fields);
4118
+ return omitHiddenPaginatedFields(declarationConfig, declaration);
4119
+ }
4120
+ console.warn(`${action} is not a declaration action. Setting data as {}.`);
4121
+ return {};
4122
+ }
4123
+ function generateActionAnnotationInput(configuration, action) {
4124
+ const actionConfig = configuration.actions.find(
4125
+ (ac) => ac.type === action
4126
+ );
4127
+ const annotationFields = actionConfig ? getActionAnnotationFields(actionConfig) : [];
4128
+ const annotation = fieldConfigsToActionPayload(annotationFields);
4129
+ const visibleVerificationPageIds = getVisibleVerificationPageIds(
4130
+ findRecordActionPages(configuration, action),
4131
+ annotation
4132
+ );
4133
+ const visiblePageVerificationMap = visibleVerificationPageIds.reduce(
3801
4134
  (acc, pageId) => ({
3802
4135
  ...acc,
3803
4136
  [pageId]: true
3804
4137
  }),
3805
4138
  {}
3806
4139
  );
4140
+ const fieldBasedPayload = omitHiddenFields(annotationFields, annotation);
4141
+ return {
4142
+ ...fieldBasedPayload,
4143
+ ...visiblePageVerificationMap
4144
+ };
3807
4145
  }
3808
4146
  var eventPayloadGenerator = {
3809
4147
  create: (input = {}) => ({
@@ -3815,27 +4153,31 @@ var eventPayloadGenerator = {
3815
4153
  type: input.type ?? "TENNIS_CLUB_MEMBERSHIP",
3816
4154
  id
3817
4155
  }),
3818
- draft: (eventId, input = {}) => (0, import_lodash2.merge)(
4156
+ draft: ({ eventId, actionType }, input = {}) => (0, import_lodash2.merge)(
3819
4157
  {
3820
4158
  id: getUUID(),
3821
4159
  eventId,
3822
4160
  createdAt: (/* @__PURE__ */ new Date()).toISOString(),
3823
4161
  transactionId: getUUID(),
3824
4162
  action: {
3825
- type: ActionType.REQUEST_CORRECTION,
3826
- data: {
4163
+ transactionId: getUUID(),
4164
+ type: actionType,
4165
+ status: ActionStatus.Accepted,
4166
+ declaration: {
3827
4167
  "applicant.firstname": "Max",
3828
4168
  "applicant.surname": "McLaren",
3829
4169
  "applicant.dob": "2020-01-02",
3830
4170
  "recommender.none": true
3831
4171
  },
3832
- metadata: {
4172
+ annotation: {
3833
4173
  "correction.requester.relationship": "ANOTHER_AGENT",
3834
4174
  "correction.request.reason": "Child's name was incorrect"
3835
4175
  },
3836
4176
  createdAt: (/* @__PURE__ */ new Date()).toISOString(),
3837
4177
  createdBy: "@todo",
3838
- createdAtLocation: "@todo"
4178
+ createdByRole: "@todo",
4179
+ createdAtLocation: "@todo",
4180
+ updatedAtLocation: "@todo"
3839
4181
  }
3840
4182
  },
3841
4183
  input
@@ -3844,45 +4186,104 @@ var eventPayloadGenerator = {
3844
4186
  declare: (eventId, input = {}) => ({
3845
4187
  type: ActionType.DECLARE,
3846
4188
  transactionId: input.transactionId ?? getUUID(),
3847
- data: input.data ?? generateActionInput(tennisClubMembershipEvent, ActionType.DECLARE),
4189
+ declaration: input.declaration ?? generateActionDeclarationInput(
4190
+ tennisClubMembershipEvent,
4191
+ ActionType.DECLARE
4192
+ ),
4193
+ annotation: input.annotation ?? generateActionAnnotationInput(
4194
+ tennisClubMembershipEvent,
4195
+ ActionType.DECLARE
4196
+ ),
3848
4197
  eventId
3849
4198
  }),
4199
+ /**
4200
+ * Notify allows sending incomplete data. Think it as 'partial declare' for now.
4201
+ */
4202
+ notify: (eventId, input = {}) => {
4203
+ let declaration = input.declaration;
4204
+ if (!declaration) {
4205
+ const partialDeclaration = (0, import_lodash2.omitBy)(
4206
+ generateActionDeclarationInput(
4207
+ tennisClubMembershipEvent,
4208
+ ActionType.DECLARE
4209
+ ),
4210
+ import_lodash2.isString
4211
+ );
4212
+ declaration = partialDeclaration;
4213
+ }
4214
+ return {
4215
+ type: ActionType.NOTIFY,
4216
+ transactionId: input.transactionId ?? getUUID(),
4217
+ declaration,
4218
+ eventId
4219
+ };
4220
+ },
3850
4221
  validate: (eventId, input = {}) => ({
3851
4222
  type: ActionType.VALIDATE,
3852
4223
  transactionId: input.transactionId ?? getUUID(),
3853
- data: input.data ?? generateActionInput(tennisClubMembershipEvent, ActionType.VALIDATE),
4224
+ declaration: input.declaration ?? generateActionDeclarationInput(
4225
+ tennisClubMembershipEvent,
4226
+ ActionType.VALIDATE
4227
+ ),
4228
+ annotation: input.annotation ?? generateActionAnnotationInput(
4229
+ tennisClubMembershipEvent,
4230
+ ActionType.VALIDATE
4231
+ ),
3854
4232
  duplicates: [],
3855
4233
  eventId
3856
4234
  }),
4235
+ assign: (eventId, input = {}) => ({
4236
+ type: ActionType.ASSIGN,
4237
+ transactionId: input.transactionId ?? getUUID(),
4238
+ declaration: {},
4239
+ assignedTo: input.assignedTo ?? getUUID(),
4240
+ eventId
4241
+ }),
4242
+ unassign: (eventId, input = {}) => ({
4243
+ type: ActionType.UNASSIGN,
4244
+ transactionId: input.transactionId ?? getUUID(),
4245
+ declaration: {},
4246
+ assignedTo: null,
4247
+ eventId
4248
+ }),
3857
4249
  archive: (eventId, input = {}, isDuplicate) => ({
3858
4250
  type: ActionType.ARCHIVE,
3859
4251
  transactionId: input.transactionId ?? getUUID(),
3860
- data: input.data ?? generateActionInput(tennisClubMembershipEvent, ActionType.ARCHIVE),
3861
- metadata: { isDuplicate: isDuplicate ?? false },
4252
+ declaration: {},
4253
+ // @TODO: Check whether generator is needed?
4254
+ annotation: { isDuplicate: isDuplicate ?? false },
3862
4255
  duplicates: [],
3863
4256
  eventId
3864
4257
  }),
3865
4258
  reject: (eventId, input = {}) => ({
3866
4259
  type: ActionType.REJECT,
3867
4260
  transactionId: input.transactionId ?? getUUID(),
3868
- data: input.data ?? generateActionInput(tennisClubMembershipEvent, ActionType.REJECT),
4261
+ declaration: {},
4262
+ annotation: input.annotation ?? generateActionAnnotationInput(
4263
+ tennisClubMembershipEvent,
4264
+ ActionType.REJECT
4265
+ ),
3869
4266
  duplicates: [],
3870
4267
  eventId
3871
4268
  }),
3872
4269
  register: (eventId, input = {}) => ({
3873
4270
  type: ActionType.REGISTER,
3874
4271
  transactionId: input.transactionId ?? getUUID(),
3875
- data: input.data ?? generateActionInput(tennisClubMembershipEvent, ActionType.REGISTER),
4272
+ declaration: input.declaration ?? generateActionDeclarationInput(
4273
+ tennisClubMembershipEvent,
4274
+ ActionType.REGISTER
4275
+ ),
4276
+ annotation: input.annotation ?? generateActionAnnotationInput(
4277
+ tennisClubMembershipEvent,
4278
+ ActionType.REGISTER
4279
+ ),
3876
4280
  eventId
3877
4281
  }),
3878
4282
  printCertificate: (eventId, input = {}) => ({
3879
4283
  type: ActionType.PRINT_CERTIFICATE,
3880
4284
  transactionId: input.transactionId ?? getUUID(),
3881
- data: input.data ?? generateActionInput(
3882
- tennisClubMembershipEvent,
3883
- ActionType.PRINT_CERTIFICATE
3884
- ),
3885
- metadata: input.metadata ?? generateActionMetadataInput(
4285
+ declaration: {},
4286
+ annotation: input.annotation ?? generateActionAnnotationInput(
3886
4287
  tennisClubMembershipEvent,
3887
4288
  ActionType.PRINT_CERTIFICATE
3888
4289
  ),
@@ -3892,17 +4293,21 @@ var eventPayloadGenerator = {
3892
4293
  request: (eventId, input = {}) => ({
3893
4294
  type: ActionType.REQUEST_CORRECTION,
3894
4295
  transactionId: input.transactionId ?? getUUID(),
3895
- data: input.data ?? generateActionInput(
4296
+ declaration: input.declaration ?? generateActionDeclarationInput(
4297
+ tennisClubMembershipEvent,
4298
+ ActionType.REQUEST_CORRECTION
4299
+ ),
4300
+ annotation: input.annotation ?? generateActionAnnotationInput(
3896
4301
  tennisClubMembershipEvent,
3897
4302
  ActionType.REQUEST_CORRECTION
3898
4303
  ),
3899
- metadata: {},
3900
4304
  eventId
3901
4305
  }),
3902
4306
  approve: (eventId, requestId, input = {}) => ({
3903
4307
  type: ActionType.APPROVE_CORRECTION,
3904
4308
  transactionId: input.transactionId ?? getUUID(),
3905
- data: input.data ?? generateActionInput(
4309
+ declaration: {},
4310
+ annotation: input.annotation ?? generateActionAnnotationInput(
3906
4311
  tennisClubMembershipEvent,
3907
4312
  ActionType.APPROVE_CORRECTION
3908
4313
  ),
@@ -3912,7 +4317,8 @@ var eventPayloadGenerator = {
3912
4317
  reject: (eventId, requestId, input = {}) => ({
3913
4318
  type: ActionType.REJECT_CORRECTION,
3914
4319
  transactionId: input.transactionId ?? getUUID(),
3915
- data: input.data ?? generateActionInput(
4320
+ declaration: {},
4321
+ annotation: input.annotation ?? generateActionAnnotationInput(
3916
4322
  tennisClubMembershipEvent,
3917
4323
  ActionType.REJECT_CORRECTION
3918
4324
  ),
@@ -3932,17 +4338,25 @@ function generateActionDocument({
3932
4338
  // @TODO: This should be fixed in the future.
3933
4339
  createdAt: new Date(Date.now() - 500).toISOString(),
3934
4340
  createdBy: getUUID(),
4341
+ createdByRole: "FIELD_AGENT",
3935
4342
  id: getUUID(),
3936
4343
  createdAtLocation: "TODO",
3937
- data: generateActionInput(configuration, action),
3938
- metadata: {},
3939
- ...defaults
4344
+ updatedAtLocation: "TODO",
4345
+ declaration: generateActionDeclarationInput(configuration, action),
4346
+ annotation: {},
4347
+ ...defaults,
4348
+ status: ActionStatus.Accepted,
4349
+ transactionId: getUUID()
3940
4350
  };
3941
4351
  switch (action) {
4352
+ case ActionType.READ:
4353
+ return { ...actionBase, type: action };
4354
+ case ActionType.MARKED_AS_DUPLICATE:
4355
+ return { ...actionBase, type: action };
3942
4356
  case ActionType.DECLARE:
3943
4357
  return { ...actionBase, type: action };
3944
4358
  case ActionType.UNASSIGN:
3945
- return { ...actionBase, type: action };
4359
+ return { ...actionBase, type: action, assignedTo: null };
3946
4360
  case ActionType.ASSIGN:
3947
4361
  return { ...actionBase, assignedTo: getUUID(), type: action };
3948
4362
  case ActionType.VALIDATE:
@@ -3963,14 +4377,13 @@ function generateActionDocument({
3963
4377
  return { ...actionBase, requestId: getUUID(), type: action };
3964
4378
  case ActionType.REJECT_CORRECTION:
3965
4379
  return { ...actionBase, requestId: getUUID(), type: action };
3966
- case ActionType.CUSTOM:
3967
- return { ...actionBase, type: action };
3968
4380
  case ActionType.REGISTER:
3969
4381
  return {
3970
4382
  ...actionBase,
3971
- type: action,
3972
- identifiers: { trackingId: getUUID(), registrationNumber: getUUID() }
4383
+ type: action
3973
4384
  };
4385
+ case ActionType.DELETE:
4386
+ case ActionType.DETECT_DUPLICATE:
3974
4387
  default:
3975
4388
  throw new Error(`Unsupported action type: ${action}`);
3976
4389
  }
@@ -3991,10 +4404,12 @@ function generateEventDocument({
3991
4404
  id: getUUID(),
3992
4405
  // Offset is needed so the createdAt timestamps for events, actions and drafts make logical sense in storybook tests.
3993
4406
  // @TODO: This should be fixed in the future.
3994
- updatedAt: new Date(Date.now() - 1e3).toISOString()
4407
+ updatedAt: new Date(Date.now() - 1e3).toISOString(),
4408
+ dateOfEvent: configuration.dateOfEvent,
4409
+ updatedAtLocation: getUUID()
3995
4410
  };
3996
4411
  }
3997
- function generateEventDraftDocument(eventId, actionType = ActionType.DECLARE, data = {}) {
4412
+ function generateEventDraftDocument(eventId, actionType = ActionType.DECLARE, declaration = {}) {
3998
4413
  const action = generateActionDocument({
3999
4414
  configuration: tennisClubMembershipEvent,
4000
4415
  action: actionType
@@ -4004,9 +4419,9 @@ function generateEventDraftDocument(eventId, actionType = ActionType.DECLARE, da
4004
4419
  transactionId: getUUID(),
4005
4420
  action: {
4006
4421
  ...action,
4007
- data: {
4008
- ...action.data,
4009
- ...data
4422
+ declaration: {
4423
+ ...action.declaration,
4424
+ ...declaration
4010
4425
  }
4011
4426
  },
4012
4427
  createdAt: (/* @__PURE__ */ new Date()).toISOString(),
@@ -4020,10 +4435,12 @@ var eventQueryDataGenerator = (overrides = {}) => ({
4020
4435
  createdAt: overrides.createdAt ?? (/* @__PURE__ */ new Date()).toISOString(),
4021
4436
  createdBy: overrides.createdBy ?? getUUID(),
4022
4437
  createdAtLocation: overrides.createdAtLocation ?? getUUID(),
4023
- modifiedAt: overrides.modifiedAt ?? (/* @__PURE__ */ new Date()).toISOString(),
4438
+ updatedAtLocation: overrides.updatedAtLocation ?? getUUID(),
4439
+ updatedAt: overrides.updatedAt ?? (/* @__PURE__ */ new Date()).toISOString(),
4024
4440
  assignedTo: overrides.assignedTo ?? null,
4025
4441
  updatedBy: overrides.updatedBy ?? getUUID(),
4026
- data: overrides.data ?? {
4442
+ updatedByUserRole: overrides.updatedByUserRole ?? "FIELD_AGENT",
4443
+ declaration: overrides.declaration ?? {
4027
4444
  "recommender.none": true,
4028
4445
  "applicant.firstname": "Danny",
4029
4446
  "applicant.surname": "Doe",
@@ -4054,7 +4471,9 @@ function isFieldValueWithoutTemplates(value) {
4054
4471
  return true;
4055
4472
  }
4056
4473
  function isFieldConfigDefaultValue(value) {
4057
- if (!value) return false;
4474
+ if (!value) {
4475
+ return false;
4476
+ }
4058
4477
  if (isFieldValue(value)) {
4059
4478
  return true;
4060
4479
  }
@@ -4066,3 +4485,213 @@ function isFieldConfigDefaultValue(value) {
4066
4485
  }
4067
4486
  return false;
4068
4487
  }
4488
+
4489
+ // ../commons/src/events/scopes.ts
4490
+ var import_lodash3 = require("lodash");
4491
+
4492
+ // ../commons/src/scopes.ts
4493
+ var SCOPES = {
4494
+ // TODO v1.8 legacy scopes
4495
+ NATLSYSADMIN: "natlsysadmin",
4496
+ BYPASSRATELIMIT: "bypassratelimit",
4497
+ DECLARE: "declare",
4498
+ REGISTER: "register",
4499
+ VALIDATE: "validate",
4500
+ DEMO: "demo",
4501
+ CERTIFY: "certify",
4502
+ PERFORMANCE: "performance",
4503
+ SYSADMIN: "sysadmin",
4504
+ TEAMS: "teams",
4505
+ CONFIG: "config",
4506
+ // systems / integrations
4507
+ WEBHOOK: "webhook",
4508
+ NATIONALID: "nationalId",
4509
+ NOTIFICATION_API: "notification-api",
4510
+ RECORDSEARCH: "recordsearch",
4511
+ /**
4512
+ * @TODO This is a temporary scope to be used for V2 Events custom events declaration
4513
+ */
4514
+ RECORD_DECLARE: "record.declare-birth",
4515
+ // declare
4516
+ RECORD_DECLARE_BIRTH: "record.declare-birth",
4517
+ RECORD_DECLARE_BIRTH_MY_JURISDICTION: "record.declare-birth:my-jurisdiction",
4518
+ RECORD_DECLARE_DEATH: "record.declare-death",
4519
+ RECORD_DECLARE_DEATH_MY_JURISDICTION: "record.declare-death:my-jurisdiction",
4520
+ RECORD_DECLARE_MARRIAGE: "record.declare-marriage",
4521
+ RECORD_DECLARE_MARRIAGE_MY_JURISDICTION: "record.declare-marriage:my-jurisdiction",
4522
+ RECORD_SUBMIT_INCOMPLETE: "record.declaration-submit-incomplete",
4523
+ RECORD_SUBMIT_FOR_REVIEW: "record.declaration-submit-for-review",
4524
+ RECORD_UNASSIGN_OTHERS: "record.unassign-others",
4525
+ // validate
4526
+ RECORD_SUBMIT_FOR_APPROVAL: "record.declaration-submit-for-approval",
4527
+ RECORD_SUBMIT_FOR_UPDATES: "record.declaration-submit-for-updates",
4528
+ RECORD_DECLARATION_EDIT: "record.declaration-edit",
4529
+ RECORD_REVIEW_DUPLICATES: "record.review-duplicates",
4530
+ RECORD_DECLARATION_ARCHIVE: "record.declaration-archive",
4531
+ RECORD_DECLARATION_REINSTATE: "record.declaration-reinstate",
4532
+ // register
4533
+ RECORD_REGISTER: "record.register",
4534
+ // certify
4535
+ RECORD_EXPORT_RECORDS: "record.export-records",
4536
+ RECORD_DECLARATION_PRINT: "record.declaration-print",
4537
+ RECORD_PRINT_RECORDS_SUPPORTING_DOCUMENTS: "record.declaration-print-supporting-documents",
4538
+ RECORD_REGISTRATION_PRINT: "record.registration-print",
4539
+ // v1.8
4540
+ /**
4541
+ * This scope is used to **print and **issue certified copies of a record
4542
+ * after it has been registered. Previously Registrars had this permission.
4543
+ */
4544
+ RECORD_PRINT_ISSUE_CERTIFIED_COPIES: "record.registration-print&issue-certified-copies",
4545
+ RECORD_PRINT_CERTIFIED_COPIES: "record.registration-print-certified-copies",
4546
+ // v1.8
4547
+ RECORD_BULK_PRINT_CERTIFIED_COPIES: "record.registration-bulk-print-certified-copies",
4548
+ // v1.8
4549
+ RECORD_REGISTRATION_VERIFY_CERTIFIED_COPIES: "record.registration-verify-certified-copies",
4550
+ // v1.8
4551
+ // correct
4552
+ RECORD_REGISTRATION_REQUEST_CORRECTION: "record.registration-request-correction",
4553
+ RECORD_REGISTRATION_CORRECT: "record.registration-correct",
4554
+ RECORD_REGISTRATION_REQUEST_REVOCATION: "record.registration-request-revocation",
4555
+ // v1.8
4556
+ RECORD_REGISTRATION_REVOKE: "record.registration-revoke",
4557
+ // v1.8
4558
+ RECORD_REGISTRATION_REQUEST_REINSTATEMENT: "record.registration-request-reinstatement",
4559
+ // v1.8
4560
+ RECORD_REGISTRATION_REINSTATE: "record.registration-reinstate",
4561
+ // v1.8
4562
+ RECORD_CONFIRM_REGISTRATION: "record.confirm-registration",
4563
+ RECORD_REJECT_REGISTRATION: "record.reject-registration",
4564
+ // search
4565
+ SEARCH_BIRTH_MY_JURISDICTION: "search.birth:my-jurisdiction",
4566
+ SEARCH_BIRTH: "search.birth",
4567
+ SEARCH_DEATH_MY_JURISDICTION: "search.death:my-jurisdiction",
4568
+ SEARCH_DEATH: "search.death",
4569
+ SEARCH_MARRIAGE_MY_JURISDICTION: "search.marriage:my-jurisdiction",
4570
+ SEARCH_MARRIAGE: "search.marriage",
4571
+ // audit v1.8
4572
+ RECORD_READ: "record.read",
4573
+ RECORD_READ_AUDIT: "record.read-audit",
4574
+ RECORD_READ_COMMENTS: "record.read-comments",
4575
+ RECORD_CREATE_COMMENTS: "record.create-comments",
4576
+ // profile
4577
+ PROFILE_UPDATE: "profile.update",
4578
+ //v1.8
4579
+ PROFILE_ELECTRONIC_SIGNATURE: "profile.electronic-signature",
4580
+ // performance
4581
+ PERFORMANCE_READ: "performance.read",
4582
+ PERFORMANCE_READ_DASHBOARDS: "performance.read-dashboards",
4583
+ PERFORMANCE_EXPORT_VITAL_STATISTICS: "performance.vital-statistics-export",
4584
+ // organisation
4585
+ ORGANISATION_READ_LOCATIONS: "organisation.read-locations:all",
4586
+ ORGANISATION_READ_LOCATIONS_MY_OFFICE: "organisation.read-locations:my-office",
4587
+ ORGANISATION_READ_LOCATIONS_MY_JURISDICTION: "organisation.read-locations:my-jurisdiction",
4588
+ // user
4589
+ USER_READ: "user.read:all",
4590
+ USER_READ_MY_OFFICE: "user.read:my-office",
4591
+ USER_READ_MY_JURISDICTION: "user.read:my-jurisdiction",
4592
+ USER_READ_ONLY_MY_AUDIT: "user.read:only-my-audit",
4593
+ //v1.8
4594
+ USER_CREATE: "user.create:all",
4595
+ USER_CREATE_MY_JURISDICTION: "user.create:my-jurisdiction",
4596
+ USER_UPDATE: "user.update:all",
4597
+ USER_UPDATE_MY_JURISDICTION: "user.update:my-jurisdiction",
4598
+ // config
4599
+ CONFIG_UPDATE_ALL: "config.update:all",
4600
+ // data seeding
4601
+ USER_DATA_SEEDING: "user.data-seeding"
4602
+ };
4603
+ var scopes = Object.values(SCOPES);
4604
+
4605
+ // ../commons/src/events/scopes.ts
4606
+ function hasAnyOfScopes(a, b) {
4607
+ return (0, import_lodash3.intersection)(a, b).length > 0;
4608
+ }
4609
+ var CONFIG_GET_ALLOWED_SCOPES = [
4610
+ SCOPES.RECORD_DECLARE,
4611
+ SCOPES.RECORD_READ,
4612
+ SCOPES.RECORD_SUBMIT_INCOMPLETE,
4613
+ SCOPES.RECORD_SUBMIT_FOR_REVIEW,
4614
+ SCOPES.RECORD_REGISTER,
4615
+ SCOPES.RECORD_EXPORT_RECORDS,
4616
+ SCOPES.CONFIG,
4617
+ SCOPES.CONFIG_UPDATE_ALL
4618
+ ];
4619
+ var CONFIG_SEARCH_ALLOWED_SCOPES = [
4620
+ SCOPES.SEARCH_BIRTH,
4621
+ SCOPES.SEARCH_DEATH,
4622
+ SCOPES.SEARCH_MARRIAGE,
4623
+ SCOPES.SEARCH_BIRTH_MY_JURISDICTION,
4624
+ SCOPES.SEARCH_DEATH_MY_JURISDICTION,
4625
+ SCOPES.SEARCH_MARRIAGE_MY_JURISDICTION
4626
+ ];
4627
+ var ACTION_ALLOWED_SCOPES = {
4628
+ [ActionType.READ]: [
4629
+ SCOPES.RECORD_DECLARE,
4630
+ SCOPES.RECORD_READ,
4631
+ SCOPES.RECORD_SUBMIT_INCOMPLETE,
4632
+ SCOPES.RECORD_SUBMIT_FOR_REVIEW,
4633
+ SCOPES.RECORD_REGISTER,
4634
+ SCOPES.RECORD_EXPORT_RECORDS
4635
+ ],
4636
+ [ActionType.CREATE]: [
4637
+ SCOPES.RECORD_DECLARE,
4638
+ SCOPES.RECORD_SUBMIT_INCOMPLETE,
4639
+ SCOPES.RECORD_SUBMIT_FOR_REVIEW
4640
+ ],
4641
+ [ActionType.NOTIFY]: [SCOPES.RECORD_SUBMIT_INCOMPLETE],
4642
+ [ActionType.DECLARE]: [
4643
+ SCOPES.RECORD_DECLARE,
4644
+ SCOPES.RECORD_SUBMIT_FOR_APPROVAL,
4645
+ SCOPES.RECORD_REGISTER
4646
+ ],
4647
+ [ActionType.DELETE]: [SCOPES.RECORD_DECLARE],
4648
+ [ActionType.VALIDATE]: [
4649
+ SCOPES.RECORD_SUBMIT_FOR_APPROVAL,
4650
+ SCOPES.RECORD_REGISTER
4651
+ ],
4652
+ [ActionType.REGISTER]: [SCOPES.RECORD_REGISTER],
4653
+ [ActionType.PRINT_CERTIFICATE]: [SCOPES.RECORD_PRINT_ISSUE_CERTIFIED_COPIES],
4654
+ [ActionType.REQUEST_CORRECTION]: [
4655
+ SCOPES.RECORD_REGISTRATION_REQUEST_CORRECTION
4656
+ ],
4657
+ [ActionType.REJECT_CORRECTION]: [SCOPES.RECORD_REGISTRATION_CORRECT],
4658
+ [ActionType.APPROVE_CORRECTION]: [SCOPES.RECORD_REGISTRATION_CORRECT],
4659
+ [ActionType.MARKED_AS_DUPLICATE]: [SCOPES.RECORD_DECLARATION_ARCHIVE],
4660
+ [ActionType.ARCHIVE]: [SCOPES.RECORD_DECLARATION_ARCHIVE],
4661
+ [ActionType.REJECT]: [SCOPES.RECORD_SUBMIT_FOR_UPDATES],
4662
+ [ActionType.ASSIGN]: null,
4663
+ [ActionType.UNASSIGN]: null,
4664
+ [ActionType.DETECT_DUPLICATE]: []
4665
+ };
4666
+ function filterUnallowedActions(actions, userScopes) {
4667
+ const allowedActions = actions.filter((action) => {
4668
+ const requiredScopes = ACTION_ALLOWED_SCOPES[action];
4669
+ if (requiredScopes === null) {
4670
+ return true;
4671
+ }
4672
+ return hasAnyOfScopes(userScopes, requiredScopes);
4673
+ });
4674
+ const hasOtherAllowedActions = allowedActions.some(
4675
+ (action) => action !== ActionType.READ && action !== ActionType.ASSIGN && action !== ActionType.UNASSIGN
4676
+ );
4677
+ if (hasOtherAllowedActions) {
4678
+ return allowedActions;
4679
+ }
4680
+ return [ActionType.READ];
4681
+ }
4682
+
4683
+ // ../commons/src/event-config/event-configuration.ts
4684
+ function createEventFieldConfig(fieldId, options) {
4685
+ return {
4686
+ fieldId,
4687
+ options,
4688
+ config: { type: "EXACT" },
4689
+ fieldType: "event"
4690
+ };
4691
+ }
4692
+
4693
+ // ../commons/src/events/event.ts
4694
+ function eventFn(fieldId, options) {
4695
+ return createEventFieldConfig(fieldId, options);
4696
+ }
4697
+ var event = Object.assign(eventFn, createEventConditionals());