Skip to content

Commit

Permalink
Merge branch 'release/0.3.0' into main
Browse files Browse the repository at this point in the history
Conflicts:
	codex-process-data-transfer/pom.xml
	codex-processes-ap1-test-data-generator/pom.xml
	pom.xml
  • Loading branch information
hhund committed Jun 2, 2021
2 parents d1d5a65 + 77f3a95 commit 9e561fd
Show file tree
Hide file tree
Showing 65 changed files with 2,065 additions and 835 deletions.
2 changes: 1 addition & 1 deletion codex-process-data-transfer/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<parent>
<groupId>de.netzwerk-universitaetsmedizin.codex</groupId>
<artifactId>codex-processes-ap1</artifactId>
<version>0.2.2</version>
<version>0.3.0</version>
</parent>

<properties>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,47 +4,51 @@

public interface ConstantsDataTransfer
{
String BPMN_EXECUTION_VARIABLE_PSEUDONYMS_LIST = "pseudonyms";
String BPMN_EXECUTION_VARIABLE_PATIENT_REFERENCE_LIST = "patientReferenceList";
String BPMN_EXECUTION_VARIABLE_PATIENT_REFERENCE = "patientReference";
String BPMN_EXECUTION_VARIABLE_PSEUDONYM = "pseudonym";
String BPMN_EXECUTION_VARIABLE_STOP_TIMER = "stopTimer";
String BPMN_EXECUTION_VARIABLE_LAST_EXPORT_TO = "lastExportTo";
String BPMN_EXECUTION_VARIABLE_EXPORT_FROM = "exportFrom";
String BPMN_EXECUTION_VARIABLE_EXPORT_FROM_PRECISION = "exportFromPrecision";
String BPMN_EXECUTION_VARIABLE_EXPORT_TO = "exportTo";
String BPMN_EXECUTION_VARIABLE_BUNDLE = "bundle";
String BPMN_EXECUTION_VARIABLE_IDAT_MERGE_GRANTED = "idatMergeGranted";
String BPMN_EXECUTION_VARIABLE_USAGE_AND_TRANSFER_GRANTED = "usageAndTransferGranted";
String BPMN_EXECUTION_VARIABLE_BINARY_URL = "binaryUrl";

String NAMING_SYSTEM_NUM_CODEX_DIC_PSEUDONYM = "http://netzwerk-universitaetsmedizin.de/fhir/NamingSystem/dic-pseudonym";
String NAMING_SYSTEM_NUM_CODEX_CRR_PSEUDONYM = "http://netzwerk-universitaetsmedizin.de/fhir/NamingSystem/crr-pseudonym";
String NAMING_SYSTEM_NUM_CODEX_DIC_PSEUDONYM = "http://www.netzwerk-universitaetsmedizin.de/sid/dic-pseudonym";
String NAMING_SYSTEM_NUM_CODEX_CRR_PSEUDONYM = "http://www.netzwerk-universitaetsmedizin.de/sid/crr-pseudonym";
String NAMING_SYSTEM_NUM_CODEX_BLOOM_FILTER = "http://www.netzwerk-universitaetsmedizin.de/sid/bloom-filter";

String CODESYSTEM_NUM_CODEX_DATA_TRANSFER = "http://netzwerk-universitaetsmedizin.de/fhir/CodeSystem/data-transfer";
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER = "http://www.netzwerk-universitaetsmedizin.de/fhir/CodeSystem/data-transfer";
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_PATIENT = "patient";
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_PSEUDONYM = "pseudonym";
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_EXPORT_FROM = "export-from";
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_EXPORT_TO = "export-to";
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_DATA_REFERENCE = "data-reference";

String PROFILE_NUM_CODEX_TASK_START_DATA_TRIGGER = "http://netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-start-data-trigger";
String PROFILE_NUM_CODEX_TASK_STOP_DATA_TRIGGER = "http://netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-stop-data-trigger";
String PROFILE_NUM_CODEX_TASK_START_DATA_TRIGGER = "http://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-start-data-trigger";
String PROFILE_NUM_CODEX_TASK_STOP_DATA_TRIGGER = "http://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-stop-data-trigger";
String PROFILE_NUM_CODEX_TASK_DATA_TRIGGER_PROCESS_URI = "http://highmed.org/bpe/Process/dataTrigger/";
String PROFILE_NUM_CODEX_TASK_DATA_TRIGGER_PROCESS_URI_AND_LATEST_VERSION = PROFILE_NUM_CODEX_TASK_DATA_TRIGGER_PROCESS_URI
+ VERSION;
String PROFILE_NUM_CODEX_TASK_START_DATA_TRIGGER_MESSAGE_NAME = "startDataTrigger";
String PROFILE_NUM_CODEX_TASK_STOP_DATA_TRIGGER_MESSAGE_NAME = "stopDataTrigger";

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

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

String PROFILE_NUM_CODEX_TASK_START_DATA_RECEIVE = "http://netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-start-data-receive";
String PROFILE_NUM_CODEX_TASK_START_DATA_RECEIVE = "http://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/task-start-data-receive";
String PROFILE_NUM_CODEX_TASK_DATA_RECEIVE_PROCESS_URI = "http://highmed.org/bpe/Process/dataReceive/";
String PROFILE_NUM_CODEX_TASK_DATA_RECEIVE_PROCESS_URI_AND_LATEST_VERSION = PROFILE_NUM_CODEX_TASK_DATA_RECEIVE_PROCESS_URI
+ VERSION;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@

public class DataTransferProcessPluginDefinition implements ProcessPluginDefinition
{
public static final String VERSION = "0.2.2";
public static final String VERSION = "0.3.0";

@Override
public String getName()
Expand Down Expand Up @@ -58,6 +58,7 @@ public ResourceProvider getResourceProvider(FhirContext fhirContext, ClassLoader

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

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

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ public ApacheRestfulClientFactoryWithTlsConfig(FhirContext fhirContext, KeyStore
@Override
protected synchronized ApacheHttpClient getHttpClient(String theServerBase)
{
logger.info("Returning new ApacheHttpClient for ServerNase {}", theServerBase);
logger.info("Returning new ApacheHttpClient for ServerBase {}", theServerBase);

return new ApacheHttpClient(getNativeHttpClient(), new StringBuilder(theServerBase), null, null, null, null);
}
Expand Down Expand Up @@ -136,7 +136,7 @@ protected void resetHttpClient()

/**
* Only allows to set an instance of type org.apache.http.client.HttpClient
*
*
* @see ca.uhn.fhir.rest.client.api.IRestfulClientFactory#setHttpClient(Object)
*/
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,7 @@

public interface ConsentClient
{
List<String> getConsentOidsFor(String dicSourceAndPseudonym);
List<String> getConsentOidsForIdentifierReference(String dicSourceAndPseudonym);

List<String> getConsentOidsForAbsoluteReference(String reference);
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.client;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -10,18 +11,26 @@ public class ConsentClientFactory
{
private static final Logger logger = LoggerFactory.getLogger(ConsentClientFactory.class);

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

public ConsentClient getConsentClient()
{
return new ConsentClient()
{
@Override
public List<String> getConsentOidsFor(String dicSourceAndPseudonym)
public List<String> getConsentOidsForIdentifierReference(String dicSourceAndPseudonym)
{
logger.warn("Returning 'all allowed' OIDs for DIC pseudonym {}", dicSourceAndPseudonym);
return ALL_POLICIES;
}

return Arrays.asList(BASE_OID + ".24.5.1.1", BASE_OID + ".24.5.1.34", BASE_OID + ".24.5.1.37");
@Override
public List<String> getConsentOidsForAbsoluteReference(String reference)
{
logger.warn("Returning 'all allowed' OIDs for absolute patient reference {}", reference);
return ALL_POLICIES;
}
};
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.client;

import java.util.Date;
import java.util.Optional;
import java.util.stream.Stream;

import org.hl7.fhir.r4.model.Bundle;
import org.hl7.fhir.r4.model.DomainResource;
import org.hl7.fhir.r4.model.Patient;

import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.domain.DateWithPrecision;
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.variables.PseudonymList;
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.variables.PatientReferenceList;

public interface FhirClient
{
Expand All @@ -18,7 +20,7 @@ public interface FhirClient
* not <code>null</code>
* @return
*/
PseudonymList getPseudonymsWithNewData(DateWithPrecision exportFrom, Date exportTo);
PatientReferenceList getPatientReferencesWithNewData(DateWithPrecision exportFrom, Date exportTo);

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

void storeBundle(Bundle bundle);

/**
* @param reference
* Absolute reference, not <code>null</code>
* @return
*/
Optional<Patient> getPatient(String reference);

/**
* @param patient
* containing an identifier with system
* {@link de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer#NAMING_SYSTEM_NUM_CODEX_DIC_PSEUDONYM}
* not <code>null</code>
*/
void updatePatient(Patient patient);
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
package de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.client;

import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer.NAMING_SYSTEM_NUM_CODEX_DIC_PSEUDONYM;

import java.nio.file.Path;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import java.util.stream.Stream;

import org.hl7.fhir.r4.model.Bundle;
import org.hl7.fhir.r4.model.Condition;
import org.hl7.fhir.r4.model.DomainResource;
import org.hl7.fhir.r4.model.IdType;
import org.hl7.fhir.r4.model.Identifier;
import org.hl7.fhir.r4.model.Observation;
import org.hl7.fhir.r4.model.Patient;
import org.hl7.fhir.r4.model.Reference;
Expand All @@ -19,7 +23,8 @@
import ca.uhn.fhir.context.FhirContext;
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer;
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.domain.DateWithPrecision;
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.variables.PseudonymList;
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.variables.PatientReference;
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.variables.PatientReferenceList;

public class FhirClientFactory
{
Expand Down Expand Up @@ -66,10 +71,16 @@ public void storeBundle(Bundle bundle)
}

@Override
public PseudonymList getPseudonymsWithNewData(DateWithPrecision exportFrom, Date exportTo)
public PatientReferenceList getPatientReferencesWithNewData(DateWithPrecision exportFrom, Date exportTo)
{
logger.warn("Returning demo pseudonyms for {}", localIdentifierValue);
return new PseudonymList(Arrays.asList("dic_foo/bar", "dic_foo/baz"));
return new PatientReferenceList(List.of(
PatientReference.from(new Identifier().setSystem(NAMING_SYSTEM_NUM_CODEX_DIC_PSEUDONYM)
.setValue("dic_foo/bar")),
PatientReference.from(new Identifier().setSystem(NAMING_SYSTEM_NUM_CODEX_DIC_PSEUDONYM)
.setValue("dic_foo/baz")),
PatientReference.from("http://dic-foo/fhir/Patient/3"),
PatientReference.from("http://dic-foo/fhir/Patient/4")));
}

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

Patient p = fhirContext.newJsonParser().parseResource(Patient.class, patient);
p.addIdentifier().setSystem(ConstantsDataTransfer.NAMING_SYSTEM_NUM_CODEX_DIC_PSEUDONYM)
.setValue(pseudonym);
p.addIdentifier().setSystem(NAMING_SYSTEM_NUM_CODEX_DIC_PSEUDONYM).setValue(pseudonym);
p.setIdElement(new IdType("Patient", UUID.randomUUID().toString()));

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

return Stream.of(p, c, o);
}

@Override
public Optional<Patient> getPatient(String reference)
{
Patient patient = fhirContext.newJsonParser().parseResource(Patient.class, FhirClientFactory.patient);
patient.addIdentifier().setSystem(ConstantsDataTransfer.NAMING_SYSTEM_NUM_CODEX_BLOOM_FILTER).setValue(
"J75gYl+RiKSsxeu33tixBEEtFGCZwIEsWIKgvESaluvpSGBte/SBNZilz+sLSZdHSDKTL2J2d1yZsakqjtV5U2SMMJZ5IF3gEk1MT3sCRkxXEo1aJWKpnqndUTR+fvtSeMFj0y/O5yqrLV9zU79CNiTfZN5t1/6XGxZUXq2DovfCRrrpRxWjFwjKIDo0OkRANf7Mqp+Fsu0Un53JF57p/p1RLpWcJkC3xO+UslGbDo3mjgczdvxz0aLmWNA7/NIhk+Q50gxCX3B4QrntPfLLlBkrmIpsKRcLFVuYZik7pYZ9prd0qCLQ9tc8qiw1ry5kMfIvLnIS/FV36w==");
patient.setIdElement(new IdType("Patient", UUID.randomUUID().toString()));
return Optional.of(patient);
}

@Override
public void updatePatient(Patient patient)
{
// Nothing to do in stub client
}
};
}
}
Loading

0 comments on commit 9e561fd

Please sign in to comment.