Skip to content

Commit

Permalink
Merge pull request #18 from medizininformatik-initiative/enhancement/…
Browse files Browse the repository at this point in the history
…17-remove-remaining-codex-mentions

Revise Process Naming
  • Loading branch information
DiCanio authored Jul 26, 2022
2 parents 05bf8c0 + 63b4e9a commit 71150f4
Show file tree
Hide file tree
Showing 28 changed files with 107 additions and 107 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@
"resourceType": "Task",
"meta": {
"profile": [
"http://medizininformatik-initiative.de/fhir/StructureDefinition/codex-task-request-simple-feasibility"
"http://medizininformatik-initiative.de/fhir/StructureDefinition/feasibility-task-request"
]
},
"instantiatesUri": "http://medizininformatik-initiative.de/bpe/Process/requestSimpleFeasibility/0.2.0",
"instantiatesUri": "http://medizininformatik-initiative.de/bpe/Process/feasibilityRequest/0.2.0",
"status": "requested",
"intent": "order",
"authoredOn": "2021",
"authoredOn": "2022",
"requester": {
"type": "Organization",
"identifier": {
Expand Down Expand Up @@ -43,7 +43,7 @@
}
]
},
"valueString": "requestSimpleFeasibilityMessage"
"valueString": "feasibilityRequestMessage"
},
{
"type": {
Expand Down Expand Up @@ -88,7 +88,7 @@
}
],
"profile": [
"http://medizininformatik-initiative.de/fhir/StructureDefinition/codex-measure"
"http://medizininformatik-initiative.de/fhir/StructureDefinition/feasibility-measure"
]
},
"url": "https://zars/Measure/7a142223-616f-41a1-97da-2ae726031b71",
Expand Down Expand Up @@ -142,7 +142,7 @@
}
],
"profile": [
"http://medizininformatik-initiative.de/fhir/StructureDefinition/codex-library"
"http://medizininformatik-initiative.de/fhir/StructureDefinition/feasibility-library"
]
},
"url": "urn:uuid:30561ba6-106f-4d52-bb8d-e49e20a40d40",
Expand Down
26 changes: 13 additions & 13 deletions feasibility-dsf-process/README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# NUM CODEX Feasibility Process
# Feasibility DSF Process

A distributed feasibility query runs based on the feasibility process. A feasibility query contains multiple criteria and returns one population count per organization. An organization (usually the Zentrale Antrags- und Registerstelle (ZARS)) requests a feasibility query to start off the process. Once started multiple organizations (usually Datenintegrationszentren (DIZ)) execute this query and report results back.

## High-Level Overview

![fig-1](./docs/codex-feasibility-process-01.png)
![fig-1](./docs/feasibility-process-01.png)

As you can see in the figure above, the feasibility query process starts with a `request` message (1) that the ZARS or any other initiating organization sends to itself. By sending this message to the ZARS itself, the Business Process Engine (BPE) of the ZARS can be used to distribute the `execute` messages (2) to all DIZ'es in question. After receiving the `execute` messages, each DIZ will calculate the result and answer with a `result` message (3). The ZARS will accumulate the results and provide the requester with live updates.

Expand All @@ -14,7 +14,7 @@ As you can see in the figure above, the feasibility query process starts with a

Messages, queries and results are represented by FHIR resources. The following three figures show the entire FHIR resource flow. In contrast to the figure above, only one DIZ is represented, but both, the ZARS and the DIZ are divided into its individual components. On the ZARS side the components are the FHIR communication server and the BPE, were the DIZ contains an additional Blaze FHIR server.

![fig-1](./docs/codex-feasibility-process-02.png)
![fig-1](./docs/feasibility-process-02.png)

1. Like in the high-level overview, the process starts with the `request` message. Beside the FHIR [Task][1] resource for the message, two other FHIR resources will be sent to the ZARS FHIR server. The first one is the [Measure][2] resource specifying the population criteria that are defined in the second resource, the [Library][3]. All three resources are put into a transaction [Bundle][4] in order to create all together in one transaction.

Expand All @@ -28,7 +28,7 @@ Messages, queries and results are represented by FHIR resources. The following t

This describes the execute process in case `CQL` is specified as an evaluation strategy.

![fig-1](./docs/codex-feasibility-process-03.png)
![fig-1](./docs/feasibility-process-03.png)

5. In each DIZ, the `execute` process starts by fetching the Measure and Library resource created at the ZARS FHIR communication server. The resources have to be fetched by the BPE because only Task resources are sent actively between organizations and message payload is only fetched in case a process really needs it. FHIR search is used in order to fetch both resources in one HTTP request by searching for the Measure resource and including the referenced Library resource.

