diff --git a/cqf-fhir-cr/src/main/java/org/opencds/cqf/fhir/cr/visitor/r4/ReleaseVisitor.java b/cqf-fhir-cr/src/main/java/org/opencds/cqf/fhir/cr/visitor/r4/ReleaseVisitor.java index 0957c5af59..1036a8f1cf 100644 --- a/cqf-fhir-cr/src/main/java/org/opencds/cqf/fhir/cr/visitor/r4/ReleaseVisitor.java +++ b/cqf-fhir-cr/src/main/java/org/opencds/cqf/fhir/cr/visitor/r4/ReleaseVisitor.java @@ -15,6 +15,7 @@ import org.hl7.fhir.r4.model.Basic; import org.hl7.fhir.r4.model.Bundle; import org.hl7.fhir.r4.model.Bundle.BundleEntryComponent; +import org.hl7.fhir.r4.model.CanonicalType; import org.hl7.fhir.r4.model.Extension; import org.hl7.fhir.r4.model.Library; import org.hl7.fhir.r4.model.Measure; @@ -163,11 +164,17 @@ public static List findArtifactCommentsToUpdate( public static void extractDirectReferenceCodes(IKnowledgeArtifactAdapter rootAdapter, Measure measure) { Optional effectiveDataRequirementsExt = measure.getExtension().stream() - .filter(ext -> ext.getUrl().equals(Constants.CQFM_EFFECTIVE_DATA_REQUIREMENTS)) + .filter(ext -> ext.getUrl().equals(Constants.CQFM_EFFECTIVE_DATA_REQUIREMENTS) + || ext.getUrl().equals(Constants.CRMI_EFFECTIVE_DATA_REQUIREMENTS)) .findFirst(); if (effectiveDataRequirementsExt.isPresent()) { - Reference ref = (Reference) effectiveDataRequirementsExt.get().getValue(); - Library effectiveDataRequirementsLib = (Library) measure.getContained("#" + ref.getReference()); + Library effectiveDataRequirementsLib = null; + if (effectiveDataRequirementsExt.get().getValue() instanceof Reference ref) { + effectiveDataRequirementsLib = (Library) measure.getContained("#" + ref.getReference()); + } else if (effectiveDataRequirementsExt.get().getValue() instanceof CanonicalType canonicalType) { + effectiveDataRequirementsLib = (Library) measure.getContained("#" + canonicalType.asStringValue()); + } + if (effectiveDataRequirementsLib != null) { effectiveDataRequirementsLib.getExtension().stream() .filter(ext -> ext.getUrl().equals(Constants.CQFM_DIRECT_REFERENCE_EXTENSION)) diff --git a/cqf-fhir-cr/src/main/java/org/opencds/cqf/fhir/cr/visitor/r5/ReleaseVisitor.java b/cqf-fhir-cr/src/main/java/org/opencds/cqf/fhir/cr/visitor/r5/ReleaseVisitor.java index a906d08185..85ce5c1d23 100644 --- a/cqf-fhir-cr/src/main/java/org/opencds/cqf/fhir/cr/visitor/r5/ReleaseVisitor.java +++ b/cqf-fhir-cr/src/main/java/org/opencds/cqf/fhir/cr/visitor/r5/ReleaseVisitor.java @@ -15,6 +15,7 @@ import org.hl7.fhir.r5.model.ArtifactAssessment; import org.hl7.fhir.r5.model.Bundle; import org.hl7.fhir.r5.model.Bundle.BundleEntryComponent; +import org.hl7.fhir.r5.model.CanonicalType; import org.hl7.fhir.r5.model.Extension; import org.hl7.fhir.r5.model.Library; import org.hl7.fhir.r5.model.Measure; @@ -150,11 +151,16 @@ public static List findArtifactCommentsToUpdate( public static void extractDirectReferenceCodes(IKnowledgeArtifactAdapter rootAdapter, Measure measure) { Optional effectiveDataRequirementsExt = measure.getExtension().stream() - .filter(ext -> ext.getUrl().equals(Constants.CQFM_EFFECTIVE_DATA_REQUIREMENTS)) + .filter(ext -> ext.getUrl().equals(Constants.CQFM_EFFECTIVE_DATA_REQUIREMENTS) + || ext.getUrl().equals(Constants.CRMI_EFFECTIVE_DATA_REQUIREMENTS)) .findFirst(); if (effectiveDataRequirementsExt.isPresent()) { - Reference ref = effectiveDataRequirementsExt.get().getValueReference(); - Library effectiveDataRequirementsLib = (Library) measure.getContained("#" + ref.getReference()); + Library effectiveDataRequirementsLib = null; + if (effectiveDataRequirementsExt.get().getValue() instanceof Reference ref) { + effectiveDataRequirementsLib = (Library) measure.getContained("#" + ref.getReference()); + } else if (effectiveDataRequirementsExt.get().getValue() instanceof CanonicalType canonicalType) { + effectiveDataRequirementsLib = (Library) measure.getContained("#" + canonicalType.getCanonical()); + } if (effectiveDataRequirementsLib != null) { effectiveDataRequirementsLib.getExtension().stream() .filter(ext -> ext.getUrl().equals(Constants.CQF_DIRECT_REFERENCE_EXTENSION)) diff --git a/cqf-fhir-cr/src/test/java/org/opencds/cqf/fhir/cr/visitor/r4/ReleaseVisitorTests.java b/cqf-fhir-cr/src/test/java/org/opencds/cqf/fhir/cr/visitor/r4/ReleaseVisitorTests.java index b234306b48..c63667ae11 100644 --- a/cqf-fhir-cr/src/test/java/org/opencds/cqf/fhir/cr/visitor/r4/ReleaseVisitorTests.java +++ b/cqf-fhir-cr/src/test/java/org/opencds/cqf/fhir/cr/visitor/r4/ReleaseVisitorTests.java @@ -263,10 +263,6 @@ void measureDirectReferenceCodesIncludedInReleaseTest() { Parameters params = new Parameters(); params.addParameter("version", "1.0.0"); params.addParameter("versionBehavior", new CodeType("default")); - var crmiEDRId = "exp-params-crmi-test"; - var crmiEDRExtension = new Extension(); - crmiEDRExtension.setUrl(Constants.CRMI_EFFECTIVE_DATA_REQUIREMENTS); - crmiEDRExtension.setValue(new CanonicalType("#" + crmiEDRId)); ReleaseVisitor releaseVisitor = new ReleaseVisitor(repo); // Approval date is required to release an artifact library.setApprovalDateElement(new DateType("2024-04-23")); diff --git a/cqf-fhir-cr/src/test/java/org/opencds/cqf/fhir/cr/visitor/r5/ReleaseVisitorTests.java b/cqf-fhir-cr/src/test/java/org/opencds/cqf/fhir/cr/visitor/r5/ReleaseVisitorTests.java index e874aacdd1..dc7f8863d1 100644 --- a/cqf-fhir-cr/src/test/java/org/opencds/cqf/fhir/cr/visitor/r5/ReleaseVisitorTests.java +++ b/cqf-fhir-cr/src/test/java/org/opencds/cqf/fhir/cr/visitor/r5/ReleaseVisitorTests.java @@ -264,10 +264,6 @@ void measureDirectReferenceCodesIncludedInReleaseTest() { Parameters params = new Parameters(); params.addParameter("version", "1.0.0"); params.addParameter("versionBehavior", new CodeType("default")); - var crmiEDRId = "exp-params-crmi-test"; - var crmiEDRExtension = new Extension(); - crmiEDRExtension.setUrl(Constants.CRMI_EFFECTIVE_DATA_REQUIREMENTS); - crmiEDRExtension.setValue(new CanonicalType("#" + crmiEDRId)); ReleaseVisitor releaseVisitor = new ReleaseVisitor(repo); // Approval date is required to release an artifact library.setApprovalDateElement(new DateType("2024-04-23")); diff --git a/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/visitor/r4/Bundle-ecqm-qicore-2024-simplified.json b/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/visitor/r4/Bundle-ecqm-qicore-2024-simplified.json index 6d2598a141..80222be323 100644 --- a/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/visitor/r4/Bundle-ecqm-qicore-2024-simplified.json +++ b/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/visitor/r4/Bundle-ecqm-qicore-2024-simplified.json @@ -3841,10 +3841,8 @@ "extension": [ { "id": "effective-data-requirements", - "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-effectiveDataRequirements", - "valueReference": { - "reference": "#effective-data-requirements" - } + "url": "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-effectiveDataRequirements", + "valueCanonical": "#effective-data-requirements" }, { "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-softwaresystem", diff --git a/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/visitor/r5/Bundle-ecqm-qicore-2024-simplified.json b/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/visitor/r5/Bundle-ecqm-qicore-2024-simplified.json index 72e9db70dc..41a9e562cf 100644 --- a/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/visitor/r5/Bundle-ecqm-qicore-2024-simplified.json +++ b/cqf-fhir-cr/src/test/resources/org/opencds/cqf/fhir/cr/visitor/r5/Bundle-ecqm-qicore-2024-simplified.json @@ -3841,10 +3841,8 @@ "extension": [ { "id": "effective-data-requirements", - "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-effectiveDataRequirements", - "valueReference": { - "reference": "#effective-data-requirements" - } + "url": "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-effectiveDataRequirements", + "valueCanonical": "#effective-data-requirements" }, { "url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-softwaresystem",