Fix incorrect version on resource parameter (#5813)

* Fix incorrect version on resource parameter

* Add dstu3 test

* Fix tests

* Remove failing IEmailSender bean

* Add tests

* Update to 3.3.1
This commit is contained in:
Brenin Rhodes 2024-04-15 12:03:41 -06:00 committed by GitHub
parent b85a26f4a0
commit edd04916fe
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
21 changed files with 934 additions and 109 deletions

View File

@ -0,0 +1,4 @@
---
type: fix
issue: 5812
title: "Previously, the 'planDefinition' resource parameter for the Dstu3 version of PlanDefinition/$apply was incorrectly defined as an R4 resource. This issue has been fixed."

View File

@ -175,13 +175,6 @@ public class TestDstu3Config {
return dataSource;
}
@Bean
public IEmailSender emailSender() {
final MailConfig mailConfig = new MailConfig().setSmtpHostname("localhost").setSmtpPort(3025);
final IMailSvc mailSvc = new MailSvc(mailConfig);
return new EmailSenderImpl(mailSvc);
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(ConfigurableListableBeanFactory theConfigurableListableBeanFactory, FhirContext theFhirContext, JpaStorageSettings theStorageSettings) {
LocalContainerEntityManagerFactoryBean retVal = HapiEntityManagerFactoryUtil.newEntityManagerFactory(theConfigurableListableBeanFactory, theFhirContext, theStorageSettings);

View File

@ -88,7 +88,7 @@ public class PlanDefinitionApplyProvider {
@Operation(name = ProviderConstants.CR_OPERATION_APPLY, idempotent = true, type = PlanDefinition.class)
public IBaseResource apply(
@IdParam IdType theId,
@OperationParam(name = "planDefinition") org.hl7.fhir.r4.model.PlanDefinition thePlanDefinition,
@OperationParam(name = "planDefinition") PlanDefinition thePlanDefinition,
@OperationParam(name = "canonical") String theCanonical,
@OperationParam(name = "url") String theUrl,
@OperationParam(name = "version") String theVersion,
@ -134,7 +134,7 @@ public class PlanDefinitionApplyProvider {
@Operation(name = ProviderConstants.CR_OPERATION_APPLY, idempotent = true, type = PlanDefinition.class)
public IBaseResource apply(
@OperationParam(name = "planDefinition") org.hl7.fhir.r4.model.PlanDefinition thePlanDefinition,
@OperationParam(name = "planDefinition") PlanDefinition thePlanDefinition,
@OperationParam(name = "canonical") String theCanonical,
@OperationParam(name = "url") String theUrl,
@OperationParam(name = "version") String theVersion,

View File

@ -0,0 +1,46 @@
package ca.uhn.fhir.cr.dstu3;
import ca.uhn.fhir.cr.dstu3.activitydefinition.ActivityDefinitionApplyProvider;
import org.hl7.fhir.dstu3.model.BooleanType;
import org.hl7.fhir.dstu3.model.IdType;
import org.hl7.fhir.dstu3.model.ProcedureRequest;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class ActivityDefinitionOperationsProviderTest extends BaseCrDstu3TestServer {
@Autowired
ActivityDefinitionApplyProvider myActivityDefinitionApplyProvider;
@Test
void testActivityDefinitionApply() {
loadBundle("ca/uhn/fhir/cr/dstu3/Bundle-ActivityDefinitionTest.json");
var requestDetails = setupRequestDetails();
var result = myActivityDefinitionApplyProvider.apply(
new IdType("activityDefinition-test"),
null,
null,
"patient-1",
null,
null,
null,
null,
null,
null,
null,
null,
null,
new BooleanType(true),
null,
null,
null,
null,
requestDetails);
assertTrue(result instanceof ProcedureRequest);
ProcedureRequest request = (ProcedureRequest) result;
assertTrue(request.getDoNotPerform());
}
}

View File

@ -2,7 +2,7 @@ package ca.uhn.fhir.cr.dstu3;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.cr.IResourceLoader;
import ca.uhn.fhir.cr.dstu3.TestCrDstu3Config;
import ca.uhn.fhir.cr.config.dstu3.ApplyOperationConfig;
import ca.uhn.fhir.jpa.api.config.JpaStorageSettings;
import ca.uhn.fhir.jpa.api.dao.DaoRegistry;
import ca.uhn.fhir.jpa.search.DatabaseBackedPagingProvider;
@ -18,22 +18,20 @@ import ca.uhn.fhir.test.utilities.JettyUtil;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.ee10.servlet.ServletContextHandler;
import org.eclipse.jetty.ee10.servlet.ServletHolder;
import org.eclipse.jetty.server.Server;
import org.hl7.fhir.dstu3.model.Bundle;
import org.hl7.fhir.dstu3.model.Resource;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.test.context.ContextConfiguration;
import java.util.List;
import java.util.concurrent.TimeUnit;
@ContextConfiguration(classes = {TestCrDstu3Config.class})
@ContextConfiguration(classes = {TestCrDstu3Config.class, ApplyOperationConfig.class})
public abstract class BaseCrDstu3TestServer extends BaseJpaDstu3Test implements IResourceLoader {
public static IGenericClient ourClient;
@ -46,22 +44,12 @@ public abstract class BaseCrDstu3TestServer extends BaseJpaDstu3Test implements
@Autowired
protected DaoRegistry myDaoRegistry;
@Autowired
ApplicationContext myApplicationContext;
private SimpleRequestHeaderInterceptor mySimpleHeaderInterceptor;
@SuppressWarnings("deprecation")
@AfterEach
public void after() {
ourClient.unregisterInterceptor(mySimpleHeaderInterceptor);
myStorageSettings.setIndexMissingFields(new JpaStorageSettings().getIndexMissingFields());
}
@Autowired
RestfulServer ourRestfulServer;
@BeforeEach
public void beforeStartServer() throws Exception {
ourServer = new Server(0);
ServletContextHandler proxyHandler = new ServletContextHandler();
@ -97,7 +85,6 @@ public abstract class BaseCrDstu3TestServer extends BaseJpaDstu3Test implements
mySimpleHeaderInterceptor = new SimpleRequestHeaderInterceptor();
ourClient.registerInterceptor(mySimpleHeaderInterceptor);
myStorageSettings.setIndexMissingFields(JpaStorageSettings.IndexEnabledEnum.DISABLED);
}
@Override
@ -114,7 +101,6 @@ public abstract class BaseCrDstu3TestServer extends BaseJpaDstu3Test implements
return loadBundle(Bundle.class, theLocation);
}
public Bundle makeBundle(List<? extends Resource> theResources) {
return makeBundle(theResources.toArray(new Resource[theResources.size()]));
}

View File

@ -28,8 +28,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
@ContextConfiguration(classes = {TestCrDstu3Config.class})
public class CrDstu3MeasureOperationProviderIT extends BaseCrDstu3TestServer {
private static final Logger ourLog = LoggerFactory.getLogger(CrDstu3MeasureOperationProviderIT.class);
public class MeasureOperationProviderTest extends BaseCrDstu3TestServer {
private static final Logger ourLog = LoggerFactory.getLogger(MeasureOperationProviderTest.class);
@Autowired
MeasureOperationsProvider myMeasureOperationsProvider;

View File

@ -0,0 +1,41 @@
package ca.uhn.fhir.cr.dstu3;
import ca.uhn.fhir.cr.dstu3.plandefinition.PlanDefinitionApplyProvider;
import org.hl7.fhir.dstu3.model.BooleanType;
import org.hl7.fhir.dstu3.model.CarePlan;
import org.hl7.fhir.dstu3.model.IdType;
import org.hl7.fhir.dstu3.model.PlanDefinition;
import org.hl7.fhir.dstu3.model.RequestGroup;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import static org.junit.Assert.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
public class PlanDefinitionOperationsProviderTest extends BaseCrDstu3TestServer {
@Autowired
PlanDefinitionApplyProvider myPlanDefinitionApplyProvider;
@Test
void testApply() {
loadBundle("ca/uhn/fhir/cr/dstu3/hello-world/hello-world-patient-view-bundle.json");
loadBundle("ca/uhn/fhir/cr/dstu3/hello-world/hello-world-patient-data.json");
var planDefinition = (PlanDefinition) read(new IdType("PlanDefinition", "hello-world-patient-view"));
var requestDetails = setupRequestDetails();
var patientId = "Patient/helloworld-patient-1";
var result = (CarePlan) myPlanDefinitionApplyProvider.apply(null, planDefinition, null, null, null, patientId,
null, null, null, null, null,
null, null, null, null, new BooleanType(true), null,
null, null, null,
requestDetails);
assertNotNull(result);
assertEquals(patientId, result.getSubject().getReference());
assertEquals(1, result.getContained().size());
var requestGroup = (RequestGroup) result.getContained().get(0);
assertEquals(1, requestGroup.getAction().size());
var action = requestGroup.getAction().get(0);
assertEquals("Hello World!", action.getTitle());
}
}

View File

@ -6,7 +6,6 @@ import ca.uhn.fhir.cr.TestCrConfig;
import ca.uhn.fhir.cr.config.dstu3.CrDstu3Config;
import org.cqframework.cql.cql2elm.CqlCompilerOptions;
import org.cqframework.cql.cql2elm.model.CompiledLibrary;
import org.cqframework.cql.cql2elm.model.Model;
@ -30,9 +29,11 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
@Configuration
@Import({TestCrConfig.class, CrDstu3Config.class})
@Import({
TestCrConfig.class,
CrDstu3Config.class
})
public class TestCrDstu3Config {
@Bean

View File

@ -38,7 +38,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
* 6. Provider submits additional Patient data
* 7. Provider invokes care-gaps (and discovers issues are closed).
*/
class CareGapsProviderIT extends BaseCrR4TestServer
class CareGapsProviderTest extends BaseCrR4TestServer
{

View File

@ -20,7 +20,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
@ExtendWith(SpringExtension.class)
class R4MeasureOperationProviderIT extends BaseCrR4TestServer {
class MeasureOperationProviderTest extends BaseCrR4TestServer {
public MeasureReport runEvaluateMeasure(String periodStart, String periodEnd, String subject, String measureId, String reportType, String practitioner){
@ -160,6 +160,4 @@ class R4MeasureOperationProviderIT extends BaseCrR4TestServer {
String.format("expected count for population \"%s\" did not match", populationName)
);
}
}

View File

@ -160,6 +160,4 @@ public class TestCrR4Config {
evaluationSettings.setValueSetCache(theGlobalValueSetCache);
return evaluationSettings;
}
}

View File

@ -261,6 +261,7 @@
],
"supplementalData": [
{
"id": "sde-ethnicity",
"code": {
"text": "sde-ethnicity"
},
@ -280,6 +281,7 @@
}
},
{
"id": "sde-payer",
"code": {
"text": "sde-payer"
},
@ -299,6 +301,7 @@
}
},
{
"id": "sde-race",
"code": {
"text": "sde-race"
},
@ -318,6 +321,7 @@
}
},
{
"id": "sde-sex",
"code": {
"text": "sde-sex"
},
@ -357,7 +361,7 @@
],
"url": "http://localhost:8080/fhir/Library/EXM104",
"version": "8.2.000",
"name": "library-EXM104",
"name": "EXM104",
"status": "active",
"experimental": true,
"type": {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,78 @@
{
"resourceType": "Bundle",
"id": "bundle-test",
"type": "transaction",
"entry" : [{
"resource": {
"resourceType": "ActivityDefinition",
"id": "activityDefinition-test",
"name": "ActivityDefinition_CreateAProcedure",
"title": "CreateProcedure",
"status": "draft",
"description": "Create the procedure.",
"library": [
{
"reference": "http://test/fhir/Library/TestActivityDefinition|1.0.0"
}
],
"kind": "ProcedureRequest",
"code": {
"coding": [
{
"system": "http://test/fhir/System",
"code": "code"
}
]
},
"dynamicValue": [
{
"path": "doNotPerform",
"language": "text/cql.name",
"expression": "ActiveProcedureStatus"
}
]
},
"request": {
"method": "PUT",
"url": "ActivityDefinition/activityDefinition-test"
}
},
{
"resource": {
"resourceType": "Library",
"id": "TestActivityDefinition",
"url": "http://test/fhir/Library/TestActivityDefinition|1.0.0",
"version": "1.0.0",
"name": "TestActivityDefinition",
"parameter": [
{
"name": "ActiveProcedureStatus",
"use": "out",
"min": 0,
"max": "1",
"type": "boolean"
}
],
"content": [
{
"contentType": "text/cql",
"data": "bGlicmFyeSBUZXN0QWN0aXZpdHlEZWZpbml0aW9uIHZlcnNpb24gJzEuMC4wJwoKZGVmaW5lICJBY3RpdmVQcm9jZWR1cmVTdGF0dXMiOgogIHRydWU="
}
]
},
"request": {
"method": "PUT",
"url": "Library/TestActivityDefinition"
}
},
{
"resource": {
"resourceType": "Patient",
"id": "patient-1"
},
"request": {
"method": "PUT",
"url": "Patient/patient-1"
}
}]
}

View File

@ -0,0 +1,55 @@
{
"resourceType": "CarePlan",
"id": "hello-world-patient-view",
"contained": [
{
"resourceType": "RequestGroup",
"id": "hello-world-patient-view",
"definition": [
{
"reference": "http://fhir.org/guides/cdc/opioid-cds/PlanDefinition/hello-world-patient-view|1.0.0"
}
],
"status": "draft",
"intent": "proposal",
"subject": {
"reference": "Patient/helloworld-patient-1"
},
"context": {
"reference": "Encounter/helloworld-patient-1-encounter-1"
},
"action": [
{
"title": "Hello World!",
"description": "The CDS Service is alive and communicating successfully!",
"condition": [
{
"kind": "start",
"expression": "Main Action Condition Expression Is True"
}
]
}
]
}
],
"definition": [
{
"reference": "http://fhir.org/guides/cdc/opioid-cds/PlanDefinition/hello-world-patient-view|1.0.0"
}
],
"status": "draft",
"intent": "proposal",
"subject": {
"reference": "Patient/helloworld-patient-1"
},
"context": {
"reference": "Encounter/helloworld-patient-1-encounter-1"
},
"activity": [
{
"reference": {
"reference": "#RequestGroup/hello-world-patient-view"
}
}
]
}

View File

@ -0,0 +1,459 @@
{
"resourceType": "Bundle",
"id": "hello-world-patient-data",
"type": "transaction",
"entry": [
{
"resource": {
"resourceType": "Encounter",
"id": "helloworld-patient-1-encounter-1",
"meta": {
"profile": [
"http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-encounter"
]
},
"status": "finished",
"class": {
"system": "http://terminology.hl7.org/CodeSystem/v3-ActCode",
"code": "AMB",
"display": "ambulatory"
},
"type": [
{
"coding": [
{
"system": "http://snomed.info/sct",
"version": "2020-09",
"code": "185463005",
"display": "Visit out of hours (procedure)"
}
]
}
],
"subject": {
"reference": "Patient/helloworld-patient-1"
},
"period": {
"start": "2020-01-01T10:00:00-07:00",
"end": "2020-01-01T11:00:00-07:00"
}
},
"request": {
"method": "PUT",
"url": "Encounter/helloworld-patient-1-encounter-1"
}
},
{
"resource": {
"resourceType": "Patient",
"id": "helloworld-patient-1",
"meta": {
"profile": [
"http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-patient"
]
},
"extension": [
{
"url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
"extension": [
{
"url": "ombCategory",
"valueCoding": {
"system": "http://terminology.hl7.org/CodeSystem/PHRaceAndEthnicityCDC",
"code": "2106-3",
"display": "White"
}
},
{
"url": "ombCategory",
"valueCoding": {
"system": "http://terminology.hl7.org/CodeSystem/PHRaceAndEthnicityCDC",
"code": "1002-5",
"display": "American Indian or Alaska Native"
}
},
{
"url": "ombCategory",
"valueCoding": {
"system": "http://terminology.hl7.org/CodeSystem/PHRaceAndEthnicityCDC",
"code": "2028-9",
"display": "Asian"
}
},
{
"url": "detailed",
"valueCoding": {
"system": "http://terminology.hl7.org/CodeSystem/PHRaceAndEthnicityCDC",
"code": "1586-7",
"display": "Shoshone"
}
},
{
"url": "detailed",
"valueCoding": {
"system": "http://terminology.hl7.org/CodeSystem/PHRaceAndEthnicityCDC",
"code": "2036-2",
"display": "Filipino"
}
},
{
"url": "text",
"valueString": "Mixed"
}
]
},
{
"url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
"extension": [
{
"url": "ombCategory",
"valueCoding": {
"system": "http://terminology.hl7.org/CodeSystem/PHRaceAndEthnicityCDC",
"code": "2135-2",
"display": "Hispanic or Latino"
}
},
{
"url": "detailed",
"valueCoding": {
"system": "http://terminology.hl7.org/CodeSystem/PHRaceAndEthnicityCDC",
"code": "2184-0",
"display": "Dominican"
}
},
{
"url": "detailed",
"valueCoding": {
"system": "http://terminology.hl7.org/CodeSystem/PHRaceAndEthnicityCDC",
"code": "2148-5",
"display": "Mexican"
}
},
{
"url": "text",
"valueString": "Hispanic or Latino"
}
]
},
{
"url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-birthsex",
"valueCode": "M"
}
],
"identifier": [
{
"use": "usual",
"type": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0203",
"code": "MR"
}
]
},
"system": "urn:oid:1.2.36.146.595.217.0.1",
"value": "12345",
"period": {
"start": "2001-05-06"
},
"assigner": {
"display": "Acme Healthcare"
}
}
],
"active": true,
"name": [
{
"use": "official",
"family": "Doe",
"given": [
"John"
]
}
],
"gender": "male",
"birthDate": "1991-01-01",
"deceasedBoolean": false
},
"request": {
"method": "PUT",
"url": "Patient/helloworld-patient-1"
}
},
{
"resource": {
"resourceType": "MeasureReport",
"id": "measurereport-helloworld-patient-1",
"contained": [
{
"resourceType": "Observation",
"id": "256ebb02-c5d6-4b37-ae5f-66b027e67c53",
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/cqf-measureInfo",
"extension": [
{
"url": "measure",
"valueUri": "http://content.alphora.com/fhir/dqm/Measure/helloworld"
},
{
"url": "populationId",
"valueString": "sde-race"
}
]
}
],
"status": "final",
"code": {
"text": "sde-race"
},
"valueCodeableConcept": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/PHRaceAndEthnicityCDC",
"code": "2106-3",
"display": "White"
}
]
}
},
{
"resourceType": "Observation",
"id": "54f1aa42-627e-45df-a655-18a88c5f5d6c",
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/cqf-measureInfo",
"extension": [
{
"url": "measure",
"valueUri": "http://content.alphora.com/fhir/dqm/Measure/helloworld"
},
{
"url": "populationId",
"valueString": "sde-payer"
}
]
}
],
"status": "final",
"code": {
"text": "sde-payer"
},
"valueCodeableConcept": {
"coding": [
{
"system": "https://nahdo.org/sopt",
"code": "31",
"display": "Department of Defense"
}
]
}
},
{
"resourceType": "Observation",
"id": "2499fe18-2a97-4ad8-8d5f-154d94f5f4e9",
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/cqf-measureInfo",
"extension": [
{
"url": "measure",
"valueUri": "http://content.alphora.com/fhir/dqm/Measure/helloworld"
},
{
"url": "populationId",
"valueString": "sde-ethnicity"
}
]
}
],
"status": "final",
"code": {
"text": "sde-ethnicity"
},
"valueCodeableConcept": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/PHRaceAndEthnicityCDC",
"code": "2135-2",
"display": "Hispanic or Latino"
}
]
}
},
{
"resourceType": "Observation",
"id": "6f2b2210-564c-4614-bbe7-0fe5de354b99",
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/cqf-measureInfo",
"extension": [
{
"url": "measure",
"valueUri": "http://content.alphora.com/fhir/dqm/Measure/helloworld"
},
{
"url": "populationId",
"valueString": "sde-sex"
}
]
}
],
"status": "final",
"code": {
"text": "sde-sex"
},
"valueCodeableConcept": {
"coding": [
{
"code": "M"
}
]
}
}
],
"status": "complete",
"type": "individual",
"measure": {
"reference": "http://content.alphora.com/fhir/dqm/Measure/helloworld"
},
"patient": {
"reference": "Patient/helloworld-patient-1"
},
"period": {
"start": "2020-01-01T00:00:00-07:00",
"end": "2020-12-31T00:00:00-07:00"
},
"group": [
{
"id": "group-1",
"population": [
{
"code": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
"code": "initial-population",
"display": "Initial Population"
}
]
},
"count": 0
},
{
"code": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
"code": "numerator",
"display": "Numerator"
}
]
},
"count": 0
},
{
"code": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
"code": "denominator",
"display": "Denominator"
}
]
},
"count": 0
}
]
},
{
"id": "group-2",
"population": [
{
"code": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
"code": "initial-population",
"display": "Initial Population"
}
]
},
"count": 0
},
{
"code": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
"code": "numerator",
"display": "Numerator"
}
]
},
"count": 0
},
{
"code": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
"code": "denominator",
"display": "Denominator"
}
]
},
"count": 0
}
]
}
]
},
"request": {
"method": "PUT",
"url": "MeasureReport/measurereport-helloworld-patient-1"
}
},
{
"resource": {
"resourceType": "Coverage",
"id": "helloworld-patient-1-coverage-1",
"meta": {
"profile": [
"http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-coverage"
]
},
"status": "active",
"type": {
"coding": [
{
"system": "https://nahdo.org/sopt",
"version": "9.2",
"code": "31",
"display": "Department of Defense"
}
]
},
"policyHolder": {
"reference": "Patient/helloworld-patient-1"
},
"beneficiary": {
"reference": "Patient/helloworld-patient-1"
},
"period": {
"start": "2020-01-01T00:00:00-07:00",
"end": "2021-01-01T00:00:00-07:00"
},
"payor": [
{
"reference": "Patient/helloworld-patient-1"
}
]
},
"request": {
"method": "PUT",
"url": "Coverage/helloworld-patient-1-coverage-1"
}
}
]
}