Expand All @@ -44,7 +44,7 @@ This describes the execute process in case `CQL` is specified as an evaluation s

This describes the execute process in case `Structured Query` is specified as an evaluation strategy.

![fig-1](./docs/codex-feasibility-process-04.png)
![fig-1](./docs/feasibility-process-04.png)

5. In each DIZ, the `execute` process starts by fetching the Measure and Library resource created at the ZARS FHIR communication server. The resources have to be fetched by the BPE because only Task resources are sent actively between organizations and message payload is only fetched in case a process really needs it. FHIR search is used in order to fetch both resources in one HTTP request by searching for the Measure resource and including the referenced Library resource.

Expand All @@ -62,7 +62,7 @@ This describes the execute process in case `Structured Query` is specified as an

### Retrieve Results

![fig-1](docs/codex-feasibility-process-05.png)
![fig-1](docs/feasibility-process-05.png)

10. After arrival, the ZARS FHIR communication server will send the `result` Task resource to the ZARS BPE via websocket subscription. The incoming `result` message will use its correlation ID to match the original `request` process to continue.

Expand All @@ -74,11 +74,11 @@ This describes the execute process in case `Structured Query` is specified as an

This process supports the following query types within the transferred Library resource:

| Type | Description | Mime Type |
|-------------------|------------------------------------------------------------------------------------------------|----------------------------|
| CQL | Standardized query format. See https://cql.hl7.org/ for more information. | `text/cql` |
| Structured Query | Internal query representation within the CODEX project based on the JSON format. | `application/sq+json` |
| FHIR Search Query | Standardized FHIR search query. See https://www.hl7.org/fhir/search.html for more information. | `application/x-fhir-query` |
| Type | Description | Mime Type |
|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------|
| CQL | Standardized query format. See https://cql.hl7.org/ for more information. | `text/cql` |
| Structured Query | Internal query representation as defined in [this project](https://github.com/medizininformatik-initiative/feasibility-structured-query) in JSON format. | `application/sq+json` |
| FHIR Search Query | Standardized FHIR search query. See https://www.hl7.org/fhir/search.html for more information. | `application/x-fhir-query` |

**Note**: _Although a FHIR search query can be transferred to the process no result will be calculated!_

Expand All @@ -88,13 +88,13 @@ The process ensures obfuscation of a DIZ's real evaluation numbers by rounding t

## Request Process as BPMN Model

![fig-1](./docs/requestSimpleFeasibility.png)
![fig-1](./docs/feasibilityRequest.png)

In the [Business Process Model and Notation][7] (BPMN) model of the `request` process, the start message is the `request` message. After selecting the request targets (the DIZ'es), the `execute` messages are send in the next step. After that a subprocess is started for each target, which will wait for the `result` message to arrive. After the result message of each DIZ is stored immediately, the results are aggregated. After Subprocess the task resource is prepared for further evaluation.

## Execute Process as BPMN Model

![fig-1](./docs/executeSimpleFeasibility.png)
![fig-1](./docs/feasibilityExecute.png)

The BPMN model of the `execute` process is straightforward and already explained in detail above.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public String getVersion() {

@Override
public Stream<String> getBpmnFiles() {
return Stream.of("bpe/requestSimpleFeasibility.bpmn", "bpe/executeSimpleFeasibility.bpmn");
return Stream.of("bpe/feasibilityRequest.bpmn", "bpe/feasibilityExecute.bpmn");
}

@Override
Expand All @@ -50,8 +50,8 @@ public Stream<Class<?>> getSpringConfigClasses() {
@Override
public ResourceProvider getResourceProvider(FhirContext fhirContext, ClassLoader classLoader,
PropertyResolver propertyResolver) {
var aExe = ActivityDefinitionResource.file("fhir/ActivityDefinition/executeSimpleFeasibility.xml");
var aReq = ActivityDefinitionResource.file("fhir/ActivityDefinition/requestSimpleFeasibility.xml");
var aExe = ActivityDefinitionResource.file("fhir/ActivityDefinition/feasibilityExecute.xml");
var aReq = ActivityDefinitionResource.file("fhir/ActivityDefinition/feasibilityRequest.xml");

var cF = CodeSystemResource.file("fhir/CodeSystem/feasibility.xml");

Expand All @@ -66,18 +66,18 @@ public ResourceProvider getResourceProvider(FhirContext fhirContext, ClassLoader
.file("fhir/StructureDefinition/feasibility-library.xml");

var sTExe = StructureDefinitionResource
.file("fhir/StructureDefinition/feasibility-task-execute-simple-feasibility.xml");
.file("fhir/StructureDefinition/feasibility-task-execute.xml");
var sTReq = StructureDefinitionResource
.file("fhir/StructureDefinition/feasibility-task-request-simple-feasibility.xml");
.file("fhir/StructureDefinition/feasibility-task-request.xml");
var sTResS = StructureDefinitionResource
.file("fhir/StructureDefinition/feasibility-task-single-dic-result-simple-feasibility.xml");
.file("fhir/StructureDefinition/feasibility-task-single-dic-result.xml");

var vF = ValueSetResource.file("fhir/ValueSet/feasibility.xml");

Map<String, List<AbstractResource>> resourcesByProcessKeyAndVersion = Map.of(
"medizininformatik-initiativede_executeSimpleFeasibility/" + VERSION,
"medizininformatik-initiativede_feasibilityExecute/" + VERSION,
Arrays.asList(aExe, sTExe, sTResS, vF, cF, sMeasure, sMeasureReport, sLibrary),
"medizininformatik-initiativede_requestSimpleFeasibility/" + VERSION,
"medizininformatik-initiativede_feasibilityRequest/" + VERSION,
Arrays.asList(aReq, sTReq, sExtDic, vF, cF, sMeasure, sMeasureReport, sLibrary));

return ResourceProvider.read(VERSION,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ public FeasibilityCountObfuscator feasibilityCountObfuscator() {
}

//
// process requestSimpleFeasibility implementations
// process requestFeasibility implementations
//

@Bean
Expand Down Expand Up @@ -109,7 +109,7 @@ public AggregateMeasureReports aggregateMeasureReports() {
}

//
// process executeSimpleFeasibility implementations
// process executeFeasibility implementations
//

@Bean
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_0drkcb5" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="5.0.0">
<bpmn:process id="medizininformatik-initiativede_executeSimpleFeasibility" isExecutable="true" camunda:versionTag="0.2.0">
<bpmn:process id="medizininformatik-initiativede_feasibilityExecute" isExecutable="true" camunda:versionTag="0.2.0">
<bpmn:startEvent id="StartEvent" name="start">
<bpmn:outgoing>SequenceFlow_14cn0vs</bpmn:outgoing>
<bpmn:messageEventDefinition id="MessageEventDefinition_0sjtzj6" messageRef="Message_1yz2a31" />
Expand All @@ -13,9 +13,9 @@
<bpmn:endEvent id="EndEvent" name="send result to requester">
<bpmn:extensionElements>
<camunda:inputOutput>
<camunda:inputParameter name="messageName">resultSingleDicSimpleFeasibilityMessage</camunda:inputParameter>
<camunda:inputParameter name="instantiatesUri">http://medizininformatik-initiative.de/bpe/Process/requestSimpleFeasibility/0.2.0</camunda:inputParameter>
<camunda:inputParameter name="profile">http://medizininformatik-initiative.de/fhir/StructureDefinition/codex-task-single-dic-result-simple-feasibility|0.2.0</camunda:inputParameter>
<camunda:inputParameter name="messageName">feasibilitySingleDicResultMessage</camunda:inputParameter>
<camunda:inputParameter name="instantiatesUri">http://medizininformatik-initiative.de/bpe/Process/feasibilityRequest/0.2.0</camunda:inputParameter>
<camunda:inputParameter name="profile">http://medizininformatik-initiative.de/fhir/StructureDefinition/feasibility-task-single-dic-result|0.2.0</camunda:inputParameter>
</camunda:inputOutput>
</bpmn:extensionElements>
<bpmn:incoming>SequenceFlow_0ascyjc</bpmn:incoming>
Expand Down Expand Up @@ -82,10 +82,10 @@
</bpmn:sequenceFlow>
<bpmn:sequenceFlow id="Flow_10dmu4o" sourceRef="Activity_1h6wvlq" targetRef="storeMeasureReport" />
</bpmn:process>
<bpmn:message id="Message_1yz2a31" name="executeSimpleFeasibilityMessage" />
<bpmn:message id="Message_1dr71re" name="resultSingleDicSimpleFeasibilityMessage" />
<bpmn:message id="Message_1yz2a31" name="feasibilityExecuteMessage" />
<bpmn:message id="Message_1dr71re" name="feasibilitySingleDicResultMessage" />
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="medizininformatik-initiativede_executeSimpleFeasibility">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="medizininformatik-initiativede_feasibilityExecute">
<bpmndi:BPMNEdge id="Flow_10dmu4o_di" bpmnElement="Flow_10dmu4o">
<di:waypoint x="1050" y="160" />
<di:waypoint x="1050" y="250" />
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_0inb4ax" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="5.0.0">
<bpmn:process id="medizininformatik-initiativede_requestSimpleFeasibility" name="storeResult" isExecutable="true" camunda:versionTag="0.2.0">
<bpmn:process id="medizininformatik-initiativede_feasibilityRequest" name="storeResult" isExecutable="true" camunda:versionTag="0.2.0">
<bpmn:startEvent id="StartEvent" name="start">
<bpmn:outgoing>SequenceFlow_11k77gx</bpmn:outgoing>
<bpmn:messageEventDefinition id="MessageEventDefinition_10c2suu" messageRef="Message_1pq9qxp" />
Expand All @@ -12,9 +12,9 @@
<bpmn:sendTask id="sendRequestToDics" name="send request to dics" camunda:class="de.medizininformatik_initiative.feasibility_dsf_process.message.SendDicRequest">
<bpmn:extensionElements>
<camunda:inputOutput>
<camunda:inputParameter name="instantiatesUri">http://medizininformatik-initiative.de/bpe/Process/executeSimpleFeasibility/0.2.0</camunda:inputParameter>
<camunda:inputParameter name="messageName">executeSimpleFeasibilityMessage</camunda:inputParameter>
<camunda:inputParameter name="profile">http://medizininformatik-initiative.de/fhir/StructureDefinition/codex-task-execute-simple-feasibility|0.2.0</camunda:inputParameter>
<camunda:inputParameter name="instantiatesUri">http://medizininformatik-initiative.de/bpe/Process/feasibilityExecute/0.2.0</camunda:inputParameter>
<camunda:inputParameter name="messageName">feasibilityExecuteMessage</camunda:inputParameter>
<camunda:inputParameter name="profile">http://medizininformatik-initiative.de/fhir/StructureDefinition/feasibility-task-execute|0.2.0</camunda:inputParameter>
</camunda:inputOutput>
</bpmn:extensionElements>
<bpmn:incoming>SequenceFlow_0b5s4ef</bpmn:incoming>
Expand Down Expand Up @@ -80,21 +80,21 @@
<bpmn:outgoing>Flow_1f790pw</bpmn:outgoing>
</bpmn:serviceTask>
</bpmn:process>
<bpmn:message id="Message_1pq9qxp" name="requestSimpleFeasibilityMessage" />
<bpmn:message id="Message_07ayhv1" name="resultSimpleFeasibilityMessage" />
<bpmn:message id="Message_1pq9qxp" name="feasibilityRequestMessage" />
<bpmn:message id="Message_07ayhv1" name="feasibilityResultMessage" />
<bpmn:error id="Error_0dl03kn" />
<bpmn:error id="Error_07exqe7" />
<bpmn:error id="Error_1jhmarr" />
<bpmn:message id="Message_0qfng3q" name="receiveMultiMedicCohortSizeResultMessage" />
<bpmn:message id="Message_0srg3vv" name="resultMultiMedicSimpleFeasibilityMessage" />
<bpmn:message id="Message_0nmxozg" name="errorSimpleFeasibilityMessage" />
<bpmn:message id="Message_1y0yxv0" name="resultMultiMedicSimpleFeasibilityMessage" />
<bpmn:message id="Message_0v1bo0o" name="errorSimpleFeasibilityMessage" />
<bpmn:message id="Message_10vqhu0" name="errorMultiMedicSimpleFeasibilityMessage" />
<bpmn:message id="Message_1vrxfsk" name="resultMultiMedicSimpleFeasibilityMessage" />
<bpmn:message id="Message_18ld88c" name="resultSingleDicSimpleFeasibilityMessage" />
<bpmn:message id="Message_0qfng3q" name="feasibilityMultiMedicCohortSizeResultMessage" />
<bpmn:message id="Message_0srg3vv" name="feasibilityMultiMedicResultMessage" />
<bpmn:message id="Message_0nmxozg" name="feasibilityErrorMessage" />
<bpmn:message id="Message_1y0yxv0" name="feasibilityMultiMedicResultMessage" />
<bpmn:message id="Message_0v1bo0o" name="feasibilityErrorMessage" />
<bpmn:message id="Message_10vqhu0" name="feasibilityMultiMedicErrorMessage" />
<bpmn:message id="Message_1vrxfsk" name="feasibilityMultiMedicResultMessage" />
<bpmn:message id="Message_18ld88c" name="feasibilitySingleDicResultMessage" />
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="medizininformatik-initiativede_requestSimpleFeasibility">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="medizininformatik-initiativede_feasibilityRequest">
<bpmndi:BPMNEdge id="Flow_1f790pw_di" bpmnElement="Flow_1f790pw">
<di:waypoint x="1560" y="155" />
<di:waypoint x="1612" y="155" />
Expand Down
Loading

0 comments on commit 71150f4

Please sign in to comment.