Skip to content
This repository was archived by the owner on Oct 6, 2025. It is now read-only.

Commit 9e561fd

Browse files
committed
Merge branch 'release/0.3.0' into main
Conflicts: codex-process-data-transfer/pom.xml codex-processes-ap1-test-data-generator/pom.xml pom.xml
2 parents d1d5a65 + 77f3a95 commit 9e561fd

65 files changed

Lines changed: 2065 additions & 835 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

codex-process-data-transfer/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<parent>
99
<groupId>de.netzwerk-universitaetsmedizin.codex</groupId>
1010
<artifactId>codex-processes-ap1</artifactId>
11-
<version>0.2.2</version>
11+
<version>0.3.0</version>
1212
</parent>
1313

1414
<properties>

codex-process-data-transfer/src/main/java/de/netzwerk_universitaetsmedizin/codex/processes/data_transfer/ConstantsDataTransfer.java

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,47 +4,51 @@
44

55
public interface ConstantsDataTransfer
66
{
7-
String BPMN_EXECUTION_VARIABLE_PSEUDONYMS_LIST = "pseudonyms";
7+
String BPMN_EXECUTION_VARIABLE_PATIENT_REFERENCE_LIST = "patientReferenceList";
8+
String BPMN_EXECUTION_VARIABLE_PATIENT_REFERENCE = "patientReference";
89
String BPMN_EXECUTION_VARIABLE_PSEUDONYM = "pseudonym";
910
String BPMN_EXECUTION_VARIABLE_STOP_TIMER = "stopTimer";
1011
String BPMN_EXECUTION_VARIABLE_LAST_EXPORT_TO = "lastExportTo";
1112
String BPMN_EXECUTION_VARIABLE_EXPORT_FROM = "exportFrom";
1213
String BPMN_EXECUTION_VARIABLE_EXPORT_FROM_PRECISION = "exportFromPrecision";
1314
String BPMN_EXECUTION_VARIABLE_EXPORT_TO = "exportTo";
1415
String BPMN_EXECUTION_VARIABLE_BUNDLE = "bundle";
16+
String BPMN_EXECUTION_VARIABLE_IDAT_MERGE_GRANTED = "idatMergeGranted";
1517
String BPMN_EXECUTION_VARIABLE_USAGE_AND_TRANSFER_GRANTED = "usageAndTransferGranted";
1618
String BPMN_EXECUTION_VARIABLE_BINARY_URL = "binaryUrl";
1719

18-
String NAMING_SYSTEM_NUM_CODEX_DIC_PSEUDONYM = "http://netzwerk-universitaetsmedizin.de/fhir/NamingSystem/dic-pseudonym";
19-
String NAMING_SYSTEM_NUM_CODEX_CRR_PSEUDONYM = "http://netzwerk-universitaetsmedizin.de/fhir/NamingSystem/crr-pseudonym";
20+
String NAMING_SYSTEM_NUM_CODEX_DIC_PSEUDONYM = "http://www.netzwerk-universitaetsmedizin.de/sid/dic-pseudonym";
21+
String NAMING_SYSTEM_NUM_CODEX_CRR_PSEUDONYM = "http://www.netzwerk-universitaetsmedizin.de/sid/crr-pseudonym";
22+
String NAMING_SYSTEM_NUM_CODEX_BLOOM_FILTER = "http://www.netzwerk-universitaetsmedizin.de/sid/bloom-filter";
2023

21-
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER = "http://netzwerk-universitaetsmedizin.de/fhir/CodeSystem/data-transfer";
24+
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER = "http://www.netzwerk-universitaetsmedizin.de/fhir/CodeSystem/data-transfer";
25+
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_PATIENT = "patient";
2226
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_PSEUDONYM = "pseudonym";
2327
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_EXPORT_FROM = "export-from";
2428
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_EXPORT_TO = "export-to";
2529
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_DATA_REFERENCE = "data-reference";
2630

27-
String PROFILE_NUM_CODEX_TASK_START_DATA_TRIGGER = "http://netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-start-data-trigger";
28-
String PROFILE_NUM_CODEX_TASK_STOP_DATA_TRIGGER = "http://netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-stop-data-trigger";
31+
String PROFILE_NUM_CODEX_TASK_START_DATA_TRIGGER = "http://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-start-data-trigger";
32+
String PROFILE_NUM_CODEX_TASK_STOP_DATA_TRIGGER = "http://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-stop-data-trigger";
2933
String PROFILE_NUM_CODEX_TASK_DATA_TRIGGER_PROCESS_URI = "http://highmed.org/bpe/Process/dataTrigger/";
3034
String PROFILE_NUM_CODEX_TASK_DATA_TRIGGER_PROCESS_URI_AND_LATEST_VERSION = PROFILE_NUM_CODEX_TASK_DATA_TRIGGER_PROCESS_URI
3135
+ VERSION;
3236
String PROFILE_NUM_CODEX_TASK_START_DATA_TRIGGER_MESSAGE_NAME = "startDataTrigger";
3337
String PROFILE_NUM_CODEX_TASK_STOP_DATA_TRIGGER_MESSAGE_NAME = "stopDataTrigger";
3438

35-
String PROFILE_NUM_CODEX_TASK_START_DATA_SEND = "http://netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-start-data-send";
39+
String PROFILE_NUM_CODEX_TASK_START_DATA_SEND = "http://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-start-data-send";
3640
String PROFILE_NUM_CODEX_TASK_DATA_SEND_PROCESS_URI = "http://highmed.org/bpe/Process/dataSend/";
3741
String PROFILE_NUM_CODEX_TASK_DATA_SEND_PROCESS_URI_AND_LATEST_VERSION = PROFILE_NUM_CODEX_TASK_DATA_SEND_PROCESS_URI
3842
+ VERSION;
3943
String PROFILE_NUM_CODEX_TASK_START_DATA_SEND_MESSAGE_NAME = "startDataSend";
4044

41-
String PROFILE_NUM_CODEX_TASK_START_DATA_TRANSLATE = "http://netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-start-data-translate";
45+
String PROFILE_NUM_CODEX_TASK_START_DATA_TRANSLATE = "http://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-start-data-translate";
4246
String PROFILE_NUM_CODEX_TASK_DATA_TRANSLATE_PROCESS_URI = "http://highmed.org/bpe/Process/dataTranslate/";
4347
String PROFILE_NUM_CODEX_TASK_DATA_TRANSLATE_PROCESS_URI_AND_LATEST_VERSION = PROFILE_NUM_CODEX_TASK_DATA_TRANSLATE_PROCESS_URI
4448
+ VERSION;
4549
String PROFILE_NUM_CODEX_TASK_START_DATA_TRANSLATE_MESSAGE_NAME = "startDataTranslate";
4650

47-
String PROFILE_NUM_CODEX_TASK_START_DATA_RECEIVE = "http://netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-start-data-receive";
51+
String PROFILE_NUM_CODEX_TASK_START_DATA_RECEIVE = "http://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-start-data-receive";
4852
String PROFILE_NUM_CODEX_TASK_DATA_RECEIVE_PROCESS_URI = "http://highmed.org/bpe/Process/dataReceive/";
4953
String PROFILE_NUM_CODEX_TASK_DATA_RECEIVE_PROCESS_URI_AND_LATEST_VERSION = PROFILE_NUM_CODEX_TASK_DATA_RECEIVE_PROCESS_URI
5054
+ VERSION;

codex-process-data-transfer/src/main/java/de/netzwerk_universitaetsmedizin/codex/processes/data_transfer/DataTransferProcessPluginDefinition.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
public class DataTransferProcessPluginDefinition implements ProcessPluginDefinition
2222
{
23-
public static final String VERSION = "0.2.2";
23+
public static final String VERSION = "0.3.0";
2424

2525
@Override
2626
public String getName()
@@ -58,6 +58,7 @@ public ResourceProvider getResourceProvider(FhirContext fhirContext, ClassLoader
5858

5959
var nD = NamingSystemResource.file("fhir/NamingSystem/num-codex-dic-pseudonym-identifier.xml");
6060
var nC = NamingSystemResource.file("fhir/NamingSystem/num-codex-crr-pseudonym-identifier.xml");
61+
var nB = NamingSystemResource.file("fhir/NamingSystem/num-codex-bloom-filter-identifier.xml");
6162

6263
var sTstaDtri = StructureDefinitionResource
6364
.file("fhir/StructureDefinition/num-codex-task-start-data-trigger.xml");
@@ -73,7 +74,7 @@ public ResourceProvider getResourceProvider(FhirContext fhirContext, ClassLoader
7374

7475
Map<String, List<AbstractResource>> resourcesByProcessKeyAndVersion = Map.of( //
7576
"dataTrigger/" + VERSION, Arrays.asList(aTri, cD, nD, sTstaDtri, sTstoDtri, vD), //
76-
"dataSend/" + VERSION, Arrays.asList(aSen, cD, nD, sTstaDsen, vD), //
77+
"dataSend/" + VERSION, Arrays.asList(aSen, cD, nD, nB, sTstaDsen, vD), //
7778
"dataTranslate/" + VERSION, Arrays.asList(aTra, cD, nD, nC, sTstaDtra, vD), //
7879
"dataReceive/" + VERSION, Arrays.asList(aRec, cD, nC, sTstaDrec, vD));
7980

codex-process-data-transfer/src/main/java/de/netzwerk_universitaetsmedizin/codex/processes/data_transfer/client/ApacheRestfulClientFactoryWithTlsConfig.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public ApacheRestfulClientFactoryWithTlsConfig(FhirContext fhirContext, KeyStore
6363
@Override
6464
protected synchronized ApacheHttpClient getHttpClient(String theServerBase)
6565
{
66-
logger.info("Returning new ApacheHttpClient for ServerNase {}", theServerBase);
66+
logger.info("Returning new ApacheHttpClient for ServerBase {}", theServerBase);
6767

6868
return new ApacheHttpClient(getNativeHttpClient(), new StringBuilder(theServerBase), null, null, null, null);
6969
}
@@ -136,7 +136,7 @@ protected void resetHttpClient()
136136

137137
/**
138138
* Only allows to set an instance of type org.apache.http.client.HttpClient
139-
*
139+
*
140140
* @see ca.uhn.fhir.rest.client.api.IRestfulClientFactory#setHttpClient(Object)
141141
*/
142142
@Override

codex-process-data-transfer/src/main/java/de/netzwerk_universitaetsmedizin/codex/processes/data_transfer/client/ConsentClient.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,7 @@
44

55
public interface ConsentClient
66
{
7-
List<String> getConsentOidsFor(String dicSourceAndPseudonym);
7+
List<String> getConsentOidsForIdentifierReference(String dicSourceAndPseudonym);
8+
9+
List<String> getConsentOidsForAbsoluteReference(String reference);
810
}

codex-process-data-transfer/src/main/java/de/netzwerk_universitaetsmedizin/codex/processes/data_transfer/client/ConsentClientFactory.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.client;
22

3-
import java.util.Arrays;
43
import java.util.List;
4+
import java.util.stream.Collectors;
5+
import java.util.stream.IntStream;
56

67
import org.slf4j.Logger;
78
import org.slf4j.LoggerFactory;
@@ -10,18 +11,26 @@ public class ConsentClientFactory
1011
{
1112
private static final Logger logger = LoggerFactory.getLogger(ConsentClientFactory.class);
1213

13-
private static final String BASE_OID = "2.16.840.1.113883.3.1937.777";
14+
private static final String BASE_OID = "2.16.840.1.113883.3.1937.777.24.5.3";
15+
private static final List<String> ALL_POLICIES = IntStream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 32, 33, 34, 35, 36)
16+
.mapToObj(i -> BASE_OID + "." + i).collect(Collectors.toList());
1417

1518
public ConsentClient getConsentClient()
1619
{
1720
return new ConsentClient()
1821
{
1922
@Override
20-
public List<String> getConsentOidsFor(String dicSourceAndPseudonym)
23+
public List<String> getConsentOidsForIdentifierReference(String dicSourceAndPseudonym)
2124
{
2225
logger.warn("Returning 'all allowed' OIDs for DIC pseudonym {}", dicSourceAndPseudonym);
26+
return ALL_POLICIES;
27+
}
2328

24-
return Arrays.asList(BASE_OID + ".24.5.1.1", BASE_OID + ".24.5.1.34", BASE_OID + ".24.5.1.37");
29+
@Override
30+
public List<String> getConsentOidsForAbsoluteReference(String reference)
31+
{
32+
logger.warn("Returning 'all allowed' OIDs for absolute patient reference {}", reference);
33+
return ALL_POLICIES;
2534
}
2635
};
2736
}

codex-process-data-transfer/src/main/java/de/netzwerk_universitaetsmedizin/codex/processes/data_transfer/client/FhirClient.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.client;
22

33
import java.util.Date;
4+
import java.util.Optional;
45
import java.util.stream.Stream;
56

67
import org.hl7.fhir.r4.model.Bundle;
78
import org.hl7.fhir.r4.model.DomainResource;
9+
import org.hl7.fhir.r4.model.Patient;
810

911
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.domain.DateWithPrecision;
10-
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.variables.PseudonymList;
12+
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.variables.PatientReferenceList;
1113

1214
public interface FhirClient
1315
{
@@ -18,7 +20,7 @@ public interface FhirClient
1820
* not <code>null</code>
1921
* @return
2022
*/
21-
PseudonymList getPseudonymsWithNewData(DateWithPrecision exportFrom, Date exportTo);
23+
PatientReferenceList getPatientReferencesWithNewData(DateWithPrecision exportFrom, Date exportTo);
2224

2325
/**
2426
* @param pseudonym
@@ -32,4 +34,19 @@ public interface FhirClient
3234
Stream<DomainResource> getNewData(String pseudonym, DateWithPrecision exportFrom, Date exportTo);
3335

3436
void storeBundle(Bundle bundle);
37+
38+
/**
39+
* @param reference
40+
* Absolute reference, not <code>null</code>
41+
* @return
42+
*/
43+
Optional<Patient> getPatient(String reference);
44+
45+
/**
46+
* @param patient
47+
* containing an identifier with system
48+
* {@link de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer#NAMING_SYSTEM_NUM_CODEX_DIC_PSEUDONYM}
49+
* not <code>null</code>
50+
*/
51+
void updatePatient(Patient patient);
3552
}

codex-process-data-transfer/src/main/java/de/netzwerk_universitaetsmedizin/codex/processes/data_transfer/client/FhirClientFactory.java

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
11
package de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.client;
22

3+
import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer.NAMING_SYSTEM_NUM_CODEX_DIC_PSEUDONYM;
4+
35
import java.nio.file.Path;
4-
import java.util.Arrays;
56
import java.util.Date;
7+
import java.util.List;
8+
import java.util.Optional;
69
import java.util.UUID;
710
import java.util.stream.Stream;
811

912
import org.hl7.fhir.r4.model.Bundle;
1013
import org.hl7.fhir.r4.model.Condition;
1114
import org.hl7.fhir.r4.model.DomainResource;
1215
import org.hl7.fhir.r4.model.IdType;
16+
import org.hl7.fhir.r4.model.Identifier;
1317
import org.hl7.fhir.r4.model.Observation;
1418
import org.hl7.fhir.r4.model.Patient;
1519
import org.hl7.fhir.r4.model.Reference;
@@ -19,7 +23,8 @@
1923
import ca.uhn.fhir.context.FhirContext;
2024
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer;
2125
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.domain.DateWithPrecision;
22-
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.variables.PseudonymList;
26+
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.variables.PatientReference;
27+
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.variables.PatientReferenceList;
2328

2429
public class FhirClientFactory
2530
{
@@ -66,10 +71,16 @@ public void storeBundle(Bundle bundle)
6671
}
6772

6873
@Override
69-
public PseudonymList getPseudonymsWithNewData(DateWithPrecision exportFrom, Date exportTo)
74+
public PatientReferenceList getPatientReferencesWithNewData(DateWithPrecision exportFrom, Date exportTo)
7075
{
7176
logger.warn("Returning demo pseudonyms for {}", localIdentifierValue);
72-
return new PseudonymList(Arrays.asList("dic_foo/bar", "dic_foo/baz"));
77+
return new PatientReferenceList(List.of(
78+
PatientReference.from(new Identifier().setSystem(NAMING_SYSTEM_NUM_CODEX_DIC_PSEUDONYM)
79+
.setValue("dic_foo/bar")),
80+
PatientReference.from(new Identifier().setSystem(NAMING_SYSTEM_NUM_CODEX_DIC_PSEUDONYM)
81+
.setValue("dic_foo/baz")),
82+
PatientReference.from("http://dic-foo/fhir/Patient/3"),
83+
PatientReference.from("http://dic-foo/fhir/Patient/4")));
7384
}
7485

7586
@Override
@@ -78,8 +89,7 @@ public Stream<DomainResource> getNewData(String pseudonym, DateWithPrecision exp
7889
logger.warn("Returning demo resources for {}", pseudonym);
7990

8091
Patient p = fhirContext.newJsonParser().parseResource(Patient.class, patient);
81-
p.addIdentifier().setSystem(ConstantsDataTransfer.NAMING_SYSTEM_NUM_CODEX_DIC_PSEUDONYM)
82-
.setValue(pseudonym);
92+
p.addIdentifier().setSystem(NAMING_SYSTEM_NUM_CODEX_DIC_PSEUDONYM).setValue(pseudonym);
8393
p.setIdElement(new IdType("Patient", UUID.randomUUID().toString()));
8494

8595
Condition c = fhirContext.newJsonParser().parseResource(Condition.class, condition);
@@ -90,6 +100,22 @@ public Stream<DomainResource> getNewData(String pseudonym, DateWithPrecision exp
90100

91101
return Stream.of(p, c, o);
92102
}
103+
104+
@Override
105+
public Optional<Patient> getPatient(String reference)
106+
{
107+
Patient patient = fhirContext.newJsonParser().parseResource(Patient.class, FhirClientFactory.patient);
108+
patient.addIdentifier().setSystem(ConstantsDataTransfer.NAMING_SYSTEM_NUM_CODEX_BLOOM_FILTER).setValue(
109+
"J75gYl+RiKSsxeu33tixBEEtFGCZwIEsWIKgvESaluvpSGBte/SBNZilz+sLSZdHSDKTL2J2d1yZsakqjtV5U2SMMJZ5IF3gEk1MT3sCRkxXEo1aJWKpnqndUTR+fvtSeMFj0y/O5yqrLV9zU79CNiTfZN5t1/6XGxZUXq2DovfCRrrpRxWjFwjKIDo0OkRANf7Mqp+Fsu0Un53JF57p/p1RLpWcJkC3xO+UslGbDo3mjgczdvxz0aLmWNA7/NIhk+Q50gxCX3B4QrntPfLLlBkrmIpsKRcLFVuYZik7pYZ9prd0qCLQ9tc8qiw1ry5kMfIvLnIS/FV36w==");
110+
patient.setIdElement(new IdType("Patient", UUID.randomUUID().toString()));
111+
return Optional.of(patient);
112+
}
113+
114+
@Override
115+
public void updatePatient(Patient patient)
116+
{
117+
// Nothing to do in stub client
118+
}
93119
};
94120
}
95121
}

0 commit comments

Comments
 (0)