@aehrc/smart-forms-renderer 1.2.2 → 1.2.4
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.
- package/lib/components/FormComponents/DecimalItem/DecimalField.js +6 -2
- package/lib/components/FormComponents/DecimalItem/DecimalField.js.map +1 -1
- package/lib/components/FormComponents/IntegerItem/IntegerField.js +6 -2
- package/lib/components/FormComponents/IntegerItem/IntegerField.js.map +1 -1
- package/lib/components/FormComponents/QuantityItem/QuantityField.d.ts +1 -0
- package/lib/components/FormComponents/QuantityItem/QuantityField.js +10 -3
- package/lib/components/FormComponents/QuantityItem/QuantityField.js.map +1 -1
- package/lib/components/FormComponents/QuantityItem/QuantityItem.js +2 -2
- package/lib/components/FormComponents/QuantityItem/QuantityItem.js.map +1 -1
- package/lib/hooks/useCalculatedExpressionUpdated.js +3 -1
- package/lib/hooks/useCalculatedExpressionUpdated.js.map +1 -1
- package/lib/interfaces/itemPath.interface.d.ts +31 -0
- package/lib/interfaces/itemPath.interface.js +2 -0
- package/lib/interfaces/itemPath.interface.js.map +1 -0
- package/lib/stories/storybookWrappers/InitialiseFormWrapperForStorybook.d.ts +2 -3
- package/lib/stories/storybookWrappers/InitialiseFormWrapperForStorybook.js +6 -27
- package/lib/stories/storybookWrappers/InitialiseFormWrapperForStorybook.js.map +1 -1
- package/lib/stories/storybookWrappers/index.js +1 -1
- package/lib/utils/itemPath.d.ts +57 -0
- package/lib/utils/itemPath.js +75 -0
- package/lib/utils/itemPath.js.map +1 -0
- package/package.json +1 -1
- package/src/components/FormComponents/DecimalItem/DecimalField.tsx +8 -2
- package/src/components/FormComponents/IntegerItem/IntegerField.tsx +8 -2
- package/src/components/FormComponents/QuantityItem/QuantityField.tsx +13 -2
- package/src/components/FormComponents/QuantityItem/QuantityItem.tsx +2 -0
- package/src/hooks/useCalculatedExpressionUpdated.ts +3 -1
- package/lib/components/FormComponents/ItemParts/FadingCheckIcon.d.ts +0 -7
- package/lib/components/FormComponents/ItemParts/FadingCheckIcon.js +0 -26
- package/lib/components/FormComponents/ItemParts/FadingCheckIcon.js.map +0 -1
- package/lib/components/FormComponents/ItemParts/ItemLabelText.d.ts +0 -8
- package/lib/components/FormComponents/ItemParts/ItemLabelText.js +0 -63
- package/lib/components/FormComponents/ItemParts/ItemLabelText.js.map +0 -1
- package/lib/components/FormComponents/ItemParts/ItemLabelWrapper.d.ts +0 -8
- package/lib/components/FormComponents/ItemParts/ItemLabelWrapper.js +0 -53
- package/lib/components/FormComponents/ItemParts/ItemLabelWrapper.js.map +0 -1
- package/lib/components/FormComponents/RepeatGroup/DeleteItemButton.d.ts +0 -10
- package/lib/components/FormComponents/RepeatGroup/DeleteItemButton.js +0 -30
- package/lib/components/FormComponents/RepeatGroup/DeleteItemButton.js.map +0 -1
- package/lib/components/Iconify/Iconify.d.ts +0 -10
- package/lib/components/Iconify/Iconify.js +0 -26
- package/lib/components/Iconify/Iconify.js.map +0 -1
- package/lib/components/Renderer/FormBodyPage.d.ts +0 -9
- package/lib/components/Renderer/FormBodyPage.js +0 -43
- package/lib/components/Renderer/FormBodyPage.js.map +0 -1
- package/lib/components/Renderer/FormTitle.d.ts +0 -7
- package/lib/components/Renderer/FormTitle.js +0 -30
- package/lib/components/Renderer/FormTitle.js.map +0 -1
- package/lib/components/Renderer/FormTopLevelPage.d.ts +0 -9
- package/lib/components/Renderer/FormTopLevelPage.js +0 -29
- package/lib/components/Renderer/FormTopLevelPage.js.map +0 -1
- package/lib/hooks/useBooleanCalculatedExpression.d.ts +0 -12
- package/lib/hooks/useBooleanCalculatedExpression.js +0 -53
- package/lib/hooks/useBooleanCalculatedExpression.js.map +0 -1
- package/lib/hooks/useDecimalCalculatedExpression.d.ts +0 -13
- package/lib/hooks/useDecimalCalculatedExpression.js +0 -59
- package/lib/hooks/useDecimalCalculatedExpression.js.map +0 -1
- package/lib/hooks/useIntegerCalculatedExpression.d.ts +0 -12
- package/lib/hooks/useIntegerCalculatedExpression.js +0 -56
- package/lib/hooks/useIntegerCalculatedExpression.js.map +0 -1
- package/lib/hooks/useQuantityCalculatedExpression.d.ts +0 -14
- package/lib/hooks/useQuantityCalculatedExpression.js +0 -107
- package/lib/hooks/useQuantityCalculatedExpression.js.map +0 -1
- package/lib/hooks/useStringCalculatedExpression.d.ts +0 -12
- package/lib/hooks/useStringCalculatedExpression.js +0 -58
- package/lib/hooks/useStringCalculatedExpression.js.map +0 -1
- package/lib/theme/Theme.d.ts +0 -44
- package/lib/theme/Theme.js +0 -43
- package/lib/theme/Theme.js.map +0 -1
- package/lib/theme/customGlobalStyles.d.ts +0 -2
- package/lib/theme/customGlobalStyles.js +0 -61
- package/lib/theme/customGlobalStyles.js.map +0 -1
- package/lib/theme/overrides/Accordion.d.ts +0 -14
- package/lib/theme/overrides/Accordion.js +0 -32
- package/lib/theme/overrides/Accordion.js.map +0 -1
- package/lib/theme/overrides/Autocomplete.d.ts +0 -10
- package/lib/theme/overrides/Autocomplete.js +0 -28
- package/lib/theme/overrides/Autocomplete.js.map +0 -1
- package/lib/theme/overrides/Button.d.ts +0 -33
- package/lib/theme/overrides/Button.js +0 -52
- package/lib/theme/overrides/Button.js.map +0 -1
- package/lib/theme/overrides/Card.d.ts +0 -35
- package/lib/theme/overrides/Card.js +0 -49
- package/lib/theme/overrides/Card.js.map +0 -1
- package/lib/theme/overrides/Input.d.ts +0 -64
- package/lib/theme/overrides/Input.js +0 -81
- package/lib/theme/overrides/Input.js.map +0 -1
- package/lib/theme/overrides/Overrides.d.ts +0 -3
- package/lib/theme/overrides/Overrides.js +0 -29
- package/lib/theme/overrides/Overrides.js.map +0 -1
- package/lib/theme/overrides/Paper.d.ts +0 -12
- package/lib/theme/overrides/Paper.js +0 -31
- package/lib/theme/overrides/Paper.js.map +0 -1
- package/lib/theme/overrides/SpeedDial.d.ts +0 -16
- package/lib/theme/overrides/SpeedDial.js +0 -34
- package/lib/theme/overrides/SpeedDial.js.map +0 -1
- package/lib/theme/overrides/Table.d.ts +0 -12
- package/lib/theme/overrides/Table.js +0 -30
- package/lib/theme/overrides/Table.js.map +0 -1
- package/lib/theme/palette.d.ts +0 -27
- package/lib/theme/palette.js +0 -63
- package/lib/theme/palette.js.map +0 -1
- package/lib/theme/shadows.d.ts +0 -2
- package/lib/theme/shadows.js +0 -52
- package/lib/theme/shadows.js.map +0 -1
- package/lib/utils/dayjsExtend.d.ts +0 -1
- package/lib/utils/dayjsExtend.js +0 -22
- package/lib/utils/dayjsExtend.js.map +0 -1
- package/lib/utils/itemControl.d.ts +0 -103
- package/lib/utils/itemControl.js +0 -350
- package/lib/utils/itemControl.js.map +0 -1
- package/lib/utils/questionnaireStoreUtils/addAdditionalVariables.d.ts +0 -2
- package/lib/utils/questionnaireStoreUtils/addAdditionalVariables.js +0 -43
- package/lib/utils/questionnaireStoreUtils/addAdditionalVariables.js.map +0 -1
- package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.d.ts +0 -3
- package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js +0 -101
- package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js.map +0 -1
- package/lib/utils/validateQuestionnaire.d.ts +0 -66
- package/lib/utils/validateQuestionnaire.js +0 -559
- package/lib/utils/validateQuestionnaire.js.map +0 -1
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import type { OperationOutcome, Questionnaire, QuestionnaireItem, QuestionnaireResponse } from 'fhir/r4';
|
|
2
|
-
import type { RegexValidation } from '../interfaces/regex.interface';
|
|
3
|
-
export declare enum ValidationResult {
|
|
4
|
-
unknown = "unknown",// Unknown validation result
|
|
5
|
-
questionnaireNotFound = "questionnaireNotFound",// The Questionnaire referenced by the QR was not found
|
|
6
|
-
questionnaireInactive = "questionnaireInactive",// The QuestionnaireResponse.authored is outside the defined Questionnaire.effectivePeriod
|
|
7
|
-
questionnaireDraft = "questionnaireDraft",// The Questionnaire.status was not active (draft)
|
|
8
|
-
questionnaireRetired = "questionnaireRetired",// The Questionnaire.status was not active (retired)
|
|
9
|
-
invalidLinkId = "invalidLinkId",// LinkId was not found in the questionnaire
|
|
10
|
-
invalidType = "invalidType",// The Question Type should not be included in Response (or Definition) data
|
|
11
|
-
invalidAnswerType = "invalidAnswerType",// The Answer does not conform to the Item.Type value required (also taking into consideration the fhir-type extension)
|
|
12
|
-
invalidAnswerOption = "invalidAnswerOption",// A set of valid AnswerOptions were provided in the definition, but the value entered was not in the set
|
|
13
|
-
exclusiveAnswerOption = "exclusiveAnswerOption",// The selected answer cannot be used in conjunction with other answers in this multi-select choice option
|
|
14
|
-
invalidUrlValue = "invalidUrlValue",// URL value not formatted correctly as a UUID, or relative/absolute URL
|
|
15
|
-
groupShouldNotHaveAnswers = "groupShouldNotHaveAnswers",// A Group Item should not use the `answer` child, it should use the `item` child
|
|
16
|
-
required = "required",// There was no answer provided for a mandatory field
|
|
17
|
-
invariant = "invariant",// A FHIRPATH validation expression did not pass
|
|
18
|
-
invariantExecution = "invariantExecution",// A FHIRPATH validation expression failed to execute
|
|
19
|
-
repeats = "repeats",// There was more than one answer provided for an item with repeats = false (which is the default)
|
|
20
|
-
minCount = "minCount",// Minimum number of answers required for the item was not provided
|
|
21
|
-
maxCount = "maxCount",// Number of answers provided exceeded the maximum permitted
|
|
22
|
-
minValue = "minValue",// Minimum value constraint violated
|
|
23
|
-
maxValue = "maxValue",// Maximum value constraint violated
|
|
24
|
-
maxDecimalPlaces = "maxDecimalPlaces",// Maximum decimal places constraint violated
|
|
25
|
-
minLength = "minLength",// Minimum length constraint violated
|
|
26
|
-
maxLength = "maxLength",// Maximum length constraint violated
|
|
27
|
-
invalidNewLine = "invalidNewLine",// 'string' type items cannot include newline characters, use a 'text' type for these
|
|
28
|
-
invalidCoding = "invalidCoding",// Coding value not valid in the ValueSet
|
|
29
|
-
tsError = "tsError",// Error accessing the Terminology Server
|
|
30
|
-
maxAttachmentSize = "maxAttachmentSize",// Maximum attachment size constraint violated
|
|
31
|
-
attachmentSizeInconsistent = "attachmentSizeInconsistent",// The Size of the attachment data and the reported size are different
|
|
32
|
-
invalidAttachmentType = "invalidAttachmentType",// Attachment type constraint violated
|
|
33
|
-
displayAnswer = "displayAnswer",// Display Items should not have an answer provided
|
|
34
|
-
regex = "regex",// The answer does not match the provided regex expression
|
|
35
|
-
regexTimeout = "regexTimeout",// Evaluating the regex expression timed out
|
|
36
|
-
invalidRefValue = "invalidRefValue",// The Reference value was not a valid URL value (relative or absolute)
|
|
37
|
-
invalidRefResourceType = "invalidRefResourceType",// The Reference value did not refer to a valid FHIR resource type
|
|
38
|
-
invalidRefResourceTypeRestriction = "invalidRefResourceTypeRestriction",// The Reference value was not
|
|
39
|
-
minValueIncompatUnits = "minValueIncompatUnits",// The units provided in the Quantity cannot be converted to the min Quantity units
|
|
40
|
-
maxValueIncompatUnits = "maxValueIncompatUnits",// The units provided in the Quantity cannot be converted to the max Quantity units
|
|
41
|
-
invalidUnit = "invalidUnit",// The unit provided was not among the list selected (or did not have all the properties defined in the unit coding)
|
|
42
|
-
invalidUnitValueSet = "invalidUnitValueSet"
|
|
43
|
-
}
|
|
44
|
-
interface ValidateQuestionnaireParams {
|
|
45
|
-
questionnaire: Questionnaire;
|
|
46
|
-
questionnaireResponse: QuestionnaireResponse;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Recursively go through the questionnaireResponse and check for un-filled required qItems
|
|
50
|
-
* At the moment item.required for group items are not checked
|
|
51
|
-
*
|
|
52
|
-
* @author Sean Fong
|
|
53
|
-
*/
|
|
54
|
-
export declare function validateQuestionnaire(params: ValidateQuestionnaireParams): Record<string, OperationOutcome>;
|
|
55
|
-
interface GetInputInvalidTypeParams {
|
|
56
|
-
qItem: QuestionnaireItem;
|
|
57
|
-
input: string;
|
|
58
|
-
regexValidation?: RegexValidation;
|
|
59
|
-
minLength?: number;
|
|
60
|
-
maxLength?: number;
|
|
61
|
-
maxDecimalPlaces?: number;
|
|
62
|
-
minValue?: string | number;
|
|
63
|
-
maxValue?: string | number;
|
|
64
|
-
}
|
|
65
|
-
export declare function getInputInvalidType(getInputInvalidTypeParams: GetInputInvalidTypeParams): ValidationResult | null;
|
|
66
|
-
export {};
|
|
@@ -1,559 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2024 Commonwealth Scientific and Industrial Research
|
|
3
|
-
* Organisation (CSIRO) ABN 41 687 119 230.
|
|
4
|
-
*
|
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
* you may not use this file except in compliance with the License.
|
|
7
|
-
* You may obtain a copy of the License at
|
|
8
|
-
*
|
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
*
|
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
* See the License for the specific language governing permissions and
|
|
15
|
-
* limitations under the License.
|
|
16
|
-
*/
|
|
17
|
-
import { getQrItemsIndex, mapQItemsIndex } from './mapItem';
|
|
18
|
-
import { isHiddenByEnableWhen } from './qItem';
|
|
19
|
-
import { getDecimalPrecision, getMaxValue, getMinValue, getRegexString, getRegexValidation, getShortText } from './itemControl';
|
|
20
|
-
import { structuredDataCapture } from 'fhir-sdc-helpers';
|
|
21
|
-
import { parseDecimalStringToFloat } from './parseInputs';
|
|
22
|
-
import dayjs from 'dayjs';
|
|
23
|
-
import { questionnaireStore } from '../stores';
|
|
24
|
-
export var ValidationResult;
|
|
25
|
-
(function (ValidationResult) {
|
|
26
|
-
ValidationResult["unknown"] = "unknown";
|
|
27
|
-
ValidationResult["questionnaireNotFound"] = "questionnaireNotFound";
|
|
28
|
-
ValidationResult["questionnaireInactive"] = "questionnaireInactive";
|
|
29
|
-
ValidationResult["questionnaireDraft"] = "questionnaireDraft";
|
|
30
|
-
ValidationResult["questionnaireRetired"] = "questionnaireRetired";
|
|
31
|
-
ValidationResult["invalidLinkId"] = "invalidLinkId";
|
|
32
|
-
ValidationResult["invalidType"] = "invalidType";
|
|
33
|
-
ValidationResult["invalidAnswerType"] = "invalidAnswerType";
|
|
34
|
-
ValidationResult["invalidAnswerOption"] = "invalidAnswerOption";
|
|
35
|
-
ValidationResult["exclusiveAnswerOption"] = "exclusiveAnswerOption";
|
|
36
|
-
ValidationResult["invalidUrlValue"] = "invalidUrlValue";
|
|
37
|
-
ValidationResult["groupShouldNotHaveAnswers"] = "groupShouldNotHaveAnswers";
|
|
38
|
-
ValidationResult["required"] = "required";
|
|
39
|
-
ValidationResult["invariant"] = "invariant";
|
|
40
|
-
ValidationResult["invariantExecution"] = "invariantExecution";
|
|
41
|
-
ValidationResult["repeats"] = "repeats";
|
|
42
|
-
ValidationResult["minCount"] = "minCount";
|
|
43
|
-
ValidationResult["maxCount"] = "maxCount";
|
|
44
|
-
ValidationResult["minValue"] = "minValue";
|
|
45
|
-
ValidationResult["maxValue"] = "maxValue";
|
|
46
|
-
ValidationResult["maxDecimalPlaces"] = "maxDecimalPlaces";
|
|
47
|
-
ValidationResult["minLength"] = "minLength";
|
|
48
|
-
ValidationResult["maxLength"] = "maxLength";
|
|
49
|
-
ValidationResult["invalidNewLine"] = "invalidNewLine";
|
|
50
|
-
ValidationResult["invalidCoding"] = "invalidCoding";
|
|
51
|
-
ValidationResult["tsError"] = "tsError";
|
|
52
|
-
ValidationResult["maxAttachmentSize"] = "maxAttachmentSize";
|
|
53
|
-
ValidationResult["attachmentSizeInconsistent"] = "attachmentSizeInconsistent";
|
|
54
|
-
ValidationResult["invalidAttachmentType"] = "invalidAttachmentType";
|
|
55
|
-
ValidationResult["displayAnswer"] = "displayAnswer";
|
|
56
|
-
ValidationResult["regex"] = "regex";
|
|
57
|
-
ValidationResult["regexTimeout"] = "regexTimeout";
|
|
58
|
-
ValidationResult["invalidRefValue"] = "invalidRefValue";
|
|
59
|
-
ValidationResult["invalidRefResourceType"] = "invalidRefResourceType";
|
|
60
|
-
ValidationResult["invalidRefResourceTypeRestriction"] = "invalidRefResourceTypeRestriction";
|
|
61
|
-
ValidationResult["minValueIncompatUnits"] = "minValueIncompatUnits";
|
|
62
|
-
ValidationResult["maxValueIncompatUnits"] = "maxValueIncompatUnits";
|
|
63
|
-
ValidationResult["invalidUnit"] = "invalidUnit";
|
|
64
|
-
ValidationResult["invalidUnitValueSet"] = "invalidUnitValueSet"; // The unit provided was not in the provided valueset
|
|
65
|
-
})(ValidationResult || (ValidationResult = {}));
|
|
66
|
-
/**
|
|
67
|
-
* Recursively go through the questionnaireResponse and check for un-filled required qItems
|
|
68
|
-
* At the moment item.required for group items are not checked
|
|
69
|
-
*
|
|
70
|
-
* @author Sean Fong
|
|
71
|
-
*/
|
|
72
|
-
export function validateQuestionnaire(params) {
|
|
73
|
-
var _a;
|
|
74
|
-
const { questionnaire, questionnaireResponse } = params;
|
|
75
|
-
const enableWhenIsActivated = questionnaireStore.getState().enableWhenIsActivated;
|
|
76
|
-
const enableWhenItems = questionnaireStore.getState().enableWhenItems;
|
|
77
|
-
const enableWhenExpressions = questionnaireStore.getState().enableWhenExpressions;
|
|
78
|
-
if (!questionnaire.item || questionnaire.item.length === 0) {
|
|
79
|
-
return {};
|
|
80
|
-
}
|
|
81
|
-
if (!questionnaireResponse.item || questionnaireResponse.item.length === 0) {
|
|
82
|
-
questionnaireResponse.item = [];
|
|
83
|
-
}
|
|
84
|
-
const qItemsIndexMap = mapQItemsIndex(questionnaire);
|
|
85
|
-
const topLevelQRItemsByIndex = getQrItemsIndex(questionnaire.item, questionnaireResponse.item, qItemsIndexMap);
|
|
86
|
-
const invalidItems = {};
|
|
87
|
-
let qrItemIndex = 0;
|
|
88
|
-
for (const [index, topLevelQItem] of questionnaire.item.entries()) {
|
|
89
|
-
let repeatGroupInstances = null;
|
|
90
|
-
let topLevelQRItem = (_a = topLevelQRItemsByIndex[index]) !== null && _a !== void 0 ? _a : {
|
|
91
|
-
linkId: topLevelQItem.linkId,
|
|
92
|
-
text: topLevelQItem.text
|
|
93
|
-
};
|
|
94
|
-
// topLevelQRItem being an array means this item is a repeat group
|
|
95
|
-
const isRepeatGroup = Array.isArray(topLevelQRItem);
|
|
96
|
-
if (Array.isArray(topLevelQRItem)) {
|
|
97
|
-
repeatGroupInstances = topLevelQRItem.length;
|
|
98
|
-
topLevelQRItem = {
|
|
99
|
-
linkId: topLevelQItem.linkId,
|
|
100
|
-
text: topLevelQItem.text,
|
|
101
|
-
item: topLevelQRItem
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
const locationExpression = `QuestionnaireResponse.item`;
|
|
105
|
-
validateItemRecursive({
|
|
106
|
-
qItem: topLevelQItem,
|
|
107
|
-
qrItem: topLevelQRItem,
|
|
108
|
-
qrItemIndex,
|
|
109
|
-
locationExpression,
|
|
110
|
-
invalidItems,
|
|
111
|
-
enableWhenIsActivated,
|
|
112
|
-
enableWhenItems,
|
|
113
|
-
enableWhenExpressions,
|
|
114
|
-
isRepeatGroupInstance: false
|
|
115
|
-
});
|
|
116
|
-
// Increment qrItemIndex
|
|
117
|
-
// If it's a repeat group, increment by the number of instances so qrItemIndex is correct once we reach the next item
|
|
118
|
-
if (isRepeatGroup && typeof repeatGroupInstances === 'number') {
|
|
119
|
-
qrItemIndex += repeatGroupInstances;
|
|
120
|
-
}
|
|
121
|
-
else {
|
|
122
|
-
qrItemIndex++;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
return invalidItems;
|
|
126
|
-
}
|
|
127
|
-
function validateItemRecursive(params) {
|
|
128
|
-
var _a, _b, _c;
|
|
129
|
-
const { qItem, qrItem, qrItemIndex, invalidItems, enableWhenIsActivated, enableWhenItems, enableWhenExpressions, isRepeatGroupInstance } = params;
|
|
130
|
-
let { locationExpression } = params;
|
|
131
|
-
// If item is hidden by enableWhen, skip validation
|
|
132
|
-
if (isHiddenByEnableWhen({
|
|
133
|
-
linkId: qItem.linkId,
|
|
134
|
-
enableWhenIsActivated,
|
|
135
|
-
enableWhenItems,
|
|
136
|
-
enableWhenExpressions
|
|
137
|
-
})) {
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
140
|
-
// Validate repeat groups
|
|
141
|
-
if (qItem.type === 'group' && qItem.repeats) {
|
|
142
|
-
if (!isRepeatGroupInstance) {
|
|
143
|
-
validateRepeatGroupRecursive({
|
|
144
|
-
qItem,
|
|
145
|
-
qrItem,
|
|
146
|
-
qrItemIndex,
|
|
147
|
-
locationExpression,
|
|
148
|
-
invalidItems,
|
|
149
|
-
enableWhenIsActivated,
|
|
150
|
-
enableWhenItems,
|
|
151
|
-
enableWhenExpressions,
|
|
152
|
-
isRepeatGroupInstance: false
|
|
153
|
-
});
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
locationExpression = `${locationExpression}[${qrItemIndex}]`;
|
|
158
|
-
// Recursively validate groups with child items
|
|
159
|
-
const childQItems = qItem.item;
|
|
160
|
-
if (childQItems && childQItems.length > 0) {
|
|
161
|
-
const childQrItems = (_a = qrItem === null || qrItem === void 0 ? void 0 : qrItem.item) !== null && _a !== void 0 ? _a : [];
|
|
162
|
-
const indexMap = mapQItemsIndex(qItem);
|
|
163
|
-
const qrItemsByIndex = getQrItemsIndex(childQItems, childQrItems, indexMap);
|
|
164
|
-
// Check if group is required and has no answers
|
|
165
|
-
if (qItem.type === 'group' && qItem.required) {
|
|
166
|
-
if (!qrItem || qrItemsByIndex.length === 0) {
|
|
167
|
-
invalidItems[qItem.linkId] = createValidationOperationOutcome(ValidationResult.required, qItem, qrItem, null, locationExpression, (_b = invalidItems[qItem.linkId]) === null || _b === void 0 ? void 0 : _b.issue);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
// Loop through child items
|
|
171
|
-
for (const [index, childQItem] of childQItems.entries()) {
|
|
172
|
-
const childLocationExpression = `${locationExpression}.item`;
|
|
173
|
-
let childQRItem = (_c = qrItemsByIndex[index]) !== null && _c !== void 0 ? _c : {
|
|
174
|
-
linkId: childQItem.linkId,
|
|
175
|
-
text: childQItem.text
|
|
176
|
-
};
|
|
177
|
-
if (Array.isArray(childQRItem)) {
|
|
178
|
-
childQRItem = {
|
|
179
|
-
linkId: childQItem.linkId,
|
|
180
|
-
text: childQItem.text,
|
|
181
|
-
item: childQRItem
|
|
182
|
-
};
|
|
183
|
-
}
|
|
184
|
-
validateItemRecursive({
|
|
185
|
-
qItem: childQItem,
|
|
186
|
-
qrItem: childQRItem,
|
|
187
|
-
qrItemIndex: index,
|
|
188
|
-
locationExpression: childLocationExpression,
|
|
189
|
-
invalidItems: invalidItems,
|
|
190
|
-
enableWhenIsActivated,
|
|
191
|
-
enableWhenItems,
|
|
192
|
-
enableWhenExpressions,
|
|
193
|
-
isRepeatGroupInstance: false
|
|
194
|
-
});
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
// Validate the item, note that this can be either a group or a non-group
|
|
198
|
-
validateSingleItem(qItem, qrItem, invalidItems, locationExpression);
|
|
199
|
-
}
|
|
200
|
-
function validateRepeatGroupRecursive(params) {
|
|
201
|
-
var _a;
|
|
202
|
-
const { qItem, qrItem, qrItemIndex, locationExpression, invalidItems, enableWhenIsActivated, enableWhenItems, enableWhenExpressions } = params;
|
|
203
|
-
if (!qItem.item || qItem.item.length === 0 || !qrItem.item || qrItem.item.length === 0) {
|
|
204
|
-
return;
|
|
205
|
-
}
|
|
206
|
-
// Get repeat group answers
|
|
207
|
-
const repeatGroupAnswers = (_a = qrItem.item) !== null && _a !== void 0 ? _a : [];
|
|
208
|
-
for (const [index, repeatGroupAnswer] of repeatGroupAnswers.entries()) {
|
|
209
|
-
// Because the item is a repeat group and might have multiple answer instances, we need to increment the qItemIndex by the instanceIndex
|
|
210
|
-
const updatedQrItemIndex = qrItemIndex + index;
|
|
211
|
-
validateItemRecursive({
|
|
212
|
-
qItem: qItem,
|
|
213
|
-
qrItem: repeatGroupAnswer,
|
|
214
|
-
qrItemIndex: updatedQrItemIndex,
|
|
215
|
-
locationExpression: locationExpression,
|
|
216
|
-
invalidItems: invalidItems,
|
|
217
|
-
enableWhenIsActivated,
|
|
218
|
-
enableWhenItems,
|
|
219
|
-
enableWhenExpressions,
|
|
220
|
-
isRepeatGroupInstance: true
|
|
221
|
-
});
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
function validateSingleItem(qItem, qrItem, invalidItems, locationExpression) {
|
|
225
|
-
var _a, _b;
|
|
226
|
-
// Validate item.required first before every other validation check
|
|
227
|
-
if (qItem.type !== 'display') {
|
|
228
|
-
if (qItem.required && !qrItem.answer) {
|
|
229
|
-
invalidItems[qItem.linkId] = createValidationOperationOutcome(ValidationResult.required, qItem, qrItem, null, locationExpression, (_a = invalidItems[qItem.linkId]) === null || _a === void 0 ? void 0 : _a.issue);
|
|
230
|
-
return invalidItems;
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
// Validate regex, maxLength and minLength
|
|
234
|
-
if (qrItem.answer) {
|
|
235
|
-
for (const [i, answer] of qrItem.answer.entries()) {
|
|
236
|
-
// Your code here, you can use 'index' and 'answer' as needed
|
|
237
|
-
if (answer.valueString || answer.valueInteger || answer.valueDecimal || answer.valueUri) {
|
|
238
|
-
const invalidInputType = getInputInvalidType({
|
|
239
|
-
qItem,
|
|
240
|
-
input: getInputInString(answer),
|
|
241
|
-
regexValidation: getRegexValidation(qItem),
|
|
242
|
-
minLength: structuredDataCapture.getMinLength(qItem),
|
|
243
|
-
maxLength: qItem.maxLength,
|
|
244
|
-
maxDecimalPlaces: structuredDataCapture.getMaxDecimalPlaces(qItem),
|
|
245
|
-
minValue: getMinValue(qItem),
|
|
246
|
-
maxValue: getMaxValue(qItem)
|
|
247
|
-
});
|
|
248
|
-
if (invalidInputType) {
|
|
249
|
-
invalidItems[qItem.linkId] = createValidationOperationOutcome(invalidInputType, qItem, qrItem, i, locationExpression, (_b = invalidItems[qItem.linkId]) === null || _b === void 0 ? void 0 : _b.issue);
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
return invalidItems;
|
|
255
|
-
}
|
|
256
|
-
function getInputInString(answer) {
|
|
257
|
-
if (!answer) {
|
|
258
|
-
return '';
|
|
259
|
-
}
|
|
260
|
-
if (answer.valueString) {
|
|
261
|
-
return answer.valueString;
|
|
262
|
-
}
|
|
263
|
-
else if (answer.valueInteger) {
|
|
264
|
-
return answer.valueInteger.toString();
|
|
265
|
-
}
|
|
266
|
-
else if (answer.valueDecimal) {
|
|
267
|
-
return answer.valueDecimal.toString();
|
|
268
|
-
}
|
|
269
|
-
else if (answer.valueUri) {
|
|
270
|
-
return answer.valueUri;
|
|
271
|
-
}
|
|
272
|
-
return '';
|
|
273
|
-
}
|
|
274
|
-
export function getInputInvalidType(getInputInvalidTypeParams) {
|
|
275
|
-
var _a, _b;
|
|
276
|
-
const { qItem, input, regexValidation, minLength, maxLength, maxDecimalPlaces, minValue, maxValue } = getInputInvalidTypeParams;
|
|
277
|
-
if (input) {
|
|
278
|
-
if (regexValidation && !regexValidation.expression.test(input)) {
|
|
279
|
-
return ValidationResult.regex;
|
|
280
|
-
}
|
|
281
|
-
if (minLength && input.length < minLength) {
|
|
282
|
-
return ValidationResult.minLength;
|
|
283
|
-
}
|
|
284
|
-
if (maxLength && input.length > maxLength) {
|
|
285
|
-
return ValidationResult.maxLength;
|
|
286
|
-
}
|
|
287
|
-
if (maxDecimalPlaces) {
|
|
288
|
-
const decimalPlaces = (_b = (_a = input.split('.')[1]) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;
|
|
289
|
-
if (decimalPlaces > maxDecimalPlaces) {
|
|
290
|
-
return ValidationResult.maxDecimalPlaces;
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
if (minValue) {
|
|
294
|
-
const minValueError = checkMinValue(qItem, input, minValue);
|
|
295
|
-
if (minValueError !== null) {
|
|
296
|
-
return ValidationResult.minValue;
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
if (maxValue) {
|
|
300
|
-
const maxValueError = checkMaxValue(qItem, input, maxValue);
|
|
301
|
-
if (maxValueError !== null) {
|
|
302
|
-
return ValidationResult.maxValue;
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
return null;
|
|
307
|
-
}
|
|
308
|
-
function checkMinValue(qItem, input, minValue) {
|
|
309
|
-
switch (qItem.type) {
|
|
310
|
-
case 'integer':
|
|
311
|
-
if (typeof minValue === 'number') {
|
|
312
|
-
if (parseInt(input) < minValue) {
|
|
313
|
-
return ValidationResult.minValue;
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
break;
|
|
317
|
-
case 'decimal': {
|
|
318
|
-
const precision = getDecimalPrecision(qItem);
|
|
319
|
-
const decimalValue = precision
|
|
320
|
-
? parseDecimalStringToFloat(input, precision)
|
|
321
|
-
: parseFloat(input);
|
|
322
|
-
if (typeof minValue === 'number') {
|
|
323
|
-
if (decimalValue < minValue) {
|
|
324
|
-
return ValidationResult.minValue;
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
break;
|
|
328
|
-
}
|
|
329
|
-
case 'date':
|
|
330
|
-
if (typeof minValue === 'string') {
|
|
331
|
-
if (new Date(input) < new Date(minValue)) {
|
|
332
|
-
return ValidationResult.minValue;
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
break;
|
|
336
|
-
case 'dateTime':
|
|
337
|
-
if (typeof minValue === 'string') {
|
|
338
|
-
if (dayjs(input).isBefore(dayjs(minValue))) {
|
|
339
|
-
return ValidationResult.minValue;
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
break;
|
|
343
|
-
default:
|
|
344
|
-
return null;
|
|
345
|
-
}
|
|
346
|
-
return null;
|
|
347
|
-
}
|
|
348
|
-
function checkMaxValue(qItem, input, maxValue) {
|
|
349
|
-
switch (qItem.type) {
|
|
350
|
-
case 'integer':
|
|
351
|
-
if (typeof maxValue === 'number') {
|
|
352
|
-
if (parseInt(input) > maxValue) {
|
|
353
|
-
return ValidationResult.maxValue;
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
break;
|
|
357
|
-
case 'decimal': {
|
|
358
|
-
const precision = getDecimalPrecision(qItem);
|
|
359
|
-
const decimalValue = precision
|
|
360
|
-
? parseDecimalStringToFloat(input, precision)
|
|
361
|
-
: parseFloat(input);
|
|
362
|
-
if (typeof maxValue === 'number') {
|
|
363
|
-
if (decimalValue > maxValue) {
|
|
364
|
-
return ValidationResult.maxValue;
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
break;
|
|
368
|
-
}
|
|
369
|
-
case 'date':
|
|
370
|
-
if (typeof maxValue === 'string') {
|
|
371
|
-
if (new Date(input) > new Date(maxValue)) {
|
|
372
|
-
return ValidationResult.maxValue;
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
break;
|
|
376
|
-
case 'dateTime':
|
|
377
|
-
if (typeof maxValue === 'string') {
|
|
378
|
-
if (dayjs(input).isAfter(dayjs(maxValue))) {
|
|
379
|
-
return ValidationResult.maxValue;
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
break;
|
|
383
|
-
default:
|
|
384
|
-
return null;
|
|
385
|
-
}
|
|
386
|
-
return null;
|
|
387
|
-
}
|
|
388
|
-
function createValidationOperationOutcome(error, qItem, qrItem, answerIndex, locationExpression, existingOperationOutcomeIssues = []) {
|
|
389
|
-
return {
|
|
390
|
-
resourceType: 'OperationOutcome',
|
|
391
|
-
issue: existingOperationOutcomeIssues.concat(createValidationOperationOutcomeIssue(error, qItem, qrItem, answerIndex, locationExpression))
|
|
392
|
-
};
|
|
393
|
-
}
|
|
394
|
-
function createValidationOperationOutcomeIssue(error, qItem, qrItem, answerIndex, locationExpression) {
|
|
395
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
396
|
-
const errorCodeSystem = 'http://fhir.forms-lab.com/CodeSystem/errors';
|
|
397
|
-
let detailsText = '';
|
|
398
|
-
let fieldDisplayText = (_d = (_c = (_b = (_a = qrItem === null || qrItem === void 0 ? void 0 : qrItem.text) !== null && _a !== void 0 ? _a : getShortText(qItem)) !== null && _b !== void 0 ? _b : qItem === null || qItem === void 0 ? void 0 : qItem.text) !== null && _c !== void 0 ? _c : qItem.linkId) !== null && _d !== void 0 ? _d : qrItem.linkId;
|
|
399
|
-
if (!fieldDisplayText && fieldDisplayText.endsWith(':')) {
|
|
400
|
-
fieldDisplayText = fieldDisplayText.substring(0, fieldDisplayText.length - 1);
|
|
401
|
-
}
|
|
402
|
-
answerIndex = answerIndex !== null && answerIndex !== void 0 ? answerIndex : 0;
|
|
403
|
-
// create operationOutcomeIssue based on error
|
|
404
|
-
switch (error) {
|
|
405
|
-
case ValidationResult.required: {
|
|
406
|
-
if (qItem.type === 'group') {
|
|
407
|
-
detailsText = `${fieldDisplayText}: Mandatory group does not have answer(s)`;
|
|
408
|
-
}
|
|
409
|
-
else {
|
|
410
|
-
detailsText = `${fieldDisplayText}: Mandatory field does not have an answer`;
|
|
411
|
-
}
|
|
412
|
-
return {
|
|
413
|
-
severity: 'error',
|
|
414
|
-
code: 'required',
|
|
415
|
-
expression: [locationExpression],
|
|
416
|
-
details: {
|
|
417
|
-
coding: [
|
|
418
|
-
{
|
|
419
|
-
system: errorCodeSystem,
|
|
420
|
-
code: error,
|
|
421
|
-
display: 'Required'
|
|
422
|
-
}
|
|
423
|
-
],
|
|
424
|
-
text: detailsText
|
|
425
|
-
}
|
|
426
|
-
};
|
|
427
|
-
}
|
|
428
|
-
case ValidationResult.regex: {
|
|
429
|
-
detailsText = `${fieldDisplayText}: The value '${getInputInString((_e = qrItem.answer) === null || _e === void 0 ? void 0 : _e[answerIndex])}' does not match the defined format.`;
|
|
430
|
-
if (structuredDataCapture.getEntryFormat(qItem)) {
|
|
431
|
-
detailsText += ` ${structuredDataCapture.getEntryFormat(qItem)}`;
|
|
432
|
-
}
|
|
433
|
-
return {
|
|
434
|
-
severity: 'error',
|
|
435
|
-
code: 'invalid',
|
|
436
|
-
expression: [locationExpression],
|
|
437
|
-
details: {
|
|
438
|
-
coding: [
|
|
439
|
-
{
|
|
440
|
-
system: errorCodeSystem,
|
|
441
|
-
code: error,
|
|
442
|
-
display: 'Invalid format'
|
|
443
|
-
}
|
|
444
|
-
],
|
|
445
|
-
text: detailsText
|
|
446
|
-
},
|
|
447
|
-
diagnostics: (_f = getRegexString(qItem)) !== null && _f !== void 0 ? _f : undefined
|
|
448
|
-
};
|
|
449
|
-
}
|
|
450
|
-
case ValidationResult.minLength: {
|
|
451
|
-
detailsText = `${fieldDisplayText}: Expected the minimum value ${structuredDataCapture.getMinLength(qItem)} characters, received '${getInputInString((_g = qrItem.answer) === null || _g === void 0 ? void 0 : _g[answerIndex])}'`;
|
|
452
|
-
return {
|
|
453
|
-
severity: 'error',
|
|
454
|
-
code: 'business-rule',
|
|
455
|
-
expression: [locationExpression],
|
|
456
|
-
details: {
|
|
457
|
-
coding: [
|
|
458
|
-
{
|
|
459
|
-
system: errorCodeSystem,
|
|
460
|
-
code: error,
|
|
461
|
-
display: 'Too short'
|
|
462
|
-
}
|
|
463
|
-
],
|
|
464
|
-
text: detailsText
|
|
465
|
-
}
|
|
466
|
-
};
|
|
467
|
-
}
|
|
468
|
-
case ValidationResult.maxLength: {
|
|
469
|
-
detailsText = `${fieldDisplayText}: Exceeded maximum of ${qItem.maxLength} characters, received '${getInputInString((_h = qrItem.answer) === null || _h === void 0 ? void 0 : _h[answerIndex])}'`;
|
|
470
|
-
return {
|
|
471
|
-
severity: 'error',
|
|
472
|
-
code: 'business-rule',
|
|
473
|
-
expression: [locationExpression],
|
|
474
|
-
details: {
|
|
475
|
-
coding: [
|
|
476
|
-
{
|
|
477
|
-
system: errorCodeSystem,
|
|
478
|
-
code: error,
|
|
479
|
-
display: 'Too long'
|
|
480
|
-
}
|
|
481
|
-
],
|
|
482
|
-
text: detailsText
|
|
483
|
-
}
|
|
484
|
-
};
|
|
485
|
-
}
|
|
486
|
-
case ValidationResult.maxDecimalPlaces: {
|
|
487
|
-
detailsText = `${fieldDisplayText}: Exceeded maximum decimal places ${structuredDataCapture.getMaxDecimalPlaces(qItem)}, received '${getInputInString((_j = qrItem.answer) === null || _j === void 0 ? void 0 : _j[answerIndex])}'`;
|
|
488
|
-
return {
|
|
489
|
-
severity: 'error',
|
|
490
|
-
code: 'business-rule',
|
|
491
|
-
expression: [locationExpression],
|
|
492
|
-
details: {
|
|
493
|
-
coding: [
|
|
494
|
-
{
|
|
495
|
-
system: errorCodeSystem,
|
|
496
|
-
code: error,
|
|
497
|
-
display: 'Too precise'
|
|
498
|
-
}
|
|
499
|
-
],
|
|
500
|
-
text: detailsText
|
|
501
|
-
}
|
|
502
|
-
};
|
|
503
|
-
}
|
|
504
|
-
case ValidationResult.minValue: {
|
|
505
|
-
detailsText = `${fieldDisplayText}: Expected the minimum value ${getMinValue(qItem)}, received '${getInputInString((_k = qrItem.answer) === null || _k === void 0 ? void 0 : _k[answerIndex])}'`;
|
|
506
|
-
return {
|
|
507
|
-
severity: 'error',
|
|
508
|
-
code: 'business-rule',
|
|
509
|
-
expression: [locationExpression],
|
|
510
|
-
details: {
|
|
511
|
-
coding: [
|
|
512
|
-
{
|
|
513
|
-
system: errorCodeSystem,
|
|
514
|
-
code: error,
|
|
515
|
-
display: 'Too small'
|
|
516
|
-
}
|
|
517
|
-
],
|
|
518
|
-
text: detailsText
|
|
519
|
-
}
|
|
520
|
-
};
|
|
521
|
-
}
|
|
522
|
-
case ValidationResult.maxValue: {
|
|
523
|
-
detailsText = `${fieldDisplayText}: Exceeded the maximum value ${getMaxValue(qItem)}, received '${getInputInString((_l = qrItem.answer) === null || _l === void 0 ? void 0 : _l[answerIndex])}'`;
|
|
524
|
-
return {
|
|
525
|
-
severity: 'error',
|
|
526
|
-
code: 'business-rule',
|
|
527
|
-
expression: [locationExpression],
|
|
528
|
-
details: {
|
|
529
|
-
coding: [
|
|
530
|
-
{
|
|
531
|
-
system: errorCodeSystem,
|
|
532
|
-
code: error,
|
|
533
|
-
display: 'Too big'
|
|
534
|
-
}
|
|
535
|
-
],
|
|
536
|
-
text: detailsText
|
|
537
|
-
}
|
|
538
|
-
};
|
|
539
|
-
}
|
|
540
|
-
// mark unknown issues as fatal
|
|
541
|
-
default: {
|
|
542
|
-
return {
|
|
543
|
-
severity: 'error',
|
|
544
|
-
code: 'unknown',
|
|
545
|
-
expression: [locationExpression],
|
|
546
|
-
details: {
|
|
547
|
-
coding: [
|
|
548
|
-
{
|
|
549
|
-
system: errorCodeSystem,
|
|
550
|
-
code: 'unknown',
|
|
551
|
-
display: 'Unknown'
|
|
552
|
-
}
|
|
553
|
-
]
|
|
554
|
-
}
|
|
555
|
-
};
|
|
556
|
-
}
|
|
557
|
-
}
|
|
558
|
-
}
|
|
559
|
-
//# sourceMappingURL=validateQuestionnaire.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validateQuestionnaire.js","sourceRoot":"","sources":["../../src/utils/validateQuestionnaire.ts"],"names":[],"mappings":"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"}
|