Skip to content

Commit dc2de27

Browse files
committed
Add support for variable in FCE converter
1 parent c520247 commit dc2de27

File tree

4 files changed

+95
-37
lines changed

4 files changed

+95
-37
lines changed

src/converter/__tests__/fce.test.ts

Lines changed: 24 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
1-
import {
2-
QuestionnaireResponse as FHIRQuestionnaireResponse,
3-
Questionnaire as FHIRQuestionnaire,
4-
} from 'fhir/r4b';
5-
import {describe, expect, test} from 'vitest'
1+
import { QuestionnaireResponse as FHIRQuestionnaireResponse, Questionnaire as FHIRQuestionnaire } from 'fhir/r4b';
2+
import { describe, expect, test } from 'vitest';
63

74
import {
85
QuestionnaireResponse as FCEQuestionnaireResponse,
@@ -35,6 +32,7 @@ import fce_review_of_systems from './resources/questionnaire_fce/review_of_syste
3532
import fce_source_queries from './resources/questionnaire_fce/source_queries.json';
3633
import fce_unit_option from './resources/questionnaire_fce/unit-option.json';
3734
import fce_vitals from './resources/questionnaire_fce/vitals.json';
35+
import fce_variable from './resources/questionnaire_fce/variable.json';
3836
// fhir questionnaire
3937
import fhir_allergies from './resources/questionnaire_fhir/allergies.json';
4038
import fhir_beverages from './resources/questionnaire_fhir/beverages.json';
@@ -61,6 +59,7 @@ import fhir_review_of_systems from './resources/questionnaire_fhir/review_of_sys
6159
import fhir_source_queries from './resources/questionnaire_fhir/source_queries.json';
6260
import fhir_unit_option from './resources/questionnaire_fhir/unit-option.json';
6361
import fhir_vitals from './resources/questionnaire_fhir/vitals.json';
62+
import fhir_variable from './resources/questionnaire_fhir/variable.json';
6463
// fce questionnaire response
6564
import fce_allergies_inprogress_qr from './resources/questionnaire_response_fce/allergies_inprogress.json';
6665
import fce_cardiology_qr from './resources/questionnaire_response_fce/cardiology.json';
@@ -121,14 +120,10 @@ describe('Questionanire and QuestionnaireResponses transformation', () => {
121120
[fhir_cqf_examples, fce_cqf_examples],
122121
[fhir_constraint, fce_constraint],
123122
[fhir_unit_option, fce_unit_option],
124-
])(
125-
'Each FHIR Questionnaire should convert to FCE',
126-
async (fhir_questionnaire, fce_questionnaire) => {
127-
expect(toFirstClassExtension(fhir_questionnaire as FHIRQuestionnaire)).toStrictEqual(
128-
fce_questionnaire,
129-
);
130-
},
131-
);
123+
[fhir_variable, fce_variable],
124+
])('Each FHIR Questionnaire should convert to FCE', async (fhir_questionnaire, fce_questionnaire) => {
125+
expect(toFirstClassExtension(fhir_questionnaire as FHIRQuestionnaire)).toStrictEqual(fce_questionnaire);
126+
});
132127

133128
test.each([
134129
[fce_allergies, fhir_allergies],
@@ -156,14 +151,12 @@ describe('Questionanire and QuestionnaireResponses transformation', () => {
156151
[fce_cqf_examples, fhir_cqf_examples],
157152
[fce_constraint, fhir_constraint],
158153
[fce_unit_option, fhir_unit_option],
159-
])(
160-
'Each FCE Questionnaire should convert to FHIR',
161-
async (fce_questionnaire, fhir_questionnaire) => {
162-
expect(
163-
sortExtensionsList(fromFirstClassExtension(fce_questionnaire as FCEQuestionnaire)),
164-
).toStrictEqual(sortExtensionsList(fhir_questionnaire));
165-
},
166-
);
154+
[fce_variable, fhir_variable],
155+
])('Each FCE Questionnaire should convert to FHIR', async (fce_questionnaire, fhir_questionnaire) => {
156+
expect(sortExtensionsList(fromFirstClassExtension(fce_questionnaire as FCEQuestionnaire))).toStrictEqual(
157+
sortExtensionsList(fhir_questionnaire),
158+
);
159+
});
167160

