Skip to content

Commit 2e3f680

Browse files
committed
Update $release to ensure correct handling of cqfm & crmi edrs
1 parent dc33495 commit 2e3f680

6 files changed

Lines changed: 23 additions & 22 deletions

File tree

cqf-fhir-cr/src/main/java/org/opencds/cqf/fhir/cr/visitor/r4/ReleaseVisitor.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.hl7.fhir.r4.model.Basic;
1616
import org.hl7.fhir.r4.model.Bundle;
1717
import org.hl7.fhir.r4.model.Bundle.BundleEntryComponent;
18+
import org.hl7.fhir.r4.model.CanonicalType;
1819
import org.hl7.fhir.r4.model.Extension;
1920
import org.hl7.fhir.r4.model.Library;
2021
import org.hl7.fhir.r4.model.Measure;
@@ -163,11 +164,17 @@ public static List<BundleEntryComponent> findArtifactCommentsToUpdate(
163164

164165
public static void extractDirectReferenceCodes(IKnowledgeArtifactAdapter rootAdapter, Measure measure) {
165166
Optional<Extension> effectiveDataRequirementsExt = measure.getExtension().stream()
166-
.filter(ext -> ext.getUrl().equals(Constants.CQFM_EFFECTIVE_DATA_REQUIREMENTS))
167+
.filter(ext -> ext.getUrl().equals(Constants.CQFM_EFFECTIVE_DATA_REQUIREMENTS)
168+
|| ext.getUrl().equals(Constants.CRMI_EFFECTIVE_DATA_REQUIREMENTS))
167169
.findFirst();
168170
if (effectiveDataRequirementsExt.isPresent()) {
169-
Reference ref = (Reference) effectiveDataRequirementsExt.get().getValue();
170-
Library effectiveDataRequirementsLib = (Library) measure.getContained("#" + ref.getReference());
171+
Library effectiveDataRequirementsLib = null;
172+
if (effectiveDataRequirementsExt.get().getValue() instanceof Reference ref) {
173+
effectiveDataRequirementsLib = (Library) measure.getContained("#" + ref.getReference());
174+
} else if (effectiveDataRequirementsExt.get().getValue() instanceof CanonicalType canonicalType) {
175+
effectiveDataRequirementsLib = (Library) measure.getContained("#" + canonicalType.asStringValue());
176+
}
177+
171178
if (effectiveDataRequirementsLib != null) {
172179
effectiveDataRequirementsLib.getExtension().stream()
173180
.filter(ext -> ext.getUrl().equals(Constants.CQFM_DIRECT_REFERENCE_EXTENSION))

cqf-fhir-cr/src/main/java/org/opencds/cqf/fhir/cr/visitor/r5/ReleaseVisitor.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.hl7.fhir.r5.model.ArtifactAssessment;
1616
import org.hl7.fhir.r5.model.Bundle;
1717
import org.hl7.fhir.r5.model.Bundle.BundleEntryComponent;
18+
import org.hl7.fhir.r5.model.CanonicalType;
1819
import org.hl7.fhir.r5.model.Extension;
1920
import org.hl7.fhir.r5.model.Library;
2021
import org.hl7.fhir.r5.model.Measure;
@@ -150,11 +151,16 @@ public static List<BundleEntryComponent> findArtifactCommentsToUpdate(
150151

151152
public static void extractDirectReferenceCodes(IKnowledgeArtifactAdapter rootAdapter, Measure measure) {
152153
Optional<Extension> effectiveDataRequirementsExt = measure.getExtension().stream()
153-
.filter(ext -> ext.getUrl().equals(Constants.CQFM_EFFECTIVE_DATA_REQUIREMENTS))
154+
.filter(ext -> ext.getUrl().equals(Constants.CQFM_EFFECTIVE_DATA_REQUIREMENTS)
155+
|| ext.getUrl().equals(Constants.CRMI_EFFECTIVE_DATA_REQUIREMENTS))
154156
.findFirst();
155157
if (effectiveDataRequirementsExt.isPresent()) {
156-
Reference ref = effectiveDataRequirementsExt.get().getValueReference();
157-
Library effectiveDataRequirementsLib = (Library) measure.getContained("#" + ref.getReference());
158+
Library effectiveDataRequirementsLib = null;
159+
if (effectiveDataRequirementsExt.get().getValue() instanceof Reference ref) {
160+
effectiveDataRequirementsLib = (Library) measure.getContained("#" + ref.getReference());
161+
} else if (effectiveDataRequirementsExt.get().getValue() instanceof CanonicalType canonicalType) {
162+
effectiveDataRequirementsLib = (Library) measure.getContained("#" + canonicalType.getCanonical());
163+
}
158164
if (effectiveDataRequirementsLib != null) {
159165
effectiveDataRequirementsLib.getExtension().stream()
160166
.filter(ext -> ext.getUrl().equals(Constants.CQF_DIRECT_REFERENCE_EXTENSION))

cqf-fhir-cr/src/test/java/org/opencds/cqf/fhir/cr/visitor/r4/ReleaseVisitorTests.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -263,10 +263,6 @@ void measureDirectReferenceCodesIncludedInReleaseTest() {
263263
Parameters params = new Parameters();
264264
params.addParameter("version", "1.0.0");
265265
params.addParameter("versionBehavior", new CodeType("default"));
266-
var crmiEDRId = "exp-params-crmi-test";
267-
var crmiEDRExtension = new Extension();
268-
crmiEDRExtension.setUrl(Constants.CRMI_EFFECTIVE_DATA_REQUIREMENTS);
269-
crmiEDRExtension.setValue(new CanonicalType("#" + crmiEDRId));
270266
ReleaseVisitor releaseVisitor = new ReleaseVisitor(repo);
271267
// Approval date is required to release an artifact
272268
library.setApprovalDateElement(new DateType("2024-04-23"));

cqf-fhir-cr/src/test/java/org/opencds/cqf/fhir/cr/visitor/r5/ReleaseVisitorTests.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -264,10 +264,6 @@ void measureDirectReferenceCodesIncludedInReleaseTest() {
264264
Parameters params = new Parameters();
265265
params.addParameter("version", "1.0.0");
266266
params.addParameter("versionBehavior", new CodeType("default"));
267-
var crmiEDRId = "exp-params-crmi-test";
268-
var crmiEDRExtension = new Extension();
269-
crmiEDRExtension.setUrl(Constants.CRMI_EFFECTIVE_DATA_REQUIREMENTS);
270-
crmiEDRExtension.setValue(new CanonicalType("#" + crmiEDRId));
271267
ReleaseVisitor releaseVisitor = new ReleaseVisitor(repo);
272268
// Approval date is required to release an artifact
273269
library.setApprovalDateElement(new DateType("2024-04-23"));

cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/visitor/r4/Bundle-ecqm-qicore-2024-simplified.json

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3841,10 +3841,8 @@
38413841
"extension": [
38423842
{
38433843
"id": "effective-data-requirements",
3844-
"url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-effectiveDataRequirements",
3845-
"valueReference": {
3846-
"reference": "#effective-data-requirements"
3847-
}
3844+
"url": "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-effectiveDataRequirements",
3845+
"valueCanonical": "#effective-data-requirements"
38483846
},
38493847
{
38503848
"url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-softwaresystem",

cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/visitor/r5/Bundle-ecqm-qicore-2024-simplified.json

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3841,10 +3841,8 @@
38413841
"extension": [
38423842
{
38433843
"id": "effective-data-requirements",
3844-
"url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-effectiveDataRequirements",
3845-
"valueReference": {
3846-
"reference": "#effective-data-requirements"
3847-
}
3844+
"url": "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-effectiveDataRequirements",
3845+
"valueCanonical": "#effective-data-requirements"
38483846
},
38493847
{
38503848
"url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-softwaresystem",

0 commit comments

Comments
 (0)