@aehrc/smart-forms-renderer 1.0.0-alpha.12 → 1.0.0-alpha.13
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/interfaces/questionnaireStore.interface.d.ts +1 -0
- package/lib/stores/questionnaireStore.d.ts +3 -0
- package/lib/stores/questionnaireStore.js +19 -5
- package/lib/stores/questionnaireStore.js.map +1 -1
- package/lib/utils/calculatedExpression.d.ts +3 -1
- package/lib/utils/calculatedExpression.js +25 -4
- package/lib/utils/calculatedExpression.js.map +1 -1
- package/lib/utils/enableWhenExpression.d.ts +4 -1
- package/lib/utils/enableWhenExpression.js +21 -8
- package/lib/utils/enableWhenExpression.js.map +1 -1
- package/lib/utils/fhirpath.d.ts +14 -3
- package/lib/utils/fhirpath.js +46 -15
- package/lib/utils/fhirpath.js.map +1 -1
- package/lib/utils/initialise.d.ts +2 -0
- package/lib/utils/initialise.js +6 -1
- package/lib/utils/initialise.js.map +1 -1
- package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js +4 -2
- package/lib/utils/questionnaireStoreUtils/createQuestionaireModel.js.map +1 -1
- package/package.json +1 -1
- package/src/interfaces/questionnaireStore.interface.ts +1 -0
- package/src/stores/questionnaireStore.ts +24 -4
- package/src/utils/calculatedExpression.ts +32 -3
- package/src/utils/enableWhenExpression.ts +29 -3
- package/src/utils/fhirpath.ts +60 -11
- package/src/utils/initialise.ts +9 -1
- package/src/utils/questionnaireStoreUtils/createQuestionaireModel.ts +4 -2
|
@@ -33,6 +33,7 @@ import type { ComponentType } from 'react';
|
|
|
33
33
|
* @property processedValueSetUrls - Key-value pair of contained value set urls `Record<valueSetName, valueSetUrl>`
|
|
34
34
|
* @property cachedValueSetCodings - Key-value pair of cached value set codings `Record<valueSetUrl, codings>`
|
|
35
35
|
* @property fhirPathContext - Key-value pair of evaluated FHIRPath values `Record<variable name, evaluated value(s)>`
|
|
36
|
+
* @property fhirPathTerminologyCache - Key-value pair of cached FHIRPath Terminology results `Record<cacheKey, cached terminology result>`
|
|
36
37
|
* @property populatedContext - Key-value pair of one-off pre-populated FHIRPath values `Record<variable/launchContext/sourceQueries batch name, evaluated value(s)>`
|
|
37
38
|
* @property qItemOverrideComponents - Key-value pair of React component overrides for Questionnaire Items via linkId `Record<linkId, React component>`
|
|
38
39
|
* @property sdcUiOverrideComponents - Key-value pair of React component overrides for SDC UI Controls https://hl7.org/fhir/extensions/ValueSet-questionnaire-item-control.html `Record<SDC UI code, React component>`
|
|
@@ -77,6 +78,7 @@ export interface QuestionnaireStoreType {
|
|
|
77
78
|
processedValueSetUrls: Record<string, string>;
|
|
78
79
|
cachedValueSetCodings: Record<string, Coding[]>;
|
|
79
80
|
fhirPathContext: Record<string, any>;
|
|
81
|
+
fhirPathTerminologyCache: Record<string, any>;
|
|
80
82
|
populatedContext: Record<string, any>;
|
|
81
83
|
qItemOverrideComponents: Record<string, ComponentType<QItemOverrideComponentProps>>;
|
|
82
84
|
sdcUiOverrideComponents: Record<string, ComponentType<SdcUiOverrideComponentProps>>;
|
|
@@ -136,6 +138,7 @@ export declare const useQuestionnaireStore: import("zustand/vanilla").StoreApi<Q
|
|
|
136
138
|
processedValueSetUrls: () => Record<string, string>;
|
|
137
139
|
cachedValueSetCodings: () => Record<string, Coding[]>;
|
|
138
140
|
fhirPathContext: () => Record<string, any>;
|
|
141
|
+
fhirPathTerminologyCache: () => Record<string, any>;
|
|
139
142
|
populatedContext: () => Record<string, any>;
|
|
140
143
|
qItemOverrideComponents: () => Record<string, ComponentType<QItemOverrideComponentProps>>;
|
|
141
144
|
sdcUiOverrideComponents: () => Record<string, ComponentType<SdcUiOverrideComponentProps>>;
|
|
@@ -64,21 +64,23 @@ export const questionnaireStore = createStore()((set, get) => ({
|
|
|
64
64
|
processedValueSetUrls: {},
|
|
65
65
|
cachedValueSetCodings: {},
|
|
66
66
|
fhirPathContext: {},
|
|
67
|
+
fhirPathTerminologyCache: {},
|
|
67
68
|
populatedContext: {},
|
|
68
69
|
qItemOverrideComponents: {},
|
|
69
70
|
sdcUiOverrideComponents: {},
|
|
70
71
|
focusedLinkId: '',
|
|
71
72
|
readOnly: false,
|
|
72
73
|
buildSourceQuestionnaire: (questionnaire, questionnaireResponse = structuredClone(emptyResponse), additionalVariables = {}, terminologyServerUrl = terminologyServerStore.getState().url, readOnly = false, qItemOverrideComponents = {}, sdcUiOverrideComponents = {}) => __awaiter(void 0, void 0, void 0, function* () {
|
|
73
|
-
var _a;
|
|
74
|
+
var _a, _b;
|
|
74
75
|
const questionnaireModel = yield createQuestionnaireModel(questionnaire, additionalVariables, terminologyServerUrl);
|
|
75
76
|
// Insert answerOptions with displays into questionnaire
|
|
76
77
|
questionnaire = insertCompleteAnswerOptionsIntoQuestionnaire(questionnaire, questionnaireModel.answerOptions);
|
|
77
78
|
// If existing fhirPathContext is empty, use the one from the questionnaire model
|
|
78
79
|
// Mostly existing fhirPathContext will be empty, but in some cases it may not be e.g. after pre-population
|
|
79
80
|
const fhirPathContext = (_a = get().fhirPathContext) !== null && _a !== void 0 ? _a : questionnaireModel.fhirPathContext;
|
|
81
|
+
const fhirPathTerminologyCache = (_b = get().fhirPathTerminologyCache) !== null && _b !== void 0 ? _b : questionnaireModel.fhirPathTerminologyCache;
|
|
80
82
|
// Initialise form with questionnaire response and properties in questionnaire model
|
|
81
|
-
const { initialEnableWhenItems, initialEnableWhenLinkedQuestions, initialEnableWhenExpressions, initialCalculatedExpressions, firstVisibleTab, firstVisiblePage, updatedFhirPathContext } = yield initialiseFormFromResponse({
|
|
83
|
+
const { initialEnableWhenItems, initialEnableWhenLinkedQuestions, initialEnableWhenExpressions, initialCalculatedExpressions, firstVisibleTab, firstVisiblePage, updatedFhirPathContext, fhirPathTerminologyCache: updatedFhirPathTerminologyCache } = yield initialiseFormFromResponse({
|
|
82
84
|
questionnaireResponse,
|
|
83
85
|
enableWhenItems: questionnaireModel.enableWhenItems,
|
|
84
86
|
enableWhenExpressions: questionnaireModel.enableWhenExpressions,
|
|
@@ -87,6 +89,7 @@ export const questionnaireStore = createStore()((set, get) => ({
|
|
|
87
89
|
tabs: questionnaireModel.tabs,
|
|
88
90
|
pages: questionnaireModel.pages,
|
|
89
91
|
fhirPathContext: fhirPathContext,
|
|
92
|
+
fhirPathTerminologyCache: fhirPathTerminologyCache,
|
|
90
93
|
terminologyServerUrl: terminologyServerUrl
|
|
91
94
|
});
|
|
92
95
|
set({
|
|
@@ -108,6 +111,7 @@ export const questionnaireStore = createStore()((set, get) => ({
|
|
|
108
111
|
processedValueSetCodings: questionnaireModel.processedValueSetCodings,
|
|
109
112
|
processedValueSetUrls: questionnaireModel.processedValueSetUrls,
|
|
110
113
|
fhirPathContext: updatedFhirPathContext,
|
|
114
|
+
fhirPathTerminologyCache: updatedFhirPathTerminologyCache,
|
|
111
115
|
qItemOverrideComponents: qItemOverrideComponents,
|
|
112
116
|
sdcUiOverrideComponents: sdcUiOverrideComponents,
|
|
113
117
|
readOnly: readOnly
|
|
@@ -132,6 +136,7 @@ export const questionnaireStore = createStore()((set, get) => ({
|
|
|
132
136
|
processedValueSetCodings: {},
|
|
133
137
|
processedValueSetUrls: {},
|
|
134
138
|
fhirPathContext: {},
|
|
139
|
+
fhirPathTerminologyCache: {},
|
|
135
140
|
qItemOverrideComponents: {},
|
|
136
141
|
sdcUiOverrideComponents: {}
|
|
137
142
|
}),
|
|
@@ -170,6 +175,7 @@ export const questionnaireStore = createStore()((set, get) => ({
|
|
|
170
175
|
questionnaireResponseItemMap: questionnaireResponseStore.getState().updatableResponseItems,
|
|
171
176
|
variablesFhirPath: get().variables.fhirPathVariables,
|
|
172
177
|
existingFhirPathContext: get().fhirPathContext,
|
|
178
|
+
fhirPathTerminologyCache: get().fhirPathTerminologyCache,
|
|
173
179
|
enableWhenExpressions: enableWhenExpressions,
|
|
174
180
|
parentRepeatGroupLinkId,
|
|
175
181
|
parentRepeatGroupIndex,
|
|
@@ -186,25 +192,28 @@ export const questionnaireStore = createStore()((set, get) => ({
|
|
|
186
192
|
toggleEnableWhenActivation: (isActivated) => set(() => ({ enableWhenIsActivated: isActivated })),
|
|
187
193
|
updateExpressions: (updatedResponse) => __awaiter(void 0, void 0, void 0, function* () {
|
|
188
194
|
const updatedResponseItemMap = createQuestionnaireResponseItemMap(updatedResponse);
|
|
189
|
-
const { isUpdated, updatedEnableWhenExpressions, updatedCalculatedExpressions, updatedFhirPathContext } = yield evaluateUpdatedExpressions({
|
|
195
|
+
const { isUpdated, updatedEnableWhenExpressions, updatedCalculatedExpressions, updatedFhirPathContext, fhirPathTerminologyCache } = yield evaluateUpdatedExpressions({
|
|
190
196
|
updatedResponse,
|
|
191
197
|
updatedResponseItemMap,
|
|
192
198
|
enableWhenExpressions: get().enableWhenExpressions,
|
|
193
199
|
calculatedExpressions: get().calculatedExpressions,
|
|
194
200
|
variablesFhirPath: get().variables.fhirPathVariables,
|
|
195
201
|
existingFhirPathContext: get().fhirPathContext,
|
|
202
|
+
fhirPathTerminologyCache: get().fhirPathTerminologyCache,
|
|
196
203
|
terminologyServerUrl: terminologyServerStore.getState().url
|
|
197
204
|
});
|
|
198
205
|
if (isUpdated) {
|
|
199
206
|
set(() => ({
|
|
200
207
|
enableWhenExpressions: updatedEnableWhenExpressions,
|
|
201
208
|
calculatedExpressions: updatedCalculatedExpressions,
|
|
202
|
-
fhirPathContext: updatedFhirPathContext
|
|
209
|
+
fhirPathContext: updatedFhirPathContext,
|
|
210
|
+
fhirPathTerminologyCache: fhirPathTerminologyCache
|
|
203
211
|
}));
|
|
204
212
|
return;
|
|
205
213
|
}
|
|
206
214
|
set(() => ({
|
|
207
|
-
fhirPathContext: updatedFhirPathContext
|
|
215
|
+
fhirPathContext: updatedFhirPathContext,
|
|
216
|
+
fhirPathTerminologyCache: fhirPathTerminologyCache
|
|
208
217
|
}));
|
|
209
218
|
}),
|
|
210
219
|
addCodingToCache: (valueSetUrl, codings) => set(() => ({
|
|
@@ -218,10 +227,12 @@ export const questionnaireStore = createStore()((set, get) => ({
|
|
|
218
227
|
calculatedExpressions: get().calculatedExpressions,
|
|
219
228
|
variablesFhirPath: get().variables.fhirPathVariables,
|
|
220
229
|
existingFhirPathContext: get().fhirPathContext,
|
|
230
|
+
fhirPathTerminologyCache: get().fhirPathTerminologyCache,
|
|
221
231
|
terminologyServerUrl: terminologyServerStore.getState().url
|
|
222
232
|
});
|
|
223
233
|
const { initialCalculatedExpressions } = evaluateInitialCalculatedExpressionsResult;
|
|
224
234
|
let updatedFhirPathContext = evaluateInitialCalculatedExpressionsResult.updatedFhirPathContext;
|
|
235
|
+
let fhirPathTerminologyCache = evaluateInitialCalculatedExpressionsResult.fhirPathTerminologyCache;
|
|
225
236
|
const updatedResponse = initialiseCalculatedExpressionValues(get().sourceQuestionnaire, populatedResponse, initialCalculatedExpressions);
|
|
226
237
|
const { initialEnableWhenItems, initialEnableWhenLinkedQuestions, initialEnableWhenExpressions, firstVisibleTab, firstVisiblePage } = yield initialiseFormFromResponse({
|
|
227
238
|
questionnaireResponse: updatedResponse,
|
|
@@ -232,9 +243,11 @@ export const questionnaireStore = createStore()((set, get) => ({
|
|
|
232
243
|
tabs: get().tabs,
|
|
233
244
|
pages: get().pages,
|
|
234
245
|
fhirPathContext: updatedFhirPathContext,
|
|
246
|
+
fhirPathTerminologyCache: fhirPathTerminologyCache,
|
|
235
247
|
terminologyServerUrl: terminologyServerStore.getState().url
|
|
236
248
|
});
|
|
237
249
|
updatedFhirPathContext = evaluateInitialCalculatedExpressionsResult.updatedFhirPathContext;
|
|
250
|
+
fhirPathTerminologyCache = evaluateInitialCalculatedExpressionsResult.fhirPathTerminologyCache;
|
|
238
251
|
set(() => ({
|
|
239
252
|
enableWhenItems: initialEnableWhenItems,
|
|
240
253
|
enableWhenLinkedQuestions: initialEnableWhenLinkedQuestions,
|
|
@@ -243,6 +256,7 @@ export const questionnaireStore = createStore()((set, get) => ({
|
|
|
243
256
|
currentTabIndex: persistTabIndex ? get().currentTabIndex : firstVisibleTab,
|
|
244
257
|
currentPageIndex: persistPageIndex ? get().currentPageIndex : firstVisiblePage,
|
|
245
258
|
fhirPathContext: updatedFhirPathContext,
|
|
259
|
+
fhirPathTerminologyCache: fhirPathTerminologyCache,
|
|
246
260
|
populatedContext: populatedContext !== null && populatedContext !== void 0 ? populatedContext : get().populatedContext
|
|
247
261
|
}));
|
|
248
262
|
return updatedResponse;
|
|
@@ -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":"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"}
|
|
@@ -6,13 +6,15 @@ interface EvaluateInitialCalculatedExpressionsParams {
|
|
|
6
6
|
calculatedExpressions: Record<string, CalculatedExpression[]>;
|
|
7
7
|
variablesFhirPath: Record<string, Expression[]>;
|
|
8
8
|
existingFhirPathContext: Record<string, any>;
|
|
9
|
+
fhirPathTerminologyCache: Record<string, any>;
|
|
9
10
|
terminologyServerUrl: string;
|
|
10
11
|
}
|
|
11
12
|
export declare function evaluateInitialCalculatedExpressions(params: EvaluateInitialCalculatedExpressionsParams): Promise<{
|
|
12
13
|
initialCalculatedExpressions: Record<string, CalculatedExpression[]>;
|
|
13
14
|
updatedFhirPathContext: Record<string, any>;
|
|
15
|
+
fhirPathTerminologyCache: Record<string, any>;
|
|
14
16
|
}>;
|
|
15
|
-
export declare function evaluateCalculatedExpressions(fhirPathContext: Record<string, any>, calculatedExpressions: Record<string, CalculatedExpression[]>, terminologyServerUrl: string): Promise<{
|
|
17
|
+
export declare function evaluateCalculatedExpressions(fhirPathContext: Record<string, any>, fhirPathTerminologyCache: Record<string, any>, calculatedExpressions: Record<string, CalculatedExpression[]>, terminologyServerUrl: string): Promise<{
|
|
16
18
|
calculatedExpsIsUpdated: boolean;
|
|
17
19
|
updatedCalculatedExpressions: Record<string, CalculatedExpression[]>;
|
|
18
20
|
}>;
|
|
@@ -35,25 +35,37 @@ import isEqual from 'lodash.isequal';
|
|
|
35
35
|
export function evaluateInitialCalculatedExpressions(params) {
|
|
36
36
|
return __awaiter(this, void 0, void 0, function* () {
|
|
37
37
|
const { initialResponse, initialResponseItemMap, calculatedExpressions, variablesFhirPath, existingFhirPathContext, terminologyServerUrl } = params;
|
|
38
|
+
let { fhirPathTerminologyCache } = params;
|
|
38
39
|
// Return early if initialResponse is empty or there are no calculated expressions to evaluate
|
|
39
40
|
if (isEqual(initialResponse, structuredClone(emptyResponse)) ||
|
|
40
41
|
Object.keys(calculatedExpressions).length === 0) {
|
|
41
42
|
return {
|
|
42
43
|
initialCalculatedExpressions: calculatedExpressions,
|
|
43
|
-
updatedFhirPathContext: existingFhirPathContext
|
|
44
|
+
updatedFhirPathContext: existingFhirPathContext,
|
|
45
|
+
fhirPathTerminologyCache
|
|
44
46
|
};
|
|
45
47
|
}
|
|
46
48
|
const initialCalculatedExpressions = Object.assign({}, calculatedExpressions);
|
|
47
|
-
const
|
|
49
|
+
const fhirPathEvalResult = yield createFhirPathContext(initialResponse, initialResponseItemMap, variablesFhirPath, existingFhirPathContext, fhirPathTerminologyCache, terminologyServerUrl);
|
|
50
|
+
const updatedFhirPathContext = fhirPathEvalResult.fhirPathContext;
|
|
51
|
+
fhirPathTerminologyCache = fhirPathEvalResult.fhirPathTerminologyCache;
|
|
48
52
|
for (const linkId in initialCalculatedExpressions) {
|
|
49
53
|
const itemCalcExpressions = calculatedExpressions[linkId];
|
|
50
54
|
for (const calcExpression of itemCalcExpressions) {
|
|
55
|
+
const cacheKey = JSON.stringify(calcExpression.expression); // Use expression as cache key
|
|
56
|
+
if (fhirPathTerminologyCache[cacheKey]) {
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
51
59
|
try {
|
|
52
60
|
const fhirPathResult = fhirpath.evaluate({}, calcExpression.expression, updatedFhirPathContext, fhirpath_r4_model, {
|
|
53
61
|
async: true,
|
|
54
62
|
terminologyUrl: terminologyServerUrl
|
|
55
63
|
});
|
|
56
64
|
const result = yield handleFhirPathResult(fhirPathResult);
|
|
65
|
+
// If fhirPathResult is an async terminology call, cache the result
|
|
66
|
+
if (fhirPathResult instanceof Promise) {
|
|
67
|
+
fhirPathTerminologyCache[cacheKey] = result;
|
|
68
|
+
}
|
|
57
69
|
// Only update calculatedExpressions if length of result array > 0
|
|
58
70
|
if (result.length > 0 && !isEqual(calcExpression.value, result[0])) {
|
|
59
71
|
calcExpression.value = result[0];
|
|
@@ -67,23 +79,32 @@ export function evaluateInitialCalculatedExpressions(params) {
|
|
|
67
79
|
}
|
|
68
80
|
return {
|
|
69
81
|
initialCalculatedExpressions,
|
|
70
|
-
updatedFhirPathContext
|
|
82
|
+
updatedFhirPathContext,
|
|
83
|
+
fhirPathTerminologyCache
|
|
71
84
|
};
|
|
72
85
|
});
|
|
73
86
|
}
|
|
74
|
-
export function evaluateCalculatedExpressions(fhirPathContext, calculatedExpressions, terminologyServerUrl) {
|
|
87
|
+
export function evaluateCalculatedExpressions(fhirPathContext, fhirPathTerminologyCache, calculatedExpressions, terminologyServerUrl) {
|
|
75
88
|
return __awaiter(this, void 0, void 0, function* () {
|
|
76
89
|
const updatedCalculatedExpressions = Object.assign({}, calculatedExpressions);
|
|
77
90
|
let isUpdated = false;
|
|
78
91
|
for (const linkId in calculatedExpressions) {
|
|
79
92
|
const itemCalcExpressions = calculatedExpressions[linkId];
|
|
80
93
|
for (const calcExpression of itemCalcExpressions) {
|
|
94
|
+
const cacheKey = JSON.stringify(calcExpression.expression); // Use expression as cache key
|
|
95
|
+
if (fhirPathTerminologyCache[cacheKey]) {
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
81
98
|
try {
|
|
82
99
|
const fhirPathResult = fhirpath.evaluate({}, calcExpression.expression, fhirPathContext, fhirpath_r4_model, {
|
|
83
100
|
async: true,
|
|
84
101
|
terminologyUrl: terminologyServerUrl
|
|
85
102
|
});
|
|
86
103
|
const result = yield handleFhirPathResult(fhirPathResult);
|
|
104
|
+
// If fhirPathResult is an async terminology call, cache the result
|
|
105
|
+
if (fhirPathResult instanceof Promise) {
|
|
106
|
+
fhirPathTerminologyCache[cacheKey] = result;
|
|
107
|
+
}
|
|
87
108
|
// Update calculatedExpressions if length of result array > 0
|
|
88
109
|
// Only update when current calcExpression value is different from the result, otherwise it will result in an infinite loop as per issue #733
|
|
89
110
|
if (result.length > 0 && !isEqual(calcExpression.value, result[0])) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculatedExpression.js","sourceRoot":"","sources":["../../src/utils/calculatedExpression.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;;;;;;;;;;AAGH,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,iBAAiB,MAAM,0BAA0B,CAAC;AAUzD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,OAAO,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"calculatedExpression.js","sourceRoot":"","sources":["../../src/utils/calculatedExpression.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,17 +6,19 @@ interface EvaluateInitialEnableWhenExpressionsParams {
|
|
|
6
6
|
enableWhenExpressions: EnableWhenExpressions;
|
|
7
7
|
variablesFhirPath: Record<string, Expression[]>;
|
|
8
8
|
existingFhirPathContext: Record<string, any>;
|
|
9
|
+
fhirPathTerminologyCache: Record<string, any>;
|
|
9
10
|
terminologyServerUrl: string;
|
|
10
11
|
}
|
|
11
12
|
export declare function evaluateInitialEnableWhenExpressions(params: EvaluateInitialEnableWhenExpressionsParams): Promise<{
|
|
12
13
|
initialEnableWhenExpressions: EnableWhenExpressions;
|
|
13
14
|
updatedFhirPathContext: Record<string, any>;
|
|
15
|
+
fhirPathTerminologyCache: Record<string, any>;
|
|
14
16
|
}>;
|
|
15
17
|
export declare function evaluateEnableWhenRepeatExpressionInstance(linkId: string, fhirPathContext: Record<string, any>, enableWhenRepeatExpression: EnableWhenRepeatExpression, lastLinkIdIndex: number, instanceIndex: number, terminologyServerUrl: string): Promise<{
|
|
16
18
|
isEnabled: boolean | null;
|
|
17
19
|
isUpdated: boolean;
|
|
18
20
|
}>;
|
|
19
|
-
export declare function evaluateEnableWhenExpressions(fhirPathContext: Record<string, any>, enableWhenExpressions: EnableWhenExpressions, terminologyServerUrl: string): Promise<{
|
|
21
|
+
export declare function evaluateEnableWhenExpressions(fhirPathContext: Record<string, any>, fhirPathTerminologyCache: Record<string, any>, enableWhenExpressions: EnableWhenExpressions, terminologyServerUrl: string): Promise<{
|
|
20
22
|
enableWhenExpsIsUpdated: boolean;
|
|
21
23
|
updatedEnableWhenExpressions: EnableWhenExpressions;
|
|
22
24
|
}>;
|
|
@@ -25,6 +27,7 @@ interface MutateRepeatEnableWhenExpressionInstancesParams {
|
|
|
25
27
|
questionnaireResponseItemMap: Record<string, QuestionnaireResponseItem[]>;
|
|
26
28
|
variablesFhirPath: Record<string, Expression[]>;
|
|
27
29
|
existingFhirPathContext: Record<string, any>;
|
|
30
|
+
fhirPathTerminologyCache: Record<string, any>;
|
|
28
31
|
enableWhenExpressions: EnableWhenExpressions;
|
|
29
32
|
parentRepeatGroupLinkId: string;
|
|
30
33
|
parentRepeatGroupIndex: number;
|
|
@@ -29,31 +29,43 @@ import fhirpath_r4_model from 'fhirpath/fhir-context/r4';
|
|
|
29
29
|
export function evaluateInitialEnableWhenExpressions(params) {
|
|
30
30
|
return __awaiter(this, void 0, void 0, function* () {
|
|
31
31
|
const { initialResponse, initialResponseItemMap, enableWhenExpressions, variablesFhirPath, existingFhirPathContext, terminologyServerUrl } = params;
|
|
32
|
+
let { fhirPathTerminologyCache } = params;
|
|
32
33
|
const initialEnableWhenExpressions = Object.assign({}, enableWhenExpressions);
|
|
33
|
-
const
|
|
34
|
-
const
|
|
34
|
+
const fhirPathEvalResult = yield createFhirPathContext(initialResponse, initialResponseItemMap, variablesFhirPath, existingFhirPathContext, fhirPathTerminologyCache, terminologyServerUrl);
|
|
35
|
+
const updatedFhirPathContext = fhirPathEvalResult.fhirPathContext;
|
|
36
|
+
fhirPathTerminologyCache = fhirPathEvalResult.fhirPathTerminologyCache;
|
|
37
|
+
const initialEnableWhenSingleExpressions = yield evaluateEnableWhenSingleExpressions(initialEnableWhenExpressions.singleExpressions, updatedFhirPathContext, fhirPathTerminologyCache, terminologyServerUrl);
|
|
35
38
|
const initialEnableWhenRepeatExpressions = yield evaluateEnableWhenRepeatExpressions(initialEnableWhenExpressions.repeatExpressions, updatedFhirPathContext, terminologyServerUrl);
|
|
36
39
|
return {
|
|
37
40
|
initialEnableWhenExpressions: {
|
|
38
41
|
singleExpressions: initialEnableWhenSingleExpressions.updatedExpressions,
|
|
39
42
|
repeatExpressions: initialEnableWhenRepeatExpressions.updatedExpressions
|
|
40
43
|
},
|
|
41
|
-
updatedFhirPathContext
|
|
44
|
+
updatedFhirPathContext,
|
|
45
|
+
fhirPathTerminologyCache
|
|
42
46
|
};
|
|
43
47
|
});
|
|
44
48
|
}
|
|
45
|
-
function evaluateEnableWhenSingleExpressions(enableWhenSingleExpressions, updatedFhirPathContext, terminologyServerUrl) {
|
|
49
|
+
function evaluateEnableWhenSingleExpressions(enableWhenSingleExpressions, updatedFhirPathContext, fhirPathTerminologyCache, terminologyServerUrl) {
|
|
46
50
|
return __awaiter(this, void 0, void 0, function* () {
|
|
47
51
|
let isUpdated = false;
|
|
48
52
|
for (const linkId in enableWhenSingleExpressions) {
|
|
49
53
|
const initialValue = enableWhenSingleExpressions[linkId].isEnabled;
|
|
50
54
|
const expression = enableWhenSingleExpressions[linkId].expression;
|
|
55
|
+
const cacheKey = JSON.stringify(expression); // Use expression as cache key
|
|
56
|
+
if (fhirPathTerminologyCache[cacheKey]) {
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
51
59
|
try {
|
|
52
60
|
const fhirPathResult = fhirpath.evaluate({}, expression, updatedFhirPathContext, fhirpath_r4_model, {
|
|
53
61
|
async: true,
|
|
54
62
|
terminologyUrl: terminologyServerUrl
|
|
55
63
|
});
|
|
56
64
|
const result = yield handleFhirPathResult(fhirPathResult);
|
|
65
|
+
// If fhirPathResult is an async terminology call, cache the result
|
|
66
|
+
if (fhirPathResult instanceof Promise) {
|
|
67
|
+
fhirPathTerminologyCache[cacheKey] = result;
|
|
68
|
+
}
|
|
57
69
|
// Update enableWhenExpressions if length of result array > 0
|
|
58
70
|
// Only update when current isEnabled value is different from the result, otherwise it will result in an infinite loop as per issue #733
|
|
59
71
|
if (result.length > 0 && initialValue !== result[0] && typeof result[0] === 'boolean') {
|
|
@@ -154,10 +166,10 @@ export function evaluateEnableWhenRepeatExpressionInstance(linkId, fhirPathConte
|
|
|
154
166
|
return { isEnabled, isUpdated };
|
|
155
167
|
});
|
|
156
168
|
}
|
|
157
|
-
export function evaluateEnableWhenExpressions(fhirPathContext, enableWhenExpressions, terminologyServerUrl) {
|
|
169
|
+
export function evaluateEnableWhenExpressions(fhirPathContext, fhirPathTerminologyCache, enableWhenExpressions, terminologyServerUrl) {
|
|
158
170
|
return __awaiter(this, void 0, void 0, function* () {
|
|
159
171
|
const updatedEnableWhenExpressions = Object.assign({}, enableWhenExpressions);
|
|
160
|
-
const updatedEnableWhenSingleExpressions = yield evaluateEnableWhenSingleExpressions(updatedEnableWhenExpressions.singleExpressions, fhirPathContext, terminologyServerUrl);
|
|
172
|
+
const updatedEnableWhenSingleExpressions = yield evaluateEnableWhenSingleExpressions(updatedEnableWhenExpressions.singleExpressions, fhirPathContext, fhirPathTerminologyCache, terminologyServerUrl);
|
|
161
173
|
const updatedEnableWhenRepeatExpressions = yield evaluateEnableWhenRepeatExpressions(updatedEnableWhenExpressions.repeatExpressions, fhirPathContext, terminologyServerUrl);
|
|
162
174
|
const isUpdated = updatedEnableWhenSingleExpressions.isUpdated || updatedEnableWhenRepeatExpressions.isUpdated;
|
|
163
175
|
return {
|
|
@@ -171,9 +183,10 @@ export function evaluateEnableWhenExpressions(fhirPathContext, enableWhenExpress
|
|
|
171
183
|
}
|
|
172
184
|
export function mutateRepeatEnableWhenExpressionInstances(params) {
|
|
173
185
|
return __awaiter(this, void 0, void 0, function* () {
|
|
174
|
-
const { questionnaireResponse, questionnaireResponseItemMap, variablesFhirPath, existingFhirPathContext, enableWhenExpressions, parentRepeatGroupLinkId, parentRepeatGroupIndex, actionType, terminologyServerUrl } = params;
|
|
186
|
+
const { questionnaireResponse, questionnaireResponseItemMap, variablesFhirPath, fhirPathTerminologyCache, existingFhirPathContext, enableWhenExpressions, parentRepeatGroupLinkId, parentRepeatGroupIndex, actionType, terminologyServerUrl } = params;
|
|
175
187
|
const { repeatExpressions } = enableWhenExpressions;
|
|
176
|
-
const
|
|
188
|
+
const fhirPathEvalResult = yield createFhirPathContext(questionnaireResponse, questionnaireResponseItemMap, variablesFhirPath, existingFhirPathContext, fhirPathTerminologyCache, terminologyServerUrl);
|
|
189
|
+
const updatedFhirPathContext = fhirPathEvalResult.fhirPathContext;
|
|
177
190
|
let isUpdated = false;
|
|
178
191
|
for (const linkId in repeatExpressions) {
|
|
179
192
|
if (repeatExpressions[linkId].parentLinkId !== parentRepeatGroupLinkId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enableWhenExpression.js","sourceRoot":"","sources":["../../src/utils/enableWhenExpression.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;;;;;;;;;;AAGH,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,iBAAiB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"enableWhenExpression.js","sourceRoot":"","sources":["../../src/utils/enableWhenExpression.ts"],"names":[],"mappings":"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"}
|
package/lib/utils/fhirpath.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ interface EvaluateUpdatedExpressionsParams {
|
|
|
8
8
|
enableWhenExpressions: EnableWhenExpressions;
|
|
9
9
|
variablesFhirPath: Record<string, Expression[]>;
|
|
10
10
|
existingFhirPathContext: Record<string, any>;
|
|
11
|
+
fhirPathTerminologyCache: Record<string, any>;
|
|
11
12
|
terminologyServerUrl: string;
|
|
12
13
|
}
|
|
13
14
|
export declare function evaluateUpdatedExpressions(params: EvaluateUpdatedExpressionsParams): Promise<{
|
|
@@ -15,10 +16,20 @@ export declare function evaluateUpdatedExpressions(params: EvaluateUpdatedExpres
|
|
|
15
16
|
updatedEnableWhenExpressions: EnableWhenExpressions;
|
|
16
17
|
updatedCalculatedExpressions: Record<string, CalculatedExpression[]>;
|
|
17
18
|
updatedFhirPathContext: Record<string, any>;
|
|
19
|
+
fhirPathTerminologyCache: Record<string, any>;
|
|
20
|
+
}>;
|
|
21
|
+
export declare function createFhirPathContext(questionnaireResponse: QuestionnaireResponse, questionnaireResponseItemMap: Record<string, QuestionnaireResponseItem[]>, variablesFhirPath: Record<string, Expression[]>, existingFhirPathContext: Record<string, any>, fhirPathTerminologyCache: Record<string, any>, terminologyServerUrl: string): Promise<{
|
|
22
|
+
fhirPathContext: Record<string, any>;
|
|
23
|
+
fhirPathTerminologyCache: Record<string, any>;
|
|
24
|
+
}>;
|
|
25
|
+
export declare function evaluateLinkIdVariables(item: QuestionnaireResponseItem, variablesFhirPath: Record<string, Expression[]>, fhirPathContext: Record<string, any>, fhirPathTerminologyCache: Record<string, any>, terminologyServerUrl: string): Promise<{
|
|
26
|
+
fhirPathContext: Record<string, any>;
|
|
27
|
+
fhirPathTerminologyCache: Record<string, any>;
|
|
18
28
|
}>;
|
|
19
|
-
export declare function createFhirPathContext(questionnaireResponse: QuestionnaireResponse, questionnaireResponseItemMap: Record<string, QuestionnaireResponseItem[]>, variablesFhirPath: Record<string, Expression[]>, existingFhirPathContext: Record<string, any>, terminologyServerUrl: string): Promise<Record<string, any>>;
|
|
20
|
-
export declare function evaluateLinkIdVariables(item: QuestionnaireResponseItem, variablesFhirPath: Record<string, Expression[]>, fhirPathContext: Record<string, any>, terminologyServerUrl: string): Promise<Record<string, any>>;
|
|
21
29
|
export declare function addEmptyLinkIdVariables(linkId: string, variablesFhirPath: Record<string, Expression[]>, fhirPathContext: Record<string, any>): Record<string, any>;
|
|
22
|
-
export declare function evaluateQuestionnaireLevelVariables(resource: QuestionnaireResponse, variablesFhirPath: Record<string, Expression[]>, fhirPathContext: Record<string, any>, terminologyServerUrl: string): Promise<
|
|
30
|
+
export declare function evaluateQuestionnaireLevelVariables(resource: QuestionnaireResponse, variablesFhirPath: Record<string, Expression[]>, fhirPathContext: Record<string, any>, fhirPathTerminologyCache: Record<string, any>, terminologyServerUrl: string): Promise<{
|
|
31
|
+
fhirPathContext: Record<string, any>;
|
|
32
|
+
fhirPathTerminologyCache: Record<string, any>;
|
|
33
|
+
}>;
|
|
23
34
|
export declare function handleFhirPathResult(result: any[] | Promise<any[]>): Promise<any[]>;
|
|
24
35
|
export {};
|