168161
test.each([
169162
[fhir_allergies_inprogress_qr, fce_allergies_inprogress_qr],
@@ -179,14 +172,11 @@ describe('Questionanire and QuestionnaireResponses transformation', () => {
179172
[fhir_practitioner_qr, fce_practitioner_qr],
180173
[fhir_review_of_systems_qr, fce_review_of_systems_qr],
181174
[fhir_vitals_qr, fce_vitals_qr],
182-
])(
183-
'Each FHIR QuestionnaireResponse should convert to FCE',
184-
async (fhirQuestionnaireResponse, expectedFCE) => {
185-
expect(
186-
toFirstClassExtension(fhirQuestionnaireResponse as FHIRQuestionnaireResponse),
187-
).toStrictEqual(expectedFCE);
188-
},
189-
);
175+
])('Each FHIR QuestionnaireResponse should convert to FCE', async (fhirQuestionnaireResponse, expectedFCE) => {
176+
expect(toFirstClassExtension(fhirQuestionnaireResponse as FHIRQuestionnaireResponse)).toStrictEqual(
177+
expectedFCE,
178+
);
179+
});
190180

191181
test.each([
192182
[fce_allergies_inprogress_qr, fhir_allergies_inprogress_qr],
@@ -203,12 +193,9 @@ describe('Questionanire and QuestionnaireResponses transformation', () => {
203193
[fce_review_of_systems_qr, fhir_review_of_systems_qr],
204194
[fce_vitals_qr, fhir_vitals_qr],
205195
[fce_reference_answer_with_assoc, fhir_reference_answer_with_assoc],
206-
])(
207-
'Each FCE QuestionnaireResponse should convert to FHIR',
208-
async (fceQuestionnaireResponse, expectedFHIR) => {
209-
expect(
210-
fromFirstClassExtension(fceQuestionnaireResponse as FCEQuestionnaireResponse),
211-
).toStrictEqual(expectedFHIR);
212-
},
213-
);
196+
])('Each FCE QuestionnaireResponse should convert to FHIR', async (fceQuestionnaireResponse, expectedFHIR) => {
197+
expect(fromFirstClassExtension(fceQuestionnaireResponse as FCEQuestionnaireResponse)).toStrictEqual(
198+
expectedFHIR,
199+
);
200+
});
214201
});
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
{
2+
"resourceType": "Questionnaire",
3+
"id": "variable",
4+
"meta": {
5+
"profile": [
6+
"https://emr-core.beda.software/StructureDefinition/fhir-emr-questionnaire"
7+
]
8+
},
9+
"status": "active",
10+
"assembledFrom": "variable",
11+
"item": [
12+
{
13+
"type": "string",
14+
"linkId": "test",
15+
"variable": [
16+
{
17+
"name": "First",
18+
"language": "text/fhirpath",
19+
"expression": "'First'"
20+
},
21+
{
22+
"name": "Second",
23+
"language": "text/fhirpath",
24+
"expression": "'Second'"
25+
}
26+
]
27+
}
28+
]
29+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
{
2+
"item": [
3+
{
4+
"type": "string",
5+
"linkId": "test",
6+
"extension": [
7+
{
8+
"url": "http://hl7.org/fhir/StructureDefinition/variable",
9+
"valueExpression": {
10+
"name": "First",
11+
"language": "text/fhirpath",
12+
"expression": "'First'"
13+
}
14+
},
15+
{
16+
"url": "http://hl7.org/fhir/StructureDefinition/variable",
17+
"valueExpression": {
18+
"name": "Second",
19+
"language": "text/fhirpath",
20+
"expression": "'Second'"
21+
}
22+
}
23+
]
24+
}
25+
],
26+
"meta": {
27+
"profile": ["https://emr-core.beda.software/StructureDefinition/fhir-emr-questionnaire"]
28+
},
29+
"extension": [
30+
{
31+
"url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-assembledFrom",
32+
"valueCanonical": "variable"
33+
}
34+
],
35+
"status": "active",
36+
"id": "variable",
37+
"resourceType": "Questionnaire"
38+
}

src/converter/extensions.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ export enum ExtensionIdentifier {
3636
EnableWhenExpression = 'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-enableWhenExpression',
3737
AnswerExpression = 'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-answerExpression',
3838
CqfExpression = 'http://hl7.org/fhir/StructureDefinition/cqf-expression',
39+
Variable = 'http://hl7.org/fhir/StructureDefinition/variable',
3940

4041
AdjustLastToRight = 'https://beda.software/fhir-emr-questionnaire/adjust-last-to-right',
4142
SliderStart = 'https://beda.software/fhir-emr-questionnaire/slider-start',
@@ -226,6 +227,9 @@ export const extensionTransformers: ExtensionTransformer = {
226227
},
227228
},
228229
},
230+
[ExtensionIdentifier.Variable]: {
231+
path: { extension: 'valueExpression', questionnaire: 'variable', isCollection: true },
232+
},
229233
[ExtensionIdentifier.InitialExpression]: {
230234
path: { extension: 'valueExpression', questionnaire: 'initialExpression' },
231235
},

0 commit comments

Comments
 (0)