From 62b250cab0512032ddf643b10798e1888cdf9a6b Mon Sep 17 00:00:00 2001 From: adongare Date: Fri, 22 Sep 2023 15:12:42 -0400 Subject: [PATCH 1/5] MAT-6198 Exported transaction test case bundles are invalid due to our MeasureReport MAT-6237 QI-Core Measure Export Bundle Updates --- .../cql/LibraryCqlVisitor.java | 12 +++--- .../cql/LibraryCqlVisitorFactory.java | 6 +-- .../services/LibraryTranslatorService.java | 8 ++-- .../services/MeasureBundleService.java | 21 +++------ .../services/MeasureTranslatorService.java | 6 ++- .../services/TestCaseBundleService.java | 9 ++-- .../utils/FhirResourceHelpers.java | 43 ++++++++----------- src/main/resources/application.yml | 2 - .../services/HumanReadableServiceTest.java | 2 +- .../services/MeasureBundleServiceTest.java | 6 +-- .../MeasureTranslatorServiceTest.java | 1 - .../services/TestCaseBundleServiceTest.java | 3 +- 12 files changed, 46 insertions(+), 73 deletions(-) diff --git a/src/main/java/gov/cms/madie/madiefhirservice/cql/LibraryCqlVisitor.java b/src/main/java/gov/cms/madie/madiefhirservice/cql/LibraryCqlVisitor.java index 8a1a1bf0..516cea35 100644 --- a/src/main/java/gov/cms/madie/madiefhirservice/cql/LibraryCqlVisitor.java +++ b/src/main/java/gov/cms/madie/madiefhirservice/cql/LibraryCqlVisitor.java @@ -1,5 +1,6 @@ package gov.cms.madie.madiefhirservice.cql; +import gov.cms.madie.madiefhirservice.utils.FhirResourceHelpers; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.antlr.v4.runtime.ParserRuleContext; @@ -35,14 +36,9 @@ public class LibraryCqlVisitor extends cqlBaseVisitor { private final Map libraryCacheMap = new HashMap<>(); private final Map valueSetNameUri = new HashMap<>(); private final List> includedLibraries = new ArrayList<>(); - private String fhirBaseUrl; private String name; private String version; - public LibraryCqlVisitor(String fhirBaseUrl) { - this.fhirBaseUrl = fhirBaseUrl; - } - /** * Stores off lib name and version. * @@ -70,7 +66,11 @@ public String visitIncludeDefinition(cqlParser.IncludeDefinitionContext ctx) { RelatedArtifact relatedArtifact = new RelatedArtifact(); relatedArtifact.setType(RelatedArtifact.RelatedArtifactType.DEPENDSON); var nameVersion = getNameVersionFromInclude(ctx); - relatedArtifact.setUrl(fhirBaseUrl + "/Library/" + nameVersion.getLeft()); + String url = + FhirResourceHelpers.buildResourceFullUrl("Library", nameVersion.getLeft()) + + "|" + + nameVersion.getRight(); + relatedArtifact.setUrl(url); relatedArtifacts.add(relatedArtifact); includedLibraries.add(nameVersion); includes.add(ctx); diff --git a/src/main/java/gov/cms/madie/madiefhirservice/cql/LibraryCqlVisitorFactory.java b/src/main/java/gov/cms/madie/madiefhirservice/cql/LibraryCqlVisitorFactory.java index 943722de..655c5e71 100644 --- a/src/main/java/gov/cms/madie/madiefhirservice/cql/LibraryCqlVisitorFactory.java +++ b/src/main/java/gov/cms/madie/madiefhirservice/cql/LibraryCqlVisitorFactory.java @@ -4,7 +4,6 @@ import org.antlr.v4.runtime.CommonTokenStream; import org.cqframework.cql.gen.cqlLexer; import org.cqframework.cql.gen.cqlParser; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.IOException; @@ -13,11 +12,8 @@ @Service public class LibraryCqlVisitorFactory { - @Value("${fhir-base-url}") - private String fhirBaseUrl; - public LibraryCqlVisitor visit(String cql) { - LibraryCqlVisitor result = new LibraryCqlVisitor(fhirBaseUrl); + LibraryCqlVisitor result = new LibraryCqlVisitor(); cqlParser.LibraryContext ctx = getLibraryContext(cql); result.visit(ctx); return result; diff --git a/src/main/java/gov/cms/madie/madiefhirservice/services/LibraryTranslatorService.java b/src/main/java/gov/cms/madie/madiefhirservice/services/LibraryTranslatorService.java index f59b1fc4..51194e3a 100644 --- a/src/main/java/gov/cms/madie/madiefhirservice/services/LibraryTranslatorService.java +++ b/src/main/java/gov/cms/madie/madiefhirservice/services/LibraryTranslatorService.java @@ -2,6 +2,7 @@ import gov.cms.madie.madiefhirservice.constants.UriConstants; import gov.cms.madie.madiefhirservice.cql.LibraryCqlVisitorFactory; +import gov.cms.madie.madiefhirservice.utils.FhirResourceHelpers; import gov.cms.madie.models.library.CqlLibrary; import gov.cms.madie.models.common.Version; import lombok.extern.slf4j.Slf4j; @@ -17,7 +18,6 @@ import org.hl7.fhir.r4.model.Meta; import org.hl7.fhir.r4.model.RelatedArtifact; import org.hl7.fhir.r4.model.Identifier.IdentifierUse; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -39,9 +39,6 @@ public class LibraryTranslatorService { private final LibraryCqlVisitorFactory libCqlVisitorFactory; - @Value("${fhir-base-url}") - private String fhirBaseUrl; - public LibraryTranslatorService(LibraryCqlVisitorFactory libCqlVisitorFactory) { this.libCqlVisitorFactory = libCqlVisitorFactory; } @@ -64,7 +61,8 @@ public Library convertToFhirLibrary(CqlLibrary cqlLibrary) { library.setContent( createContent(cqlLibrary.getCql(), cqlLibrary.getElmJson(), cqlLibrary.getElmXml())); library.setType(createType(UriConstants.LIBRARY_SYSTEM_TYPE_URI, SYSTEM_CODE)); - library.setUrl(fhirBaseUrl + "/Library/" + cqlLibrary.getCqlLibraryName()); + library.setUrl( + FhirResourceHelpers.buildResourceFullUrl("Library", cqlLibrary.getCqlLibraryName())); library.setDataRequirement(distinctDataRequirements(visitor.getDataRequirements())); library.setRelatedArtifact(distinctArtifacts(visitor.getRelatedArtifacts())); library.setMeta(createLibraryMeta()); diff --git a/src/main/java/gov/cms/madie/madiefhirservice/services/MeasureBundleService.java b/src/main/java/gov/cms/madie/madiefhirservice/services/MeasureBundleService.java index 34419336..c64f9e4a 100644 --- a/src/main/java/gov/cms/madie/madiefhirservice/services/MeasureBundleService.java +++ b/src/main/java/gov/cms/madie/madiefhirservice/services/MeasureBundleService.java @@ -19,7 +19,6 @@ import org.hl7.fhir.r4.model.Library; import org.hl7.fhir.r4.model.Narrative; import org.hl7.fhir.r4.model.Reference; -import org.hl7.fhir.r4.model.Resource; import org.springframework.stereotype.Service; import java.util.HashMap; @@ -50,7 +49,8 @@ public Bundle createMeasureBundle( measureTranslatorService.createFhirMeasureForMadieMeasure(madieMeasure); // Bundle entry for Measure resource - Bundle.BundleEntryComponent measureEntryComponent = getBundleEntryComponent(measure); + Bundle.BundleEntryComponent measureEntryComponent = + FhirResourceHelpers.getBundleEntryComponent(measure, "Transaction"); Bundle bundle = new Bundle().setType(Bundle.BundleType.TRANSACTION).addEntry(measureEntryComponent); // Bundle entries for all the library resources of a MADiE Measure @@ -90,31 +90,20 @@ public Bundle createMeasureBundle( public List createBundleComponentsForLibrariesOfMadieMeasure( Measure madieMeasure, final String bundleType, final String accessToken) { Library library = getMeasureLibraryResourceForMadieMeasure(madieMeasure); - Bundle.BundleEntryComponent mainLibraryBundleComponent = getBundleEntryComponent(library); + Bundle.BundleEntryComponent mainLibraryBundleComponent = + FhirResourceHelpers.getBundleEntryComponent(library, "Transaction"); Map includedLibraryMap = new HashMap<>(); libraryService.getIncludedLibraries( madieMeasure.getCql(), includedLibraryMap, bundleType, accessToken); List libraryBundleComponents = includedLibraryMap.values().stream() - .map(this::getBundleEntryComponent) + .map((lib) -> FhirResourceHelpers.getBundleEntryComponent(lib, "Transaction")) .collect(Collectors.toList()); // add main library first in the list libraryBundleComponents.add(0, mainLibraryBundleComponent); return libraryBundleComponents; } - /** Creates BundleEntryComponent for given resource */ - public Bundle.BundleEntryComponent getBundleEntryComponent(Resource resource) { - Bundle.BundleEntryRequestComponent requestComponent = - new Bundle.BundleEntryRequestComponent() - .setMethod(Bundle.HTTPVerb.PUT) - .setUrl(resource.getResourceType() + "/" + resource.getIdPart()); - return new Bundle.BundleEntryComponent() - .setFullUrl(FhirResourceHelpers.getFullUrl(resource)) - .setResource(resource) - .setRequest(requestComponent); - } - /** * Creates Library resource for main library of MADiE Measure * diff --git a/src/main/java/gov/cms/madie/madiefhirservice/services/MeasureTranslatorService.java b/src/main/java/gov/cms/madie/madiefhirservice/services/MeasureTranslatorService.java index 33a29a15..6e45dfab 100644 --- a/src/main/java/gov/cms/madie/madiefhirservice/services/MeasureTranslatorService.java +++ b/src/main/java/gov/cms/madie/madiefhirservice/services/MeasureTranslatorService.java @@ -59,7 +59,8 @@ public org.hl7.fhir.r4.model.Measure createFhirMeasureForMadieMeasure(Measure ma .setTitle(madieMeasure.getMeasureName()) .setIdentifier(buildMeasureIdentifiers(madieMeasure)) .setExperimental(madieMeasure.getMeasureMetaData().isExperimental()) - .setUrl(FhirResourceHelpers.buildMeasureUrl(madieMeasure.getCqlLibraryName())) + .setUrl( + FhirResourceHelpers.buildResourceFullUrl("Measure", madieMeasure.getCqlLibraryName())) .setVersion(madieMeasure.getVersion().toString()) .setEffectivePeriod( getPeriodFromDates( @@ -76,7 +77,8 @@ public org.hl7.fhir.r4.model.Measure createFhirMeasureForMadieMeasure(Measure ma .setLibrary( Collections.singletonList( new CanonicalType( - FhirResourceHelpers.buildLibraryUrl(madieMeasure.getCqlLibraryName())))) + FhirResourceHelpers.buildResourceFullUrl( + "Library", madieMeasure.getCqlLibraryName())))) .setPurpose(UNKNOWN) .setContact(buildContactDetail(madieMeasure.getMeasureMetaData().getSteward(), false)) .setGroup(buildGroups(madieMeasure.getGroups())) diff --git a/src/main/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleService.java b/src/main/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleService.java index 5a0a77d6..7611a1f8 100644 --- a/src/main/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleService.java +++ b/src/main/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleService.java @@ -73,9 +73,9 @@ public Map getTestCaseExportBundle(Measure measure, List Date: Fri, 22 Sep 2023 15:33:37 -0400 Subject: [PATCH 2/5] MAT-6198 refactor --- .../madie/madiefhirservice/utils/FhirResourceHelpers.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/gov/cms/madie/madiefhirservice/utils/FhirResourceHelpers.java b/src/main/java/gov/cms/madie/madiefhirservice/utils/FhirResourceHelpers.java index 62febb73..40ec2ed0 100644 --- a/src/main/java/gov/cms/madie/madiefhirservice/utils/FhirResourceHelpers.java +++ b/src/main/java/gov/cms/madie/madiefhirservice/utils/FhirResourceHelpers.java @@ -23,14 +23,13 @@ public void setMadieUrl(String url) { } public static Bundle.BundleEntryComponent getBundleEntryComponent( - Resource resource, String type) { + Resource resource, String bundleType) { Bundle.BundleEntryComponent entryComponent = new Bundle.BundleEntryComponent() - .setFullUrl( - FhirResourceHelpers.buildResourceFullUrl(resource.fhirType(), resource.getIdPart())) + .setFullUrl(buildResourceFullUrl(resource.fhirType(), resource.getIdPart())) .setResource(resource); // for the transaction bundles, add request object to the entry - if ("Transaction".equalsIgnoreCase(type)) { + if ("Transaction".equalsIgnoreCase(bundleType)) { Bundle.BundleEntryRequestComponent requestComponent = new Bundle.BundleEntryRequestComponent() .setMethod(Bundle.HTTPVerb.POST) From 05d9e218de5a8d661e8e7d30fac01cf988b6bfdc Mon Sep 17 00:00:00 2001 From: adongare Date: Fri, 22 Sep 2023 16:00:00 -0400 Subject: [PATCH 3/5] MAT-6198 more test cases --- .../services/HumanReadableService.java | 15 +++++++-------- .../services/HumanReadableServiceTest.java | 17 +++++++++-------- .../services/TestCaseBundleServiceTest.java | 19 ++++++++++++++++++- .../SimpleFhirMeasureLib/madie_measure.json | 2 +- 4 files changed, 35 insertions(+), 18 deletions(-) diff --git a/src/main/java/gov/cms/madie/madiefhirservice/services/HumanReadableService.java b/src/main/java/gov/cms/madie/madiefhirservice/services/HumanReadableService.java index f72ecef8..6416a0b6 100644 --- a/src/main/java/gov/cms/madie/madiefhirservice/services/HumanReadableService.java +++ b/src/main/java/gov/cms/madie/madiefhirservice/services/HumanReadableService.java @@ -197,14 +197,13 @@ private void sortParameters( if (madieMeasure.getGroups() != null) { madieMeasure.getGroups().stream() .forEach( - (g) -> - { - if (CollectionUtils.isNotEmpty(g.getStratifications())) { - strats.addAll( - g.getStratifications().stream() - .map(s -> s.getCqlDefinition()) - .collect(Collectors.toList())); - } + (g) -> { + if (CollectionUtils.isNotEmpty(g.getStratifications())) { + strats.addAll( + g.getStratifications().stream() + .map(s -> s.getCqlDefinition()) + .collect(Collectors.toList())); + } }); } diff --git a/src/test/java/gov/cms/madie/madiefhirservice/services/HumanReadableServiceTest.java b/src/test/java/gov/cms/madie/madiefhirservice/services/HumanReadableServiceTest.java index 4f98bd5d..b0f540c2 100644 --- a/src/test/java/gov/cms/madie/madiefhirservice/services/HumanReadableServiceTest.java +++ b/src/test/java/gov/cms/madie/madiefhirservice/services/HumanReadableServiceTest.java @@ -60,19 +60,20 @@ class HumanReadableServiceTest implements ResourceFileUtil { @BeforeEach void setUp() { - Group measureGroup1 = Group.builder() + Group measureGroup1 = + Group.builder() .id("GroupId1") .groupDescription("some random group") .measureGroupTypes(List.of(MeasureGroupTypes.OUTCOME)) .scoring(MeasureScoring.COHORT.toString()) - .populations(List.of( + .populations( + List.of( Population.builder() - .id("PopId1") - .name(PopulationType.INITIAL_POPULATION) - .definition("Initial Population") - .description(null) - .build() - )) + .id("PopId1") + .name(PopulationType.INITIAL_POPULATION) + .definition("Initial Population") + .description(null) + .build())) .build(); measureGroup1.setStratifications(null); diff --git a/src/test/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleServiceTest.java b/src/test/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleServiceTest.java index f27df533..4f1d6a8f 100644 --- a/src/test/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleServiceTest.java +++ b/src/test/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleServiceTest.java @@ -69,11 +69,16 @@ void getTestCaseExportBundleMulti() { testCaseBundleService.getTestCaseExportBundle(madieMeasure, madieMeasure.getTestCases()); assertEquals(2, exportMap.size()); + // first test case bundle(collection) Bundle bundle = exportMap.get( "285d114d-9c36-4d66-b0a0-06f395bbf23d/title-v0.0.000-testcaseseries-testcasetitle"); assertEquals(5, bundle.getEntry().size()); - MeasureReport measureReport = (MeasureReport) bundle.getEntry().get(4).getResource(); + assertEquals(bundle.getType(), Bundle.BundleType.COLLECTION); + Bundle.BundleEntryComponent bundleEntry = bundle.getEntry().get(4); + assertNull(bundleEntry.getRequest().getMethod()); + assertNull(bundleEntry.getRequest().getUrl()); + MeasureReport measureReport = (MeasureReport) bundleEntry.getResource(); assertEquals( "madie.cms.gov/MeasureReport/" + measureReport.getIdPart(), bundle.getEntry().get(4).getFullUrl()); @@ -112,6 +117,18 @@ void getTestCaseExportBundleMulti() { assertEquals("Patient/Patient-1", measureReport.getEvaluatedResource().get(0).getReference()); assertEquals( "Encounter/Encounter-1", measureReport.getEvaluatedResource().get(1).getReference()); + + // second test case bundle(transactional) + bundle = + exportMap.get( + "0ec1197a-4895-43ed-b2eb-27971f8fb95b/title-v0.0.000-testcaseseries-testcasetitle1"); + assertEquals(5, bundle.getEntry().size()); + assertEquals(bundle.getType(), Bundle.BundleType.TRANSACTION); + bundleEntry = bundle.getEntry().get(4); + assertEquals(bundleEntry.getRequest().getMethod(), Bundle.HTTPVerb.POST); + assertEquals( + bundleEntry.getRequest().getUrl(), + "MeasureReport/" + bundleEntry.getResource().getIdPart()); } @Test diff --git a/src/test/resources/measures/SimpleFhirMeasureLib/madie_measure.json b/src/test/resources/measures/SimpleFhirMeasureLib/madie_measure.json index 5e29ab33..18f792bc 100644 --- a/src/test/resources/measures/SimpleFhirMeasureLib/madie_measure.json +++ b/src/test/resources/measures/SimpleFhirMeasureLib/madie_measure.json @@ -78,7 +78,7 @@ "createdBy":"cecilia.liu@semanticbits.com", "lastModifiedAt":1660832513.936000000, "lastModifiedBy":"cecilia.liu@semanticbits.com", - "json":"{\r\n \"resourceType\": \"Bundle\",\r\n \"id\": \"DENEXPass-NarcolepsyOnsetsEndOfMP\",\r\n \"type\": \"collection\",\r\n \"entry\": [\r\n {\r\n \"fullUrl\": \"633c9d020968f8012250fc60\",\r\n \"resource\": {\r\n \"resourceType\": \"Patient\",\r\n \"id\": \"Patient-1\",\r\n \"meta\": {\r\n \"profile\": [\r\n \"http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-patient\"\r\n ]\r\n },\r\n \"extension\": [\r\n {\r\n \"url\": \"http://hl7.org/fhir/us/core/StructureDefinition/us-core-race\",\r\n \"extension\": [\r\n {\r\n \"url\": \"ombCategory\",\r\n \"valueCoding\": {\r\n \"code\": \"2028-9\",\r\n \"system\": \"urn:oid:2.16.840.1.113883.6.238\",\r\n \"display\": \"Asian\"\r\n }\r\n },\r\n {\r\n \"url\": \"text\",\r\n \"valueString\": \"Asian\"\r\n }\r\n ]\r\n },\r\n {\r\n \"url\": \"http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity\",\r\n \"extension\": [\r\n {\r\n \"url\": \"ombCategory\",\r\n \"valueCoding\": {\r\n \"code\": \"2135-2\",\r\n \"system\": \"urn:oid:2.16.840.1.113883.6.238\",\r\n \"display\": \"Hispanic or Latino\"\r\n }\r\n },\r\n {\r\n \"url\": \"text\",\r\n \"valueString\": \"Hispanic or Latino\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"identifier\": [\r\n {\r\n \"system\": \"http://hospital.smarthealthit.org\",\r\n \"value\": \"999999995\"\r\n }\r\n ],\r\n \"name\": [\r\n {\r\n \"family\": \"Bertha\",\r\n \"given\": [\r\n \"Betty\"\r\n ]\r\n }\r\n ],\r\n \"birthDate\": \"2016-12-31\",\r\n \"gender\": \"female\"\r\n }\r\n },\r\n {\r\n \"fullUrl\": \"633c9d020968f8012250fc61\",\r\n \"resource\": {\r\n \"resourceType\": \"Encounter\",\r\n \"id\": \"Encounter-1\",\r\n \"meta\": {\r\n \"profile\": [\r\n \"http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-encounter\"\r\n ]\r\n },\r\n \"subject\": {\r\n \"reference\": \"Patient/Patient-1\"\r\n },\r\n \"status\": \"finished\",\r\n \"class\": {\r\n \"code\": \"AMB\",\r\n \"system\": \"http://terminology.hl7.org/CodeSystem/v3-ActCode\",\r\n \"display\": \"ambulatory\"\r\n },\r\n \"type\": [\r\n {\r\n \"coding\": [\r\n {\r\n \"code\": \"185464004\",\r\n \"system\": \"http://snomed.info/sct\",\r\n \"display\": \"Out of hours visit - not night visit (procedure)\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"period\": {\r\n \"start\": \"2024-01-01T00:00:00.000Z\",\r\n \"end\": \"2024-01-01T01:00:00.000Z\"\r\n }\r\n }\r\n },\r\n {\r\n \"fullUrl\": \"633c9d020968f8012250fc62\",\r\n \"resource\": {\r\n \"resourceType\": \"MedicationRequest\",\r\n \"id\": \"MedicationRequest-1\",\r\n \"meta\": {\r\n \"profile\": [\r\n \"http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-medicationrequest\"\r\n ]\r\n },\r\n \"requester\": {\r\n \"reference\": \"Practitioner/example\"\r\n },\r\n \"subject\": {\r\n \"reference\": \"Patient/Patient-1\"\r\n },\r\n \"status\": \"completed\",\r\n \"intent\": \"order\",\r\n \"medicationCodeableConcept\": {\r\n \"coding\": [\r\n {\r\n \"code\": \"884173\",\r\n \"system\": \"http://www.nlm.nih.gov/research/umls/rxnorm\",\r\n \"display\": \"clonidine hydrochloride 0.1 MG Oral Tablet\"\r\n }\r\n ]\r\n },\r\n \"authoredOn\": \"2024-01-01T00:00:00.000Z\",\r\n \"dispenseRequest\": {\r\n \"expectedSupplyDuration\": {\r\n \"value\": 90,\r\n \"code\": \"d\",\r\n \"system\": \"http://unitsofmeasure.org\"\r\n }\r\n },\r\n \"dosageInstruction\": [\r\n {\r\n \"timing\": {\r\n \"repeat\": {\r\n \"boundsPeriod\": {\r\n \"start\": \"2024-01-01T00:00:00.000Z\",\r\n \"end\": \"2024-03-31T23:59:59.000Z\"\r\n }\r\n }\r\n }\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"fullUrl\": \"633c9d020968f8012250fc64\",\r\n \"resource\": {\r\n \"resourceType\": \"Condition\",\r\n \"id\": \"Condition-1\",\r\n \"meta\": {\r\n \"profile\": [\r\n \"http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-condition\"\r\n ]\r\n },\r\n \"category\": [\r\n {\r\n \"coding\": [\r\n {\r\n \"code\": \"problem-list-item\",\r\n \"system\": \"http://terminology.hl7.org/CodeSystem/condition-category\",\r\n \"display\": \"Problem List Item\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"subject\": {\r\n \"reference\": \"Patient/Patient-1\"\r\n },\r\n \"code\": {\r\n \"coding\": [\r\n {\r\n \"code\": \"735676003\",\r\n \"system\": \"http://snomed.info/sct\",\r\n \"display\": \"Narcolepsy type 1 (disorder)\"\r\n }\r\n ]\r\n },\r\n \"onsetDateTime\": \"2024-12-31T23:59:01.000Z\",\r\n \"clinicalStatus\": {\r\n \"coding\": [\r\n {\r\n \"code\": \"active\",\r\n \"system\": \"http://terminology.hl7.org/CodeSystem/condition-clinical\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n}\r\n", + "json":"{\r\n \"resourceType\": \"Bundle\",\r\n \"id\": \"DENEXPass-NarcolepsyOnsetsEndOfMP\",\r\n \"type\": \"transaction\",\r\n \"entry\": [\r\n {\r\n \"fullUrl\": \"633c9d020968f8012250fc60\",\r\n \"resource\": {\r\n \"resourceType\": \"Patient\",\r\n \"id\": \"Patient-1\",\r\n \"meta\": {\r\n \"profile\": [\r\n \"http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-patient\"\r\n ]\r\n },\r\n \"extension\": [\r\n {\r\n \"url\": \"http://hl7.org/fhir/us/core/StructureDefinition/us-core-race\",\r\n \"extension\": [\r\n {\r\n \"url\": \"ombCategory\",\r\n \"valueCoding\": {\r\n \"code\": \"2028-9\",\r\n \"system\": \"urn:oid:2.16.840.1.113883.6.238\",\r\n \"display\": \"Asian\"\r\n }\r\n },\r\n {\r\n \"url\": \"text\",\r\n \"valueString\": \"Asian\"\r\n }\r\n ]\r\n },\r\n {\r\n \"url\": \"http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity\",\r\n \"extension\": [\r\n {\r\n \"url\": \"ombCategory\",\r\n \"valueCoding\": {\r\n \"code\": \"2135-2\",\r\n \"system\": \"urn:oid:2.16.840.1.113883.6.238\",\r\n \"display\": \"Hispanic or Latino\"\r\n }\r\n },\r\n {\r\n \"url\": \"text\",\r\n \"valueString\": \"Hispanic or Latino\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"identifier\": [\r\n {\r\n \"system\": \"http://hospital.smarthealthit.org\",\r\n \"value\": \"999999995\"\r\n }\r\n ],\r\n \"name\": [\r\n {\r\n \"family\": \"Bertha\",\r\n \"given\": [\r\n \"Betty\"\r\n ]\r\n }\r\n ],\r\n \"birthDate\": \"2016-12-31\",\r\n \"gender\": \"female\"\r\n }\r\n },\r\n {\r\n \"fullUrl\": \"633c9d020968f8012250fc61\",\r\n \"resource\": {\r\n \"resourceType\": \"Encounter\",\r\n \"id\": \"Encounter-1\",\r\n \"meta\": {\r\n \"profile\": [\r\n \"http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-encounter\"\r\n ]\r\n },\r\n \"subject\": {\r\n \"reference\": \"Patient/Patient-1\"\r\n },\r\n \"status\": \"finished\",\r\n \"class\": {\r\n \"code\": \"AMB\",\r\n \"system\": \"http://terminology.hl7.org/CodeSystem/v3-ActCode\",\r\n \"display\": \"ambulatory\"\r\n },\r\n \"type\": [\r\n {\r\n \"coding\": [\r\n {\r\n \"code\": \"185464004\",\r\n \"system\": \"http://snomed.info/sct\",\r\n \"display\": \"Out of hours visit - not night visit (procedure)\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"period\": {\r\n \"start\": \"2024-01-01T00:00:00.000Z\",\r\n \"end\": \"2024-01-01T01:00:00.000Z\"\r\n }\r\n }\r\n },\r\n {\r\n \"fullUrl\": \"633c9d020968f8012250fc62\",\r\n \"resource\": {\r\n \"resourceType\": \"MedicationRequest\",\r\n \"id\": \"MedicationRequest-1\",\r\n \"meta\": {\r\n \"profile\": [\r\n \"http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-medicationrequest\"\r\n ]\r\n },\r\n \"requester\": {\r\n \"reference\": \"Practitioner/example\"\r\n },\r\n \"subject\": {\r\n \"reference\": \"Patient/Patient-1\"\r\n },\r\n \"status\": \"completed\",\r\n \"intent\": \"order\",\r\n \"medicationCodeableConcept\": {\r\n \"coding\": [\r\n {\r\n \"code\": \"884173\",\r\n \"system\": \"http://www.nlm.nih.gov/research/umls/rxnorm\",\r\n \"display\": \"clonidine hydrochloride 0.1 MG Oral Tablet\"\r\n }\r\n ]\r\n },\r\n \"authoredOn\": \"2024-01-01T00:00:00.000Z\",\r\n \"dispenseRequest\": {\r\n \"expectedSupplyDuration\": {\r\n \"value\": 90,\r\n \"code\": \"d\",\r\n \"system\": \"http://unitsofmeasure.org\"\r\n }\r\n },\r\n \"dosageInstruction\": [\r\n {\r\n \"timing\": {\r\n \"repeat\": {\r\n \"boundsPeriod\": {\r\n \"start\": \"2024-01-01T00:00:00.000Z\",\r\n \"end\": \"2024-03-31T23:59:59.000Z\"\r\n }\r\n }\r\n }\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"fullUrl\": \"633c9d020968f8012250fc64\",\r\n \"resource\": {\r\n \"resourceType\": \"Condition\",\r\n \"id\": \"Condition-1\",\r\n \"meta\": {\r\n \"profile\": [\r\n \"http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-condition\"\r\n ]\r\n },\r\n \"category\": [\r\n {\r\n \"coding\": [\r\n {\r\n \"code\": \"problem-list-item\",\r\n \"system\": \"http://terminology.hl7.org/CodeSystem/condition-category\",\r\n \"display\": \"Problem List Item\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"subject\": {\r\n \"reference\": \"Patient/Patient-1\"\r\n },\r\n \"code\": {\r\n \"coding\": [\r\n {\r\n \"code\": \"735676003\",\r\n \"system\": \"http://snomed.info/sct\",\r\n \"display\": \"Narcolepsy type 1 (disorder)\"\r\n }\r\n ]\r\n },\r\n \"onsetDateTime\": \"2024-12-31T23:59:01.000Z\",\r\n \"clinicalStatus\": {\r\n \"coding\": [\r\n {\r\n \"code\": \"active\",\r\n \"system\": \"http://terminology.hl7.org/CodeSystem/condition-clinical\"\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n ]\r\n}\r\n", "hapiOperationOutcome":null, "patientId":"0ec1197a-4895-43ed-b2eb-27971f8fb95b", "groupPopulations":[ From 02f46898140ea0e35fde582a095adad1708d54b0 Mon Sep 17 00:00:00 2001 From: adongare Date: Fri, 22 Sep 2023 16:09:06 -0400 Subject: [PATCH 4/5] re-trigger the build --- .../cms/madie/madiefhirservice/utils/FhirResourceHelpers.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/gov/cms/madie/madiefhirservice/utils/FhirResourceHelpers.java b/src/main/java/gov/cms/madie/madiefhirservice/utils/FhirResourceHelpers.java index 40ec2ed0..909f885a 100644 --- a/src/main/java/gov/cms/madie/madiefhirservice/utils/FhirResourceHelpers.java +++ b/src/main/java/gov/cms/madie/madiefhirservice/utils/FhirResourceHelpers.java @@ -14,7 +14,6 @@ @Component public class FhirResourceHelpers { - private static String madieUrl; @Value("${madie.url}") From 67f88472b8c244609d9d00c614457bb07001c851 Mon Sep 17 00:00:00 2001 From: adongare Date: Fri, 22 Sep 2023 16:37:12 -0400 Subject: [PATCH 5/5] MAT-6237 replace related artifact url with resource --- .../cms/madie/madiefhirservice/cql/LibraryCqlVisitor.java | 6 +++--- .../madiefhirservice/services/LibraryTranslatorService.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/gov/cms/madie/madiefhirservice/cql/LibraryCqlVisitor.java b/src/main/java/gov/cms/madie/madiefhirservice/cql/LibraryCqlVisitor.java index 516cea35..9f7437a0 100644 --- a/src/main/java/gov/cms/madie/madiefhirservice/cql/LibraryCqlVisitor.java +++ b/src/main/java/gov/cms/madie/madiefhirservice/cql/LibraryCqlVisitor.java @@ -70,7 +70,7 @@ public String visitIncludeDefinition(cqlParser.IncludeDefinitionContext ctx) { FhirResourceHelpers.buildResourceFullUrl("Library", nameVersion.getLeft()) + "|" + nameVersion.getRight(); - relatedArtifact.setUrl(url); + relatedArtifact.setResource(url); relatedArtifacts.add(relatedArtifact); includedLibraries.add(nameVersion); includes.add(ctx); @@ -94,7 +94,7 @@ public String visitValuesetDefinition(cqlParser.ValuesetDefinitionContext ctx) { .add(new ValuesetModel(vsName, uri, null, null)); RelatedArtifact relatedArtifact = new RelatedArtifact(); relatedArtifact.setType(RelatedArtifact.RelatedArtifactType.DEPENDSON); - relatedArtifact.setUrl(uri); + relatedArtifact.setResource(uri); relatedArtifacts.add(relatedArtifact); // need to be polished once we human readable file @@ -108,7 +108,7 @@ public String visitCodesystemDefinition(cqlParser.CodesystemDefinitionContext ct codeSystems.add(ctx); RelatedArtifact relatedArtifact = new RelatedArtifact(); relatedArtifact.setType(RelatedArtifact.RelatedArtifactType.DEPENDSON); - relatedArtifact.setUrl( + relatedArtifact.setResource( getUnquotedFullText(ctx.codesystemId()) + (ctx.versionSpecifier() != null ? "|" + getUnquotedFullText(ctx.versionSpecifier()) diff --git a/src/main/java/gov/cms/madie/madiefhirservice/services/LibraryTranslatorService.java b/src/main/java/gov/cms/madie/madiefhirservice/services/LibraryTranslatorService.java index 51194e3a..92b58211 100644 --- a/src/main/java/gov/cms/madie/madiefhirservice/services/LibraryTranslatorService.java +++ b/src/main/java/gov/cms/madie/madiefhirservice/services/LibraryTranslatorService.java @@ -146,7 +146,7 @@ private List distinctArtifacts(List artifacts) result.add(a); } }); - result.sort(Comparator.comparing(RelatedArtifact::getUrl)); + result.sort(Comparator.comparing(RelatedArtifact::getResource)); return result; }