@ecrvs/opencrvs-toolkit 1.9.10-rc.29c74a5 → 1.9.10-rc.d4f70c6

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.
@@ -140,6 +140,7 @@ export declare function createFieldConditionals(fieldId: string): {
140
140
  isLessThan(value: number | FieldReference): JSONSchema;
141
141
  isEqualTo(value: string | boolean | number | FieldReference): JSONSchema;
142
142
  isEqualToSumOf(val1: FieldReference, val2: FieldReference): JSONSchema;
143
+ isValidDeceasedAge(dobField: FieldReference, dodField: FieldReference, todField: FieldReference, format: "years" | "months" | "days" | "hours" | "minutes"): JSONSchema;
143
144
  isAbbreviation(): JSONSchema;
144
145
  isIllDefined(causesOfDeathFields: FieldReference[], threshold: number): JSONSchema;
145
146
  /**
@@ -202,6 +203,7 @@ export declare function createFieldConditionals(fieldId: string): {
202
203
  isLessThan(value: number | FieldReference): JSONSchema;
203
204
  isEqualTo(value: string | boolean | number | FieldReference): JSONSchema;
204
205
  isEqualToSumOf(val1: FieldReference, val2: FieldReference): JSONSchema;
206
+ isValidDeceasedAge(dobField: FieldReference, dodField: FieldReference, todField: FieldReference, format: "years" | "months" | "days" | "hours" | "minutes"): JSONSchema;
205
207
  isAbbreviation(): JSONSchema;
206
208
  isIllDefined(causesOfDeathFields: FieldReference[], threshold: number): JSONSchema;
207
209
  /**
@@ -278,6 +280,7 @@ export declare function createFieldConditionals(fieldId: string): {
278
280
  isLessThan(value: number | FieldReference): JSONSchema;
279
281
  isEqualTo(value: string | boolean | number | FieldReference): JSONSchema;
280
282
  isEqualToSumOf(val1: FieldReference, val2: FieldReference): JSONSchema;
283
+ isValidDeceasedAge(dobField: FieldReference, dodField: FieldReference, todField: FieldReference, format: "years" | "months" | "days" | "hours" | "minutes"): JSONSchema;
281
284
  isAbbreviation(): JSONSchema;
282
285
  isIllDefined(causesOfDeathFields: FieldReference[], threshold: number): JSONSchema;
283
286
  /**
@@ -349,6 +352,7 @@ export declare function createFieldConditionals(fieldId: string): {
349
352
  isLessThan(value: number | FieldReference): JSONSchema;
350
353
  isEqualTo(value: string | boolean | number | FieldReference): JSONSchema;
351
354
  isEqualToSumOf(val1: FieldReference, val2: FieldReference): JSONSchema;
355
+ isValidDeceasedAge(dobField: FieldReference, dodField: FieldReference, todField: FieldReference, format: "years" | "months" | "days" | "hours" | "minutes"): JSONSchema;
352
356
  isAbbreviation(): JSONSchema;
353
357
  isIllDefined(causesOfDeathFields: FieldReference[], threshold: number): JSONSchema;
354
358
  /**
@@ -419,6 +423,7 @@ export declare function createFieldConditionals(fieldId: string): {
419
423
  isLessThan(value: number | FieldReference): JSONSchema;
420
424
  isEqualTo(value: string | boolean | number | FieldReference): JSONSchema;
421
425
  isEqualToSumOf(val1: FieldReference, val2: FieldReference): JSONSchema;
426
+ isValidDeceasedAge(dobField: FieldReference, dodField: FieldReference, todField: FieldReference, format: "years" | "months" | "days" | "hours" | "minutes"): JSONSchema;
422
427
  isAbbreviation(): JSONSchema;
423
428
  isIllDefined(causesOfDeathFields: FieldReference[], threshold: number): JSONSchema;
424
429
  /**
@@ -479,6 +484,7 @@ export declare function createFieldConditionals(fieldId: string): {
479
484
  isLessThan(value: number | FieldReference): JSONSchema;
480
485
  isEqualTo(value: string | boolean | number | FieldReference): JSONSchema;
481
486
  isEqualToSumOf(val1: FieldReference, val2: FieldReference): JSONSchema;
487
+ isValidDeceasedAge(dobField: FieldReference, dodField: FieldReference, todField: FieldReference, format: "years" | "months" | "days" | "hours" | "minutes"): JSONSchema;
482
488
  isAbbreviation(): JSONSchema;
483
489
  isIllDefined(causesOfDeathFields: FieldReference[], threshold: number): JSONSchema;
484
490
  /**
@@ -556,6 +562,7 @@ export declare function createFieldConditionals(fieldId: string): {
556
562
  isLessThan(value: number | FieldReference): JSONSchema;
557
563
  isEqualTo(value: string | boolean | number | FieldReference): JSONSchema;
558
564
  isEqualToSumOf(val1: FieldReference, val2: FieldReference): JSONSchema;
565
+ isValidDeceasedAge(dobField: FieldReference, dodField: FieldReference, todField: FieldReference, format: "years" | "months" | "days" | "hours" | "minutes"): JSONSchema;
559
566
  isAbbreviation(): JSONSchema;
560
567
  isIllDefined(causesOfDeathFields: FieldReference[], threshold: number): JSONSchema;
561
568
  /**
@@ -618,6 +625,7 @@ export declare function createFieldConditionals(fieldId: string): {
618
625
  isLessThan(value: number | FieldReference): JSONSchema;
619
626
  isEqualTo(value: string | boolean | number | FieldReference): JSONSchema;
620
627
  isEqualToSumOf(val1: FieldReference, val2: FieldReference): JSONSchema;
628
+ isValidDeceasedAge(dobField: FieldReference, dodField: FieldReference, todField: FieldReference, format: "years" | "months" | "days" | "hours" | "minutes"): JSONSchema;
621
629
  isAbbreviation(): JSONSchema;
622
630
  isIllDefined(causesOfDeathFields: FieldReference[], threshold: number): JSONSchema;
623
631
  /**
@@ -695,6 +703,7 @@ export declare function createFieldConditionals(fieldId: string): {
695
703
  isLessThan(value: number | FieldReference): JSONSchema;
696
704
  isEqualTo(value: string | boolean | number | FieldReference): JSONSchema;
697
705
  isEqualToSumOf(val1: FieldReference, val2: FieldReference): JSONSchema;
706
+ isValidDeceasedAge(dobField: FieldReference, dodField: FieldReference, todField: FieldReference, format: "years" | "months" | "days" | "hours" | "minutes"): JSONSchema;
698
707
  isAbbreviation(): JSONSchema;
699
708
  isIllDefined(causesOfDeathFields: FieldReference[], threshold: number): JSONSchema;
700
709
  /**
@@ -757,6 +766,7 @@ export declare function createFieldConditionals(fieldId: string): {
757
766
  isLessThan(value: number | FieldReference): JSONSchema;
758
767
  isEqualTo(value: string | boolean | number | FieldReference): JSONSchema;
759
768
  isEqualToSumOf(val1: FieldReference, val2: FieldReference): JSONSchema;
769
+ isValidDeceasedAge(dobField: FieldReference, dodField: FieldReference, todField: FieldReference, format: "years" | "months" | "days" | "hours" | "minutes"): JSONSchema;
760
770
  isAbbreviation(): JSONSchema;
761
771
  isIllDefined(causesOfDeathFields: FieldReference[], threshold: number): JSONSchema;
762
772
  /**
@@ -817,6 +827,7 @@ export declare function createFieldConditionals(fieldId: string): {
817
827
  isLessThan(value: number | FieldReference): JSONSchema;
818
828
  isEqualTo(value: string | boolean | number | FieldReference): JSONSchema;
819
829
  isEqualToSumOf(val1: FieldReference, val2: FieldReference): JSONSchema;
830
+ isValidDeceasedAge(dobField: FieldReference, dodField: FieldReference, todField: FieldReference, format: "years" | "months" | "days" | "hours" | "minutes"): JSONSchema;
820
831
  isAbbreviation(): JSONSchema;
821
832
  isIllDefined(causesOfDeathFields: FieldReference[], threshold: number): JSONSchema;
822
833
  /**
@@ -7,6 +7,7 @@ import { TranslationConfig } from '../events/TranslationConfig';
7
7
  import { ITokenPayload } from '../authentication';
8
8
  import { UUID } from '../uuid';
9
9
  import { ActionType, EventDocument } from '../client';
10
+ export declare const isValidDateFormat: (date: string) => boolean;
10
11
  export declare function validate(schema: JSONSchema, data: ConditionalParameters): boolean;
11
12
  export declare function validateValue(schema: JSONSchema, data: unknown): boolean;
12
13
  export declare function isOnline(): boolean;
@@ -140,8 +140,8 @@ declare const DateRangeMatcher: z.ZodObject<z.objectUtil.extendShape<{
140
140
  boost: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
141
141
  matchAgainst: z.ZodOptional<z.ZodString>;
142
142
  }, "strip", z.ZodTypeAny, {
143
- boost: number;
144
143
  days: number;
144
+ boost: number;
145
145
  matchAgainst?: string | undefined;
146
146
  pivot?: number | undefined;
147
147
  }, {
@@ -153,8 +153,8 @@ declare const DateRangeMatcher: z.ZodObject<z.objectUtil.extendShape<{
153
153
  }>, "strip", z.ZodTypeAny, {
154
154
  type: "dateRange";
155
155
  options: {
156
- boost: number;
157
156
  days: number;
157
+ boost: number;
158
158
  matchAgainst?: string | undefined;
159
159
  pivot?: number | undefined;
160
160
  };
@@ -97,6 +97,7 @@ export declare function field(fieldId: string, options?: {
97
97
  isLessThan(value: number | import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
98
98
  isEqualTo(value: string | boolean | number | import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
99
99
  isEqualToSumOf(val1: import("./FieldConfig").FieldReference, val2: import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
100
+ isValidDeceasedAge(dobField: import("./FieldConfig").FieldReference, dodField: import("./FieldConfig").FieldReference, todField: import("./FieldConfig").FieldReference, format: "years" | "months" | "days" | "hours" | "minutes"): import("../conditionals/conditionals").JSONSchema;
100
101
  isAbbreviation(): import("../conditionals/conditionals").JSONSchema;
101
102
  isIllDefined(causesOfDeathFields: import("./FieldConfig").FieldReference[], threshold: number): import("../conditionals/conditionals").JSONSchema;
102
103
  isFalsy(): import("../conditionals/conditionals").JSONSchema;
@@ -137,6 +138,7 @@ export declare function field(fieldId: string, options?: {
137
138
  isLessThan(value: number | import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
138
139
  isEqualTo(value: string | boolean | number | import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
139
140
  isEqualToSumOf(val1: import("./FieldConfig").FieldReference, val2: import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
141
+ isValidDeceasedAge(dobField: import("./FieldConfig").FieldReference, dodField: import("./FieldConfig").FieldReference, todField: import("./FieldConfig").FieldReference, format: "years" | "months" | "days" | "hours" | "minutes"): import("../conditionals/conditionals").JSONSchema;
140
142
  isAbbreviation(): import("../conditionals/conditionals").JSONSchema;
141
143
  isIllDefined(causesOfDeathFields: import("./FieldConfig").FieldReference[], threshold: number): import("../conditionals/conditionals").JSONSchema;
142
144
  isFalsy(): import("../conditionals/conditionals").JSONSchema;
@@ -185,6 +187,7 @@ export declare function field(fieldId: string, options?: {
185
187
  isLessThan(value: number | import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
186
188
  isEqualTo(value: string | boolean | number | import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
187
189
  isEqualToSumOf(val1: import("./FieldConfig").FieldReference, val2: import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
190
+ isValidDeceasedAge(dobField: import("./FieldConfig").FieldReference, dodField: import("./FieldConfig").FieldReference, todField: import("./FieldConfig").FieldReference, format: "years" | "months" | "days" | "hours" | "minutes"): import("../conditionals/conditionals").JSONSchema;
188
191
  isAbbreviation(): import("../conditionals/conditionals").JSONSchema;
189
192
  isIllDefined(causesOfDeathFields: import("./FieldConfig").FieldReference[], threshold: number): import("../conditionals/conditionals").JSONSchema;
190
193
  isFalsy(): import("../conditionals/conditionals").JSONSchema;
@@ -231,6 +234,7 @@ export declare function field(fieldId: string, options?: {
231
234
  isLessThan(value: number | import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
232
235
  isEqualTo(value: string | boolean | number | import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
233
236
  isEqualToSumOf(val1: import("./FieldConfig").FieldReference, val2: import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
237
+ isValidDeceasedAge(dobField: import("./FieldConfig").FieldReference, dodField: import("./FieldConfig").FieldReference, todField: import("./FieldConfig").FieldReference, format: "years" | "months" | "days" | "hours" | "minutes"): import("../conditionals/conditionals").JSONSchema;
234
238
  isAbbreviation(): import("../conditionals/conditionals").JSONSchema;
235
239
  isIllDefined(causesOfDeathFields: import("./FieldConfig").FieldReference[], threshold: number): import("../conditionals/conditionals").JSONSchema;
236
240
  isFalsy(): import("../conditionals/conditionals").JSONSchema;
@@ -276,6 +280,7 @@ export declare function field(fieldId: string, options?: {
276
280
  isLessThan(value: number | import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
277
281
  isEqualTo(value: string | boolean | number | import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
278
282
  isEqualToSumOf(val1: import("./FieldConfig").FieldReference, val2: import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
283
+ isValidDeceasedAge(dobField: import("./FieldConfig").FieldReference, dodField: import("./FieldConfig").FieldReference, todField: import("./FieldConfig").FieldReference, format: "years" | "months" | "days" | "hours" | "minutes"): import("../conditionals/conditionals").JSONSchema;
279
284
  isAbbreviation(): import("../conditionals/conditionals").JSONSchema;
280
285
  isIllDefined(causesOfDeathFields: import("./FieldConfig").FieldReference[], threshold: number): import("../conditionals/conditionals").JSONSchema;
281
286
  isFalsy(): import("../conditionals/conditionals").JSONSchema;
@@ -314,6 +319,7 @@ export declare function field(fieldId: string, options?: {
314
319
  isLessThan(value: number | import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
315
320
  isEqualTo(value: string | boolean | number | import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
316
321
  isEqualToSumOf(val1: import("./FieldConfig").FieldReference, val2: import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
322
+ isValidDeceasedAge(dobField: import("./FieldConfig").FieldReference, dodField: import("./FieldConfig").FieldReference, todField: import("./FieldConfig").FieldReference, format: "years" | "months" | "days" | "hours" | "minutes"): import("../conditionals/conditionals").JSONSchema;
317
323
  isAbbreviation(): import("../conditionals/conditionals").JSONSchema;
318
324
  isIllDefined(causesOfDeathFields: import("./FieldConfig").FieldReference[], threshold: number): import("../conditionals/conditionals").JSONSchema;
319
325
  isFalsy(): import("../conditionals/conditionals").JSONSchema;
@@ -363,6 +369,7 @@ export declare function field(fieldId: string, options?: {
363
369
  isLessThan(value: number | import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
364
370
  isEqualTo(value: string | boolean | number | import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
365
371
  isEqualToSumOf(val1: import("./FieldConfig").FieldReference, val2: import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
372
+ isValidDeceasedAge(dobField: import("./FieldConfig").FieldReference, dodField: import("./FieldConfig").FieldReference, todField: import("./FieldConfig").FieldReference, format: "years" | "months" | "days" | "hours" | "minutes"): import("../conditionals/conditionals").JSONSchema;
366
373
  isAbbreviation(): import("../conditionals/conditionals").JSONSchema;
367
374
  isIllDefined(causesOfDeathFields: import("./FieldConfig").FieldReference[], threshold: number): import("../conditionals/conditionals").JSONSchema;
368
375
  isFalsy(): import("../conditionals/conditionals").JSONSchema;
@@ -403,6 +410,7 @@ export declare function field(fieldId: string, options?: {
403
410
  isLessThan(value: number | import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
404
411
  isEqualTo(value: string | boolean | number | import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
405
412
  isEqualToSumOf(val1: import("./FieldConfig").FieldReference, val2: import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
413
+ isValidDeceasedAge(dobField: import("./FieldConfig").FieldReference, dodField: import("./FieldConfig").FieldReference, todField: import("./FieldConfig").FieldReference, format: "years" | "months" | "days" | "hours" | "minutes"): import("../conditionals/conditionals").JSONSchema;
406
414
  isAbbreviation(): import("../conditionals/conditionals").JSONSchema;
407
415
  isIllDefined(causesOfDeathFields: import("./FieldConfig").FieldReference[], threshold: number): import("../conditionals/conditionals").JSONSchema;
408
416
  isFalsy(): import("../conditionals/conditionals").JSONSchema;
@@ -452,6 +460,7 @@ export declare function field(fieldId: string, options?: {
452
460
  isLessThan(value: number | import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
453
461
  isEqualTo(value: string | boolean | number | import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
454
462
  isEqualToSumOf(val1: import("./FieldConfig").FieldReference, val2: import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
463
+ isValidDeceasedAge(dobField: import("./FieldConfig").FieldReference, dodField: import("./FieldConfig").FieldReference, todField: import("./FieldConfig").FieldReference, format: "years" | "months" | "days" | "hours" | "minutes"): import("../conditionals/conditionals").JSONSchema;
455
464
  isAbbreviation(): import("../conditionals/conditionals").JSONSchema;
456
465
  isIllDefined(causesOfDeathFields: import("./FieldConfig").FieldReference[], threshold: number): import("../conditionals/conditionals").JSONSchema;
457
466
  isFalsy(): import("../conditionals/conditionals").JSONSchema;
@@ -492,6 +501,7 @@ export declare function field(fieldId: string, options?: {
492
501
  isLessThan(value: number | import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
493
502
  isEqualTo(value: string | boolean | number | import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
494
503
  isEqualToSumOf(val1: import("./FieldConfig").FieldReference, val2: import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
504
+ isValidDeceasedAge(dobField: import("./FieldConfig").FieldReference, dodField: import("./FieldConfig").FieldReference, todField: import("./FieldConfig").FieldReference, format: "years" | "months" | "days" | "hours" | "minutes"): import("../conditionals/conditionals").JSONSchema;
495
505
  isAbbreviation(): import("../conditionals/conditionals").JSONSchema;
496
506
  isIllDefined(causesOfDeathFields: import("./FieldConfig").FieldReference[], threshold: number): import("../conditionals/conditionals").JSONSchema;
497
507
  isFalsy(): import("../conditionals/conditionals").JSONSchema;
@@ -530,6 +540,7 @@ export declare function field(fieldId: string, options?: {
530
540
  isLessThan(value: number | import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
531
541
  isEqualTo(value: string | boolean | number | import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
532
542
  isEqualToSumOf(val1: import("./FieldConfig").FieldReference, val2: import("./FieldConfig").FieldReference): import("../conditionals/conditionals").JSONSchema;
543
+ isValidDeceasedAge(dobField: import("./FieldConfig").FieldReference, dodField: import("./FieldConfig").FieldReference, todField: import("./FieldConfig").FieldReference, format: "years" | "months" | "days" | "hours" | "minutes"): import("../conditionals/conditionals").JSONSchema;
533
544
  isAbbreviation(): import("../conditionals/conditionals").JSONSchema;
534
545
  isIllDefined(causesOfDeathFields: import("./FieldConfig").FieldReference[], threshold: number): import("../conditionals/conditionals").JSONSchema;
535
546
  isFalsy(): import("../conditionals/conditionals").JSONSchema;
@@ -518,18 +518,39 @@ function createFieldConditionals(fieldId) {
518
518
  return defineFormConditional({
519
519
  type: "object",
520
520
  properties: {
521
- [fieldId]: { type: "number" },
521
+ [this.$$field]: { type: "number" },
522
522
  [field1Id]: { type: "number" },
523
523
  [field2Id]: { type: "number" }
524
524
  },
525
- required: [fieldId, field1Id, field2Id],
525
+ required: [this.$$field, field1Id, field2Id],
526
526
  sumOf: {
527
- sum: fieldId,
527
+ sum: this.$$field,
528
528
  field1: field1Id,
529
529
  field2: field2Id
530
530
  }
531
531
  });
532
532
  },
533
+ isValidDeceasedAge(dobField, dodField, todField, format) {
534
+ const dobFieldId = dobField.$$field;
535
+ const dodFieldId = dodField.$$field;
536
+ const todFieldId = todField.$$field;
537
+ return defineFormConditional({
538
+ type: "object",
539
+ properties: {
540
+ [this.$$field]: { type: "number" },
541
+ [dobFieldId]: { type: "string" },
542
+ [dodFieldId]: { type: "string" },
543
+ [todFieldId]: { type: "string" }
544
+ },
545
+ isValidAgeOfDeceased: {
546
+ ageField: this.$$field,
547
+ dateOfBirthField: dobFieldId,
548
+ deathDateField: dodFieldId,
549
+ deathTimeField: todFieldId,
550
+ format
551
+ }
552
+ });
553
+ },
533
554
  isAbbreviation() {
534
555
  return defineFormConditional({
535
556
  type: "object",
@@ -357,6 +357,7 @@ __export(events_exports, {
357
357
  isTextFieldType: () => isTextFieldType,
358
358
  isTimeFieldType: () => isTimeFieldType,
359
359
  isUndeclaredDraft: () => isUndeclaredDraft,
360
+ isValidDateFormat: () => isValidDateFormat,
360
361
  isVerificationPage: () => isVerificationPage,
361
362
  isVerificationStatusType: () => isVerificationStatusType,
362
363
  isWriteAction: () => isWriteAction,
@@ -4541,6 +4542,72 @@ ajv.addKeyword({
4541
4542
  return locations.some((location) => location.id === locationIdInput);
4542
4543
  }
4543
4544
  });
4545
+ var datePattern = /^\d{4}-\d{1,2}-\d{1,2}$/;
4546
+ var isValidDateFormat = (date) => {
4547
+ if (!datePattern.test(date)) return false;
4548
+ const d = new Date(date);
4549
+ return !isNaN(d.getTime());
4550
+ };
4551
+ var MS_PER_DAY = 1e3 * 60 * 60 * 24;
4552
+ var MS_PER_HOUR = 1e3 * 60 * 60;
4553
+ var MS_PER_MINUTE = 1e3 * 60;
4554
+ function getAgeOfDeceased(dateOfBirth, dateOfDeath, format3 = "years") {
4555
+ if (dateOfDeath < dateOfBirth) {
4556
+ return 0;
4557
+ }
4558
+ if (format3 === "years") {
4559
+ let age = dateOfDeath.getFullYear() - dateOfBirth.getFullYear();
4560
+ const monthDiff = dateOfDeath.getMonth() - dateOfBirth.getMonth();
4561
+ const dayDiff = dateOfDeath.getDate() - dateOfBirth.getDate();
4562
+ if (monthDiff < 0 || monthDiff === 0 && dayDiff < 0) age--;
4563
+ return age;
4564
+ }
4565
+ if (format3 === "months") {
4566
+ let months = (dateOfDeath.getFullYear() - dateOfBirth.getFullYear()) * 12;
4567
+ months += dateOfDeath.getMonth() - dateOfBirth.getMonth();
4568
+ if (dateOfDeath.getDate() < dateOfBirth.getDate()) months--;
4569
+ return months;
4570
+ }
4571
+ if (format3 === "days") {
4572
+ const diffTime2 = dateOfDeath.getTime() - dateOfBirth.getTime();
4573
+ return Math.floor(diffTime2 / MS_PER_DAY);
4574
+ }
4575
+ if (format3 === "hours") {
4576
+ const diffTime2 = dateOfDeath.getTime() - dateOfBirth.getTime();
4577
+ const remainingMs2 = diffTime2 - MS_PER_DAY;
4578
+ return remainingMs2 < 0 ? Math.floor(diffTime2 / MS_PER_HOUR) : Math.floor(remainingMs2 / MS_PER_HOUR);
4579
+ }
4580
+ const diffTime = dateOfDeath.getTime() - dateOfBirth.getTime();
4581
+ const remainingMs = diffTime - MS_PER_DAY;
4582
+ return remainingMs < 0 ? Math.floor(diffTime / MS_PER_MINUTE) : Math.floor(remainingMs / MS_PER_MINUTE);
4583
+ }
4584
+ ajv.addKeyword({
4585
+ keyword: "isValidAgeOfDeceased",
4586
+ type: "object",
4587
+ schemaType: "object",
4588
+ errors: true,
4589
+ validate(schema, data) {
4590
+ const {
4591
+ ageField,
4592
+ dateOfBirthField,
4593
+ deathDateField,
4594
+ deathTimeField,
4595
+ format: format3
4596
+ } = schema;
4597
+ const dob = data?.[dateOfBirthField];
4598
+ const dod = data?.[deathDateField];
4599
+ const tod = data?.[deathTimeField];
4600
+ const ageValue = data?.[ageField];
4601
+ if (!ageValue || !isValidDateFormat(dob) || !isValidDateFormat(dod) || !dod || !dob) {
4602
+ return true;
4603
+ }
4604
+ const dateOfBirth = /* @__PURE__ */ new Date(`${dob}T00:00:00+00:00`);
4605
+ const dateOfDeath = tod ? /* @__PURE__ */ new Date(`${dod}T${tod}:00+00:00`) : /* @__PURE__ */ new Date(`${dod}T00:00:00+00:00`);
4606
+ const deceasedAge = getAgeOfDeceased(dateOfBirth, dateOfDeath, format3);
4607
+ const sameDay = dateOfBirth.toISOString().slice(0, 10) === dateOfDeath.toISOString().slice(0, 10);
4608
+ return Number(ageValue) === deceasedAge && !(format3 === "hours" && !sameDay) && !(format3 === "minutes" && !sameDay) || format3 === "days" && deceasedAge - Number(ageValue) === 1 || format3 === "hours" && !sameDay && deceasedAge < Number(ageValue) || format3 === "hours" && sameDay && !tod || format3 === "minutes" && !sameDay && deceasedAge < Number(ageValue) || format3 === "minutes" && sameDay && !tod;
4609
+ }
4610
+ });
4544
4611
  ajv.addKeyword({
4545
4612
  keyword: "sumOf",
4546
4613
  type: "object",
@@ -4564,7 +4631,9 @@ ajv.addKeyword({
4564
4631
  schemaType: "boolean",
4565
4632
  errors: true,
4566
4633
  validate(schema, data) {
4567
- if (!schema) return true;
4634
+ if (!schema) {
4635
+ return true;
4636
+ }
4568
4637
  if (typeof data !== "string") {
4569
4638
  return true;
4570
4639
  }
@@ -4585,11 +4654,15 @@ ajv.addKeyword({
4585
4654
  errors: true,
4586
4655
  validate(schema, data) {
4587
4656
  const { fields, threshold } = schema;
4588
- if (!data || typeof data !== "object") return true;
4657
+ if (!data || typeof data !== "object") {
4658
+ return true;
4659
+ }
4589
4660
  const causesOfDeath = fields.flatMap(
4590
4661
  (field3) => (data?.[field3] || "").split(",").map((v) => v.trim()).filter(Boolean)
4591
4662
  ).filter((val, index, self) => self.indexOf(val) === index);
4592
- if (causesOfDeath.length === 0) return true;
4663
+ if (causesOfDeath.length === 0) {
4664
+ return true;
4665
+ }
4593
4666
  let hasNonIllDefined = false;
4594
4667
  for (const term of causesOfDeath) {
4595
4668
  const results = fuzzySearch(term, illDefinedConditions, threshold).filter(
@@ -4930,7 +5003,9 @@ function fuzzySearch(query, list, threshold, limit = 3) {
4930
5003
  const normalize = (str) => str.toLowerCase().replace(/[^\w\s]/g, "").trim();
4931
5004
  const tokenize = (str) => normalize(str).split(/\s+/).filter((w) => w.length >= 3);
4932
5005
  const queryWords = tokenize(query);
4933
- if (queryWords.length === 0) return [];
5006
+ if (queryWords.length === 0) {
5007
+ return [];
5008
+ }
4934
5009
  const results = [];
4935
5010
  for (const item of list) {
4936
5011
  const itemWords = tokenize(item);
@@ -4946,7 +5021,9 @@ function fuzzySearch(query, list, threshold, limit = 3) {
4946
5021
  for (const iWord of itemWords) {
4947
5022
  const dist = levenshtein(qWord, iWord);
4948
5023
  const normDist = dist / Math.max(qWord.length, iWord.length);
4949
- if (normDist < bestScore) bestScore = normDist;
5024
+ if (normDist < bestScore) {
5025
+ bestScore = normDist;
5026
+ }
4950
5027
  }
4951
5028
  if (bestScore !== Infinity) {
4952
5029
  const weight = COMMON_WORDS.has(qWord) ? 0.5 : 1;
@@ -5739,18 +5816,39 @@ function createFieldConditionals(fieldId) {
5739
5816
  return defineFormConditional({
5740
5817
  type: "object",
5741
5818
  properties: {
5742
- [fieldId]: { type: "number" },
5819
+ [this.$$field]: { type: "number" },
5743
5820
  [field1Id]: { type: "number" },
5744
5821
  [field2Id]: { type: "number" }
5745
5822
  },
5746
- required: [fieldId, field1Id, field2Id],
5823
+ required: [this.$$field, field1Id, field2Id],
5747
5824
  sumOf: {
5748
- sum: fieldId,
5825
+ sum: this.$$field,
5749
5826
  field1: field1Id,
5750
5827
  field2: field2Id
5751
5828
  }
5752
5829
  });
5753
5830
  },
5831
+ isValidDeceasedAge(dobField, dodField, todField, format3) {
5832
+ const dobFieldId = dobField.$$field;
5833
+ const dodFieldId = dodField.$$field;
5834
+ const todFieldId = todField.$$field;
5835
+ return defineFormConditional({
5836
+ type: "object",
5837
+ properties: {
5838
+ [this.$$field]: { type: "number" },
5839
+ [dobFieldId]: { type: "string" },
5840
+ [dodFieldId]: { type: "string" },
5841
+ [todFieldId]: { type: "string" }
5842
+ },
5843
+ isValidAgeOfDeceased: {
5844
+ ageField: this.$$field,
5845
+ dateOfBirthField: dobFieldId,
5846
+ deathDateField: dodFieldId,
5847
+ deathTimeField: todFieldId,
5848
+ format: format3
5849
+ }
5850
+ });
5851
+ },
5754
5852
  isAbbreviation() {
5755
5853
  return defineFormConditional({
5756
5854
  type: "object",
@@ -3764,6 +3764,72 @@ ajv.addKeyword({
3764
3764
  return locations.some((location) => location.id === locationIdInput);
3765
3765
  }
3766
3766
  });
3767
+ var datePattern = /^\d{4}-\d{1,2}-\d{1,2}$/;
3768
+ var isValidDateFormat = (date) => {
3769
+ if (!datePattern.test(date)) return false;
3770
+ const d = new Date(date);
3771
+ return !isNaN(d.getTime());
3772
+ };
3773
+ var MS_PER_DAY = 1e3 * 60 * 60 * 24;
3774
+ var MS_PER_HOUR = 1e3 * 60 * 60;
3775
+ var MS_PER_MINUTE = 1e3 * 60;
3776
+ function getAgeOfDeceased(dateOfBirth, dateOfDeath, format3 = "years") {
3777
+ if (dateOfDeath < dateOfBirth) {
3778
+ return 0;
3779
+ }
3780
+ if (format3 === "years") {
3781
+ let age = dateOfDeath.getFullYear() - dateOfBirth.getFullYear();
3782
+ const monthDiff = dateOfDeath.getMonth() - dateOfBirth.getMonth();
3783
+ const dayDiff = dateOfDeath.getDate() - dateOfBirth.getDate();
3784
+ if (monthDiff < 0 || monthDiff === 0 && dayDiff < 0) age--;
3785
+ return age;
3786
+ }
3787
+ if (format3 === "months") {
3788
+ let months = (dateOfDeath.getFullYear() - dateOfBirth.getFullYear()) * 12;
3789
+ months += dateOfDeath.getMonth() - dateOfBirth.getMonth();
3790
+ if (dateOfDeath.getDate() < dateOfBirth.getDate()) months--;
3791
+ return months;
3792
+ }
3793
+ if (format3 === "days") {
3794
+ const diffTime2 = dateOfDeath.getTime() - dateOfBirth.getTime();
3795
+ return Math.floor(diffTime2 / MS_PER_DAY);
3796
+ }
3797
+ if (format3 === "hours") {
3798
+ const diffTime2 = dateOfDeath.getTime() - dateOfBirth.getTime();
3799
+ const remainingMs2 = diffTime2 - MS_PER_DAY;
3800
+ return remainingMs2 < 0 ? Math.floor(diffTime2 / MS_PER_HOUR) : Math.floor(remainingMs2 / MS_PER_HOUR);
3801
+ }
3802
+ const diffTime = dateOfDeath.getTime() - dateOfBirth.getTime();
3803
+ const remainingMs = diffTime - MS_PER_DAY;
3804
+ return remainingMs < 0 ? Math.floor(diffTime / MS_PER_MINUTE) : Math.floor(remainingMs / MS_PER_MINUTE);
3805
+ }
3806
+ ajv.addKeyword({
3807
+ keyword: "isValidAgeOfDeceased",
3808
+ type: "object",
3809
+ schemaType: "object",
3810
+ errors: true,
3811
+ validate(schema, data) {
3812
+ const {
3813
+ ageField,
3814
+ dateOfBirthField,
3815
+ deathDateField,
3816
+ deathTimeField,
3817
+ format: format3
3818
+ } = schema;
3819
+ const dob = data?.[dateOfBirthField];
3820
+ const dod = data?.[deathDateField];
3821
+ const tod = data?.[deathTimeField];
3822
+ const ageValue = data?.[ageField];
3823
+ if (!ageValue || !isValidDateFormat(dob) || !isValidDateFormat(dod) || !dod || !dob) {
3824
+ return true;
3825
+ }
3826
+ const dateOfBirth = /* @__PURE__ */ new Date(`${dob}T00:00:00+00:00`);
3827
+ const dateOfDeath = tod ? /* @__PURE__ */ new Date(`${dod}T${tod}:00+00:00`) : /* @__PURE__ */ new Date(`${dod}T00:00:00+00:00`);
3828
+ const deceasedAge = getAgeOfDeceased(dateOfBirth, dateOfDeath, format3);
3829
+ const sameDay = dateOfBirth.toISOString().slice(0, 10) === dateOfDeath.toISOString().slice(0, 10);
3830
+ return Number(ageValue) === deceasedAge && !(format3 === "hours" && !sameDay) && !(format3 === "minutes" && !sameDay) || format3 === "days" && deceasedAge - Number(ageValue) === 1 || format3 === "hours" && !sameDay && deceasedAge < Number(ageValue) || format3 === "hours" && sameDay && !tod || format3 === "minutes" && !sameDay && deceasedAge < Number(ageValue) || format3 === "minutes" && sameDay && !tod;
3831
+ }
3832
+ });
3767
3833
  ajv.addKeyword({
3768
3834
  keyword: "sumOf",
3769
3835
  type: "object",
@@ -3787,7 +3853,9 @@ ajv.addKeyword({
3787
3853
  schemaType: "boolean",
3788
3854
  errors: true,
3789
3855
  validate(schema, data) {
3790
- if (!schema) return true;
3856
+ if (!schema) {
3857
+ return true;
3858
+ }
3791
3859
  if (typeof data !== "string") {
3792
3860
  return true;
3793
3861
  }
@@ -3808,11 +3876,15 @@ ajv.addKeyword({
3808
3876
  errors: true,
3809
3877
  validate(schema, data) {
3810
3878
  const { fields, threshold } = schema;
3811
- if (!data || typeof data !== "object") return true;
3879
+ if (!data || typeof data !== "object") {
3880
+ return true;
3881
+ }
3812
3882
  const causesOfDeath = fields.flatMap(
3813
3883
  (field3) => (data?.[field3] || "").split(",").map((v) => v.trim()).filter(Boolean)
3814
3884
  ).filter((val, index, self) => self.indexOf(val) === index);
3815
- if (causesOfDeath.length === 0) return true;
3885
+ if (causesOfDeath.length === 0) {
3886
+ return true;
3887
+ }
3816
3888
  let hasNonIllDefined = false;
3817
3889
  for (const term of causesOfDeath) {
3818
3890
  const results = fuzzySearch(term, illDefinedConditions, threshold).filter(
@@ -3862,7 +3934,9 @@ function fuzzySearch(query, list, threshold, limit = 3) {
3862
3934
  const normalize = (str) => str.toLowerCase().replace(/[^\w\s]/g, "").trim();
3863
3935
  const tokenize = (str) => normalize(str).split(/\s+/).filter((w) => w.length >= 3);
3864
3936
  const queryWords = tokenize(query);
3865
- if (queryWords.length === 0) return [];
3937
+ if (queryWords.length === 0) {
3938
+ return [];
3939
+ }
3866
3940
  const results = [];
3867
3941
  for (const item of list) {
3868
3942
  const itemWords = tokenize(item);
@@ -3878,7 +3952,9 @@ function fuzzySearch(query, list, threshold, limit = 3) {
3878
3952
  for (const iWord of itemWords) {
3879
3953
  const dist = levenshtein(qWord, iWord);
3880
3954
  const normDist = dist / Math.max(qWord.length, iWord.length);
3881
- if (normDist < bestScore) bestScore = normDist;
3955
+ if (normDist < bestScore) {
3956
+ bestScore = normDist;
3957
+ }
3882
3958
  }
3883
3959
  if (bestScore !== Infinity) {
3884
3960
  const weight = COMMON_WORDS.has(qWord) ? 0.5 : 1;
@@ -4359,18 +4435,39 @@ function createFieldConditionals(fieldId) {
4359
4435
  return defineFormConditional({
4360
4436
  type: "object",
4361
4437
  properties: {
4362
- [fieldId]: { type: "number" },
4438
+ [this.$$field]: { type: "number" },
4363
4439
  [field1Id]: { type: "number" },
4364
4440
  [field2Id]: { type: "number" }
4365
4441
  },
4366
- required: [fieldId, field1Id, field2Id],
4442
+ required: [this.$$field, field1Id, field2Id],
4367
4443
  sumOf: {
4368
- sum: fieldId,
4444
+ sum: this.$$field,
4369
4445
  field1: field1Id,
4370
4446
  field2: field2Id
4371
4447
  }
4372
4448
  });
4373
4449
  },
4450
+ isValidDeceasedAge(dobField, dodField, todField, format3) {
4451
+ const dobFieldId = dobField.$$field;
4452
+ const dodFieldId = dodField.$$field;
4453
+ const todFieldId = todField.$$field;
4454
+ return defineFormConditional({
4455
+ type: "object",
4456
+ properties: {
4457
+ [this.$$field]: { type: "number" },
4458
+ [dobFieldId]: { type: "string" },
4459
+ [dodFieldId]: { type: "string" },
4460
+ [todFieldId]: { type: "string" }
4461
+ },
4462
+ isValidAgeOfDeceased: {
4463
+ ageField: this.$$field,
4464
+ dateOfBirthField: dobFieldId,
4465
+ deathDateField: dodFieldId,
4466
+ deathTimeField: todFieldId,
4467
+ format: format3
4468
+ }
4469
+ });
4470
+ },
4374
4471
  isAbbreviation() {
4375
4472
  return defineFormConditional({
4376
4473
  type: "object",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ecrvs/opencrvs-toolkit",
3
- "version": "1.9.10-rc.29c74a5",
3
+ "version": "1.9.10-rc.d4f70c6",
4
4
  "description": "OpenCRVS toolkit for building country configurations",
5
5
  "license": "MPL-2.0",
6
6
  "exports": {