View File

@ -0,0 +1,214 @@
{
"resourceType": "Bundle",
"id": "hello-world-patient-view-bundle",
"type": "transaction",
"entry": [
{
"resource": {
"resourceType": "PlanDefinition",
"id": "hello-world-patient-view",
"meta": {
"profile": [
"http://hl7.org/fhir/uv/cpg/StructureDefinition/cpg-recommendationdefinition"
]
},
"url": "http://fhir.org/guides/cdc/opioid-cds/PlanDefinition/hello-world-patient-view",
"identifier": [
{
"use": "official",
"value": "helloworld-patient-view-sample"
}
],
"version": "1.0.0",
"name": "HelloWorldPatientView",
"title": "Hello World (patient-view)",
"type": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/plan-definition-type",
"code": "eca-rule",
"display": "ECA Rule"
}
]
},
"status": "draft",
"experimental": true,
"date": "2021-05-26T00:00:00-08:00",
"publisher": "Alphora",
"description": "This PlanDefinition defines a simple Hello World recommendation that triggers on patient-view.",
"useContext": [
{
"code": {
"system": "http://terminology.hl7.org/CodeSystem/usage-context-type",
"version": "3.2.0",
"code": "focus",
"display": "Clinical Focus"
}
}
],
"jurisdiction": [
{
"coding": [
{
"system": "http://hl7.org/fhir/ValueSet/iso3166-1-3",
"version": "3.2.0",
"code": "USA",
"display": "United States of America"
}
]
}
],
"purpose": "The purpose of this is to test the system to make sure we have complete end-to-end functionality",
"usage": "This is to be used in conjunction with a patient-facing FHIR application.",
"copyright": "© CDC 2016+.",
"library": [
{
"reference": "http://fhir.org/guides/cdc/opioid-cds/Library/HelloWorld"
}
],
"action": [
{
"title": "Hello World!",
"description": "A simple Hello World (patient-view) recommendation",
"triggerDefinition": [
{
"type": "named-event",
"eventName": "patient-view"
}
],
"condition": [
{
"kind": "start",
"description": "Whether or not a Hello World! card should be returned",
"language": "text/cql.identifier",
"expression": "Main Action Condition Expression Is True"
}
],
"dynamicValue": [
{
"path": "action.title",
"language": "text/cql.identifier",
"expression": "Get Title"
},
{
"path": "action.description",
"language": "text/cql.identifier",
"expression": "Get Description"
}
]
}
]
},
"request": {
"method": "PUT",
"url": "PlanDefinition/hello-world-patient-view"
}
},
{
"resource": {
"resourceType": "Library",
"id": "HelloWorld",
"extension": [
{
"url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-softwaresystem",
"valueReference": {
"reference": "Device/cqf-tooling"
}
}
],
"url": "http://fhir.org/guides/cdc/opioid-cds/Library/HelloWorld",
"version": "1.0.0",
"name": "HelloWorld",
"relatedArtifact": [
{
"type": "depends-on",
"display": "FHIR model information",
"resource": {
"reference": "http://fhir.org/guides/cqf/common/Library/FHIR-ModelInfo|3.2.0"
}
}
],
"parameter": [
{
"name": "Patient",
"use": "out",
"min": 0,
"max": "1",
"type": "Patient"
},
{
"name": "Info",
"use": "out",
"min": 0,
"max": "1",
"type": "string"
},
{
"name": "Warning",
"use": "out",
"min": 0,
"max": "1",
"type": "string"
},
{
"name": "Critical",
"use": "out",
"min": 0,
"max": "1",
"type": "string"
},
{
"name": "Main Action Condition Expression Is True",
"use": "out",
"min": 0,
"max": "1",
"type": "boolean"
},
{
"name": "Get Title",
"use": "out",
"min": 0,
"max": "1",
"type": "string"
},
{
"name": "Get Description",
"use": "out",
"min": 0,
"max": "1",
"type": "string"
},
{
"name": "Get Indicator",
"use": "out",
"min": 0,
"max": "1",
"type": "string"
}
],
"dataRequirement": [
{
"type": "Patient",
"profile": [
"http://hl7.org/fhir/StructureDefinition/Patient"
]
}
],
"content": [
{
"contentType": "text/cql",
"data": "bGlicmFyeSBIZWxsb1dvcmxkIHZlcnNpb24gJzEuMC4wJwoKdXNpbmcgRkhJUiB2ZXJzaW9uICczLjIuMCcKCi8qIGluY2x1ZGUgRkhJUkhlbHBlcnMgdmVyc2lvbiAnMy4yLjAnKi8KCmNvbnRleHQgUGF0aWVudAoKZGVmaW5lICJJbmZvIjoKICAnaW5mbycKCmRlZmluZSAiV2FybmluZyI6CiAgJ3dhcm5pbmcnCgpkZWZpbmUgIkNyaXRpY2FsIjoKICAnY3JpdGljYWwnCgpkZWZpbmUgIk1haW4gQWN0aW9uIENvbmRpdGlvbiBFeHByZXNzaW9uIElzIFRydWUiOgogIHRydWUKCmRlZmluZSAiR2V0IFRpdGxlIjoKICAnSGVsbG8gV29ybGQhJwoKZGVmaW5lICJHZXQgRGVzY3JpcHRpb24iOgogICdUaGUgQ0RTIFNlcnZpY2UgaXMgYWxpdmUgYW5kIGNvbW11bmljYXRpbmcgc3VjY2Vzc2Z1bGx5IScKCmRlZmluZSAiR2V0IEluZGljYXRvciI6CiAgJ2luZm8nCg=="
},
{
"contentType": "application/elm+xml",
"data": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGxpYnJhcnkgeG1sbnM9InVybjpobDctb3JnOmVsbTpyMSIgeG1sbnM6dD0idXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpmaGlyPSJodHRwOi8vaGw3Lm9yZy9maGlyIiB4bWxuczpxZG00Mz0idXJuOmhlYWx0aGl0LWdvdjpxZG06djRfMyIgeG1sbnM6cWRtNTM9InVybjpoZWFsdGhpdC1nb3Y6cWRtOnY1XzMiIHhtbG5zOmE9InVybjpobDctb3JnOmNxbC1hbm5vdGF0aW9uczpyMSI+CiAgIDxhbm5vdGF0aW9uIHRyYW5zbGF0b3JWZXJzaW9uPSIyLjIuMC1TTkFQU0hPVCIgdHJhbnNsYXRvck9wdGlvbnM9IiIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1JbmZvIi8+CiAgIDxpZGVudGlmaWVyIGlkPSJIZWxsb1dvcmxkIiB2ZXJzaW9uPSIxLjAuMCIvPgogICA8c2NoZW1hSWRlbnRpZmllciBpZD0idXJuOmhsNy1vcmc6ZWxtIiB2ZXJzaW9uPSJyMSIvPgogICA8dXNpbmdzPgogICAgICA8ZGVmIGxvY2FsSWRlbnRpZmllcj0iU3lzdGVtIiB1cmk9InVybjpobDctb3JnOmVsbS10eXBlczpyMSIvPgogICAgICA8ZGVmIGxvY2FsSWRlbnRpZmllcj0iRkhJUiIgdXJpPSJodHRwOi8vaGw3Lm9yZy9maGlyIiB2ZXJzaW9uPSIzLjIuMCIvPgogICA8L3VzaW5ncz4KICAgPGNvbnRleHRzPgogICAgICA8ZGVmIG5hbWU9IlBhdGllbnQiLz4KICAgPC9jb250ZXh0cz4KICAgPHN0YXRlbWVudHM+CiAgICAgIDxkZWYgbmFtZT0iUGF0aWVudCIgY29udGV4dD0iUGF0aWVudCI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJTaW5nbGV0b25Gcm9tIj4KICAgICAgICAgICAgPG9wZXJhbmQgZGF0YVR5cGU9ImZoaXI6UGF0aWVudCIgeHNpOnR5cGU9IlJldHJpZXZlIi8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iSW5mbyIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxleHByZXNzaW9uIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJpbmZvIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJXYXJuaW5nIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGV4cHJlc3Npb24gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9Indhcm5pbmciIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IkNyaXRpY2FsIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGV4cHJlc3Npb24gdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImNyaXRpY2FsIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJNYWluIEFjdGlvbiBDb25kaXRpb24gRXhwcmVzc2lvbiBJcyBUcnVlIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGV4cHJlc3Npb24gdmFsdWVUeXBlPSJ0OkJvb2xlYW4iIHZhbHVlPSJ0cnVlIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJHZXQgVGl0bGUiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iSGVsbG8gV29ybGQhIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJHZXQgRGVzY3JpcHRpb24iIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iVGhlIENEUyBTZXJ2aWNlIGlzIGFsaXZlIGFuZCBjb21tdW5pY2F0aW5nIHN1Y2Nlc3NmdWxseSEiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IkdldCBJbmRpY2F0b3IiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8ZXhwcmVzc2lvbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iaW5mbyIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgPC9kZWY+CiAgIDwvc3RhdGVtZW50cz4KPC9saWJyYXJ5Pg=="
}
]
},
"request": {
"method": "PUT",
"url": "Library/HelloWorld"
}
}
]
}

View File

@ -1006,7 +1006,7 @@
<ucum_version>1.0.8</ucum_version>
<!-- CQL Support -->
<clinical-reasoning.version>3.2.0</clinical-reasoning.version>
<clinical-reasoning.version>3.3.1</clinical-reasoning.version>
<!-- Site properties -->
<fontawesomeVersion>5.4.1</fontawesomeVersion>