From 84880feb6f96925dfd04fc379f785ef3db2f4e73 Mon Sep 17 00:00:00 2001 From: Brenin Rhodes Date: Wed, 3 Jul 2024 12:28:31 -0600 Subject: [PATCH] Add support for the SDC Observation Extract Category extension (#475) * Add support for the SDC Observation Extract Category extension * Fix test --------- Co-authored-by: JP --- .../extract/ProcessItem.java | 14 ++-- .../extract/dstu3/ObservationResolver.java | 16 ++-- .../extract/r4/ObservationResolver.java | 16 ++-- .../extract/r5/ObservationResolver.java | 16 ++-- .../QuestionnaireResponseProcessorTests.java | 2 +- ...act-sdc-profile-example-multi-subject.json | 12 +-- ...nse-sdc-profile-example-multi-subject.json | 78 +++++++++++++++++++ ...act-sdc-profile-example-multi-subject.json | 12 +-- ...nse-sdc-profile-example-multi-subject.json | 78 +++++++++++++++++++ ...act-sdc-profile-example-multi-subject.json | 12 +-- ...nse-sdc-profile-example-multi-subject.json | 78 +++++++++++++++++++ .../opencds/cqf/fhir/utility/Constants.java | 4 + 12 files changed, 299 insertions(+), 39 deletions(-) diff --git a/cqf-fhir-cr/src/main/java/org/opencds/cqf/fhir/cr/questionnaireresponse/extract/ProcessItem.java b/cqf-fhir-cr/src/main/java/org/opencds/cqf/fhir/cr/questionnaireresponse/extract/ProcessItem.java index 86f021dc8..3305d3c6f 100644 --- a/cqf-fhir-cr/src/main/java/org/opencds/cqf/fhir/cr/questionnaireresponse/extract/ProcessItem.java +++ b/cqf-fhir-cr/src/main/java/org/opencds/cqf/fhir/cr/questionnaireresponse/extract/ProcessItem.java @@ -4,8 +4,10 @@ import java.util.Map; import org.hl7.fhir.instance.model.api.IBaseBackboneElement; import org.hl7.fhir.instance.model.api.IBaseCoding; +import org.hl7.fhir.instance.model.api.IBaseExtension; import org.hl7.fhir.instance.model.api.IBaseReference; import org.hl7.fhir.instance.model.api.IBaseResource; +import org.opencds.cqf.fhir.utility.Constants; public class ProcessItem { public void processItem( @@ -18,6 +20,7 @@ public void processItem( throw new IllegalArgumentException( "Unable to retrieve Questionnaire code map for Observation based extraction"); } + var categoryExt = request.getExtensionByUrl(item, Constants.SDC_QUESTIONNAIRE_OBSERVATION_EXTRACT_CATEGORY); var answers = request.resolvePathList(item, "answer", IBaseBackboneElement.class); if (!answers.isEmpty()) { answers.forEach(answer -> { @@ -30,7 +33,7 @@ public void processItem( if (questionnaireCodeMap.get(linkId) != null && !questionnaireCodeMap.get(linkId).isEmpty()) { resources.add(createObservationFromItemAnswer( - request, answer, linkId, subject, questionnaireCodeMap)); + request, answer, linkId, subject, questionnaireCodeMap, categoryExt)); } } }); @@ -42,19 +45,20 @@ private IBaseResource createObservationFromItemAnswer( IBaseBackboneElement answer, String linkId, IBaseReference subject, - Map> questionnaireCodeMap) { + Map> questionnaireCodeMap, + IBaseExtension categoryExt) { // Observation-based extraction - // http://build.fhir.org/ig/HL7/sdc/extraction.html#observation-based-extraction switch (request.getFhirVersion()) { case DSTU3: return new org.opencds.cqf.fhir.cr.questionnaireresponse.extract.dstu3.ObservationResolver() - .resolve(request, answer, linkId, subject, questionnaireCodeMap); + .resolve(request, answer, linkId, subject, questionnaireCodeMap, categoryExt); case R4: return new org.opencds.cqf.fhir.cr.questionnaireresponse.extract.r4.ObservationResolver() - .resolve(request, answer, linkId, subject, questionnaireCodeMap); + .resolve(request, answer, linkId, subject, questionnaireCodeMap, categoryExt); case R5: return new org.opencds.cqf.fhir.cr.questionnaireresponse.extract.r5.ObservationResolver() - .resolve(request, answer, linkId, subject, questionnaireCodeMap); + .resolve(request, answer, linkId, subject, questionnaireCodeMap, categoryExt); default: return null; diff --git a/cqf-fhir-cr/src/main/java/org/opencds/cqf/fhir/cr/questionnaireresponse/extract/dstu3/ObservationResolver.java b/cqf-fhir-cr/src/main/java/org/opencds/cqf/fhir/cr/questionnaireresponse/extract/dstu3/ObservationResolver.java index eecf1db34..c5180e74c 100644 --- a/cqf-fhir-cr/src/main/java/org/opencds/cqf/fhir/cr/questionnaireresponse/extract/dstu3/ObservationResolver.java +++ b/cqf-fhir-cr/src/main/java/org/opencds/cqf/fhir/cr/questionnaireresponse/extract/dstu3/ObservationResolver.java @@ -18,9 +18,11 @@ import org.hl7.fhir.dstu3.model.StringType; import org.hl7.fhir.instance.model.api.IBaseBackboneElement; import org.hl7.fhir.instance.model.api.IBaseCoding; +import org.hl7.fhir.instance.model.api.IBaseExtension; import org.hl7.fhir.instance.model.api.IBaseReference; import org.hl7.fhir.instance.model.api.IBaseResource; import org.opencds.cqf.fhir.cr.questionnaireresponse.extract.ExtractRequest; +import org.opencds.cqf.fhir.utility.Constants; public class ObservationResolver { public IBaseResource resolve( @@ -28,7 +30,8 @@ public IBaseResource resolve( IBaseBackboneElement baseAnswer, String linkId, IBaseReference subject, - Map> questionnaireCodeMap) { + Map> questionnaireCodeMap, + IBaseExtension categoryExt) { var questionnaireResponse = (QuestionnaireResponse) request.getQuestionnaireResponse(); var answer = (QuestionnaireResponseItemAnswerComponent) baseAnswer; var obs = new Observation(); @@ -37,10 +40,13 @@ public IBaseResource resolve( // obs.setPartOf(questionnaireResponse.getPartOf()); obs.setStatus(Observation.ObservationStatus.FINAL); - var qrCategoryCoding = new Coding(); - qrCategoryCoding.setCode("survey"); - qrCategoryCoding.setSystem("http://hl7.org/fhir/observation-category"); - obs.setCategory(Collections.singletonList(new CodeableConcept().addCoding(qrCategoryCoding))); + var qrCategoryCode = categoryExt == null + ? new CodeableConcept() + .addCoding(new Coding() + .setSystem(Constants.SDC_OBSERVATION_CATEGORY) + .setCode(Constants.SDC_CATEGORY_SURVEY)) + : (CodeableConcept) categoryExt.getValue(); + obs.setCategory(Collections.singletonList(qrCategoryCode)); obs.setCode(new CodeableConcept() .setCoding(questionnaireCodeMap.get(linkId).stream() diff --git a/cqf-fhir-cr/src/main/java/org/opencds/cqf/fhir/cr/questionnaireresponse/extract/r4/ObservationResolver.java b/cqf-fhir-cr/src/main/java/org/opencds/cqf/fhir/cr/questionnaireresponse/extract/r4/ObservationResolver.java index 88ed08142..baab2d37c 100644 --- a/cqf-fhir-cr/src/main/java/org/opencds/cqf/fhir/cr/questionnaireresponse/extract/r4/ObservationResolver.java +++ b/cqf-fhir-cr/src/main/java/org/opencds/cqf/fhir/cr/questionnaireresponse/extract/r4/ObservationResolver.java @@ -7,6 +7,7 @@ import java.util.stream.Collectors; import org.hl7.fhir.instance.model.api.IBaseBackboneElement; import org.hl7.fhir.instance.model.api.IBaseCoding; +import org.hl7.fhir.instance.model.api.IBaseExtension; import org.hl7.fhir.instance.model.api.IBaseReference; import org.hl7.fhir.instance.model.api.IBaseResource; import org.hl7.fhir.r4.model.CodeableConcept; @@ -21,6 +22,7 @@ import org.hl7.fhir.r4.model.Reference; import org.hl7.fhir.r4.model.StringType; import org.opencds.cqf.fhir.cr.questionnaireresponse.extract.ExtractRequest; +import org.opencds.cqf.fhir.utility.Constants; public class ObservationResolver { public IBaseResource resolve( @@ -28,7 +30,8 @@ public IBaseResource resolve( IBaseBackboneElement baseAnswer, String linkId, IBaseReference subject, - Map> questionnaireCodeMap) { + Map> questionnaireCodeMap, + IBaseExtension categoryExt) { var questionnaireResponse = (QuestionnaireResponse) request.getQuestionnaireResponse(); var answer = (QuestionnaireResponseItemAnswerComponent) baseAnswer; var obs = new Observation(); @@ -37,10 +40,13 @@ public IBaseResource resolve( obs.setPartOf(questionnaireResponse.getPartOf()); obs.setStatus(Observation.ObservationStatus.FINAL); - var qrCategoryCoding = new Coding(); - qrCategoryCoding.setCode("survey"); - qrCategoryCoding.setSystem("http://hl7.org/fhir/observation-category"); - obs.setCategory(Collections.singletonList(new CodeableConcept().addCoding(qrCategoryCoding))); + var qrCategoryCode = categoryExt == null + ? new CodeableConcept() + .addCoding(new Coding() + .setSystem(Constants.SDC_OBSERVATION_CATEGORY) + .setCode(Constants.SDC_CATEGORY_SURVEY)) + : (CodeableConcept) categoryExt.getValue(); + obs.setCategory(Collections.singletonList(qrCategoryCode)); obs.setCode(new CodeableConcept() .setCoding(questionnaireCodeMap.get(linkId).stream() diff --git a/cqf-fhir-cr/src/main/java/org/opencds/cqf/fhir/cr/questionnaireresponse/extract/r5/ObservationResolver.java b/cqf-fhir-cr/src/main/java/org/opencds/cqf/fhir/cr/questionnaireresponse/extract/r5/ObservationResolver.java index d9b3b5aa0..f5c5cc743 100644 --- a/cqf-fhir-cr/src/main/java/org/opencds/cqf/fhir/cr/questionnaireresponse/extract/r5/ObservationResolver.java +++ b/cqf-fhir-cr/src/main/java/org/opencds/cqf/fhir/cr/questionnaireresponse/extract/r5/ObservationResolver.java @@ -7,6 +7,7 @@ import java.util.stream.Collectors; import org.hl7.fhir.instance.model.api.IBaseBackboneElement; import org.hl7.fhir.instance.model.api.IBaseCoding; +import org.hl7.fhir.instance.model.api.IBaseExtension; import org.hl7.fhir.instance.model.api.IBaseReference; import org.hl7.fhir.instance.model.api.IBaseResource; import org.hl7.fhir.r5.model.CodeableConcept; @@ -22,6 +23,7 @@ import org.hl7.fhir.r5.model.Reference; import org.hl7.fhir.r5.model.StringType; import org.opencds.cqf.fhir.cr.questionnaireresponse.extract.ExtractRequest; +import org.opencds.cqf.fhir.utility.Constants; public class ObservationResolver { public IBaseResource resolve( @@ -29,7 +31,8 @@ public IBaseResource resolve( IBaseBackboneElement baseAnswer, String linkId, IBaseReference subject, - Map> questionnaireCodeMap) { + Map> questionnaireCodeMap, + IBaseExtension categoryExt) { var questionnaireResponse = (QuestionnaireResponse) request.getQuestionnaireResponse(); var answer = (QuestionnaireResponseItemAnswerComponent) baseAnswer; var obs = new Observation(); @@ -38,10 +41,13 @@ public IBaseResource resolve( obs.setPartOf(questionnaireResponse.getPartOf()); obs.setStatus(ObservationStatus.FINAL); - var qrCategoryCoding = new Coding(); - qrCategoryCoding.setCode("survey"); - qrCategoryCoding.setSystem("http://hl7.org/fhir/observation-category"); - obs.setCategory(Collections.singletonList(new CodeableConcept().addCoding(qrCategoryCoding))); + var qrCategoryCode = categoryExt == null + ? new CodeableConcept() + .addCoding(new Coding() + .setSystem(Constants.SDC_OBSERVATION_CATEGORY) + .setCode(Constants.SDC_CATEGORY_SURVEY)) + : (CodeableConcept) categoryExt.getValue(); + obs.setCategory(Collections.singletonList(qrCategoryCode)); obs.setCode(new CodeableConcept() .setCoding(questionnaireCodeMap.get(linkId).stream() diff --git a/cqf-fhir-cr/src/test/java/org/opencds/cqf/fhir/cr/questionnaireresponse/QuestionnaireResponseProcessorTests.java b/cqf-fhir-cr/src/test/java/org/opencds/cqf/fhir/cr/questionnaireresponse/QuestionnaireResponseProcessorTests.java index 43cf37b5b..4a5bc9000 100644 --- a/cqf-fhir-cr/src/test/java/org/opencds/cqf/fhir/cr/questionnaireresponse/QuestionnaireResponseProcessorTests.java +++ b/cqf-fhir-cr/src/test/java/org/opencds/cqf/fhir/cr/questionnaireresponse/QuestionnaireResponseProcessorTests.java @@ -27,7 +27,7 @@ private void testExtract(FhirContext fhirContext, String path, String questionna void test() { testExtract(fhirContextDstu3, "dstu3", "QRSharonDecision"); testExtract(fhirContextR4, "r4", "QRSharonDecision"); - testExtract(fhirContextR4, "r5", "QRSharonDecision"); + testExtract(fhirContextR5, "r5", "QRSharonDecision"); } @Test diff --git a/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/questionnaireresponse/dstu3/tests/Bundle-extract-sdc-profile-example-multi-subject.json b/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/questionnaireresponse/dstu3/tests/Bundle-extract-sdc-profile-example-multi-subject.json index bf1cf3819..3b5674ec8 100644 --- a/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/questionnaireresponse/dstu3/tests/Bundle-extract-sdc-profile-example-multi-subject.json +++ b/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/questionnaireresponse/dstu3/tests/Bundle-extract-sdc-profile-example-multi-subject.json @@ -24,7 +24,7 @@ "coding": [ { "system": "http://hl7.org/fhir/observation-category", - "code": "survey" + "code": "exam" } ] } @@ -82,7 +82,7 @@ "coding": [ { "system": "http://hl7.org/fhir/observation-category", - "code": "survey" + "code": "exam" } ] } @@ -140,7 +140,7 @@ "coding": [ { "system": "http://hl7.org/fhir/observation-category", - "code": "survey" + "code": "exam" } ] } @@ -198,7 +198,7 @@ "coding": [ { "system": "http://hl7.org/fhir/observation-category", - "code": "survey" + "code": "exam" } ] } @@ -256,7 +256,7 @@ "coding": [ { "system": "http://hl7.org/fhir/observation-category", - "code": "survey" + "code": "exam" } ] } @@ -314,7 +314,7 @@ "coding": [ { "system": "http://hl7.org/fhir/observation-category", - "code": "survey" + "code": "exam" } ] } diff --git a/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/questionnaireresponse/dstu3/tests/QuestionnaireResponse-sdc-profile-example-multi-subject.json b/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/questionnaireresponse/dstu3/tests/QuestionnaireResponse-sdc-profile-example-multi-subject.json index a25740ff6..e55a56f33 100644 --- a/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/questionnaireresponse/dstu3/tests/QuestionnaireResponse-sdc-profile-example-multi-subject.json +++ b/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/questionnaireresponse/dstu3/tests/QuestionnaireResponse-sdc-profile-example-multi-subject.json @@ -36,6 +36,19 @@ ] }, { + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-observation-extract-category", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/observation-category", + "code": "exam" + } + ] + } + } + ], "linkId": "3", "code": [ { @@ -56,6 +69,19 @@ ] }, { + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-observation-extract-category", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/observation-category", + "code": "exam" + } + ] + } + } + ], "linkId": "4", "code": [ { @@ -115,6 +141,19 @@ ] }, { + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-observation-extract-category", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/observation-category", + "code": "exam" + } + ] + } + } + ], "linkId": "5.4", "text": "Height", "answer": [ @@ -128,6 +167,19 @@ ] }, { + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-observation-extract-category", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/observation-category", + "code": "exam" + } + ] + } + } + ], "linkId": "5.5", "text": "Weight", "answer": [ @@ -182,6 +234,19 @@ ] }, { + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-observation-extract-category", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/observation-category", + "code": "exam" + } + ] + } + } + ], "linkId": "5.4", "text": "Height", "answer": [ @@ -195,6 +260,19 @@ ] }, { + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-observation-extract-category", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/observation-category", + "code": "exam" + } + ] + } + } + ], "linkId": "5.5", "text": "Weight", "answer": [ diff --git a/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/questionnaireresponse/r4/tests/Bundle-extract-sdc-profile-example-multi-subject.json b/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/questionnaireresponse/r4/tests/Bundle-extract-sdc-profile-example-multi-subject.json index a495e3511..6014273c2 100644 --- a/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/questionnaireresponse/r4/tests/Bundle-extract-sdc-profile-example-multi-subject.json +++ b/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/questionnaireresponse/r4/tests/Bundle-extract-sdc-profile-example-multi-subject.json @@ -24,7 +24,7 @@ "coding": [ { "system": "http://hl7.org/fhir/observation-category", - "code": "survey" + "code": "exam" } ] } @@ -79,7 +79,7 @@ "coding": [ { "system": "http://hl7.org/fhir/observation-category", - "code": "survey" + "code": "exam" } ] } @@ -134,7 +134,7 @@ "coding": [ { "system": "http://hl7.org/fhir/observation-category", - "code": "survey" + "code": "exam" } ] } @@ -189,7 +189,7 @@ "coding": [ { "system": "http://hl7.org/fhir/observation-category", - "code": "survey" + "code": "exam" } ] } @@ -244,7 +244,7 @@ "coding": [ { "system": "http://hl7.org/fhir/observation-category", - "code": "survey" + "code": "exam" } ] } @@ -299,7 +299,7 @@ "coding": [ { "system": "http://hl7.org/fhir/observation-category", - "code": "survey" + "code": "exam" } ] } diff --git a/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/questionnaireresponse/r4/tests/QuestionnaireResponse-sdc-profile-example-multi-subject.json b/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/questionnaireresponse/r4/tests/QuestionnaireResponse-sdc-profile-example-multi-subject.json index 368f36d5f..0a79407c5 100644 --- a/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/questionnaireresponse/r4/tests/QuestionnaireResponse-sdc-profile-example-multi-subject.json +++ b/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/questionnaireresponse/r4/tests/QuestionnaireResponse-sdc-profile-example-multi-subject.json @@ -34,6 +34,19 @@ ] }, { + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-observation-extract-category", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/observation-category", + "code": "exam" + } + ] + } + } + ], "linkId": "3", "code": [ { @@ -54,6 +67,19 @@ ] }, { + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-observation-extract-category", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/observation-category", + "code": "exam" + } + ] + } + } + ], "linkId": "4", "code": [ { @@ -113,6 +139,19 @@ ] }, { + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-observation-extract-category", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/observation-category", + "code": "exam" + } + ] + } + } + ], "linkId": "5.4", "text": "Height", "answer": [ @@ -126,6 +165,19 @@ ] }, { + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-observation-extract-category", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/observation-category", + "code": "exam" + } + ] + } + } + ], "linkId": "5.5", "text": "Weight", "answer": [ @@ -180,6 +232,19 @@ ] }, { + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-observation-extract-category", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/observation-category", + "code": "exam" + } + ] + } + } + ], "linkId": "5.4", "text": "Height", "answer": [ @@ -193,6 +258,19 @@ ] }, { + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-observation-extract-category", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/observation-category", + "code": "exam" + } + ] + } + } + ], "linkId": "5.5", "text": "Weight", "answer": [ diff --git a/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/questionnaireresponse/r5/tests/Bundle-extract-sdc-profile-example-multi-subject.json b/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/questionnaireresponse/r5/tests/Bundle-extract-sdc-profile-example-multi-subject.json index a495e3511..6014273c2 100644 --- a/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/questionnaireresponse/r5/tests/Bundle-extract-sdc-profile-example-multi-subject.json +++ b/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/questionnaireresponse/r5/tests/Bundle-extract-sdc-profile-example-multi-subject.json @@ -24,7 +24,7 @@ "coding": [ { "system": "http://hl7.org/fhir/observation-category", - "code": "survey" + "code": "exam" } ] } @@ -79,7 +79,7 @@ "coding": [ { "system": "http://hl7.org/fhir/observation-category", - "code": "survey" + "code": "exam" } ] } @@ -134,7 +134,7 @@ "coding": [ { "system": "http://hl7.org/fhir/observation-category", - "code": "survey" + "code": "exam" } ] } @@ -189,7 +189,7 @@ "coding": [ { "system": "http://hl7.org/fhir/observation-category", - "code": "survey" + "code": "exam" } ] } @@ -244,7 +244,7 @@ "coding": [ { "system": "http://hl7.org/fhir/observation-category", - "code": "survey" + "code": "exam" } ] } @@ -299,7 +299,7 @@ "coding": [ { "system": "http://hl7.org/fhir/observation-category", - "code": "survey" + "code": "exam" } ] } diff --git a/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/questionnaireresponse/r5/tests/QuestionnaireResponse-sdc-profile-example-multi-subject.json b/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/questionnaireresponse/r5/tests/QuestionnaireResponse-sdc-profile-example-multi-subject.json index 368f36d5f..0a79407c5 100644 --- a/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/questionnaireresponse/r5/tests/QuestionnaireResponse-sdc-profile-example-multi-subject.json +++ b/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/questionnaireresponse/r5/tests/QuestionnaireResponse-sdc-profile-example-multi-subject.json @@ -34,6 +34,19 @@ ] }, { + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-observation-extract-category", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/observation-category", + "code": "exam" + } + ] + } + } + ], "linkId": "3", "code": [ { @@ -54,6 +67,19 @@ ] }, { + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-observation-extract-category", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/observation-category", + "code": "exam" + } + ] + } + } + ], "linkId": "4", "code": [ { @@ -113,6 +139,19 @@ ] }, { + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-observation-extract-category", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/observation-category", + "code": "exam" + } + ] + } + } + ], "linkId": "5.4", "text": "Height", "answer": [ @@ -126,6 +165,19 @@ ] }, { + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-observation-extract-category", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/observation-category", + "code": "exam" + } + ] + } + } + ], "linkId": "5.5", "text": "Weight", "answer": [ @@ -180,6 +232,19 @@ ] }, { + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-observation-extract-category", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/observation-category", + "code": "exam" + } + ] + } + } + ], "linkId": "5.4", "text": "Height", "answer": [ @@ -193,6 +258,19 @@ ] }, { + "extension": [ + { + "url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-observation-extract-category", + "valueCodeableConcept": { + "coding": [ + { + "system": "http://hl7.org/fhir/observation-category", + "code": "exam" + } + ] + } + } + ], "linkId": "5.5", "text": "Weight", "answer": [ diff --git a/cqf-fhir-utility/src/main/java/org/opencds/cqf/fhir/utility/Constants.java b/cqf-fhir-utility/src/main/java/org/opencds/cqf/fhir/utility/Constants.java index 0d54f15eb..5eb742e72 100644 --- a/cqf-fhir-utility/src/main/java/org/opencds/cqf/fhir/utility/Constants.java +++ b/cqf-fhir-utility/src/main/java/org/opencds/cqf/fhir/utility/Constants.java @@ -95,6 +95,10 @@ private Constants() {} "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-prepopulate-parameter"; public static final String SDC_QUESTIONNAIRE_SHORT_TEXT = "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-shortText"; + public static final String SDC_QUESTIONNAIRE_OBSERVATION_EXTRACT_CATEGORY = + "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-observation-extract-category"; + public static final String SDC_OBSERVATION_CATEGORY = "http://hl7.org/fhir/observation-category"; + public static final String SDC_CATEGORY_SURVEY = "survey"; // $apply parameter names public static final String APPLY_PARAMETER_ACTIVITY_DEFINITION = "activityDefinition";