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

Commit 7de3bb8

Browse files
committed
Merge remote-tracking branch 'origin/release/0.7.0' into main
2 parents d1b1868 + f0a7057 commit 7de3bb8

File tree

87 files changed

+924
-621
lines changed

Some content is hidden

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

87 files changed

+924
-621
lines changed

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ codex-processes-ap1-test-data-generator/rsa/*.pem
2828
###
2929
codex-processes-ap1-docker-test-setup/**/bpe/log/*.log
3030
codex-processes-ap1-docker-test-setup/**/bpe/log/*.log.gz
31-
codex-processes-ap1-docker-test-setup/**/bpe/last_event/time.file
3231
codex-processes-ap1-docker-test-setup/**/bpe/plugin/*.jar
3332
codex-processes-ap1-docker-test-setup/**/bpe/process/*.jar
3433

codex-process-data-transfer/pom.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>de.netzwerk-universitaetsmedizin.codex</groupId>
88
<artifactId>codex-processes-ap1</artifactId>
9-
<version>0.6.0</version>
9+
<version>0.7.0</version>
1010
</parent>
1111

1212
<properties>
@@ -23,6 +23,7 @@
2323
<dependency>
2424
<groupId>org.highmed.dsf</groupId>
2525
<artifactId>dsf-tools-documentation-generator</artifactId>
26+
<scope>provided</scope>
2627
</dependency>
2728

2829
<!-- must be added as regular DSF plugin -->

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ public interface ConstantsDataTransfer
4444
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_DATA_REFERENCE = "data-reference";
4545
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_DRY_RUN = "dry-run";
4646
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_ENCRYPTED_BUNDLE_SIZE = "encrypted-bundle-size";
47+
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_LOCAL_VALIDATION_SUCCESSFUL = "local-validation-successful";
48+
String CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_ENCRYPTED_BUNDLE_RESOURCES_COUNT = "encrypted-bundle-resources-count";
4749

4850
String PROFILE_NUM_CODEX_TASK_DATA_TRIGGER_PROCESS_URI = "http://www.netzwerk-universitaetsmedizin.de/bpe/Process/dataTrigger/";
4951
String PROFILE_NUM_CODEX_TASK_DATA_TRIGGER_PROCESS_URI_AND_LATEST_VERSION = PROFILE_NUM_CODEX_TASK_DATA_TRIGGER_PROCESS_URI

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ public class DataTransferProcessPluginDefinition implements ProcessPluginDefinit
3636
{
3737
private static final Logger logger = LoggerFactory.getLogger(DataTransferProcessPluginDefinition.class);
3838

39-
public static final String VERSION = "0.6.0";
40-
public static final LocalDate DATE = LocalDate.of(2022, 7, 12);
39+
public static final String VERSION = "0.7.0";
40+
public static final LocalDate DATE = LocalDate.of(2022, 10, 18);
4141

4242
@Override
4343
public String getName()

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ private static final class FttpClientStub implements FttpClient
3535
{
3636
private static final Logger logger = LoggerFactory.getLogger(FttpClientStub.class);
3737

38+
private static final String DIC_PSEUDONYM = "source2/original2";
3839
private static final Pattern DIC_PSEUDONYM_PATTERN = Pattern.compile(PSEUDONYM_PATTERN_STRING);
3940

4041
@Override
@@ -64,8 +65,9 @@ public Optional<String> getCrrPseudonym(String dicSourceAndPseudonym)
6465
@Override
6566
public Optional<String> getDicPseudonym(String bloomFilter)
6667
{
67-
logger.info("Requesting DIC pseudonym for bloom filter {} ", bloomFilter);
68-
return Optional.of("source2/original2");
68+
logger.warn("Returning simulated DIC pseudonym '{}' for bloom filter '{}', fTTP connection not configured.",
69+
DIC_PSEUDONYM, bloomFilter);
70+
return Optional.of(DIC_PSEUDONYM);
6971
}
7072

7173
@Override

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

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public final class GeccoFhirClientStub implements GeccoFhirClient
3333
private static final Logger logger = LoggerFactory.getLogger(GeccoFhirClientStub.class);
3434

3535
private static final String condition = "{\"resourceType\":\"Condition\",\"meta\":{\"profile\":[\"https://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/chronic-lung-diseases\"]},\"clinicalStatus\":{\"coding\":[{\"system\":\"http://terminology.hl7.org/CodeSystem/condition-clinical\",\"code\":\"active\",\"display\":\"Active\"}]},\"verificationStatus\":{\"coding\":[{\"system\":\"http://terminology.hl7.org/CodeSystem/condition-ver-status\",\"code\":\"confirmed\",\"display\":\"Confirmed\"},{\"system\":\"http://snomed.info/sct\",\"code\":\"410605003\",\"display\":\"Confirmed present (qualifier value)\"}]},\"category\":[{\"coding\":[{\"system\":\"http://snomed.info/sct\",\"code\":\"418112009\",\"display\":\"Pulmonary medicine\"}]}],\"code\":{\"coding\":[{\"system\":\"http://snomed.info/sct\",\"code\":\"413839001\",\"display\":\"Chronic lung disease\"}]},\"recordedDate\":\"2020-11-10T15:50:41.000+01:00\"}";
36-
private static final String patient = "{\"resourceType\":\"Patient\",\"meta\":{\"profile\":[\"https://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/Patient\"]},\"extension\":[{\"url\":\"https://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/ethnic-group\",\"valueCoding\":{\"system\":\"http://snomed.info/sct\",\"code\":\"186019001\",\"display\":\"Other ethnic, mixed origin\"}},{\"url\":\"https://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/age\",\"extension\":[{\"url\":\"dateTimeOfDocumentation\",\"valueDateTime\":\"2020-10-01\"},{\"url\":\"age\",\"valueAge\":{\"value\":67,\"unit\":\"years\",\"system\":\"http://unitsofmeasure.org\",\"code\":\"a\"}}]}],\"birthDate\":\"1953-09-30\"}";
36+
private static final String patient = "{\"resourceType\":\"Patient\",\"meta\":{\"profile\":[\"https://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/Patient\"]},\"extension\":[{\"url\":\"https://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/ethnic-group\",\"valueCoding\":{\"system\":\"http://snomed.info/sct\",\"code\":\"26242008\",\"display\":\"Mixed (qualifier value)\"}},{\"url\":\"https://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/age\",\"extension\":[{\"url\":\"dateTimeOfDocumentation\",\"valueDateTime\":\"2020-10-01\"},{\"url\":\"age\",\"valueAge\":{\"value\":67,\"unit\":\"years\",\"system\":\"http://unitsofmeasure.org\",\"code\":\"a\"}}]}],\"birthDate\":\"1953-09-30\"}";
3737
private static final String observation = "{\"resourceType\":\"Observation\",\"meta\":{\"profile\":[\"https://www.netzwerk-universitaetsmedizin.de/fhir/StructureDefinition/sars-cov-2-rt-pcr\"]},\"identifier\":[{\"type\":{\"coding\":[{\"system\":\"http://terminology.hl7.org/CodeSystem/v2-0203\",\"code\":\"OBI\"}]}}],\"status\":\"final\",\"category\":[{\"coding\":[{\"system\":\"http://loinc.org\",\"code\":\"26436-6\"},{\"system\":\"http://terminology.hl7.org/CodeSystem/observation-category\",\"code\":\"laboratory\"}]}],\"code\":{\"coding\":[{\"system\":\"http://loinc.org\",\"code\":\"94500-6\",\"display\":\"SARS-CoV-2 (COVID-19) RNA [Presence] in Respiratory specimen by NAA with probe detection\"}],\"text\":\"SARS-CoV-2-RNA (PCR)\"},\"effectiveDateTime\":\"2020-11-10T15:50:41.000+01:00\",\"valueCodeableConcept\":{\"coding\":[{\"system\":\"http://snomed.info/sct\",\"code\":\"260373001\",\"display\":\"Detected (qualifier value)\"}],\"text\":\"SARS-CoV-2-RNA positiv\"}}";
3838

3939
private final GeccoClient geccoClient;
@@ -57,7 +57,9 @@ public void storeBundle(Bundle bundle)
5757
@Override
5858
public PatientReferenceList getPatientReferencesWithNewData(DateWithPrecision exportFrom, Date exportTo)
5959
{
60-
logger.warn("Returning demo pseudonyms for {}", geccoClient.getLocalIdentifierValue());
60+
logger.warn(
61+
"Returning four simulated patient references for {}, connection to GECCO FHIR server not configured",
62+
geccoClient.getLocalIdentifierValue());
6163

6264
PatientReference reference1 = PatientReference
6365
.from(new Identifier().setSystem(NAMING_SYSTEM_NUM_CODEX_DIC_PSEUDONYM).setValue("dic_foo/bar"));
@@ -79,18 +81,23 @@ public PatientReferenceList getPatientReferencesWithNewData(DateWithPrecision ex
7981
@Override
8082
public Stream<DomainResource> getNewData(String pseudonym, DateWithPrecision exportFrom, Date exportTo)
8183
{
82-
logger.warn("Returning demo resources for {}", pseudonym);
84+
logger.warn(
85+
"Returning simulated GECCO FHIR resources (Patient, Condition, Observation) for {}, connection to GECCO FHIR server not configured",
86+
pseudonym);
8387

8488
Patient p = geccoClient.getFhirContext().newJsonParser().parseResource(Patient.class, patient);
89+
p.setIdElement(new IdType(UUID.randomUUID().toString()));
8590
p.addIdentifier().setSystem(NAMING_SYSTEM_NUM_CODEX_DIC_PSEUDONYM).setValue(pseudonym).getType()
8691
.getCodingFirstRep().setSystem(IDENTIFIER_NUM_CODEX_DIC_PSEUDONYM_TYPE_SYSTEM)
8792
.setCode(IDENTIFIER_NUM_CODEX_DIC_PSEUDONYM_TYPE_CODE);
8893
p.setIdElement(new IdType("Patient", UUID.randomUUID().toString()));
8994

9095
Condition c = geccoClient.getFhirContext().newJsonParser().parseResource(Condition.class, condition);
96+
c.setIdElement(new IdType(UUID.randomUUID().toString()));
9197
c.setSubject(new Reference(p.getIdElement()));
9298

9399
Observation o = geccoClient.getFhirContext().newJsonParser().parseResource(Observation.class, observation);
100+
o.setIdElement(new IdType(UUID.randomUUID().toString()));
94101
o.setSubject(new Reference(p.getIdElement()));
95102

96103
return Stream.of(p, c, o);
@@ -99,6 +106,9 @@ public Stream<DomainResource> getNewData(String pseudonym, DateWithPrecision exp
99106
@Override
100107
public Optional<Patient> getPatient(String reference)
101108
{
109+
logger.warn("Returning simulated patient resource for {}, connection to GECCO FHIR server not configured",
110+
reference);
111+
102112
Patient p = geccoClient.getFhirContext().newJsonParser().parseResource(Patient.class, patient);
103113
p.addIdentifier().setSystem(ConstantsDataTransfer.NAMING_SYSTEM_NUM_CODEX_BLOOM_FILTER).setValue(
104114
"J75gYl+RiKSsxeu33tixBEEtFGCZwIEsWIKgvESaluvpSGBte/SBNZilz+sLSZdHSDKTL2J2d1yZsakqjtV5U2SMMJZ5IF3gEk1MT3sCRkxXEo1aJWKpnqndUTR+fvtSeMFj0y/O5yqrLV9zU79CNiTfZN5t1/6XGxZUXq2DovfCRrrpRxWjFwjKIDo0OkRANf7Mqp+Fsu0Un53JF57p/p1RLpWcJkC3xO+UslGbDo3mjgczdvxz0aLmWNA7/NIhk+Q50gxCX3B4QrntPfLLlBkrmIpsKRcLFVuYZik7pYZ9prd0qCLQ9tc8qiw1ry5kMfIvLnIS/FV36w==")
@@ -113,5 +123,7 @@ public Optional<Patient> getPatient(String reference)
113123
public void updatePatient(Patient patient)
114124
{
115125
// Nothing to do in stub client
126+
logger.info(
127+
"Not updating patient resource in GECCO FHIR server, connection to GECCO FHIR server not configured");
116128
}
117129
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public class CrrKeyProviderImpl implements CrrKeyProvider
2626

2727
/**
2828
* One or both parameters should be <code>null</code>
29-
*
29+
*
3030
* @param crrPrivateKeyFile
3131
* @param crrPublicKeyFile
3232
* @return
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
package de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.listener;
2+
3+
import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer.CODESYSTEM_NUM_CODEX_DATA_TRANSFER;
4+
import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer.CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_LOCAL_VALIDATION_SUCCESSFUL;
5+
6+
import java.nio.charset.StandardCharsets;
7+
import java.text.SimpleDateFormat;
8+
import java.util.Objects;
9+
10+
import javax.activation.DataHandler;
11+
import javax.mail.internet.MimeBodyPart;
12+
import javax.mail.internet.MimeMultipart;
13+
import javax.mail.util.ByteArrayDataSource;
14+
15+
import org.camunda.bpm.engine.delegate.DelegateExecution;
16+
import org.camunda.bpm.engine.delegate.ExecutionListener;
17+
import org.highmed.dsf.bpe.service.MailService;
18+
import org.highmed.dsf.fhir.client.FhirWebserviceClientProvider;
19+
import org.highmed.dsf.fhir.task.TaskHelper;
20+
import org.hl7.fhir.r4.model.BooleanType;
21+
import org.hl7.fhir.r4.model.Task;
22+
import org.hl7.fhir.r4.model.Task.TaskOutputComponent;
23+
import org.hl7.fhir.r4.model.Task.TaskStatus;
24+
import org.slf4j.Logger;
25+
import org.slf4j.LoggerFactory;
26+
import org.springframework.beans.factory.InitializingBean;
27+
28+
import ca.uhn.fhir.context.FhirContext;
29+
import de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.DataTransferProcessPluginDefinition;
30+
31+
public class AfterDryRunEndListener implements ExecutionListener, InitializingBean
32+
{
33+
private static final Logger logger = LoggerFactory.getLogger(AfterDryRunEndListener.class);
34+
35+
private final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
36+
37+
private final TaskHelper taskHelper;
38+
private final FhirWebserviceClientProvider clientProvider;
39+
private final FhirContext fhirContext;
40+
private final MailService mailService;
41+
42+
private final String localOrganizationIdentifierValue;
43+
private final boolean sendDryRunSuccessMail;
44+
45+
public AfterDryRunEndListener(TaskHelper taskHelper, FhirWebserviceClientProvider clientProvider,
46+
FhirContext fhirContext, MailService mailService, String localOrganizationIdentifierValue,
47+
boolean sendDryRunSuccessMail)
48+
{
49+
this.taskHelper = taskHelper;
50+
this.clientProvider = clientProvider;
51+
this.fhirContext = fhirContext;
52+
this.mailService = mailService;
53+
54+
this.localOrganizationIdentifierValue = localOrganizationIdentifierValue;
55+
this.sendDryRunSuccessMail = sendDryRunSuccessMail;
56+
}
57+
58+
@Override
59+
public void afterPropertiesSet() throws Exception
60+
{
61+
Objects.requireNonNull(taskHelper, "taskHelper");
62+
Objects.requireNonNull(clientProvider, "clientProvider");
63+
Objects.requireNonNull(fhirContext, "fhirContext");
64+
Objects.requireNonNull(mailService, "mailService");
65+
66+
Objects.requireNonNull(localOrganizationIdentifierValue, "localOrganizationIdentifierValue");
67+
}
68+
69+
@Override
70+
public void notify(DelegateExecution execution) throws Exception
71+
{
72+
if (!sendDryRunSuccessMail)
73+
return;
74+
75+
Task task = taskHelper.getLeadingTaskFromExecutionVariables(execution);
76+
Task finalTask = clientProvider.getLocalWebserviceClient().read(Task.class, task.getIdElement().getIdPart());
77+
78+
if (!TaskStatus.COMPLETED.equals(finalTask.getStatus()))
79+
{
80+
logger.warn("Final Task from DSF FHIR server not in status {} but {}, not sending dry-run success mail",
81+
TaskStatus.COMPLETED, finalTask.getStatus());
82+
return;
83+
}
84+
85+
if (!isLocalValidationSuccessful(finalTask))
86+
{
87+
logger.warn(
88+
"Final Task from DSF FHIR server missing '{}' output parameter with value 'true', not sending dry-run success mail",
89+
CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_LOCAL_VALIDATION_SUCCESSFUL);
90+
return;
91+
}
92+
93+
String finalTaskAsXml = fhirContext.newXmlParser().setPrettyPrint(true).encodeResourceToString(finalTask);
94+
String attachmentFilename = finalTask.getIdElement().getIdPart() + ".xml";
95+
96+
MimeBodyPart text = new MimeBodyPart();
97+
text.setText(createMesssage(finalTask, attachmentFilename));
98+
99+
MimeBodyPart attachment = new MimeBodyPart();
100+
attachment.setFileName(attachmentFilename);
101+
attachment.setDataHandler(new DataHandler(
102+
new ByteArrayDataSource(finalTaskAsXml.getBytes(StandardCharsets.UTF_8), "application/xml")));
103+
104+
MimeMultipart body = new MimeMultipart();
105+
body.addBodyPart(text);
106+
body.addBodyPart(attachment);
107+
108+
MimeBodyPart message = new MimeBodyPart();
109+
message.setContent(body);
110+
111+
mailService.send("Dry-Run Success: " + localOrganizationIdentifierValue, message);
112+
}
113+
114+
private boolean isLocalValidationSuccessful(Task task)
115+
{
116+
return task.getOutput().stream().filter(TaskOutputComponent::hasType).filter(o -> o.getType().hasCoding())
117+
.filter(o -> o.getType().getCoding().stream()
118+
.anyMatch(c -> CODESYSTEM_NUM_CODEX_DATA_TRANSFER.equals(c.getSystem())
119+
&& CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_LOCAL_VALIDATION_SUCCESSFUL
120+
.equals(c.getCode())))
121+
.filter(TaskOutputComponent::hasValue).filter(o -> o.getValue() instanceof BooleanType)
122+
.map(o -> (BooleanType) o.getValue()).anyMatch(b -> Boolean.TRUE.equals(b.getValue()));
123+
}
124+
125+
private String createMesssage(Task finalTask, String attachmentFileName)
126+
{
127+
StringBuilder b = new StringBuilder();
128+
129+
b.append("Send process version ");
130+
b.append(DataTransferProcessPluginDefinition.VERSION);
131+
b.append(" dry-run at organization with identifier '");
132+
b.append(localOrganizationIdentifierValue);
133+
b.append("' successfully completed on ");
134+
b.append(DATE_FORMAT.format(finalTask.getMeta().getLastUpdated()));
135+
b.append(".\n\nTask resource is attached as '");
136+
b.append(attachmentFileName);
137+
b.append("'");
138+
139+
return b.toString();
140+
}
141+
}
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,90 @@
11
package de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.logging;
22

3+
import java.util.Objects;
4+
5+
import org.highmed.dsf.bpe.service.MailService;
36
import org.hl7.fhir.r4.model.IdType;
47
import org.slf4j.Logger;
58
import org.slf4j.LoggerFactory;
9+
import org.springframework.beans.factory.InitializingBean;
610

7-
public class ErrorLogger
11+
public class ErrorLogger implements InitializingBean
812
{
913
private static final Logger validationLogger = LoggerFactory.getLogger("validation-error-logger");
1014
private static final Logger errorLogger = LoggerFactory.getLogger("error-logger");
1115

16+
private final MailService mailService;
17+
18+
private final boolean sendValidationFailedMail;
19+
private final boolean sendProcessFailedMail;
20+
21+
public ErrorLogger(MailService mailService, boolean sendValidationFailedMail, boolean sendProcessFailedMail)
22+
{
23+
this.mailService = mailService;
24+
25+
this.sendValidationFailedMail = sendValidationFailedMail;
26+
this.sendProcessFailedMail = sendProcessFailedMail;
27+
}
28+
29+
@Override
30+
public void afterPropertiesSet() throws Exception
31+
{
32+
Objects.requireNonNull(mailService, "mailService");
33+
}
34+
1235
public void logValidationFailed(IdType taskId)
1336
{
14-
validationLogger.debug("Validation of FHIR resources failed, started by Task {}", taskId.getValue());
37+
validationLogger.debug("Validation of FHIR resources failed in process started by {}",
38+
taskId.toVersionless().getValue());
39+
40+
if (sendValidationFailedMail)
41+
mailService.send("Validation Error",
42+
"Validation of FHIR resources failed in process started by " + taskId.toVersionless().getValue());
1543
}
1644

1745
public void logValidationFailedLocal(IdType taskId)
1846
{
19-
validationLogger.debug("Local validation of FHIR resources failed, started by Task {}", taskId.getValue());
47+
validationLogger.debug("Local validation of FHIR resources failed in process started by {}",
48+
taskId.toVersionless().getValue());
49+
50+
if (sendValidationFailedMail)
51+
mailService.send("Validation Error", "Local validation of FHIR resources failed in process started by "
52+
+ taskId.toVersionless().getValue());
2053
}
2154

2255
public void logValidationFailedRemote(IdType taskId)
2356
{
24-
validationLogger.debug("Remote validation of FHIR resources failed, started by Task {}", taskId.getValue());
57+
validationLogger.debug("Remote validation of FHIR resources failed in process started by {}",
58+
taskId.toVersionless().getValue());
59+
60+
if (sendValidationFailedMail)
61+
mailService.send("Validation Error", "Remote validation of FHIR resources failed in process started by "
62+
+ taskId.toVersionless().getValue());
2563
}
2664

2765
public void logDataSendFailed(IdType taskId)
2866
{
29-
errorLogger.debug("Send process failed, started by Task {}", taskId.getValue());
67+
errorLogger.debug("Send process failed started by {}", taskId.toVersionless().getValue());
68+
69+
if (sendProcessFailedMail)
70+
mailService.send("Proccess Failed", "Send process failed started by " + taskId.toVersionless().getValue());
3071
}
3172

3273
public void logDataTranslateFailed(IdType taskId)
3374
{
34-
errorLogger.debug("Translate process failed, started by Task {}", taskId.getValue());
75+
errorLogger.debug("Translate process failed started by {}", taskId.toVersionless().getValue());
76+
77+
if (sendProcessFailedMail)
78+
mailService.send("Proccess Failed",
79+
"Translate process failed started by " + taskId.toVersionless().getValue());
3580
}
3681

3782
public void logDataReceiveFailed(IdType taskId)
3883
{
39-
errorLogger.debug("Receive process failed, started by Task {}", taskId.getValue());
84+
errorLogger.debug("Receive process failed started by {}", taskId.toVersionless().getValue());
85+
86+
if (sendProcessFailedMail)
87+
mailService.send("Proccess Failed",
88+
"Receive process failed started by " + taskId.toVersionless().getValue());
4089
}
4190
}

0 commit comments

Comments
 (0)