@opencrvs/toolkit 1.8.0-rc.feaeeb7 → 1.8.0-rc.feef45c

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 (41) hide show
  1. package/README.md +1 -1
  2. package/dist/commons/api/router.d.ts +10781 -10314
  3. package/dist/commons/conditionals/conditionals.d.ts +31 -5
  4. package/dist/commons/conditionals/validate-address.test.d.ts +2 -0
  5. package/dist/commons/conditionals/validate.d.ts +39 -17
  6. package/dist/commons/conditionals/validate.test.d.ts +2 -0
  7. package/dist/commons/events/ActionConfig.d.ts +85782 -2035
  8. package/dist/commons/events/ActionDocument.d.ts +9850 -363
  9. package/dist/commons/events/ActionInput.d.ts +5365 -584
  10. package/dist/commons/events/ActionType.d.ts +27 -12
  11. package/dist/commons/events/AdvancedSearchConfig.d.ts +371 -25
  12. package/dist/commons/events/CompositeFieldValue.d.ts +155 -2
  13. package/dist/commons/events/Conditional.d.ts +21 -5
  14. package/dist/commons/events/Draft.d.ts +374 -59
  15. package/dist/commons/events/EventConfig.d.ts +40846 -1801
  16. package/dist/commons/events/EventConfigInput.d.ts +6 -3
  17. package/dist/commons/events/EventDocument.d.ts +3672 -504
  18. package/dist/commons/events/EventIndex.d.ts +921 -7
  19. package/dist/commons/events/EventInput.d.ts +13 -0
  20. package/dist/commons/events/EventMetadata.d.ts +16 -3
  21. package/dist/commons/events/FieldConfig.d.ts +3955 -757
  22. package/dist/commons/events/FieldType.d.ts +6 -2
  23. package/dist/commons/events/FieldTypeMapping.d.ts +154 -3
  24. package/dist/commons/events/FieldValue.d.ts +77 -3
  25. package/dist/commons/events/FormConfig.d.ts +38982 -69
  26. package/dist/commons/events/PageConfig.d.ts +9803 -0
  27. package/dist/commons/events/SummaryConfig.d.ts +81 -42
  28. package/dist/commons/events/TemplateConfig.d.ts +30 -10
  29. package/dist/commons/events/User.d.ts +5 -0
  30. package/dist/commons/events/WorkqueueConfig.d.ts +44 -20
  31. package/dist/commons/events/defineConfig.d.ts +6749 -230
  32. package/dist/commons/events/event.d.ts +25 -0
  33. package/dist/commons/events/field.d.ts +68 -0
  34. package/dist/commons/events/index.d.ts +5 -1
  35. package/dist/commons/events/scopes.d.ts +26 -0
  36. package/dist/commons/events/test.utils.d.ts +128 -238
  37. package/dist/commons/events/utils.d.ts +3528 -90
  38. package/dist/commons/events/utils.test.d.ts +2 -0
  39. package/dist/conditionals/index.js +196 -108
  40. package/dist/events/index.js +2201 -1197
  41. package/package.json +3 -2
@@ -30,29 +30,50 @@ 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,
48
+ AddressType: () => AddressType,
49
+ AdministrativeAreas: () => AdministrativeAreas,
43
50
  AdvancedSearchConfig: () => AdvancedSearchConfig,
44
51
  ApproveCorrectionActionInput: () => ApproveCorrectionActionInput,
45
- ArchivedActionInput: () => ArchivedActionInput,
52
+ ArchiveActionInput: () => ArchiveActionInput,
53
+ AssignActionInput: () => AssignActionInput,
54
+ AsyncRejectActionDocument: () => AsyncRejectActionDocument,
46
55
  BaseActionInput: () => BaseActionInput,
56
+ CONFIG_GET_ALLOWED_SCOPES: () => CONFIG_GET_ALLOWED_SCOPES,
57
+ CONFIG_SEARCH_ALLOWED_SCOPES: () => CONFIG_SEARCH_ALLOWED_SCOPES,
47
58
  CertificateConfig: () => CertificateConfig,
48
59
  CertificateTemplateConfig: () => CertificateTemplateConfig,
49
60
  CheckboxFieldValue: () => CheckboxFieldValue,
50
61
  Clause: () => Clause,
51
62
  Conditional: () => Conditional,
52
63
  ConditionalType: () => ConditionalType,
64
+ ConfirmableActions: () => ConfirmableActions,
65
+ DataEntry: () => DataEntry,
66
+ DataFieldValue: () => DataFieldValue,
53
67
  DateValue: () => DateValue,
68
+ DeclarationActionConfig: () => DeclarationActionConfig,
69
+ DeclarationActions: () => DeclarationActions,
70
+ DeclarationFormConfig: () => DeclarationFormConfig,
71
+ DeclarationReviewConfig: () => DeclarationReviewConfig,
72
+ DeclarationUpdateActions: () => DeclarationUpdateActions,
54
73
  DeclareActionInput: () => DeclareActionInput,
55
74
  DeduplicationConfig: () => DeduplicationConfig,
75
+ DeleteActionInput: () => DeleteActionInput,
76
+ DisplayOnReviewConditional: () => DisplayOnReviewConditional,
56
77
  Draft: () => Draft,
57
78
  DraftInput: () => DraftInput,
58
79
  EmailField: () => EmailField,
