@aehrc/smart-forms-renderer 1.0.0-alpha.21 → 1.0.0-alpha.22
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/Renderer/BaseRenderer.js +6 -4
- package/lib/components/Renderer/BaseRenderer.js.map +1 -1
- package/lib/components/Renderer/FormBodyTabbed.js +1 -1
- package/lib/components/Renderer/FormBodyTabbed.js.map +1 -1
- package/lib/hooks/useValidationFeedback.js +18 -1
- package/lib/hooks/useValidationFeedback.js.map +1 -1
- package/lib/interfaces/questionnaireStore.interface.d.ts +2 -0
- package/lib/interfaces/targetConstraint.interface.d.ts +30 -0
- package/lib/interfaces/targetConstraint.interface.js +2 -0
- package/lib/interfaces/targetConstraint.interface.js.map +1 -0
- package/lib/stores/questionnaireResponseStore.d.ts +1 -1
- package/lib/stores/questionnaireResponseStore.js +7 -16
- package/lib/stores/questionnaireResponseStore.js.map +1 -1
- package/lib/stores/questionnaireStore.d.ts +7 -0
- package/lib/stores/questionnaireStore.js +17 -3
- package/lib/stores/questionnaireStore.js.map +1 -1
- package/lib/utils/fhirpath.d.ts +4 -1
- package/lib/utils/fhirpath.js +14 -6
- package/lib/utils/fhirpath.js.map +1 -1
- package/lib/utils/initialise.d.ts +3 -0
- package/lib/utils/initialise.js +14 -2
- package/lib/utils/initialise.js.map +1 -1
- package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js +4 -0
- package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js.map +1 -1
- package/lib/utils/questionnaireStoreUtils/extractTargetConstraint.d.ts +4 -0
- package/lib/utils/questionnaireStoreUtils/extractTargetConstraint.js +39 -0
- package/lib/utils/questionnaireStoreUtils/extractTargetConstraint.js.map +1 -0
- package/lib/utils/targetConstraint.d.ts +22 -0
- package/lib/utils/targetConstraint.js +179 -0
- package/lib/utils/targetConstraint.js.map +1 -0
- package/lib/utils/validate.d.ts +73 -0
- package/lib/utils/validate.js +736 -0
- package/lib/utils/validate.js.map +1 -0
- package/lib/utils/validateQuestionnaire.d.ts +40 -40
- package/lib/utils/validateQuestionnaire.js +1 -0
- package/lib/utils/validateQuestionnaire.js.map +1 -1
- package/lib/utils/validateQuestionnaireResponse.d.ts +71 -0
- package/lib/utils/validateQuestionnaireResponse.js +710 -0
- package/lib/utils/validateQuestionnaireResponse.js.map +1 -0
- package/lib/utils/validateTargetConstraint.d.ts +1 -0
- package/lib/utils/validateTargetConstraint.js +34 -0
- package/lib/utils/validateTargetConstraint.js.map +1 -0
- package/package.json +1 -1
- package/src/components/Renderer/BaseRenderer.tsx +6 -4
- package/src/components/Renderer/FormBodyTabbed.tsx +1 -1
- package/src/hooks/useValidationFeedback.ts +19 -1
- package/src/interfaces/questionnaireStore.interface.ts +2 -0
- package/src/interfaces/targetConstraint.interface.ts +36 -0
- package/src/stores/questionnaireResponseStore.ts +11 -17
- package/src/stores/questionnaireStore.ts +26 -0
- package/src/utils/fhirpath.ts +30 -5
- package/src/utils/initialise.ts +18 -1
- package/src/utils/questionnaireStoreUtils/createQuestionaireModel.ts +6 -0
- package/src/utils/questionnaireStoreUtils/extractTargetConstraint.ts +71 -0
- package/src/utils/targetConstraint.ts +247 -0
- package/src/utils/{validateQuestionnaire.ts → validate.ts} +116 -46
|
@@ -43,15 +43,17 @@ function BaseRenderer() {
|
|
|
43
43
|
function handleTopLevelQRItemSingleChange(newTopLevelQRItem) {
|
|
44
44
|
const updatedResponse = structuredClone(updatableResponse);
|
|
45
45
|
updateQrItemsInGroup(newTopLevelQRItem, null, updatedResponse, qItemsIndexMap);
|
|
46
|
-
updateExpressions(updatedResponse)
|
|
47
|
-
|
|
46
|
+
updateExpressions(updatedResponse).then(() => {
|
|
47
|
+
validateQuestionnaire(sourceQuestionnaire, updatedResponse);
|
|
48
|
+
});
|
|
48
49
|
updateResponse(updatedResponse);
|
|
49
50
|
}
|
|
50
51
|
function handleTopLevelQRItemMultipleChange(newTopLevelQRItems) {
|
|
51
52
|
const updatedResponse = structuredClone(updatableResponse);
|
|
52
53
|
updateQrItemsInGroup(null, newTopLevelQRItems, updatedResponse, qItemsIndexMap);
|
|
53
|
-
updateExpressions(updatedResponse)
|
|
54
|
-
|
|
54
|
+
updateExpressions(updatedResponse).then(() => {
|
|
55
|
+
validateQuestionnaire(sourceQuestionnaire, updatedResponse);
|
|
56
|
+
});
|
|
55
57
|
updateResponse(updatedResponse);
|
|
56
58
|
}
|
|
57
59
|
const topLevelQItems = sourceQuestionnaire.item;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseRenderer.js","sourceRoot":"","sources":["../../../src/components/Renderer/BaseRenderer.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,IAAI,MAAM,oBAAoB,CAAC;AACtC,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C;;;;;;GAMG;AACH,SAAS,YAAY;;IACnB,MAAM,mBAAmB,GAAG,qBAAqB,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC;IAC5E,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;IACxE,MAAM,QAAQ,GAAG,qBAAqB,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IAEtD,MAAM,WAAW,GAAG,6BAA6B,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IAC5D,MAAM,iBAAiB,GAAG,6BAA6B,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;IAChF,MAAM,qBAAqB,GAAG,6BAA6B,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;IACxF,MAAM,cAAc,GAAG,6BAA6B,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;IAE1E,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,mBAAmB,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAEjG,SAAS,gCAAgC,CAAC,iBAA4C;QACpF,MAAM,eAAe,GAA0B,eAAe,CAAC,iBAAiB,CAAC,CAAC;QAElF,oBAAoB,CAAC,iBAAiB,EAAE,IAAI,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;QAE/E,iBAAiB,CAAC,eAAe,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"BaseRenderer.js","sourceRoot":"","sources":["../../../src/components/Renderer/BaseRenderer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -44,7 +44,7 @@ function FormBodyTabbed(props) {
|
|
|
44
44
|
? { sx: { width: tabListFixedWidth, flexShrink: 0 } }
|
|
45
45
|
: { xs: 12, md: 3, lg: 2.75 };
|
|
46
46
|
const qItemTabPanelProps = typeof tabListFixedWidth === 'number' ? { sx: { flexGrow: 1 } } : { xs: 12, md: 9, lg: 9.25 };
|
|
47
|
-
return (React.createElement(Grid, { container: true, spacing: 1.5 },
|
|
47
|
+
return (React.createElement(Grid, { container: true, spacing: 1.5, sx: { flexWrap: 'nowrap' } },
|
|
48
48
|
React.createElement(TabContext, { value: currentTab.toString() },
|
|
49
49
|
React.createElement(Grid, Object.assign({ item: true }, tabListWrapperProps),
|
|
50
50
|
React.createElement(FormBodyTabListWrapper, { topLevelItems: qItems, currentTabIndex: currentTab, tabs: tabs })),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormBodyTabbed.js","sourceRoot":"","sources":["../../../src/components/Renderer/FormBodyTabbed.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,IAAI,MAAM,oBAAoB,CAAC;AAEtC,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAC7C,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,SAAS,MAAM,uCAAuC,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,sBAAsB,MAAM,gCAAgC,CAAC;AAKpE,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAS9E,SAAS,cAAc,CAAC,KAA0B;IAChD,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAElF,MAAM,IAAI,GAAG,qBAAqB,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9C,MAAM,UAAU,GAAG,qBAAqB,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;IAE/D,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;IAE1E,MAAM,QAAQ,GAA2B,OAAO,CAC9C,GAAG,EAAE,CAAC,cAAc,CAAC,aAAa,CAAC,EACnC,CAAC,aAAa,CAAC,CAChB,CAAC;IAEF,MAAM,qBAAqB,GAAG,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAElF,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC;IAClC,MAAM,OAAO,GAAG,qBAAqB,CAAC,IAAI,CAAC;IAE3C,SAAS,mBAAmB,CAAC,MAAiC;QAC5D,oBAAoB,CAAC,MAAM,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,CAAC,CAAC;QACpE,cAAc,CAAC,qBAAqB,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO,gEAAwB,CAAC;IAClC,CAAC;IAED,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAElE,MAAM,mBAAmB,GACvB,OAAO,iBAAiB,KAAK,QAAQ;QACnC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE;QACrD,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IAElC,MAAM,kBAAkB,GACtB,OAAO,iBAAiB,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IAEhG,OAAO,CACL,oBAAC,IAAI,IAAC,SAAS,QAAC,OAAO,EAAE,GAAG;
|
|
1
|
+
{"version":3,"file":"FormBodyTabbed.js","sourceRoot":"","sources":["../../../src/components/Renderer/FormBodyTabbed.tsx"],"names":[],"mappings":"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"}
|
|
@@ -14,10 +14,27 @@
|
|
|
14
14
|
* See the License for the specific language governing permissions and
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
|
-
import { getInputInvalidType, ValidationResult } from '../utils/
|
|
17
|
+
import { getInputInvalidType, ValidationResult } from '../utils/validate';
|
|
18
18
|
import { getMaxQuantityValue, getMaxQuantityValueFeedback, getMaxValue, getMaxValueFeedback, getMinQuantityValue, getMinQuantityValueFeedback, getMinValue, getMinValueFeedback, getRegexValidation } from '../utils/itemControl';
|
|
19
19
|
import { structuredDataCapture } from 'fhir-sdc-helpers';
|
|
20
|
+
import { useQuestionnaireStore } from '../stores';
|
|
20
21
|
function useValidationFeedback(qItem, input) {
|
|
22
|
+
// Target constraint-based validation
|
|
23
|
+
const targetConstraints = useQuestionnaireStore.use.targetConstraints();
|
|
24
|
+
const targetConstraintLinkIds = useQuestionnaireStore.use.targetConstraintLinkIds();
|
|
25
|
+
const targetConstraintKeys = targetConstraintLinkIds[qItem.linkId];
|
|
26
|
+
if (targetConstraintKeys && targetConstraintKeys.length > 0) {
|
|
27
|
+
for (const targetConstraintKey of targetConstraintKeys) {
|
|
28
|
+
const targetConstraint = targetConstraints[targetConstraintKey];
|
|
29
|
+
if (targetConstraint) {
|
|
30
|
+
const { isEnabled, human } = targetConstraint;
|
|
31
|
+
if (isEnabled) {
|
|
32
|
+
return human;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Extension-based validation
|
|
21
38
|
const regexValidation = getRegexValidation(qItem);
|
|
22
39
|
const minLength = structuredDataCapture.getMinLength(qItem);
|
|
23
40
|
const maxLength = qItem.maxLength;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useValidationFeedback.js","sourceRoot":"","sources":["../../src/hooks/useValidationFeedback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"useValidationFeedback.js","sourceRoot":"","sources":["../../src/hooks/useValidationFeedback.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ import type { CalculatedExpression } from './calculatedExpression.interface';
|
|
|
7
7
|
import type { AnswerExpression } from './answerExpression.interface';
|
|
8
8
|
import type { Coding, QuestionnaireItemAnswerOption } from 'fhir/r4';
|
|
9
9
|
import type { InitialExpression } from './initialExpression.interface';
|
|
10
|
+
import type { TargetConstraint } from './targetConstraint.interface';
|
|
10
11
|
export interface QuestionnaireModel {
|
|
11
12
|
itemTypes: Record<string, string>;
|
|
12
13
|
itemPreferredTerminologyServers: Record<string, string>;
|
|
@@ -14,6 +15,7 @@ export interface QuestionnaireModel {
|
|
|
14
15
|
pages: Pages;
|
|
15
16
|
variables: Variables;
|
|
16
17
|
launchContexts: Record<string, LaunchContext>;
|
|
18
|
+
targetConstraints: Record<string, TargetConstraint>;
|
|
17
19
|
enableWhenItems: EnableWhenItems;
|
|
18
20
|
enableWhenExpressions: EnableWhenExpressions;
|
|
19
21
|
calculatedExpressions: Record<string, CalculatedExpression[]>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Expression, Extension } from 'fhir/r4';
|
|
2
|
+
export interface TargetConstraint {
|
|
3
|
+
key: string;
|
|
4
|
+
severityCode: 'error' | 'warning';
|
|
5
|
+
valueExpression: Expression;
|
|
6
|
+
human: string;
|
|
7
|
+
location?: string;
|
|
8
|
+
linkId?: string;
|
|
9
|
+
isEnabled?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface TargetConstraintKey extends Extension {
|
|
12
|
+
url: 'key';
|
|
13
|
+
valueId: string;
|
|
14
|
+
}
|
|
15
|
+
export interface TargetConstraintSeverity extends Extension {
|
|
16
|
+
url: 'severity';
|
|
17
|
+
valueCode: 'error' | 'warning';
|
|
18
|
+
}
|
|
19
|
+
export interface TargetConstraintExpression extends Extension {
|
|
20
|
+
url: 'expression';
|
|
21
|
+
valueExpression: Expression;
|
|
22
|
+
}
|
|
23
|
+
export interface TargetConstraintHuman extends Extension {
|
|
24
|
+
url: 'human';
|
|
25
|
+
valueString: string;
|
|
26
|
+
}
|
|
27
|
+
export interface TargetConstraintLocation extends Extension {
|
|
28
|
+
url: 'location';
|
|
29
|
+
valueString: string;
|
|
30
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"targetConstraint.interface.js","sourceRoot":"","sources":["../../src/interfaces/targetConstraint.interface.ts"],"names":[],"mappings":""}
|
|
@@ -12,7 +12,7 @@ import type { Diff } from 'deep-diff';
|
|
|
12
12
|
* @property formChangesHistory - Array of form changes history in the form of deep-diff objects
|
|
13
13
|
* @property invalidItems - Key-value pair of invalid items based on defined value constraints in the questionnaire `Record<linkId, OperationOutcome>`
|
|
14
14
|
* @property responseIsValid - Whether there are any invalid items in the response
|
|
15
|
-
* @property
|
|
15
|
+
* @property validateQuestionnaireResponse - Used to validate the questionnaire response based on the questionnaire
|
|
16
16
|
* @property buildSourceResponse - Used to build the source response when the form is first initialised
|
|
17
17
|
* @property setUpdatableResponseAsPopulated - Used to set a pre-populated response as the current response
|
|
18
18
|
* @property updateResponse - Used to update the current response
|
|
@@ -18,7 +18,7 @@ import { createStore } from 'zustand/vanilla';
|
|
|
18
18
|
import { emptyResponse } from '../utils/emptyResource';
|
|
19
19
|
import { diff } from 'deep-diff';
|
|
20
20
|
import { createSelectors } from './selector';
|
|
21
|
-
import {
|
|
21
|
+
import { validateForm, validateQuestionnaireResponse } from '../utils/validate';
|
|
22
22
|
import { questionnaireStore } from './questionnaireStore';
|
|
23
23
|
import { createQuestionnaireResponseItemMap } from '../utils/questionnaireResponseStoreUtils/updatableResponseItems';
|
|
24
24
|
import { generateUniqueId } from '../utils/extractObservation';
|
|
@@ -38,10 +38,7 @@ export const questionnaireResponseStore = createStore()((set, get) => ({
|
|
|
38
38
|
invalidItems: {},
|
|
39
39
|
responseIsValid: true,
|
|
40
40
|
validateQuestionnaire: (questionnaire, updatedResponse) => {
|
|
41
|
-
const updatedInvalidItems =
|
|
42
|
-
questionnaire,
|
|
43
|
-
questionnaireResponse: updatedResponse
|
|
44
|
-
});
|
|
41
|
+
const updatedInvalidItems = validateForm(questionnaire, updatedResponse);
|
|
45
42
|
set(() => ({
|
|
46
43
|
invalidItems: updatedInvalidItems,
|
|
47
44
|
responseIsValid: Object.keys(updatedInvalidItems).length === 0
|
|
@@ -49,10 +46,7 @@ export const questionnaireResponseStore = createStore()((set, get) => ({
|
|
|
49
46
|
},
|
|
50
47
|
buildSourceResponse: (questionnaireResponse) => {
|
|
51
48
|
const sourceQuestionnaire = questionnaireStore.getState().sourceQuestionnaire;
|
|
52
|
-
const initialInvalidItems =
|
|
53
|
-
questionnaire: sourceQuestionnaire,
|
|
54
|
-
questionnaireResponse: questionnaireResponse
|
|
55
|
-
});
|
|
49
|
+
const initialInvalidItems = validateForm(sourceQuestionnaire, questionnaireResponse);
|
|
56
50
|
set(() => ({
|
|
57
51
|
key: generateUniqueId('QR'),
|
|
58
52
|
sourceResponse: questionnaireResponse,
|
|
@@ -66,10 +60,7 @@ export const questionnaireResponseStore = createStore()((set, get) => ({
|
|
|
66
60
|
var _a;
|
|
67
61
|
const sourceQuestionnaire = questionnaireStore.getState().sourceQuestionnaire;
|
|
68
62
|
const formChanges = (_a = diff(get().updatableResponse, populatedResponse)) !== null && _a !== void 0 ? _a : null;
|
|
69
|
-
const updatedInvalidItems =
|
|
70
|
-
questionnaire: sourceQuestionnaire,
|
|
71
|
-
questionnaireResponse: populatedResponse
|
|
72
|
-
});
|
|
63
|
+
const updatedInvalidItems = validateForm(sourceQuestionnaire, populatedResponse);
|
|
73
64
|
set(() => ({
|
|
74
65
|
updatableResponse: populatedResponse,
|
|
75
66
|
updatableResponseItems: createQuestionnaireResponseItemMap(populatedResponse),
|
|
@@ -82,7 +73,7 @@ export const questionnaireResponseStore = createStore()((set, get) => ({
|
|
|
82
73
|
var _a;
|
|
83
74
|
const sourceQuestionnaire = questionnaireStore.getState().sourceQuestionnaire;
|
|
84
75
|
const formChanges = (_a = diff(get().updatableResponse, updatedResponse)) !== null && _a !== void 0 ? _a : null;
|
|
85
|
-
const updatedInvalidItems =
|
|
76
|
+
const updatedInvalidItems = validateQuestionnaireResponse({
|
|
86
77
|
questionnaire: sourceQuestionnaire,
|
|
87
78
|
questionnaireResponse: updatedResponse
|
|
88
79
|
});
|
|
@@ -96,7 +87,7 @@ export const questionnaireResponseStore = createStore()((set, get) => ({
|
|
|
96
87
|
},
|
|
97
88
|
setUpdatableResponseAsSaved: (savedResponse) => {
|
|
98
89
|
const sourceQuestionnaire = questionnaireStore.getState().sourceQuestionnaire;
|
|
99
|
-
const updatedInvalidItems =
|
|
90
|
+
const updatedInvalidItems = validateQuestionnaireResponse({
|
|
100
91
|
questionnaire: sourceQuestionnaire,
|
|
101
92
|
questionnaireResponse: savedResponse
|
|
102
93
|
});
|
|
@@ -112,7 +103,7 @@ export const questionnaireResponseStore = createStore()((set, get) => ({
|
|
|
112
103
|
},
|
|
113
104
|
setUpdatableResponseAsEmpty: (clearedResponse) => {
|
|
114
105
|
const sourceQuestionnaire = questionnaireStore.getState().sourceQuestionnaire;
|
|
115
|
-
const updatedInvalidItems =
|
|
106
|
+
const updatedInvalidItems = validateQuestionnaireResponse({
|
|
116
107
|
questionnaire: sourceQuestionnaire,
|
|
117
108
|
questionnaireResponse: clearedResponse
|
|
118
109
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"questionnaireResponseStore.js","sourceRoot":"","sources":["../../src/stores/questionnaireResponseStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAO9C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"questionnaireResponseStore.js","sourceRoot":"","sources":["../../src/stores/questionnaireResponseStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ import type { Pages } from '../interfaces/page.interface';
|
|
|
9
9
|
import type { InitialExpression } from '../interfaces/initialExpression.interface';
|
|
10
10
|
import type { QItemOverrideComponentProps, SdcUiOverrideComponentProps } from '../interfaces';
|
|
11
11
|
import type { ComponentType } from 'react';
|
|
12
|
+
import type { TargetConstraint } from '../interfaces/targetConstraint.interface';
|
|
12
13
|
/**
|
|
13
14
|
* QuestionnaireStore properties and methods
|
|
14
15
|
* Properties can be accessed for fine-grain details.
|
|
@@ -23,6 +24,8 @@ import type { ComponentType } from 'react';
|
|
|
23
24
|
* @property currentPageIndex - Index of the current page
|
|
24
25
|
* @property variables - Questionnaire variables object containing FHIRPath and x-fhir-query variables
|
|
25
26
|
* @property launchContexts - Key-value pair of launch contexts `Record<launch context name, launch context properties>`
|
|
27
|
+
* @property targetConstraints - Key-value pair of target constraints `Record<target constraint key, target constraint properties>`
|
|
28
|
+
* @property targetConstraintLinkIds - Key-value pair of linkIds against target constraint key(s) `Record<linkId, target constraint keys>`
|
|
26
29
|
* @property enableWhenItems - EnableWhenItems object containing enableWhen items and their linked questions
|
|
27
30
|
* @property enableWhenLinkedQuestions - Key-value pair of linked questions to enableWhen items `Record<linkId, linkIds of linked questions>`
|
|
28
31
|
* @property enableWhenIsActivated - Flag to turn enableWhen checks on/off
|
|
@@ -67,6 +70,8 @@ export interface QuestionnaireStoreType {
|
|
|
67
70
|
currentPageIndex: number;
|
|
68
71
|
variables: Variables;
|
|
69
72
|
launchContexts: Record<string, LaunchContext>;
|
|
73
|
+
targetConstraints: Record<string, TargetConstraint>;
|
|
74
|
+
targetConstraintLinkIds: Record<string, string[]>;
|
|
70
75
|
enableWhenItems: EnableWhenItems;
|
|
71
76
|
enableWhenLinkedQuestions: Record<string, string[]>;
|
|
72
77
|
enableWhenIsActivated: boolean;
|
|
@@ -127,6 +132,8 @@ export declare const useQuestionnaireStore: import("zustand/vanilla").StoreApi<Q
|
|
|
127
132
|
currentPageIndex: () => number;
|
|
128
133
|
variables: () => Variables;
|
|
129
134
|
launchContexts: () => Record<string, LaunchContext>;
|
|
135
|
+
targetConstraints: () => Record<string, TargetConstraint>;
|
|
136
|
+
targetConstraintLinkIds: () => Record<string, string[]>;
|
|
130
137
|
enableWhenItems: () => EnableWhenItems;
|
|
131
138
|
enableWhenLinkedQuestions: () => Record<string, string[]>;
|
|
132
139
|
enableWhenIsActivated: () => boolean;
|
|
@@ -36,6 +36,7 @@ import { mutateRepeatEnableWhenExpressionInstances } from '../utils/enableWhenEx
|
|
|
36
36
|
import { questionnaireResponseStore } from './questionnaireResponseStore';
|
|
37
37
|
import { createQuestionnaireResponseItemMap } from '../utils/questionnaireResponseStoreUtils/updatableResponseItems';
|
|
38
38
|
import { insertCompleteAnswerOptionsIntoQuestionnaire } from '../utils/questionnaireStoreUtils/insertAnswerOptions';
|
|
39
|
+
import { readTargetConstraintLocationLinkIds } from '../utils/targetConstraint';
|
|
39
40
|
/**
|
|
40
41
|
* Questionnaire state management store which contains all properties and methods to manage the state of the questionnaire.
|
|
41
42
|
* This is the vanilla version of the store which can be used in non-React environments.
|
|
@@ -53,6 +54,8 @@ export const questionnaireStore = createStore()((set, get) => ({
|
|
|
53
54
|
currentPageIndex: 0,
|
|
54
55
|
variables: { fhirPathVariables: {}, xFhirQueryVariables: {} },
|
|
55
56
|
launchContexts: {},
|
|
57
|
+
targetConstraints: {},
|
|
58
|
+
targetConstraintLinkIds: {},
|
|
56
59
|
calculatedExpressions: {},
|
|
57
60
|
initialExpressions: {},
|
|
58
61
|
enableWhenExpressions: { singleExpressions: {}, repeatExpressions: {} },
|
|
@@ -80,8 +83,9 @@ export const questionnaireStore = createStore()((set, get) => ({
|
|
|
80
83
|
const fhirPathContext = (_a = get().fhirPathContext) !== null && _a !== void 0 ? _a : questionnaireModel.fhirPathContext;
|
|
81
84
|
const fhirPathTerminologyCache = (_b = get().fhirPathTerminologyCache) !== null && _b !== void 0 ? _b : questionnaireModel.fhirPathTerminologyCache;
|
|
82
85
|
// Initialise form with questionnaire response and properties in questionnaire model
|
|
83
|
-
const { initialEnableWhenItems, initialEnableWhenLinkedQuestions, initialEnableWhenExpressions, initialCalculatedExpressions, firstVisibleTab, firstVisiblePage, updatedFhirPathContext, fhirPathTerminologyCache: updatedFhirPathTerminologyCache } = yield initialiseFormFromResponse({
|
|
86
|
+
const { initialTargetConstraints, initialEnableWhenItems, initialEnableWhenLinkedQuestions, initialEnableWhenExpressions, initialCalculatedExpressions, firstVisibleTab, firstVisiblePage, updatedFhirPathContext, fhirPathTerminologyCache: updatedFhirPathTerminologyCache } = yield initialiseFormFromResponse({
|
|
84
87
|
questionnaireResponse,
|
|
88
|
+
targetConstraints: questionnaireModel.targetConstraints,
|
|
85
89
|
enableWhenItems: questionnaireModel.enableWhenItems,
|
|
86
90
|
enableWhenExpressions: questionnaireModel.enableWhenExpressions,
|
|
87
91
|
calculatedExpressions: questionnaireModel.calculatedExpressions,
|
|
@@ -92,6 +96,8 @@ export const questionnaireStore = createStore()((set, get) => ({
|
|
|
92
96
|
fhirPathTerminologyCache: fhirPathTerminologyCache,
|
|
93
97
|
terminologyServerUrl: terminologyServerUrl
|
|
94
98
|
});
|
|
99
|
+
// Read target constraint locations
|
|
100
|
+
const targetConstraintLinkIds = readTargetConstraintLocationLinkIds(questionnaire, initialTargetConstraints);
|
|
95
101
|
set({
|
|
96
102
|
sourceQuestionnaire: questionnaire,
|
|
97
103
|
itemTypes: questionnaireModel.itemTypes,
|
|
@@ -102,6 +108,8 @@ export const questionnaireStore = createStore()((set, get) => ({
|
|
|
102
108
|
currentPageIndex: firstVisiblePage,
|
|
103
109
|
variables: questionnaireModel.variables,
|
|
104
110
|
launchContexts: questionnaireModel.launchContexts,
|
|
111
|
+
targetConstraints: initialTargetConstraints,
|
|
112
|
+
targetConstraintLinkIds: targetConstraintLinkIds,
|
|
105
113
|
enableWhenItems: initialEnableWhenItems,
|
|
106
114
|
enableWhenLinkedQuestions: initialEnableWhenLinkedQuestions,
|
|
107
115
|
enableWhenExpressions: initialEnableWhenExpressions,
|
|
@@ -127,6 +135,8 @@ export const questionnaireStore = createStore()((set, get) => ({
|
|
|
127
135
|
currentPageIndex: 0,
|
|
128
136
|
variables: { fhirPathVariables: {}, xFhirQueryVariables: {} },
|
|
129
137
|
launchContexts: {},
|
|
138
|
+
targetConstraints: {},
|
|
139
|
+
targetConstraintLinkIds: {},
|
|
130
140
|
enableWhenItems: { singleItems: {}, repeatItems: {} },
|
|
131
141
|
enableWhenLinkedQuestions: {},
|
|
132
142
|
enableWhenExpressions: { singleExpressions: {}, repeatExpressions: {} },
|
|
@@ -192,9 +202,10 @@ export const questionnaireStore = createStore()((set, get) => ({
|
|
|
192
202
|
toggleEnableWhenActivation: (isActivated) => set(() => ({ enableWhenIsActivated: isActivated })),
|
|
193
203
|
updateExpressions: (updatedResponse) => __awaiter(void 0, void 0, void 0, function* () {
|
|
194
204
|
const updatedResponseItemMap = createQuestionnaireResponseItemMap(updatedResponse);
|
|
195
|
-
const { isUpdated, updatedEnableWhenExpressions, updatedCalculatedExpressions, updatedFhirPathContext, fhirPathTerminologyCache } = yield evaluateUpdatedExpressions({
|
|
205
|
+
const { isUpdated, updatedTargetConstraints, updatedEnableWhenExpressions, updatedCalculatedExpressions, updatedFhirPathContext, fhirPathTerminologyCache } = yield evaluateUpdatedExpressions({
|
|
196
206
|
updatedResponse,
|
|
197
207
|
updatedResponseItemMap,
|
|
208
|
+
targetConstraints: get().targetConstraints,
|
|
198
209
|
enableWhenExpressions: get().enableWhenExpressions,
|
|
199
210
|
calculatedExpressions: get().calculatedExpressions,
|
|
200
211
|
variablesFhirPath: get().variables.fhirPathVariables,
|
|
@@ -204,6 +215,7 @@ export const questionnaireStore = createStore()((set, get) => ({
|
|
|
204
215
|
});
|
|
205
216
|
if (isUpdated) {
|
|
206
217
|
set(() => ({
|
|
218
|
+
targetConstraints: updatedTargetConstraints,
|
|
207
219
|
enableWhenExpressions: updatedEnableWhenExpressions,
|
|
208
220
|
calculatedExpressions: updatedCalculatedExpressions,
|
|
209
221
|
fhirPathContext: updatedFhirPathContext,
|
|
@@ -234,8 +246,9 @@ export const questionnaireStore = createStore()((set, get) => ({
|
|
|
234
246
|
let updatedFhirPathContext = evaluateInitialCalculatedExpressionsResult.updatedFhirPathContext;
|
|
235
247
|
let fhirPathTerminologyCache = evaluateInitialCalculatedExpressionsResult.fhirPathTerminologyCache;
|
|
236
248
|
const updatedResponse = initialiseCalculatedExpressionValues(get().sourceQuestionnaire, populatedResponse, initialCalculatedExpressions);
|
|
237
|
-
const { initialEnableWhenItems, initialEnableWhenLinkedQuestions, initialEnableWhenExpressions, firstVisibleTab, firstVisiblePage } = yield initialiseFormFromResponse({
|
|
249
|
+
const { initialTargetConstraints, initialEnableWhenItems, initialEnableWhenLinkedQuestions, initialEnableWhenExpressions, firstVisibleTab, firstVisiblePage } = yield initialiseFormFromResponse({
|
|
238
250
|
questionnaireResponse: updatedResponse,
|
|
251
|
+
targetConstraints: get().targetConstraints,
|
|
239
252
|
enableWhenItems: get().enableWhenItems,
|
|
240
253
|
enableWhenExpressions: get().enableWhenExpressions,
|
|
241
254
|
calculatedExpressions: initialCalculatedExpressions,
|
|
@@ -249,6 +262,7 @@ export const questionnaireStore = createStore()((set, get) => ({
|
|
|
249
262
|
updatedFhirPathContext = evaluateInitialCalculatedExpressionsResult.updatedFhirPathContext;
|
|
250
263
|
fhirPathTerminologyCache = evaluateInitialCalculatedExpressionsResult.fhirPathTerminologyCache;
|
|
251
264
|
set(() => ({
|
|
265
|
+
targetConstraints: initialTargetConstraints,
|
|
252
266
|
enableWhenItems: initialEnableWhenItems,
|
|
253
267
|
enableWhenLinkedQuestions: initialEnableWhenLinkedQuestions,
|
|
254
268
|
enableWhenExpressions: initialEnableWhenExpressions,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"questionnaireStore.js","sourceRoot":"","sources":["../../src/stores/questionnaireStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;;;;;;;;;;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAc9C,OAAO,EACL,mCAAmC,EACnC,0BAA0B,EAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EACL,oCAAoC,EACpC,oCAAoC,EACrC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,wBAAwB,EAAE,MAAM,0DAA0D,CAAC;AACpG,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,yCAAyC,EAAE,MAAM,+BAA+B,CAAC;AAC1F,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,kCAAkC,EAAE,MAAM,iEAAiE,CAAC;AACrH,OAAO,EAAE,4CAA4C,EAAE,MAAM,sDAAsD,CAAC;
|
|
1
|
+
{"version":3,"file":"questionnaireStore.js","sourceRoot":"","sources":["../../src/stores/questionnaireStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;;;;;;;;;;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAc9C,OAAO,EACL,mCAAmC,EACnC,0BAA0B,EAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EACL,oCAAoC,EACpC,oCAAoC,EACrC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,wBAAwB,EAAE,MAAM,0DAA0D,CAAC;AACpG,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,yCAAyC,EAAE,MAAM,+BAA+B,CAAC;AAC1F,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,kCAAkC,EAAE,MAAM,iEAAiE,CAAC;AACrH,OAAO,EAAE,4CAA4C,EAAE,MAAM,sDAAsD,CAAC;AAKpH,OAAO,EAAE,mCAAmC,EAAE,MAAM,2BAA2B,CAAC;AAyHhF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,WAAW,EAA0B,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACrF,mBAAmB,EAAE,eAAe,CAAC,kBAAkB,CAAC;IACxD,SAAS,EAAE,EAAE;IACb,+BAA+B,EAAE,EAAE;IACnC,IAAI,EAAE,EAAE;IACR,eAAe,EAAE,CAAC;IAClB,KAAK,EAAE,EAAE;IACT,gBAAgB,EAAE,CAAC;IACnB,SAAS,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE;IAC7D,cAAc,EAAE,EAAE;IAClB,iBAAiB,EAAE,EAAE;IACrB,uBAAuB,EAAE,EAAE;IAC3B,qBAAqB,EAAE,EAAE;IACzB,kBAAkB,EAAE,EAAE;IACtB,qBAAqB,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE;IACvE,iBAAiB,EAAE,EAAE;IACrB,eAAe,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;IACrD,yBAAyB,EAAE,EAAE;IAC7B,qBAAqB,EAAE,IAAI;IAC3B,wBAAwB,EAAE,EAAE;IAC5B,qBAAqB,EAAE,EAAE;IACzB,qBAAqB,EAAE,EAAE;IACzB,eAAe,EAAE,EAAE;IACnB,wBAAwB,EAAE,EAAE;IAC5B,gBAAgB,EAAE,EAAE;IACpB,uBAAuB,EAAE,EAAE;IAC3B,uBAAuB,EAAE,EAAE;IAC3B,aAAa,EAAE,EAAE;IACjB,QAAQ,EAAE,KAAK;IACf,wBAAwB,EAAE,6BAQxB,EAAE,oEAPF,aAAa,EACb,qBAAqB,GAAG,eAAe,CAAC,aAAa,CAAC,EACtD,mBAAmB,GAAG,EAAE,EACxB,oBAAoB,GAAG,sBAAsB,CAAC,QAAQ,EAAE,CAAC,GAAG,EAC5D,QAAQ,GAAG,KAAK,EAChB,uBAAuB,GAAG,EAAE,EAC5B,uBAAuB,GAAG,EAAE;;QAE5B,MAAM,kBAAkB,GAAG,MAAM,wBAAwB,CACvD,aAAa,EACb,mBAAmB,EACnB,oBAAoB,CACrB,CAAC;QAEF,wDAAwD;QACxD,aAAa,GAAG,4CAA4C,CAC1D,aAAa,EACb,kBAAkB,CAAC,aAAa,CACjC,CAAC;QAEF,iFAAiF;QACjF,2GAA2G;QAC3G,MAAM,eAAe,GAAG,MAAA,GAAG,EAAE,CAAC,eAAe,mCAAI,kBAAkB,CAAC,eAAe,CAAC;QACpF,MAAM,wBAAwB,GAC5B,MAAA,GAAG,EAAE,CAAC,wBAAwB,mCAAI,kBAAkB,CAAC,wBAAwB,CAAC;QAEhF,oFAAoF;QACpF,MAAM,EACJ,wBAAwB,EACxB,sBAAsB,EACtB,gCAAgC,EAChC,4BAA4B,EAC5B,4BAA4B,EAC5B,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EACtB,wBAAwB,EAAE,+BAA+B,EAC1D,GAAG,MAAM,0BAA0B,CAAC;YACnC,qBAAqB;YACrB,iBAAiB,EAAE,kBAAkB,CAAC,iBAAiB;YACvD,eAAe,EAAE,kBAAkB,CAAC,eAAe;YACnD,qBAAqB,EAAE,kBAAkB,CAAC,qBAAqB;YAC/D,qBAAqB,EAAE,kBAAkB,CAAC,qBAAqB;YAC/D,iBAAiB,EAAE,kBAAkB,CAAC,SAAS,CAAC,iBAAiB;YACjE,IAAI,EAAE,kBAAkB,CAAC,IAAI;YAC7B,KAAK,EAAE,kBAAkB,CAAC,KAAK;YAC/B,eAAe,EAAE,eAAe;YAChC,wBAAwB,EAAE,wBAAwB;YAClD,oBAAoB,EAAE,oBAAoB;SAC3C,CAAC,CAAC;QAEH,mCAAmC;QACnC,MAAM,uBAAuB,GAAG,mCAAmC,CACjE,aAAa,EACb,wBAAwB,CACzB,CAAC;QAEF,GAAG,CAAC;YACF,mBAAmB,EAAE,aAAa;YAClC,SAAS,EAAE,kBAAkB,CAAC,SAAS;YACvC,+BAA+B,EAAE,kBAAkB,CAAC,+BAA+B;YACnF,IAAI,EAAE,kBAAkB,CAAC,IAAI;YAC7B,eAAe,EAAE,eAAe;YAChC,KAAK,EAAE,kBAAkB,CAAC,KAAK;YAC/B,gBAAgB,EAAE,gBAAgB;YAClC,SAAS,EAAE,kBAAkB,CAAC,SAAS;YACvC,cAAc,EAAE,kBAAkB,CAAC,cAAc;YACjD,iBAAiB,EAAE,wBAAwB;YAC3C,uBAAuB,EAAE,uBAAuB;YAChD,eAAe,EAAE,sBAAsB;YACvC,yBAAyB,EAAE,gCAAgC;YAC3D,qBAAqB,EAAE,4BAA4B;YACnD,qBAAqB,EAAE,4BAA4B;YACnD,kBAAkB,EAAE,kBAAkB,CAAC,kBAAkB;YACzD,iBAAiB,EAAE,kBAAkB,CAAC,iBAAiB;YACvD,wBAAwB,EAAE,kBAAkB,CAAC,wBAAwB;YACrE,qBAAqB,EAAE,kBAAkB,CAAC,qBAAqB;YAC/D,eAAe,EAAE,sBAAsB;YACvC,wBAAwB,EAAE,+BAA+B;YACzD,uBAAuB,EAAE,uBAAuB;YAChD,uBAAuB,EAAE,uBAAuB;YAChD,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAC;IACL,CAAC,CAAA;IACD,0BAA0B,EAAE,GAAG,EAAE,CAC/B,GAAG,CAAC;QACF,mBAAmB,EAAE,eAAe,CAAC,kBAAkB,CAAC;QACxD,SAAS,EAAE,EAAE;QACb,+BAA+B,EAAE,EAAE;QACnC,IAAI,EAAE,EAAE;QACR,eAAe,EAAE,CAAC;QAClB,KAAK,EAAE,EAAE;QACT,gBAAgB,EAAE,CAAC;QACnB,SAAS,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE;QAC7D,cAAc,EAAE,EAAE;QAClB,iBAAiB,EAAE,EAAE;QACrB,uBAAuB,EAAE,EAAE;QAC3B,eAAe,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;QACrD,yBAAyB,EAAE,EAAE;QAC7B,qBAAqB,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE;QACvE,qBAAqB,EAAE,EAAE;QACzB,kBAAkB,EAAE,EAAE;QACtB,iBAAiB,EAAE,EAAE;QACrB,wBAAwB,EAAE,EAAE;QAC5B,qBAAqB,EAAE,EAAE;QACzB,eAAe,EAAE,EAAE;QACnB,wBAAwB,EAAE,EAAE;QAC5B,uBAAuB,EAAE,EAAE;QAC3B,uBAAuB,EAAE,EAAE;KAC5B,CAAC;IACJ,SAAS,EAAE,CAAC,WAAmB,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC,CAAC;IACjF,UAAU,EAAE,CAAC,YAAoB,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,gBAAgB,EAAE,YAAY,EAAE,CAAC,CAAC;IACrF,iBAAiB,EAAE,CAAC,SAAiB,EAAE,EAAE;QACvC,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;QACxB,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YACT,IAAI,kCACC,IAAI,KACP,CAAC,SAAS,CAAC,kCAAO,IAAI,CAAC,SAAS,CAAC,KAAE,UAAU,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,UAAU,MAC3E;SACF,CAAC,CAAC,CAAC;IACN,CAAC;IACD,kBAAkB,EAAE,CAAC,UAAkB,EAAE,EAAE;QACzC,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC;QAC1B,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YACT,KAAK,kCACA,KAAK,KACR,CAAC,UAAU,CAAC,kCAAO,KAAK,CAAC,UAAU,CAAC,KAAE,UAAU,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,UAAU,MAChF;SACF,CAAC,CAAC,CAAC;IACN,CAAC;IACD,oBAAoB,EAAE,CACpB,MAAc,EACd,SAAwD,EACxD,sBAAqC,EACrC,EAAE;QACF,MAAM,yBAAyB,GAAG,GAAG,EAAE,CAAC,yBAAyB,CAAC;QAClE,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC;QAC9C,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,EAAE,CAAC;YACvC,OAAO;QACT,CAAC;QAED,MAAM,mBAAmB,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;QAC9D,MAAM,sBAAsB,GAAG,0BAA0B,mBAClD,eAAe,GACpB,mBAAmB,EACnB,MAAM,EACN,SAAS,EACT,sBAAsB,CACvB,CAAC;QAEF,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YACT,eAAe,EAAE,sBAAsB;SACxC,CAAC,CAAC,CAAC;IACN,CAAC;IACD,2BAA2B,EAAE,CAC3B,uBAA+B,EAC/B,sBAA8B,EAC9B,UAA4B,EAC5B,EAAE;QACF,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC;QAC9C,MAAM,qBAAqB,GAAG,GAAG,EAAE,CAAC,qBAAqB,CAAC;QAE1D,MAAM,sBAAsB,GAAG,mCAAmC,mBAE3D,eAAe,GAEpB,uBAAuB,EACvB,sBAAsB,EACtB,UAAU,CACX,CAAC;QAEF,MAAM,EAAE,4BAA4B,EAAE,SAAS,EAAE,GAC/C,MAAM,yCAAyC,CAAC;YAC9C,qBAAqB,EAAE,0BAA0B,CAAC,QAAQ,EAAE,CAAC,iBAAiB;YAC9E,4BAA4B,EAAE,0BAA0B,CAAC,QAAQ,EAAE,CAAC,sBAAsB;YAC1F,iBAAiB,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,iBAAiB;YACpD,uBAAuB,EAAE,GAAG,EAAE,CAAC,eAAe;YAC9C,wBAAwB,EAAE,GAAG,EAAE,CAAC,wBAAwB;YACxD,qBAAqB,EAAE,qBAAqB;YAC5C,uBAAuB;YACvB,sBAAsB;YACtB,UAAU;YACV,oBAAoB,EAAE,sBAAsB,CAAC,QAAQ,EAAE,CAAC,GAAG;SAC5D,CAAC,CAAC;QAEL,IAAI,SAAS,EAAE,CAAC;YACd,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;gBACT,eAAe,EAAE,sBAAsB;gBACvC,qBAAqB,EAAE,4BAA4B;aACpD,CAAC,CAAC,CAAC;QACN,CAAC;IACH,CAAC,CAAA;IACD,0BAA0B,EAAE,CAAC,WAAoB,EAAE,EAAE,CACnD,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,qBAAqB,EAAE,WAAW,EAAE,CAAC,CAAC;IACrD,iBAAiB,EAAE,CAAO,eAAsC,EAAE,EAAE;QAClE,MAAM,sBAAsB,GAAG,kCAAkC,CAAC,eAAe,CAAC,CAAC;QACnF,MAAM,EACJ,SAAS,EACT,wBAAwB,EACxB,4BAA4B,EAC5B,4BAA4B,EAC5B,sBAAsB,EACtB,wBAAwB,EACzB,GAAG,MAAM,0BAA0B,CAAC;YACnC,eAAe;YACf,sBAAsB;YACtB,iBAAiB,EAAE,GAAG,EAAE,CAAC,iBAAiB;YAC1C,qBAAqB,EAAE,GAAG,EAAE,CAAC,qBAAqB;YAClD,qBAAqB,EAAE,GAAG,EAAE,CAAC,qBAAqB;YAClD,iBAAiB,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,iBAAiB;YACpD,uBAAuB,EAAE,GAAG,EAAE,CAAC,eAAe;YAC9C,wBAAwB,EAAE,GAAG,EAAE,CAAC,wBAAwB;YACxD,oBAAoB,EAAE,sBAAsB,CAAC,QAAQ,EAAE,CAAC,GAAG;SAC5D,CAAC,CAAC;QAEH,IAAI,SAAS,EAAE,CAAC;YACd,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;gBACT,iBAAiB,EAAE,wBAAwB;gBAC3C,qBAAqB,EAAE,4BAA4B;gBACnD,qBAAqB,EAAE,4BAA4B;gBACnD,eAAe,EAAE,sBAAsB;gBACvC,wBAAwB,EAAE,wBAAwB;aACnD,CAAC,CAAC,CAAC;YACJ,OAAO;QACT,CAAC;QAED,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YACT,eAAe,EAAE,sBAAsB;YACvC,wBAAwB,EAAE,wBAAwB;SACnD,CAAC,CAAC,CAAC;IACN,CAAC,CAAA;IACD,gBAAgB,EAAE,CAAC,WAAmB,EAAE,OAAiB,EAAE,EAAE,CAC3D,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QACT,qBAAqB,kCAChB,GAAG,EAAE,CAAC,qBAAqB,KAC9B,CAAC,WAAW,CAAC,EAAE,OAAO,GACvB;KACF,CAAC,CAAC;IACL,yBAAyB,EAAE,CACzB,iBAAwC,EACxC,gBAAsC,EACtC,eAAyB,EACzB,gBAA0B,EAC1B,EAAE;QACF,MAAM,sBAAsB,GAAG,kCAAkC,CAAC,iBAAiB,CAAC,CAAC;QAErF,MAAM,0CAA0C,GAAG,MAAM,oCAAoC,CAAC;YAC5F,eAAe,EAAE,iBAAiB;YAClC,sBAAsB,EAAE,sBAAsB;YAC9C,qBAAqB,EAAE,GAAG,EAAE,CAAC,qBAAqB;YAClD,iBAAiB,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,iBAAiB;YACpD,uBAAuB,EAAE,GAAG,EAAE,CAAC,eAAe;YAC9C,wBAAwB,EAAE,GAAG,EAAE,CAAC,wBAAwB;YACxD,oBAAoB,EAAE,sBAAsB,CAAC,QAAQ,EAAE,CAAC,GAAG;SAC5D,CAAC,CAAC;QACH,MAAM,EAAE,4BAA4B,EAAE,GAAG,0CAA0C,CAAC;QACpF,IAAI,sBAAsB,GAAG,0CAA0C,CAAC,sBAAsB,CAAC;QAC/F,IAAI,wBAAwB,GAC1B,0CAA0C,CAAC,wBAAwB,CAAC;QAEtE,MAAM,eAAe,GAAG,oCAAoC,CAC1D,GAAG,EAAE,CAAC,mBAAmB,EACzB,iBAAiB,EACjB,4BAA4B,CAC7B,CAAC;QAEF,MAAM,EACJ,wBAAwB,EACxB,sBAAsB,EACtB,gCAAgC,EAChC,4BAA4B,EAC5B,eAAe,EACf,gBAAgB,EACjB,GAAG,MAAM,0BAA0B,CAAC;YACnC,qBAAqB,EAAE,eAAe;YACtC,iBAAiB,EAAE,GAAG,EAAE,CAAC,iBAAiB;YAC1C,eAAe,EAAE,GAAG,EAAE,CAAC,eAAe;YACtC,qBAAqB,EAAE,GAAG,EAAE,CAAC,qBAAqB;YAClD,qBAAqB,EAAE,4BAA4B;YACnD,iBAAiB,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,iBAAiB;YACpD,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI;YAChB,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK;YAClB,eAAe,EAAE,sBAAsB;YACvC,wBAAwB,EAAE,wBAAwB;YAClD,oBAAoB,EAAE,sBAAsB,CAAC,QAAQ,EAAE,CAAC,GAAG;SAC5D,CAAC,CAAC;QACH,sBAAsB,GAAG,0CAA0C,CAAC,sBAAsB,CAAC;QAC3F,wBAAwB,GAAG,0CAA0C,CAAC,wBAAwB,CAAC;QAE/F,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YACT,iBAAiB,EAAE,wBAAwB;YAC3C,eAAe,EAAE,sBAAsB;YACvC,yBAAyB,EAAE,gCAAgC;YAC3D,qBAAqB,EAAE,4BAA4B;YACnD,qBAAqB,EAAE,4BAA4B;YACnD,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe;YAC1E,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,gBAAgB;YAC9E,eAAe,EAAE,sBAAsB;YACvC,wBAAwB,EAAE,wBAAwB;YAClD,gBAAgB,EAAE,gBAAgB,aAAhB,gBAAgB,cAAhB,gBAAgB,GAAI,GAAG,EAAE,CAAC,gBAAgB;SAC7D,CAAC,CAAC,CAAC;QAEJ,OAAO,eAAe,CAAC;IACzB,CAAC,CAAA;IACD,aAAa,EAAE,CAAC,MAAc,EAAE,EAAE,CAChC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QACT,aAAa,EAAE,MAAM;KACtB,CAAC,CAAC;IACL,mBAAmB,EAAE,CACnB,mBAAwC,EACxC,oBAA8B,EAC9B,EAAE;QACF,IAAI,oBAAoB,EAAE,CAAC;YACzB,MAAM,kBAAkB,mCAAQ,mBAAmB,GAAK,GAAG,EAAE,CAAC,eAAe,CAAE,CAAC;YAChF,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;gBACT,gBAAgB,EAAE,mBAAmB;gBACrC,eAAe,EAAE,kBAAkB;aACpC,CAAC,CAAC,CAAC;YACJ,OAAO;QACT,CAAC;QAED,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YACT,gBAAgB,EAAE,mBAAmB;SACtC,CAAC,CAAC,CAAC;IACN,CAAC;IACD,iBAAiB,EAAE,CAAC,QAAiB,EAAE,EAAE,CACvC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QACT,QAAQ,EAAE,QAAQ;KACnB,CAAC,CAAC;CACN,CAAC,CAAC,CAAC;AAEJ;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,eAAe,CAAC,kBAAkB,CAAC,CAAC"}
|
package/lib/utils/fhirpath.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { Expression, QuestionnaireResponse, QuestionnaireResponseItem } from 'fhir/r4';
|
|
2
2
|
import type { CalculatedExpression } from '../interfaces/calculatedExpression.interface';
|
|
3
3
|
import type { EnableWhenExpressions } from '../interfaces/enableWhen.interface';
|
|
4
|
+
import type { TargetConstraint } from '../interfaces/targetConstraint.interface';
|
|
4
5
|
interface EvaluateUpdatedExpressionsParams {
|
|
5
6
|
updatedResponse: QuestionnaireResponse;
|
|
6
7
|
updatedResponseItemMap: Record<string, QuestionnaireResponseItem[]>;
|
|
8
|
+
targetConstraints: Record<string, TargetConstraint>;
|
|
7
9
|
calculatedExpressions: Record<string, CalculatedExpression[]>;
|
|
8
10
|
enableWhenExpressions: EnableWhenExpressions;
|
|
9
11
|
variablesFhirPath: Record<string, Expression[]>;
|
|
@@ -13,6 +15,7 @@ interface EvaluateUpdatedExpressionsParams {
|
|
|
13
15
|
}
|
|
14
16
|
export declare function evaluateUpdatedExpressions(params: EvaluateUpdatedExpressionsParams): Promise<{
|
|
15
17
|
isUpdated: boolean;
|
|
18
|
+
updatedTargetConstraints: Record<string, TargetConstraint>;
|
|
16
19
|
updatedEnableWhenExpressions: EnableWhenExpressions;
|
|
17
20
|
updatedCalculatedExpressions: Record<string, CalculatedExpression[]>;
|
|
18
21
|
updatedFhirPathContext: Record<string, any>;
|
|
@@ -26,7 +29,7 @@ export declare function evaluateLinkIdVariables(item: QuestionnaireResponseItem,
|
|
|
26
29
|
fhirPathContext: Record<string, any>;
|
|
27
30
|
fhirPathTerminologyCache: Record<string, any>;
|
|
28
31
|
}>;
|
|
29
|
-
export declare function addEmptyLinkIdVariables(linkId: string, variablesFhirPath: Record<string, Expression[]>, fhirPathContext: Record<string, any
|
|
32
|
+
export declare function addEmptyLinkIdVariables(linkId: string, variablesFhirPath: Record<string, Expression[]>, fhirPathContext: Record<string, any>, qrItemMapIsEmpty: boolean): Record<string, any>;
|
|
30
33
|
export declare function evaluateQuestionnaireLevelVariables(resource: QuestionnaireResponse, variablesFhirPath: Record<string, Expression[]>, fhirPathContext: Record<string, any>, fhirPathTerminologyCache: Record<string, any>, terminologyServerUrl: string): Promise<{
|
|
31
34
|
fhirPathContext: Record<string, any>;
|
|
32
35
|
fhirPathTerminologyCache: Record<string, any>;
|
package/lib/utils/fhirpath.js
CHANGED
|
@@ -27,15 +27,17 @@ import fhirpath from 'fhirpath';
|
|
|
27
27
|
import fhirpath_r4_model from 'fhirpath/fhir-context/r4';
|
|
28
28
|
import { evaluateEnableWhenExpressions } from './enableWhenExpression';
|
|
29
29
|
import { evaluateCalculatedExpressions } from './calculatedExpression';
|
|
30
|
+
import { evaluateTargetConstraints } from './targetConstraint';
|
|
30
31
|
export function evaluateUpdatedExpressions(params) {
|
|
31
32
|
return __awaiter(this, void 0, void 0, function* () {
|
|
32
|
-
const { updatedResponse, updatedResponseItemMap, enableWhenExpressions, calculatedExpressions, variablesFhirPath, existingFhirPathContext, terminologyServerUrl } = params;
|
|
33
|
+
const { updatedResponse, updatedResponseItemMap, targetConstraints, enableWhenExpressions, calculatedExpressions, variablesFhirPath, existingFhirPathContext, terminologyServerUrl } = params;
|
|
33
34
|
let { fhirPathTerminologyCache } = params;
|
|
34
35
|
const noExpressionsToBeUpdated = Object.keys(enableWhenExpressions).length === 0 &&
|
|
35
36
|
Object.keys(calculatedExpressions).length === 0;
|
|
36
|
-
if (noExpressionsToBeUpdated
|
|
37
|
+
if (noExpressionsToBeUpdated) {
|
|
37
38
|
return {
|
|
38
39
|
isUpdated: false,
|
|
40
|
+
updatedTargetConstraints: targetConstraints,
|
|
39
41
|
updatedEnableWhenExpressions: enableWhenExpressions,
|
|
40
42
|
updatedCalculatedExpressions: calculatedExpressions,
|
|
41
43
|
updatedFhirPathContext: existingFhirPathContext,
|
|
@@ -45,13 +47,16 @@ export function evaluateUpdatedExpressions(params) {
|
|
|
45
47
|
const fhirPathEvalResult = yield createFhirPathContext(updatedResponse, updatedResponseItemMap, variablesFhirPath, existingFhirPathContext, fhirPathTerminologyCache, terminologyServerUrl);
|
|
46
48
|
const updatedFhirPathContext = fhirPathEvalResult.fhirPathContext;
|
|
47
49
|
fhirPathTerminologyCache = fhirPathEvalResult.fhirPathTerminologyCache;
|
|
50
|
+
// Update targetConstraints
|
|
51
|
+
const { targetConstraintsIsUpdated, updatedTargetConstraints } = yield evaluateTargetConstraints(updatedFhirPathContext, fhirPathTerminologyCache, targetConstraints, terminologyServerUrl);
|
|
48
52
|
// Update enableWhenExpressions
|
|
49
53
|
const { enableWhenExpsIsUpdated, updatedEnableWhenExpressions } = yield evaluateEnableWhenExpressions(updatedFhirPathContext, fhirPathTerminologyCache, enableWhenExpressions, terminologyServerUrl);
|
|
50
54
|
// Update calculatedExpressions
|
|
51
55
|
const { calculatedExpsIsUpdated, updatedCalculatedExpressions } = yield evaluateCalculatedExpressions(updatedFhirPathContext, fhirPathTerminologyCache, calculatedExpressions, terminologyServerUrl);
|
|
52
|
-
const isUpdated = enableWhenExpsIsUpdated || calculatedExpsIsUpdated;
|
|
56
|
+
const isUpdated = enableWhenExpsIsUpdated || calculatedExpsIsUpdated || targetConstraintsIsUpdated;
|
|
53
57
|
return {
|
|
54
58
|
isUpdated,
|
|
59
|
+
updatedTargetConstraints,
|
|
55
60
|
updatedEnableWhenExpressions,
|
|
56
61
|
updatedCalculatedExpressions,
|
|
57
62
|
updatedFhirPathContext,
|
|
@@ -78,8 +83,9 @@ export function createFhirPathContext(questionnaireResponse, questionnaireRespon
|
|
|
78
83
|
}
|
|
79
84
|
}
|
|
80
85
|
// Items don't exist in questionnaireResponseItemMap, but we still have to add them into the fhirPathContext as empty arrays
|
|
86
|
+
const qrItemMapIsEmpty = Object.keys(questionnaireResponseItemMap).length === 0;
|
|
81
87
|
for (const linkId in variablesFhirPath) {
|
|
82
|
-
fhirPathContext = addEmptyLinkIdVariables(linkId, variablesFhirPath, fhirPathContext);
|
|
88
|
+
fhirPathContext = addEmptyLinkIdVariables(linkId, variablesFhirPath, fhirPathContext, qrItemMapIsEmpty);
|
|
83
89
|
}
|
|
84
90
|
return { fhirPathContext, fhirPathTerminologyCache };
|
|
85
91
|
});
|
|
@@ -118,14 +124,16 @@ export function evaluateLinkIdVariables(item, variablesFhirPath, fhirPathContext
|
|
|
118
124
|
return { fhirPathContext, fhirPathTerminologyCache };
|
|
119
125
|
});
|
|
120
126
|
}
|
|
121
|
-
export function addEmptyLinkIdVariables(linkId, variablesFhirPath, fhirPathContext) {
|
|
127
|
+
export function addEmptyLinkIdVariables(linkId, variablesFhirPath, fhirPathContext, qrItemMapIsEmpty) {
|
|
122
128
|
const linkIdVariables = variablesFhirPath[linkId];
|
|
123
129
|
if (!linkIdVariables || linkIdVariables.length === 0) {
|
|
124
130
|
return fhirPathContext;
|
|
125
131
|
}
|
|
126
132
|
for (const variable of linkIdVariables) {
|
|
127
133
|
if (variable.expression && variable.name) {
|
|
128
|
-
|
|
134
|
+
// If the variable is not evaluated, add it as an empty array
|
|
135
|
+
// Also, when questionnaireResponseItemMap is empty, no items exist in the questionnaireResponse, therefore no variables are evaluated
|
|
136
|
+
if (fhirPathContext[`${variable.name}`] === undefined || qrItemMapIsEmpty) {
|
|
129
137
|
fhirPathContext[`${variable.name}`] = [];
|
|
130
138
|
}
|
|
131
139
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fhirpath.js","sourceRoot":"","sources":["../../src/utils/fhirpath.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;;;;;;;;;;AAEH,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,iBAAiB,MAAM,0BAA0B,CAAC;AAIzD,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"fhirpath.js","sourceRoot":"","sources":["../../src/utils/fhirpath.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import type { EnableWhenExpressions, EnableWhenItems } from '../interfaces/enabl
|
|
|
3
3
|
import type { Tabs } from '../interfaces/tab.interface';
|
|
4
4
|
import type { Pages } from '../interfaces/page.interface';
|
|
5
5
|
import type { CalculatedExpression } from '../interfaces/calculatedExpression.interface';
|
|
6
|
+
import type { TargetConstraint } from '../interfaces/targetConstraint.interface';
|
|
6
7
|
/**
|
|
7
8
|
* Initialise a questionnaireResponse from a given questionnaire
|
|
8
9
|
* optionally takes in an existing questionnaireResponse to be initialised
|
|
@@ -13,6 +14,7 @@ export declare function initialiseQuestionnaireResponse(questionnaire: Questionn
|
|
|
13
14
|
export declare function parseItemInitialToAnswer(initial: QuestionnaireItemInitial): QuestionnaireResponseItemAnswer | null;
|
|
14
15
|
export interface initialFormFromResponseParams {
|
|
15
16
|
questionnaireResponse: QuestionnaireResponse;
|
|
17
|
+
targetConstraints: Record<string, TargetConstraint>;
|
|
16
18
|
enableWhenItems: EnableWhenItems;
|
|
17
19
|
enableWhenExpressions: EnableWhenExpressions;
|
|
18
20
|
calculatedExpressions: Record<string, CalculatedExpression[]>;
|
|
@@ -24,6 +26,7 @@ export interface initialFormFromResponseParams {
|
|
|
24
26
|
terminologyServerUrl: string;
|
|
25
27
|
}
|
|
26
28
|
export declare function initialiseFormFromResponse(params: initialFormFromResponseParams): Promise<{
|
|
29
|
+
initialTargetConstraints: Record<string, TargetConstraint>;
|
|
27
30
|
initialEnableWhenItems: EnableWhenItems;
|
|
28
31
|
initialEnableWhenLinkedQuestions: Record<string, string[]>;
|
|
29
32
|
initialEnableWhenExpressions: EnableWhenExpressions;
|