sdc-qrf 0.3.9 → 0.3.11
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/converter/extensions.d.ts +4 -2
- package/lib/converter/extensions.js +89 -36
- package/lib/converter/extensions.js.map +1 -1
- package/lib/converter/fceToFhir/questionnaire/processItems.js +1 -1
- package/lib/converter/fceToFhir/questionnaire/processItems.js.map +1 -1
- package/lib/converter/fhirToFce/questionnaire/processItems.js +9 -17
- package/lib/converter/fhirToFce/questionnaire/processItems.js.map +1 -1
- package/lib/converter/index.d.ts +2 -2
- package/lib/converter/index.js +21 -17
- package/lib/converter/index.js.map +1 -1
- package/package.json +1 -1
- package/src/converter/__tests__/fce.test.ts +8 -0
- package/src/converter/__tests__/resources/questionnaire_fce/constraint.json +31 -0
- package/src/converter/__tests__/resources/questionnaire_fce/unit-option.json +31 -0
- package/src/converter/__tests__/resources/questionnaire_fhir/constraint.json +66 -0
- package/src/converter/__tests__/resources/questionnaire_fhir/unit-option.json +40 -0
- package/src/converter/extensions.ts +103 -40
- package/src/converter/fceToFhir/questionnaire/processItems.ts +1 -1
- package/src/converter/fhirToFce/questionnaire/processItems.ts +5 -18
- package/src/converter/index.ts +24 -17
|
@@ -26,6 +26,7 @@ export declare enum ExtensionIdentifier {
|
|
|
26
26
|
InlineChoiceDirection = "https://beda.software/fhir-emr-questionnaire/inline-choice-direction",
|
|
27
27
|
ChoiceColumns = "http://aidbox.io/fhir/StructureDefinition/questionnaire-choiceColumns",
|
|
28
28
|
ItemPopulationContext = "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-itemPopulationContext",
|
|
29
|
+
ItemConstraint = "http://hl7.org/fhir/StructureDefinition/questionnaire-constraint",
|
|
29
30
|
InitialExpression = "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression",
|
|
30
31
|
ChoiceColumn = "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-choiceColumn",
|
|
31
32
|
CalculatedExpression = "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-calculatedExpression",
|
|
@@ -43,13 +44,14 @@ export declare enum ExtensionIdentifier {
|
|
|
43
44
|
export type ExtensionTransformer = {
|
|
44
45
|
[key in ExtensionIdentifier]: {
|
|
45
46
|
transform: {
|
|
46
|
-
|
|
47
|
-
|
|
47
|
+
fromExtensions: (extensions: FHIRExtension[]) => Partial<FCEQuestionnaireItem> | undefined;
|
|
48
|
+
toExtensions: (item: FCEQuestionnaireItem) => FHIRExtension[];
|
|
48
49
|
};
|
|
49
50
|
} | {
|
|
50
51
|
path: {
|
|
51
52
|
extension: keyof FHIRExtension;
|
|
52
53
|
questionnaire: keyof FCEQuestionnaireItem;
|
|
54
|
+
isCollection?: boolean;
|
|
53
55
|
};
|
|
54
56
|
};
|
|
55
57
|
};
|
|
@@ -28,6 +28,7 @@ var ExtensionIdentifier;
|
|
|
28
28
|
ExtensionIdentifier["InlineChoiceDirection"] = "https://beda.software/fhir-emr-questionnaire/inline-choice-direction";
|
|
29
29
|
ExtensionIdentifier["ChoiceColumns"] = "http://aidbox.io/fhir/StructureDefinition/questionnaire-choiceColumns";
|
|
30
30
|
ExtensionIdentifier["ItemPopulationContext"] = "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-itemPopulationContext";
|
|
31
|
+
ExtensionIdentifier["ItemConstraint"] = "http://hl7.org/fhir/StructureDefinition/questionnaire-constraint";
|
|
31
32
|
ExtensionIdentifier["InitialExpression"] = "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression";
|
|
32
33
|
ExtensionIdentifier["ChoiceColumn"] = "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-choiceColumn";
|
|
33
34
|
ExtensionIdentifier["CalculatedExpression"] = "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-calculatedExpression";
|
|
@@ -59,29 +60,32 @@ exports.extensionTransformers = {
|
|
|
59
60
|
path: { extension: 'valueCoding', questionnaire: 'unit' },
|
|
60
61
|
},
|
|
61
62
|
[ExtensionIdentifier.UnitOption]: {
|
|
62
|
-
path: { extension: 'valueCoding', questionnaire: 'unitOption' },
|
|
63
|
+
path: { extension: 'valueCoding', questionnaire: 'unitOption', isCollection: true },
|
|
63
64
|
},
|
|
64
65
|
[ExtensionIdentifier.RowsNumber]: {
|
|
65
66
|
path: { extension: 'valueInteger', questionnaire: 'rowsNumber' },
|
|
66
67
|
},
|
|
67
68
|
[ExtensionIdentifier.ReferenceResource]: {
|
|
68
69
|
transform: {
|
|
69
|
-
|
|
70
|
-
if (
|
|
71
|
-
return { referenceResource: [
|
|
70
|
+
fromExtensions: (extensions) => {
|
|
71
|
+
if (extensions[0].valueCode) {
|
|
72
|
+
return { referenceResource: [extensions[0].valueCode] };
|
|
72
73
|
}
|
|
73
74
|
else {
|
|
74
75
|
return {};
|
|
75
76
|
}
|
|
76
77
|
},
|
|
77
|
-
|
|
78
|
+
toExtensions: (item) => {
|
|
78
79
|
var _a;
|
|
79
80
|
if ((_a = item.referenceResource) === null || _a === void 0 ? void 0 : _a.length) {
|
|
80
|
-
return
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
return [
|
|
82
|
+
{
|
|
83
|
+
url: ExtensionIdentifier.ReferenceResource,
|
|
84
|
+
valueCode: item.referenceResource[0],
|
|
85
|
+
},
|
|
86
|
+
];
|
|
84
87
|
}
|
|
88
|
+
return [];
|
|
85
89
|
},
|
|
86
90
|
},
|
|
87
91
|
},
|
|
@@ -102,26 +106,26 @@ exports.extensionTransformers = {
|
|
|
102
106
|
},
|
|
103
107
|
[ExtensionIdentifier.MinValue]: {
|
|
104
108
|
transform: {
|
|
105
|
-
|
|
106
|
-
|
|
109
|
+
fromExtensions: (extensions) => ({ minValue: extensions[0] }),
|
|
110
|
+
toExtensions: (item) => (item.minValue ? [item.minValue] : []),
|
|
107
111
|
},
|
|
108
112
|
},
|
|
109
113
|
[ExtensionIdentifier.MaxValue]: {
|
|
110
114
|
transform: {
|
|
111
|
-
|
|
112
|
-
|
|
115
|
+
fromExtensions: (extensions) => ({ maxValue: extensions[0] }),
|
|
116
|
+
toExtensions: (item) => (item.maxValue ? [item.maxValue] : []),
|
|
113
117
|
},
|
|
114
118
|
},
|
|
115
119
|
[ExtensionIdentifier.MinQuantity]: {
|
|
116
120
|
transform: {
|
|
117
|
-
|
|
118
|
-
|
|
121
|
+
fromExtensions: (extensions) => ({ minQuantity: extensions[0] }),
|
|
122
|
+
toExtensions: (item) => (item.minQuantity ? [item.minQuantity] : []),
|
|
119
123
|
},
|
|
120
124
|
},
|
|
121
125
|
[ExtensionIdentifier.MaxQuantity]: {
|
|
122
126
|
transform: {
|
|
123
|
-
|
|
124
|
-
|
|
127
|
+
fromExtensions: (extensions) => ({ maxQuantity: extensions[0] }),
|
|
128
|
+
toExtensions: (item) => (item.maxQuantity ? [item.maxQuantity] : []),
|
|
125
129
|
},
|
|
126
130
|
},
|
|
127
131
|
[ExtensionIdentifier.ShowOrdinalValue]: {
|
|
@@ -151,6 +155,57 @@ exports.extensionTransformers = {
|
|
|
151
155
|
[ExtensionIdentifier.ItemPopulationContext]: {
|
|
152
156
|
path: { extension: 'valueExpression', questionnaire: 'itemPopulationContext' },
|
|
153
157
|
},
|
|
158
|
+
[ExtensionIdentifier.ItemConstraint]: {
|
|
159
|
+
transform: {
|
|
160
|
+
fromExtensions: (extensions) => {
|
|
161
|
+
return {
|
|
162
|
+
itemConstraint: extensions.map((extension) => {
|
|
163
|
+
var _a;
|
|
164
|
+
const itemConstraintExtension = extension.extension;
|
|
165
|
+
return {
|
|
166
|
+
key: itemConstraintExtension.find((obj) => obj.url === 'key').valueId,
|
|
167
|
+
requirements: (_a = itemConstraintExtension.find((obj) => obj.url === 'requirements')) === null || _a === void 0 ? void 0 : _a.valueString,
|
|
168
|
+
severity: itemConstraintExtension.find((obj) => obj.url === 'severity')
|
|
169
|
+
.valueCode,
|
|
170
|
+
human: itemConstraintExtension.find((obj) => obj.url === 'human')
|
|
171
|
+
.valueString,
|
|
172
|
+
expression: itemConstraintExtension.find((obj) => obj.url === 'expression').valueString,
|
|
173
|
+
};
|
|
174
|
+
}),
|
|
175
|
+
};
|
|
176
|
+
},
|
|
177
|
+
toExtensions: (item) => {
|
|
178
|
+
if (item.itemConstraint) {
|
|
179
|
+
return item.itemConstraint.map((itemConstraint) => ({
|
|
180
|
+
url: ExtensionIdentifier.ItemConstraint,
|
|
181
|
+
extension: [
|
|
182
|
+
{
|
|
183
|
+
url: 'key',
|
|
184
|
+
valueId: itemConstraint.key,
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
url: 'requirements',
|
|
188
|
+
valueString: itemConstraint.requirements,
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
url: 'severity',
|
|
192
|
+
valueCode: itemConstraint.severity,
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
url: 'human',
|
|
196
|
+
valueString: itemConstraint === null || itemConstraint === void 0 ? void 0 : itemConstraint.human,
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
url: 'expression',
|
|
200
|
+
valueString: itemConstraint.expression,
|
|
201
|
+
},
|
|
202
|
+
],
|
|
203
|
+
}));
|
|
204
|
+
}
|
|
205
|
+
return [];
|
|
206
|
+
},
|
|
207
|
+
},
|
|
208
|
+
},
|
|
154
209
|
[ExtensionIdentifier.InitialExpression]: {
|
|
155
210
|
path: { extension: 'valueExpression', questionnaire: 'initialExpression' },
|
|
156
211
|
},
|
|
@@ -165,37 +220,35 @@ exports.extensionTransformers = {
|
|
|
165
220
|
},
|
|
166
221
|
[ExtensionIdentifier.ChoiceColumn]: {
|
|
167
222
|
transform: {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
};
|
|
180
|
-
}
|
|
223
|
+
fromExtensions: (extensions) => {
|
|
224
|
+
return {
|
|
225
|
+
choiceColumn: extensions.map((extension) => {
|
|
226
|
+
var _a, _b, _c;
|
|
227
|
+
const choiceColumnExtension = extension.extension;
|
|
228
|
+
return {
|
|
229
|
+
forDisplay: (_b = (_a = choiceColumnExtension.find((obj) => obj.url === 'forDisplay')) === null || _a === void 0 ? void 0 : _a.valueBoolean) !== null && _b !== void 0 ? _b : false,
|
|
230
|
+
path: (_c = choiceColumnExtension.find((obj) => obj.url === 'path')) === null || _c === void 0 ? void 0 : _c.valueString,
|
|
231
|
+
};
|
|
232
|
+
}),
|
|
233
|
+
};
|
|
181
234
|
},
|
|
182
|
-
|
|
183
|
-
var _a, _b;
|
|
235
|
+
toExtensions: (item) => {
|
|
184
236
|
if (item.choiceColumn) {
|
|
185
|
-
return {
|
|
237
|
+
return item.choiceColumn.map((choiceColumn) => ({
|
|
186
238
|
url: ExtensionIdentifier.ChoiceColumn,
|
|
187
239
|
extension: [
|
|
188
240
|
{
|
|
189
241
|
url: 'forDisplay',
|
|
190
|
-
valueBoolean:
|
|
242
|
+
valueBoolean: choiceColumn.forDisplay,
|
|
191
243
|
},
|
|
192
244
|
{
|
|
193
245
|
url: 'path',
|
|
194
|
-
valueString:
|
|
246
|
+
valueString: choiceColumn.path,
|
|
195
247
|
},
|
|
196
248
|
],
|
|
197
|
-
};
|
|
249
|
+
}));
|
|
198
250
|
}
|
|
251
|
+
return [];
|
|
199
252
|
},
|
|
200
253
|
},
|
|
201
254
|
},
|
|
@@ -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":"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"}
|
|
@@ -8,7 +8,7 @@ function processItems(items) {
|
|
|
8
8
|
return items.map((item) => {
|
|
9
9
|
const extensions = (0, __1.convertToFHIRExtension)(item);
|
|
10
10
|
if (extensions.length > 0) {
|
|
11
|
-
const fieldsToOmit = extensions
|
|
11
|
+
const fieldsToOmit = Object.values(lodash_1.default.groupBy(extensions, (extension) => extension.url))
|
|
12
12
|
.map(__1.convertFromFHIRExtension)
|
|
13
13
|
.filter((ext) => ext !== undefined)
|
|
14
14
|
.flatMap(Object.keys);
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"processItems.js","sourceRoot":"","sources":["../../../../src/converter/fceToFhir/questionnaire/processItems.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,36 +21,28 @@ 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;
|
|
25
25
|
let updatedProperties = { linkId: item.linkId, type: item.type };
|
|
26
26
|
for (const identifier of Object.values(extensions_1.ExtensionIdentifier)) {
|
|
27
|
-
if (identifier === extensions_1.ExtensionIdentifier.UnitOption) {
|
|
28
|
-
const unitOptions = ((_a = item.extension) === null || _a === void 0 ? void 0 : _a.filter((ext) => ext.url === extensions_1.ExtensionIdentifier.UnitOption)) || [];
|
|
29
|
-
if (unitOptions.length > 0) {
|
|
30
|
-
const unitOption = unitOptions.map((ext) => { var _a; return (_a = (0, converter_1.convertFromFHIRExtension)(ext)) === null || _a === void 0 ? void 0 : _a.unitOption; });
|
|
31
|
-
updatedProperties = Object.assign(Object.assign({}, updatedProperties), { unitOption });
|
|
32
|
-
}
|
|
33
|
-
continue;
|
|
34
|
-
}
|
|
35
27
|
for (const property of Object.keys(item)) {
|
|
36
28
|
const element = item[property];
|
|
37
29
|
if (property.startsWith('_') && element instanceof Object) {
|
|
38
|
-
const primitiveExtensions = (
|
|
30
|
+
const primitiveExtensions = (_a = element === null || element === void 0 ? void 0 : element.extension) !== null && _a !== void 0 ? _a : [];
|
|
39
31
|
for (const extension of primitiveExtensions) {
|
|
40
32
|
if (extension.url === identifier) {
|
|
41
|
-
updatedProperties = Object.assign(Object.assign({}, updatedProperties), { [property]: (0, converter_1.convertFromFHIRExtension)(extension) });
|
|
33
|
+
updatedProperties = Object.assign(Object.assign({}, updatedProperties), { [property]: (0, converter_1.convertFromFHIRExtension)([extension]) });
|
|
42
34
|
}
|
|
43
35
|
}
|
|
44
36
|
}
|
|
45
37
|
}
|
|
46
|
-
const
|
|
47
|
-
if (
|
|
48
|
-
updatedProperties = Object.assign(Object.assign({}, updatedProperties), (0, converter_1.convertFromFHIRExtension)(
|
|
38
|
+
const extensions = (0, converter_1.filterExtensions)(item, identifier);
|
|
39
|
+
if (extensions === null || extensions === void 0 ? void 0 : extensions.length) {
|
|
40
|
+
updatedProperties = Object.assign(Object.assign({}, updatedProperties), (0, converter_1.convertFromFHIRExtension)(extensions));
|
|
49
41
|
}
|
|
50
42
|
}
|
|
51
|
-
updatedProperties.answerOption = (
|
|
52
|
-
updatedProperties.initial = (
|
|
53
|
-
updatedProperties.enableWhen = (
|
|
43
|
+
updatedProperties.answerOption = (_b = item.answerOption) === null || _b === void 0 ? void 0 : _b.map(processItemOption);
|
|
44
|
+
updatedProperties.initial = (_c = item.initial) === null || _c === void 0 ? void 0 : _c.map(processItemOption);
|
|
45
|
+
updatedProperties.enableWhen = (_d = item.enableWhen) === null || _d === void 0 ? void 0 : _d.map(processEnableWhenItem);
|
|
54
46
|
return updatedProperties;
|
|
55
47
|
}
|
|
56
48
|
function processEnableWhenItem(item) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processItems.js","sourceRoot":"","sources":["../../../../src/converter/fhirToFce/questionnaire/processItems.ts"],"names":[],"mappings":";;;;AAQA,4DAAuB;
|
|
1
|
+
{"version":3,"file":"processItems.js","sourceRoot":"","sources":["../../../../src/converter/fhirToFce/questionnaire/processItems.ts"],"names":[],"mappings":";;;;AAQA,4DAAuB;AAUvB,kDAAmG;AACnG,iDAAuD;AAEvD,SAAgB,YAAY,CAAC,iBAAoC;;IAC7D,OAAO,MAAA,iBAAiB,CAAC,IAAI,0CAAE,GAAG,CAAC,qBAAqB,CAAC,CAAC;AAC9D,CAAC;AAFD,oCAEC;AAED,SAAS,qBAAqB,CAAC,IAA2B;;IACtD,MAAM,iBAAiB,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;IAC7D,MAAM,OAAO,mCAAQ,IAAI,GAAK,iBAAiB,CAAE,CAAC;IAElD,OAAO,CAAC,IAAI,GAAG,MAAA,IAAI,CAAC,IAAI,0CAAE,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjF,IAAI,OAAO,CAAC,SAAS,EAAE;QACnB,OAAO,OAAO,CAAC,SAAS,CAAC;KAC5B;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,SAAS,4BAA4B,CAAC,IAA2B;;IAC7D,IAAI,iBAAiB,GAAyB,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IAEvF,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,gCAAmB,CAAC,EAAE;QACzD,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAuC,CAAC,CAAC;YAC9D,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,YAAY,MAAM,EAAE;gBACvD,MAAM,mBAAmB,GAAG,MAAC,OAAuB,aAAvB,OAAO,uBAAP,OAAO,CAAkB,SAAS,mCAAI,EAAE,CAAC;gBACtE,KAAK,MAAM,SAAS,IAAI,mBAAmB,EAAE;oBACzC,IAAI,SAAS,CAAC,GAAG,KAAK,UAAU,EAAE;wBAC9B,iBAAiB,mCACV,iBAAiB,GACjB,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAA,oCAAwB,EAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAC3D,CAAC;qBACL;iBACJ;aACJ;SACJ;QAED,MAAM,UAAU,GAAG,IAAA,4BAAgB,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACtD,IAAI,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,EAAE;YACpB,iBAAiB,mCACV,iBAAiB,GACjB,IAAA,oCAAwB,EAAC,UAAU,CAAC,CAC1C,CAAC;SACL;KACJ;IAED,iBAAiB,CAAC,YAAY,GAAG,MAAA,IAAI,CAAC,YAAY,0CAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC3E,iBAAiB,CAAC,OAAO,GAAG,MAAA,IAAI,CAAC,OAAO,0CAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACjE,iBAAiB,CAAC,UAAU,GAAG,MAAA,IAAI,CAAC,UAAU,0CAAE,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAE3E,OAAO,iBAAiB,CAAC;AAC7B,CAAC;AAED,SAAS,qBAAqB,CAC1B,IAAqC;IAErC,OAAO;QACH,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,MAAM,EAAE,6BAA6B,CAAC,IAAI,CAAC;KAC9C,CAAC;AACN,CAAC;AAED,SAAS,6BAA6B,CAAC,IAAqC;IACxE,MAAM,MAAM,GAAyC,EAAE,CAAC;IAExD,QAAQ,IAAI,EAAE;QACV,KAAK,eAAe,IAAI,IAAI;YACxB,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;YACvC,MAAM;QACV,KAAK,eAAe,IAAI,IAAI;YACxB,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;YACvC,MAAM;QACV,KAAK,eAAe,IAAI,IAAI;YACxB,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;YACvC,MAAM;QACV,KAAK,YAAY,IAAI,IAAI;YACrB,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;YACjC,MAAM;QACV,KAAK,gBAAgB,IAAI,IAAI;YACzB,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC;YACzC,MAAM;QACV,KAAK,YAAY,IAAI,IAAI;YACrB,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;YACjC,MAAM;QACV,KAAK,cAAc,IAAI,IAAI;YACvB,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;YACrC,MAAM;QACV,KAAK,cAAc,IAAI,IAAI;YACvB,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;YACrC,MAAM;QACV,KAAK,gBAAgB,IAAI,IAAI;YACzB,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC;YACzC,MAAM;QACV,KAAK,iBAAiB,IAAI,IAAI;YAC1B,IAAI,IAAI,CAAC,eAAe,EAAE;gBACtB,MAAM,CAAC,WAAW,CAAC,GAAG,IAAA,6BAAiB,EAAC,IAAI,CAAC,eAAe,CAAC,CAAC;aACjE;iBAAM;gBACH,MAAM,KAAK,CAAC,4DAA4D,CAAC,CAAC;aAC7E;YACD,MAAM;QACV;YACI,MAAM;KACb;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAS,iBAAiB,CACtB,MAAwE;IAExE,IAAI,MAAM,CAAC,WAAW,EAAE;QACpB,OAAO;YACH,KAAK,EAAE;gBACH,MAAM,EAAE,MAAM,CAAC,WAAW;aAC7B;SACJ,CAAC;KACL;IACD,IAAI,MAAM,CAAC,WAAW,EAAE;QACpB,OAAO;YACH,KAAK,EAAE;gBACH,MAAM,EAAE,MAAM,CAAC,WAAW;aAC7B;SACJ,CAAC;KACL;IACD,IAAI,MAAM,CAAC,cAAc,EAAE;QACvB,OAAO;YACH,KAAK,EAAE;gBACH,SAAS,EAAE,IAAA,6BAAiB,EAAC,MAAM,CAAC,cAAc,CAAC;aACtD;SACJ,CAAC;KACL;IACD,IAAI,MAAM,CAAC,SAAS,EAAE;QAClB,OAAO;YACH,KAAK,EAAE;gBACH,IAAI,EAAE,MAAM,CAAC,SAAS;aACzB;SACJ,CAAC;KACL;IACD,IAAI,gBAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE;QACjC,OAAO;YACH,KAAK,EAAE;gBACH,OAAO,EAAE,MAAM,CAAC,YAAY;aAC/B;SACJ,CAAC;KACL;IACD,IAAI,cAAc,IAAI,MAAM,EAAE;QAC1B,OAAO;YACH,KAAK,EAAE;gBACH,OAAO,EAAE,MAAM,CAAC,YAAY;aAC/B;SACJ,CAAC;KACL;IACD,OAAO,MAAM,CAAC;AAClB,CAAC"}
|
package/lib/converter/index.d.ts
CHANGED
|
@@ -4,10 +4,10 @@ import { fromFirstClassExtension } from './fceToFhir';
|
|
|
4
4
|
import { toFirstClassExtension } from './fhirToFce';
|
|
5
5
|
import { processLaunchContext as processLaunchContextToFce } from './fhirToFce/questionnaire/processExtensions';
|
|
6
6
|
export * from './utils';
|
|
7
|
-
export declare function convertFromFHIRExtension(
|
|
7
|
+
export declare function convertFromFHIRExtension(extensions: FHIRExtension[]): Partial<FCEQuestionnaireItem> | undefined;
|
|
8
8
|
export declare function convertToFHIRExtension(item: FCEQuestionnaireItem): FHIRExtension[];
|
|
9
9
|
export declare function extractExtension(extension: FCEExtension[] | undefined, url: 'ex:createdAt'): string | undefined;
|
|
10
|
-
export declare function
|
|
10
|
+
export declare function filterExtensions(item: FHIRQuestionnaireItem, url: string): FHIRExtension[] | undefined;
|
|
11
11
|
export declare function fromFHIRReference(r?: FHIRReference): InternalReference | undefined;
|
|
12
12
|
export declare function toFHIRReference(r?: InternalReference): FHIRReference | undefined;
|
|
13
13
|
export { toFirstClassExtension, fromFirstClassExtension, processLaunchContextToFce };
|
package/lib/converter/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.processLaunchContextToFce = exports.fromFirstClassExtension = exports.toFirstClassExtension = exports.toFHIRReference = exports.fromFHIRReference = exports.
|
|
3
|
+
exports.processLaunchContextToFce = exports.fromFirstClassExtension = exports.toFirstClassExtension = exports.toFHIRReference = exports.fromFHIRReference = exports.filterExtensions = exports.extractExtension = exports.convertToFHIRExtension = exports.convertFromFHIRExtension = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const extensions_1 = require("./extensions");
|
|
6
6
|
const fceToFhir_1 = require("./fceToFhir");
|
|
@@ -10,15 +10,19 @@ Object.defineProperty(exports, "toFirstClassExtension", { enumerable: true, get:
|
|
|
10
10
|
const processExtensions_1 = require("./fhirToFce/questionnaire/processExtensions");
|
|
11
11
|
Object.defineProperty(exports, "processLaunchContextToFce", { enumerable: true, get: function () { return processExtensions_1.processLaunchContext; } });
|
|
12
12
|
tslib_1.__exportStar(require("./utils"), exports);
|
|
13
|
-
function convertFromFHIRExtension(
|
|
14
|
-
const identifier =
|
|
13
|
+
function convertFromFHIRExtension(extensions) {
|
|
14
|
+
const identifier = extensions[0].url;
|
|
15
15
|
const transformer = extensions_1.extensionTransformers[identifier];
|
|
16
16
|
if (transformer !== undefined) {
|
|
17
17
|
if ('transform' in transformer) {
|
|
18
|
-
return transformer.transform.
|
|
18
|
+
return transformer.transform.fromExtensions(extensions);
|
|
19
19
|
}
|
|
20
20
|
else {
|
|
21
|
-
return {
|
|
21
|
+
return {
|
|
22
|
+
[transformer.path.questionnaire]: transformer.path.isCollection
|
|
23
|
+
? extensions.map((extension) => extension[transformer.path.extension])
|
|
24
|
+
: extensions[0][transformer.path.extension],
|
|
25
|
+
};
|
|
22
26
|
}
|
|
23
27
|
}
|
|
24
28
|
}
|
|
@@ -28,19 +32,16 @@ function convertToFHIRExtension(item) {
|
|
|
28
32
|
Object.values(extensions_1.ExtensionIdentifier).forEach((identifier) => {
|
|
29
33
|
const transformer = extensions_1.extensionTransformers[identifier];
|
|
30
34
|
if ('transform' in transformer) {
|
|
31
|
-
|
|
32
|
-
if (extension !== undefined) {
|
|
33
|
-
extensions.push(extension);
|
|
34
|
-
}
|
|
35
|
+
extensions.push(...transformer.transform.toExtensions(item));
|
|
35
36
|
}
|
|
36
37
|
else {
|
|
37
|
-
const
|
|
38
|
-
if (
|
|
39
|
-
const
|
|
38
|
+
const value = item[transformer.path.questionnaire];
|
|
39
|
+
if (value !== undefined) {
|
|
40
|
+
const valueArray = Array.isArray(value) ? value : [value];
|
|
41
|
+
extensions.push(...valueArray.map((extensionValue) => ({
|
|
40
42
|
[transformer.path.extension]: extensionValue,
|
|
41
43
|
url: identifier,
|
|
42
|
-
};
|
|
43
|
-
extensions.push(extension);
|
|
44
|
+
})));
|
|
44
45
|
}
|
|
45
46
|
}
|
|
46
47
|
});
|
|
@@ -52,15 +53,18 @@ function extractExtension(extension, url) {
|
|
|
52
53
|
return (_a = extension === null || extension === void 0 ? void 0 : extension.find((e) => e.url === url)) === null || _a === void 0 ? void 0 : _a.valueInstant;
|
|
53
54
|
}
|
|
54
55
|
exports.extractExtension = extractExtension;
|
|
55
|
-
function
|
|
56
|
+
function filterExtensions(item, url) {
|
|
56
57
|
var _a;
|
|
57
|
-
return (_a = item.extension) === null || _a === void 0 ? void 0 : _a.
|
|
58
|
+
return (_a = item.extension) === null || _a === void 0 ? void 0 : _a.filter((ext) => ext.url === url);
|
|
58
59
|
}
|
|
59
|
-
exports.
|
|
60
|
+
exports.filterExtensions = filterExtensions;
|
|
60
61
|
function fromFHIRReference(r) {
|
|
61
62
|
if (!r || !r.reference) {
|
|
62
63
|
return undefined;
|
|
63
64
|
}
|
|
65
|
+
// We remove original reference from r in this "strange" way
|
|
66
|
+
// TODO: re-write omitting
|
|
67
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
64
68
|
const { reference: literalReference } = r, commonReferenceProperties = tslib_1.__rest(r, ["reference"]);
|
|
65
69
|
const isHistoryVersionLink = r.reference.split('/').slice(-2, -1)[0] === '_history';
|
|
66
70
|
if (isHistoryVersionLink) {
|
|
@@ -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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"}
|
package/package.json
CHANGED
|
@@ -13,6 +13,7 @@ import fce_allergies from './resources/questionnaire_fce/allergies.json';
|
|
|
13
13
|
import fce_beverages from './resources/questionnaire_fce/beverages.json';
|
|
14
14
|
import fce_choice_answer_option from './resources/questionnaire_fce/choice_answer_option.json';
|
|
15
15
|
import fce_consent from './resources/questionnaire_fce/consent.json';
|
|
16
|
+
import fce_constraint from './resources/questionnaire_fce/constraint.json';
|
|
16
17
|
import fce_cqf_examples from './resources/questionnaire_fce/cqf-examples.json';
|
|
17
18
|
import fce_enable_when from './resources/questionnaire_fce/enable_when.json';
|
|
18
19
|
import fce_encounter_create from './resources/questionnaire_fce/encounter_create.json';
|
|
@@ -31,12 +32,14 @@ import fce_practitioner_role_create from './resources/questionnaire_fce/practiti
|
|
|
31
32
|
import fce_public_appointment from './resources/questionnaire_fce/public_appointment.json';
|
|
32
33
|
import fce_review_of_systems from './resources/questionnaire_fce/review_of_systems.json';
|
|
33
34
|
import fce_source_queries from './resources/questionnaire_fce/source_queries.json';
|
|
35
|
+
import fce_unit_option from './resources/questionnaire_fce/unit-option.json';
|
|
34
36
|
import fce_vitals from './resources/questionnaire_fce/vitals.json';
|
|
35
37
|
// fhir questionnaire
|
|
36
38
|
import fhir_allergies from './resources/questionnaire_fhir/allergies.json';
|
|
37
39
|
import fhir_beverages from './resources/questionnaire_fhir/beverages.json';
|
|
38
40
|
import fhir_choice_answer_option from './resources/questionnaire_fhir/choice_answer_option.json';
|
|
39
41
|
import fhir_consent from './resources/questionnaire_fhir/consent.json';
|
|
42
|
+
import fhir_constraint from './resources/questionnaire_fhir/constraint.json';
|
|
40
43
|
import fhir_cqf_examples from './resources/questionnaire_fhir/cqf-examples.json';
|
|
41
44
|
import fhir_enable_when from './resources/questionnaire_fhir/enable_when.json';
|
|
42
45
|
import fhir_encounter_create from './resources/questionnaire_fhir/encounter_create.json';
|
|
@@ -55,6 +58,7 @@ import fhir_practitioner_role_create from './resources/questionnaire_fhir/practi
|
|
|
55
58
|
import fhir_public_appointment from './resources/questionnaire_fhir/public_appointment.json';
|
|
56
59
|
import fhir_review_of_systems from './resources/questionnaire_fhir/review_of_systems.json';
|
|
57
60
|
import fhir_source_queries from './resources/questionnaire_fhir/source_queries.json';
|
|
61
|
+
import fhir_unit_option from './resources/questionnaire_fhir/unit-option.json';
|
|
58
62
|
import fhir_vitals from './resources/questionnaire_fhir/vitals.json';
|
|
59
63
|
// fce questionnaire response
|
|
60
64
|
import fce_allergies_inprogress_qr from './resources/questionnaire_response_fce/allergies_inprogress.json';
|
|
@@ -114,6 +118,8 @@ describe('Questionanire and QuestionnaireResponses transformation', () => {
|
|
|
114
118
|
[fhir_consent, fce_consent],
|
|
115
119
|
[fhir_enable_when, fce_enable_when],
|
|
116
120
|
[fhir_cqf_examples, fce_cqf_examples],
|
|
121
|
+
[fhir_constraint, fce_constraint],
|
|
122
|
+
[fhir_unit_option, fce_unit_option],
|
|
117
123
|
])(
|
|
118
124
|
'Each FHIR Questionnaire should convert to FCE',
|
|
119
125
|
async (fhir_questionnaire, fce_questionnaire) => {
|
|
@@ -147,6 +153,8 @@ describe('Questionanire and QuestionnaireResponses transformation', () => {
|
|
|
147
153
|
[fce_consent, fhir_consent],
|
|
148
154
|
[fce_enable_when, fhir_enable_when],
|
|
149
155
|
[fce_cqf_examples, fhir_cqf_examples],
|
|
156
|
+
[fce_constraint, fhir_constraint],
|
|
157
|
+
[fce_unit_option, fhir_unit_option],
|
|
150
158
|
])(
|
|
151
159
|
'Each FCE Questionnaire should convert to FHIR',
|
|
152
160
|
async (fce_questionnaire, fhir_questionnaire) => {
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"resourceType": "Questionnaire",
|
|
3
|
+
"id": "constraint",
|
|
4
|
+
"meta": {
|
|
5
|
+
"profile": ["https://beda.software/beda-emr-questionnaire"]
|
|
6
|
+
},
|
|
7
|
+
"status": "active",
|
|
8
|
+
"item": [
|
|
9
|
+
{
|
|
10
|
+
"type": "string",
|
|
11
|
+
"linkId": "email",
|
|
12
|
+
"itemConstraint": [
|
|
13
|
+
{
|
|
14
|
+
"key": "first",
|
|
15
|
+
"requirements": "Req first",
|
|
16
|
+
"severity": "error",
|
|
17
|
+
"human": "Human first",
|
|
18
|
+
"expression": "false"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"key": "second",
|
|
22
|
+
"requirements": "Req second",
|
|
23
|
+
"severity": "error",
|
|
24
|
+
"human": "Human second",
|
|
25
|
+
"expression": "true"
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
]
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"resourceType": "Questionnaire",
|
|
3
|
+
"id": "unit-option",
|
|
4
|
+
"meta": {
|
|
5
|
+
"profile": ["https://beda.software/beda-emr-questionnaire"]
|
|
6
|
+
},
|
|
7
|
+
"status": "active",
|
|
8
|
+
"item": [
|
|
9
|
+
{
|
|
10
|
+
"type": "quantity",
|
|
11
|
+
"linkId": "height",
|
|
12
|
+
"unitOption": [
|
|
13
|
+
{
|
|
14
|
+
"code": "foot",
|
|
15
|
+
"system": "http://unitsofmeasure.org",
|
|
16
|
+
"display": "ft"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"code": "inch",
|
|
20
|
+
"system": "http://unitsofmeasure.org",
|
|
21
|
+
"display": "in"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"code": "cm",
|
|
25
|
+
"system": "http://unitsofmeasure.org",
|
|
26
|
+
"display": "cm"
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"item": [
|
|
3
|
+
{
|
|
4
|
+
"type": "string",
|
|
5
|
+
"linkId": "email",
|
|
6
|
+
"extension": [
|
|
7
|
+
{
|
|
8
|
+
"url": "http://hl7.org/fhir/StructureDefinition/questionnaire-constraint",
|
|
9
|
+
"extension": [
|
|
10
|
+
{
|
|
11
|
+
"url": "key",
|
|
12
|
+
"valueId": "first"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"url": "human",
|
|
16
|
+
"valueString": "Human first"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"url": "severity",
|
|
20
|
+
"valueCode": "error"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"url": "expression",
|
|
24
|
+
"valueString": "false"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"url": "requirements",
|
|
28
|
+
"valueString": "Req first"
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"url": "http://hl7.org/fhir/StructureDefinition/questionnaire-constraint",
|
|
34
|
+
"extension": [
|
|
35
|
+
{
|
|
36
|
+
"url": "key",
|
|
37
|
+
"valueId": "second"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"url": "human",
|
|
41
|
+
"valueString": "Human second"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"url": "severity",
|
|
45
|
+
"valueCode": "error"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"url": "expression",
|
|
49
|
+
"valueString": "true"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"url": "requirements",
|
|
53
|
+
"valueString": "Req second"
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
]
|
|
58
|
+
}
|
|
59
|
+
],
|
|
60
|
+
"meta": {
|
|
61
|
+
"profile": ["https://beda.software/beda-emr-questionnaire"]
|
|
62
|
+
},
|
|
63
|
+
"status": "active",
|
|
64
|
+
"resourceType": "Questionnaire",
|
|
65
|
+
"id": "constraint"
|
|
66
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"item": [
|
|
3
|
+
{
|
|
4
|
+
"type": "quantity",
|
|
5
|
+
"linkId": "height",
|
|
6
|
+
"extension": [
|
|
7
|
+
{
|
|
8
|
+
"url": "http://hl7.org/fhir/StructureDefinition/questionnaire-unitOption",
|
|
9
|
+
"valueCoding": {
|
|
10
|
+
"code": "foot",
|
|
11
|
+
"system": "http://unitsofmeasure.org",
|
|
12
|
+
"display": "ft"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"url": "http://hl7.org/fhir/StructureDefinition/questionnaire-unitOption",
|
|
17
|
+
"valueCoding": {
|
|
18
|
+
"code": "inch",
|
|
19
|
+
"system": "http://unitsofmeasure.org",
|
|
20
|
+
"display": "in"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"url": "http://hl7.org/fhir/StructureDefinition/questionnaire-unitOption",
|
|
25
|
+
"valueCoding": {
|
|
26
|
+
"code": "cm",
|
|
27
|
+
"system": "http://unitsofmeasure.org",
|
|
28
|
+
"display": "cm"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"meta": {
|
|
35
|
+
"profile": ["https://beda.software/beda-emr-questionnaire"]
|
|
36
|
+
},
|
|
37
|
+
"status": "active",
|
|
38
|
+
"id": "unit-option",
|
|
39
|
+
"resourceType": "Questionnaire"
|
|
40
|
+
}
|
|
@@ -29,6 +29,7 @@ export enum ExtensionIdentifier {
|
|
|
29
29
|
ChoiceColumns = 'http://aidbox.io/fhir/StructureDefinition/questionnaire-choiceColumns',
|
|
30
30
|
|
|
31
31
|
ItemPopulationContext = 'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-itemPopulationContext',
|
|
32
|
+
ItemConstraint = 'http://hl7.org/fhir/StructureDefinition/questionnaire-constraint',
|
|
32
33
|
InitialExpression = 'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression',
|
|
33
34
|
ChoiceColumn = 'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-choiceColumn',
|
|
34
35
|
CalculatedExpression = 'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-calculatedExpression',
|
|
@@ -49,16 +50,17 @@ export type ExtensionTransformer = {
|
|
|
49
50
|
[key in ExtensionIdentifier]:
|
|
50
51
|
| {
|
|
51
52
|
transform: {
|
|
52
|
-
|
|
53
|
-
|
|
53
|
+
fromExtensions: (
|
|
54
|
+
extensions: FHIRExtension[],
|
|
54
55
|
) => Partial<FCEQuestionnaireItem> | undefined;
|
|
55
|
-
|
|
56
|
+
toExtensions: (item: FCEQuestionnaireItem) => FHIRExtension[];
|
|
56
57
|
};
|
|
57
58
|
}
|
|
58
59
|
| {
|
|
59
60
|
path: {
|
|
60
61
|
extension: keyof FHIRExtension;
|
|
61
62
|
questionnaire: keyof FCEQuestionnaireItem;
|
|
63
|
+
isCollection?: boolean;
|
|
62
64
|
};
|
|
63
65
|
};
|
|
64
66
|
};
|
|
@@ -80,27 +82,31 @@ export const extensionTransformers: ExtensionTransformer = {
|
|
|
80
82
|
path: { extension: 'valueCoding', questionnaire: 'unit' },
|
|
81
83
|
},
|
|
82
84
|
[ExtensionIdentifier.UnitOption]: {
|
|
83
|
-
path: { extension: 'valueCoding', questionnaire: 'unitOption' },
|
|
85
|
+
path: { extension: 'valueCoding', questionnaire: 'unitOption', isCollection: true },
|
|
84
86
|
},
|
|
85
87
|
[ExtensionIdentifier.RowsNumber]: {
|
|
86
88
|
path: { extension: 'valueInteger', questionnaire: 'rowsNumber' },
|
|
87
89
|
},
|
|
88
90
|
[ExtensionIdentifier.ReferenceResource]: {
|
|
89
91
|
transform: {
|
|
90
|
-
|
|
91
|
-
if (
|
|
92
|
-
return { referenceResource: [
|
|
92
|
+
fromExtensions: (extensions) => {
|
|
93
|
+
if (extensions[0]!.valueCode) {
|
|
94
|
+
return { referenceResource: [extensions[0]!.valueCode] };
|
|
93
95
|
} else {
|
|
94
96
|
return {};
|
|
95
97
|
}
|
|
96
98
|
},
|
|
97
|
-
|
|
99
|
+
toExtensions: (item) => {
|
|
98
100
|
if (item.referenceResource?.length) {
|
|
99
|
-
return
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
101
|
+
return [
|
|
102
|
+
{
|
|
103
|
+
url: ExtensionIdentifier.ReferenceResource,
|
|
104
|
+
valueCode: item.referenceResource[0],
|
|
105
|
+
},
|
|
106
|
+
];
|
|
103
107
|
}
|
|
108
|
+
|
|
109
|
+
return [];
|
|
104
110
|
},
|
|
105
111
|
},
|
|
106
112
|
},
|
|
@@ -121,26 +127,26 @@ export const extensionTransformers: ExtensionTransformer = {
|
|
|
121
127
|
},
|
|
122
128
|
[ExtensionIdentifier.MinValue]: {
|
|
123
129
|
transform: {
|
|
124
|
-
|
|
125
|
-
|
|
130
|
+
fromExtensions: (extensions) => ({ minValue: extensions[0]! }),
|
|
131
|
+
toExtensions: (item) => (item.minValue ? [item.minValue] : []),
|
|
126
132
|
},
|
|
127
133
|
},
|
|
128
134
|
[ExtensionIdentifier.MaxValue]: {
|
|
129
135
|
transform: {
|
|
130
|
-
|
|
131
|
-
|
|
136
|
+
fromExtensions: (extensions) => ({ maxValue: extensions[0]! }),
|
|
137
|
+
toExtensions: (item) => (item.maxValue ? [item.maxValue] : []),
|
|
132
138
|
},
|
|
133
139
|
},
|
|
134
140
|
[ExtensionIdentifier.MinQuantity]: {
|
|
135
141
|
transform: {
|
|
136
|
-
|
|
137
|
-
|
|
142
|
+
fromExtensions: (extensions) => ({ minQuantity: extensions[0]! }),
|
|
143
|
+
toExtensions: (item) => (item.minQuantity ? [item.minQuantity] : []),
|
|
138
144
|
},
|
|
139
145
|
},
|
|
140
146
|
[ExtensionIdentifier.MaxQuantity]: {
|
|
141
147
|
transform: {
|
|
142
|
-
|
|
143
|
-
|
|
148
|
+
fromExtensions: (extensions) => ({ maxQuantity: extensions[0]! }),
|
|
149
|
+
toExtensions: (item) => (item.maxQuantity ? [item.maxQuantity] : []),
|
|
144
150
|
},
|
|
145
151
|
},
|
|
146
152
|
[ExtensionIdentifier.ShowOrdinalValue]: {
|
|
@@ -171,6 +177,62 @@ export const extensionTransformers: ExtensionTransformer = {
|
|
|
171
177
|
[ExtensionIdentifier.ItemPopulationContext]: {
|
|
172
178
|
path: { extension: 'valueExpression', questionnaire: 'itemPopulationContext' },
|
|
173
179
|
},
|
|
180
|
+
[ExtensionIdentifier.ItemConstraint]: {
|
|
181
|
+
transform: {
|
|
182
|
+
fromExtensions: (extensions) => {
|
|
183
|
+
return {
|
|
184
|
+
itemConstraint: extensions.map((extension) => {
|
|
185
|
+
const itemConstraintExtension = extension.extension!;
|
|
186
|
+
|
|
187
|
+
return {
|
|
188
|
+
key: itemConstraintExtension.find((obj) => obj.url === 'key')!.valueId!,
|
|
189
|
+
requirements: itemConstraintExtension.find(
|
|
190
|
+
(obj) => obj.url === 'requirements',
|
|
191
|
+
)?.valueString,
|
|
192
|
+
severity: itemConstraintExtension.find((obj) => obj.url === 'severity')!
|
|
193
|
+
.valueCode!,
|
|
194
|
+
human: itemConstraintExtension.find((obj) => obj.url === 'human')!
|
|
195
|
+
.valueString!,
|
|
196
|
+
expression: itemConstraintExtension.find(
|
|
197
|
+
(obj) => obj.url === 'expression',
|
|
198
|
+
)!.valueString!,
|
|
199
|
+
};
|
|
200
|
+
}),
|
|
201
|
+
};
|
|
202
|
+
},
|
|
203
|
+
toExtensions: (item) => {
|
|
204
|
+
if (item.itemConstraint) {
|
|
205
|
+
return item.itemConstraint.map((itemConstraint) => ({
|
|
206
|
+
url: ExtensionIdentifier.ItemConstraint,
|
|
207
|
+
extension: [
|
|
208
|
+
{
|
|
209
|
+
url: 'key',
|
|
210
|
+
valueId: itemConstraint.key,
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
url: 'requirements',
|
|
214
|
+
valueString: itemConstraint.requirements,
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
url: 'severity',
|
|
218
|
+
valueCode: itemConstraint.severity,
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
url: 'human',
|
|
222
|
+
valueString: itemConstraint?.human,
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
url: 'expression',
|
|
226
|
+
valueString: itemConstraint.expression,
|
|
227
|
+
},
|
|
228
|
+
],
|
|
229
|
+
}));
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
return [];
|
|
233
|
+
},
|
|
234
|
+
},
|
|
235
|
+
},
|
|
174
236
|
[ExtensionIdentifier.InitialExpression]: {
|
|
175
237
|
path: { extension: 'valueExpression', questionnaire: 'initialExpression' },
|
|
176
238
|
},
|
|
@@ -185,38 +247,39 @@ export const extensionTransformers: ExtensionTransformer = {
|
|
|
185
247
|
},
|
|
186
248
|
[ExtensionIdentifier.ChoiceColumn]: {
|
|
187
249
|
transform: {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
}
|
|
250
|
+
fromExtensions: (extensions) => {
|
|
251
|
+
return {
|
|
252
|
+
choiceColumn: extensions.map((extension) => {
|
|
253
|
+
const choiceColumnExtension = extension.extension!;
|
|
254
|
+
|
|
255
|
+
return {
|
|
256
|
+
forDisplay:
|
|
257
|
+
choiceColumnExtension.find((obj) => obj.url === 'forDisplay')
|
|
258
|
+
?.valueBoolean ?? false,
|
|
259
|
+
path: choiceColumnExtension.find((obj) => obj.url === 'path')
|
|
260
|
+
?.valueString,
|
|
261
|
+
};
|
|
262
|
+
}),
|
|
263
|
+
};
|
|
203
264
|
},
|
|
204
|
-
|
|
265
|
+
toExtensions: (item) => {
|
|
205
266
|
if (item.choiceColumn) {
|
|
206
|
-
return {
|
|
267
|
+
return item.choiceColumn.map((choiceColumn) => ({
|
|
207
268
|
url: ExtensionIdentifier.ChoiceColumn,
|
|
208
269
|
extension: [
|
|
209
270
|
{
|
|
210
271
|
url: 'forDisplay',
|
|
211
|
-
valueBoolean:
|
|
272
|
+
valueBoolean: choiceColumn.forDisplay,
|
|
212
273
|
},
|
|
213
274
|
{
|
|
214
275
|
url: 'path',
|
|
215
|
-
valueString:
|
|
276
|
+
valueString: choiceColumn.path,
|
|
216
277
|
},
|
|
217
278
|
],
|
|
218
|
-
};
|
|
279
|
+
}));
|
|
219
280
|
}
|
|
281
|
+
|
|
282
|
+
return [];
|
|
220
283
|
},
|
|
221
284
|
},
|
|
222
285
|
},
|
|
@@ -21,7 +21,7 @@ export function processItems(items: FCEQuestionnaireItem[]): FHIRQuestionnaireIt
|
|
|
21
21
|
return items.map((item) => {
|
|
22
22
|
const extensions = convertToFHIRExtension(item);
|
|
23
23
|
if (extensions.length > 0) {
|
|
24
|
-
const fieldsToOmit = extensions
|
|
24
|
+
const fieldsToOmit = Object.values(_.groupBy(extensions, (extension) => extension.url))
|
|
25
25
|
.map(convertFromFHIRExtension)
|
|
26
26
|
.filter((ext): ext is Partial<FCEQuestionnaireItem> => ext !== undefined)
|
|
27
27
|
.flatMap(Object.keys);
|
|
@@ -14,10 +14,9 @@ import {
|
|
|
14
14
|
QuestionnaireItemEnableWhenAnswer as FCEQuestionnaireItemEnableWhenAnswer,
|
|
15
15
|
QuestionnaireItemAnswerOption as FCEQuestionnaireItemAnswerOption,
|
|
16
16
|
QuestionnaireItemInitial as FCEQuestionnaireItemInitial,
|
|
17
|
-
Coding as FCECoding,
|
|
18
17
|
} from 'shared/src/contrib/aidbox';
|
|
19
18
|
|
|
20
|
-
import { convertFromFHIRExtension,
|
|
19
|
+
import { convertFromFHIRExtension, filterExtensions, fromFHIRReference } from '../../../converter';
|
|
21
20
|
import { ExtensionIdentifier } from '../../extensions';
|
|
22
21
|
|
|
23
22
|
export function processItems(fhirQuestionnaire: FHIRQuestionnaire) {
|
|
@@ -41,18 +40,6 @@ function getUpdatedPropertiesFromItem(item: FHIRQuestionnaireItem) {
|
|
|
41
40
|
let updatedProperties: FCEQuestionnaireItem = { linkId: item.linkId, type: item.type };
|
|
42
41
|
|
|
43
42
|
for (const identifier of Object.values(ExtensionIdentifier)) {
|
|
44
|
-
if (identifier === ExtensionIdentifier.UnitOption) {
|
|
45
|
-
const unitOptions =
|
|
46
|
-
item.extension?.filter((ext) => ext.url === ExtensionIdentifier.UnitOption) || [];
|
|
47
|
-
if (unitOptions.length > 0) {
|
|
48
|
-
const unitOption = unitOptions.map(
|
|
49
|
-
(ext) => convertFromFHIRExtension(ext)?.unitOption,
|
|
50
|
-
) as FCECoding[];
|
|
51
|
-
updatedProperties = { ...updatedProperties, unitOption };
|
|
52
|
-
}
|
|
53
|
-
continue;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
43
|
for (const property of Object.keys(item)) {
|
|
57
44
|
const element = item[property as keyof FHIRQuestionnaireItem];
|
|
58
45
|
if (property.startsWith('_') && element instanceof Object) {
|
|
@@ -61,18 +48,18 @@ function getUpdatedPropertiesFromItem(item: FHIRQuestionnaireItem) {
|
|
|
61
48
|
if (extension.url === identifier) {
|
|
62
49
|
updatedProperties = {
|
|
63
50
|
...updatedProperties,
|
|
64
|
-
...{ [property]: convertFromFHIRExtension(extension) },
|
|
51
|
+
...{ [property]: convertFromFHIRExtension([extension]) },
|
|
65
52
|
};
|
|
66
53
|
}
|
|
67
54
|
}
|
|
68
55
|
}
|
|
69
56
|
}
|
|
70
57
|
|
|
71
|
-
const
|
|
72
|
-
if (
|
|
58
|
+
const extensions = filterExtensions(item, identifier);
|
|
59
|
+
if (extensions?.length) {
|
|
73
60
|
updatedProperties = {
|
|
74
61
|
...updatedProperties,
|
|
75
|
-
...convertFromFHIRExtension(
|
|
62
|
+
...convertFromFHIRExtension(extensions),
|
|
76
63
|
};
|
|
77
64
|
}
|
|
78
65
|
}
|
package/src/converter/index.ts
CHANGED
|
@@ -17,15 +17,19 @@ import { processLaunchContext as processLaunchContextToFce } from './fhirToFce/q
|
|
|
17
17
|
export * from './utils';
|
|
18
18
|
|
|
19
19
|
export function convertFromFHIRExtension(
|
|
20
|
-
|
|
20
|
+
extensions: FHIRExtension[],
|
|
21
21
|
): Partial<FCEQuestionnaireItem> | undefined {
|
|
22
|
-
const identifier =
|
|
22
|
+
const identifier = extensions[0]!.url;
|
|
23
23
|
const transformer = extensionTransformers[identifier as ExtensionIdentifier];
|
|
24
24
|
if (transformer !== undefined) {
|
|
25
25
|
if ('transform' in transformer) {
|
|
26
|
-
return transformer.transform.
|
|
26
|
+
return transformer.transform.fromExtensions(extensions);
|
|
27
27
|
} else {
|
|
28
|
-
return {
|
|
28
|
+
return {
|
|
29
|
+
[transformer.path.questionnaire]: transformer.path.isCollection
|
|
30
|
+
? extensions.map((extension) => extension[transformer.path.extension])
|
|
31
|
+
: extensions[0]![transformer.path.extension],
|
|
32
|
+
};
|
|
29
33
|
}
|
|
30
34
|
}
|
|
31
35
|
}
|
|
@@ -35,18 +39,18 @@ export function convertToFHIRExtension(item: FCEQuestionnaireItem): FHIRExtensio
|
|
|
35
39
|
Object.values(ExtensionIdentifier).forEach((identifier) => {
|
|
36
40
|
const transformer = extensionTransformers[identifier];
|
|
37
41
|
if ('transform' in transformer) {
|
|
38
|
-
|
|
39
|
-
if (extension !== undefined) {
|
|
40
|
-
extensions.push(extension);
|
|
41
|
-
}
|
|
42
|
+
extensions.push(...transformer.transform.toExtensions(item));
|
|
42
43
|
} else {
|
|
43
|
-
const
|
|
44
|
-
if (
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
44
|
+
const value = item[transformer.path.questionnaire];
|
|
45
|
+
if (value !== undefined) {
|
|
46
|
+
const valueArray = Array.isArray(value) ? value : [value];
|
|
47
|
+
|
|
48
|
+
extensions.push(
|
|
49
|
+
...valueArray.map((extensionValue) => ({
|
|
50
|
+
[transformer.path.extension]: extensionValue,
|
|
51
|
+
url: identifier,
|
|
52
|
+
})),
|
|
53
|
+
);
|
|
50
54
|
}
|
|
51
55
|
}
|
|
52
56
|
});
|
|
@@ -57,8 +61,8 @@ export function extractExtension(extension: FCEExtension[] | undefined, url: 'ex
|
|
|
57
61
|
return extension?.find((e) => e.url === url)?.valueInstant;
|
|
58
62
|
}
|
|
59
63
|
|
|
60
|
-
export function
|
|
61
|
-
return item.extension?.
|
|
64
|
+
export function filterExtensions(item: FHIRQuestionnaireItem, url: string) {
|
|
65
|
+
return item.extension?.filter((ext) => ext.url === url);
|
|
62
66
|
}
|
|
63
67
|
|
|
64
68
|
export function fromFHIRReference(r?: FHIRReference): InternalReference | undefined {
|
|
@@ -66,6 +70,9 @@ export function fromFHIRReference(r?: FHIRReference): InternalReference | undefi
|
|
|
66
70
|
return undefined;
|
|
67
71
|
}
|
|
68
72
|
|
|
73
|
+
// We remove original reference from r in this "strange" way
|
|
74
|
+
// TODO: re-write omitting
|
|
75
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
69
76
|
const { reference: literalReference, ...commonReferenceProperties } = r;
|
|
70
77
|
const isHistoryVersionLink = r.reference.split('/').slice(-2, -1)[0] === '_history';
|
|
71
78
|
|