sdc-qrf 0.3.5 → 0.3.8
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.d.ts +1 -1
- package/lib/components.js +12 -16
- package/lib/components.js.map +1 -1
- package/lib/converter/extensions.d.ts +1 -0
- package/lib/converter/extensions.js +5 -0
- package/lib/converter/extensions.js.map +1 -1
- package/lib/converter/fceToFhir/questionnaire/processItems.js +11 -0
- package/lib/converter/fceToFhir/questionnaire/processItems.js.map +1 -1
- package/lib/converter/fhirToFce/questionnaire/processItems.js +15 -4
- package/lib/converter/fhirToFce/questionnaire/processItems.js.map +1 -1
- package/lib/converter/index.d.ts +1 -0
- package/lib/converter/index.js +1 -0
- package/lib/converter/index.js.map +1 -1
- package/lib/converter/utils.d.ts +1 -0
- package/lib/converter/utils.js +29 -0
- package/lib/converter/utils.js.map +1 -0
- package/package.json +1 -1
- package/src/components.tsx +21 -37
- package/src/converter/__tests__/fce.test.ts +5 -24
- package/src/converter/__tests__/resources/questionnaire_fce/cqf-examples.json +75 -0
- package/src/converter/__tests__/resources/questionnaire_fhir/cqf-examples.json +100 -0
- package/src/converter/extensions.ts +5 -0
- package/src/converter/fceToFhir/questionnaire/processItems.ts +13 -0
- package/src/converter/fhirToFce/questionnaire/processItems.ts +16 -0
- package/src/converter/index.ts +1 -0
- package/src/converter/utils.ts +24 -0
package/lib/components.d.ts
CHANGED
|
@@ -7,4 +7,4 @@ export declare function QuestionItem(props: QuestionItemProps): import("react/js
|
|
|
7
7
|
export declare function QuestionnaireResponseFormProvider({ children, ...props }: QRFContextData & {
|
|
8
8
|
children: ReactChild;
|
|
9
9
|
}): import("react/jsx-runtime").JSX.Element;
|
|
10
|
-
export declare function evaluateQuestionItemExpression(linkId: string, path: string, context: ItemContext, expression?: Expression): any;
|
|
10
|
+
export declare function evaluateQuestionItemExpression(linkId: string, path: string, context: ItemContext, expression?: Expression): any[];
|
package/lib/components.js
CHANGED
|
@@ -24,12 +24,11 @@ exports.usePreviousValue = usePreviousValue;
|
|
|
24
24
|
function QuestionItems(props) {
|
|
25
25
|
const { questionItems, parentPath, context } = props;
|
|
26
26
|
const { formValues } = (0, _1.useQuestionnaireResponseFormContext)();
|
|
27
|
-
return ((0, jsx_runtime_1.jsx)(react_1.default.Fragment, { children: (0, utils_1.getEnabledQuestions)(questionItems, parentPath, formValues, context).map((item
|
|
28
|
-
return ((0, jsx_runtime_1.jsx)(QuestionItem, { questionItem: item, context: context, parentPath: parentPath },
|
|
27
|
+
return ((0, jsx_runtime_1.jsx)(react_1.default.Fragment, { children: (0, utils_1.getEnabledQuestions)(questionItems, parentPath, formValues, context).map((item) => {
|
|
28
|
+
return ((0, jsx_runtime_1.jsx)(QuestionItem, { questionItem: item, context: context, parentPath: parentPath }, item.linkId));
|
|
29
29
|
}) }));
|
|
30
30
|
}
|
|
31
31
|
exports.QuestionItems = QuestionItems;
|
|
32
|
-
const cqfExpressionExtensionUrl = 'http://hl7.org/fhir/StructureDefinition/cqf-expression';
|
|
33
32
|
function QuestionItem(props) {
|
|
34
33
|
const { questionItem: initialQuestionItem, context: initialContext, parentPath } = props;
|
|
35
34
|
const { questionItemComponents, customWidgets, groupItemComponent, itemControlQuestionItemComponents, itemControlGroupItemComponents, } = (0, react_1.useContext)(context_1.QRFContext);
|
|
@@ -44,7 +43,7 @@ function QuestionItem(props) {
|
|
|
44
43
|
? branchItems.qrItems.map((curQRItem) => (0, utils_1.calcContext)(initialContext, variable, branchItems.qItem, curQRItem))
|
|
45
44
|
: (0, utils_1.calcContext)(initialContext, variable, branchItems.qItem, branchItems.qrItems[0]);
|
|
46
45
|
const prevAnswers = usePreviousValue(lodash_1.default.get(formValues, fieldPath));
|
|
47
|
-
const itemContext =
|
|
46
|
+
const itemContext = isGroupItem(questionItem, context) ? context[0] : context;
|
|
48
47
|
(0, react_1.useEffect)(() => {
|
|
49
48
|
// TODO: think about use cases for group context
|
|
50
49
|
if (itemContext && calculatedExpression) {
|
|
@@ -77,25 +76,22 @@ function QuestionItem(props) {
|
|
|
77
76
|
(0, react_1.useEffect)(() => {
|
|
78
77
|
var _a, _b, _c;
|
|
79
78
|
if (itemContext && _text) {
|
|
80
|
-
const
|
|
81
|
-
const
|
|
82
|
-
const calculatedValue = (_a = evaluateQuestionItemExpression(linkId, '_text.cqfExpression', itemContext, cqfExpression)) !== null && _a !== void 0 ? _a : initialQuestionItem.text;
|
|
79
|
+
const cqfExpression = _text.cqfExpression;
|
|
80
|
+
const calculatedValue = (_a = evaluateQuestionItemExpression(linkId, '_text.cqfExpression', itemContext, cqfExpression)[0]) !== null && _a !== void 0 ? _a : initialQuestionItem.text;
|
|
83
81
|
if ((prevQuestionItem === null || prevQuestionItem === void 0 ? void 0 : prevQuestionItem.text) !== calculatedValue) {
|
|
84
82
|
setQuestionItem((qi) => (Object.assign(Object.assign({}, qi), { text: calculatedValue })));
|
|
85
83
|
}
|
|
86
84
|
}
|
|
87
85
|
if (itemContext && _readOnly) {
|
|
88
|
-
const
|
|
89
|
-
const
|
|
90
|
-
const calculatedValue = (_b = evaluateQuestionItemExpression(linkId, '_readOnly.cqfExpression', itemContext, cqfExpression)) !== null && _b !== void 0 ? _b : initialQuestionItem.readOnly;
|
|
86
|
+
const cqfExpression = _readOnly.cqfExpression;
|
|
87
|
+
const calculatedValue = (_b = evaluateQuestionItemExpression(linkId, '_readOnly.cqfExpression', itemContext, cqfExpression)[0]) !== null && _b !== void 0 ? _b : initialQuestionItem.readOnly;
|
|
91
88
|
if ((prevQuestionItem === null || prevQuestionItem === void 0 ? void 0 : prevQuestionItem.readOnly) !== calculatedValue) {
|
|
92
89
|
setQuestionItem((qi) => (Object.assign(Object.assign({}, qi), { readOnly: calculatedValue })));
|
|
93
90
|
}
|
|
94
91
|
}
|
|
95
92
|
if (itemContext && _required) {
|
|
96
|
-
const
|
|
97
|
-
const
|
|
98
|
-
const calculatedValue = (_c = evaluateQuestionItemExpression(linkId, '_required.cqfExpression', itemContext, cqfExpression)) !== null && _c !== void 0 ? _c : initialQuestionItem.required;
|
|
93
|
+
const cqfExpression = _required.cqfExpression;
|
|
94
|
+
const calculatedValue = (_c = evaluateQuestionItemExpression(linkId, '_required.cqfExpression', itemContext, cqfExpression)[0]) !== null && _c !== void 0 ? _c : initialQuestionItem.required;
|
|
99
95
|
if ((prevQuestionItem === null || prevQuestionItem === void 0 ? void 0 : prevQuestionItem.required) !== calculatedValue) {
|
|
100
96
|
setQuestionItem((qi) => (Object.assign(Object.assign({}, qi), { required: calculatedValue })));
|
|
101
97
|
}
|
|
@@ -162,14 +158,14 @@ function isGroupItem(questionItem, context) {
|
|
|
162
158
|
function evaluateQuestionItemExpression(linkId, path, context, expression) {
|
|
163
159
|
var _a;
|
|
164
160
|
if (!expression) {
|
|
165
|
-
return;
|
|
161
|
+
return [];
|
|
166
162
|
}
|
|
167
163
|
if (expression.language !== 'text/fhirpath') {
|
|
168
164
|
console.error('Only fhirpath expression is supported');
|
|
169
|
-
return;
|
|
165
|
+
return [];
|
|
170
166
|
}
|
|
171
167
|
try {
|
|
172
|
-
return fhirpath_1.default.evaluate((_a = context.context) !== null && _a !== void 0 ? _a : {}, expression.expression, context)
|
|
168
|
+
return fhirpath_1.default.evaluate((_a = context.context) !== null && _a !== void 0 ? _a : {}, expression.expression, context);
|
|
173
169
|
}
|
|
174
170
|
catch (err) {
|
|
175
171
|
throw Error(`FHIRPath expression evaluation failure for ${linkId}.${path}: ${err}`);
|
package/lib/components.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":";;;;;AACA,gEAAgC;AAChC,4DAAuB;AACvB,qEAAqC;AACrC,uDAA4F;AAI5F,wBAAwD;AACxD,uCAAuC;AAQvC,
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,7 @@ export declare enum ExtensionIdentifier {
|
|
|
31
31
|
CalculatedExpression = "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-calculatedExpression",
|
|
32
32
|
EnableWhenExpression = "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-enableWhenExpression",
|
|
33
33
|
AnswerExpression = "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-answerExpression",
|
|
34
|
+
CqfExpression = "http://hl7.org/fhir/StructureDefinition/cqf-expression",
|
|
34
35
|
AdjustLastToRight = "https://beda.software/fhir-emr-questionnaire/adjust-last-to-right",
|
|
35
36
|
SliderStart = "https://beda.software/fhir-emr-questionnaire/slider-start",
|
|
36
37
|
SliderStop = "https://beda.software/fhir-emr-questionnaire/slider-stop",
|
|
@@ -33,6 +33,7 @@ var ExtensionIdentifier;
|
|
|
33
33
|
ExtensionIdentifier["CalculatedExpression"] = "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-calculatedExpression";
|
|
34
34
|
ExtensionIdentifier["EnableWhenExpression"] = "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-enableWhenExpression";
|
|
35
35
|
ExtensionIdentifier["AnswerExpression"] = "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-answerExpression";
|
|
36
|
+
ExtensionIdentifier["CqfExpression"] = "http://hl7.org/fhir/StructureDefinition/cqf-expression";
|
|
36
37
|
ExtensionIdentifier["AdjustLastToRight"] = "https://beda.software/fhir-emr-questionnaire/adjust-last-to-right";
|
|
37
38
|
ExtensionIdentifier["SliderStart"] = "https://beda.software/fhir-emr-questionnaire/slider-start";
|
|
38
39
|
ExtensionIdentifier["SliderStop"] = "https://beda.software/fhir-emr-questionnaire/slider-stop";
|
|
@@ -198,6 +199,10 @@ exports.extensionTransformers = {
|
|
|
198
199
|
},
|
|
199
200
|
},
|
|
200
201
|
},
|
|
202
|
+
[ExtensionIdentifier.CqfExpression]: {
|
|
203
|
+
// @ts-ignore
|
|
204
|
+
path: { extension: 'valueExpression', questionnaire: 'cqfExpression' },
|
|
205
|
+
},
|
|
201
206
|
[ExtensionIdentifier.AdjustLastToRight]: {
|
|
202
207
|
path: { extension: 'valueBoolean', questionnaire: 'adjustLastToRight' },
|
|
203
208
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extensions.js","sourceRoot":"","sources":["../../src/converter/extensions.ts"],"names":[],"mappings":";;;AAIA,IAAY,
|
|
1
|
+
{"version":3,"file":"extensions.js","sourceRoot":"","sources":["../../src/converter/extensions.ts"],"names":[],"mappings":";;;AAIA,IAAY,mBAyCX;AAzCD,WAAY,mBAAmB;IAC3B,8FAAuE,CAAA;IACvE,wGAAiF,CAAA;IACjF,gHAAyF,CAAA;IACzF,0FAAmE,CAAA;IACnE,sGAA+E,CAAA;IAC/E,oHAA6F,CAAA;IAC7F,0FAAmE,CAAA;IACnE,mFAA4D,CAAA;IAC5D,+GAAwF,CAAA;IACxF,8EAAuD,CAAA;IACvD,iIAA0G,CAAA;IAC1G,uIAAgH,CAAA;IAChH,oFAA6D,CAAA;IAC7D,oFAA6D,CAAA;IAC7D,mHAA4F,CAAA;IAC5F,mHAA4F,CAAA;IAC5F,2FAAoE,CAAA;IACpE,iJAA0H,CAAA;IAC1H,+GAAwF,CAAA;IACxF,yFAAkE,CAAA;IAClE,oFAA6D,CAAA;IAC7D,oHAA6F,CAAA;IAC7F,qHAA8F,CAAA;IAC9F,8GAAuF,CAAA;IAEvF,uIAAgH,CAAA;IAChH,+HAAwG,CAAA;IACxG,qHAA8F,CAAA;IAC9F,qIAA8G,CAAA;IAC9G,qIAA8G,CAAA;IAC9G,6HAAsG,CAAA;IACtG,+FAAwE,CAAA;IAExE,8GAAuF,CAAA;IACvF,gGAAyE,CAAA;IACzE,8FAAuE,CAAA;IACvE,0FAAmE,CAAA;IACnE,mGAA4E,CAAA;IAC5E,mFAA4D,CAAA;IAC5D,8FAAuE,CAAA;AAC3E,CAAC,EAzCW,mBAAmB,mCAAnB,mBAAmB,QAyC9B;AAoBY,QAAA,qBAAqB,GAAyB;IACvD,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE;QAC1B,IAAI,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,QAAQ,EAAE;KAC/D;IACD,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE;QAC/B,IAAI,EAAE,EAAE,SAAS,EAAE,sBAAsB,EAAE,aAAa,EAAE,aAAa,EAAE;KAC5E;IACD,CAAC,mBAAmB,CAAC,eAAe,CAAC,EAAE;QACnC,IAAI,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE;KACxE;IACD,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE;QAC/B,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE;KACnE;IACD,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE;QACxB,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE;KAC5D;IACD,CAAC,mBAAmB,CAAC,UAAU,CAAC,EAAE;QAC9B,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE;KAClE;IACD,CAAC,mBAAmB,CAAC,UAAU,CAAC,EAAE;QAC9B,IAAI,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE;KACnE;IACD,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,EAAE;QACrC,SAAS,EAAE;YACP,aAAa,EAAE,CAAC,SAAS,EAAE,EAAE;gBACzB,IAAI,SAAS,CAAC,SAAS,EAAE;oBACrB,OAAO,EAAE,iBAAiB,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;iBACvD;qBAAM;oBACH,OAAO,EAAE,CAAC;iBACb;YACL,CAAC;YACD,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE;;gBAClB,IAAI,MAAA,IAAI,CAAC,iBAAiB,0CAAE,MAAM,EAAE;oBAChC,OAAO;wBACH,GAAG,EAAE,mBAAmB,CAAC,iBAAiB;wBAC1C,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;qBACvC,CAAC;iBACL;YACL,CAAC;SACJ;KACJ;IACD,CAAC,mBAAmB,CAAC,UAAU,CAAC,EAAE;QAC9B,IAAI,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE;KACnE;IACD,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE;QAC7B,IAAI,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,aAAa,EAAE,WAAW,EAAE;KACrE;IACD,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE;QACzB,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE;KAC7D;IACD,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,EAAE;QACtC,IAAI,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,oBAAoB,EAAE;KAC3E;IACD,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,EAAE;QACzC,IAAI,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,uBAAuB,EAAE;KAC/E;IACD,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE;QAC5B,SAAS,EAAE;YACP,aAAa,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;YACvD,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ;SACvC;KACJ;IACD,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE;QAC5B,SAAS,EAAE;YACP,aAAa,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;YACvD,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ;SACvC;KACJ;IACD,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE;QAC/B,SAAS,EAAE;YACP,aAAa,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;YAC1D,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW;SAC1C;KACJ;IACD,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE;QAC/B,SAAS,EAAE;YACP,aAAa,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;YAC1D,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW;SAC1C;KACJ;IACD,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE;QACpC,IAAI,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE;KACzE;IACD,CAAC,mBAAmB,CAAC,0BAA0B,CAAC,EAAE;QAC9C,IAAI,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,4BAA4B,EAAE;KAC/E;IACD,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE;QAC7B,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE;KACjE;IACD,CAAC,mBAAmB,CAAC,eAAe,CAAC,EAAE;QACnC,IAAI,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,aAAa,EAAE,iBAAiB,EAAE;KAC3E;IACD,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE;QAC5B,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE;KAChE;IACD,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,EAAE;QACrC,IAAI,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,mBAAmB,EAAE;KACvE;IACD,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,EAAE;QACzC,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,mBAAmB,EAAE;KACzE;IACD,CAAC,mBAAmB,CAAC,aAAa,CAAC,EAAE;QACjC,IAAI,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE;KACtE;IAED,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,EAAE;QACzC,IAAI,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,aAAa,EAAE,uBAAuB,EAAE;KACjF;IACD,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,EAAE;QACrC,IAAI,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,aAAa,EAAE,mBAAmB,EAAE;KAC7E;IACD,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,EAAE;QACxC,IAAI,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,aAAa,EAAE,sBAAsB,EAAE;KAChF;IACD,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,EAAE;QACxC,IAAI,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,aAAa,EAAE,sBAAsB,EAAE;KAChF;IACD,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE;QACpC,IAAI,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,aAAa,EAAE,kBAAkB,EAAE;KAC5E;IACD,CAAC,mBAAmB,CAAC,YAAY,CAAC,EAAE;QAChC,SAAS,EAAE;YACP,aAAa,EAAE,CAAC,SAAS,EAAE,EAAE;;gBACzB,MAAM,qBAAqB,GAAG,SAAS,CAAC,SAAS,CAAC;gBAClD,IAAI,qBAAqB,EAAE;oBACvB,OAAO;wBACH,YAAY,EAAE;4BACV;gCACI,UAAU,EACN,MAAA,MAAA,qBAAqB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,YAAY,CAAC,0CACvD,YAAY,mCAAI,KAAK;gCAC/B,IAAI,EAAE,MAAA,qBAAqB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC,0CACvD,WAAW;6BACpB;yBACJ;qBACJ,CAAC;iBACL;YACL,CAAC;YACD,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE;;gBAClB,IAAI,IAAI,CAAC,YAAY,EAAE;oBACnB,OAAO;wBACH,GAAG,EAAE,mBAAmB,CAAC,YAAY;wBACrC,SAAS,EAAE;4BACP;gCACI,GAAG,EAAE,YAAY;gCACjB,YAAY,EAAE,MAAA,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,0CAAE,UAAU;6BACjD;4BACD;gCACI,GAAG,EAAE,MAAM;gCACX,WAAW,EAAE,MAAA,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,0CAAE,IAAI;6BAC1C;yBACJ;qBACJ,CAAC;iBACL;YACL,CAAC;SACJ;KACJ;IACD,CAAC,mBAAmB,CAAC,aAAa,CAAC,EAAE;QACjC,aAAa;QACb,IAAI,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE;KACzE;IAED,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,EAAE;QACrC,IAAI,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,mBAAmB,EAAE;KAC1E;IACD,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE;QAC/B,IAAI,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE;KAC9D;IACD,CAAC,mBAAmB,CAAC,UAAU,CAAC,EAAE;QAC9B,IAAI,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE;KAC7D;IACD,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE;QAC5B,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE;KAChE;IACD,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE;QAC7B,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE;KACjE;IACD,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE;QACzB,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE;KAC7D;CACJ,CAAC"}
|
|
@@ -20,6 +20,17 @@ function processItems(items) {
|
|
|
20
20
|
}
|
|
21
21
|
const { enableBehavior, enableWhen, answerOption, initial, item: nestedItems, type } = item, commonOptions = tslib_1.__rest(item, ["enableBehavior", "enableWhen", "answerOption", "initial", "item", "type"]);
|
|
22
22
|
const fhirItem = Object.assign(Object.assign({}, commonOptions), { type: type });
|
|
23
|
+
for (const property of Object.keys(item)) {
|
|
24
|
+
const element = item[property];
|
|
25
|
+
if (property.startsWith('_') && element instanceof Object) {
|
|
26
|
+
// @ts-ignore
|
|
27
|
+
fhirItem[property] = {
|
|
28
|
+
// TODO: update convertToFHIRExtension to accept element type to convert
|
|
29
|
+
// @ts-ignore
|
|
30
|
+
extension: (0, __1.convertToFHIRExtension)(element),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
23
34
|
if (answerOption !== undefined) {
|
|
24
35
|
fhirItem.answerOption = processAnswerOption(answerOption);
|
|
25
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processItems.js","sourceRoot":"","sources":["../../../../src/converter/fceToFhir/questionnaire/processItems.ts"],"names":[],"mappings":";;;;AAOA,4DAAuB;AAUvB,6BAA0F;AAE1F,SAAgB,YAAY,CAAC,KAA6B;IACtD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACtB,MAAM,UAAU,GAAG,IAAA,0BAAsB,EAAC,IAAI,CAAC,CAAC;QAChD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YACvB,MAAM,YAAY,GAAG,UAAU;iBAC1B,GAAG,CAAC,4BAAwB,CAAC;iBAC7B,MAAM,CAAC,CAAC,GAAG,EAAwC,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC;iBACxE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1B,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE;gBAC9B,YAAY;gBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;aACtB;YACD,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;SACtC;QAED,MAAM,EACF,cAAc,EACd,UAAU,EACV,YAAY,EACZ,OAAO,EACP,IAAI,EAAE,WAAW,EACjB,IAAI,KAEJ,IAAI,EADD,aAAa,kBAChB,IAAI,EARF,2EAQL,CAAO,CAAC;QAET,MAAM,QAAQ,mCACP,aAAa,KAChB,IAAI,EAAE,IAAqC,GAC9C,CAAC;QAEF,IAAI,YAAY,KAAK,SAAS,EAAE;YAC5B,QAAQ,CAAC,YAAY,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;SAC7D;QAED,IAAI,cAAc,KAAK,SAAS,EAAE;YAC9B,QAAQ,CAAC,cAAc,GAAG,cAAyD,CAAC;SACvF;QAED,IAAI,UAAU,KAAK,SAAS,EAAE;YAC1B,QAAQ,CAAC,UAAU,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;SACvD;QAED,IAAI,OAAO,EAAE;YACT,QAAQ,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;SAC9C;QAED,IAAI,WAAW,EAAE;YACb,QAAQ,CAAC,IAAI,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;SAC7C;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC,CAAC,CAAC;AACP,CAAC;
|
|
1
|
+
{"version":3,"file":"processItems.js","sourceRoot":"","sources":["../../../../src/converter/fceToFhir/questionnaire/processItems.ts"],"names":[],"mappings":";;;;AAOA,4DAAuB;AAUvB,6BAA0F;AAE1F,SAAgB,YAAY,CAAC,KAA6B;IACtD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACtB,MAAM,UAAU,GAAG,IAAA,0BAAsB,EAAC,IAAI,CAAC,CAAC;QAChD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YACvB,MAAM,YAAY,GAAG,UAAU;iBAC1B,GAAG,CAAC,4BAAwB,CAAC;iBAC7B,MAAM,CAAC,CAAC,GAAG,EAAwC,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC;iBACxE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1B,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE;gBAC9B,YAAY;gBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;aACtB;YACD,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;SACtC;QAED,MAAM,EACF,cAAc,EACd,UAAU,EACV,YAAY,EACZ,OAAO,EACP,IAAI,EAAE,WAAW,EACjB,IAAI,KAEJ,IAAI,EADD,aAAa,kBAChB,IAAI,EARF,2EAQL,CAAO,CAAC;QAET,MAAM,QAAQ,mCACP,aAAa,KAChB,IAAI,EAAE,IAAqC,GAC9C,CAAC;QAEF,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAsC,CAAC,CAAC;YAE7D,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,YAAY,MAAM,EAAE;gBACvD,aAAa;gBACb,QAAQ,CAAC,QAAQ,CAAC,GAAG;oBACjB,wEAAwE;oBACxE,aAAa;oBACb,SAAS,EAAE,IAAA,0BAAsB,EAAC,OAAO,CAAC;iBAC7C,CAAC;aACL;SACJ;QAED,IAAI,YAAY,KAAK,SAAS,EAAE;YAC5B,QAAQ,CAAC,YAAY,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;SAC7D;QAED,IAAI,cAAc,KAAK,SAAS,EAAE;YAC9B,QAAQ,CAAC,cAAc,GAAG,cAAyD,CAAC;SACvF;QAED,IAAI,UAAU,KAAK,SAAS,EAAE;YAC1B,QAAQ,CAAC,UAAU,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;SACvD;QAED,IAAI,OAAO,EAAE;YACT,QAAQ,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;SAC9C;QAED,IAAI,WAAW,EAAE;YACb,QAAQ,CAAC,IAAI,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;SAC7C;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC,CAAC,CAAC;AACP,CAAC;AAjED,oCAiEC;AAED,MAAM,iBAAiB,GAAG,CACtB,MAA4C,EAC5C,UAAkB,EAClB,MAAuC,EACzC,EAAE;IACA,YAAY;IACZ,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE;QAClC,QAAQ,UAAU,EAAE;YAChB,KAAK,SAAS;gBACV,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;gBAC1C,MAAM;YACV,KAAK,SAAS;gBACV,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;gBAC1C,MAAM;YACV,KAAK,SAAS;gBACV,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;gBAC1C,MAAM;YACV,KAAK,MAAM;gBACP,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;gBACvC,MAAM;YACV,KAAK,UAAU;gBACX,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;gBAC3C,MAAM;YACV,KAAK,MAAM;gBACP,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;gBACvC,MAAM;YACV,KAAK,QAAQ;gBACT,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;gBACzC,MAAM;YACV,KAAK,QAAQ;gBACT,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;gBACzC,MAAM;YACV,KAAK,UAAU;gBACX,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,UAAU,CAAiB,CAAC;gBAC3D,MAAM;YACV,KAAK,WAAW;gBACZ,MAAM,CAAC,eAAe,GAAG,IAAA,mBAAe,EAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;gBAC7D,MAAM;YACV;gBACI,MAAM;SACb;KACJ;AACL,CAAC,CAAC;AAEF,SAAS,mBAAmB,CACxB,OAA2C;IAE3C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QAC1B,MAAM,EAAE,KAAK,KAAuB,MAAM,EAAxB,aAAa,kBAAK,MAAM,EAApC,SAA2B,CAAS,CAAC;QAE3C,MAAM,UAAU,qBAA2C,aAAa,CAAE,CAAC;QAE3E,IAAI,CAAC,KAAK,EAAE;YACR,OAAO,UAAU,CAAC;SACrB;QAED,IAAI,KAAK,CAAC,MAAM,EAAE;YACd,UAAU,CAAC,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC;SACzC;QACD,IAAI,KAAK,CAAC,MAAM,EAAE;YACd,UAAU,CAAC,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC;SACzC;QACD,IAAI,KAAK,CAAC,SAAS,EAAE;YACjB,UAAU,CAAC,cAAc,GAAG,IAAA,mBAAe,EAAC,KAAK,CAAC,SAAS,CAAC,CAAC;SAChE;QACD,IAAI,KAAK,CAAC,IAAI,EAAE;YACZ,UAAU,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;SACrC;QACD,IAAI,gBAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;YAC3B,UAAU,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC;SAC3C;QACD,IAAI,KAAK,CAAC,IAAI,EAAE;YACZ,UAAU,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;SACrC;QAED,OAAO,UAAU,CAAC;IACtB,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAyC;IAChE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAoC,EAAE,EAAE;QACxD,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAC5C,MAAM,MAAM,GAAoC;YAC5C,QAAQ;YACR,QAAQ,EAAE,QAA2D;SACxE,CAAC;QAEF,IAAI,CAAC,MAAM,EAAE;YACT,OAAO,MAAM,CAAC;SACjB;QAED,MAAM,WAAW,GAAG;YAChB,SAAS;YACT,SAAS;YACT,SAAS;YACT,MAAM;YACN,UAAU;YACV,MAAM;YACN,QAAQ;YACR,QAAQ;YACR,UAAU;YACV,WAAW;SACd,CAAC;QAEF,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;YAC/B,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,cAAc,CAAC,OAAsC;IAC1D,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;;QACzB,MAAM,MAAM,GAAiC,EAAE,CAAC;QAChD,IAAI,CAAA,MAAA,KAAK,CAAC,KAAK,0CAAE,OAAO,MAAK,SAAS,EAAE;YACpC,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;SAC7C;QACD,IAAI,CAAA,MAAA,KAAK,CAAC,KAAK,0CAAE,MAAM,MAAK,SAAS,EAAE;YACnC,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;SAC3C;QACD,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -21,7 +21,7 @@ function convertItemProperties(item) {
|
|
|
21
21
|
return newItem;
|
|
22
22
|
}
|
|
23
23
|
function getUpdatedPropertiesFromItem(item) {
|
|
24
|
-
var _a, _b, _c, _d;
|
|
24
|
+
var _a, _b, _c, _d, _e;
|
|
25
25
|
let updatedProperties = { linkId: item.linkId, type: item.type };
|
|
26
26
|
for (const identifier of Object.values(extensions_1.ExtensionIdentifier)) {
|
|
27
27
|
if (identifier === extensions_1.ExtensionIdentifier.UnitOption) {
|
|
@@ -32,14 +32,25 @@ function getUpdatedPropertiesFromItem(item) {
|
|
|
32
32
|
}
|
|
33
33
|
continue;
|
|
34
34
|
}
|
|
35
|
+
for (const property of Object.keys(item)) {
|
|
36
|
+
const element = item[property];
|
|
37
|
+
if (property.startsWith('_') && element instanceof Object) {
|
|
38
|
+
const primitiveExtensions = (_b = element === null || element === void 0 ? void 0 : element.extension) !== null && _b !== void 0 ? _b : [];
|
|
39
|
+
for (const extension of primitiveExtensions) {
|
|
40
|
+
if (extension.url === identifier) {
|
|
41
|
+
updatedProperties = Object.assign(Object.assign({}, updatedProperties), { [property]: (0, converter_1.convertFromFHIRExtension)(extension) });
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
35
46
|
const extension = (0, converter_1.findExtension)(item, identifier);
|
|
36
47
|
if (extension !== undefined) {
|
|
37
48
|
updatedProperties = Object.assign(Object.assign({}, updatedProperties), (0, converter_1.convertFromFHIRExtension)(extension));
|
|
38
49
|
}
|
|
39
50
|
}
|
|
40
|
-
updatedProperties.answerOption = (
|
|
41
|
-
updatedProperties.initial = (
|
|
42
|
-
updatedProperties.enableWhen = (
|
|
51
|
+
updatedProperties.answerOption = (_c = item.answerOption) === null || _c === void 0 ? void 0 : _c.map(processItemOption);
|
|
52
|
+
updatedProperties.initial = (_d = item.initial) === null || _d === void 0 ? void 0 : _d.map(processItemOption);
|
|
53
|
+
updatedProperties.enableWhen = (_e = item.enableWhen) === null || _e === void 0 ? void 0 : _e.map(processEnableWhenItem);
|
|
43
54
|
return updatedProperties;
|
|
44
55
|
}
|
|
45
56
|
function processEnableWhenItem(item) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processItems.js","sourceRoot":"","sources":["../../../../src/converter/fhirToFce/questionnaire/processItems.ts"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"processItems.js","sourceRoot":"","sources":["../../../../src/converter/fhirToFce/questionnaire/processItems.ts"],"names":[],"mappings":"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"}
|
package/lib/converter/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { Extension as FCEExtension, QuestionnaireItem as FCEQuestionnaireItem, I
|
|
|
3
3
|
import { fromFirstClassExtension } from './fceToFhir';
|
|
4
4
|
import { toFirstClassExtension } from './fhirToFce';
|
|
5
5
|
import { processLaunchContext as processLaunchContextToFce } from './fhirToFce/questionnaire/processExtensions';
|
|
6
|
+
export * from './utils';
|
|
6
7
|
export declare function convertFromFHIRExtension(extension: FHIRExtension): Partial<FCEQuestionnaireItem> | undefined;
|
|
7
8
|
export declare function convertToFHIRExtension(item: FCEQuestionnaireItem): FHIRExtension[];
|
|
8
9
|
export declare function extractExtension(extension: FCEExtension[] | undefined, url: 'ex:createdAt'): string | undefined;
|
package/lib/converter/index.js
CHANGED
|
@@ -9,6 +9,7 @@ const fhirToFce_1 = require("./fhirToFce");
|
|
|
9
9
|
Object.defineProperty(exports, "toFirstClassExtension", { enumerable: true, get: function () { return fhirToFce_1.toFirstClassExtension; } });
|
|
10
10
|
const processExtensions_1 = require("./fhirToFce/questionnaire/processExtensions");
|
|
11
11
|
Object.defineProperty(exports, "processLaunchContextToFce", { enumerable: true, get: function () { return processExtensions_1.processLaunchContext; } });
|
|
12
|
+
tslib_1.__exportStar(require("./utils"), exports);
|
|
12
13
|
function convertFromFHIRExtension(extension) {
|
|
13
14
|
const identifier = extension.url;
|
|
14
15
|
const transformer = extensions_1.extensionTransformers[identifier];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/converter/index.ts"],"names":[],"mappings":";;;;AAYA,6CAA0E;AAC1E,2CAAsD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/converter/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function sortExtensionsList(object: any): any;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sortExtensionsList = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const cloneDeep_1 = tslib_1.__importDefault(require("lodash/cloneDeep"));
|
|
6
|
+
function sortExtensionsRecursive(object) {
|
|
7
|
+
if (typeof object !== 'object' || object === null) {
|
|
8
|
+
return object;
|
|
9
|
+
}
|
|
10
|
+
for (const [key, property] of Object.entries(object)) {
|
|
11
|
+
if (Array.isArray(property)) {
|
|
12
|
+
if (key === 'extension') {
|
|
13
|
+
property.sort((a, b) => (a.url === b.url ? 0 : a.url < b.url ? -1 : 1));
|
|
14
|
+
}
|
|
15
|
+
for (const nestedProperty of property) {
|
|
16
|
+
sortExtensionsRecursive(nestedProperty);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
sortExtensionsRecursive(property);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return object;
|
|
24
|
+
}
|
|
25
|
+
function sortExtensionsList(object) {
|
|
26
|
+
return sortExtensionsRecursive((0, cloneDeep_1.default)(object));
|
|
27
|
+
}
|
|
28
|
+
exports.sortExtensionsList = sortExtensionsList;
|
|
29
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/converter/utils.ts"],"names":[],"mappings":";;;;AAAA,yEAAyC;AAEzC,SAAS,uBAAuB,CAAC,MAAW;IACxC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE;QAC/C,OAAO,MAAM,CAAC;KACjB;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QAClD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YACzB,IAAI,GAAG,KAAK,WAAW,EAAE;gBACrB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3E;YACD,KAAK,MAAM,cAAc,IAAI,QAAQ,EAAE;gBACnC,uBAAuB,CAAC,cAAc,CAAC,CAAC;aAC3C;SACJ;aAAM;YACH,uBAAuB,CAAC,QAAQ,CAAC,CAAC;SACrC;KACJ;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAgB,kBAAkB,CAAC,MAAW;IAC1C,OAAO,uBAAuB,CAAC,IAAA,mBAAS,EAAC,MAAM,CAAC,CAAC,CAAC;AACtD,CAAC;AAFD,gDAEC"}
|
package/package.json
CHANGED
package/src/components.tsx
CHANGED
|
@@ -15,13 +15,7 @@ import {
|
|
|
15
15
|
QuestionItemProps,
|
|
16
16
|
QuestionItemsProps,
|
|
17
17
|
} from './types';
|
|
18
|
-
import {
|
|
19
|
-
calcContext,
|
|
20
|
-
findExtensionByUrl,
|
|
21
|
-
getBranchItems,
|
|
22
|
-
getEnabledQuestions,
|
|
23
|
-
wrapAnswerValue,
|
|
24
|
-
} from './utils';
|
|
18
|
+
import { calcContext, getBranchItems, getEnabledQuestions, wrapAnswerValue } from './utils';
|
|
25
19
|
|
|
26
20
|
export function usePreviousValue<T = any>(value: T) {
|
|
27
21
|
const prevValue = useRef<T>();
|
|
@@ -43,24 +37,20 @@ export function QuestionItems(props: QuestionItemsProps) {
|
|
|
43
37
|
|
|
44
38
|
return (
|
|
45
39
|
<React.Fragment>
|
|
46
|
-
{getEnabledQuestions(questionItems, parentPath, formValues, context).map(
|
|
47
|
-
(
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
},
|
|
57
|
-
)}
|
|
40
|
+
{getEnabledQuestions(questionItems, parentPath, formValues, context).map((item) => {
|
|
41
|
+
return (
|
|
42
|
+
<QuestionItem
|
|
43
|
+
key={item.linkId}
|
|
44
|
+
questionItem={item}
|
|
45
|
+
context={context}
|
|
46
|
+
parentPath={parentPath}
|
|
47
|
+
/>
|
|
48
|
+
);
|
|
49
|
+
})}
|
|
58
50
|
</React.Fragment>
|
|
59
51
|
);
|
|
60
52
|
}
|
|
61
53
|
|
|
62
|
-
const cqfExpressionExtensionUrl = 'http://hl7.org/fhir/StructureDefinition/cqf-expression';
|
|
63
|
-
|
|
64
54
|
export function QuestionItem(props: QuestionItemProps) {
|
|
65
55
|
const { questionItem: initialQuestionItem, context: initialContext, parentPath } = props;
|
|
66
56
|
const {
|
|
@@ -103,10 +93,7 @@ export function QuestionItem(props: QuestionItemProps) {
|
|
|
103
93
|
_.get(formValues, fieldPath),
|
|
104
94
|
);
|
|
105
95
|
|
|
106
|
-
const itemContext =
|
|
107
|
-
() => (isGroupItem(questionItem, context) ? context[0] : context),
|
|
108
|
-
[questionItem, context],
|
|
109
|
-
);
|
|
96
|
+
const itemContext = isGroupItem(questionItem, context) ? context[0] : context;
|
|
110
97
|
|
|
111
98
|
useEffect(() => {
|
|
112
99
|
// TODO: think about use cases for group context
|
|
@@ -152,15 +139,14 @@ export function QuestionItem(props: QuestionItemProps) {
|
|
|
152
139
|
|
|
153
140
|
useEffect(() => {
|
|
154
141
|
if (itemContext && _text) {
|
|
155
|
-
const
|
|
156
|
-
const cqfExpression = extension?.valueExpression;
|
|
142
|
+
const cqfExpression = _text.cqfExpression;
|
|
157
143
|
const calculatedValue =
|
|
158
144
|
evaluateQuestionItemExpression(
|
|
159
145
|
linkId,
|
|
160
146
|
'_text.cqfExpression',
|
|
161
147
|
itemContext,
|
|
162
148
|
cqfExpression,
|
|
163
|
-
) ?? initialQuestionItem.text;
|
|
149
|
+
)[0] ?? initialQuestionItem.text;
|
|
164
150
|
|
|
165
151
|
if (prevQuestionItem?.text !== calculatedValue) {
|
|
166
152
|
setQuestionItem((qi) => ({
|
|
@@ -171,15 +157,14 @@ export function QuestionItem(props: QuestionItemProps) {
|
|
|
171
157
|
}
|
|
172
158
|
|
|
173
159
|
if (itemContext && _readOnly) {
|
|
174
|
-
const
|
|
175
|
-
const cqfExpression = extension?.valueExpression;
|
|
160
|
+
const cqfExpression = _readOnly.cqfExpression;
|
|
176
161
|
const calculatedValue =
|
|
177
162
|
evaluateQuestionItemExpression(
|
|
178
163
|
linkId,
|
|
179
164
|
'_readOnly.cqfExpression',
|
|
180
165
|
itemContext,
|
|
181
166
|
cqfExpression,
|
|
182
|
-
) ?? initialQuestionItem.readOnly;
|
|
167
|
+
)[0] ?? initialQuestionItem.readOnly;
|
|
183
168
|
|
|
184
169
|
if (prevQuestionItem?.readOnly !== calculatedValue) {
|
|
185
170
|
setQuestionItem((qi) => ({
|
|
@@ -190,15 +175,14 @@ export function QuestionItem(props: QuestionItemProps) {
|
|
|
190
175
|
}
|
|
191
176
|
|
|
192
177
|
if (itemContext && _required) {
|
|
193
|
-
const
|
|
194
|
-
const cqfExpression = extension?.valueExpression;
|
|
178
|
+
const cqfExpression = _required.cqfExpression;
|
|
195
179
|
const calculatedValue =
|
|
196
180
|
evaluateQuestionItemExpression(
|
|
197
181
|
linkId,
|
|
198
182
|
'_required.cqfExpression',
|
|
199
183
|
itemContext,
|
|
200
184
|
cqfExpression,
|
|
201
|
-
) ?? initialQuestionItem.required;
|
|
185
|
+
)[0] ?? initialQuestionItem.required;
|
|
202
186
|
|
|
203
187
|
if (prevQuestionItem?.required !== calculatedValue) {
|
|
204
188
|
setQuestionItem((qi) => ({
|
|
@@ -325,16 +309,16 @@ export function evaluateQuestionItemExpression(
|
|
|
325
309
|
expression?: Expression,
|
|
326
310
|
) {
|
|
327
311
|
if (!expression) {
|
|
328
|
-
return;
|
|
312
|
+
return [];
|
|
329
313
|
}
|
|
330
314
|
|
|
331
315
|
if (expression.language !== 'text/fhirpath') {
|
|
332
316
|
console.error('Only fhirpath expression is supported');
|
|
333
|
-
return;
|
|
317
|
+
return [];
|
|
334
318
|
}
|
|
335
319
|
|
|
336
320
|
try {
|
|
337
|
-
return fhirpath.evaluate(context.context ?? {}, expression.expression!, context)
|
|
321
|
+
return fhirpath.evaluate(context.context ?? {}, expression.expression!, context);
|
|
338
322
|
} catch (err: unknown) {
|
|
339
323
|
throw Error(`FHIRPath expression evaluation failure for ${linkId}.${path}: ${err}`);
|
|
340
324
|
}
|
|
@@ -2,7 +2,6 @@ import {
|
|
|
2
2
|
QuestionnaireResponse as FHIRQuestionnaireResponse,
|
|
3
3
|
Questionnaire as FHIRQuestionnaire,
|
|
4
4
|
} from 'fhir/r4b';
|
|
5
|
-
import cloneDeep from 'lodash/cloneDeep';
|
|
6
5
|
|
|
7
6
|
import {
|
|
8
7
|
QuestionnaireResponse as FCEQuestionnaireResponse,
|
|
@@ -14,6 +13,7 @@ import fce_allergies from './resources/questionnaire_fce/allergies.json';
|
|
|
14
13
|
import fce_beverages from './resources/questionnaire_fce/beverages.json';
|
|
15
14
|
import fce_choice_answer_option from './resources/questionnaire_fce/choice_answer_option.json';
|
|
16
15
|
import fce_consent from './resources/questionnaire_fce/consent.json';
|
|
16
|
+
import fce_cqf_examples from './resources/questionnaire_fce/cqf-examples.json';
|
|
17
17
|
import fce_enable_when from './resources/questionnaire_fce/enable_when.json';
|
|
18
18
|
import fce_encounter_create from './resources/questionnaire_fce/encounter_create.json';
|
|
19
19
|
import fce_gad_7 from './resources/questionnaire_fce/gad_7.json';
|
|
@@ -37,6 +37,7 @@ import fhir_allergies from './resources/questionnaire_fhir/allergies.json';
|
|
|
37
37
|
import fhir_beverages from './resources/questionnaire_fhir/beverages.json';
|
|
38
38
|
import fhir_choice_answer_option from './resources/questionnaire_fhir/choice_answer_option.json';
|
|
39
39
|
import fhir_consent from './resources/questionnaire_fhir/consent.json';
|
|
40
|
+
import fhir_cqf_examples from './resources/questionnaire_fhir/cqf-examples.json';
|
|
40
41
|
import fhir_enable_when from './resources/questionnaire_fhir/enable_when.json';
|
|
41
42
|
import fhir_encounter_create from './resources/questionnaire_fhir/encounter_create.json';
|
|
42
43
|
import fhir_gad_7 from './resources/questionnaire_fhir/gad_7.json';
|
|
@@ -86,29 +87,7 @@ import fhir_reference_answer_with_assoc from './resources/questionnaire_response
|
|
|
86
87
|
import fhir_review_of_systems_qr from './resources/questionnaire_response_fhir/review_of_systems.json';
|
|
87
88
|
import fhir_vitals_qr from './resources/questionnaire_response_fhir/vitals.json';
|
|
88
89
|
import { toFirstClassExtension, fromFirstClassExtension } from '../../converter';
|
|
89
|
-
|
|
90
|
-
function sortExtensionsRecursive(object: any) {
|
|
91
|
-
if (typeof object !== 'object' || object === null) {
|
|
92
|
-
return object;
|
|
93
|
-
}
|
|
94
|
-
for (const [key, property] of Object.entries(object)) {
|
|
95
|
-
if (Array.isArray(property)) {
|
|
96
|
-
if (key === 'extension') {
|
|
97
|
-
property.sort((a, b) => (a.url === b.url ? 0 : a.url < b.url ? -1 : 1));
|
|
98
|
-
}
|
|
99
|
-
for (const nestedProperty of property) {
|
|
100
|
-
sortExtensionsRecursive(nestedProperty);
|
|
101
|
-
}
|
|
102
|
-
} else {
|
|
103
|
-
sortExtensionsRecursive(property);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
return object;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
export function sortExtensionsList(object: any) {
|
|
110
|
-
return sortExtensionsRecursive(cloneDeep(object));
|
|
111
|
-
}
|
|
90
|
+
import { sortExtensionsList } from '../utils';
|
|
112
91
|
|
|
113
92
|
describe('Questionanire and QuestionnaireResponses transformation', () => {
|
|
114
93
|
test.each([
|
|
@@ -134,6 +113,7 @@ describe('Questionanire and QuestionnaireResponses transformation', () => {
|
|
|
134
113
|
[fhir_practitioner_create_structure_map, fce_practitioner_create_structure_map],
|
|
135
114
|
[fhir_consent, fce_consent],
|
|
136
115
|
[fhir_enable_when, fce_enable_when],
|
|
116
|
+
[fhir_cqf_examples, fce_cqf_examples],
|
|
137
117
|
])(
|
|
138
118
|
'Each FHIR Questionnaire should convert to FCE',
|
|
139
119
|
async (fhir_questionnaire, fce_questionnaire) => {
|
|
@@ -166,6 +146,7 @@ describe('Questionanire and QuestionnaireResponses transformation', () => {
|
|
|
166
146
|
[fce_practitioner_create_structure_map, fhir_practitioner_create_structure_map],
|
|
167
147
|
[fce_consent, fhir_consent],
|
|
168
148
|
[fce_enable_when, fhir_enable_when],
|
|
149
|
+
[fce_cqf_examples, fhir_cqf_examples],
|
|
169
150
|
])(
|
|
170
151
|
'Each FCE Questionnaire should convert to FHIR',
|
|
171
152
|
async (fce_questionnaire, fhir_questionnaire) => {
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
{
|
|
2
|
+
"subjectType": [
|
|
3
|
+
"Encounter",
|
|
4
|
+
"Patient"
|
|
5
|
+
],
|
|
6
|
+
"meta": {
|
|
7
|
+
"profile": [
|
|
8
|
+
"https://beda.software/beda-emr-questionnaire"
|
|
9
|
+
],
|
|
10
|
+
"lastUpdated": "2024-11-18T13:35:34.455065Z",
|
|
11
|
+
"createdAt": "2024-11-15T17:04:52.598486Z",
|
|
12
|
+
"versionId": "11968"
|
|
13
|
+
},
|
|
14
|
+
"name": "CQF Examples",
|
|
15
|
+
"item": [
|
|
16
|
+
{
|
|
17
|
+
"text": "Click on this checkbox to see result",
|
|
18
|
+
"type": "boolean",
|
|
19
|
+
"linkId": "input-1"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"text": "This is default input label",
|
|
23
|
+
"type": "string",
|
|
24
|
+
"_text": {
|
|
25
|
+
"cqfExpression": {
|
|
26
|
+
"language": "text/fhirpath",
|
|
27
|
+
"expression": "iif(%QuestionnaireResponse.item.where(linkId='input-1').answer.value.boolean = true, 'Now the input label changed', null)"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"linkId": "input-2"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"item": [
|
|
34
|
+
{
|
|
35
|
+
"text": "This input is disabled if the checkbox is unchecked",
|
|
36
|
+
"type": "string",
|
|
37
|
+
"linkId": "input-5",
|
|
38
|
+
"readOnly": true,
|
|
39
|
+
"_readOnly": {
|
|
40
|
+
"cqfExpression": {
|
|
41
|
+
"language": "text/fhirpath",
|
|
42
|
+
"expression": "%QuestionnaireResponse.item.where(linkId='input-1').answer.value.boolean = false"
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"text": "This input is required if the checkbox is checked",
|
|
48
|
+
"type": "string",
|
|
49
|
+
"linkId": "input-6",
|
|
50
|
+
"required": false,
|
|
51
|
+
"_required": {
|
|
52
|
+
"cqfExpression": {
|
|
53
|
+
"language": "text/fhirpath",
|
|
54
|
+
"expression": "%QuestionnaireResponse.item.where(linkId='input-1').answer.value.boolean = true"
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
"text": "This is default group label",
|
|
60
|
+
"type": "group",
|
|
61
|
+
"_text": {
|
|
62
|
+
"cqfExpression": {
|
|
63
|
+
"language": "text/fhirpath",
|
|
64
|
+
"expression": "iif(%QuestionnaireResponse.item.where(linkId='input-1').answer.value.boolean = true, 'Now the group label changed', null)"
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
"linkId": "input-3"
|
|
68
|
+
}
|
|
69
|
+
],
|
|
70
|
+
"resourceType": "Questionnaire",
|
|
71
|
+
"title": "CQF Examples",
|
|
72
|
+
"status": "active",
|
|
73
|
+
"id": "cqf-examples",
|
|
74
|
+
"url": "https://aidbox.emr.beda.software/ui/console#/entities/Questionnaire/cqf-examples"
|
|
75
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
{
|
|
2
|
+
"subjectType": [
|
|
3
|
+
"Encounter",
|
|
4
|
+
"Patient"
|
|
5
|
+
],
|
|
6
|
+
"meta": {
|
|
7
|
+
"profile": [
|
|
8
|
+
"https://beda.software/beda-emr-questionnaire"
|
|
9
|
+
],
|
|
10
|
+
"lastUpdated": "2024-11-18T13:35:34.455065Z",
|
|
11
|
+
"versionId": "11968",
|
|
12
|
+
"extension": [
|
|
13
|
+
{
|
|
14
|
+
"url": "ex:createdAt",
|
|
15
|
+
"valueInstant": "2024-11-15T17:04:52.598486Z"
|
|
16
|
+
}
|
|
17
|
+
]
|
|
18
|
+
},
|
|
19
|
+
"name": "CQF Examples",
|
|
20
|
+
"item": [
|
|
21
|
+
{
|
|
22
|
+
"text": "Click on this checkbox to see result",
|
|
23
|
+
"type": "boolean",
|
|
24
|
+
"linkId": "input-1"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"text": "This is default input label",
|
|
28
|
+
"type": "string",
|
|
29
|
+
"_text": {
|
|
30
|
+
"extension": [
|
|
31
|
+
{
|
|
32
|
+
"url": "http://hl7.org/fhir/StructureDefinition/cqf-expression",
|
|
33
|
+
"valueExpression": {
|
|
34
|
+
"language": "text/fhirpath",
|
|
35
|
+
"expression": "iif(%QuestionnaireResponse.item.where(linkId='input-1').answer.value.boolean = true, 'Now the input label changed', null)"
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
]
|
|
39
|
+
},
|
|
40
|
+
"linkId": "input-2"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"item": [
|
|
44
|
+
{
|
|
45
|
+
"text": "This input is disabled if the checkbox is unchecked",
|
|
46
|
+
"type": "string",
|
|
47
|
+
"linkId": "input-5",
|
|
48
|
+
"readOnly": true,
|
|
49
|
+
"_readOnly": {
|
|
50
|
+
"extension": [
|
|
51
|
+
{
|
|
52
|
+
"url": "http://hl7.org/fhir/StructureDefinition/cqf-expression",
|
|
53
|
+
"valueExpression": {
|
|
54
|
+
"language": "text/fhirpath",
|
|
55
|
+
"expression": "%QuestionnaireResponse.item.where(linkId='input-1').answer.value.boolean = false"
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"text": "This input is required if the checkbox is checked",
|
|
63
|
+
"type": "string",
|
|
64
|
+
"linkId": "input-6",
|
|
65
|
+
"required": false,
|
|
66
|
+
"_required": {
|
|
67
|
+
"extension": [
|
|
68
|
+
{
|
|
69
|
+
"url": "http://hl7.org/fhir/StructureDefinition/cqf-expression",
|
|
70
|
+
"valueExpression": {
|
|
71
|
+
"language": "text/fhirpath",
|
|
72
|
+
"expression": "%QuestionnaireResponse.item.where(linkId='input-1').answer.value.boolean = true"
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
]
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
],
|
|
79
|
+
"text": "This is default group label",
|
|
80
|
+
"type": "group",
|
|
81
|
+
"_text": {
|
|
82
|
+
"extension": [
|
|
83
|
+
{
|
|
84
|
+
"url": "http://hl7.org/fhir/StructureDefinition/cqf-expression",
|
|
85
|
+
"valueExpression": {
|
|
86
|
+
"language": "text/fhirpath",
|
|
87
|
+
"expression": "iif(%QuestionnaireResponse.item.where(linkId='input-1').answer.value.boolean = true, 'Now the group label changed', null)"
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
]
|
|
91
|
+
},
|
|
92
|
+
"linkId": "input-3"
|
|
93
|
+
}
|
|
94
|
+
],
|
|
95
|
+
"resourceType": "Questionnaire",
|
|
96
|
+
"title": "CQF Examples",
|
|
97
|
+
"status": "active",
|
|
98
|
+
"id": "cqf-examples",
|
|
99
|
+
"url": "https://aidbox.emr.beda.software/ui/console#/entities/Questionnaire/cqf-examples"
|
|
100
|
+
}
|
|
@@ -34,6 +34,7 @@ export enum ExtensionIdentifier {
|
|
|
34
34
|
CalculatedExpression = 'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-calculatedExpression',
|
|
35
35
|
EnableWhenExpression = 'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-enableWhenExpression',
|
|
36
36
|
AnswerExpression = 'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-answerExpression',
|
|
37
|
+
CqfExpression = 'http://hl7.org/fhir/StructureDefinition/cqf-expression',
|
|
37
38
|
|
|
38
39
|
AdjustLastToRight = 'https://beda.software/fhir-emr-questionnaire/adjust-last-to-right',
|
|
39
40
|
SliderStart = 'https://beda.software/fhir-emr-questionnaire/slider-start',
|
|
@@ -219,6 +220,10 @@ export const extensionTransformers: ExtensionTransformer = {
|
|
|
219
220
|
},
|
|
220
221
|
},
|
|
221
222
|
},
|
|
223
|
+
[ExtensionIdentifier.CqfExpression]: {
|
|
224
|
+
// @ts-ignore
|
|
225
|
+
path: { extension: 'valueExpression', questionnaire: 'cqfExpression' },
|
|
226
|
+
},
|
|
222
227
|
|
|
223
228
|
[ExtensionIdentifier.AdjustLastToRight]: {
|
|
224
229
|
path: { extension: 'valueBoolean', questionnaire: 'adjustLastToRight' },
|
|
@@ -47,6 +47,19 @@ export function processItems(items: FCEQuestionnaireItem[]): FHIRQuestionnaireIt
|
|
|
47
47
|
type: type as FHIRQuestionnaireItem['type'],
|
|
48
48
|
};
|
|
49
49
|
|
|
50
|
+
for (const property of Object.keys(item)) {
|
|
51
|
+
const element = item[property as keyof FCEQuestionnaireItem];
|
|
52
|
+
|
|
53
|
+
if (property.startsWith('_') && element instanceof Object) {
|
|
54
|
+
// @ts-ignore
|
|
55
|
+
fhirItem[property] = {
|
|
56
|
+
// TODO: update convertToFHIRExtension to accept element type to convert
|
|
57
|
+
// @ts-ignore
|
|
58
|
+
extension: convertToFHIRExtension(element),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
50
63
|
if (answerOption !== undefined) {
|
|
51
64
|
fhirItem.answerOption = processAnswerOption(answerOption);
|
|
52
65
|
}
|
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
QuestionnaireItem as FHIRQuestionnaireItem,
|
|
5
5
|
QuestionnaireItemAnswerOption as FHIRQuestionnaireItemAnswerOption,
|
|
6
6
|
QuestionnaireItemInitial as FHIRQuestionnaireItemInitial,
|
|
7
|
+
Element as FHIRElement,
|
|
7
8
|
} from 'fhir/r4b';
|
|
8
9
|
import _ from 'lodash';
|
|
9
10
|
|
|
@@ -52,6 +53,21 @@ function getUpdatedPropertiesFromItem(item: FHIRQuestionnaireItem) {
|
|
|
52
53
|
continue;
|
|
53
54
|
}
|
|
54
55
|
|
|
56
|
+
for (const property of Object.keys(item)) {
|
|
57
|
+
const element = item[property as keyof FHIRQuestionnaireItem];
|
|
58
|
+
if (property.startsWith('_') && element instanceof Object) {
|
|
59
|
+
const primitiveExtensions = (element as FHIRElement)?.extension ?? [];
|
|
60
|
+
for (const extension of primitiveExtensions) {
|
|
61
|
+
if (extension.url === identifier) {
|
|
62
|
+
updatedProperties = {
|
|
63
|
+
...updatedProperties,
|
|
64
|
+
...{ [property]: convertFromFHIRExtension(extension) },
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
55
71
|
const extension = findExtension(item, identifier);
|
|
56
72
|
if (extension !== undefined) {
|
|
57
73
|
updatedProperties = {
|
package/src/converter/index.ts
CHANGED
|
@@ -14,6 +14,7 @@ import { ExtensionIdentifier, extensionTransformers } from './extensions';
|
|
|
14
14
|
import { fromFirstClassExtension } from './fceToFhir';
|
|
15
15
|
import { toFirstClassExtension } from './fhirToFce';
|
|
16
16
|
import { processLaunchContext as processLaunchContextToFce } from './fhirToFce/questionnaire/processExtensions';
|
|
17
|
+
export * from './utils';
|
|
17
18
|
|
|
18
19
|
export function convertFromFHIRExtension(
|
|
19
20
|
extension: FHIRExtension,
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import cloneDeep from 'lodash/cloneDeep';
|
|
2
|
+
|
|
3
|
+
function sortExtensionsRecursive(object: any) {
|
|
4
|
+
if (typeof object !== 'object' || object === null) {
|
|
5
|
+
return object;
|
|
6
|
+
}
|
|
7
|
+
for (const [key, property] of Object.entries(object)) {
|
|
8
|
+
if (Array.isArray(property)) {
|
|
9
|
+
if (key === 'extension') {
|
|
10
|
+
property.sort((a, b) => (a.url === b.url ? 0 : a.url < b.url ? -1 : 1));
|
|
11
|
+
}
|
|
12
|
+
for (const nestedProperty of property) {
|
|
13
|
+
sortExtensionsRecursive(nestedProperty);
|
|
14
|
+
}
|
|
15
|
+
} else {
|
|
16
|
+
sortExtensionsRecursive(property);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return object;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function sortExtensionsList(object: any) {
|
|
23
|
+
return sortExtensionsRecursive(cloneDeep(object));
|
|
24
|
+
}
|