@@ -60,13 +81,17 @@ __export(events_exports, {
60
81
  EnableConditional: () => EnableConditional,
61
82
  EventConfig: () => EventConfig,
62
83
  EventDocument: () => EventDocument,
84
+ EventFieldConfigSchema: () => EventFieldConfigSchema,
85
+ EventFieldId: () => EventFieldId,
63
86
  EventIndex: () => EventIndex,
64
87
  EventInput: () => EventInput,
65
88
  EventMetadata: () => EventMetadata,
66
89
  EventSearchIndex: () => EventSearchIndex,
67
90
  EventStatus: () => EventStatus,
68
91
  EventStatuses: () => EventStatuses,
92
+ FieldConditional: () => FieldConditional,
69
93
  FieldConfig: () => FieldConfig,
94
+ FieldConfigSchema: () => FieldConfigSchema,
70
95
  FieldType: () => FieldType,
71
96
  FieldUpdateValue: () => FieldUpdateValue,
72
97
  FieldValue: () => FieldValue,
@@ -74,38 +99,67 @@ __export(events_exports, {
74
99
  FileFieldValueWithOption: () => FileFieldValueWithOption,
75
100
  FileFieldWithOptionValue: () => FileFieldWithOptionValue,
76
101
  FormConfig: () => FormConfig,
77
- FormPage: () => FormPage,
102
+ FormPageConfig: () => FormPageConfig,
103
+ GenericAddressUpdateValue: () => GenericAddressUpdateValue,
104
+ GenericAddressValue: () => GenericAddressValue,
78
105
  GeographicalArea: () => GeographicalArea,
106
+ ImageMimeType: () => ImageMimeType,
79
107
  LanguageConfig: () => LanguageConfig,
80
108
  MarkedAsDuplicateActionInput: () => MarkedAsDuplicateActionInput,
109
+ MatchType: () => MatchType,
110
+ MimeType: () => MimeType,
111
+ NonEmptyTextValue: () => NonEmptyTextValue,
81
112
  NotifyActionInput: () => NotifyActionInput,
82
113
  NumberFieldValue: () => NumberFieldValue,
114
+ PageConfig: () => PageConfig,
115
+ PageTypes: () => PageTypes,
83
116
  PrintCertificateActionInput: () => PrintCertificateActionInput,
117
+ QueryInput: () => QueryInput,
118
+ QueryType: () => QueryType,
119
+ ReadActionInput: () => ReadActionInput,
120
+ RegisterAction: () => RegisterAction,
84
121
  RegisterActionInput: () => RegisterActionInput,
85
122
  RejectCorrectionActionInput: () => RejectCorrectionActionInput,
86
123
  RejectDeclarationActionInput: () => RejectDeclarationActionInput,
87
124
  RequestCorrectionActionInput: () => RequestCorrectionActionInput,
88
- RequiredTextValue: () => RequiredTextValue,
89
125
  ResolvedUser: () => ResolvedUser,
90
126
  RuralAddressUpdateValue: () => RuralAddressUpdateValue,
91
127
  RuralAddressValue: () => RuralAddressValue,
128
+ SearchField: () => SearchField,
129
+ SelectOption: () => SelectOption,
92
130
  ShowConditional: () => ShowConditional,
93
131
  SummaryConfig: () => SummaryConfig,
94
132
  TextValue: () => TextValue,
95
133
  TranslationConfig: () => TranslationConfig,
134
+ UnassignActionInput: () => UnassignActionInput,
96
135
  UrbanAddressUpdateValue: () => UrbanAddressUpdateValue,
97
136
  UrbanAddressValue: () => UrbanAddressValue,
98
137
  ValidateActionInput: () => ValidateActionInput,
138
+ VerificationActionConfig: () => VerificationActionConfig,
139
+ VerificationPageConfig: () => VerificationPageConfig,
99
140
  WorkqueueConfig: () => WorkqueueConfig,
141
+ ZodDate: () => ZodDate,
100
142
  alwaysTrue: () => alwaysTrue,
101
143
  and: () => and,
144
+ annotationActions: () => annotationActions,
102
145
  applyDraftsToEventIndex: () => applyDraftsToEventIndex,
146
+ areConditionsMet: () => areConditionsMet,
147
+ compositeFieldTypes: () => compositeFieldTypes,
148
+ createEmptyDraft: () => createEmptyDraft,
149
+ createEventConditionals: () => createEventConditionals,
150
+ createFieldConditionals: () => createFieldConditionals,
103
151
  createValidationSchema: () => createValidationSchema,
104
152
  deepDropNulls: () => deepDropNulls,
153
+ deepMerge: () => deepMerge,
154
+ defineActionForm: () => defineActionForm,
105
155
  defineConditional: () => defineConditional,
106
156
  defineConfig: () => defineConfig,
107
- defineForm: () => defineForm,
157
+ defineDeclarationForm: () => defineDeclarationForm,
158
+ defineFormConditional: () => defineFormConditional,
108
159
  defineFormPage: () => defineFormPage,
160
+ definePage: () => definePage,
161
+ defineWorkqueue: () => defineWorkqueue,
162
+ errorMessages: () => errorMessages,
109
163
  event: () => event,
110
164
  eventMetadataLabelMap: () => eventMetadataLabelMap,
111
165
  eventPayloadGenerator: () => eventPayloadGenerator,
@@ -113,36 +167,46 @@ __export(events_exports, {
113
167
  eventStatuses: () => eventStatuses,
114
168
  field: () => field,
115
169
  fieldTypes: () => fieldTypes,
116
- findActiveActionFields: () => findActiveActionFields,
117
- findActiveActionForm: () => findActiveActionForm,
118
- findActiveActionFormFields: () => findActiveActionFormFields,
119
- findActiveActionFormPages: () => findActiveActionFormPages,
120
- findInputPageFields: () => findInputPageFields,
121
- findPageFields: () => findPageFields,
170
+ filterUnallowedActions: () => filterUnallowedActions,
171
+ findActiveDrafts: () => findActiveDrafts,
172
+ findAllFields: () => findAllFields,
173
+ findLastAssignmentAction: () => findLastAssignmentAction,
174
+ findRecordActionPages: () => findRecordActionPages,
175
+ generateActionAnnotationInput: () => generateActionAnnotationInput,
176
+ generateActionDeclarationInput: () => generateActionDeclarationInput,
122
177
  generateActionDocument: () => generateActionDocument,
123
- generateActionInput: () => generateActionInput,
124
178
  generateEventDocument: () => generateEventDocument,
125
179
  generateEventDraftDocument: () => generateEventDraftDocument,
126
180
  generateTransactionId: () => generateTransactionId,
127
- getActiveActionFields: () => getActiveActionFields,
128
- getAllFields: () => getAllFields,
129
- getAllPages: () => getAllPages,
181
+ generateTranslationConfig: () => generateTranslationConfig,
182
+ getAcceptedActions: () => getAcceptedActions,
183
+ getActionAnnotation: () => getActionAnnotation,
184
+ getActionAnnotationFields: () => getActionAnnotationFields,
185
+ getActionReview: () => getActionReview,
186
+ getActionReviewFields: () => getActionReviewFields,
187
+ getActionVerificationPageIds: () => getActionVerificationPageIds,
188
+ getAnnotationFromDrafts: () => getAnnotationFromDrafts,
189
+ getAssignedUserFromActions: () => getAssignedUserFromActions,
130
190
  getCurrentEventState: () => getCurrentEventState,
131
191
  getCurrentEventStateWithDrafts: () => getCurrentEventStateWithDrafts,
132
- getEventConfiguration: () => getEventConfiguration,
133
- getFieldValidationErrors: () => getFieldValidationErrors,
134
- getFormFields: () => getFormFields,
135
- getMetadataForAction: () => getMetadataForAction,
192
+ getDeclaration: () => getDeclaration,
193
+ getDeclarationFields: () => getDeclarationFields,
194
+ getDeclarationPages: () => getDeclarationPages,
195
+ getVisibleVerificationPageIds: () => getVisibleVerificationPageIds,
196
+ hasAnyOfScopes: () => hasAnyOfScopes,
136
197
  isAddressFieldType: () => isAddressFieldType,
137
198
  isAdministrativeAreaFieldType: () => isAdministrativeAreaFieldType,
138
199
  isBulletListFieldType: () => isBulletListFieldType,
139
200
  isCheckboxFieldType: () => isCheckboxFieldType,
201
+ isConditionMet: () => isConditionMet,
140
202
  isCountryFieldType: () => isCountryFieldType,
203
+ isDataFieldType: () => isDataFieldType,
141
204
  isDateFieldType: () => isDateFieldType,
142
- isDefaultValue: () => isDefaultValue,
143
205
  isDividerFieldType: () => isDividerFieldType,
144
206
  isEmailFieldType: () => isEmailFieldType,
145
207
  isFacilityFieldType: () => isFacilityFieldType,
208
+ isFieldConfigDefaultValue: () => isFieldConfigDefaultValue,
209
+ isFieldDisplayedOnReview: () => isFieldDisplayedOnReview,
146
210
  isFieldEnabled: () => isFieldEnabled,
147
211
  isFieldValue: () => isFieldValue,
148
212
  isFieldValueWithoutTemplates: () => isFieldValueWithoutTemplates,
@@ -153,6 +217,7 @@ __export(events_exports, {
153
217
  isNumberFieldType: () => isNumberFieldType,
154
218
  isOfficeFieldType: () => isOfficeFieldType,
155
219
  isPageHeaderFieldType: () => isPageHeaderFieldType,
220
+ isPageVisible: () => isPageVisible,
156
221
  isParagraphFieldType: () => isParagraphFieldType,
157
222
  isRadioGroupFieldType: () => isRadioGroupFieldType,
158
223
  isSelectFieldType: () => isSelectFieldType,
@@ -161,49 +226,72 @@ __export(events_exports, {
161
226
  isTextAreaFieldType: () => isTextAreaFieldType,
162
227
  isTextFieldType: () => isTextFieldType,
163
228
  isUndeclaredDraft: () => isUndeclaredDraft,
229
+ isVerificationPage: () => isVerificationPage,
230
+ isWriteAction: () => isWriteAction,
231
+ mapFieldTypeToEmptyValue: () => mapFieldTypeToEmptyValue,
164
232
  mapFieldTypeToMockValue: () => mapFieldTypeToMockValue,
165
233
  mapFieldTypeToZod: () => mapFieldTypeToZod,
234
+ never: () => never,
166
235
  not: () => not,
236
+ omitHiddenAnnotationFields: () => omitHiddenAnnotationFields,
237
+ omitHiddenFields: () => omitHiddenFields,
238
+ omitHiddenPaginatedFields: () => omitHiddenPaginatedFields,
167
239
  or: () => or,
168
- resolveLabelsFromKnownFields: () => resolveLabelsFromKnownFields,
169
- stripHiddenFields: () => stripHiddenFields,
240
+ runFieldValidations: () => runFieldValidations,
170
241
  user: () => user,
171
242
  validate: () => validate,
172
243
  validateFieldInput: () => validateFieldInput,
173
- validateWorkqueueConfig: () => validateWorkqueueConfig
244
+ writeActions: () => writeActions
174
245
  });
175
246
  module.exports = __toCommonJS(events_exports);
176
247
 
177
248
  // ../commons/src/events/ActionConfig.ts
178
- var import_zod7 = require("zod");
249
+ var import_zod9 = require("zod");
179
250
 
180
251
  // ../commons/src/events/Conditional.ts
181
252
  var import_zod = require("zod");
182
- function Conditional() {
183
- return import_zod.z.custom((val) => typeof val === "object" && val !== null);
184
- }
253
+ var Conditional = import_zod.z.custom(
254
+ (val) => typeof val === "object" && val !== null
255
+ );
185
256
  var ConditionalType = {
186
- /** When 'SHOW' conditional is defined, the action is shown to the user only if the condition is met */
187
257
  SHOW: "SHOW",
188
- /** If 'ENABLE' conditional is defined, the action is enabled only if the condition is met */
189
- ENABLE: "ENABLE"
258
+ ENABLE: "ENABLE",
259
+ DISPLAY_ON_REVIEW: "DISPLAY_ON_REVIEW"
190
260
  };
191
261
  var ShowConditional = import_zod.z.object({
192
262
  type: import_zod.z.literal(ConditionalType.SHOW),
193
- conditional: Conditional()
194
- });
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
+ );
195
267
  var EnableConditional = import_zod.z.object({
196
268
  type: import_zod.z.literal(ConditionalType.ENABLE),
197
- conditional: Conditional()
198
- });
269
+ conditional: Conditional
270
+ }).describe(
271
+ "If 'ENABLE' conditional is defined, the component is enabled only if the condition is met"
272
+ );
199
273
  var ActionConditional = import_zod.z.discriminatedUnion("type", [
200
274
  // Action can be shown / hidden
201
275
  ShowConditional,
202
276
  // Action can be shown to the user in the list but as disabled
203
277
  EnableConditional
204
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
+ ]);
205
293
 
206
- // ../commons/src/events/FormConfig.ts
294
+ // ../commons/src/events/PageConfig.ts
207
295
  var import_zod6 = require("zod");
208
296
 
209
297
  // ../commons/src/events/FieldConfig.ts
@@ -234,7 +322,6 @@ var FieldType = {
234
322
  RADIO_GROUP: "RADIO_GROUP",
235
323
  FILE: "FILE",
236
324
  FILE_WITH_OPTIONS: "FILE_WITH_OPTIONS",
237
- HIDDEN: "HIDDEN",
238
325
  BULLET_LIST: "BULLET_LIST",
239
326
  CHECKBOX: "CHECKBOX",
240
327
  SELECT: "SELECT",
@@ -244,9 +331,15 @@ var FieldType = {
244
331
  ADMINISTRATIVE_AREA: "ADMINISTRATIVE_AREA",
245
332
  FACILITY: "FACILITY",
246
333
  OFFICE: "OFFICE",
247
- SIGNATURE: "SIGNATURE"
334
+ SIGNATURE: "SIGNATURE",
335
+ DATA: "DATA"
248
336
  };
249
337
  var fieldTypes = Object.values(FieldType);
338
+ var compositeFieldTypes = [
339
+ FieldType.ADDRESS,
340
+ FieldType.FILE_WITH_OPTIONS,
341
+ FieldType.FILE
342
+ ];
250
343
 
251
344
  // ../commons/src/events/FieldValue.ts
252
345
  var import_zod4 = require("zod");
@@ -257,6 +350,10 @@ var GeographicalArea = {
257
350
  URBAN: "URBAN",
258
351
  RURAL: "RURAL"
259
352
  };
353
+ var AddressType = {
354
+ DOMESTIC: "DOMESTIC",
355
+ INTERNATIONAL: "INTERNATIONAL"
356
+ };
260
357
  var FileFieldValue = import_zod3.z.object({
261
358
  filename: import_zod3.z.string(),
262
359
  originalFilename: import_zod3.z.string(),
@@ -264,6 +361,7 @@ var FileFieldValue = import_zod3.z.object({
264
361
  });
265
362
  var AdminStructure = import_zod3.z.object({
266
363
  country: import_zod3.z.string(),
364
+ addressType: import_zod3.z.literal(AddressType.DOMESTIC),
267
365
  province: import_zod3.z.string(),
268
366
  district: import_zod3.z.string()
269
367
  });
@@ -291,14 +389,33 @@ var RuralAddressUpdateValue = AdminStructure.extend({
291
389
  urbanOrRural: import_zod3.z.literal(GeographicalArea.RURAL),
292
390
  village: import_zod3.z.string().nullish()
293
391
  });
294
- var AddressFieldValue = import_zod3.z.discriminatedUnion("urbanOrRural", [
295
- UrbanAddressValue,
296
- RuralAddressValue
297
- ]);
392
+ var GenericAddressValue = import_zod3.z.object({
393
+ country: import_zod3.z.string(),
394
+ addressType: import_zod3.z.literal(AddressType.INTERNATIONAL),
395
+ state: import_zod3.z.string(),
396
+ district2: import_zod3.z.string(),
397
+ cityOrTown: import_zod3.z.string().optional(),
398
+ addressLine1: import_zod3.z.string().optional(),
399
+ addressLine2: import_zod3.z.string().optional(),
400
+ addressLine3: import_zod3.z.string().optional(),
401
+ postcodeOrZip: import_zod3.z.string().optional()
402
+ });
403
+ var AddressFieldValue = import_zod3.z.discriminatedUnion("urbanOrRural", [UrbanAddressValue, RuralAddressValue]).or(GenericAddressValue);
404
+ var GenericAddressUpdateValue = import_zod3.z.object({
405
+ country: import_zod3.z.string(),
406
+ addressType: import_zod3.z.literal(AddressType.INTERNATIONAL),
407
+ state: import_zod3.z.string(),
408
+ district2: import_zod3.z.string(),
409
+ cityOrTown: import_zod3.z.string().nullish(),
410
+ addressLine1: import_zod3.z.string().nullish(),
411
+ addressLine2: import_zod3.z.string().nullish(),
412
+ addressLine3: import_zod3.z.string().nullish(),
413
+ postcodeOrZip: import_zod3.z.string().nullish()
414
+ });
298
415
  var AddressFieldUpdateValue = import_zod3.z.discriminatedUnion("urbanOrRural", [
299
416
  UrbanAddressUpdateValue,
300
417
  RuralAddressUpdateValue
301
- ]);
418
+ ]).or(GenericAddressUpdateValue);
302
419
  var FileFieldValueWithOption = import_zod3.z.object({
303
420
  filename: import_zod3.z.string(),
304
421
  originalFilename: import_zod3.z.string(),
@@ -309,11 +426,12 @@ var FileFieldWithOptionValue = import_zod3.z.array(FileFieldValueWithOption);
309
426
 
310
427
  // ../commons/src/events/FieldValue.ts
311
428
  var TextValue = import_zod4.z.string();
312
- var RequiredTextValue = TextValue.min(1);
429
+ var NonEmptyTextValue = TextValue.min(1);
313
430
  var DateValue = import_zod4.z.string().date().describe("Date in the format YYYY-MM-DD");
314
431
  var EmailValue = import_zod4.z.string().email();
315
432
  var CheckboxFieldValue = import_zod4.z.boolean();
316
433
  var NumberFieldValue = import_zod4.z.number();
434
+ var DataFieldValue = import_zod4.z.undefined();
317
435
  var FieldValue = import_zod4.z.union([
318
436
  TextValue,
319
437
  DateValue,
@@ -322,7 +440,9 @@ var FieldValue = import_zod4.z.union([
322
440
  FileFieldValue,
323
441
  FileFieldWithOptionValue,
324
442
  UrbanAddressValue,
325
- RuralAddressValue
443
+ RuralAddressValue,
444
+ DataFieldValue,
445
+ GenericAddressValue
326
446
  ]);
327
447
  var FieldUpdateValue = import_zod4.z.union([
328
448
  TextValue,
@@ -332,40 +452,35 @@ var FieldUpdateValue = import_zod4.z.union([
332
452
  FileFieldValue,
333
453
  FileFieldWithOptionValue,
334
454
  UrbanAddressUpdateValue,
335
- RuralAddressUpdateValue
455
+ RuralAddressUpdateValue,
456
+ DataFieldValue,
457
+ GenericAddressUpdateValue
336
458
  ]);
337
459
 
338
460
  // ../commons/src/events/FieldConfig.ts
339
461
  var FieldId = import_zod5.z.string();
340
- var DependencyExpression = import_zod5.z.object({
341
- dependsOn: import_zod5.z.array(FieldId).default([]),
342
- expression: import_zod5.z.string()
343
- });
462
+ var ParentReference = import_zod5.z.object({
463
+ _fieldId: FieldId.optional()
464
+ }).optional();
344
465
  var BaseField = import_zod5.z.object({
345
466
  id: FieldId,
346
467
  defaultValue: import_zod5.z.union([
347
- // These are the currently supported default values types
348
- import_zod5.z.union([
349
- TextValue,
350
- RequiredTextValue,
351
- DateValue,
352
- NumberFieldValue,
353
- CheckboxFieldValue
354
- ]),
355
- DependencyExpression
468
+ TextValue,
469
+ NonEmptyTextValue,
470
+ DateValue,
471
+ NumberFieldValue,
472
+ CheckboxFieldValue
356
473
  ]).optional(),
357
- conditionals: import_zod5.z.array(ActionConditional).default([]).optional(),
474
+ parent: ParentReference,
475
+ conditionals: import_zod5.z.array(FieldConditional).default([]).optional(),
358
476
  required: import_zod5.z.boolean().default(false).optional(),
359
- disabled: import_zod5.z.boolean().default(false).optional(),
360
- hidden: import_zod5.z.boolean().default(false).optional(),
361
477
  placeholder: TranslationConfig.optional(),
362
478
  validation: import_zod5.z.array(
363
479
  import_zod5.z.object({
364
- validator: Conditional(),
480
+ validator: Conditional,
365
481
  message: TranslationConfig
366
482
  })
367
483
  ).default([]).optional(),
368
- dependsOn: import_zod5.z.array(FieldId).default([]).optional(),
369
484
  label: TranslationConfig,
370
485
  hideLabel: import_zod5.z.boolean().default(false).optional()
371
486
  });
@@ -374,7 +489,7 @@ var Divider = BaseField.extend({
374
489
  });
375
490
  var TextField = BaseField.extend({
376
491
  type: import_zod5.z.literal(FieldType.TEXT),
377
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional(),
492
+ defaultValue: NonEmptyTextValue.optional(),
378
493
  configuration: import_zod5.z.object({
379
494
  maxLength: import_zod5.z.number().optional().describe("Maximum length of the text"),
380
495
  type: import_zod5.z.enum(["text", "password"]).optional(),
@@ -384,7 +499,7 @@ var TextField = BaseField.extend({
384
499
  }).describe("Text input");
385
500
  var NumberField = BaseField.extend({
386
501
  type: import_zod5.z.literal(FieldType.NUMBER),
387
- defaultValue: import_zod5.z.union([NumberFieldValue, DependencyExpression]).optional(),
502
+ defaultValue: NumberFieldValue.optional(),
388
503
  configuration: import_zod5.z.object({
389
504
  min: import_zod5.z.number().optional().describe("Minimum value"),
390
505
  max: import_zod5.z.number().optional().describe("Maximum value"),
@@ -394,7 +509,7 @@ var NumberField = BaseField.extend({
394
509
  }).describe("Number input");
395
510
  var TextAreaField = BaseField.extend({
396
511
  type: import_zod5.z.literal(FieldType.TEXTAREA),
397
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional(),
512
+ defaultValue: NonEmptyTextValue.optional(),
398
513
  configuration: import_zod5.z.object({
399
514
  maxLength: import_zod5.z.number().optional().describe("Maximum length of the text"),
400
515
  rows: import_zod5.z.number().optional().describe("Number of visible text lines"),
@@ -403,26 +518,36 @@ var TextAreaField = BaseField.extend({
403
518
  postfix: TranslationConfig.optional()
404
519
  }).default({ rows: 4 }).optional()
405
520
  }).describe("Multiline text input");
521
+ var ImageMimeType = import_zod5.z.enum([
522
+ "image/png",
523
+ "image/jpg",
524
+ "image/jpeg",
525
+ "image/svg+xml"
526
+ ]);
527
+ var MimeType = ImageMimeType;
528
+ var DEFAULT_MAX_FILE_SIZE_BYTES = 5 * 1024 * 1024;
406
529
  var SignatureField = BaseField.extend({
407
530
  type: import_zod5.z.literal(FieldType.SIGNATURE),
408
531
  signaturePromptLabel: TranslationConfig.describe(
409
532
  "Title of the signature modal"
410
533
  ),
411
534
  configuration: import_zod5.z.object({
412
- maxSizeMb: import_zod5.z.number().optional().describe("Maximum file size in MB"),
413
- allowedFileFormats: import_zod5.z.array(import_zod5.z.string()).optional().describe("List of allowed file formats for the signature")
414
- }).default({}).optional()
535
+ maxFileSize: import_zod5.z.number().describe("Maximum file size in bytes").default(DEFAULT_MAX_FILE_SIZE_BYTES),
536
+ acceptedFileTypes: MimeType.array().optional().describe("List of allowed file formats for the signature")
537
+ }).default({
538
+ maxFileSize: DEFAULT_MAX_FILE_SIZE_BYTES
539
+ })
415
540
  }).describe("Signature input field");
416
541
  var EmailField = BaseField.extend({
417
542
  type: import_zod5.z.literal(FieldType.EMAIL),
418
543
  configuration: import_zod5.z.object({
419
544
  maxLength: import_zod5.z.number().optional().describe("Maximum length of the text")
420
545
  }).default({ maxLength: 10 }).optional(),
421
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional()
546
+ defaultValue: NonEmptyTextValue.optional()
422
547
  });
423
548
  var DateField = BaseField.extend({
424
549
  type: import_zod5.z.literal(FieldType.DATE),
425
- defaultValue: import_zod5.z.union([DateValue, DependencyExpression]).optional(),
550
+ defaultValue: DateValue.optional(),
426
551
  configuration: import_zod5.z.object({
427
552
  notice: TranslationConfig.describe(
428
553
  "Text to display above the date input"
@@ -441,7 +566,7 @@ var HtmlFontVariant = import_zod5.z.enum([
441
566
  ]);
442
567
  var Paragraph = BaseField.extend({
443
568
  type: import_zod5.z.literal(FieldType.PARAGRAPH),
444
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional(),
569
+ defaultValue: NonEmptyTextValue.optional(),
445
570
  configuration: import_zod5.z.object({
446
571
  styles: import_zod5.z.object({
447
572
  fontVariant: HtmlFontVariant.optional()
@@ -450,17 +575,22 @@ var Paragraph = BaseField.extend({
450
575
  }).describe("A read-only HTML <p> paragraph");
451
576
  var PageHeader = BaseField.extend({
452
577
  type: import_zod5.z.literal(FieldType.PAGE_HEADER),
453
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional()
578
+ defaultValue: NonEmptyTextValue.optional()
454
579
  }).describe("A read-only header component for form pages");
455
580
  var File = BaseField.extend({
456
581
  type: import_zod5.z.literal(FieldType.FILE),
457
- options: import_zod5.z.object({
582
+ configuration: import_zod5.z.object({
583
+ maxFileSize: import_zod5.z.number().describe("Maximum file size in bytes").default(DEFAULT_MAX_FILE_SIZE_BYTES),
584
+ acceptedFileTypes: MimeType.array().optional().describe("List of allowed file formats for the signature"),
458
585
  style: import_zod5.z.object({
459
- fullWidth: import_zod5.z.boolean().describe(
586
+ width: import_zod5.z.enum(["full", "auto"]).optional().describe(
460
587
  "Whether the file upload button should take the full width of the container or not"
461
588
  )
462
- })
463
- }).optional()
589
+ }).optional(),
590
+ fileName: TranslationConfig.optional()
591
+ }).default({
592
+ maxFileSize: DEFAULT_MAX_FILE_SIZE_BYTES
593
+ })
464
594
  }).describe("File upload");
465
595
  var SelectOption = import_zod5.z.object({
466
596
  value: import_zod5.z.string().describe("The value of the option"),
@@ -468,7 +598,7 @@ var SelectOption = import_zod5.z.object({
468
598
  });
469
599
  var RadioGroup = BaseField.extend({
470
600
  type: import_zod5.z.literal(FieldType.RADIO_GROUP),
471
- defaultValue: import_zod5.z.union([TextValue, DependencyExpression]).optional(),
601
+ defaultValue: TextValue.optional(),
472
602
  options: import_zod5.z.array(SelectOption).describe("A list of options"),
473
603
  configuration: import_zod5.z.object({
474
604
  styles: import_zod5.z.object({
@@ -478,7 +608,7 @@ var RadioGroup = BaseField.extend({
478
608
  }).describe("Grouped radio options");
479
609
  var BulletList = BaseField.extend({
480
610
  type: import_zod5.z.literal(FieldType.BULLET_LIST),
481
- defaultValue: import_zod5.z.string().optional(),
611
+ defaultValue: TextValue.optional(),
482
612
  items: import_zod5.z.array(TranslationConfig).describe("A list of items"),
483
613
  configuration: import_zod5.z.object({
484
614
  styles: import_zod5.z.object({
@@ -488,48 +618,75 @@ var BulletList = BaseField.extend({
488
618
  }).describe("A list of bullet points");
489
619
  var Select = BaseField.extend({
490
620
  type: import_zod5.z.literal(FieldType.SELECT),
491
- defaultValue: import_zod5.z.union([TextValue, DependencyExpression]).optional(),
621
+ defaultValue: TextValue.optional(),
492
622
  options: import_zod5.z.array(SelectOption).describe("A list of options")
493
623
  }).describe("Select input");
494
624
  var Checkbox = BaseField.extend({
495
625
  type: import_zod5.z.literal(FieldType.CHECKBOX),
496
- defaultValue: import_zod5.z.union([CheckboxFieldValue, DependencyExpression]).optional()
626
+ defaultValue: CheckboxFieldValue.optional()
497
627
  }).describe("Boolean checkbox field");
498
628
  var Country = BaseField.extend({
499
629
  type: import_zod5.z.literal(FieldType.COUNTRY),
500
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional()
630
+ defaultValue: NonEmptyTextValue.optional()
501
631
  }).describe("Country select field");
632
+ var AdministrativeAreas = import_zod5.z.enum([
633
+ "ADMIN_STRUCTURE",
634
+ "HEALTH_FACILITY",
635
+ "CRVS_OFFICE"
636
+ ]);
502
637
  var AdministrativeAreaConfiguration = import_zod5.z.object({
503
638
  partOf: import_zod5.z.object({
504
- $data: import_zod5.z.string()
639
+ $declaration: import_zod5.z.string()
505
640
  }).optional().describe("Parent location"),
506
- type: import_zod5.z.enum(["ADMIN_STRUCTURE", "HEALTH_FACILITY", "CRVS_OFFICE"])
641
+ type: AdministrativeAreas
507
642
  }).describe("Administrative area options");
508
643
  var AdministrativeArea = BaseField.extend({
509
644
  type: import_zod5.z.literal(FieldType.ADMINISTRATIVE_AREA),
510
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional(),
645
+ defaultValue: NonEmptyTextValue.optional(),
511
646
  configuration: AdministrativeAreaConfiguration
512
647
  }).describe("Administrative area input field e.g. facility, office");
513
648
  var Location = BaseField.extend({
514
649
  type: import_zod5.z.literal(FieldType.LOCATION),
515
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional()
650
+ defaultValue: NonEmptyTextValue.optional()
516
651
  }).describe("Input field for a location");
517
652
  var FileUploadWithOptions = BaseField.extend({
518
653
  type: import_zod5.z.literal(FieldType.FILE_WITH_OPTIONS),
519
- options: import_zod5.z.array(SelectOption).describe("A list of options")
520
- }).describe("Select input");
654
+ options: import_zod5.z.array(SelectOption).describe("A list of options"),
655
+ configuration: import_zod5.z.object({
656
+ maxFileSize: import_zod5.z.number().describe("Maximum file size in bytes").default(DEFAULT_MAX_FILE_SIZE_BYTES),
657
+ acceptedFileTypes: MimeType.array().optional().describe("List of allowed file formats for the signature")
658
+ }).default({
659
+ maxFileSize: DEFAULT_MAX_FILE_SIZE_BYTES
660
+ })
661
+ });
521
662
  var Facility = BaseField.extend({
522
663
  type: import_zod5.z.literal(FieldType.FACILITY),
523
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional()
664
+ defaultValue: NonEmptyTextValue.optional()
524
665
  }).describe("Input field for a facility");
525
666
  var Office = BaseField.extend({
526
667
  type: import_zod5.z.literal(FieldType.OFFICE),
527
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional()
668
+ defaultValue: NonEmptyTextValue.optional()
528
669
  }).describe("Input field for an office");
529
670
  var Address = BaseField.extend({
530
671
  type: import_zod5.z.literal(FieldType.ADDRESS),
531
672
  defaultValue: AddressFieldValue.optional()
532
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
+ ]);
683
+ var DataField = BaseField.extend({
684
+ type: import_zod5.z.literal(FieldType.DATA),
685
+ configuration: import_zod5.z.object({
686
+ subtitle: TranslationConfig.optional(),
687
+ data: import_zod5.z.array(DataEntry)
688
+ })
689
+ }).describe("Data field for displaying read-only data");
533
690
  var FieldConfig = import_zod5.z.discriminatedUnion("type", [
534
691
  Address,
535
692
  TextField,
@@ -551,244 +708,331 @@ var FieldConfig = import_zod5.z.discriminatedUnion("type", [
551
708
  Office,
552
709
  SignatureField,
553
710
  EmailField,
554
- FileUploadWithOptions
711
+ FileUploadWithOptions,
712
+ DataField
555
713
  ]);
556
714
 
557
- // ../commons/src/events/FormConfig.ts
558
- 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({
559
718
  id: import_zod6.z.string().describe("Unique identifier for the page"),
560
719
  title: TranslationConfig.describe("Header title of the page"),
561
- fields: import_zod6.z.array(FieldConfig).describe("Fields to be rendered on the page")
720
+ fields: import_zod6.z.array(FieldConfig).describe("Fields to be rendered on the page"),
721
+ conditional: Conditional.optional().describe(
722
+ "Page will be shown if condition is met. If conditional is not defined, the page will be always shown."
723
+ )
562
724
  });
563
- var FormConfig = import_zod6.z.object({
564
- label: TranslationConfig.describe("Human readable description of the form"),
565
- version: import_zod6.z.object({
566
- id: import_zod6.z.string().describe(
567
- "Form version. Semantic versioning recommended. Example: 0.0.1"
568
- ),
569
- label: TranslationConfig.describe(
570
- "Human readable description of the version"
571
- )
572
- }),
573
- active: import_zod6.z.boolean().default(false).describe("Whether the form is active"),
574
- pages: import_zod6.z.array(FormPage),
575
- review: import_zod6.z.object({
576
- title: TranslationConfig.describe(
577
- "Title of the form to show in review page"
578
- ),
579
- fields: import_zod6.z.array(FieldConfig).describe("Fields to be rendered on the review page for metadata")
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({
729
+ verify: import_zod6.z.object({ label: TranslationConfig }),
730
+ cancel: import_zod6.z.object({
731
+ label: TranslationConfig,
732
+ confirmation: import_zod6.z.object({
733
+ title: TranslationConfig,
734
+ body: TranslationConfig
735
+ })
580
736
  })
737
+ }).describe("Actions available on the verification page");
738
+ var VerificationPageConfig = FormPageConfig.extend({
739
+ type: import_zod6.z.literal(PageTypes.enum.VERIFICATION),
740
+ actions: VerificationActionConfig
581
741
  });
742
+ var PageConfig = import_zod6.z.discriminatedUnion("type", [
743
+ FormPageConfig,
744
+ VerificationPageConfig
745
+ ]);
582
746
 
583
747
  // ../commons/src/events/ActionType.ts
748
+ var import_zod7 = require("zod");
584
749
  var ActionType = {
750
+ // Pre-declaration actions
751
+ DELETE: "DELETE",
585
752
  CREATE: "CREATE",
586
- ASSIGN: "ASSIGN",
587
- UNASSIGN: "UNASSIGN",
588
- REGISTER: "REGISTER",
589
- VALIDATE: "VALIDATE",
590
- REQUEST_CORRECTION: "REQUEST_CORRECTION",
591
- REJECT_CORRECTION: "REJECT_CORRECTION",
592
- APPROVE_CORRECTION: "APPROVE_CORRECTION",
593
- DETECT_DUPLICATE: "DETECT_DUPLICATE",
594
753
  NOTIFY: "NOTIFY",
754
+ // Declaration actions
595
755
  DECLARE: "DECLARE",
596
- DELETE: "DELETE",
597
- PRINT_CERTIFICATE: "PRINT_CERTIFICATE",
598
- CUSTOM: "CUSTOM",
756
+ VALIDATE: "VALIDATE",
757
+ REGISTER: "REGISTER",
758
+ // Declaration system actions. Non-configurable.
759
+ DETECT_DUPLICATE: "DETECT_DUPLICATE",
599
760
  REJECT: "REJECT",
761
+ // REJECT_DECLARATION
600
762
  MARKED_AS_DUPLICATE: "MARKED_AS_DUPLICATE",
601
- ARCHIVED: "ARCHIVED"
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"
602
774
  };
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]);
603
835
 
604
836
  // ../commons/src/events/ActionConfig.ts
605
- 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", [
606
840
  /** If conditional is defined, the action is shown to the user only if the condition is met */
607
841
  ShowConditional,
608
842
  /** If conditional is defined, the action is enabled only if the condition is met */
609
843
  EnableConditional
610
844
  ]);
611
- 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({
612
850
  label: TranslationConfig,
613
- conditionals: import_zod7.z.array(ActionConditional2).optional().default([]),
614
- draft: import_zod7.z.boolean().optional(),
615
- forms: import_zod7.z.array(FormConfig)
851
+ conditionals: import_zod9.z.array(ActionConditional2).optional().default([]),
852
+ draft: import_zod9.z.boolean().optional()
616
853
  });
617
854
  var DeclareConfig = ActionConfigBase.merge(
618
- import_zod7.z.object({
619
- type: import_zod7.z.literal(ActionType.DECLARE)
855
+ import_zod9.z.object({
856
+ type: import_zod9.z.literal(ActionType.DECLARE),
857
+ review: DeclarationReviewConfig
620
858
  })
621
859
  );
622
860
  var ValidateConfig = ActionConfigBase.merge(
623
- import_zod7.z.object({
624
- type: import_zod7.z.literal(ActionType.VALIDATE)
861
+ import_zod9.z.object({
862
+ type: import_zod9.z.literal(ActionType.VALIDATE),
863
+ review: DeclarationReviewConfig
625
864
  })
626
865
  );
627
- var RejectDeclarationConfig = ActionConfigBase.merge(
628
- import_zod7.z.object({
629
- type: import_zod7.z.literal(ActionType.REJECT),
630
- comment: import_zod7.z.string(),
631
- isDuplicate: import_zod7.z.boolean()
866
+ var RegisterConfig = ActionConfigBase.merge(
867
+ import_zod9.z.object({
868
+ type: import_zod9.z.literal(ActionType.REGISTER),
869
+ review: DeclarationReviewConfig
632
870
  })
633
871
  );
634
- var MarkedAsDuplicateConfig = ActionConfigBase.merge(
635
- import_zod7.z.object({
636
- type: import_zod7.z.literal(ActionType.MARKED_AS_DUPLICATE),
637
- comment: import_zod7.z.string(),
638
- duplicates: import_zod7.z.array(import_zod7.z.string()).describe("UUIDs of duplicate records")
872
+ var RejectDeclarationConfig = ActionConfigBase.merge(
873
+ import_zod9.z.object({
874
+ type: import_zod9.z.literal(ActionType.REJECT)
639
875
  })
640
876
  );
641
- var ArchivedConfig = ActionConfigBase.merge(
642
- import_zod7.z.object({
643
- type: import_zod7.z.literal(ActionType.ARCHIVED),
644
- comment: import_zod7.z.string(),
645
- isDuplicate: import_zod7.z.boolean()
877
+ var MarkedAsDuplicateConfig = ActionConfigBase.merge(
878
+ import_zod9.z.object({
879
+ type: import_zod9.z.literal(ActionType.MARKED_AS_DUPLICATE)
646
880
  })
647
881
  );
648
- var RegisterConfig = ActionConfigBase.merge(
649
- import_zod7.z.object({
650
- type: import_zod7.z.literal(ActionType.REGISTER)
882
+ var ArchiveConfig = ActionConfigBase.merge(
883
+ import_zod9.z.object({
884
+ type: import_zod9.z.literal(ActionType.ARCHIVE)
651
885
  })
652
886
  );
653
887
  var DeleteConfig = ActionConfigBase.merge(
654
- import_zod7.z.object({
655
- type: import_zod7.z.literal(ActionType.DELETE)
888
+ import_zod9.z.object({
889
+ type: import_zod9.z.literal(ActionType.DELETE)
656
890
  })
657
891
  );
658
892
  var PrintCertificateActionConfig = ActionConfigBase.merge(
659
- import_zod7.z.object({
660
- 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
661
896
  })
662
897
  );
663
898
  var RequestCorrectionConfig = ActionConfigBase.merge(
664
- import_zod7.z.object({
665
- type: import_zod7.z.literal(ActionType.REQUEST_CORRECTION),
666
- onboardingForm: import_zod7.z.array(FormPage),
667
- additionalDetailsForm: import_zod7.z.array(FormPage)
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)
668
903
  })
669
904
  );
670
905
  var RejectCorrectionConfig = ActionConfigBase.merge(
671
- import_zod7.z.object({
672
- type: import_zod7.z.literal(ActionType.REJECT_CORRECTION)
906
+ import_zod9.z.object({
907
+ type: import_zod9.z.literal(ActionType.REJECT_CORRECTION)
673
908
  })
674
909
  );
675
910
  var ApproveCorrectionConfig = ActionConfigBase.merge(
676
- import_zod7.z.object({
677
- type: import_zod7.z.literal(ActionType.APPROVE_CORRECTION)
678
- })
679
- );
680
- var CustomConfig = ActionConfigBase.merge(
681
- import_zod7.z.object({
682
- type: import_zod7.z.literal(ActionType.CUSTOM)
911
+ import_zod9.z.object({
912
+ type: import_zod9.z.literal(ActionType.APPROVE_CORRECTION)
683
913
  })
684
914
  );
685
- 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", [
686
935
  DeclareConfig,
687
936
  ValidateConfig,
688
- RejectDeclarationConfig,
689
- MarkedAsDuplicateConfig,
690
- ArchivedConfig,
691
- RegisterConfig,
692
- DeleteConfig,
693
- PrintCertificateActionConfig,
694
- RequestCorrectionConfig,
695
- RejectCorrectionConfig,
696
- ApproveCorrectionConfig,
697
- CustomConfig
937
+ RegisterConfig
698
938
  ]);
699
939
 
700
940
  // ../commons/src/events/offline/CertificateConfig.ts
701
- var import_zod8 = require("zod");
702
- var FontFamily = import_zod8.z.object({
703
- normal: import_zod8.z.string(),
704
- bold: import_zod8.z.string(),
705
- italics: import_zod8.z.string(),
706
- 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()
707
947
  });
708
- var CertificateConfig = import_zod8.z.object({
709
- id: import_zod8.z.string(),
710
- event: import_zod8.z.string(),
948
+ var CertificateConfig = import_zod10.z.object({
949
+ id: import_zod10.z.string(),
950
+ event: import_zod10.z.string(),
711
951
  label: TranslationConfig,
712
- isDefault: import_zod8.z.boolean(),
713
- fee: import_zod8.z.object({
714
- onTime: import_zod8.z.number(),
715
- late: import_zod8.z.number(),
716
- 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()
717
957
  }),
718
- svgUrl: import_zod8.z.string(),
719
- fonts: import_zod8.z.record(FontFamily).optional()
958
+ svgUrl: import_zod10.z.string(),
959
+ fonts: import_zod10.z.record(FontFamily).optional()
720
960
  });
721
961
  var CertificateTemplateConfig = CertificateConfig.extend({
722
- hash: import_zod8.z.string().optional(),
723
- svg: import_zod8.z.string()
962
+ hash: import_zod10.z.string().optional(),
963
+ svg: import_zod10.z.string()
724
964
  });
725
965
 
726
966
  // ../commons/src/events/offline/LanguageConfig.ts
727
- var import_zod9 = require("zod");
728
- var LanguageConfig = import_zod9.z.object({
729
- lang: import_zod9.z.string(),
967
+ var import_zod11 = require("zod");
968
+ var LanguageConfig = import_zod11.z.object({
969
+ lang: import_zod11.z.string(),
730
970
  /**
731
971
  * client.csv contents
732
972
  */
733
- messages: import_zod9.z.record(import_zod9.z.string())
973
+ messages: import_zod11.z.record(import_zod11.z.string())
734
974
  });
735
975
 
736
976
  // ../commons/src/events/EventConfig.ts
737
- var import_zod18 = require("zod");
977
+ var import_zod16 = require("zod");
738
978
 
739
979
  // ../commons/src/events/DeduplicationConfig.ts
740
- var import_zod10 = require("zod");
741
- var FieldReference = import_zod10.z.string();
742
- var Matcher = import_zod10.z.object({
743
- fieldId: import_zod10.z.string(),
744
- options: import_zod10.z.object({
745
- 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()
746
988
  }).optional().default({})
747
989
  });
748
990
  var FuzzyMatcher = Matcher.extend({
749
- type: import_zod10.z.literal("fuzzy"),
750
- options: import_zod10.z.object({
991
+ type: import_zod12.z.literal("fuzzy"),
992
+ options: import_zod12.z.object({
751
993
  /**
752
994
  * Names of length 3 or less characters = 0 edits allowed
753
995
  * Names of length 4 - 6 characters = 1 edit allowed
754
996
  * Names of length >7 characters = 2 edits allowed
755
997
  */
756
- fuzziness: import_zod10.z.union([import_zod10.z.string(), import_zod10.z.number()]).optional().default("AUTO:4,7"),
757
- 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)
758
1000
  }).optional().default({})
759
1001
  });
760
1002
  var StrictMatcher = Matcher.extend({
761
- type: import_zod10.z.literal("strict"),
762
- options: import_zod10.z.object({
763
- 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)
764
1006
  }).optional().default({})
765
1007
  });
766
1008
  var DateRangeMatcher = Matcher.extend({
767
- type: import_zod10.z.literal("dateRange"),
768
- options: import_zod10.z.object({
769
- days: import_zod10.z.number(),
1009
+ type: import_zod12.z.literal("dateRange"),
1010
+ options: import_zod12.z.object({
1011
+ days: import_zod12.z.number(),
770
1012
  origin: FieldReference,
771
- boost: import_zod10.z.number().optional().default(1)
1013
+ boost: import_zod12.z.number().optional().default(1)
772
1014
  })
773
1015
  });
774
1016
  var DateDistanceMatcher = Matcher.extend({
775
- type: import_zod10.z.literal("dateDistance"),
776
- options: import_zod10.z.object({
777
- days: import_zod10.z.number(),
1017
+ type: import_zod12.z.literal("dateDistance"),
1018
+ options: import_zod12.z.object({
1019
+ days: import_zod12.z.number(),
778
1020
  origin: FieldReference,
779
- boost: import_zod10.z.number().optional().default(1)
1021
+ boost: import_zod12.z.number().optional().default(1)
780
1022
  })
781
1023
  });
782
- var And = import_zod10.z.object({
783
- type: import_zod10.z.literal("and"),
784
- 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())
785
1028
  });
786
- var Or = import_zod10.z.object({
787
- type: import_zod10.z.literal("or"),
788
- 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())
789
1033
  });
790
- var Clause = import_zod10.z.lazy(
791
- () => import_zod10.z.discriminatedUnion("type", [
1034
+ var Clause = import_zod12.z.lazy(
1035
+ () => import_zod12.z.discriminatedUnion("type", [
792
1036
  And,
793
1037
  Or,
794
1038
  FuzzyMatcher,
@@ -796,275 +1040,73 @@ var Clause = import_zod10.z.lazy(
796
1040
  DateRangeMatcher,
797
1041
  DateDistanceMatcher
798
1042
  ])
799
- );
800
- var DeduplicationConfig = import_zod10.z.object({
801
- id: import_zod10.z.string(),
1043
+ ).openapi({
1044
+ ref: "Clause"
1045
+ });
1046
+ var DeduplicationConfig = import_zod12.z.object({
1047
+ id: import_zod12.z.string(),
802
1048
  label: TranslationConfig,
803
1049
  query: Clause
804
1050
  });
805
1051
 
806
1052
  // ../commons/src/events/SummaryConfig.ts
807
- var import_zod11 = require("zod");
808
- var Field = import_zod11.z.object({
809
- 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"),
810
1063
  value: TranslationConfig.describe(
811
1064
  "Summary field value. Can utilise values defined in configuration and EventMetadata"
812
1065
  ),
813
1066
  label: TranslationConfig,
814
1067
  emptyValueMessage: TranslationConfig.optional()
815
- });
816
- var Title = import_zod11.z.object({
817
- id: import_zod11.z.string(),
818
- label: TranslationConfig.describe("Title content"),
819
- emptyValueMessage: TranslationConfig.optional()
820
- });
821
- var SummaryConfig = import_zod11.z.object({
822
- title: Title.describe("Title of summary view."),
823
- 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.")
824
1071
  }).describe("Configuration for summary in event.");
825
1072
 
826
- // ../commons/src/events/WorkqueueConfig.ts
827
- var import_zod13 = require("zod");
828
-
829
- // ../commons/src/events/EventMetadata.ts
830
- var import_zod12 = require("zod");
831
- var EventStatus = {
832
- CREATED: "CREATED",
833
- NOTIFIED: "NOTIFIED",
834
- DECLARED: "DECLARED",
835
- VALIDATED: "VALIDATED",
836
- REGISTERED: "REGISTERED",
837
- CERTIFIED: "CERTIFIED",
838
- REJECTED: "REJECTED",
839
- ARCHIVED: "ARCHIVED"
840
- };
841
- var eventStatuses = Object.values(EventStatus);
842
- var EventStatuses = import_zod12.z.nativeEnum(EventStatus);
843
- var EventMetadata = import_zod12.z.object({
844
- id: import_zod12.z.string(),
845
- type: import_zod12.z.string(),
846
- status: EventStatuses,
847
- createdAt: import_zod12.z.string().datetime(),
848
- createdBy: import_zod12.z.string(),
849
- createdAtLocation: import_zod12.z.string(),
850
- modifiedAt: import_zod12.z.string().datetime(),
851
- assignedTo: import_zod12.z.string().nullish(),
852
- updatedBy: import_zod12.z.string(),
853
- trackingId: import_zod12.z.string()
854
- });
855
- var eventMetadataLabelMap = {
856
- "event.assignedTo": {
857
- id: "event.assignedTo.label",
858
- defaultMessage: "Assigned To",
859
- description: "Assigned To"
860
- },
861
- "event.createdAt": {
862
- id: "event.createdAt.label",
863
- defaultMessage: "Created",
864
- description: "Created At"
865
- },
866
- "event.createdAtLocation": {
867
- id: "event.createdAtLocation.label",
868
- defaultMessage: "Location",
869
- description: "Created At Location"
870
- },
871
- "event.createdBy": {
872
- id: "event.createdBy.label",
873
- defaultMessage: "Created By",
874
- description: "Created By"
875
- },
876
- "event.id": {
877
- id: "event.id.label",
878
- defaultMessage: "ID",
879
- description: "ID"
880
- },
881
- "event.modifiedAt": {
882
- id: "event.modifiedAt.label",
883
- defaultMessage: "Updated",
884
- description: "Modified At"
885
- },
886
- "event.status": {
887
- id: "event.status.label",
888
- defaultMessage: "Status",
889
- description: "Status"
890
- },
891
- "event.type": {
892
- id: "event.type.label",
893
- defaultMessage: "Type",
894
- description: "Type"
895
- },
896
- "event.updatedBy": {
897
- id: "event.updatedBy.label",
898
- defaultMessage: "Updated By",
899
- description: "Updated By"
900
- },
901
- "event.trackingId": {
902
- id: "event.trackingId.label",
903
- defaultMessage: "Tracking ID",
904
- description: "Tracking ID"
905
- }
906
- };
907
-
908
- // ../commons/src/events/WorkqueueConfig.ts
909
- var WorkqueueConfig = import_zod13.z.object({
910
- id: import_zod13.z.string().describe("Unique identifier for workqueue."),
911
- filters: import_zod13.z.array(
912
- import_zod13.z.object({
913
- status: import_zod13.z.array(EventStatuses).describe("Defines which statusese are included in the workqueue.")
914
- })
915
- ).describe("Filters to be applied to workqueue.")
916
- }).describe("Configuration for workqueue.");
917
-
918
1073
  // ../commons/src/events/AdvancedSearchConfig.ts
919
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
+ ]);
920
1095
  var AdvancedSearchConfig = import_zod14.z.object({
921
1096
  title: TranslationConfig.describe("Advanced search tab title"),
922
- fields: import_zod14.z.array(
923
- import_zod14.z.object({
924
- fieldId: import_zod14.z.string(),
925
- config: import_zod14.z.object({
926
- type: import_zod14.z.enum(["FUZZY", "EXACT", "RANGE"]).describe("Determines the type of field")
927
- }).optional().describe("Configuration options for the field")
928
- })
929
- ).optional().default([]).describe("Advanced search fields.")
1097
+ fields: import_zod14.z.array(SearchField).describe("Advanced search fields.")
930
1098
  });
931
1099
 
932
1100
  // ../commons/src/events/utils.ts
933
1101
  var import_lodash = require("lodash");
934
1102
 
935
- // ../commons/src/workqueues/WorkqueueConfig.ts
936
- var import_zod16 = require("zod");
937
-
938
- // ../commons/src/workqueues/defaultColumns.ts
939
- var import_zod15 = require("zod");
940
- var WorkQueueColumnConfig = import_zod15.z.object({
941
- id: import_zod15.z.string(),
942
- label: TranslationConfig
943
- });
944
- var defaultColumns = {
945
- event: {
946
- id: "event",
947
- label: {
948
- defaultMessage: "Event",
949
- description: "This is the label for the workqueue column",
950
- id: "workqueue.default.column.event"
951
- }
952
- },
953
- status: {
954
- id: "status",
955
- label: {
956
- defaultMessage: "Status",
957
- description: "This is the label for the workqueue column",
958
- id: "workqueue.default.column.status"
959
- }
960
- },
961
- createdAt: {
962
- id: "createdAt",
963
- label: {
964
- defaultMessage: "Created",
965
- description: "This is the label for the workqueue column",
966
- id: "workqueue.default.column.createdAt"
967
- }
968
- },
969
- modifiedAt: {
970
- id: "modifiedAt",
971
- label: {
972
- defaultMessage: "Modified",
973
- description: "This is the label for the workqueue column",
974
- id: "workqueue.default.column.modifiedAt"
975
- }
976
- }
977
- };
978
- var DefaultColumnKeys = import_zod15.z.enum(
979
- Object.keys(defaultColumns)
980
- );
981
-
982
- // ../commons/src/workqueues/WorkqueueConfig.ts
983
- var rootWorkqueueConfig = import_zod16.z.object({
984
- id: import_zod16.z.string(),
985
- title: TranslationConfig,
986
- columns: import_zod16.z.array(WorkQueueColumnConfig),
987
- defaultColumns: import_zod16.z.array(DefaultColumnKeys)
988
- });
989
- var defineWorkqueue = (config) => rootWorkqueueConfig.parse(config);
990
-
991
- // ../commons/src/workqueues/all.ts
992
- var allWorkqueue = defineWorkqueue({
993
- id: "all",
994
- title: {
995
- defaultMessage: "All events",
996
- description: "This is the label for the workqueue",
997
- id: "workqueue.all.label"
998
- },
999
- columns: [
1000
- {
1001
- id: "title",
1002
- label: {
1003
- defaultMessage: "Title",
1004
- description: "This is the label for the workqueue column",
1005
- id: "workqueue.all.column.title"
1006
- }
1007
- }
1008
- ],
1009
- defaultColumns: ["event", "status", "createdAt", "modifiedAt"]
1010
- });
1011
-
1012
- // ../commons/src/workqueues/readyForReview.ts
1013
- var inReviewWorkqueue = defineWorkqueue({
1014
- id: "ready-for-review",
1015
- title: {
1016
- defaultMessage: "Ready for review",
1017
- description: "Label for in review workqueue",
1018
- id: "event.workqueue.in-review.label"
1019
- },
1020
- columns: [
1021
- {
1022
- id: "title",
1023
- label: {
1024
- defaultMessage: "Title",
1025
- description: "This is the label for the workqueue column",
1026
- id: "workqueue.in-reveiw.column.title"
1027
- }
1028
- }
1029
- ],
1030
- defaultColumns: ["event", "createdAt", "modifiedAt"]
1031
- });
1032
-
1033
- // ../commons/src/workqueues/readyToPrint.ts
1034
- var registeredWorkqueue = defineWorkqueue({
1035
- id: "registered",
1036
- title: {
1037
- defaultMessage: "Ready to print",
1038
- description: "Label for registered workqueue",
1039
- id: "event.workqueue.registered.label"
1040
- },
1041
- columns: [
1042
- {
1043
- id: "title",
1044
- label: {
1045
- defaultMessage: "Title",
1046
- description: "This is the label for the workqueue column",
1047
- id: "workqueue.registered.column.title"
1048
- }
1049
- }
1050
- ],
1051
- defaultColumns: ["event", "createdAt", "modifiedAt"]
1052
- });
1053
-
1054
- // ../commons/src/workqueues/index.ts
1055
- var workqueues = {
1056
- all: allWorkqueue,
1057
- registered: registeredWorkqueue,
1058
- inReview: inReviewWorkqueue
1059
- };
1060
-
1061
1103
  // ../commons/src/conditionals/validate.ts
1062
1104
  var import_ajv = __toESM(require("ajv"));
1063
1105
  var import_ajv_formats = __toESM(require("ajv-formats"));
1064
1106
  var import_date_fns = require("date-fns");
1065
1107
 
1066
1108
  // ../commons/src/events/FieldTypeMapping.ts
1067
- var import_zod17 = require("zod");
1109
+ var import_zod15 = require("zod");
1068
1110
  function mapFieldTypeToZod(type, required) {
1069
1111
  let schema;
1070
1112
  switch (type) {
@@ -1088,8 +1130,7 @@ function mapFieldTypeToZod(type, required) {
1088
1130
  case FieldType.FACILITY:
1089
1131
  case FieldType.OFFICE:
1090
1132
  case FieldType.SIGNATURE:
1091
- case FieldType.HIDDEN:
1092
- schema = required ? RequiredTextValue : TextValue;
1133
+ schema = required ? NonEmptyTextValue : TextValue;
1093
1134
  break;
1094
1135
  case FieldType.NUMBER:
1095
1136
  schema = NumberFieldValue;
@@ -1106,6 +1147,9 @@ function mapFieldTypeToZod(type, required) {
1106
1147
  case FieldType.ADDRESS:
1107
1148
  schema = AddressFieldUpdateValue;
1108
1149
  break;
1150
+ case FieldType.DATA:
1151
+ schema = DataFieldValue;
1152
+ break;
1109
1153
  }
1110
1154
  return required ? schema : schema.nullish();
1111
1155
  }
@@ -1114,7 +1158,7 @@ function createValidationSchema(config) {
1114
1158
  for (const field2 of config) {
1115
1159
  shape[field2.id] = mapFieldTypeToZod(field2.type, field2.required);
1116
1160
  }
1117
- return import_zod17.z.object(shape);
1161
+ return import_zod15.z.object(shape);
1118
1162
  }
1119
1163
  function mapFieldTypeToMockValue(field2, i) {
1120
1164
  switch (field2.type) {
@@ -1140,6 +1184,7 @@ function mapFieldTypeToMockValue(field2, i) {
1140
1184
  case FieldType.ADDRESS:
1141
1185
  return {
1142
1186
  country: "FAR",
1187
+ addressType: AddressType.DOMESTIC,
1143
1188
  province: "a45b982a-5c7b-4bd9-8fd8-a42d0994054c",
1144
1189
  district: "5ef450bc-712d-48ad-93f3-8da0fa453baa",
1145
1190
  urbanOrRural: "URBAN",
@@ -1161,25 +1206,73 @@ function mapFieldTypeToMockValue(field2, i) {
1161
1206
  };
1162
1207
  case FieldType.FILE_WITH_OPTIONS:
1163
1208
  return null;
1209
+ case FieldType.DATA:
1210
+ return {};
1164
1211
  }
1165
1212
  }
1166
- var isParagraphFieldType = (field2) => {
1167
- return field2.config.type === FieldType.PARAGRAPH;
1168
- };
1169
- var isDateFieldType = (field2) => {
1170
- return field2.config.type === FieldType.DATE;
1171
- };
1172
- var isPageHeaderFieldType = (field2) => {
1173
- return field2.config.type === FieldType.PAGE_HEADER;
1174
- };
1175
- var isTextFieldType = (field2) => {
1176
- return field2.config.type === FieldType.TEXT;
1177
- };
1178
- var isNumberFieldType = (field2) => {
1179
- return field2.config.type === FieldType.NUMBER;
1180
- };
1181
- var isTextAreaFieldType = (field2) => {
1182
- return field2.config.type === FieldType.TEXTAREA;
1213
+ function mapFieldTypeToEmptyValue(field2) {
1214
+ switch (field2.type) {
1215
+ case FieldType.DIVIDER:
1216
+ case FieldType.TEXT:
1217
+ case FieldType.TEXTAREA:
1218
+ case FieldType.BULLET_LIST:
1219
+ case FieldType.PAGE_HEADER:
1220
+ case FieldType.LOCATION:
1221
+ case FieldType.SELECT:
1222
+ case FieldType.COUNTRY:
1223
+ case FieldType.RADIO_GROUP:
1224
+ case FieldType.SIGNATURE:
1225
+ case FieldType.PARAGRAPH:
1226
+ case FieldType.ADMINISTRATIVE_AREA:
1227
+ case FieldType.FACILITY:
1228
+ case FieldType.OFFICE:
1229
+ case FieldType.NUMBER:
1230
+ case FieldType.EMAIL:
1231
+ case FieldType.DATE:
1232
+ case FieldType.CHECKBOX:
1233
+ case FieldType.DATA:
1234
+ return null;
1235
+ case FieldType.ADDRESS:
1236
+ return {
1237
+ country: null,
1238
+ addressType: AddressType.DOMESTIC,
1239
+ province: null,
1240
+ district: null,
1241
+ urbanOrRural: "URBAN",
1242
+ // Default to urban needed for validation
1243
+ town: null,
1244
+ residentialArea: null,
1245
+ street: null,
1246
+ number: null,
1247
+ zipCode: null
1248
+ };
1249
+ case FieldType.FILE:
1250
+ return {
1251
+ filename: "",
1252
+ originalFilename: "",
1253
+ type: ""
1254
+ };
1255
+ case FieldType.FILE_WITH_OPTIONS:
1256
+ return [];
1257
+ }
1258
+ }
1259
+ var isParagraphFieldType = (field2) => {
1260
+ return field2.config.type === FieldType.PARAGRAPH;
1261
+ };
1262
+ var isDateFieldType = (field2) => {
1263
+ return field2.config.type === FieldType.DATE;
1264
+ };
1265
+ var isPageHeaderFieldType = (field2) => {
1266
+ return field2.config.type === FieldType.PAGE_HEADER;
1267
+ };
1268
+ var isTextFieldType = (field2) => {
1269
+ return field2.config.type === FieldType.TEXT;
1270
+ };
1271
+ var isNumberFieldType = (field2) => {
1272
+ return field2.config.type === FieldType.NUMBER;
1273
+ };
1274
+ var isTextAreaFieldType = (field2) => {
1275
+ return field2.config.type === FieldType.TEXTAREA;
1183
1276
  };
1184
1277
  var isSignatureFieldType = (field2) => {
1185
1278
  return field2.config.type === FieldType.SIGNATURE;
@@ -1226,21 +1319,36 @@ var isFacilityFieldType = (field2) => {
1226
1319
  var isOfficeFieldType = (field2) => {
1227
1320
  return field2.config.type === FieldType.OFFICE;
1228
1321
  };
1322
+ var isDataFieldType = (field2) => {
1323
+ return field2.config.type === FieldType.DATA;
1324
+ };
1229
1325
 
1230
1326
  // ../commons/src/conditionals/validate.ts
1231
1327
  var ajv = new import_ajv.default({
1232
- $data: true
1328
+ $data: true,
1329
+ allowUnionTypes: true
1233
1330
  });
1234
1331
  (0, import_ajv_formats.default)(ajv);
1235
1332
  function validate(schema, data) {
1236
1333
  return ajv.validate(schema, data);
1237
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
+ }
1238
1341
  function getConditionalActionsForField(field2, values) {
1239
1342
  if (!field2.conditionals) {
1240
1343
  return [];
1241
1344
  }
1242
1345
  return field2.conditionals.filter((conditional) => validate(conditional.conditional, values)).map((conditional) => conditional.type);
1243
1346
  }
1347
+ function areConditionsMet(conditions, values) {
1348
+ return conditions.every(
1349
+ (condition) => isConditionMet(condition.conditional, values)
1350
+ );
1351
+ }
1244
1352
  function isFieldConditionMet(field2, form, conditionalType) {
1245
1353
  const hasRule = (field2.conditionals ?? []).some(
1246
1354
  (conditional) => conditional.type === conditionalType
@@ -1259,91 +1367,88 @@ function isFieldConditionMet(field2, form, conditionalType) {
1259
1367
  function isFieldVisible(field2, form) {
1260
1368
  return isFieldConditionMet(field2, form, ConditionalType.SHOW);
1261
1369
  }
1370
+ function isFieldEmptyAndNotRequired(field2, form) {
1371
+ const fieldValue = form[field2.id];
1372
+ return !field2.required && (fieldValue === void 0 || fieldValue === "");
1373
+ }
1262
1374
  function isFieldEnabled(field2, form) {
1263
1375
  return isFieldConditionMet(field2, form, ConditionalType.ENABLE);
1264
1376
  }
1265
- var zodToIntlErrorMap = (issue, _ctx) => {
1266
- if (issue.code === "invalid_string" && issue.validation === "date") {
1267
- return {
1268
- message: {
1269
- message: {
1270
- defaultMessage: "Invalid date. Please use the format YYYY-MM-DD",
1271
- description: "This is the error message for invalid date fields",
1272
- id: "v2.error.invalidDate"
1273
- }
1274
- }
1275
- };
1276
- }
1277
- if (issue.code === "invalid_string" && issue.validation === "email") {
1278
- return {
1279
- message: {
1280
- message: {
1281
- defaultMessage: "Invalid email address",
1282
- description: "This is the error message for invalid email fields",
1283
- id: "v2.error.invalidEmail"
1284
- }
1285
- }
1286
- };
1287
- }
1288
- if (issue.code === "invalid_type" && issue.expected !== issue.received && issue.received === "undefined" || issue.code === "too_small" && issue.message === void 0) {
1289
- return {
1290
- message: {
1291
- message: {
1292
- defaultMessage: "Required for registration",
1293
- description: "This is the error message for required fields",
1294
- id: "v2.error.required"
1295
- }
1296
- }
1297
- };
1377
+ function isFieldDisplayedOnReview(field2, form) {
1378
+ return isFieldVisible(field2, form) && isFieldConditionMet(field2, form, ConditionalType.DISPLAY_ON_REVIEW);
1379
+ }
1380
+ var errorMessages = {
1381
+ hiddenField: {
1382
+ id: "v2.error.hidden",
1383
+ defaultMessage: "Hidden or disabled field should not receive a value",
1384
+ description: "Error message when field is hidden or disabled, but a value was received"
1385
+ },
1386
+ invalidDate: {
1387
+ defaultMessage: "Invalid date field",
1388
+ description: "Error message when date field is invalid",
1389
+ id: "v2.error.invalidDate"
1390
+ },
1391
+ invalidEmail: {
1392
+ defaultMessage: "Invalid email address",
1393
+ description: "Error message when email address is invalid",
1394
+ id: "v2.error.invalidEmail"
1395
+ },
1396
+ requiredField: {
1397
+ defaultMessage: "Required for registration",
1398
+ description: "Error message when required field is missing",
1399
+ id: "v2.error.required"
1400
+ },
1401
+ invalidInput: {
1402
+ defaultMessage: "Invalid input",
1403
+ description: "Error message when generic field is invalid",
1404
+ id: "v2.error.invalid"
1298
1405
  }
1406
+ };
1407
+ function createIntlError(message) {
1299
1408
  return {
1300
1409
  message: {
1301
- message: {
1302
- defaultMessage: "Invalid input",
1303
- description: "This is the error message for invalid field value",
1304
- id: "v2.error.invalid"
1305
- }
1410
+ message
1306
1411
  }
1307
1412
  };
1308
- };
1309
- function getFieldValidationErrors({
1310
- field: field2,
1311
- values
1312
- }) {
1313
- const conditionalParameters = {
1314
- $form: values,
1315
- $now: (0, import_date_fns.formatISO)(/* @__PURE__ */ new Date(), { representation: "date" })
1316
- };
1317
- if (!isFieldVisible(field2, values) || !isFieldEnabled(field2, values)) {
1318
- if (values[field2.id]) {
1319
- return {
1320
- errors: [
1321
- {
1322
- message: {
1323
- id: "v2.error.hidden",
1324
- defaultMessage: "Hidden or disabled field should not receive a value",
1325
- description: "Error message when field is hidden or disabled, but a value was received"
1326
- }
1413
+ }
1414
+ function zodToIntlErrorMap(issue, _ctx) {
1415
+ switch (issue.code) {
1416
+ case "invalid_string": {
1417
+ if (_ctx.data === "") {
1418
+ return createIntlError(errorMessages.requiredField);
1419
+ }
1420
+ if (issue.validation === "date") {
1421
+ return createIntlError(errorMessages.invalidDate);
1422
+ }
1423
+ if (issue.validation === "email") {
1424
+ return createIntlError(errorMessages.invalidEmail);
1425
+ }
1426
+ break;
1427
+ }
1428
+ case "invalid_type": {
1429
+ if (issue.expected !== issue.received && issue.received === "undefined") {
1430
+ return createIntlError(errorMessages.requiredField);
1431
+ }
1432
+ break;
1433
+ }
1434
+ case "too_small": {
1435
+ if (issue.message === void 0) {
1436
+ return createIntlError(errorMessages.requiredField);
1437
+ }
1438
+ break;
1439
+ }
1440
+ case "invalid_union": {
1441
+ for (const { issues } of issue.unionErrors) {
1442
+ for (const e of issues) {
1443
+ if (zodToIntlErrorMap(e, _ctx).message.message.id !== "v2.error.required") {
1444
+ return createIntlError(errorMessages.invalidInput);
1327
1445
  }
1328
- ]
1329
- };
1446
+ }
1447
+ }
1448
+ return createIntlError(errorMessages.requiredField);
1330
1449
  }
1331
- return {
1332
- errors: []
1333
- };
1334
1450
  }
1335
- const fieldValidationResult = validateFieldInput({
1336
- field: field2,
1337
- value: values[field2.id]
1338
- });
1339
- const customValidationResults = runCustomFieldValidations({
1340
- field: field2,
1341
- conditionalParameters
1342
- });
1343
- return {
1344
- // Assumes that custom validation errors are more important than field validation errors
1345
- errors: [...customValidationResults, ...fieldValidationResult]
1346
- };
1451
+ return createIntlError(errorMessages.invalidInput);
1347
1452
  }
1348
1453
  function runCustomFieldValidations({
1349
1454
  field: field2,
@@ -1366,149 +1471,232 @@ function validateFieldInput({
1366
1471
  );
1367
1472
  return rawError.error?.issues.map((issue) => issue.message) ?? [];
1368
1473
  }
1369
-
1370
- // ../commons/src/events/utils.ts
1371
- function isMetadataField(field2) {
1372
- return field2 in eventMetadataLabelMap;
1373
- }
1374
- var findInputPageFields = (config) => {
1375
- return (0, import_lodash.flattenDeep)(
1376
- config.actions.map(
1377
- ({ forms }) => forms.map(
1378
- ({ pages }) => pages.map(
1379
- ({ fields }) => fields.map(({ id, label }) => ({ id, label }))
1380
- )
1381
- )
1382
- )
1383
- );
1384
- };
1385
- var findPageFields = (config) => {
1386
- return (0, import_lodash.flattenDeep)(
1387
- config.actions.map((action) => {
1388
- if (action.type === ActionType.REQUEST_CORRECTION) {
1389
- return [
1390
- ...action.forms.map(({ pages }) => pages.map(({ fields }) => fields)),
1391
- ...action.onboardingForm.flatMap(({ fields }) => fields),
1392
- ...action.additionalDetailsForm.flatMap(({ fields }) => fields)
1393
- ];
1394
- }
1395
- return action.forms.map(({ pages }) => pages.map(({ fields }) => fields));
1396
- })
1397
- );
1398
- };
1399
- var resolveLabelsFromKnownFields = ({
1400
- pageFields,
1401
- refFields
1402
- }) => {
1403
- return refFields.map((field2) => {
1404
- if (field2.label) {
1405
- return field2;
1406
- }
1407
- if (isMetadataField(field2.id)) {
1408
- return {
1409
- ...field2,
1410
- label: eventMetadataLabelMap[field2.id]
1411
- };
1412
- }
1413
- const pageLabel = pageFields.find((pageField) => pageField.id === field2.id);
1414
- if (!pageLabel) {
1415
- throw new Error(`Referenced field ${field2.id} does not have a label`);
1416
- }
1474
+ function runFieldValidations({
1475
+ field: field2,
1476
+ values
1477
+ }) {
1478
+ if (!isFieldVisible(field2, values) || isFieldEmptyAndNotRequired(field2, values)) {
1417
1479
  return {
1418
- ...field2,
1419
- label: pageLabel.label
1480
+ errors: []
1420
1481
  };
1482
+ }
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]
1421
1490
  });
1422
- };
1423
- function getAllFields(configuration) {
1424
- return configuration.actions.flatMap((action) => action.forms.filter((form) => form.active)).flatMap((form) => [
1425
- ...form.review.fields,
1426
- ...form.pages.flatMap((page) => page.fields)
1427
- ]);
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
+ };
1499
+ }
1500
+
1501
+ // ../commons/src/uuid.ts
1502
+ var import_uuid = require("uuid");
1503
+ function getUUID() {
1504
+ return (0, import_uuid.v4)();
1428
1505
  }
1429
- function getAllPages(configuration) {
1430
- return configuration.actions.flatMap((action) => action.forms.filter((form) => form.active)).flatMap((form) => form.pages);
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;
1431
1513
  }
1432
- function validateWorkqueueConfig(workqueueConfigs) {
1433
- workqueueConfigs.map((workqueue) => {
1434
- const rootWorkqueue = Object.values(workqueues).find(
1435
- (wq) => wq.id === workqueue.id
1436
- );
1437
- if (!rootWorkqueue) {
1438
- throw new Error(
1439
- `Invalid workqueue configuration: workqueue not found with id: ${workqueue.id}`
1440
- );
1441
- }
1442
- });
1514
+
1515
+ // ../commons/src/events/utils.ts
1516
+ function isDeclarationActionConfig(action) {
1517
+ return DeclarationActions.safeParse(action.type).success;
1443
1518
  }
1444
- var findActiveActionForm = (configuration, action) => {
1445
- const actionConfig = configuration.actions.find((a) => a.type === action);
1446
- const form = actionConfig?.forms.find((f) => f.active);
1447
- return form;
1448
- };
1449
- var findActiveActionFormPages = (configuration, action) => {
1450
- return findActiveActionForm(configuration, action)?.pages;
1451
- };
1452
- var getFormFields = (formConfig) => {
1453
- return formConfig.pages.flatMap((p) => p.fields);
1454
- };
1455
- var findActiveActionFormFields = (configuration, action) => {
1456
- const form = findActiveActionForm(configuration, action);
1457
- return form ? getFormFields(form) : void 0;
1458
- };
1459
- var findActiveActionFields = (configuration, action) => {
1460
- const form = findActiveActionForm(configuration, action);
1461
- const reviewFields = form?.review.fields;
1462
- const formFields = form ? getFormFields(form) : void 0;
1463
- const allFields = formFields ? formFields.concat(reviewFields ?? []) : reviewFields;
1464
- return allFields;
1465
- };
1466
- function getActiveActionFields(configuration, action) {
1467
- const fields = findActiveActionFields(configuration, action);
1468
- if (!fields) {
1469
- throw new Error(`No active field config found for action type ${action}`);
1519
+ function getDeclarationFields(configuration) {
1520
+ return configuration.declaration.pages.flatMap(({ fields }) => fields);
1521
+ }
1522
+ function getDeclarationPages(configuration) {
1523
+ return configuration.declaration.pages;
1524
+ }
1525
+ function getDeclaration(configuration) {
1526
+ return configuration.declaration;
1527
+ }
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;
1470
1540
  }
1471
- return fields;
1541
+ return [];
1542
+ };
1543
+ function getAllAnnotationFields(config) {
1544
+ return (0, import_lodash.flattenDeep)(config.actions.map(getActionAnnotationFields));
1472
1545
  }
1473
- function getEventConfiguration(eventConfigurations, type) {
1474
- const config = eventConfigurations.find((config2) => config2.id === type);
1475
- if (!config) {
1476
- throw new Error(`Event configuration not found for type: ${type}`);
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;
1477
1553
  }
1478
- return config;
1554
+ return [];
1555
+ };
1556
+ function getActionReview(configuration, actionType) {
1557
+ const [actionConfig] = configuration.actions.filter(
1558
+ (a) => a.type === actionType
1559
+ );
1560
+ return getOrThrow(
1561
+ actionConfig.review,
1562
+ `No review config found for ${actionType}`
1563
+ );
1479
1564
  }
1480
- function isOptionalUncheckedCheckbox(field2, form) {
1481
- if (field2.type !== FieldType.CHECKBOX || field2.required) {
1482
- return false;
1565
+ function getActionReviewFields(configuration, actionType) {
1566
+ return getActionReview(configuration, actionType).fields;
1567
+ }
1568
+ function isPageVisible(page, formValues) {
1569
+ if (!page.conditional) {
1570
+ return true;
1483
1571
  }
1484
- return !form[field2.id];
1572
+ return isConditionMet(page.conditional, formValues);
1485
1573
  }
1486
- function stripHiddenFields(fields, data) {
1487
- return (0, import_lodash.omitBy)(data, (_2, fieldId) => {
1488
- const field2 = fields.find((f) => f.id === fieldId);
1489
- if (!field2) {
1490
- return true;
1574
+ function omitHiddenFields(fields, values, visibleVerificationPageIds = []) {
1575
+ return (0, import_lodash.omitBy)(values, (_, fieldId) => {
1576
+ if (visibleVerificationPageIds.includes(fieldId)) {
1577
+ return false;
1491
1578
  }
1492
- if (isOptionalUncheckedCheckbox(field2, data)) {
1579
+ const fieldConfigs = fields.filter((f) => f.id === fieldId);
1580
+ if (!fieldConfigs.length) {
1493
1581
  return true;
1494
1582
  }
1495
- return !isFieldVisible(field2, data);
1583
+ return fieldConfigs.every((f) => !isFieldVisible(f, values));
1496
1584
  });
1497
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
+ }
1590
+ function findActiveDrafts(event2, drafts) {
1591
+ const actions = event2.actions.slice().filter(({ type }) => type !== ActionType.READ).sort((a, b) => a.createdAt.localeCompare(b.createdAt));
1592
+ const lastAction = actions[actions.length - 1];
1593
+ return drafts.filter(({ createdAt }) => createdAt >= lastAction.createdAt).filter(({ eventId }) => eventId === event2.id);
1594
+ }
1595
+ function createEmptyDraft(eventId, draftId, actionType) {
1596
+ return {
1597
+ id: draftId,
1598
+ eventId,
1599
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
1600
+ transactionId: getUUID(),
1601
+ action: {
1602
+ type: actionType,
1603
+ declaration: {},
1604
+ annotation: {},
1605
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
1606
+ createdBy: "@todo",
1607
+ createdAtLocation: "@todo"
1608
+ }
1609
+ };
1610
+ }
1611
+ function isVerificationPage(page) {
1612
+ return page.type === PageTypes.enum.VERIFICATION;
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
+ };
1498
1679
 
1499
1680
  // ../commons/src/events/EventConfig.ts
1500
- var EventConfig = import_zod18.z.object({
1501
- 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(
1502
1685
  'A machine-readable identifier for the event, e.g. "birth" or "death"'
1503
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
+ ),
1504
1692
  summary: SummaryConfig,
1505
1693
  label: TranslationConfig,
1506
- actions: import_zod18.z.array(ActionConfig),
1507
- workqueues: import_zod18.z.array(WorkqueueConfig),
1508
- deduplication: import_zod18.z.array(DeduplicationConfig).optional().default([]),
1509
- 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([])
1510
1698
  }).superRefine((event2, ctx) => {
1511
- const allFields = findPageFields(event2);
1699
+ const allFields = findAllFields(event2);
1512
1700
  const fieldIds = allFields.map((field2) => field2.id);
1513
1701
  const advancedSearchFields = event2.advancedSearch.flatMap(
1514
1702
  (section) => section.fields.flatMap((field2) => field2.fieldId)
@@ -1522,289 +1710,497 @@ var EventConfig = import_zod18.z.object({
1522
1710
  });
1523
1711
  }
1524
1712
  const invalidFields = event2.advancedSearch.flatMap(
1525
- (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
+ )
1526
1720
  );
1527
1721
  if (invalidFields.length > 0) {
1528
1722
  ctx.addIssue({
1529
1723
  code: "custom",
1530
- 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.
1531
1725
  Invalid AdvancedSearch field IDs for event ${event2.id}: ${invalidFields.map((f) => f.fieldId).join(", ")}`,
1532
1726
  path: ["advancedSearch"]
1533
1727
  });
1534
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"
1535
1750
  });
1536
1751
 
1537
1752
  // ../commons/src/events/EventConfigInput.ts
1538
- var defineForm = (form) => FormConfig.parse(form);
1539
- var defineFormPage = (formPage) => FormPage.parse(formPage);
1753
+ var defineDeclarationForm = (form) => DeclarationFormConfig.parse(form);
1754
+ var defineActionForm = (actionForm) => ActionFormConfig.parse(actionForm);
1755
+ var definePage = (page) => PageConfig.parse(page);
1756
+ var defineFormPage = (formPage) => FormPageConfig.parse(formPage);
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
+ }
1540
1780
 
1541
1781
  // ../commons/src/events/Draft.ts
1542
- var import_zod21 = require("zod");
1782
+ var import_zod20 = require("zod");
1543
1783
 
1544
1784
  // ../commons/src/events/ActionDocument.ts
1545
- var import_zod19 = require("zod");
1546
- var ActionUpdate = import_zod19.z.record(import_zod19.z.string(), FieldUpdateValue);
1547
- var ActionBase = import_zod19.z.object({
1548
- id: import_zod19.z.string(),
1549
- createdAt: import_zod19.z.string().datetime(),
1550
- createdBy: import_zod19.z.string(),
1551
- data: ActionUpdate,
1552
- metadata: ActionUpdate.optional(),
1553
- 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()
1554
1811
  });
1555
1812
  var AssignedAction = ActionBase.merge(
1556
- import_zod19.z.object({
1557
- type: import_zod19.z.literal(ActionType.ASSIGN),
1558
- assignedTo: import_zod19.z.string()
1813
+ import_zod18.z.object({
1814
+ type: import_zod18.z.literal(ActionType.ASSIGN),
1815
+ assignedTo: import_zod18.z.string()
1559
1816
  })
1560
1817
  );
1561
1818
  var UnassignedAction = ActionBase.merge(
1562
- import_zod19.z.object({
1563
- 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)
1564
1822
  })
1565
1823
  );
1566
1824
  var RegisterAction = ActionBase.merge(
1567
- import_zod19.z.object({
1568
- type: import_zod19.z.literal(ActionType.REGISTER),
1569
- identifiers: import_zod19.z.object({
1570
- trackingId: import_zod19.z.string(),
1571
- registrationNumber: import_zod19.z.string()
1572
- })
1825
+ import_zod18.z.object({
1826
+ type: import_zod18.z.literal(ActionType.REGISTER),
1827
+ registrationNumber: import_zod18.z.string().optional()
1573
1828
  })
1574
1829
  );
1575
1830
  var DeclareAction = ActionBase.merge(
1576
- import_zod19.z.object({
1577
- type: import_zod19.z.literal(ActionType.DECLARE)
1831
+ import_zod18.z.object({
1832
+ type: import_zod18.z.literal(ActionType.DECLARE)
1578
1833
  })
1579
1834
  );
1580
1835
  var ValidateAction = ActionBase.merge(
1581
- import_zod19.z.object({
1582
- type: import_zod19.z.literal(ActionType.VALIDATE)
1836
+ import_zod18.z.object({
1837
+ type: import_zod18.z.literal(ActionType.VALIDATE)
1583
1838
  })
1584
1839
  );
1585
1840
  var RejectAction = ActionBase.merge(
1586
- import_zod19.z.object({
1587
- type: import_zod19.z.literal(ActionType.REJECT)
1841
+ import_zod18.z.object({
1842
+ type: import_zod18.z.literal(ActionType.REJECT)
1588
1843
  })
1589
1844
  );
1590
1845
  var MarkAsDuplicateAction = ActionBase.merge(
1591
- import_zod19.z.object({
1592
- type: import_zod19.z.literal(ActionType.MARKED_AS_DUPLICATE)
1846
+ import_zod18.z.object({
1847
+ type: import_zod18.z.literal(ActionType.MARKED_AS_DUPLICATE)
1593
1848
  })
1594
1849
  );
1595
- var ArchivedAction = ActionBase.merge(
1596
- import_zod19.z.object({
1597
- type: import_zod19.z.literal(ActionType.ARCHIVED)
1850
+ var ArchiveAction = ActionBase.merge(
1851
+ import_zod18.z.object({
1852
+ type: import_zod18.z.literal(ActionType.ARCHIVE)
1598
1853
  })
1599
1854
  );
1600
1855
  var CreatedAction = ActionBase.merge(
1601
- import_zod19.z.object({
1602
- type: import_zod19.z.literal(ActionType.CREATE)
1856
+ import_zod18.z.object({
1857
+ type: import_zod18.z.literal(ActionType.CREATE)
1603
1858
  })
1604
1859
  );
1605
1860
  var NotifiedAction = ActionBase.merge(
1606
- import_zod19.z.object({
1607
- type: import_zod19.z.literal(ActionType.NOTIFY)
1861
+ import_zod18.z.object({
1862
+ type: import_zod18.z.literal(ActionType.NOTIFY)
1608
1863
  })
1609
1864
  );
1610
1865
  var PrintCertificateAction = ActionBase.merge(
1611
- import_zod19.z.object({
1612
- type: import_zod19.z.literal(ActionType.PRINT_CERTIFICATE)
1866
+ import_zod18.z.object({
1867
+ type: import_zod18.z.literal(ActionType.PRINT_CERTIFICATE)
1613
1868
  })
1614
1869
  );
1615
1870
  var RequestedCorrectionAction = ActionBase.merge(
1616
- import_zod19.z.object({
1617
- type: import_zod19.z.literal(ActionType.REQUEST_CORRECTION)
1871
+ import_zod18.z.object({
1872
+ type: import_zod18.z.literal(ActionType.REQUEST_CORRECTION)
1618
1873
  })
1619
1874
  );
1620
1875
  var ApprovedCorrectionAction = ActionBase.merge(
1621
- import_zod19.z.object({
1622
- type: import_zod19.z.literal(ActionType.APPROVE_CORRECTION),
1623
- 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()
1624
1879
  })
1625
1880
  );
1626
1881
  var RejectedCorrectionAction = ActionBase.merge(
1627
- import_zod19.z.object({
1628
- type: import_zod19.z.literal(ActionType.REJECT_CORRECTION),
1629
- 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()
1630
1885
  })
1631
1886
  );
1632
- var CustomAction = ActionBase.merge(
1633
- import_zod19.z.object({
1634
- 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)
1635
1890
  })
1636
1891
  );
1637
- var ActionDocument = import_zod19.z.discriminatedUnion("type", [
1638
- CreatedAction,
1639
- ValidateAction,
1640
- RejectAction,
1641
- MarkAsDuplicateAction,
1642
- ArchivedAction,
1643
- NotifiedAction,
1644
- RegisterAction,
1645
- DeclareAction,
1646
- AssignedAction,
1647
- RequestedCorrectionAction,
1648
- ApprovedCorrectionAction,
1649
- RejectedCorrectionAction,
1650
- UnassignedAction,
1651
- PrintCertificateAction,
1652
- CustomAction
1653
- ]);
1654
- var ResolvedUser = import_zod19.z.object({
1655
- id: import_zod19.z.string(),
1656
- role: import_zod19.z.string(),
1657
- name: import_zod19.z.array(
1658
- import_zod19.z.object({
1659
- use: import_zod19.z.string(),
1660
- given: import_zod19.z.array(import_zod19.z.string()),
1661
- 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()
1662
1932
  })
1663
1933
  )
1664
1934
  });
1665
1935
 
1666
1936
  // ../commons/src/events/ActionInput.ts
1667
- var import_zod20 = require("zod");
1668
- var BaseActionInput = import_zod20.z.object({
1669
- eventId: import_zod20.z.string(),
1670
- transactionId: import_zod20.z.string(),
1671
- incomplete: import_zod20.z.boolean().optional().default(false).describe("Allows action with partial data to be saved"),
1672
- data: ActionUpdate,
1673
- 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()
1674
1947
  });
1675
1948
  var CreateActionInput = BaseActionInput.merge(
1676
- import_zod20.z.object({
1677
- type: import_zod20.z.literal(ActionType.CREATE).default(ActionType.CREATE),
1678
- 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()
1679
1952
  })
1680
1953
  );
1681
1954
  var RegisterActionInput = BaseActionInput.merge(
1682
- import_zod20.z.object({
1683
- type: import_zod20.z.literal(ActionType.REGISTER).default(ActionType.REGISTER),
1684
- identifiers: import_zod20.z.object({
1685
- trackingId: import_zod20.z.string(),
1686
- registrationNumber: import_zod20.z.string()
1687
- })
1955
+ import_zod19.z.object({
1956
+ type: import_zod19.z.literal(ActionType.REGISTER).default(ActionType.REGISTER),
1957
+ registrationNumber: import_zod19.z.string().optional()
1688
1958
  })
1689
1959
  );
1690
1960
  var ValidateActionInput = BaseActionInput.merge(
1691
- import_zod20.z.object({
1692
- type: import_zod20.z.literal(ActionType.VALIDATE).default(ActionType.VALIDATE),
1693
- 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())
1694
1964
  })
1695
1965
  );
1696
1966
  var NotifyActionInput = BaseActionInput.merge(
1697
- import_zod20.z.object({
1698
- type: import_zod20.z.literal(ActionType.NOTIFY).default(ActionType.NOTIFY),
1699
- createdAtLocation: import_zod20.z.string()
1967
+ import_zod19.z.object({
1968
+ type: import_zod19.z.literal(ActionType.NOTIFY).default(ActionType.NOTIFY)
1700
1969
  })
1701
1970
  );
1702
1971
  var DeclareActionInput = BaseActionInput.merge(
1703
- import_zod20.z.object({
1704
- 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)
1705
1974
  })
1706
1975
  );
1707
1976
  var PrintCertificateActionInput = BaseActionInput.merge(
1708
- import_zod20.z.object({
1709
- 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)
1710
1979
  })
1711
1980
  );
1712
1981
  var RejectDeclarationActionInput = BaseActionInput.merge(
1713
- import_zod20.z.object({
1714
- 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)
1715
1984
  })
1716
1985
  );
1717
1986
  var MarkedAsDuplicateActionInput = BaseActionInput.merge(
1718
- import_zod20.z.object({
1719
- 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)
1720
1989
  })
1721
1990
  );
1722
- var ArchivedActionInput = BaseActionInput.merge(
1723
- import_zod20.z.object({
1724
- type: import_zod20.z.literal(ActionType.ARCHIVED).default(ActionType.ARCHIVED)
1991
+ var ArchiveActionInput = BaseActionInput.merge(
1992
+ import_zod19.z.object({
1993
+ type: import_zod19.z.literal(ActionType.ARCHIVE).default(ActionType.ARCHIVE)
1725
1994
  })
1726
1995
  );
1727
1996
  var AssignActionInput = BaseActionInput.merge(
1728
- import_zod20.z.object({
1729
- type: import_zod20.z.literal(ActionType.ASSIGN).default(ActionType.ASSIGN),
1730
- 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()
1731
2000
  })
1732
2001
  );
1733
2002
  var UnassignActionInput = BaseActionInput.merge(
1734
- import_zod20.z.object({
1735
- 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)
1736
2006
  })
1737
2007
  );
1738
2008
  var RequestCorrectionActionInput = BaseActionInput.merge(
1739
- import_zod20.z.object({
1740
- 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)
1741
2011
  })
1742
2012
  );
1743
2013
  var RejectCorrectionActionInput = BaseActionInput.merge(
1744
- import_zod20.z.object({
1745
- requestId: import_zod20.z.string(),
1746
- 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)
1747
2017
  })
1748
2018
  );
1749
2019
  var ApproveCorrectionActionInput = BaseActionInput.merge(
1750
- import_zod20.z.object({
1751
- requestId: import_zod20.z.string(),
1752
- 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)
1753
2023
  })
1754
2024
  );
1755
- var ActionInput = import_zod20.z.discriminatedUnion("type", [
1756
- CreateActionInput,
1757
- ValidateActionInput,
1758
- RegisterActionInput,
1759
- NotifyActionInput,
1760
- DeclareActionInput,
1761
- RejectDeclarationActionInput,
1762
- MarkedAsDuplicateActionInput,
1763
- ArchivedActionInput,
1764
- AssignActionInput,
1765
- UnassignActionInput,
1766
- PrintCertificateActionInput,
1767
- RequestCorrectionActionInput,
1768
- RejectCorrectionActionInput,
1769
- ApproveCorrectionActionInput
1770
- ]);
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
+ });
1771
2058
 
1772
2059
  // ../commons/src/events/Draft.ts
1773
- var Draft = import_zod21.z.object({
1774
- id: import_zod21.z.string(),
1775
- eventId: import_zod21.z.string(),
1776
- transactionId: import_zod21.z.string(),
1777
- 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(),
1778
2065
  action: ActionBase.extend({
1779
- type: import_zod21.z.enum(Object.values(ActionType))
2066
+ type: ActionTypes
1780
2067
  }).omit({ id: true })
1781
2068
  });
1782
2069
  var DraftInput = BaseActionInput.extend({
1783
- type: import_zod21.z.enum(Object.values(ActionType))
2070
+ type: ActionTypes
2071
+ });
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()
1784
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
+ };
1785
2176
 
1786
2177
  // ../commons/src/events/EventInput.ts
1787
2178
  var import_zod22 = require("zod");
1788
2179
  var EventInput = import_zod22.z.object({
1789
2180
  transactionId: import_zod22.z.string(),
1790
- type: import_zod22.z.string()
2181
+ type: import_zod22.z.string(),
2182
+ dateOfEvent: import_zod22.z.object({ fieldId: import_zod22.z.string() }).optional()
1791
2183
  });
1792
2184
 
1793
2185
  // ../commons/src/events/EventDocument.ts
1794
2186
  var import_zod23 = require("zod");
2187
+ var import_zod_openapi6 = require("zod-openapi");
2188
+ (0, import_zod_openapi6.extendZodWithOpenApi)(import_zod23.z);
1795
2189
  var EventDocument = import_zod23.z.object({
1796
2190
  id: import_zod23.z.string(),
1797
2191
  type: import_zod23.z.string(),
2192
+ dateOfEvent: import_zod23.z.object({ fieldId: import_zod23.z.string() }).optional(),
1798
2193
  createdAt: import_zod23.z.string().datetime(),
1799
2194
  updatedAt: import_zod23.z.string().datetime(),
1800
- actions: import_zod23.z.array(ActionDocument),
2195
+ updatedAtLocation: import_zod23.z.string(),
2196
+ actions: import_zod23.z.array(Action),
1801
2197
  trackingId: import_zod23.z.string()
1802
- });
2198
+ }).openapi({ ref: "EventDocument" });
1803
2199
 
1804
2200
  // ../commons/src/events/EventIndex.ts
1805
2201
  var import_zod24 = require("zod");
1806
2202
  var EventIndex = EventMetadata.extend({
1807
- 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())
1808
2204
  });
1809
2205
  var EventSearchIndex = import_zod24.z.record(import_zod24.z.string(), import_zod24.z.any()).and(
1810
2206
  import_zod24.z.object({
@@ -1812,32 +2208,94 @@ var EventSearchIndex = import_zod24.z.record(import_zod24.z.string(), import_zod
1812
2208
  // Ensures "type" (event-id) exists and is a string
1813
2209
  })
1814
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]);
1815
2248
 
1816
2249
  // ../commons/src/events/state/index.ts
1817
- var _ = __toESM(require("lodash"));
1818
2250
  function getStatusFromActions(actions) {
2251
+ const hasRejectedAction = actions.some(
2252
+ (a) => a.status === ActionStatus.Rejected
2253
+ );
2254
+ if (hasRejectedAction) {
2255
+ return EventStatus.REJECTED;
2256
+ }
1819
2257
  return actions.reduce((status, action) => {
1820
- if (action.type === ActionType.CREATE) {
1821
- return EventStatus.CREATED;
1822
- }
1823
- if (action.type === ActionType.DECLARE) {
1824
- return EventStatus.DECLARED;
1825
- }
1826
- if (action.type === ActionType.VALIDATE) {
1827
- return EventStatus.VALIDATED;
1828
- }
1829
- if (action.type === ActionType.REGISTER) {
1830
- return EventStatus.REGISTERED;
1831
- }
1832
- if (action.type === ActionType.REJECT) {
1833
- return EventStatus.REJECTED;
1834
- }
1835
- if (action.type === ActionType.ARCHIVED) {
1836
- return EventStatus.ARCHIVED;
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;
1837
2284
  }
1838
- return status;
1839
2285
  }, EventStatus.CREATED);
1840
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
+ }
1841
2299
  function getAssignedUserFromActions(actions) {
1842
2300
  return actions.reduce((user2, action) => {
1843
2301
  if (action.type === ActionType.ASSIGN) {
@@ -1849,7 +2307,7 @@ function getAssignedUserFromActions(actions) {
1849
2307
  return user2;
1850
2308
  }, null);
1851
2309
  }
1852
- function getData(actions) {
2310
+ function aggregateActionDeclarations(actions) {
1853
2311
  const excludedActions = [
1854
2312
  ActionType.REQUEST_CORRECTION,
1855
2313
  ActionType.PRINT_CERTIFICATE
@@ -1863,46 +2321,34 @@ function getData(actions) {
1863
2321
  if (!requestAction) {
1864
2322
  return status;
1865
2323
  }
1866
- return deepMerge(status, requestAction.data);
2324
+ return deepMerge(status, requestAction.declaration);
1867
2325
  }
1868
- return deepMerge(status, action.data);
2326
+ return deepMerge(status, action.declaration);
1869
2327
  }, {});
1870
2328
  }
1871
2329
  function deepDropNulls(obj) {
1872
- if (!_.isObject(obj)) return obj;
1873
- return Object.entries(obj).reduce((acc, [key, value]) => {
1874
- if (_.isObject(value)) {
1875
- value = deepDropNulls(value);
1876
- }
1877
- if (value !== null) {
1878
- return {
1879
- ...acc,
1880
- [key]: value
1881
- };
1882
- }
1883
- return acc;
1884
- }, {});
1885
- }
1886
- function deepMerge(currentDocument, actionDocument) {
1887
- return _.mergeWith(
1888
- currentDocument,
1889
- actionDocument,
1890
- (previousValue, incomingValue) => {
1891
- if (incomingValue === void 0) {
1892
- return previousValue;
1893
- }
1894
- if (_.isArray(incomingValue)) {
1895
- return incomingValue;
1896
- }
1897
- if (_.isObject(previousValue) && _.isObject(incomingValue)) {
1898
- 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;
1899
2339
  }
1900
- return incomingValue;
1901
- }
1902
- );
2340
+ return acc;
2341
+ }, {});
2342
+ }
2343
+ return obj;
1903
2344
  }
1904
- function isUndeclaredDraft(event2) {
1905
- return event2.actions.every(({ type }) => type === ActionType.CREATE);
2345
+ function isUndeclaredDraft(status) {
2346
+ return status === EventStatus.CREATED;
2347
+ }
2348
+ function getAcceptedActions(event2) {
2349
+ return event2.actions.filter(
2350
+ (a) => a.status === ActionStatus.Accepted
2351
+ );
1906
2352
  }
1907
2353
  function getCurrentEventState(event2) {
1908
2354
  const creationAction = event2.actions.find(
@@ -1911,25 +2357,40 @@ function getCurrentEventState(event2) {
1911
2357
  if (!creationAction) {
1912
2358
  throw new Error(`Event ${event2.id} has no creation action`);
1913
2359
  }
1914
- 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
+ }
1915
2372
  return deepDropNulls({
1916
2373
  id: event2.id,
1917
2374
  type: event2.type,
1918
2375
  status: getStatusFromActions(event2.actions),
1919
2376
  createdAt: event2.createdAt,
1920
2377
  createdBy: creationAction.createdBy,
1921
- createdAtLocation: creationAction.createdAtLocation,
1922
- modifiedAt: latestAction.createdAt,
1923
- assignedTo: getAssignedUserFromActions(event2.actions),
2378
+ createdAtLocation: creationAction.createdAtLocation ?? "",
2379
+ // @todo remove using empty string
2380
+ updatedAt: latestAction.createdAt,
2381
+ assignedTo: getAssignedUserFromActions(activeActions),
1924
2382
  updatedBy: latestAction.createdBy,
1925
- data: getData(event2.actions),
1926
- trackingId: event2.trackingId
2383
+ updatedAtLocation: event2.updatedAtLocation,
2384
+ declaration,
2385
+ trackingId: event2.trackingId,
2386
+ registrationNumber,
2387
+ updatedByUserRole: getLastUpdatedByUserRoleFromActions(event2.actions),
2388
+ dateOfEvent
1927
2389
  });
1928
2390
  }
1929
2391
  function getCurrentEventStateWithDrafts(event2, drafts) {
1930
- const actions = event2.actions.slice().sort();
1931
- const lastAction = actions[actions.length - 1];
1932
- const activeDrafts = drafts.filter(({ eventId }) => eventId === event2.id).filter(({ createdAt }) => createdAt > lastAction.createdAt).map((draft) => draft.action).flatMap((action) => {
2392
+ const actions = event2.actions.slice().sort((a, b) => a.createdAt.localeCompare(b.createdAt));
2393
+ const activeDrafts = findActiveDrafts(event2, drafts).map((draft) => draft.action).flatMap((action) => {
1933
2394
  if (action.type === ActionType.REQUEST_CORRECTION) {
1934
2395
  return [
1935
2396
  action,
@@ -1949,53 +2410,52 @@ function getCurrentEventStateWithDrafts(event2, drafts) {
1949
2410
  return getCurrentEventState(withDrafts);
1950
2411
  }
1951
2412
  function applyDraftsToEventIndex(eventIndex, drafts) {
1952
- const indexedAt = eventIndex.modifiedAt;
2413
+ const indexedAt = eventIndex.updatedAt;
1953
2414
  const activeDrafts = drafts.filter(({ createdAt }) => new Date(createdAt) > new Date(indexedAt)).map((draft) => draft.action).sort();
1954
2415
  if (activeDrafts.length === 0) {
1955
2416
  return eventIndex;
1956
2417
  }
1957
2418
  return {
1958
2419
  ...eventIndex,
1959
- data: {
1960
- ...eventIndex.data,
1961
- ...activeDrafts[activeDrafts.length - 1].data
2420
+ declaration: {
2421
+ ...eventIndex.declaration,
2422
+ ...activeDrafts[activeDrafts.length - 1].declaration
1962
2423
  }
1963
2424
  };
1964
2425
  }
1965
- 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({
1966
2434
  event: event2,
1967
2435
  actionType,
1968
- drafts
2436
+ drafts = []
1969
2437
  }) {
1970
- 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
+ );
1971
2442
  const eventDrafts = drafts.filter((draft) => draft.eventId === event2.id);
1972
2443
  const sorted = [
1973
2444
  ...action ? [action] : [],
1974
2445
  ...eventDrafts.map((draft) => draft.action)
1975
2446
  ].sort();
1976
- const metadata = sorted.reduce((metadata2, action2) => {
1977
- return deepMerge(metadata2, action2.metadata ?? {});
2447
+ const annotation = sorted.reduce((ann, sortedAction) => {
2448
+ return deepMerge(ann, sortedAction.annotation ?? {});
1978
2449
  }, {});
1979
- return deepDropNulls(metadata);
2450
+ return deepDropNulls(annotation);
1980
2451
  }
1981
2452
 
1982
2453
  // ../commons/src/events/defineConfig.ts
1983
2454
  var defineConfig = (config) => {
1984
- validateWorkqueueConfig(config.workqueues);
1985
2455
  const input = EventConfig.parse(config);
1986
- const pageFields = findInputPageFields(input);
1987
- return EventConfig.parse({
1988
- ...input,
1989
- pageFields
1990
- });
2456
+ return input;
1991
2457
  };
1992
2458
 
1993
- // ../commons/src/uuid.ts
1994
- var import_uuid = require("uuid");
1995
- function getUUID() {
1996
- return (0, import_uuid.v4)();
1997
- }
1998
-
1999
2459
  // ../commons/src/events/transactions.ts
2000
2460
  function generateTransactionId() {
2001
2461
  return getUUID();
@@ -2008,6 +2468,16 @@ var import_lodash2 = require("lodash");
2008
2468
  function defineConditional(schema) {
2009
2469
  return schema;
2010
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
+ }
2011
2481
  function alwaysTrue() {
2012
2482
  return {};
2013
2483
  }
@@ -2032,6 +2502,9 @@ function not(condition) {
2032
2502
  required: []
2033
2503
  });
2034
2504
  }
2505
+ function never() {
2506
+ return not(alwaysTrue());
2507
+ }
2035
2508
  var user = {
2036
2509
  hasScope: (scope) => defineConditional({
2037
2510
  type: "object",
@@ -2053,95 +2526,148 @@ var user = {
2053
2526
  required: ["$user"]
2054
2527
  })
2055
2528
  };
2056
- var event = {
2057
- 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 {
2058
2566
  type: "object",
2059
2567
  properties: {
2060
- $event: {
2061
- type: "object",
2062
- properties: {
2063
- actions: {
2064
- type: "array",
2065
- contains: {
2066
- type: "object",
2067
- properties: {
2068
- type: {
2069
- const: action
2070
- }
2071
- },
2072
- required: ["type"]
2073
- }
2074
- }
2075
- },
2076
- required: ["actions"]
2077
- }
2568
+ [fieldId]: {
2569
+ type: "string",
2570
+ format: "date",
2571
+ [clause]: { $data: `1/${comparedFieldId}` }
2572
+ },
2573
+ [comparedFieldId]: { type: "string", format: "date" }
2078
2574
  },
2079
- required: ["$event"]
2080
- })
2081
- };
2082
- function field(fieldId) {
2083
- 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) {
2084
2582
  const getDateRange = (date, clause) => ({
2085
2583
  type: "object",
2086
2584
  properties: {
2087
- $form: {
2088
- type: "object",
2089
- properties: {
2090
- [fieldId]: {
2091
- type: "string",
2092
- format: "date",
2093
- [clause]: date
2094
- }
2095
- },
2096
- required: [fieldId]
2585
+ [fieldId]: {
2586
+ type: "string",
2587
+ format: "date",
2588
+ [clause]: date
2097
2589
  }
2098
2590
  },
2099
- required: ["$form"]
2591
+ required: [fieldId]
2100
2592
  });
2101
2593
  return {
2102
2594
  isAfter: () => ({
2103
2595
  days: (days) => ({
2104
- inPast: () => defineConditional(
2596
+ inPast: () => defineFormConditional(
2105
2597
  getDateRange(getDateFromNow(days), "formatMinimum")
2106
2598
  ),
2107
- inFuture: () => defineConditional(
2599
+ inFuture: () => defineFormConditional(
2108
2600
  getDateRange(getDateFromNow(-days), "formatMinimum")
2109
2601
  )
2110
2602
  }),
2111
- date: (date) => defineConditional(getDateRange(date, "formatMinimum")),
2112
- 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"))
2113
2617
  }),
2114
2618
  isBefore: () => ({
2115
2619
  days: (days) => ({
2116
- inPast: () => defineConditional(
2620
+ inPast: () => defineFormConditional(
2117
2621
  getDateRange(getDateFromNow(days), "formatMaximum")
2118
2622
  ),
2119
- inFuture: () => defineConditional(
2623
+ inFuture: () => defineFormConditional(
2120
2624
  getDateRange(getDateFromNow(-days), "formatMaximum")
2121
2625
  )
2122
2626
  }),
2123
- date: (date) => defineConditional(getDateRange(date, "formatMaximum")),
2124
- 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"))
2125
2641
  }),
2126
- isEqualTo: (value) => defineConditional({
2127
- type: "object",
2128
- properties: {
2129
- $form: {
2642
+ isEqualTo: (value) => {
2643
+ if (isFieldReference(value)) {
2644
+ const comparedFieldId = value._fieldId;
2645
+ return defineFormConditional({
2130
2646
  type: "object",
2131
2647
  properties: {
2132
2648
  [fieldId]: {
2133
- oneOf: [
2134
- { type: "string", const: value },
2135
- { type: "boolean", const: value }
2136
- ],
2137
- const: value
2138
- }
2649
+ type: ["string", "boolean"],
2650
+ const: { $data: `1/${comparedFieldId}` }
2651
+ },
2652
+ [comparedFieldId]: { type: ["string", "boolean"] }
2139
2653
  },
2140
- required: [fieldId]
2141
- }
2142
- },
2143
- required: ["$form"]
2144
- }),
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
+ },
2145
2671
  /**
2146
2672
  * Use case: Some fields are rendered when selection is not made, or boolean false is explicitly selected.
2147
2673
  * @example field('recommender.none').isFalsy() vs not(field('recommender.none').isEqualTo(true))
@@ -2150,91 +2676,166 @@ function field(fieldId) {
2150
2676
  * NOTE: For now, this only works with string, boolean, and null types. 0 is still allowed.
2151
2677
  *
2152
2678
  */
2153
- isFalsy: () => defineConditional({
2679
+ isFalsy: () => defineFormConditional({
2154
2680
  type: "object",
2155
2681
  properties: {
2156
- $form: {
2157
- type: "object",
2158
- properties: {
2159
- [fieldId]: {
2160
- anyOf: [
2161
- { const: "undefined" },
2162
- { const: false },
2163
- { const: null },
2164
- { const: "" }
2165
- ]
2166
- }
2167
- },
2682
+ [fieldId]: {
2168
2683
  anyOf: [
2169
- {
2170
- required: [fieldId]
2171
- },
2172
- {
2173
- not: {
2174
- required: [fieldId]
2175
- }
2176
- }
2684
+ { const: "undefined" },
2685
+ { const: false },
2686
+ { const: null },
2687
+ { const: "" }
2177
2688
  ]
2178
2689
  }
2179
2690
  },
2180
- required: ["$form"]
2691
+ anyOf: [
2692
+ {
2693
+ required: [fieldId]
2694
+ },
2695
+ {
2696
+ not: {
2697
+ required: [fieldId]
2698
+ }
2699
+ }
2700
+ ]
2701
+ }),
2702
+ isUndefined: () => defineFormConditional({
2703
+ type: "object",
2704
+ properties: {
2705
+ [fieldId]: {
2706
+ type: "string",
2707
+ enum: ["undefined"]
2708
+ }
2709
+ },
2710
+ not: {
2711
+ required: [fieldId]
2712
+ }
2713
+ }),
2714
+ inArray: (values) => defineFormConditional({
2715
+ type: "object",
2716
+ properties: {
2717
+ [fieldId]: {
2718
+ type: "string",
2719
+ enum: values
2720
+ }
2721
+ },
2722
+ required: [fieldId]
2181
2723
  }),
2182
- isUndefined: () => defineConditional({
2724
+ isValidEnglishName: () => defineFormConditional({
2183
2725
  type: "object",
2184
2726
  properties: {
2185
- $form: {
2186
- type: "object",
2187
- properties: {
2188
- [fieldId]: {
2189
- type: "string",
2190
- enum: ["undefined"]
2191
- }
2192
- },
2193
- not: {
2194
- required: [fieldId]
2195
- }
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
2196
2746
  }
2197
2747
  },
2198
- required: ["$form"]
2748
+ required: [fieldId]
2199
2749
  }),
2200
- inArray: (values) => defineConditional({
2750
+ isBetween: (min, max) => defineFormConditional({
2201
2751
  type: "object",
2202
2752
  properties: {
2203
- $form: {
2204
- type: "object",
2205
- properties: {
2206
- [fieldId]: {
2207
- type: "string",
2208
- enum: values
2209
- }
2210
- },
2211
- required: [fieldId]
2753
+ [fieldId]: {
2754
+ type: "number",
2755
+ minimum: min,
2756
+ maximum: max
2212
2757
  }
2213
2758
  },
2214
- 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" }
2215
2812
  })
2216
2813
  };
2217
2814
  }
2218
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
+
2219
2828
  // ../commons/src/fixtures/tennis-club-membership-event.ts
2220
- var PRINT_CERTIFICATE_FORM = defineForm({
2829
+ var PRINT_CERTIFICATE_FORM = defineActionForm({
2221
2830
  label: {
2222
2831
  id: "v2.event.tennis-club-membership.action.certificate.form.label",
2223
2832
  defaultMessage: "Tennis club membership certificate collector",
2224
2833
  description: "This is what this form is referred as in the system"
2225
2834
  },
2226
- version: {
2227
- id: "1.0.0",
2228
- label: {
2229
- id: "v2.event.tennis-club-membership.action.certificate.form.version.1",
2230
- defaultMessage: "Version 1",
2231
- description: "This is the first version of the form"
2232
- }
2233
- },
2234
- active: true,
2235
2835
  pages: [
2236
2836
  {
2237
2837
  id: "collector",
2838
+ type: PageTypes.enum.FORM,
2238
2839
  title: {
2239
2840
  id: "v2.event.tennis-club-membership.action.certificate.form.section.who.title",
2240
2841
  defaultMessage: "Print certified copy",
@@ -2249,7 +2850,7 @@ var PRINT_CERTIFICATE_FORM = defineForm({
2249
2850
  defaultMessage: "Requester",
2250
2851
  description: "This is the label for the field"
2251
2852
  },
2252
- type: "SELECT",
2853
+ type: FieldType.SELECT,
2253
2854
  options: [
2254
2855
  {
2255
2856
  value: "INFORMANT",
@@ -2326,7 +2927,7 @@ var PRINT_CERTIFICATE_FORM = defineForm({
2326
2927
  defaultMessage: "Select Type of ID",
2327
2928
  description: "This is the label for selecting the type of ID"
2328
2929
  },
2329
- type: "SELECT",
2930
+ type: FieldType.SELECT,
2330
2931
  options: [
2331
2932
  {
2332
2933
  value: "PASSPORT",
@@ -2427,7 +3028,7 @@ var PRINT_CERTIFICATE_FORM = defineForm({
2427
3028
  defaultMessage: "Passport Details",
2428
3029
  description: "Field for entering Passport details"
2429
3030
  },
2430
- type: "TEXT"
3031
+ type: FieldType.TEXT
2431
3032
  },
2432
3033
  {
2433
3034
  id: "collector.DRIVING_LICENSE.details",
@@ -2478,7 +3079,7 @@ var PRINT_CERTIFICATE_FORM = defineForm({
2478
3079
  defaultMessage: "Driving License Details",
2479
3080
  description: "Field for entering Driving License details"
2480
3081
  },
2481
- type: "TEXT"
3082
+ type: FieldType.TEXT
2482
3083
  },
2483
3084
  {
2484
3085
  id: "collector.REFUGEE_NUMBER.details",
@@ -2529,7 +3130,7 @@ var PRINT_CERTIFICATE_FORM = defineForm({
2529
3130
  defaultMessage: "Refugee Number Details",
2530
3131
  description: "Field for entering Refugee Number details"
2531
3132
  },
2532
- type: "TEXT"
3133
+ type: FieldType.TEXT
2533
3134
  },
2534
3135
  {
2535
3136
  id: "collector.ALIEN_NUMBER.details",
@@ -2580,7 +3181,7 @@ var PRINT_CERTIFICATE_FORM = defineForm({
2580
3181
  defaultMessage: "Alien Number Details",
2581
3182
  description: "Field for entering Alien Number details"
2582
3183
  },
2583
- type: "TEXT"
3184
+ type: FieldType.TEXT
2584
3185
  },
2585
3186
  {
2586
3187
  id: "collector.OTHER.idTypeOther",
@@ -2631,7 +3232,7 @@ var PRINT_CERTIFICATE_FORM = defineForm({
2631
3232
  defaultMessage: "Other ID Type (if applicable)",
2632
3233
  description: 'Field for entering ID type if "Other" is selected'
2633
3234
  },
2634
- type: "TEXT"
3235
+ type: FieldType.TEXT
2635
3236
  },
2636
3237
  {
2637
3238
  id: "collector.OTHER.firstName",
@@ -2682,7 +3283,7 @@ var PRINT_CERTIFICATE_FORM = defineForm({
2682
3283
  defaultMessage: "First Name",
2683
3284
  description: "This is the label for the first name field"
2684
3285
  },
2685
- type: "TEXT"
3286
+ type: FieldType.TEXT
2686
3287
  },
2687
3288
  {
2688
3289
  id: "collector.OTHER.lastName",
@@ -2733,7 +3334,7 @@ var PRINT_CERTIFICATE_FORM = defineForm({
2733
3334
  defaultMessage: "Last Name",
2734
3335
  description: "This is the label for the last name field"
2735
3336
  },
2736
- type: "TEXT"
3337
+ type: FieldType.TEXT
2737
3338
  },
2738
3339
  {
2739
3340
  id: "collector.OTHER.relationshipToMember",
@@ -2784,7 +3385,7 @@ var PRINT_CERTIFICATE_FORM = defineForm({
2784
3385
  defaultMessage: "Relationship to Member",
2785
3386
  description: "This is the label for the relationship to member field"
2786
3387
  },
2787
- type: "TEXT"
3388
+ type: FieldType.TEXT
2788
3389
  },
2789
3390
  {
2790
3391
  id: "collector.OTHER.signedAffidavit",
@@ -2835,66 +3436,88 @@ var PRINT_CERTIFICATE_FORM = defineForm({
2835
3436
  defaultMessage: "Signed Affidavit (Optional)",
2836
3437
  description: "This is the label for uploading a signed affidavit"
2837
3438
  },
2838
- type: "FILE"
3439
+ type: FieldType.FILE
2839
3440
  }
2840
3441
  ]
2841
- }
2842
- ],
2843
- review: {
2844
- title: {
2845
- id: "v2.event.tennis-club-membership.action.certificate.form.review.title",
2846
- defaultMessage: "Member certificate collector for {firstname} {surname}",
2847
- description: "Title of the form to show in review page"
2848
3442
  },
2849
- fields: []
2850
- }
2851
- });
2852
- var TENNIS_CLUB_FORM = defineForm({
2853
- label: {
2854
- id: "v2.event.tennis-club-membership.action.declare.form.label",
2855
- defaultMessage: "Tennis club membership application",
2856
- description: "This is what this form is referred as in the system"
2857
- },
2858
- active: true,
2859
- version: {
2860
- id: "1.0.0",
2861
- label: {
2862
- id: "v2.event.tennis-club-membership.action.declare.form.version.1",
2863
- defaultMessage: "Version 1",
2864
- description: "This is the first version of the form"
3443
+ {
3444
+ id: "collector.identity.verify",
3445
+ type: PageTypes.enum.VERIFICATION,
3446
+ conditional: field("collector.requesterId").isEqualTo("INFORMANT"),
3447
+ title: {
3448
+ id: "event.tennis-club-membership.action.print.verifyIdentity",
3449
+ defaultMessage: "Verify their identity",
3450
+ description: "This is the title of the section"
3451
+ },
3452
+ fields: [],
3453
+ actions: {
3454
+ verify: {
3455
+ label: {
3456
+ defaultMessage: "Verified",
3457
+ description: "This is the label for the verification button",
3458
+ id: "v2.event.tennis-club-membership.action.certificate.form.verify"
3459
+ }
3460
+ },
3461
+ cancel: {
3462
+ label: {
3463
+ defaultMessage: "Identity does not match",
3464
+ description: "This is the label for the verification cancellation button",
3465
+ id: "v2.event.tennis-club-membership.action.certificate.form.cancel"
3466
+ },
3467
+ confirmation: {
3468
+ title: {
3469
+ defaultMessage: "Print without proof of ID?",
3470
+ description: "This is the title for the verification cancellation modal",
3471
+ id: "v2.event.tennis-club-membership.action.certificate.form.cancel.confirmation.title"
3472
+ },
3473
+ body: {
3474
+ defaultMessage: "Please be aware that if you proceed, you will be responsible for issuing a certificate without the necessary proof of ID from the collector",
3475
+ description: "This is the body for the verification cancellation modal",
3476
+ id: "v2.event.tennis-club-membership.action.certificate.form.cancel.confirmation.body"
3477
+ }
3478
+ }
3479
+ }
3480
+ }
2865
3481
  }
3482
+ ]
3483
+ });
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"
2866
3489
  },
2867
- review: {
2868
- title: {
2869
- id: "v2.event.tennis-club-membership.action.declare.form.review.title",
2870
- defaultMessage: "{applicant.firstname, select, __EMPTY__ {Member declaration} other {{applicant.surname, select, __EMPTY__ {Member declaration} other {Member declaration for {applicant.firstname} {applicant.surname}}}}}",
2871
- 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
+ }
2872
3499
  },
2873
- fields: [
2874
- {
2875
- id: "review.comment",
2876
- type: "TEXTAREA",
2877
- label: {
2878
- defaultMessage: "Comment",
2879
- id: "v2.event.birth.action.declare.form.review.comment.label",
2880
- description: "Label for the comment field in the review section"
2881
- }
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"
2882
3507
  },
2883
- {
2884
- type: "SIGNATURE",
2885
- id: "review.signature",
2886
- label: {
2887
- defaultMessage: "Signature of informant",
2888
- id: "v2.event.birth.action.declare.form.review.signature.label",
2889
- description: "Label for the signature field in the review section"
2890
- },
2891
- signaturePromptLabel: {
2892
- id: "v2.signature.upload.modal.title",
2893
- defaultMessage: "Draw signature",
2894
- description: "Title for the modal to draw signature"
2895
- }
3508
+ signaturePromptLabel: {
3509
+ id: "v2.signature.upload.modal.title",
3510
+ defaultMessage: "Draw signature",
3511
+ description: "Title for the modal to draw signature"
2896
3512
  }
2897
- ]
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"
2898
3521
  },
2899
3522
  pages: [
2900
3523
  {
@@ -2907,7 +3530,7 @@ var TENNIS_CLUB_FORM = defineForm({
2907
3530
  fields: [
2908
3531
  {
2909
3532
  id: "applicant.firstname",
2910
- type: "TEXT",
3533
+ type: FieldType.TEXT,
2911
3534
  required: true,
2912
3535
  conditionals: [],
2913
3536
  label: {
@@ -2918,7 +3541,7 @@ var TENNIS_CLUB_FORM = defineForm({
2918
3541
  },
2919
3542
  {
2920
3543
  id: "applicant.surname",
2921
- type: "TEXT",
3544
+ type: FieldType.TEXT,
2922
3545
  required: true,
2923
3546
  conditionals: [],
2924
3547
  label: {
@@ -2940,9 +3563,8 @@ var TENNIS_CLUB_FORM = defineForm({
2940
3563
  },
2941
3564
  {
2942
3565
  id: "applicant.dob",
2943
- type: "DATE",
3566
+ type: FieldType.DATE,
2944
3567
  required: true,
2945
- conditionals: [],
2946
3568
  validation: [
2947
3569
  {
2948
3570
  message: {
@@ -2953,15 +3575,53 @@ var TENNIS_CLUB_FORM = defineForm({
2953
3575
  validator: field("applicant.dob").isBefore().now()
2954
3576
  }
2955
3577
  ],
3578
+ conditionals: [
3579
+ {
3580
+ type: ConditionalType.SHOW,
3581
+ conditional: field("applicant.dobUnknown").isFalsy()
3582
+ }
3583
+ ],
2956
3584
  label: {
2957
3585
  defaultMessage: "Applicant's date of birth",
2958
3586
  description: "This is the label for the field",
2959
3587
  id: "v2.event.tennis-club-membership.action.declare.form.section.who.field.dob.label"
2960
3588
  }
2961
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
+ },
2962
3622
  {
2963
3623
  id: "applicant.image",
2964
- type: "FILE",
3624
+ type: FieldType.FILE,
2965
3625
  required: false,
2966
3626
  label: {
2967
3627
  defaultMessage: "Applicant's profile picture",
@@ -2982,6 +3642,27 @@ var TENNIS_CLUB_FORM = defineForm({
2982
3642
  }
2983
3643
  ]
2984
3644
  },
3645
+ {
3646
+ id: "senior-pass",
3647
+ conditional: field("applicant.dob").isBefore().date("1950-01-01"),
3648
+ title: {
3649
+ id: "v2.event.tennis-club-membership.action.declare.form.section.senior-pass.title",
3650
+ defaultMessage: "Assign senior pass for applicant",
3651
+ description: "This is the title of the section"
3652
+ },
3653
+ fields: [
3654
+ {
3655
+ id: "senior-pass.id",
3656
+ type: FieldType.TEXT,
3657
+ required: true,
3658
+ label: {
3659
+ defaultMessage: "Senior pass ID",
3660
+ description: "This is the label for the field",
3661
+ id: "v2.event.tennis-club-membership.action.declare.form.section.senior-pass.field.id.label"
3662
+ }
3663
+ }
3664
+ ]
3665
+ },
2985
3666
  {
2986
3667
  id: "recommender",
2987
3668
  title: {
@@ -3003,7 +3684,7 @@ var TENNIS_CLUB_FORM = defineForm({
3003
3684
  },
3004
3685
  {
3005
3686
  id: "recommender.firstname",
3006
- type: "TEXT",
3687
+ type: FieldType.TEXT,
3007
3688
  required: true,
3008
3689
  conditionals: [
3009
3690
  {
@@ -3019,7 +3700,7 @@ var TENNIS_CLUB_FORM = defineForm({
3019
3700
  },
3020
3701
  {
3021
3702
  id: "recommender.surname",
3022
- type: "TEXT",
3703
+ type: FieldType.TEXT,
3023
3704
  required: true,
3024
3705
  conditionals: [
3025
3706
  {
@@ -3035,7 +3716,7 @@ var TENNIS_CLUB_FORM = defineForm({
3035
3716
  },
3036
3717
  {
3037
3718
  id: "recommender.id",
3038
- type: "TEXT",
3719
+ type: FieldType.TEXT,
3039
3720
  required: true,
3040
3721
  conditionals: [
3041
3722
  {
@@ -3060,20 +3741,12 @@ var tennisClubMembershipEvent = defineConfig({
3060
3741
  description: "This is what this event is referred as in the system",
3061
3742
  id: "event.tennis-club-membership.label"
3062
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
+ },
3063
3749
  summary: {
3064
- title: {
3065
- id: "event.tennis-club-membership.summary.title",
3066
- label: {
3067
- defaultMessage: "{applicant.firstname} {applicant.surname}",
3068
- description: "This is the title of the summary",
3069
- id: "v2.event.tennis-club-membership.summary.title"
3070
- },
3071
- emptyValueMessage: {
3072
- defaultMessage: "Membership application",
3073
- description: "This is the message shown when the applicant name is missing",
3074
- id: "event.tennis-club-membership.summary.title.empty"
3075
- }
3076
- },
3077
3750
  fields: [
3078
3751
  {
3079
3752
  id: "applicant.firstname",
@@ -3113,28 +3786,6 @@ var tennisClubMembershipEvent = defineConfig({
3113
3786
  }
3114
3787
  ]
3115
3788
  },
3116
- workqueues: [
3117
- {
3118
- id: "all",
3119
- filters: []
3120
- },
3121
- {
3122
- id: "ready-for-review",
3123
- filters: [
3124
- {
3125
- status: ["DECLARED"]
3126
- }
3127
- ]
3128
- },
3129
- {
3130
- id: "registered",
3131
- filters: [
3132
- {
3133
- status: ["REGISTERED"]
3134
- }
3135
- ]
3136
- }
3137
- ],
3138
3789
  actions: [
3139
3790
  {
3140
3791
  type: ActionType.DECLARE,
@@ -3143,7 +3794,7 @@ var tennisClubMembershipEvent = defineConfig({
3143
3794
  description: "This is shown as the action name anywhere the user can trigger the action from",
3144
3795
  id: "event.tennis-club-membership.action.declare.label"
3145
3796
  },
3146
- forms: [TENNIS_CLUB_FORM]
3797
+ review: TENNIS_CLUB_DECLARATION_REVIEW
3147
3798
  },
3148
3799
  {
3149
3800
  type: ActionType.VALIDATE,
@@ -3152,7 +3803,7 @@ var tennisClubMembershipEvent = defineConfig({
3152
3803
  description: "This is shown as the action name anywhere the user can trigger the action from",
3153
3804
  id: "event.tennis-club-membership.action.validate.label"
3154
3805
  },
3155
- forms: [TENNIS_CLUB_FORM]
3806
+ review: TENNIS_CLUB_DECLARATION_REVIEW
3156
3807
  },
3157
3808
  {
3158
3809
  type: ActionType.REGISTER,
@@ -3161,7 +3812,7 @@ var tennisClubMembershipEvent = defineConfig({
3161
3812
  description: "This is shown as the action name anywhere the user can trigger the action from",
3162
3813
  id: "event.tennis-club-membership.action.register.label"
3163
3814
  },
3164
- forms: [TENNIS_CLUB_FORM]
3815
+ review: TENNIS_CLUB_DECLARATION_REVIEW
3165
3816
  },
3166
3817
  {
3167
3818
  type: ActionType.REQUEST_CORRECTION,
@@ -3170,10 +3821,10 @@ var tennisClubMembershipEvent = defineConfig({
3170
3821
  description: "This is shown as the action name anywhere the user can trigger the action from",
3171
3822
  id: "event.tennis-club-membership.action.correction.request.label"
3172
3823
  },
3173
- forms: [TENNIS_CLUB_FORM],
3174
3824
  onboardingForm: [
3175
3825
  {
3176
3826
  id: "correction-requester",
3827
+ type: PageTypes.enum.FORM,
3177
3828
  title: {
3178
3829
  id: "event.tennis-club-membership.action.requestCorrection.form.section.corrector",
3179
3830
  defaultMessage: "Correction requester",
@@ -3237,6 +3888,7 @@ var tennisClubMembershipEvent = defineConfig({
3237
3888
  },
3238
3889
  {
3239
3890
  id: "identity-check",
3891
+ type: PageTypes.enum.FORM,
3240
3892
  title: {
3241
3893
  id: "event.tennis-club-membership.action.requestCorrection.form.section.verify",
3242
3894
  defaultMessage: "Verify their identity",
@@ -3279,6 +3931,7 @@ var tennisClubMembershipEvent = defineConfig({
3279
3931
  additionalDetailsForm: [
3280
3932
  {
3281
3933
  id: "correction-request.supporting-documents",
3934
+ type: PageTypes.enum.FORM,
3282
3935
  title: {
3283
3936
  id: "event.tennis-club-membership.action.requestCorrection.form.section.verify",
3284
3937
  defaultMessage: "Upload supporting documents",
@@ -3296,7 +3949,7 @@ var tennisClubMembershipEvent = defineConfig({
3296
3949
  },
3297
3950
  {
3298
3951
  id: "correction.supportingDocs",
3299
- type: "FILE",
3952
+ type: FieldType.FILE,
3300
3953
  label: {
3301
3954
  id: "correction.corrector.title",
3302
3955
  defaultMessage: "Upload supporting documents",
@@ -3340,6 +3993,7 @@ var tennisClubMembershipEvent = defineConfig({
3340
3993
  },
3341
3994
  {
3342
3995
  id: "correction-request.additional-details",
3996
+ type: PageTypes.enum.FORM,
3343
3997
  title: {
3344
3998
  id: "event.tennis-club-membership.action.requestCorrection.form.section.corrector",
3345
3999
  defaultMessage: "Reason for correction",
@@ -3348,7 +4002,7 @@ var tennisClubMembershipEvent = defineConfig({
3348
4002
  fields: [
3349
4003
  {
3350
4004
  id: "correction.request.reason",
3351
- type: "TEXT",
4005
+ type: FieldType.TEXT,
3352
4006
  label: {
3353
4007
  id: "correction.reason.title",
3354
4008
  defaultMessage: "Reason for correction?",
@@ -3361,7 +4015,6 @@ var tennisClubMembershipEvent = defineConfig({
3361
4015
  },
3362
4016
  {
3363
4017
  type: ActionType.APPROVE_CORRECTION,
3364
- forms: [TENNIS_CLUB_FORM],
3365
4018
  label: {
3366
4019
  defaultMessage: "Approve correction",
3367
4020
  description: "This is shown as the action name anywhere the user can trigger the action from",
@@ -3375,7 +4028,7 @@ var tennisClubMembershipEvent = defineConfig({
3375
4028
  defaultMessage: "Print certificate",
3376
4029
  description: "This is shown as the action name anywhere the user can trigger the action from"
3377
4030
  },
3378
- forms: [PRINT_CERTIFICATE_FORM],
4031
+ printForm: PRINT_CERTIFICATE_FORM,
3379
4032
  conditionals: [
3380
4033
  {
3381
4034
  type: "SHOW",
@@ -3415,6 +4068,22 @@ var tennisClubMembershipEvent = defineConfig({
3415
4068
  })
3416
4069
  }
3417
4070
  ]
4071
+ },
4072
+ {
4073
+ type: ActionType.ARCHIVE,
4074
+ label: {
4075
+ id: "v2.event.tennis-club-membership.action.archive.label",
4076
+ defaultMessage: "Archive",
4077
+ description: "This is shown as the action name anywhere the user can trigger the action from"
4078
+ }
4079
+ },
4080
+ {
4081
+ type: ActionType.REJECT,
4082
+ label: {
4083
+ id: "v2.event.tennis-club-membership.action.reject.label",
4084
+ defaultMessage: "Reject",
4085
+ description: "This is shown as the action name anywhere the user can trigger the action from"
4086
+ }
3418
4087
  }
3419
4088
  ],
3420
4089
  advancedSearch: [
@@ -3424,26 +4093,55 @@ var tennisClubMembershipEvent = defineConfig({
3424
4093
  description: "This is what this event is referred as in the system",
3425
4094
  id: "v2.event.tennis-club-membership.search"
3426
4095
  },
3427
- fields: [
3428
- {
3429
- fieldId: "applicant.dob"
3430
- }
3431
- ]
4096
+ fields: [field("applicant.dob").exact()]
3432
4097
  }
3433
- ]
4098
+ ],
4099
+ declaration: TENNIS_CLUB_DECLARATION_FORM
3434
4100
  });
3435
4101
 
3436
4102
  // ../commons/src/events/test.utils.ts
3437
- function generateActionInput(configuration, action) {
3438
- const fields = findActiveActionFormFields(configuration, action) ?? [];
3439
- const data = fields.reduce(
4103
+ function fieldConfigsToActionPayload(fields) {
4104
+ return fields.reduce(
3440
4105
  (acc, field2, i) => ({
3441
4106
  ...acc,
3442
4107
  [field2.id]: mapFieldTypeToMockValue(field2, i)
3443
4108
  }),
3444
4109
  {}
3445
4110
  );
3446
- return stripHiddenFields(fields, data);
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(
4134
+ (acc, pageId) => ({
4135
+ ...acc,
4136
+ [pageId]: true
4137
+ }),
4138
+ {}
4139
+ );
4140
+ const fieldBasedPayload = omitHiddenFields(annotationFields, annotation);
4141
+ return {
4142
+ ...fieldBasedPayload,
4143
+ ...visiblePageVerificationMap
4144
+ };
3447
4145
  }
3448
4146
  var eventPayloadGenerator = {
3449
4147
  create: (input = {}) => ({
@@ -3455,27 +4153,31 @@ var eventPayloadGenerator = {
3455
4153
  type: input.type ?? "TENNIS_CLUB_MEMBERSHIP",
3456
4154
  id
3457
4155
  }),
3458
- draft: (eventId, input = {}) => (0, import_lodash2.merge)(
4156
+ draft: ({ eventId, actionType }, input = {}) => (0, import_lodash2.merge)(
3459
4157
  {
3460
4158
  id: getUUID(),
3461
4159
  eventId,
3462
4160
  createdAt: (/* @__PURE__ */ new Date()).toISOString(),
3463
4161
  transactionId: getUUID(),
3464
4162
  action: {
3465
- type: ActionType.REQUEST_CORRECTION,
3466
- data: {
4163
+ transactionId: getUUID(),
4164
+ type: actionType,
4165
+ status: ActionStatus.Accepted,
4166
+ declaration: {
3467
4167
  "applicant.firstname": "Max",
3468
4168
  "applicant.surname": "McLaren",
3469
4169
  "applicant.dob": "2020-01-02",
3470
4170
  "recommender.none": true
3471
4171
  },
3472
- metadata: {
4172
+ annotation: {
3473
4173
  "correction.requester.relationship": "ANOTHER_AGENT",
3474
4174
  "correction.request.reason": "Child's name was incorrect"
3475
4175
  },
3476
4176
  createdAt: (/* @__PURE__ */ new Date()).toISOString(),
3477
4177
  createdBy: "@todo",
3478
- createdAtLocation: "@todo"
4178
+ createdByRole: "@todo",
4179
+ createdAtLocation: "@todo",
4180
+ updatedAtLocation: "@todo"
3479
4181
  }
3480
4182
  },
3481
4183
  input
@@ -3484,41 +4186,104 @@ var eventPayloadGenerator = {
3484
4186
  declare: (eventId, input = {}) => ({
3485
4187
  type: ActionType.DECLARE,
3486
4188
  transactionId: input.transactionId ?? getUUID(),
3487
- 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
+ ),
3488
4197
  eventId
3489
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
+ },
3490
4221
  validate: (eventId, input = {}) => ({
3491
4222
  type: ActionType.VALIDATE,
3492
4223
  transactionId: input.transactionId ?? getUUID(),
3493
- 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
+ ),
3494
4232
  duplicates: [],
3495
4233
  eventId
3496
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
+ }),
3497
4249
  archive: (eventId, input = {}, isDuplicate) => ({
3498
- type: ActionType.ARCHIVED,
4250
+ type: ActionType.ARCHIVE,
3499
4251
  transactionId: input.transactionId ?? getUUID(),
3500
- data: input.data ?? {},
3501
- metadata: { isDuplicate: isDuplicate ?? false },
4252
+ declaration: {},
4253
+ // @TODO: Check whether generator is needed?
4254
+ annotation: { isDuplicate: isDuplicate ?? false },
3502
4255
  duplicates: [],
3503
4256
  eventId
3504
4257
  }),
3505
4258
  reject: (eventId, input = {}) => ({
3506
4259
  type: ActionType.REJECT,
3507
4260
  transactionId: input.transactionId ?? getUUID(),
3508
- data: input.data ?? {},
4261
+ declaration: {},
4262
+ annotation: input.annotation ?? generateActionAnnotationInput(
4263
+ tennisClubMembershipEvent,
4264
+ ActionType.REJECT
4265
+ ),
3509
4266
  duplicates: [],
3510
4267
  eventId
3511
4268
  }),
3512
4269
  register: (eventId, input = {}) => ({
3513
4270
  type: ActionType.REGISTER,
3514
4271
  transactionId: input.transactionId ?? getUUID(),
3515
- 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
+ ),
3516
4280
  eventId
3517
4281
  }),
3518
4282
  printCertificate: (eventId, input = {}) => ({
3519
4283
  type: ActionType.PRINT_CERTIFICATE,
3520
4284
  transactionId: input.transactionId ?? getUUID(),
3521
- data: input.data ?? generateActionInput(
4285
+ declaration: {},
4286
+ annotation: input.annotation ?? generateActionAnnotationInput(
3522
4287
  tennisClubMembershipEvent,
3523
4288
  ActionType.PRINT_CERTIFICATE
3524
4289
  ),
@@ -3528,17 +4293,21 @@ var eventPayloadGenerator = {
3528
4293
  request: (eventId, input = {}) => ({
3529
4294
  type: ActionType.REQUEST_CORRECTION,
3530
4295
  transactionId: input.transactionId ?? getUUID(),
3531
- data: input.data ?? generateActionInput(
4296
+ declaration: input.declaration ?? generateActionDeclarationInput(
4297
+ tennisClubMembershipEvent,
4298
+ ActionType.REQUEST_CORRECTION
4299
+ ),
4300
+ annotation: input.annotation ?? generateActionAnnotationInput(
3532
4301
  tennisClubMembershipEvent,
3533
4302
  ActionType.REQUEST_CORRECTION
3534
4303
  ),
3535
- metadata: {},
3536
4304
  eventId
3537
4305
  }),
3538
4306
  approve: (eventId, requestId, input = {}) => ({
3539
4307
  type: ActionType.APPROVE_CORRECTION,
3540
4308
  transactionId: input.transactionId ?? getUUID(),
3541
- data: input.data ?? generateActionInput(
4309
+ declaration: {},
4310
+ annotation: input.annotation ?? generateActionAnnotationInput(
3542
4311
  tennisClubMembershipEvent,
3543
4312
  ActionType.APPROVE_CORRECTION
3544
4313
  ),
@@ -3548,7 +4317,8 @@ var eventPayloadGenerator = {
3548
4317
  reject: (eventId, requestId, input = {}) => ({
3549
4318
  type: ActionType.REJECT_CORRECTION,
3550
4319
  transactionId: input.transactionId ?? getUUID(),
3551
- data: input.data ?? generateActionInput(
4320
+ declaration: {},
4321
+ annotation: input.annotation ?? generateActionAnnotationInput(
3552
4322
  tennisClubMembershipEvent,
3553
4323
  ActionType.REJECT_CORRECTION
3554
4324
  ),
@@ -3564,24 +4334,34 @@ function generateActionDocument({
3564
4334
  defaults = {}
3565
4335
  }) {
3566
4336
  const actionBase = {
3567
- createdAt: (/* @__PURE__ */ new Date()).toISOString(),
4337
+ // Offset is needed so the createdAt timestamps for events, actions and drafts make logical sense in storybook tests.
4338
+ // @TODO: This should be fixed in the future.
4339
+ createdAt: new Date(Date.now() - 500).toISOString(),
3568
4340
  createdBy: getUUID(),
4341
+ createdByRole: "FIELD_AGENT",
3569
4342
  id: getUUID(),
3570
4343
  createdAtLocation: "TODO",
3571
- data: generateActionInput(configuration, action),
3572
- metadata: {},
3573
- ...defaults
4344
+ updatedAtLocation: "TODO",
4345
+ declaration: generateActionDeclarationInput(configuration, action),
4346
+ annotation: {},
4347
+ ...defaults,
4348
+ status: ActionStatus.Accepted,
4349
+ transactionId: getUUID()
3574
4350
  };
3575
4351
  switch (action) {
4352
+ case ActionType.READ:
4353
+ return { ...actionBase, type: action };
4354
+ case ActionType.MARKED_AS_DUPLICATE:
4355
+ return { ...actionBase, type: action };
3576
4356
  case ActionType.DECLARE:
3577
4357
  return { ...actionBase, type: action };
3578
4358
  case ActionType.UNASSIGN:
3579
- return { ...actionBase, type: action };
4359
+ return { ...actionBase, type: action, assignedTo: null };
3580
4360
  case ActionType.ASSIGN:
3581
4361
  return { ...actionBase, assignedTo: getUUID(), type: action };
3582
4362
  case ActionType.VALIDATE:
3583
4363
  return { ...actionBase, type: action };
3584
- case ActionType.ARCHIVED:
4364
+ case ActionType.ARCHIVE:
3585
4365
  return { ...actionBase, type: action };
3586
4366
  case ActionType.REJECT:
3587
4367
  return { ...actionBase, type: action };
@@ -3597,14 +4377,13 @@ function generateActionDocument({
3597
4377
  return { ...actionBase, requestId: getUUID(), type: action };
3598
4378
  case ActionType.REJECT_CORRECTION:
3599
4379
  return { ...actionBase, requestId: getUUID(), type: action };
3600
- case ActionType.CUSTOM:
3601
- return { ...actionBase, type: action };
3602
4380
  case ActionType.REGISTER:
3603
4381
  return {
3604
4382
  ...actionBase,
3605
- type: action,
3606
- identifiers: { trackingId: getUUID(), registrationNumber: getUUID() }
4383
+ type: action
3607
4384
  };
4385
+ case ActionType.DELETE:
4386
+ case ActionType.DETECT_DUPLICATE:
3608
4387
  default:
3609
4388
  throw new Error(`Unsupported action type: ${action}`);
3610
4389
  }
@@ -3619,12 +4398,18 @@ function generateEventDocument({
3619
4398
  actions: actions.map(
3620
4399
  (action) => generateActionDocument({ configuration, action })
3621
4400
  ),
3622
- createdAt: (/* @__PURE__ */ new Date()).toISOString(),
4401
+ // Offset is needed so the createdAt timestamps for events, actions and drafts make logical sense in storybook tests.
4402
+ // @TODO: This should be fixed in the future.
4403
+ createdAt: new Date(Date.now() - 1e3).toISOString(),
3623
4404
  id: getUUID(),
3624
- updatedAt: (/* @__PURE__ */ new Date()).toISOString()
4405
+ // Offset is needed so the createdAt timestamps for events, actions and drafts make logical sense in storybook tests.
4406
+ // @TODO: This should be fixed in the future.
4407
+ updatedAt: new Date(Date.now() - 1e3).toISOString(),
4408
+ dateOfEvent: configuration.dateOfEvent,
4409
+ updatedAtLocation: getUUID()
3625
4410
  };
3626
4411
  }
3627
- function generateEventDraftDocument(eventId, actionType = ActionType.DECLARE, data = {}) {
4412
+ function generateEventDraftDocument(eventId, actionType = ActionType.DECLARE, declaration = {}) {
3628
4413
  const action = generateActionDocument({
3629
4414
  configuration: tennisClubMembershipEvent,
3630
4415
  action: actionType
@@ -3634,9 +4419,9 @@ function generateEventDraftDocument(eventId, actionType = ActionType.DECLARE, da
3634
4419
  transactionId: getUUID(),
3635
4420
  action: {
3636
4421
  ...action,
3637
- data: {
3638
- ...action.data,
3639
- ...data
4422
+ declaration: {
4423
+ ...action.declaration,
4424
+ ...declaration
3640
4425
  }
3641
4426
  },
3642
4427
  createdAt: (/* @__PURE__ */ new Date()).toISOString(),
@@ -3650,10 +4435,12 @@ var eventQueryDataGenerator = (overrides = {}) => ({
3650
4435
  createdAt: overrides.createdAt ?? (/* @__PURE__ */ new Date()).toISOString(),
3651
4436
  createdBy: overrides.createdBy ?? getUUID(),
3652
4437
  createdAtLocation: overrides.createdAtLocation ?? getUUID(),
3653
- modifiedAt: overrides.modifiedAt ?? (/* @__PURE__ */ new Date()).toISOString(),
4438
+ updatedAtLocation: overrides.updatedAtLocation ?? getUUID(),
4439
+ updatedAt: overrides.updatedAt ?? (/* @__PURE__ */ new Date()).toISOString(),
3654
4440
  assignedTo: overrides.assignedTo ?? null,
3655
4441
  updatedBy: overrides.updatedBy ?? getUUID(),
3656
- data: overrides.data ?? {
4442
+ updatedByUserRole: overrides.updatedByUserRole ?? "FIELD_AGENT",
4443
+ declaration: overrides.declaration ?? {
3657
4444
  "recommender.none": true,
3658
4445
  "applicant.firstname": "Danny",
3659
4446
  "applicant.surname": "Doe",
@@ -3661,6 +4448,11 @@ var eventQueryDataGenerator = (overrides = {}) => ({
3661
4448
  },
3662
4449
  trackingId: overrides.trackingId ?? "M3F8YQ"
3663
4450
  });
4451
+ var generateTranslationConfig = (message) => ({
4452
+ defaultMessage: message,
4453
+ description: "Description for ${message}",
4454
+ id: message
4455
+ });
3664
4456
 
3665
4457
  // ../commons/src/events/TemplateConfig.ts
3666
4458
  function isTemplateVariable(value) {
@@ -3678,8 +4470,10 @@ function isFieldValueWithoutTemplates(value) {
3678
4470
  }
3679
4471
  return true;
3680
4472
  }
3681
- function isDefaultValue(value) {
3682
- if (!value) return false;
4473
+ function isFieldConfigDefaultValue(value) {
4474
+ if (!value) {
4475
+ return false;
4476
+ }
3683
4477
  if (isFieldValue(value)) {
3684
4478
  return true;
3685
4479
  }
@@ -3687,7 +4481,217 @@ function isDefaultValue(value) {
3687
4481
  return true;
3688
4482
  }
3689
4483
  if (typeof value === "object" && Object.values(value).every((v) => typeof v === "object" && v !== null)) {
3690
- return Object.values(value).every((v) => isDefaultValue(v));
4484
+ return Object.values(value).every((v) => isFieldConfigDefaultValue(v));
3691
4485
  }
3692
4486
  return false;
3693
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());