@opencrvs/toolkit 1.8.0-rc.f9c5526 → 1.8.0-rc.f9d33b7

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 (34) hide show
  1. package/dist/commons/api/router.d.ts +7290 -4133
  2. package/dist/commons/conditionals/conditionals.d.ts +9 -6
  3. package/dist/commons/conditionals/validate.d.ts +4 -6
  4. package/dist/commons/events/ActionConfig.d.ts +86380 -1682
  5. package/dist/commons/events/ActionDocument.d.ts +420 -103
  6. package/dist/commons/events/ActionInput.d.ts +158 -60
  7. package/dist/commons/events/ActionType.d.ts +2 -0
  8. package/dist/commons/events/AdvancedSearchConfig.d.ts +371 -25
  9. package/dist/commons/events/CompositeFieldValue.d.ts +3 -0
  10. package/dist/commons/events/Draft.d.ts +27 -9
  11. package/dist/commons/events/EventConfig.d.ts +41061 -1337
  12. package/dist/commons/events/EventDocument.d.ts +334 -77
  13. package/dist/commons/events/EventIndex.d.ts +915 -4
  14. package/dist/commons/events/EventInput.d.ts +13 -0
  15. package/dist/commons/events/EventMetadata.d.ts +13 -3
  16. package/dist/commons/events/FieldConfig.d.ts +3466 -721
  17. package/dist/commons/events/FieldType.d.ts +1 -2
  18. package/dist/commons/events/FieldValue.d.ts +1 -1
  19. package/dist/commons/events/FormConfig.d.ts +38845 -517
  20. package/dist/commons/events/PageConfig.d.ts +9671 -203
  21. package/dist/commons/events/SummaryConfig.d.ts +81 -42
  22. package/dist/commons/events/User.d.ts +5 -0
  23. package/dist/commons/events/WorkqueueConfig.d.ts +44 -20
  24. package/dist/commons/events/defineConfig.d.ts +6681 -31
  25. package/dist/commons/events/event.d.ts +25 -0
  26. package/dist/commons/events/field.d.ts +68 -0
  27. package/dist/commons/events/index.d.ts +3 -0
  28. package/dist/commons/events/scopes.d.ts +26 -0
  29. package/dist/commons/events/test.utils.d.ts +1 -38
  30. package/dist/commons/events/utils.d.ts +3404 -91
  31. package/dist/commons/events/utils.test.d.ts +2 -0
  32. package/dist/conditionals/index.js +36 -33
  33. package/dist/events/index.js +975 -625
  34. package/package.json +3 -2
@@ -30,6 +30,7 @@ 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,
33
34
  Action: () => Action,
34
35
  ActionBase: () => ActionBase,
35
36
  ActionConditional: () => ActionConditional,
@@ -52,6 +53,8 @@ __export(events_exports, {
52
53
  AssignActionInput: () => AssignActionInput,
53
54
  AsyncRejectActionDocument: () => AsyncRejectActionDocument,
54
55
  BaseActionInput: () => BaseActionInput,
56
+ CONFIG_GET_ALLOWED_SCOPES: () => CONFIG_GET_ALLOWED_SCOPES,
57
+ CONFIG_SEARCH_ALLOWED_SCOPES: () => CONFIG_SEARCH_ALLOWED_SCOPES,
55
58
  CertificateConfig: () => CertificateConfig,
56
59
  CertificateTemplateConfig: () => CertificateTemplateConfig,
57
60
  CheckboxFieldValue: () => CheckboxFieldValue,
@@ -69,6 +72,7 @@ __export(events_exports, {
69
72
  DeclarationUpdateActions: () => DeclarationUpdateActions,
70
73
  DeclareActionInput: () => DeclareActionInput,
71
74
  DeduplicationConfig: () => DeduplicationConfig,
75
+ DeleteActionInput: () => DeleteActionInput,
72
76
  DisplayOnReviewConditional: () => DisplayOnReviewConditional,
73
77
  Draft: () => Draft,
74
78
  DraftInput: () => DraftInput,
@@ -77,6 +81,8 @@ __export(events_exports, {
77
81
  EnableConditional: () => EnableConditional,
78
82
  EventConfig: () => EventConfig,
79
83
  EventDocument: () => EventDocument,
84
+ EventFieldConfigSchema: () => EventFieldConfigSchema,
85
+ EventFieldId: () => EventFieldId,
80
86
  EventIndex: () => EventIndex,
81
87
  EventInput: () => EventInput,
82
88
  EventMetadata: () => EventMetadata,
@@ -85,6 +91,7 @@ __export(events_exports, {
85
91
  EventStatuses: () => EventStatuses,
86
92
  FieldConditional: () => FieldConditional,
87
93
  FieldConfig: () => FieldConfig,
94
+ FieldConfigSchema: () => FieldConfigSchema,
88
95
  FieldType: () => FieldType,
89
96
  FieldUpdateValue: () => FieldUpdateValue,
90
97
  FieldValue: () => FieldValue,
@@ -99,22 +106,27 @@ __export(events_exports, {
99
106
  ImageMimeType: () => ImageMimeType,
100
107
  LanguageConfig: () => LanguageConfig,
101
108
  MarkedAsDuplicateActionInput: () => MarkedAsDuplicateActionInput,
109
+ MatchType: () => MatchType,
102
110
  MimeType: () => MimeType,
111
+ NonEmptyTextValue: () => NonEmptyTextValue,
103
112
  NotifyActionInput: () => NotifyActionInput,
104
113
  NumberFieldValue: () => NumberFieldValue,
105
114
  PageConfig: () => PageConfig,
106
115
  PageTypes: () => PageTypes,
107
116
  PrintCertificateActionInput: () => PrintCertificateActionInput,
117
+ QueryInput: () => QueryInput,
118
+ QueryType: () => QueryType,
108
119
  ReadActionInput: () => ReadActionInput,
109
120
  RegisterAction: () => RegisterAction,
110
121
  RegisterActionInput: () => RegisterActionInput,
111
122
  RejectCorrectionActionInput: () => RejectCorrectionActionInput,
112
123
  RejectDeclarationActionInput: () => RejectDeclarationActionInput,
113
124
  RequestCorrectionActionInput: () => RequestCorrectionActionInput,
114
- RequiredTextValue: () => RequiredTextValue,
115
125
  ResolvedUser: () => ResolvedUser,
116
126
  RuralAddressUpdateValue: () => RuralAddressUpdateValue,
117
127
  RuralAddressValue: () => RuralAddressValue,
128
+ SearchField: () => SearchField,
129
+ SelectOption: () => SelectOption,
118
130
  ShowConditional: () => ShowConditional,
119
131
  SummaryConfig: () => SummaryConfig,
120
132
  TextValue: () => TextValue,
@@ -126,12 +138,16 @@ __export(events_exports, {
126
138
  VerificationActionConfig: () => VerificationActionConfig,
127
139
  VerificationPageConfig: () => VerificationPageConfig,
128
140
  WorkqueueConfig: () => WorkqueueConfig,
141
+ ZodDate: () => ZodDate,
129
142
  alwaysTrue: () => alwaysTrue,
130
143
  and: () => and,
131
144
  annotationActions: () => annotationActions,
132
145
  applyDraftsToEventIndex: () => applyDraftsToEventIndex,
146
+ areConditionsMet: () => areConditionsMet,
133
147
  compositeFieldTypes: () => compositeFieldTypes,
134
148
  createEmptyDraft: () => createEmptyDraft,
149
+ createEventConditionals: () => createEventConditionals,
150
+ createFieldConditionals: () => createFieldConditionals,
135
151
  createValidationSchema: () => createValidationSchema,
136
152
  deepDropNulls: () => deepDropNulls,
137
153
  deepMerge: () => deepMerge,
@@ -142,6 +158,7 @@ __export(events_exports, {
142
158
  defineFormConditional: () => defineFormConditional,
143
159
  defineFormPage: () => defineFormPage,
144
160
  definePage: () => definePage,
161
+ defineWorkqueue: () => defineWorkqueue,
145
162
  errorMessages: () => errorMessages,
146
163
  event: () => event,
147
164
  eventMetadataLabelMap: () => eventMetadataLabelMap,
@@ -150,8 +167,10 @@ __export(events_exports, {
150
167
  eventStatuses: () => eventStatuses,
151
168
  field: () => field,
152
169
  fieldTypes: () => fieldTypes,
170
+ filterUnallowedActions: () => filterUnallowedActions,
153
171
  findActiveDrafts: () => findActiveDrafts,
154
172
  findAllFields: () => findAllFields,
173
+ findLastAssignmentAction: () => findLastAssignmentAction,
155
174
  findRecordActionPages: () => findRecordActionPages,
156
175
  generateActionAnnotationInput: () => generateActionAnnotationInput,
157
176
  generateActionDeclarationInput: () => generateActionDeclarationInput,
@@ -165,18 +184,21 @@ __export(events_exports, {
165
184
  getActionAnnotationFields: () => getActionAnnotationFields,
166
185
  getActionReview: () => getActionReview,
167
186
  getActionReviewFields: () => getActionReviewFields,
168
- getAllAnnotationFields: () => getAllAnnotationFields,
187
+ getActionVerificationPageIds: () => getActionVerificationPageIds,
169
188
  getAnnotationFromDrafts: () => getAnnotationFromDrafts,
189
+ getAssignedUserFromActions: () => getAssignedUserFromActions,
170
190
  getCurrentEventState: () => getCurrentEventState,
171
191
  getCurrentEventStateWithDrafts: () => getCurrentEventStateWithDrafts,
172
192
  getDeclaration: () => getDeclaration,
173
193
  getDeclarationFields: () => getDeclarationFields,
174
194
  getDeclarationPages: () => getDeclarationPages,
175
- getFieldValidationErrors: () => getFieldValidationErrors,
195
+ getVisibleVerificationPageIds: () => getVisibleVerificationPageIds,
196
+ hasAnyOfScopes: () => hasAnyOfScopes,
176
197
  isAddressFieldType: () => isAddressFieldType,
177
198
  isAdministrativeAreaFieldType: () => isAdministrativeAreaFieldType,
178
199
  isBulletListFieldType: () => isBulletListFieldType,
179
200
  isCheckboxFieldType: () => isCheckboxFieldType,
201
+ isConditionMet: () => isConditionMet,
180
202
  isCountryFieldType: () => isCountryFieldType,
181
203
  isDataFieldType: () => isDataFieldType,
182
204
  isDateFieldType: () => isDateFieldType,
@@ -205,18 +227,21 @@ __export(events_exports, {
205
227
  isTextFieldType: () => isTextFieldType,
206
228
  isUndeclaredDraft: () => isUndeclaredDraft,
207
229
  isVerificationPage: () => isVerificationPage,
230
+ isWriteAction: () => isWriteAction,
208
231
  mapFieldTypeToEmptyValue: () => mapFieldTypeToEmptyValue,
209
232
  mapFieldTypeToMockValue: () => mapFieldTypeToMockValue,
210
233
  mapFieldTypeToZod: () => mapFieldTypeToZod,
211
234
  never: () => never,
212
235
  not: () => not,
236
+ omitHiddenAnnotationFields: () => omitHiddenAnnotationFields,
213
237
  omitHiddenFields: () => omitHiddenFields,
214
238
  omitHiddenPaginatedFields: () => omitHiddenPaginatedFields,
215
239
  or: () => or,
240
+ runFieldValidations: () => runFieldValidations,
216
241
  user: () => user,
217
242
  validate: () => validate,
218
243
  validateFieldInput: () => validateFieldInput,
219
- validateWorkqueueConfig: () => validateWorkqueueConfig
244
+ writeActions: () => writeActions
220
245
  });
221
246
  module.exports = __toCommonJS(events_exports);
222
247
 
@@ -297,7 +322,6 @@ var FieldType = {
297
322
  RADIO_GROUP: "RADIO_GROUP",
298
323
  FILE: "FILE",
299
324
  FILE_WITH_OPTIONS: "FILE_WITH_OPTIONS",
300
- HIDDEN: "HIDDEN",
301
325
  BULLET_LIST: "BULLET_LIST",
302
326
  CHECKBOX: "CHECKBOX",
303
327
  SELECT: "SELECT",
@@ -402,7 +426,7 @@ var FileFieldWithOptionValue = import_zod3.z.array(FileFieldValueWithOption);
402
426
 
403
427
  // ../commons/src/events/FieldValue.ts
404
428
  var TextValue = import_zod4.z.string();
405
- var RequiredTextValue = TextValue.min(1);
429
+ var NonEmptyTextValue = TextValue.min(1);
406
430
  var DateValue = import_zod4.z.string().date().describe("Date in the format YYYY-MM-DD");
407
431
  var EmailValue = import_zod4.z.string().email();
408
432
  var CheckboxFieldValue = import_zod4.z.boolean();
@@ -435,27 +459,21 @@ var FieldUpdateValue = import_zod4.z.union([
435
459
 
436
460
  // ../commons/src/events/FieldConfig.ts
437
461
  var FieldId = import_zod5.z.string();
438
- var DependencyExpression = import_zod5.z.object({
439
- dependsOn: import_zod5.z.array(FieldId).default([]),
440
- expression: import_zod5.z.string()
441
- });
462
+ var ParentReference = import_zod5.z.object({
463
+ _fieldId: FieldId.optional()
464
+ }).optional();
442
465
  var BaseField = import_zod5.z.object({
443
466
  id: FieldId,
444
467
  defaultValue: import_zod5.z.union([
445
- // These are the currently supported default values types
446
- import_zod5.z.union([
447
- TextValue,
448
- RequiredTextValue,
449
- DateValue,
450
- NumberFieldValue,
451
- CheckboxFieldValue
452
- ]),
453
- DependencyExpression
468
+ TextValue,
469
+ NonEmptyTextValue,
470
+ DateValue,
471
+ NumberFieldValue,
472
+ CheckboxFieldValue
454
473
  ]).optional(),
474
+ parent: ParentReference,
455
475
  conditionals: import_zod5.z.array(FieldConditional).default([]).optional(),
456
476
  required: import_zod5.z.boolean().default(false).optional(),
457
- disabled: import_zod5.z.boolean().default(false).optional(),
458
- hidden: import_zod5.z.boolean().default(false).optional(),
459
477
  placeholder: TranslationConfig.optional(),
460
478
  validation: import_zod5.z.array(
461
479
  import_zod5.z.object({
@@ -463,7 +481,6 @@ var BaseField = import_zod5.z.object({
463
481
  message: TranslationConfig
464
482
  })
465
483
  ).default([]).optional(),
466
- dependsOn: import_zod5.z.array(FieldId).default([]).optional(),
467
484
  label: TranslationConfig,
468
485
  hideLabel: import_zod5.z.boolean().default(false).optional()
469
486
  });
@@ -472,7 +489,7 @@ var Divider = BaseField.extend({
472
489
  });
473
490
  var TextField = BaseField.extend({
474
491
  type: import_zod5.z.literal(FieldType.TEXT),
475
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional(),
492
+ defaultValue: NonEmptyTextValue.optional(),
476
493
  configuration: import_zod5.z.object({
477
494
  maxLength: import_zod5.z.number().optional().describe("Maximum length of the text"),
478
495
  type: import_zod5.z.enum(["text", "password"]).optional(),
@@ -482,7 +499,7 @@ var TextField = BaseField.extend({
482
499
  }).describe("Text input");
483
500
  var NumberField = BaseField.extend({
484
501
  type: import_zod5.z.literal(FieldType.NUMBER),
485
- defaultValue: import_zod5.z.union([NumberFieldValue, DependencyExpression]).optional(),
502
+ defaultValue: NumberFieldValue.optional(),
486
503
  configuration: import_zod5.z.object({
487
504
  min: import_zod5.z.number().optional().describe("Minimum value"),
488
505
  max: import_zod5.z.number().optional().describe("Maximum value"),
@@ -492,7 +509,7 @@ var NumberField = BaseField.extend({
492
509
  }).describe("Number input");
493
510
  var TextAreaField = BaseField.extend({
494
511
  type: import_zod5.z.literal(FieldType.TEXTAREA),
495
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional(),
512
+ defaultValue: NonEmptyTextValue.optional(),
496
513
  configuration: import_zod5.z.object({
497
514
  maxLength: import_zod5.z.number().optional().describe("Maximum length of the text"),
498
515
  rows: import_zod5.z.number().optional().describe("Number of visible text lines"),
@@ -526,11 +543,11 @@ var EmailField = BaseField.extend({
526
543
  configuration: import_zod5.z.object({
527
544
  maxLength: import_zod5.z.number().optional().describe("Maximum length of the text")
528
545
  }).default({ maxLength: 10 }).optional(),
529
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional()
546
+ defaultValue: NonEmptyTextValue.optional()
530
547
  });
531
548
  var DateField = BaseField.extend({
532
549
  type: import_zod5.z.literal(FieldType.DATE),
533
- defaultValue: import_zod5.z.union([DateValue, DependencyExpression]).optional(),
550
+ defaultValue: DateValue.optional(),
534
551
  configuration: import_zod5.z.object({
535
552
  notice: TranslationConfig.describe(
536
553
  "Text to display above the date input"
@@ -549,7 +566,7 @@ var HtmlFontVariant = import_zod5.z.enum([
549
566
  ]);
550
567
  var Paragraph = BaseField.extend({
551
568
  type: import_zod5.z.literal(FieldType.PARAGRAPH),
552
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional(),
569
+ defaultValue: NonEmptyTextValue.optional(),
553
570
  configuration: import_zod5.z.object({
554
571
  styles: import_zod5.z.object({
555
572
  fontVariant: HtmlFontVariant.optional()
@@ -558,7 +575,7 @@ var Paragraph = BaseField.extend({
558
575
  }).describe("A read-only HTML <p> paragraph");
559
576
  var PageHeader = BaseField.extend({
560
577
  type: import_zod5.z.literal(FieldType.PAGE_HEADER),
561
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional()
578
+ defaultValue: NonEmptyTextValue.optional()
562
579
  }).describe("A read-only header component for form pages");
563
580
  var File = BaseField.extend({
564
581
  type: import_zod5.z.literal(FieldType.FILE),
@@ -569,7 +586,8 @@ var File = BaseField.extend({
569
586
  width: import_zod5.z.enum(["full", "auto"]).optional().describe(
570
587
  "Whether the file upload button should take the full width of the container or not"
571
588
  )
572
- }).optional()
589
+ }).optional(),
590
+ fileName: TranslationConfig.optional()
573
591
  }).default({
574
592
  maxFileSize: DEFAULT_MAX_FILE_SIZE_BYTES
575
593
  })
@@ -580,7 +598,7 @@ var SelectOption = import_zod5.z.object({
580
598
  });
581
599
  var RadioGroup = BaseField.extend({
582
600
  type: import_zod5.z.literal(FieldType.RADIO_GROUP),
583
- defaultValue: import_zod5.z.union([TextValue, DependencyExpression]).optional(),
601
+ defaultValue: TextValue.optional(),
584
602
  options: import_zod5.z.array(SelectOption).describe("A list of options"),
585
603
  configuration: import_zod5.z.object({
586
604
  styles: import_zod5.z.object({
@@ -590,7 +608,7 @@ var RadioGroup = BaseField.extend({
590
608
  }).describe("Grouped radio options");
591
609
  var BulletList = BaseField.extend({
592
610
  type: import_zod5.z.literal(FieldType.BULLET_LIST),
593
- defaultValue: import_zod5.z.string().optional(),
611
+ defaultValue: TextValue.optional(),
594
612
  items: import_zod5.z.array(TranslationConfig).describe("A list of items"),
595
613
  configuration: import_zod5.z.object({
596
614
  styles: import_zod5.z.object({
@@ -600,16 +618,16 @@ var BulletList = BaseField.extend({
600
618
  }).describe("A list of bullet points");
601
619
  var Select = BaseField.extend({
602
620
  type: import_zod5.z.literal(FieldType.SELECT),
603
- defaultValue: import_zod5.z.union([TextValue, DependencyExpression]).optional(),
621
+ defaultValue: TextValue.optional(),
604
622
  options: import_zod5.z.array(SelectOption).describe("A list of options")
605
623
  }).describe("Select input");
606
624
  var Checkbox = BaseField.extend({
607
625
  type: import_zod5.z.literal(FieldType.CHECKBOX),
608
- defaultValue: import_zod5.z.union([CheckboxFieldValue, DependencyExpression]).optional()
626
+ defaultValue: CheckboxFieldValue.optional()
609
627
  }).describe("Boolean checkbox field");
610
628
  var Country = BaseField.extend({
611
629
  type: import_zod5.z.literal(FieldType.COUNTRY),
612
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional()
630
+ defaultValue: NonEmptyTextValue.optional()
613
631
  }).describe("Country select field");
614
632
  var AdministrativeAreas = import_zod5.z.enum([
615
633
  "ADMIN_STRUCTURE",
@@ -624,12 +642,12 @@ var AdministrativeAreaConfiguration = import_zod5.z.object({
624
642
  }).describe("Administrative area options");
625
643
  var AdministrativeArea = BaseField.extend({
626
644
  type: import_zod5.z.literal(FieldType.ADMINISTRATIVE_AREA),
627
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional(),
645
+ defaultValue: NonEmptyTextValue.optional(),
628
646
  configuration: AdministrativeAreaConfiguration
629
647
  }).describe("Administrative area input field e.g. facility, office");
630
648
  var Location = BaseField.extend({
631
649
  type: import_zod5.z.literal(FieldType.LOCATION),
632
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional()
650
+ defaultValue: NonEmptyTextValue.optional()
633
651
  }).describe("Input field for a location");
634
652
  var FileUploadWithOptions = BaseField.extend({
635
653
  type: import_zod5.z.literal(FieldType.FILE_WITH_OPTIONS),
@@ -643,11 +661,11 @@ var FileUploadWithOptions = BaseField.extend({
643
661
  });
644
662
  var Facility = BaseField.extend({
645
663
  type: import_zod5.z.literal(FieldType.FACILITY),
646
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional()
664
+ defaultValue: NonEmptyTextValue.optional()
647
665
  }).describe("Input field for a facility");
648
666
  var Office = BaseField.extend({
649
667
  type: import_zod5.z.literal(FieldType.OFFICE),
650
- defaultValue: import_zod5.z.union([RequiredTextValue, DependencyExpression]).optional()
668
+ defaultValue: NonEmptyTextValue.optional()
651
669
  }).describe("Input field for an office");
652
670
  var Address = BaseField.extend({
653
671
  type: import_zod5.z.literal(FieldType.ADDRESS),
@@ -656,7 +674,7 @@ var Address = BaseField.extend({
656
674
  var DataEntry = import_zod5.z.union([
657
675
  import_zod5.z.object({
658
676
  label: TranslationConfig,
659
- value: import_zod5.z.string()
677
+ value: TranslationConfig.or(import_zod5.z.string())
660
678
  }),
661
679
  import_zod5.z.object({
662
680
  fieldId: import_zod5.z.string()
@@ -692,7 +710,6 @@ var FieldConfig = import_zod5.z.discriminatedUnion("type", [
692
710
  EmailField,
693
711
  FileUploadWithOptions,
694
712
  DataField
695
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
696
713
  ]);
697
714
 
698
715
  // ../commons/src/events/PageConfig.ts
@@ -797,6 +814,12 @@ var DeclarationUpdateActions = ActionTypes.extract(
797
814
  declarationUpdateActionValues
798
815
  );
799
816
  var annotationActions = ActionTypes.exclude(declarationActionValues);
817
+ var writeActions = ActionTypes.exclude([
818
+ ActionType.CREATE,
819
+ ActionType.READ,
820
+ ActionType.ASSIGN,
821
+ ActionType.UNASSIGN
822
+ ]);
800
823
 
801
824
  // ../commons/src/events/FormConfig.ts
802
825
  var import_zod8 = require("zod");
@@ -811,6 +834,8 @@ var ActionFormConfig = import_zod8.z.object({
811
834
  var FormConfig = import_zod8.z.union([DeclarationFormConfig, ActionFormConfig]);
812
835
 
813
836
  // ../commons/src/events/ActionConfig.ts
837
+ var import_zod_openapi = require("zod-openapi");
838
+ (0, import_zod_openapi.extendZodWithOpenApi)(import_zod9.z);
814
839
  var ActionConditional2 = import_zod9.z.discriminatedUnion("type", [
815
840
  /** If conditional is defined, the action is shown to the user only if the condition is met */
816
841
  ShowConditional,
@@ -888,18 +913,24 @@ var ApproveCorrectionConfig = ActionConfigBase.merge(
888
913
  })
889
914
  );
890
915
  var ActionConfig = import_zod9.z.discriminatedUnion("type", [
891
- DeclareConfig,
892
- ValidateConfig,
893
- RejectDeclarationConfig,
894
- MarkedAsDuplicateConfig,
895
- ArchiveConfig,
896
- RegisterConfig,
897
- DeleteConfig,
898
- PrintCertificateActionConfig,
899
- RequestCorrectionConfig,
900
- RejectCorrectionConfig,
901
- ApproveCorrectionConfig
902
- ]);
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" });
903
934
  var DeclarationActionConfig = import_zod9.z.discriminatedUnion("type", [
904
935
  DeclareConfig,
905
936
  ValidateConfig,
@@ -943,10 +974,12 @@ var LanguageConfig = import_zod11.z.object({
943
974
  });
944
975
 
945
976
  // ../commons/src/events/EventConfig.ts
946
- var import_zod20 = require("zod");
977
+ var import_zod16 = require("zod");
947
978
 
948
979
  // ../commons/src/events/DeduplicationConfig.ts
949
980
  var import_zod12 = require("zod");
981
+ var import_zod_openapi2 = require("zod-openapi");
982
+ (0, import_zod_openapi2.extendZodWithOpenApi)(import_zod12.z);
950
983
  var FieldReference = import_zod12.z.string();
951
984
  var Matcher = import_zod12.z.object({
952
985
  fieldId: import_zod12.z.string(),
@@ -1007,7 +1040,9 @@ var Clause = import_zod12.z.lazy(
1007
1040
  DateRangeMatcher,
1008
1041
  DateDistanceMatcher
1009
1042
  ])
1010
- );
1043
+ ).openapi({
1044
+ ref: "Clause"
1045
+ });
1011
1046
  var DeduplicationConfig = import_zod12.z.object({
1012
1047
  id: import_zod12.z.string(),
1013
1048
  label: TranslationConfig,
@@ -1016,272 +1051,62 @@ var DeduplicationConfig = import_zod12.z.object({
1016
1051
 
1017
1052
  // ../commons/src/events/SummaryConfig.ts
1018
1053
  var import_zod13 = require("zod");
1019
- var Field = import_zod13.z.object({
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({
1020
1062
  id: import_zod13.z.string().describe("Id of summary field"),
1021
1063
  value: TranslationConfig.describe(
1022
1064
  "Summary field value. Can utilise values defined in configuration and EventMetadata"
1023
1065
  ),
1024
1066
  label: TranslationConfig,
1025
1067
  emptyValueMessage: TranslationConfig.optional()
1026
- });
1027
- var Title = import_zod13.z.object({
1028
- id: import_zod13.z.string(),
1029
- label: TranslationConfig.describe("Title content"),
1030
- emptyValueMessage: TranslationConfig.optional()
1031
- });
1068
+ }).describe("Custom configured field");
1032
1069
  var SummaryConfig = import_zod13.z.object({
1033
- title: Title.describe("Title of summary view."),
1034
- fields: import_zod13.z.array(Field).describe("Fields rendered in summary view.")
1070
+ fields: import_zod13.z.array(import_zod13.z.union([Field, ReferenceField])).describe("Fields rendered in summary view.")
1035
1071
  }).describe("Configuration for summary in event.");
1036
1072
 
1037
- // ../commons/src/events/WorkqueueConfig.ts
1038
- var import_zod15 = require("zod");
1039
-
1040
- // ../commons/src/events/EventMetadata.ts
1073
+ // ../commons/src/events/AdvancedSearchConfig.ts
1041
1074
  var import_zod14 = require("zod");
1042
- var EventStatus = {
1043
- CREATED: "CREATED",
1044
- NOTIFIED: "NOTIFIED",
1045
- DECLARED: "DECLARED",
1046
- VALIDATED: "VALIDATED",
1047
- REGISTERED: "REGISTERED",
1048
- CERTIFIED: "CERTIFIED",
1049
- REJECTED: "REJECTED",
1050
- ARCHIVED: "ARCHIVED"
1051
- };
1052
- var eventStatuses = Object.values(EventStatus);
1053
- var EventStatuses = import_zod14.z.nativeEnum(EventStatus);
1054
- var EventMetadata = import_zod14.z.object({
1055
- id: import_zod14.z.string(),
1056
- type: import_zod14.z.string(),
1057
- status: EventStatuses,
1058
- createdAt: import_zod14.z.string().datetime(),
1059
- createdBy: import_zod14.z.string(),
1060
- createdAtLocation: import_zod14.z.string(),
1061
- modifiedAt: import_zod14.z.string().datetime(),
1062
- assignedTo: import_zod14.z.string().nullish(),
1063
- updatedBy: import_zod14.z.string(),
1064
- trackingId: import_zod14.z.string(),
1065
- registrationNumber: import_zod14.z.string().nullish()
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()
1066
1081
  });
1067
- var eventMetadataLabelMap = {
1068
- "event.assignedTo": {
1069
- id: "event.assignedTo.label",
1070
- defaultMessage: "Assigned To",
1071
- description: "Assigned To"
1072
- },
1073
- "event.createdAt": {
1074
- id: "event.createdAt.label",
1075
- defaultMessage: "Created",
1076
- description: "Created At"
1077
- },
1078
- "event.createdAtLocation": {
1079
- id: "event.createdAtLocation.label",
1080
- defaultMessage: "Location",
1081
- description: "Created At Location"
1082
- },
1083
- "event.createdBy": {
1084
- id: "event.createdBy.label",
1085
- defaultMessage: "Created By",
1086
- description: "Created By"
1087
- },
1088
- "event.id": {
1089
- id: "event.id.label",
1090
- defaultMessage: "ID",
1091
- description: "ID"
1092
- },
1093
- "event.modifiedAt": {
1094
- id: "event.modifiedAt.label",
1095
- defaultMessage: "Updated",
1096
- description: "Modified At"
1097
- },
1098
- "event.status": {
1099
- id: "event.status.label",
1100
- defaultMessage: "Status",
1101
- description: "Status"
1102
- },
1103
- "event.type": {
1104
- id: "event.type.label",
1105
- defaultMessage: "Type",
1106
- description: "Type"
1107
- },
1108
- "event.updatedBy": {
1109
- id: "event.updatedBy.label",
1110
- defaultMessage: "Updated By",
1111
- description: "Updated By"
1112
- },
1113
- "event.trackingId": {
1114
- id: "event.trackingId.label",
1115
- defaultMessage: "Tracking ID",
1116
- description: "Tracking ID"
1117
- },
1118
- "event.registrationNumber": {
1119
- id: "event.registrationNumber.label",
1120
- defaultMessage: "Registration Number",
1121
- description: "Registration Number"
1122
- }
1123
- };
1124
-
1125
- // ../commons/src/events/WorkqueueConfig.ts
1126
- var WorkqueueConfig = import_zod15.z.object({
1127
- id: import_zod15.z.string().describe("Unique identifier for workqueue."),
1128
- filters: import_zod15.z.array(
1129
- import_zod15.z.object({
1130
- status: import_zod15.z.array(EventStatuses).describe("Defines which statusese are included in the workqueue.")
1131
- })
1132
- ).describe("Filters to be applied to workqueue.")
1133
- }).describe("Configuration for workqueue.");
1134
-
1135
- // ../commons/src/events/AdvancedSearchConfig.ts
1136
- var import_zod16 = require("zod");
1137
- var AdvancedSearchConfig = import_zod16.z.object({
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
+ ]);
1095
+ var AdvancedSearchConfig = import_zod14.z.object({
1138
1096
  title: TranslationConfig.describe("Advanced search tab title"),
1139
- fields: import_zod16.z.array(
1140
- import_zod16.z.object({
1141
- fieldId: import_zod16.z.string(),
1142
- config: import_zod16.z.object({
1143
- type: import_zod16.z.enum(["FUZZY", "EXACT", "RANGE"]).describe("Determines the type of field")
1144
- }).optional().describe("Configuration options for the field")
1145
- })
1146
- ).optional().default([]).describe("Advanced search fields.")
1097
+ fields: import_zod14.z.array(SearchField).describe("Advanced search fields.")
1147
1098
  });
1148
1099
 
1149
1100
  // ../commons/src/events/utils.ts
1150
1101
  var import_lodash = require("lodash");
1151
1102
 
1152
- // ../commons/src/workqueues/WorkqueueConfig.ts
1153
- var import_zod18 = require("zod");
1154
-
1155
- // ../commons/src/workqueues/defaultColumns.ts
1156
- var import_zod17 = require("zod");
1157
- var WorkQueueColumnConfig = import_zod17.z.object({
1158
- id: import_zod17.z.string(),
1159
- label: TranslationConfig
1160
- });
1161
- var defaultColumns = {
1162
- event: {
1163
- id: "event",
1164
- label: {
1165
- defaultMessage: "Event",
1166
- description: "This is the label for the workqueue column",
1167
- id: "workqueue.default.column.event"
1168
- }
1169
- },
1170
- status: {
1171
- id: "status",
1172
- label: {
1173
- defaultMessage: "Status",
1174
- description: "This is the label for the workqueue column",
1175
- id: "workqueue.default.column.status"
1176
- }
1177
- },
1178
- createdAt: {
1179
- id: "createdAt",
1180
- label: {
1181
- defaultMessage: "Created",
1182
- description: "This is the label for the workqueue column",
1183
- id: "workqueue.default.column.createdAt"
1184
- }
1185
- },
1186
- modifiedAt: {
1187
- id: "modifiedAt",
1188
- label: {
1189
- defaultMessage: "Modified",
1190
- description: "This is the label for the workqueue column",
1191
- id: "workqueue.default.column.modifiedAt"
1192
- }
1193
- }
1194
- };
1195
- var DefaultColumnKeys = import_zod17.z.enum(
1196
- Object.keys(defaultColumns)
1197
- );
1198
-
1199
- // ../commons/src/workqueues/WorkqueueConfig.ts
1200
- var rootWorkqueueConfig = import_zod18.z.object({
1201
- id: import_zod18.z.string(),
1202
- title: TranslationConfig,
1203
- columns: import_zod18.z.array(WorkQueueColumnConfig),
1204
- defaultColumns: import_zod18.z.array(DefaultColumnKeys)
1205
- });
1206
- var defineWorkqueue = (config) => rootWorkqueueConfig.parse(config);
1207
-
1208
- // ../commons/src/workqueues/all.ts
1209
- var allWorkqueue = defineWorkqueue({
1210
- id: "all",
1211
- title: {
1212
- defaultMessage: "All events",
1213
- description: "This is the label for the workqueue",
1214
- id: "workqueue.all.label"
1215
- },
1216
- columns: [
1217
- {
1218
- id: "title",
1219
- label: {
1220
- defaultMessage: "Title",
1221
- description: "This is the label for the workqueue column",
1222
- id: "workqueue.all.column.title"
1223
- }
1224
- }
1225
- ],
1226
- defaultColumns: ["event", "status", "createdAt", "modifiedAt"]
1227
- });
1228
-
1229
- // ../commons/src/workqueues/readyForReview.ts
1230
- var inReviewWorkqueue = defineWorkqueue({
1231
- id: "ready-for-review",
1232
- title: {
1233
- defaultMessage: "Ready for review",
1234
- description: "Label for in review workqueue",
1235
- id: "event.workqueue.in-review.label"
1236
- },
1237
- columns: [
1238
- {
1239
- id: "title",
1240
- label: {
1241
- defaultMessage: "Title",
1242
- description: "This is the label for the workqueue column",
1243
- id: "workqueue.in-reveiw.column.title"
1244
- }
1245
- }
1246
- ],
1247
- defaultColumns: ["event", "createdAt", "modifiedAt"]
1248
- });
1249
-
1250
- // ../commons/src/workqueues/readyToPrint.ts
1251
- var registeredWorkqueue = defineWorkqueue({
1252
- id: "registered",
1253
- title: {
1254
- defaultMessage: "Ready to print",
1255
- description: "Label for registered workqueue",
1256
- id: "event.workqueue.registered.label"
1257
- },
1258
- columns: [
1259
- {
1260
- id: "title",
1261
- label: {
1262
- defaultMessage: "Title",
1263
- description: "This is the label for the workqueue column",
1264
- id: "workqueue.registered.column.title"
1265
- }
1266
- }
1267
- ],
1268
- defaultColumns: ["event", "createdAt", "modifiedAt"]
1269
- });
1270
-
1271
- // ../commons/src/workqueues/index.ts
1272
- var workqueues = {
1273
- all: allWorkqueue,
1274
- registered: registeredWorkqueue,
1275
- inReview: inReviewWorkqueue
1276
- };
1277
-
1278
1103
  // ../commons/src/conditionals/validate.ts
1279
1104
  var import_ajv = __toESM(require("ajv"));
1280
1105
  var import_ajv_formats = __toESM(require("ajv-formats"));
1281
1106
  var import_date_fns = require("date-fns");
1282
1107
 
1283
1108
  // ../commons/src/events/FieldTypeMapping.ts
1284
- var import_zod19 = require("zod");
1109
+ var import_zod15 = require("zod");
1285
1110
  function mapFieldTypeToZod(type, required) {
1286
1111
  let schema;
1287
1112
  switch (type) {
@@ -1305,8 +1130,7 @@ function mapFieldTypeToZod(type, required) {
1305
1130
  case FieldType.FACILITY:
1306
1131
  case FieldType.OFFICE:
1307
1132
  case FieldType.SIGNATURE:
1308
- case FieldType.HIDDEN:
1309
- schema = required ? RequiredTextValue : TextValue;
1133
+ schema = required ? NonEmptyTextValue : TextValue;
1310
1134
  break;
1311
1135
  case FieldType.NUMBER:
1312
1136
  schema = NumberFieldValue;
@@ -1334,7 +1158,7 @@ function createValidationSchema(config) {
1334
1158
  for (const field2 of config) {
1335
1159
  shape[field2.id] = mapFieldTypeToZod(field2.type, field2.required);
1336
1160
  }
1337
- return import_zod19.z.object(shape);
1161
+ return import_zod15.z.object(shape);
1338
1162
  }
1339
1163
  function mapFieldTypeToMockValue(field2, i) {
1340
1164
  switch (field2.type) {
@@ -1508,12 +1332,23 @@ var ajv = new import_ajv.default({
1508
1332
  function validate(schema, data) {
1509
1333
  return ajv.validate(schema, data);
1510
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
+ }
1511
1341
  function getConditionalActionsForField(field2, values) {
1512
1342
  if (!field2.conditionals) {
1513
1343
  return [];
1514
1344
  }
1515
1345
  return field2.conditionals.filter((conditional) => validate(conditional.conditional, values)).map((conditional) => conditional.type);
1516
1346
  }
1347
+ function areConditionsMet(conditions, values) {
1348
+ return conditions.every(
1349
+ (condition) => isConditionMet(condition.conditional, values)
1350
+ );
1351
+ }
1517
1352
  function isFieldConditionMet(field2, form, conditionalType) {
1518
1353
  const hasRule = (field2.conditionals ?? []).some(
1519
1354
  (conditional) => conditional.type === conditionalType
@@ -1532,6 +1367,10 @@ function isFieldConditionMet(field2, form, conditionalType) {
1532
1367
  function isFieldVisible(field2, form) {
1533
1368
  return isFieldConditionMet(field2, form, ConditionalType.SHOW);
1534
1369
  }
1370
+ function isFieldEmptyAndNotRequired(field2, form) {
1371
+ const fieldValue = form[field2.id];
1372
+ return !field2.required && (fieldValue === void 0 || fieldValue === "");
1373
+ }
1535
1374
  function isFieldEnabled(field2, form) {
1536
1375
  return isFieldConditionMet(field2, form, ConditionalType.ENABLE);
1537
1376
  }
@@ -1636,6 +1475,11 @@ function runFieldValidations({
1636
1475
  field: field2,
1637
1476
  values
1638
1477
  }) {
1478
+ if (!isFieldVisible(field2, values) || isFieldEmptyAndNotRequired(field2, values)) {
1479
+ return {
1480
+ errors: []
1481
+ };
1482
+ }
1639
1483
  const conditionalParameters = {
1640
1484
  $form: values,
1641
1485
  $now: (0, import_date_fns.formatISO)(/* @__PURE__ */ new Date(), { representation: "date" })
@@ -1653,29 +1497,6 @@ function runFieldValidations({
1653
1497
  errors: [...fieldValidationResult, ...customValidationResults]
1654
1498
  };
1655
1499
  }
1656
- function getFieldValidationErrors({
1657
- field: field2,
1658
- values
1659
- }) {
1660
- if (!isFieldVisible(field2, values) || !isFieldEnabled(field2, values)) {
1661
- if (values[field2.id]) {
1662
- return {
1663
- errors: [
1664
- {
1665
- message: errorMessages.hiddenField
1666
- }
1667
- ]
1668
- };
1669
- }
1670
- return {
1671
- errors: []
1672
- };
1673
- }
1674
- return runFieldValidations({
1675
- field: field2,
1676
- values
1677
- });
1678
- }
1679
1500
 
1680
1501
  // ../commons/src/uuid.ts
1681
1502
  var import_uuid = require("uuid");
@@ -1683,9 +1504,6 @@ function getUUID() {
1683
1504
  return (0, import_uuid.v4)();
1684
1505
  }
1685
1506
 
1686
- // ../commons/src/events/utils.ts
1687
- var import_date_fns2 = require("date-fns");
1688
-
1689
1507
  // ../commons/src/utils.ts
1690
1508
  function getOrThrow(x, message) {
1691
1509
  if (x === void 0 || x === null) {
@@ -1722,15 +1540,9 @@ var getActionAnnotationFields = (actionConfig) => {
1722
1540
  }
1723
1541
  return [];
1724
1542
  };
1725
- var getAllAnnotationFields = (config) => {
1543
+ function getAllAnnotationFields(config) {
1726
1544
  return (0, import_lodash.flattenDeep)(config.actions.map(getActionAnnotationFields));
1727
- };
1728
- var findAllFields = (config) => {
1729
- return (0, import_lodash.flattenDeep)([
1730
- ...getDeclarationFields(config),
1731
- ...getAllAnnotationFields(config)
1732
- ]);
1733
- };
1545
+ }
1734
1546
  var findRecordActionPages = (config, actionType) => {
1735
1547
  const action = config.actions.find((a) => a.type === actionType);
1736
1548
  if (action?.type === ActionType.REQUEST_CORRECTION) {
@@ -1753,34 +1565,22 @@ function getActionReview(configuration, actionType) {
1753
1565
  function getActionReviewFields(configuration, actionType) {
1754
1566
  return getActionReview(configuration, actionType).fields;
1755
1567
  }
1756
- function validateWorkqueueConfig(workqueueConfigs) {
1757
- workqueueConfigs.map((workqueue) => {
1758
- const rootWorkqueue = Object.values(workqueues).find(
1759
- (wq) => wq.id === workqueue.id
1760
- );
1761
- if (!rootWorkqueue) {
1762
- throw new Error(
1763
- `Invalid workqueue configuration: workqueue not found with id: ${workqueue.id}`
1764
- );
1765
- }
1766
- });
1767
- }
1768
1568
  function isPageVisible(page, formValues) {
1769
1569
  if (!page.conditional) {
1770
1570
  return true;
1771
1571
  }
1772
- return validate(page.conditional, {
1773
- $form: formValues,
1774
- $now: (0, import_date_fns2.formatISO)(/* @__PURE__ */ new Date(), { representation: "date" })
1775
- });
1572
+ return isConditionMet(page.conditional, formValues);
1776
1573
  }
1777
- function omitHiddenFields(fields, values) {
1574
+ function omitHiddenFields(fields, values, visibleVerificationPageIds = []) {
1778
1575
  return (0, import_lodash.omitBy)(values, (_, fieldId) => {
1779
- const field2 = fields.find((f) => f.id === fieldId);
1780
- if (!field2) {
1576
+ if (visibleVerificationPageIds.includes(fieldId)) {
1577
+ return false;
1578
+ }
1579
+ const fieldConfigs = fields.filter((f) => f.id === fieldId);
1580
+ if (!fieldConfigs.length) {
1781
1581
  return true;
1782
1582
  }
1783
- return !isFieldVisible(field2, values);
1583
+ return fieldConfigs.every((f) => !isFieldVisible(f, values));
1784
1584
  });
1785
1585
  }
1786
1586
  function omitHiddenPaginatedFields(formConfig, declaration) {
@@ -1811,6 +1611,39 @@ function createEmptyDraft(eventId, draftId, actionType) {
1811
1611
  function isVerificationPage(page) {
1812
1612
  return page.type === PageTypes.enum.VERIFICATION;
1813
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
+ }
1814
1647
  function deepMerge(currentDocument, actionDocument) {
1815
1648
  return (0, import_lodash.mergeWith)(
1816
1649
  currentDocument,
@@ -1829,19 +1662,39 @@ function deepMerge(currentDocument, actionDocument) {
1829
1662
  }
1830
1663
  );
1831
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
+ };
1832
1679
 
1833
1680
  // ../commons/src/events/EventConfig.ts
1834
- var EventConfig = import_zod20.z.object({
1835
- id: import_zod20.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(
1836
1685
  'A machine-readable identifier for the event, e.g. "birth" or "death"'
1837
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
+ ),
1838
1692
  summary: SummaryConfig,
1839
1693
  label: TranslationConfig,
1840
- actions: import_zod20.z.array(ActionConfig),
1694
+ actions: import_zod16.z.array(ActionConfig),
1841
1695
  declaration: DeclarationFormConfig,
1842
- workqueues: import_zod20.z.array(WorkqueueConfig),
1843
- deduplication: import_zod20.z.array(DeduplicationConfig).optional().default([]),
1844
- advancedSearch: import_zod20.z.array(AdvancedSearchConfig).optional().default([])
1696
+ deduplication: import_zod16.z.array(DeduplicationConfig).optional().default([]),
1697
+ advancedSearch: import_zod16.z.array(AdvancedSearchConfig).optional().default([])
1845
1698
  }).superRefine((event2, ctx) => {
1846
1699
  const allFields = findAllFields(event2);
1847
1700
  const fieldIds = allFields.map((field2) => field2.id);
@@ -1857,16 +1710,43 @@ var EventConfig = import_zod20.z.object({
1857
1710
  });
1858
1711
  }
1859
1712
  const invalidFields = event2.advancedSearch.flatMap(
1860
- (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
+ )
1861
1720
  );
1862
1721
  if (invalidFields.length > 0) {
1863
1722
  ctx.addIssue({
1864
1723
  code: "custom",
1865
- 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.
1866
1725
  Invalid AdvancedSearch field IDs for event ${event2.id}: ${invalidFields.map((f) => f.fieldId).join(", ")}`,
1867
1726
  path: ["advancedSearch"]
1868
1727
  });
1869
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"
1870
1750
  });
1871
1751
 
1872
1752
  // ../commons/src/events/EventConfigInput.ts
@@ -1875,267 +1755,313 @@ var defineActionForm = (actionForm) => ActionFormConfig.parse(actionForm);
1875
1755
  var definePage = (page) => PageConfig.parse(page);
1876
1756
  var defineFormPage = (formPage) => FormPageConfig.parse(formPage);
1877
1757
 
1758
+ // ../commons/src/events/WorkqueueConfig.ts
1759
+ var import_zod17 = require("zod");
1760
+ var WorkqueueConfig = import_zod17.z.object({
1761
+ slug: import_zod17.z.string().describe("Determines the url of the workqueue."),
1762
+ name: TranslationConfig.describe(
1763
+ "Title of the workflow (both in navigation and on the page)"
1764
+ ),
1765
+ /**
1766
+ * Placeholder untill the following gets merged to develop
1767
+ * https://github.com/opencrvs/opencrvs-core/blob/5fbe9854a88504a7a13fcc856b3e82594b70c38c/packages/commons/src/events/EventIndex.ts#L92-L93
1768
+ */
1769
+ query: import_zod17.z.string(),
1770
+ actions: import_zod17.z.array(
1771
+ import_zod17.z.object({
1772
+ type: import_zod17.z.string(),
1773
+ conditionals: import_zod17.z.array(Conditional).optional()
1774
+ })
1775
+ )
1776
+ }).describe("Configuration for workqueue.");
1777
+ function defineWorkqueue(workqueues) {
1778
+ return workqueues.map((workqueue) => WorkqueueConfig.parse(workqueue));
1779
+ }
1780
+
1878
1781
  // ../commons/src/events/Draft.ts
1879
- var import_zod23 = require("zod");
1782
+ var import_zod20 = require("zod");
1880
1783
 
1881
1784
  // ../commons/src/events/ActionDocument.ts
1882
- var import_zod21 = require("zod");
1883
- var ActionUpdate = import_zod21.z.record(import_zod21.z.string(), FieldUpdateValue);
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);
1884
1789
  var ActionStatus = {
1885
1790
  Requested: "Requested",
1886
1791
  Accepted: "Accepted",
1887
1792
  Rejected: "Rejected"
1888
1793
  };
1889
- var ActionBase = import_zod21.z.object({
1890
- id: import_zod21.z.string(),
1891
- createdAt: import_zod21.z.string().datetime(),
1892
- createdBy: import_zod21.z.string(),
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(),
1893
1800
  declaration: ActionUpdate,
1894
1801
  annotation: ActionUpdate.optional(),
1895
- createdAtLocation: import_zod21.z.string(),
1896
- status: import_zod21.z.enum([
1802
+ createdAtLocation: import_zod18.z.string().optional(),
1803
+ updatedAtLocation: import_zod18.z.string().optional(),
1804
+ status: import_zod18.z.enum([
1897
1805
  ActionStatus.Requested,
1898
1806
  ActionStatus.Accepted,
1899
1807
  ActionStatus.Rejected
1900
1808
  ]),
1901
1809
  // If the action is an asynchronous confirmation for another action, we will save the original action id here.
1902
- originalActionId: import_zod21.z.string().optional()
1810
+ originalActionId: import_zod18.z.string().optional()
1903
1811
  });
1904
1812
  var AssignedAction = ActionBase.merge(
1905
- import_zod21.z.object({
1906
- type: import_zod21.z.literal(ActionType.ASSIGN),
1907
- assignedTo: import_zod21.z.string()
1813
+ import_zod18.z.object({
1814
+ type: import_zod18.z.literal(ActionType.ASSIGN),
1815
+ assignedTo: import_zod18.z.string()
1908
1816
  })
1909
1817
  );
1910
1818
  var UnassignedAction = ActionBase.merge(
1911
- import_zod21.z.object({
1912
- type: import_zod21.z.literal(ActionType.UNASSIGN)
1819
+ import_zod18.z.object({
1820
+ type: import_zod18.z.literal(ActionType.UNASSIGN),
1821
+ assignedTo: import_zod18.z.literal(null)
1913
1822
  })
1914
1823
  );
1915
1824
  var RegisterAction = ActionBase.merge(
1916
- import_zod21.z.object({
1917
- type: import_zod21.z.literal(ActionType.REGISTER),
1918
- registrationNumber: import_zod21.z.string().optional()
1825
+ import_zod18.z.object({
1826
+ type: import_zod18.z.literal(ActionType.REGISTER),
1827
+ registrationNumber: import_zod18.z.string().optional()
1919
1828
  })
1920
1829
  );
1921
1830
  var DeclareAction = ActionBase.merge(
1922
- import_zod21.z.object({
1923
- type: import_zod21.z.literal(ActionType.DECLARE)
1831
+ import_zod18.z.object({
1832
+ type: import_zod18.z.literal(ActionType.DECLARE)
1924
1833
  })
1925
1834
  );
1926
1835
  var ValidateAction = ActionBase.merge(
1927
- import_zod21.z.object({
1928
- type: import_zod21.z.literal(ActionType.VALIDATE)
1836
+ import_zod18.z.object({
1837
+ type: import_zod18.z.literal(ActionType.VALIDATE)
1929
1838
  })
1930
1839
  );
1931
1840
  var RejectAction = ActionBase.merge(
1932
- import_zod21.z.object({
1933
- type: import_zod21.z.literal(ActionType.REJECT)
1841
+ import_zod18.z.object({
1842
+ type: import_zod18.z.literal(ActionType.REJECT)
1934
1843
  })
1935
1844
  );
1936
1845
  var MarkAsDuplicateAction = ActionBase.merge(
1937
- import_zod21.z.object({
1938
- type: import_zod21.z.literal(ActionType.MARKED_AS_DUPLICATE)
1846
+ import_zod18.z.object({
1847
+ type: import_zod18.z.literal(ActionType.MARKED_AS_DUPLICATE)
1939
1848
  })
1940
1849
  );
1941
1850
  var ArchiveAction = ActionBase.merge(
1942
- import_zod21.z.object({
1943
- type: import_zod21.z.literal(ActionType.ARCHIVE)
1851
+ import_zod18.z.object({
1852
+ type: import_zod18.z.literal(ActionType.ARCHIVE)
1944
1853
  })
1945
1854
  );
1946
1855
  var CreatedAction = ActionBase.merge(
1947
- import_zod21.z.object({
1948
- type: import_zod21.z.literal(ActionType.CREATE)
1856
+ import_zod18.z.object({
1857
+ type: import_zod18.z.literal(ActionType.CREATE)
1949
1858
  })
1950
1859
  );
1951
1860
  var NotifiedAction = ActionBase.merge(
1952
- import_zod21.z.object({
1953
- type: import_zod21.z.literal(ActionType.NOTIFY)
1861
+ import_zod18.z.object({
1862
+ type: import_zod18.z.literal(ActionType.NOTIFY)
1954
1863
  })
1955
1864
  );
1956
1865
  var PrintCertificateAction = ActionBase.merge(
1957
- import_zod21.z.object({
1958
- type: import_zod21.z.literal(ActionType.PRINT_CERTIFICATE)
1866
+ import_zod18.z.object({
1867
+ type: import_zod18.z.literal(ActionType.PRINT_CERTIFICATE)
1959
1868
  })
1960
1869
  );
1961
1870
  var RequestedCorrectionAction = ActionBase.merge(
1962
- import_zod21.z.object({
1963
- type: import_zod21.z.literal(ActionType.REQUEST_CORRECTION)
1871
+ import_zod18.z.object({
1872
+ type: import_zod18.z.literal(ActionType.REQUEST_CORRECTION)
1964
1873
  })
1965
1874
  );
1966
1875
  var ApprovedCorrectionAction = ActionBase.merge(
1967
- import_zod21.z.object({
1968
- type: import_zod21.z.literal(ActionType.APPROVE_CORRECTION),
1969
- requestId: import_zod21.z.string()
1876
+ import_zod18.z.object({
1877
+ type: import_zod18.z.literal(ActionType.APPROVE_CORRECTION),
1878
+ requestId: import_zod18.z.string()
1970
1879
  })
1971
1880
  );
1972
1881
  var RejectedCorrectionAction = ActionBase.merge(
1973
- import_zod21.z.object({
1974
- type: import_zod21.z.literal(ActionType.REJECT_CORRECTION),
1975
- requestId: import_zod21.z.string()
1882
+ import_zod18.z.object({
1883
+ type: import_zod18.z.literal(ActionType.REJECT_CORRECTION),
1884
+ requestId: import_zod18.z.string()
1976
1885
  })
1977
1886
  );
1978
1887
  var ReadAction = ActionBase.merge(
1979
- import_zod21.z.object({
1980
- type: import_zod21.z.literal(ActionType.READ)
1888
+ import_zod18.z.object({
1889
+ type: import_zod18.z.literal(ActionType.READ)
1981
1890
  })
1982
1891
  );
1983
- var ActionDocument = import_zod21.z.discriminatedUnion("type", [
1984
- CreatedAction,
1985
- ValidateAction,
1986
- RejectAction,
1987
- MarkAsDuplicateAction,
1988
- ArchiveAction,
1989
- NotifiedAction,
1990
- RegisterAction,
1991
- DeclareAction,
1992
- AssignedAction,
1993
- RequestedCorrectionAction,
1994
- ApprovedCorrectionAction,
1995
- RejectedCorrectionAction,
1996
- UnassignedAction,
1997
- PrintCertificateAction,
1998
- ReadAction
1999
- ]);
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
+ });
2000
1911
  var AsyncRejectActionDocument = ActionBase.omit({
2001
1912
  declaration: true,
2002
1913
  annotation: true,
2003
1914
  createdBy: true,
1915
+ createdByRole: true,
2004
1916
  createdAtLocation: true
2005
1917
  }).merge(
2006
- import_zod21.z.object({
2007
- type: import_zod21.z.enum(ConfirmableActions),
2008
- status: import_zod21.z.literal(ActionStatus.Rejected)
1918
+ import_zod18.z.object({
1919
+ type: import_zod18.z.enum(ConfirmableActions),
1920
+ status: import_zod18.z.literal(ActionStatus.Rejected)
2009
1921
  })
2010
1922
  );
2011
- var Action = import_zod21.z.union([ActionDocument, AsyncRejectActionDocument]);
2012
- var ResolvedUser = import_zod21.z.object({
2013
- id: import_zod21.z.string(),
2014
- role: import_zod21.z.string(),
2015
- name: import_zod21.z.array(
2016
- import_zod21.z.object({
2017
- use: import_zod21.z.string(),
2018
- given: import_zod21.z.array(import_zod21.z.string()),
2019
- family: import_zod21.z.string()
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()
2020
1932
  })
2021
1933
  )
2022
1934
  });
2023
1935
 
2024
1936
  // ../commons/src/events/ActionInput.ts
2025
- var import_zod22 = require("zod");
2026
- var BaseActionInput = import_zod22.z.object({
2027
- eventId: import_zod22.z.string(),
2028
- transactionId: import_zod22.z.string(),
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(),
2029
1943
  declaration: ActionUpdate.default({}),
2030
1944
  annotation: ActionUpdate.optional(),
2031
- originalActionId: import_zod22.z.string().optional()
1945
+ originalActionId: import_zod19.z.string().optional(),
1946
+ keepAssignment: import_zod19.z.boolean().optional()
2032
1947
  });
2033
1948
  var CreateActionInput = BaseActionInput.merge(
2034
- import_zod22.z.object({
2035
- type: import_zod22.z.literal(ActionType.CREATE).default(ActionType.CREATE),
2036
- createdAtLocation: import_zod22.z.string()
1949
+ import_zod19.z.object({
1950
+ type: import_zod19.z.literal(ActionType.CREATE).default(ActionType.CREATE),
1951
+ createdAtLocation: import_zod19.z.string()
2037
1952
  })
2038
1953
  );
2039
1954
  var RegisterActionInput = BaseActionInput.merge(
2040
- import_zod22.z.object({
2041
- type: import_zod22.z.literal(ActionType.REGISTER).default(ActionType.REGISTER),
2042
- registrationNumber: import_zod22.z.string().optional()
1955
+ import_zod19.z.object({
1956
+ type: import_zod19.z.literal(ActionType.REGISTER).default(ActionType.REGISTER),
1957
+ registrationNumber: import_zod19.z.string().optional()
2043
1958
  })
2044
1959
  );
2045
1960
  var ValidateActionInput = BaseActionInput.merge(
2046
- import_zod22.z.object({
2047
- type: import_zod22.z.literal(ActionType.VALIDATE).default(ActionType.VALIDATE),
2048
- duplicates: import_zod22.z.array(import_zod22.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())
2049
1964
  })
2050
1965
  );
2051
1966
  var NotifyActionInput = BaseActionInput.merge(
2052
- import_zod22.z.object({
2053
- type: import_zod22.z.literal(ActionType.NOTIFY).default(ActionType.NOTIFY)
1967
+ import_zod19.z.object({
1968
+ type: import_zod19.z.literal(ActionType.NOTIFY).default(ActionType.NOTIFY)
2054
1969
  })
2055
1970
  );
2056
1971
  var DeclareActionInput = BaseActionInput.merge(
2057
- import_zod22.z.object({
2058
- type: import_zod22.z.literal(ActionType.DECLARE).default(ActionType.DECLARE)
1972
+ import_zod19.z.object({
1973
+ type: import_zod19.z.literal(ActionType.DECLARE).default(ActionType.DECLARE)
2059
1974
  })
2060
1975
  );
2061
1976
  var PrintCertificateActionInput = BaseActionInput.merge(
2062
- import_zod22.z.object({
2063
- type: import_zod22.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)
2064
1979
  })
2065
1980
  );
2066
1981
  var RejectDeclarationActionInput = BaseActionInput.merge(
2067
- import_zod22.z.object({
2068
- type: import_zod22.z.literal(ActionType.REJECT).default(ActionType.REJECT)
1982
+ import_zod19.z.object({
1983
+ type: import_zod19.z.literal(ActionType.REJECT).default(ActionType.REJECT)
2069
1984
  })
2070
1985
  );
2071
1986
  var MarkedAsDuplicateActionInput = BaseActionInput.merge(
2072
- import_zod22.z.object({
2073
- type: import_zod22.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)
2074
1989
  })
2075
1990
  );
2076
1991
  var ArchiveActionInput = BaseActionInput.merge(
2077
- import_zod22.z.object({
2078
- type: import_zod22.z.literal(ActionType.ARCHIVE).default(ActionType.ARCHIVE)
1992
+ import_zod19.z.object({
1993
+ type: import_zod19.z.literal(ActionType.ARCHIVE).default(ActionType.ARCHIVE)
2079
1994
  })
2080
1995
  );
2081
1996
  var AssignActionInput = BaseActionInput.merge(
2082
- import_zod22.z.object({
2083
- type: import_zod22.z.literal(ActionType.ASSIGN).default(ActionType.ASSIGN),
2084
- assignedTo: import_zod22.z.string()
1997
+ import_zod19.z.object({
1998
+ type: import_zod19.z.literal(ActionType.ASSIGN).default(ActionType.ASSIGN),
1999
+ assignedTo: import_zod19.z.string()
2085
2000
  })
2086
2001
  );
2087
2002
  var UnassignActionInput = BaseActionInput.merge(
2088
- import_zod22.z.object({
2089
- type: import_zod22.z.literal(ActionType.UNASSIGN).default(ActionType.UNASSIGN),
2090
- assignedTo: import_zod22.z.literal(null).default(null)
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)
2091
2006
  })
2092
2007
  );
2093
2008
  var RequestCorrectionActionInput = BaseActionInput.merge(
2094
- import_zod22.z.object({
2095
- type: import_zod22.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)
2096
2011
  })
2097
2012
  );
2098
2013
  var RejectCorrectionActionInput = BaseActionInput.merge(
2099
- import_zod22.z.object({
2100
- requestId: import_zod22.z.string(),
2101
- type: import_zod22.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)
2102
2017
  })
2103
2018
  );
2104
2019
  var ApproveCorrectionActionInput = BaseActionInput.merge(
2105
- import_zod22.z.object({
2106
- requestId: import_zod22.z.string(),
2107
- type: import_zod22.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)
2108
2023
  })
2109
2024
  );
2110
2025
  var ReadActionInput = BaseActionInput.merge(
2111
- import_zod22.z.object({
2112
- type: import_zod22.z.literal(ActionType.READ).default(ActionType.READ)
2026
+ import_zod19.z.object({
2027
+ type: import_zod19.z.literal(ActionType.READ).default(ActionType.READ)
2113
2028
  })
2114
2029
  );
2115
- var ActionInput = import_zod22.z.discriminatedUnion("type", [
2116
- CreateActionInput,
2117
- ValidateActionInput,
2118
- RegisterActionInput,
2119
- NotifyActionInput,
2120
- DeclareActionInput,
2121
- RejectDeclarationActionInput,
2122
- MarkedAsDuplicateActionInput,
2123
- ArchiveActionInput,
2124
- AssignActionInput,
2125
- UnassignActionInput,
2126
- PrintCertificateActionInput,
2127
- RequestCorrectionActionInput,
2128
- RejectCorrectionActionInput,
2129
- ApproveCorrectionActionInput,
2130
- ReadActionInput
2131
- ]);
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
+ });
2132
2058
 
2133
2059
  // ../commons/src/events/Draft.ts
2134
- var Draft = import_zod23.z.object({
2135
- id: import_zod23.z.string(),
2136
- eventId: import_zod23.z.string(),
2137
- transactionId: import_zod23.z.string(),
2138
- createdAt: import_zod23.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(),
2139
2065
  action: ActionBase.extend({
2140
2066
  type: ActionTypes
2141
2067
  }).omit({ id: true })
@@ -2144,35 +2070,181 @@ var DraftInput = BaseActionInput.extend({
2144
2070
  type: ActionTypes
2145
2071
  });
2146
2072
 
2073
+ // ../commons/src/events/EventMetadata.ts
2074
+ var import_zod21 = require("zod");
2075
+ var EventStatus = {
2076
+ CREATED: "CREATED",
2077
+ NOTIFIED: "NOTIFIED",
2078
+ DECLARED: "DECLARED",
2079
+ VALIDATED: "VALIDATED",
2080
+ REGISTERED: "REGISTERED",
2081
+ CERTIFIED: "CERTIFIED",
2082
+ REJECTED: "REJECTED",
2083
+ ARCHIVED: "ARCHIVED"
2084
+ };
2085
+ var eventStatuses = Object.values(EventStatus);
2086
+ var EventStatuses = import_zod21.z.nativeEnum(EventStatus);
2087
+ var ZodDate = import_zod21.z.string().date();
2088
+ var EventMetadata = import_zod21.z.object({
2089
+ id: import_zod21.z.string(),
2090
+ type: import_zod21.z.string(),
2091
+ status: EventStatuses,
2092
+ createdAt: import_zod21.z.string().datetime(),
2093
+ dateOfEvent: ZodDate.nullish(),
2094
+ createdBy: import_zod21.z.string(),
2095
+ updatedByUserRole: import_zod21.z.string(),
2096
+ createdAtLocation: import_zod21.z.string(),
2097
+ updatedAtLocation: import_zod21.z.string(),
2098
+ updatedAt: import_zod21.z.string().datetime(),
2099
+ assignedTo: import_zod21.z.string().nullish(),
2100
+ updatedBy: import_zod21.z.string(),
2101
+ trackingId: import_zod21.z.string(),
2102
+ registrationNumber: import_zod21.z.string().nullish()
2103
+ });
2104
+ var eventMetadataLabelMap = {
2105
+ "event.assignedTo": {
2106
+ id: "event.assignedTo.label",
2107
+ defaultMessage: "Assigned To",
2108
+ description: "Assigned To"
2109
+ },
2110
+ "event.createdAt": {
2111
+ id: "event.createdAt.label",
2112
+ defaultMessage: "Created",
2113
+ description: "Created At"
2114
+ },
2115
+ "event.dateOfEvent": {
2116
+ id: "event.dateOfEvent.label",
2117
+ defaultMessage: "Date of Event",
2118
+ description: "Date of Event"
2119
+ },
2120
+ "event.createdAtLocation": {
2121
+ id: "event.createdAtLocation.label",
2122
+ defaultMessage: "Location",
2123
+ description: "Created At Location"
2124
+ },
2125
+ "event.updatedAtLocation": {
2126
+ id: "event.updatedAtLocation.label",
2127
+ defaultMessage: "Location",
2128
+ description: "Updated At Location"
2129
+ },
2130
+ "event.createdBy": {
2131
+ id: "event.createdBy.label",
2132
+ defaultMessage: "Created By",
2133
+ description: "Created By"
2134
+ },
2135
+ "event.updatedByUserRole": {
2136
+ id: "event.updatedByUserRole.label",
2137
+ defaultMessage: "Updated By Role",
2138
+ description: "Updated By Role"
2139
+ },
2140
+ "event.id": {
2141
+ id: "event.id.label",
2142
+ defaultMessage: "ID",
2143
+ description: "ID"
2144
+ },
2145
+ "event.updatedAt": {
2146
+ id: "event.modifiedAt.label",
2147
+ defaultMessage: "Updated",
2148
+ description: "Modified At"
2149
+ },
2150
+ "event.status": {
2151
+ id: "event.status.label",
2152
+ defaultMessage: "Status",
2153
+ description: "Status"
2154
+ },
2155
+ "event.type": {
2156
+ id: "event.type.label",
2157
+ defaultMessage: "Type",
2158
+ description: "Type"
2159
+ },
2160
+ "event.updatedBy": {
2161
+ id: "event.updatedBy.label",
2162
+ defaultMessage: "Updated By",
2163
+ description: "Updated By"
2164
+ },
2165
+ "event.trackingId": {
2166
+ id: "event.trackingId.label",
2167
+ defaultMessage: "Tracking ID",
2168
+ description: "Tracking ID"
2169
+ },
2170
+ "event.registrationNumber": {
2171
+ id: "event.registrationNumber.label",
2172
+ defaultMessage: "Registration Number",
2173
+ description: "Registration Number"
2174
+ }
2175
+ };
2176
+
2147
2177
  // ../commons/src/events/EventInput.ts
2148
- var import_zod24 = require("zod");
2149
- var EventInput = import_zod24.z.object({
2150
- transactionId: import_zod24.z.string(),
2151
- type: import_zod24.z.string()
2178
+ var import_zod22 = require("zod");
2179
+ var EventInput = import_zod22.z.object({
2180
+ transactionId: import_zod22.z.string(),
2181
+ type: import_zod22.z.string(),
2182
+ dateOfEvent: import_zod22.z.object({ fieldId: import_zod22.z.string() }).optional()
2152
2183
  });
2153
2184
 
2154
2185
  // ../commons/src/events/EventDocument.ts
2155
- var import_zod25 = require("zod");
2156
- var EventDocument = import_zod25.z.object({
2157
- id: import_zod25.z.string(),
2158
- type: import_zod25.z.string(),
2159
- createdAt: import_zod25.z.string().datetime(),
2160
- updatedAt: import_zod25.z.string().datetime(),
2161
- actions: import_zod25.z.array(Action),
2162
- trackingId: import_zod25.z.string()
2163
- });
2186
+ var import_zod23 = require("zod");
2187
+ var import_zod_openapi6 = require("zod-openapi");
2188
+ (0, import_zod_openapi6.extendZodWithOpenApi)(import_zod23.z);
2189
+ var EventDocument = import_zod23.z.object({
2190
+ id: import_zod23.z.string(),
2191
+ type: import_zod23.z.string(),
2192
+ dateOfEvent: import_zod23.z.object({ fieldId: import_zod23.z.string() }).optional(),
2193
+ createdAt: import_zod23.z.string().datetime(),
2194
+ updatedAt: import_zod23.z.string().datetime(),
2195
+ updatedAtLocation: import_zod23.z.string(),
2196
+ actions: import_zod23.z.array(Action),
2197
+ trackingId: import_zod23.z.string()
2198
+ }).openapi({ ref: "EventDocument" });
2164
2199
 
2165
2200
  // ../commons/src/events/EventIndex.ts
2166
- var import_zod26 = require("zod");
2201
+ var import_zod24 = require("zod");
2167
2202
  var EventIndex = EventMetadata.extend({
2168
- declaration: import_zod26.z.record(import_zod26.z.string(), import_zod26.z.any())
2203
+ declaration: import_zod24.z.record(import_zod24.z.string(), import_zod24.z.any())
2169
2204
  });
2170
- var EventSearchIndex = import_zod26.z.record(import_zod26.z.string(), import_zod26.z.any()).and(
2171
- import_zod26.z.object({
2172
- type: import_zod26.z.string()
2205
+ var EventSearchIndex = import_zod24.z.record(import_zod24.z.string(), import_zod24.z.any()).and(
2206
+ import_zod24.z.object({
2207
+ type: import_zod24.z.string()
2173
2208
  // Ensures "type" (event-id) exists and is a string
2174
2209
  })
2175
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]);
2176
2248
 
2177
2249
  // ../commons/src/events/state/index.ts
2178
2250
  function getStatusFromActions(actions) {
@@ -2183,30 +2255,47 @@ function getStatusFromActions(actions) {
2183
2255
  return EventStatus.REJECTED;
2184
2256
  }
2185
2257
  return actions.reduce((status, action) => {
2186
- if (action.type === ActionType.CREATE) {
2187
- return EventStatus.CREATED;
2188
- }
2189
- if (action.type === ActionType.DECLARE) {
2190
- return EventStatus.DECLARED;
2191
- }
2192
- if (action.type === ActionType.VALIDATE) {
2193
- return EventStatus.VALIDATED;
2194
- }
2195
- if (action.type === ActionType.REGISTER) {
2196
- return EventStatus.REGISTERED;
2197
- }
2198
- if (action.type === ActionType.REJECT) {
2199
- return EventStatus.REJECTED;
2200
- }
2201
- if (action.type === ActionType.ARCHIVE) {
2202
- return EventStatus.ARCHIVED;
2203
- }
2204
- if (action.type === ActionType.NOTIFY) {
2205
- return EventStatus.NOTIFIED;
2258
+ switch (action.type) {
2259
+ case ActionType.CREATE:
2260
+ return EventStatus.CREATED;
2261
+ case ActionType.DECLARE:
2262
+ return EventStatus.DECLARED;
2263
+ case ActionType.VALIDATE:
2264
+ return EventStatus.VALIDATED;
2265
+ case ActionType.REGISTER:
2266
+ return EventStatus.REGISTERED;
2267
+ case ActionType.REJECT:
2268
+ return EventStatus.REJECTED;
2269
+ case ActionType.ARCHIVE:
2270
+ return EventStatus.ARCHIVED;
2271
+ case ActionType.NOTIFY:
2272
+ return EventStatus.NOTIFIED;
2273
+ case ActionType.PRINT_CERTIFICATE:
2274
+ return EventStatus.CERTIFIED;
2275
+ case ActionType.ASSIGN:
2276
+ case ActionType.UNASSIGN:
2277
+ case ActionType.REQUEST_CORRECTION:
2278
+ case ActionType.APPROVE_CORRECTION:
2279
+ case ActionType.MARKED_AS_DUPLICATE:
2280
+ case ActionType.REJECT_CORRECTION:
2281
+ case ActionType.READ:
2282
+ default:
2283
+ return status;
2206
2284
  }
2207
- return status;
2208
2285
  }, EventStatus.CREATED);
2209
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
+ }
2210
2299
  function getAssignedUserFromActions(actions) {
2211
2300
  return actions.reduce((user2, action) => {
2212
2301
  if (action.type === ActionType.ASSIGN) {
@@ -2274,19 +2363,29 @@ function getCurrentEventState(event2) {
2274
2363
  (a) => a.type === ActionType.REGISTER && a.status === ActionStatus.Accepted
2275
2364
  );
2276
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
+ }
2277
2372
  return deepDropNulls({
2278
2373
  id: event2.id,
2279
2374
  type: event2.type,
2280
2375
  status: getStatusFromActions(event2.actions),
2281
2376
  createdAt: event2.createdAt,
2282
2377
  createdBy: creationAction.createdBy,
2283
- createdAtLocation: creationAction.createdAtLocation,
2284
- modifiedAt: latestAction.createdAt,
2378
+ createdAtLocation: creationAction.createdAtLocation ?? "",
2379
+ // @todo remove using empty string
2380
+ updatedAt: latestAction.createdAt,
2285
2381
  assignedTo: getAssignedUserFromActions(activeActions),
2286
2382
  updatedBy: latestAction.createdBy,
2287
- declaration: aggregateActionDeclarations(activeActions),
2383
+ updatedAtLocation: event2.updatedAtLocation,
2384
+ declaration,
2288
2385
  trackingId: event2.trackingId,
2289
- registrationNumber
2386
+ registrationNumber,
2387
+ updatedByUserRole: getLastUpdatedByUserRoleFromActions(event2.actions),
2388
+ dateOfEvent
2290
2389
  });
2291
2390
  }
2292
2391
  function getCurrentEventStateWithDrafts(event2, drafts) {
@@ -2311,7 +2410,7 @@ function getCurrentEventStateWithDrafts(event2, drafts) {
2311
2410
  return getCurrentEventState(withDrafts);
2312
2411
  }
2313
2412
  function applyDraftsToEventIndex(eventIndex, drafts) {
2314
- const indexedAt = eventIndex.modifiedAt;
2413
+ const indexedAt = eventIndex.updatedAt;
2315
2414
  const activeDrafts = drafts.filter(({ createdAt }) => new Date(createdAt) > new Date(indexedAt)).map((draft) => draft.action).sort();
2316
2415
  if (activeDrafts.length === 0) {
2317
2416
  return eventIndex;
@@ -2334,7 +2433,7 @@ function getAnnotationFromDrafts(drafts) {
2334
2433
  function getActionAnnotation({
2335
2434
  event: event2,
2336
2435
  actionType,
2337
- drafts
2436
+ drafts = []
2338
2437
  }) {
2339
2438
  const activeActions = getAcceptedActions(event2);
2340
2439
  const action = activeActions.find(
@@ -2353,7 +2452,6 @@ function getActionAnnotation({
2353
2452
 
2354
2453
  // ../commons/src/events/defineConfig.ts
2355
2454
  var defineConfig = (config) => {
2356
- validateWorkqueueConfig(config.workqueues);
2357
2455
  const input = EventConfig.parse(config);
2358
2456
  return input;
2359
2457
  };
@@ -2428,32 +2526,38 @@ var user = {
2428
2526
  required: ["$user"]
2429
2527
  })
2430
2528
  };
2431
- var event = {
2432
- hasAction: (action) => defineConditional({
2433
- type: "object",
2434
- properties: {
2435
- $event: {
2436
- type: "object",
2437
- properties: {
2438
- actions: {
2439
- type: "array",
2440
- contains: {
2441
- type: "object",
2442
- properties: {
2443
- type: {
2444
- const: action
2445
- }
2446
- },
2447
- required: ["type"]
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
+ }
2448
2552
  }
2449
- }
2450
- },
2451
- required: ["actions"]
2452
- }
2453
- },
2454
- required: ["$event"]
2455
- })
2456
- };
2553
+ },
2554
+ required: ["actions"]
2555
+ }
2556
+ },
2557
+ required: ["$event"]
2558
+ })
2559
+ };
2560
+ }
2457
2561
  function getDateFromNow(days) {
2458
2562
  return new Date(Date.now() - days * 24 * 60 * 60 * 1e3).toISOString().split("T")[0];
2459
2563
  }
@@ -2474,7 +2578,7 @@ function getDateRangeToFieldReference(fieldId, comparedFieldId, clause) {
2474
2578
  function isFieldReference(value) {
2475
2579
  return typeof value === "object" && value !== null && "_fieldId" in value;
2476
2580
  }
2477
- function field(fieldId) {
2581
+ function createFieldConditionals(fieldId) {
2478
2582
  const getDateRange = (date, clause) => ({
2479
2583
  type: "object",
2480
2584
  properties: {
@@ -2487,10 +2591,6 @@ function field(fieldId) {
2487
2591
  required: [fieldId]
2488
2592
  });
2489
2593
  return {
2490
- /**
2491
- * @private Internal property used for field reference tracking.
2492
- */
2493
- _fieldId: fieldId,
2494
2594
  isAfter: () => ({
2495
2595
  days: (days) => ({
2496
2596
  inPast: () => defineFormConditional(
@@ -2657,10 +2757,74 @@ function field(fieldId) {
2657
2757
  }
2658
2758
  },
2659
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" }
2660
2812
  })
2661
2813
  };
2662
2814
  }
2663
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
+
2664
2828
  // ../commons/src/fixtures/tennis-club-membership-event.ts
2665
2829
  var PRINT_CERTIFICATE_FORM = defineActionForm({
2666
2830
  label: {
@@ -3577,20 +3741,12 @@ var tennisClubMembershipEvent = defineConfig({
3577
3741
  description: "This is what this event is referred as in the system",
3578
3742
  id: "event.tennis-club-membership.label"
3579
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
+ },
3580
3749
  summary: {
3581
- title: {
3582
- id: "event.tennis-club-membership.summary.title",
3583
- label: {
3584
- defaultMessage: "{applicant.firstname} {applicant.surname}",
3585
- description: "This is the title of the summary",
3586
- id: "v2.event.tennis-club-membership.summary.title"
3587
- },
3588
- emptyValueMessage: {
3589
- defaultMessage: "Membership application",
3590
- description: "This is the message shown when the applicant name is missing",
3591
- id: "event.tennis-club-membership.summary.title.empty"
3592
- }
3593
- },
3594
3750
  fields: [
3595
3751
  {
3596
3752
  id: "applicant.firstname",
@@ -3630,28 +3786,6 @@ var tennisClubMembershipEvent = defineConfig({
3630
3786
  }
3631
3787
  ]
3632
3788
  },
3633
- workqueues: [
3634
- {
3635
- id: "all",
3636
- filters: []
3637
- },
3638
- {
3639
- id: "ready-for-review",
3640
- filters: [
3641
- {
3642
- status: ["DECLARED"]
3643
- }
3644
- ]
3645
- },
3646
- {
3647
- id: "registered",
3648
- filters: [
3649
- {
3650
- status: ["REGISTERED"]
3651
- }
3652
- ]
3653
- }
3654
- ],
3655
3789
  actions: [
3656
3790
  {
3657
3791
  type: ActionType.DECLARE,
@@ -3959,11 +4093,7 @@ var tennisClubMembershipEvent = defineConfig({
3959
4093
  description: "This is what this event is referred as in the system",
3960
4094
  id: "v2.event.tennis-club-membership.search"
3961
4095
  },
3962
- fields: [
3963
- {
3964
- fieldId: "applicant.dob"
3965
- }
3966
- ]
4096
+ fields: [field("applicant.dob").exact()]
3967
4097
  }
3968
4098
  ],
3969
4099
  declaration: TENNIS_CLUB_DECLARATION_FORM
@@ -3996,10 +4126,10 @@ function generateActionAnnotationInput(configuration, action) {
3996
4126
  );
3997
4127
  const annotationFields = actionConfig ? getActionAnnotationFields(actionConfig) : [];
3998
4128
  const annotation = fieldConfigsToActionPayload(annotationFields);
3999
- const visibleVerificationPageIds = findRecordActionPages(
4000
- configuration,
4001
- action
4002
- ).filter((page) => isVerificationPage(page)).filter((page) => isPageVisible(page, annotation)).map((page) => page.id);
4129
+ const visibleVerificationPageIds = getVisibleVerificationPageIds(
4130
+ findRecordActionPages(configuration, action),
4131
+ annotation
4132
+ );
4003
4133
  const visiblePageVerificationMap = visibleVerificationPageIds.reduce(
4004
4134
  (acc, pageId) => ({
4005
4135
  ...acc,
@@ -4030,6 +4160,7 @@ var eventPayloadGenerator = {
4030
4160
  createdAt: (/* @__PURE__ */ new Date()).toISOString(),
4031
4161
  transactionId: getUUID(),
4032
4162
  action: {
4163
+ transactionId: getUUID(),
4033
4164
  type: actionType,
4034
4165
  status: ActionStatus.Accepted,
4035
4166
  declaration: {
@@ -4044,7 +4175,9 @@ var eventPayloadGenerator = {
4044
4175
  },
4045
4176
  createdAt: (/* @__PURE__ */ new Date()).toISOString(),
4046
4177
  createdBy: "@todo",
4047
- createdAtLocation: "@todo"
4178
+ createdByRole: "@todo",
4179
+ createdAtLocation: "@todo",
4180
+ updatedAtLocation: "@todo"
4048
4181
  }
4049
4182
  },
4050
4183
  input
@@ -4205,12 +4338,15 @@ function generateActionDocument({
4205
4338
  // @TODO: This should be fixed in the future.
4206
4339
  createdAt: new Date(Date.now() - 500).toISOString(),
4207
4340
  createdBy: getUUID(),
4341
+ createdByRole: "FIELD_AGENT",
4208
4342
  id: getUUID(),
4209
4343
  createdAtLocation: "TODO",
4344
+ updatedAtLocation: "TODO",
4210
4345
  declaration: generateActionDeclarationInput(configuration, action),
4211
4346
  annotation: {},
4212
4347
  ...defaults,
4213
- status: ActionStatus.Accepted
4348
+ status: ActionStatus.Accepted,
4349
+ transactionId: getUUID()
4214
4350
  };
4215
4351
  switch (action) {
4216
4352
  case ActionType.READ:
@@ -4220,7 +4356,7 @@ function generateActionDocument({
4220
4356
  case ActionType.DECLARE:
4221
4357
  return { ...actionBase, type: action };
4222
4358
  case ActionType.UNASSIGN:
4223
- return { ...actionBase, type: action };
4359
+ return { ...actionBase, type: action, assignedTo: null };
4224
4360
  case ActionType.ASSIGN:
4225
4361
  return { ...actionBase, assignedTo: getUUID(), type: action };
4226
4362
  case ActionType.VALIDATE:
@@ -4268,7 +4404,9 @@ function generateEventDocument({
4268
4404
  id: getUUID(),
4269
4405
  // Offset is needed so the createdAt timestamps for events, actions and drafts make logical sense in storybook tests.
4270
4406
  // @TODO: This should be fixed in the future.
4271
- updatedAt: new Date(Date.now() - 1e3).toISOString()
4407
+ updatedAt: new Date(Date.now() - 1e3).toISOString(),
4408
+ dateOfEvent: configuration.dateOfEvent,
4409
+ updatedAtLocation: getUUID()
4272
4410
  };
4273
4411
  }
4274
4412
  function generateEventDraftDocument(eventId, actionType = ActionType.DECLARE, declaration = {}) {
@@ -4297,9 +4435,11 @@ var eventQueryDataGenerator = (overrides = {}) => ({
4297
4435
  createdAt: overrides.createdAt ?? (/* @__PURE__ */ new Date()).toISOString(),
4298
4436
  createdBy: overrides.createdBy ?? getUUID(),
4299
4437
  createdAtLocation: overrides.createdAtLocation ?? getUUID(),
4300
- modifiedAt: overrides.modifiedAt ?? (/* @__PURE__ */ new Date()).toISOString(),
4438
+ updatedAtLocation: overrides.updatedAtLocation ?? getUUID(),
4439
+ updatedAt: overrides.updatedAt ?? (/* @__PURE__ */ new Date()).toISOString(),
4301
4440
  assignedTo: overrides.assignedTo ?? null,
4302
4441
  updatedBy: overrides.updatedBy ?? getUUID(),
4442
+ updatedByUserRole: overrides.updatedByUserRole ?? "FIELD_AGENT",
4303
4443
  declaration: overrides.declaration ?? {
4304
4444
  "recommender.none": true,
4305
4445
  "applicant.firstname": "Danny",
@@ -4345,3 +4485,213 @@ function isFieldConfigDefaultValue(value) {
4345
4485
  }
4346
4486
  return false;
4347
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());