diff --git a/pom.xml b/pom.xml
index 2d2956e..abc2273 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
de.medizininformatik-initiative
mii-process-report
- 1.1.3.0-SNAPSHOT
+ 1.2.0.0-SNAPSHOT
UTF-8
@@ -45,7 +45,7 @@
de.medizininformatik-initiative
mii-processes-common
- 1.0.3.0
+ 1.1.0.0-SNAPSHOT
org.springframework
diff --git a/src/main/java/de/medizininformatik_initiative/process/report/ConstantsReport.java b/src/main/java/de/medizininformatik_initiative/process/report/ConstantsReport.java
index 857e272..ab4d3e5 100644
--- a/src/main/java/de/medizininformatik_initiative/process/report/ConstantsReport.java
+++ b/src/main/java/de/medizininformatik_initiative/process/report/ConstantsReport.java
@@ -41,15 +41,15 @@ public interface ConstantsReport
String BPMN_EXECUTION_VARIABLE_REPORT_SEARCH_BUNDLE_RESPONSE_REFERENCE = "reportSearchBundleResponseReference";
String BPMN_EXECUTION_VARIABLE_REPORT_RECEIVE_ERROR = "reportReceiveError";
String BPMN_EXECUTION_VARIABLE_REPORT_RECEIVE_ERROR_MESSAGE = "reportReceiveErrorMessage";
+ String BPMN_EXECUTION_VARIABLE_IS_DRY_RUN = "isDryRun";
String CODESYSTEM_REPORT = "http://medizininformatik-initiative.de/fhir/CodeSystem/report";
-
- String CODESYSTEM_REPORT_VALUE_SEARCH_BUNDLE = "search-bundle-v";
String CODESYSTEM_REPORT_VALUE_SEARCH_BUNDLE_RESPONSE_REFERENCE = "search-bundle-response-reference";
String CODESYSTEM_REPORT_VALUE_REPORT_STATUS = "report-status";
String CODESYSTEM_REPORT_VALUE_TIMER_INTERVAL = "timer-interval";
String CODESYSTEM_REPORT_VALUE_FIRST_EXECUTION = "first-execution";
String CODESYSTEM_REPORT_VALUE_HRP_IDENTIFIER = "hrp-identifier";
+ String CODESYSTEM_REPORT_VALUE_DRY_RUN = "dry-run";
String CODESYSTEM_REPORT_STATUS = "http://medizininformatik-initiative.de/fhir/CodeSystem/report-status";
String CODESYSTEM_REPORT_STATUS_VALUE_NOT_ALLOWED = "not-allowed";
@@ -59,8 +59,11 @@ public interface ConstantsReport
String CODESYSTEM_REPORT_STATUS_VALUE_RECEIPT_ERROR = "receipt-error";
String CODESYSTEM_REPORT_STATUS_VALUE_RECEIVE_OK = "receive-ok";
String CODESYSTEM_REPORT_STATUS_VALUE_RECEIVE_ERROR = "receive-error";
+ String CODESYSTEM_REPORT_STATUS_VALUE_DRY_RUN = "dry-run";
String NAMINGSYSTEM_CDS_REPORT_IDENTIFIER = "http://medizininformatik-initiative.de/sid/cds-report-identifier";
+ String NAMINGSYSTEM_SEARCH_BUNDLE_IDENTIFIER = "http://medizininformatik-initiative.de/sid/search-bundle-identifier";
+ String NAMINGSYSTEM_SEARCH_BUNDLE_IDENTIFIER_VALUE_PREFIX = "search-bundle-v";
String PROFILE_REPORT_SEARCH_BUNDLE_RESPONSE = "http://medizininformatik-initiative.de/fhir/Bundle/search-bundle-response-report";
String EXTENSION_REPORT_STATUS_ERROR_URL = "http://medizininformatik-initiative.de/fhir/StructureDefinition/extension-report-status-error";
diff --git a/src/main/java/de/medizininformatik_initiative/process/report/ReportProcessPluginDefinition.java b/src/main/java/de/medizininformatik_initiative/process/report/ReportProcessPluginDefinition.java
index b36f053..76e5198 100644
--- a/src/main/java/de/medizininformatik_initiative/process/report/ReportProcessPluginDefinition.java
+++ b/src/main/java/de/medizininformatik_initiative/process/report/ReportProcessPluginDefinition.java
@@ -10,7 +10,7 @@
public class ReportProcessPluginDefinition implements ProcessPluginDefinition
{
- public static final String VERSION = "1.1.3.0";
+ public static final String VERSION = "1.2.0.0";
public static final LocalDate RELEASE_DATE = LocalDate.of(2024, 11, 10);
@Override
@@ -55,6 +55,7 @@ public Map> getFhirResourcesByProcessId()
var eReportStatusError = "fhir/StructureDefinition/extension-report-status-error.xml";
var nReportIdent = "fhir/NamingSystem/cds-report-identifier.xml";
+ var nSearchBundleIdent = "fhir/NamingSystem/search-bundle-identifier.xml";
var sAutostartStart = "fhir/StructureDefinition/task-report-autostart-start.xml";
var sAutostartStop = "fhir/StructureDefinition/task-report-autostart-stop.xml";
@@ -75,10 +76,10 @@ public Map> getFhirResourcesByProcessId()
return Map.of(ConstantsReport.PROCESS_NAME_FULL_REPORT_AUTOSTART,
List.of(aAutostart, cReport, sAutostartStart, sAutostartStop, tAutostartStart, tAutostartStop, vReport),
ConstantsReport.PROCESS_NAME_FULL_REPORT_RECEIVE,
- List.of(aReceive, cReport, cReportStatus, eReportStatusError, nReportIdent, sSearchBundle,
- sSearchBundleResponse, sSend, vReport, vReportStatusReceive),
+ List.of(aReceive, cReport, cReportStatus, eReportStatusError, nReportIdent, nSearchBundleIdent,
+ sSearchBundle, sSearchBundleResponse, sSend, vReport, vReportStatusReceive),
ConstantsReport.PROCESS_NAME_FULL_REPORT_SEND,
- List.of(aSend, cReport, cReportStatus, eReportStatusError, nReportIdent, sReceive, sSearchBundle,
- sSearchBundleResponse, sSendStart, tSendStart, vReport, vReportStatusSend));
+ List.of(aSend, cReport, cReportStatus, eReportStatusError, nReportIdent, nSearchBundleIdent, sReceive,
+ sSearchBundle, sSearchBundleResponse, sSendStart, tSendStart, vReport, vReportStatusSend));
}
}
diff --git a/src/main/java/de/medizininformatik_initiative/process/report/service/CreateReport.java b/src/main/java/de/medizininformatik_initiative/process/report/service/CreateReport.java
index ac5f025..83a609b 100644
--- a/src/main/java/de/medizininformatik_initiative/process/report/service/CreateReport.java
+++ b/src/main/java/de/medizininformatik_initiative/process/report/service/CreateReport.java
@@ -39,15 +39,17 @@ public class CreateReport extends AbstractServiceDelegate implements Initializin
private final String resourceVersion;
private final FhirClientFactory fhirClientFactory;
+ private final boolean fhirAsyncRequestsEnabled;
private final DataLogger dataLogger;
public CreateReport(ProcessPluginApi api, String resourceVersion, FhirClientFactory fhirClientFactory,
- DataLogger dataLogger)
+ boolean fhirAsyncRequestsEnabled, DataLogger dataLogger)
{
super(api);
this.resourceVersion = resourceVersion;
this.fhirClientFactory = fhirClientFactory;
+ this.fhirAsyncRequestsEnabled = fhirAsyncRequestsEnabled;
this.dataLogger = dataLogger;
}
@@ -67,12 +69,13 @@ protected void doExecute(DelegateExecution execution, Variables variables)
Task task = variables.getStartTask();
Bundle searchBundle = variables.getResource(ConstantsReport.BPMN_EXECUTION_VARIABLE_REPORT_SEARCH_BUNDLE);
Target target = variables.getTarget();
+ boolean isDryRun = variables.getBoolean(ConstantsReport.BPMN_EXECUTION_VARIABLE_IS_DRY_RUN);
try
{
Bundle responseBundle = executeSearchBundle(searchBundle, target.getOrganizationIdentifierValue());
- Bundle reportBundle = transformToReportBundle(searchBundle, responseBundle, target);
+ Bundle reportBundle = transformToReportBundle(searchBundle, responseBundle, target, isDryRun);
dataLogger.logResource("Report Bundle", reportBundle);
checkReportBundle(searchBundle, reportBundle, target.getOrganizationIdentifierValue());
@@ -94,8 +97,8 @@ protected void doExecute(DelegateExecution execution, Variables variables)
private Bundle executeSearchBundle(Bundle searchBundle, String hrpIdentifier)
{
logger.info(
- "Executing search Bundle from HRP '{}' against FHIR store with base url '{}' - this could take a while...",
- hrpIdentifier, fhirClientFactory.getFhirClient().getFhirBaseUrl());
+ "Executing search Bundle from HRP '{}' against FHIR store with base URL '{}' - this could take a while...",
+ hrpIdentifier, fhirClientFactory.getFhirBaseUrl());
Bundle responseBundle = new Bundle();
responseBundle.setType(Bundle.BundleType.BATCHRESPONSE);
@@ -115,9 +118,10 @@ private Bundle.BundleEntryComponent executeRequest(String url)
try
{
- logger.debug("Executing report search request '{}'", url);
+ logger.debug("Executing report search request '{}' with {}", url,
+ fhirAsyncRequestsEnabled ? "asnyc request pattern" : "normal request pattern");
+ Resource result = doExecuteRequest(url);
- Resource result = fhirClientFactory.getFhirClient().search(url);
entry.setResource(result);
entry.setResponse(new Bundle.BundleEntryResponseComponent().setStatus(RESPONSE_OK));
}
@@ -137,7 +141,15 @@ private Bundle.BundleEntryComponent executeRequest(String url)
return entry;
}
- private Bundle transformToReportBundle(Bundle searchBundle, Bundle responseBundle, Target target)
+ private Resource doExecuteRequest(String url)
+ {
+ if (fhirAsyncRequestsEnabled)
+ return fhirClientFactory.getAsyncFhirClient().search(url);
+ else
+ return fhirClientFactory.getStandardFhirClient().search(url);
+ }
+
+ private Bundle transformToReportBundle(Bundle searchBundle, Bundle responseBundle, Target target, boolean isDryRun)
{
Bundle report = new Bundle();
report.setMeta(responseBundle.getMeta());
@@ -150,7 +162,8 @@ private Bundle transformToReportBundle(Bundle searchBundle, Bundle responseBundl
.orElseThrow(() -> new RuntimeException("LocalOrganizationIdentifierValue empty"))));
api.getReadAccessHelper().addLocal(report);
- api.getReadAccessHelper().addOrganization(report, target.getOrganizationIdentifierValue());
+ if (!isDryRun)
+ api.getReadAccessHelper().addOrganization(report, target.getOrganizationIdentifierValue());
for (int i = 0; i < searchBundle.getEntry().size(); i++)
{
diff --git a/src/main/java/de/medizininformatik_initiative/process/report/service/DownloadSearchBundle.java b/src/main/java/de/medizininformatik_initiative/process/report/service/DownloadSearchBundle.java
index 28ac968..991974d 100644
--- a/src/main/java/de/medizininformatik_initiative/process/report/service/DownloadSearchBundle.java
+++ b/src/main/java/de/medizininformatik_initiative/process/report/service/DownloadSearchBundle.java
@@ -57,8 +57,8 @@ protected void doExecute(DelegateExecution execution, Variables variables)
{
Task task = variables.getStartTask();
Target target = variables.getTarget();
- String searchBundleIdentifier = ConstantsReport.CODESYSTEM_REPORT + "|"
- + ConstantsReport.CODESYSTEM_REPORT_VALUE_SEARCH_BUNDLE + processVersion;
+ String searchBundleIdentifier = ConstantsReport.NAMINGSYSTEM_SEARCH_BUNDLE_IDENTIFIER + "|"
+ + ConstantsReport.NAMINGSYSTEM_SEARCH_BUNDLE_IDENTIFIER_VALUE_PREFIX + processVersion;
logger.info("Downloading search Bundle '{}' from HRP '{}' for Task with id '{}'", searchBundleIdentifier,
target.getOrganizationIdentifierValue(), task.getId());
diff --git a/src/main/java/de/medizininformatik_initiative/process/report/service/LogDryRun.java b/src/main/java/de/medizininformatik_initiative/process/report/service/LogDryRun.java
new file mode 100644
index 0000000..76700ec
--- /dev/null
+++ b/src/main/java/de/medizininformatik_initiative/process/report/service/LogDryRun.java
@@ -0,0 +1,69 @@
+package de.medizininformatik_initiative.process.report.service;
+
+import java.util.Objects;
+
+import org.camunda.bpm.engine.delegate.DelegateExecution;
+import org.hl7.fhir.r4.model.Task;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.InitializingBean;
+
+import de.medizininformatik_initiative.process.report.ConstantsReport;
+import de.medizininformatik_initiative.process.report.util.ReportStatusGenerator;
+import dev.dsf.bpe.v1.ProcessPluginApi;
+import dev.dsf.bpe.v1.activity.AbstractServiceDelegate;
+import dev.dsf.bpe.v1.variables.Variables;
+
+public class LogDryRun extends AbstractServiceDelegate implements InitializingBean
+{
+ private static final Logger logger = LoggerFactory.getLogger(LogDryRun.class);
+
+ private final ReportStatusGenerator statusGenerator;
+
+ public LogDryRun(ProcessPluginApi api, ReportStatusGenerator statusGenerator)
+ {
+ super(api);
+ this.statusGenerator = statusGenerator;
+ }
+
+ @Override
+ public void afterPropertiesSet() throws Exception
+ {
+ super.afterPropertiesSet();
+ Objects.requireNonNull(statusGenerator, "statusGenerator");
+ }
+
+ @Override
+ protected void doExecute(DelegateExecution delegateExecution, Variables variables)
+ {
+ String recipient = variables.getTarget().getOrganizationIdentifierValue();
+ String reportLocation = variables
+ .getString(ConstantsReport.BPMN_EXECUTION_VARIABLE_REPORT_SEARCH_BUNDLE_RESPONSE_REFERENCE);
+
+ logger.info("Report dry-run successful for HRP '{}' at '{}' and task with id '{}'", recipient, reportLocation,
+ variables.getStartTask().getId());
+ sendSuccessfulMail(recipient, reportLocation);
+
+ addOutputToStartTask(variables);
+ }
+
+ private void sendSuccessfulMail(String recipient, String reportLocation)
+ {
+ String subject = "New successful dry-run report in process '" + ConstantsReport.PROCESS_NAME_FULL_REPORT_SEND
+ + "'";
+ String message = "A new report has been successfully created as dry-run for HRP '" + recipient
+ + "' in process '" + ConstantsReport.PROCESS_NAME_FULL_REPORT_SEND
+ + "' and can be accessed using the following link:\n" + "- " + reportLocation;
+
+ api.getMailService().send(subject, message);
+ }
+
+ private void addOutputToStartTask(Variables variables)
+ {
+ Task task = variables.getStartTask();
+ task.addOutput(
+ statusGenerator.createReportStatusOutput(ConstantsReport.CODESYSTEM_REPORT_STATUS_VALUE_DRY_RUN));
+
+ variables.updateTask(task);
+ }
+}
diff --git a/src/main/java/de/medizininformatik_initiative/process/report/service/SelectTargetHrp.java b/src/main/java/de/medizininformatik_initiative/process/report/service/SelectTargetHrp.java
index c5d3ef8..9cc40dd 100644
--- a/src/main/java/de/medizininformatik_initiative/process/report/service/SelectTargetHrp.java
+++ b/src/main/java/de/medizininformatik_initiative/process/report/service/SelectTargetHrp.java
@@ -5,6 +5,7 @@
import java.util.function.Supplier;
import org.camunda.bpm.engine.delegate.DelegateExecution;
+import org.hl7.fhir.r4.model.BooleanType;
import org.hl7.fhir.r4.model.Coding;
import org.hl7.fhir.r4.model.Endpoint;
import org.hl7.fhir.r4.model.Identifier;
@@ -56,6 +57,12 @@ protected void doExecute(DelegateExecution execution, Variables variables)
Target target = variables.createTarget(hrpIdentifier, endpointIdentifier, endpoint.getAddress());
variables.setTarget(target);
+
+ boolean isDryRun = isDryRun(variables);
+ if (isDryRun)
+ logger.info("Creating new report as dry-run for HRP '{}'", hrpIdentifier);
+
+ variables.setBoolean(ConstantsReport.BPMN_EXECUTION_VARIABLE_IS_DRY_RUN, isDryRun);
}
private Optional extractHrpIdentifierFromTask(Task task)
@@ -136,4 +143,13 @@ private String extractEndpointIdentifier(Endpoint endpoint)
.orElseThrow(() -> new RuntimeException("Endpoint with id '" + endpoint.getId()
+ "' is missing identifier with system '" + NamingSystems.EndpointIdentifier.SID + "'"));
}
+
+ private boolean isDryRun(Variables variables)
+ {
+ return api.getTaskHelper()
+ .getFirstInputParameterValue(variables.getStartTask(), ConstantsReport.CODESYSTEM_REPORT,
+ ConstantsReport.CODESYSTEM_REPORT_VALUE_DRY_RUN, BooleanType.class)
+ .map(BooleanType::booleanValue).orElse(false);
+ }
+
}
diff --git a/src/main/java/de/medizininformatik_initiative/process/report/spring/config/FhirClientConfig.java b/src/main/java/de/medizininformatik_initiative/process/report/spring/config/FhirClientConfig.java
index 2d9d03f..8e2b2d4 100644
--- a/src/main/java/de/medizininformatik_initiative/process/report/spring/config/FhirClientConfig.java
+++ b/src/main/java/de/medizininformatik_initiative/process/report/spring/config/FhirClientConfig.java
@@ -152,6 +152,11 @@ public class FhirClientConfig
@Value("${de.medizininformatik.initiative.report.dic.fhir.dataLoggingEnabled:false}")
private boolean fhirDataLoggingEnabled;
+ @ProcessDocumentation(processNames = {
+ "medizininformatik-initiativede_reportSend" }, description = "Initial Result polling interval in milliseconds for asynchronous request pattern when executing search bundle requests, the interval will be increased tenfold after every check if a result is not ready")
+ @Value("${de.medizininformatik.initiative.report.dic.fhir.server.async.polling.interval:100}")
+ private int fhirAsyncInitialPollingIntervalMilliseconds;
+
@Value("${dev.dsf.bpe.fhir.server.organization.identifier.value}")
private String localIdentifierValue;
@@ -175,7 +180,8 @@ public FhirClientFactory fhirClientFactory()
return new FhirClientFactory(trustStorePath, certificatePath, privateKeyPath, fhirStorePrivateKeyPassword,
fhirStoreConnectTimeout, fhirStoreSocketTimeout, fhirStoreConnectionRequestTimeout, fhirStoreBaseUrl,
fhirStoreUsername, fhirStorePassword, fhirStoreBearerToken, tokenProvider(), proxyUrl, proxyUsername,
- proxyPassword, fhirStoreHapiClientVerbose, fhirContext, localIdentifierValue, dataLogger());
+ proxyPassword, fhirStoreHapiClientVerbose, fhirAsyncInitialPollingIntervalMilliseconds, fhirContext,
+ localIdentifierValue, dataLogger());
}
public TokenProvider tokenProvider()
diff --git a/src/main/java/de/medizininformatik_initiative/process/report/spring/config/ReportConfig.java b/src/main/java/de/medizininformatik_initiative/process/report/spring/config/ReportConfig.java
index ce4e997..b0973ca 100644
--- a/src/main/java/de/medizininformatik_initiative/process/report/spring/config/ReportConfig.java
+++ b/src/main/java/de/medizininformatik_initiative/process/report/spring/config/ReportConfig.java
@@ -18,6 +18,7 @@
import de.medizininformatik_initiative.process.report.service.DownloadSearchBundle;
import de.medizininformatik_initiative.process.report.service.HandleError;
import de.medizininformatik_initiative.process.report.service.InsertReport;
+import de.medizininformatik_initiative.process.report.service.LogDryRun;
import de.medizininformatik_initiative.process.report.service.SelectTargetDic;
import de.medizininformatik_initiative.process.report.service.SelectTargetHrp;
import de.medizininformatik_initiative.process.report.service.SetTimer;
@@ -42,6 +43,11 @@ public class ReportConfig
@Value("${de.medizininformatik.initiative.report.dic.hrp.identifier:#{null}}")
private String hrpIdentifier;
+ @ProcessDocumentation(processNames = {
+ "medizininformatik-initiativede_reportSend" }, description = "To enable asynchronous request pattern when executing search bundle requests set to `true`")
+ @Value("${de.medizininformatik.initiative.report.dic.fhir.server.async.enabled:false}")
+ private boolean fhirAsyncEnabled;
+
// all Processes
@Bean
@@ -110,10 +116,17 @@ public SearchQueryCheckService searchQueryCheckService()
public CreateReport createReport()
{
String resourceVersion = new ReportProcessPluginDefinition().getResourceVersion();
- return new CreateReport(api, resourceVersion, fhirClientConfig.fhirClientFactory(),
+ return new CreateReport(api, resourceVersion, fhirClientConfig.fhirClientFactory(), fhirAsyncEnabled,
fhirClientConfig.dataLogger());
}
+ @Bean
+ @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
+ public LogDryRun logDryRun()
+ {
+ return new LogDryRun(api, reportStatusGenerator());
+ }
+
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public SendReport sendReport()
diff --git a/src/main/resources/bpe/report-send.bpmn b/src/main/resources/bpe/report-send.bpmn
index c52a67b..234d299 100644
--- a/src/main/resources/bpe/report-send.bpmn
+++ b/src/main/resources/bpe/report-send.bpmn
@@ -1,5 +1,5 @@
-
+
Flow_0jtrquu
@@ -17,14 +17,14 @@
Flow_0lez18n
Flow_0d1hhpd
-
+
Flow_1bwmt5h
Flow_0gkokuw
- Flow_0gkokuw
+ Flow_0l1jgoh
Flow_0hq9yqb
@@ -80,113 +80,154 @@
+
+ Flow_0gkokuw
+ Flow_0l1jgoh
+ Flow_0ix00o6
+
+
+ ${!isDryRun}
+
+
+ Flow_191va5p
+
+
+ ${isDryRun}
+
+
+
+ Flow_0ix00o6
+ Flow_191va5p
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/fhir/CodeSystem/report-status.xml b/src/main/resources/fhir/CodeSystem/report-status.xml
index aa76fe2..5d9000a 100644
--- a/src/main/resources/fhir/CodeSystem/report-status.xml
+++ b/src/main/resources/fhir/CodeSystem/report-status.xml
@@ -56,4 +56,9 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/fhir/CodeSystem/report.xml b/src/main/resources/fhir/CodeSystem/report.xml
index c4942ff..507dad3 100644
--- a/src/main/resources/fhir/CodeSystem/report.xml
+++ b/src/main/resources/fhir/CodeSystem/report.xml
@@ -26,11 +26,6 @@
-
-
-
-
-
@@ -51,4 +46,9 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/fhir/NamingSystem/search-bundle-identifier.xml b/src/main/resources/fhir/NamingSystem/search-bundle-identifier.xml
new file mode 100644
index 0000000..b216b35
--- /dev/null
+++ b/src/main/resources/fhir/NamingSystem/search-bundle-identifier.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/fhir/StructureDefinition/search-bundle-report.xml b/src/main/resources/fhir/StructureDefinition/search-bundle-report.xml
index f9bf423..265b76b 100644
--- a/src/main/resources/fhir/StructureDefinition/search-bundle-report.xml
+++ b/src/main/resources/fhir/StructureDefinition/search-bundle-report.xml
@@ -28,7 +28,7 @@
-
+
diff --git a/src/main/resources/fhir/StructureDefinition/task-report-send-start.xml b/src/main/resources/fhir/StructureDefinition/task-report-send-start.xml
index ef2710b..3270eb0 100644
--- a/src/main/resources/fhir/StructureDefinition/task-report-send-start.xml
+++ b/src/main/resources/fhir/StructureDefinition/task-report-send-start.xml
@@ -28,7 +28,7 @@
-
+
@@ -48,6 +48,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/fhir/Task/task-report-send-start.xml b/src/main/resources/fhir/Task/task-report-send-start.xml
index a5347a3..8ef1957 100644
--- a/src/main/resources/fhir/Task/task-report-send-start.xml
+++ b/src/main/resources/fhir/Task/task-report-send-start.xml
@@ -50,4 +50,13 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/fhir/ValueSet/report-status-send.xml b/src/main/resources/fhir/ValueSet/report-status-send.xml
index 46252db..e3dfdae 100644
--- a/src/main/resources/fhir/ValueSet/report-status-send.xml
+++ b/src/main/resources/fhir/ValueSet/report-status-send.xml
@@ -42,6 +42,10 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/test/java/de/medizininformatik_initiative/process/report/bpe/ReportProcessPluginDefinitionTest.java b/src/test/java/de/medizininformatik_initiative/process/report/bpe/ReportProcessPluginDefinitionTest.java
index eebf4ed..6c9f60f 100644
--- a/src/test/java/de/medizininformatik_initiative/process/report/bpe/ReportProcessPluginDefinitionTest.java
+++ b/src/test/java/de/medizininformatik_initiative/process/report/bpe/ReportProcessPluginDefinitionTest.java
@@ -26,11 +26,11 @@ public void testResourceLoading()
var reportReceive = resourcesByProcessId.get(ConstantsReport.PROCESS_NAME_FULL_REPORT_RECEIVE);
assertNotNull(reportReceive);
- assertEquals(10, reportReceive.stream().filter(this::exists).count());
+ assertEquals(11, reportReceive.stream().filter(this::exists).count());
var reportSend = resourcesByProcessId.get(ConstantsReport.PROCESS_NAME_FULL_REPORT_SEND);
assertNotNull(reportSend);
- assertEquals(12, reportSend.stream().filter(this::exists).count());
+ assertEquals(13, reportSend.stream().filter(this::exists).count());
}
private boolean exists(String file)
diff --git a/src/test/java/de/medizininformatik_initiative/process/report/bpe/SearchBundleCheckServiceTest.java b/src/test/java/de/medizininformatik_initiative/process/report/bpe/SearchBundleCheckServiceTest.java
index f0db77b..2b8ae1f 100644
--- a/src/test/java/de/medizininformatik_initiative/process/report/bpe/SearchBundleCheckServiceTest.java
+++ b/src/test/java/de/medizininformatik_initiative/process/report/bpe/SearchBundleCheckServiceTest.java
@@ -16,7 +16,13 @@ public class SearchBundleCheckServiceTest
@Test
public void testValid()
{
- testValid("/fhir/Bundle/search-bundle.xml");
+ testValid("/fhir/Bundle/search-bundle-valid.xml");
+ }
+
+ @Test
+ public void testValidEncounterType()
+ {
+ testValid("/fhir/Bundle/search-bundle-valid-encounter-type.xml");
}
@Test
@@ -98,33 +104,21 @@ public void testInvalidDoubleDateValue()
}
@Test
- public void testValidV1_1()
- {
- testValid("/fhir/Bundle/search-bundle-v1.1.xml");
- }
-
- @Test
- public void testValidV1_1EncounterType()
- {
- testValid("/fhir/Bundle/search-bundle-v1.1-valid-encounter-type.xml");
- }
-
- @Test
- public void testInvalidV1_1SingleCode()
+ public void testInvalidSingleCode()
{
- testInvalid("/fhir/Bundle/search-bundle-v1.1-invalid-code-single.xml", "not limited to system");
+ testInvalid("/fhir/Bundle/search-bundle-invalid-code-single.xml", "not limited to system");
}
@Test
- public void testInvalidV1_1DoubleCode()
+ public void testInvalidDoubleCode()
{
- testInvalid("/fhir/Bundle/search-bundle-v1.1-invalid-code-double.xml", "not limited to system");
+ testInvalid("/fhir/Bundle/search-bundle-invalid-code-double.xml", "not limited to system");
}
@Test
- public void testInvalidV1_1CodeIngredient()
+ public void testInvalidCodeIngredient()
{
- testInvalid("/fhir/Bundle/search-bundle-v1.1-invalid-code-ingredient.xml", "not limited to system");
+ testInvalid("/fhir/Bundle/search-bundle-invalid-code-ingredient.xml", "not limited to system");
}
private void testValid(String pathToBundle)
diff --git a/src/test/java/de/medizininformatik_initiative/process/report/fhir/profile/SearchBundleProfileTest.java b/src/test/java/de/medizininformatik_initiative/process/report/fhir/profile/SearchBundleProfileTest.java
new file mode 100644
index 0000000..78ff3f0
--- /dev/null
+++ b/src/test/java/de/medizininformatik_initiative/process/report/fhir/profile/SearchBundleProfileTest.java
@@ -0,0 +1,71 @@
+package de.medizininformatik_initiative.process.report.fhir.profile;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.InputStream;
+import java.util.List;
+
+import org.hl7.fhir.r4.model.Bundle;
+import org.junit.ClassRule;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import ca.uhn.fhir.context.FhirContext;
+import ca.uhn.fhir.validation.ResultSeverityEnum;
+import ca.uhn.fhir.validation.ValidationResult;
+import de.medizininformatik_initiative.process.report.ReportProcessPluginDefinition;
+import dev.dsf.fhir.validation.ResourceValidator;
+import dev.dsf.fhir.validation.ResourceValidatorImpl;
+import dev.dsf.fhir.validation.ValidationSupportRule;
+
+public class SearchBundleProfileTest
+{
+ private static final Logger logger = LoggerFactory.getLogger(TaskProfileTest.class);
+ private static final ReportProcessPluginDefinition def = new ReportProcessPluginDefinition();
+
+ @ClassRule
+ public static final ValidationSupportRule validationRule = new ValidationSupportRule(def.getResourceVersion(),
+ def.getResourceReleaseDate(), List.of("search-bundle-report.xml", "search-bundle-response-report.xml"),
+ List.of("report.xml", "report-status.xml"),
+ List.of("report.xml", "report-status-receive.xml", "report-status-send.xml"));
+
+ private final ResourceValidator resourceValidator = new ResourceValidatorImpl(validationRule.getFhirContext(),
+ validationRule.getValidationSupport());
+
+ @Test
+ public void testSearchBundleProfileValid()
+ {
+ Bundle bundle = readBundle("/fhir/Bundle/search-bundle-valid.xml");
+
+ ValidationResult result = resourceValidator.validate(bundle);
+ ValidationSupportRule.logValidationMessages(logger, result);
+
+ assertEquals(0, result.getMessages().stream().filter(m -> ResultSeverityEnum.ERROR.equals(m.getSeverity())
+ || ResultSeverityEnum.FATAL.equals(m.getSeverity())).count());
+ }
+
+ @Test
+ public void testSearchBundleResponseProfileValid()
+ {
+ Bundle bundle = readBundle("/fhir/Bundle/search-bundle-response-valid.xml");
+
+ ValidationResult result = resourceValidator.validate(bundle);
+ ValidationSupportRule.logValidationMessages(logger, result);
+
+ assertEquals(0, result.getMessages().stream().filter(m -> ResultSeverityEnum.ERROR.equals(m.getSeverity())
+ || ResultSeverityEnum.FATAL.equals(m.getSeverity())).count());
+ }
+
+ private Bundle readBundle(String path)
+ {
+ try (InputStream in = getClass().getResourceAsStream(path))
+ {
+ return FhirContext.forR4().newXmlParser().parseResource(Bundle.class, in);
+ }
+ catch (Exception exception)
+ {
+ throw new RuntimeException("Reading bundle from path '" + path + "' failed", exception);
+ }
+ }
+}
diff --git a/src/test/java/de/medizininformatik_initiative/process/report/fhir/profile/TaskProfileTest.java b/src/test/java/de/medizininformatik_initiative/process/report/fhir/profile/TaskProfileTest.java
index 6777269..bed327f 100644
--- a/src/test/java/de/medizininformatik_initiative/process/report/fhir/profile/TaskProfileTest.java
+++ b/src/test/java/de/medizininformatik_initiative/process/report/fhir/profile/TaskProfileTest.java
@@ -6,6 +6,7 @@
import java.util.List;
import java.util.UUID;
+import org.hl7.fhir.r4.model.BooleanType;
import org.hl7.fhir.r4.model.Reference;
import org.hl7.fhir.r4.model.ResourceType;
import org.hl7.fhir.r4.model.StringType;
@@ -171,6 +172,22 @@ public void testTaskSendStartProcessProfileValid()
|| ResultSeverityEnum.FATAL.equals(m.getSeverity())).count());
}
+ @Test
+ public void testTaskSendStartProcessProfileValidAsDryRun()
+ {
+ Task task = createValidTaskSendStartProcess();
+ task.addInput().setValue(new BooleanType(true)).getType().addCoding()
+ .setSystem(ConstantsReport.CODESYSTEM_REPORT).setCode(ConstantsReport.CODESYSTEM_REPORT_VALUE_DRY_RUN);
+ task.addOutput(new ReportStatusGenerator()
+ .createReportStatusOutput(ConstantsReport.CODESYSTEM_REPORT_STATUS_VALUE_DRY_RUN));
+
+ ValidationResult result = resourceValidator.validate(task);
+ ValidationSupportRule.logValidationMessages(logger, result);
+
+ assertEquals(0, result.getMessages().stream().filter(m -> ResultSeverityEnum.ERROR.equals(m.getSeverity())
+ || ResultSeverityEnum.FATAL.equals(m.getSeverity())).count());
+ }
+
@Test
public void testTaskSendStartProcessProfileValidWithHrpIdentifier()
{
diff --git a/src/test/resources/fhir/Bundle/search-bundle-v1.1-invalid-code-double.xml b/src/test/resources/fhir/Bundle/search-bundle-invalid-code-double.xml
similarity index 91%
rename from src/test/resources/fhir/Bundle/search-bundle-v1.1-invalid-code-double.xml
rename to src/test/resources/fhir/Bundle/search-bundle-invalid-code-double.xml
index 2fa87a0..59749d5 100644
--- a/src/test/resources/fhir/Bundle/search-bundle-v1.1-invalid-code-double.xml
+++ b/src/test/resources/fhir/Bundle/search-bundle-invalid-code-double.xml
@@ -9,7 +9,7 @@
-
+
diff --git a/src/test/resources/fhir/Bundle/search-bundle-v1.1-invalid-code-ingredient.xml b/src/test/resources/fhir/Bundle/search-bundle-invalid-code-ingredient.xml
similarity index 91%
rename from src/test/resources/fhir/Bundle/search-bundle-v1.1-invalid-code-ingredient.xml
rename to src/test/resources/fhir/Bundle/search-bundle-invalid-code-ingredient.xml
index b397030..577d939 100644
--- a/src/test/resources/fhir/Bundle/search-bundle-v1.1-invalid-code-ingredient.xml
+++ b/src/test/resources/fhir/Bundle/search-bundle-invalid-code-ingredient.xml
@@ -9,7 +9,7 @@
-
+
diff --git a/src/test/resources/fhir/Bundle/search-bundle-v1.1-invalid-code-single.xml b/src/test/resources/fhir/Bundle/search-bundle-invalid-code-single.xml
similarity index 91%
rename from src/test/resources/fhir/Bundle/search-bundle-v1.1-invalid-code-single.xml
rename to src/test/resources/fhir/Bundle/search-bundle-invalid-code-single.xml
index a60fc43..f325ac5 100644
--- a/src/test/resources/fhir/Bundle/search-bundle-v1.1-invalid-code-single.xml
+++ b/src/test/resources/fhir/Bundle/search-bundle-invalid-code-single.xml
@@ -9,7 +9,7 @@
-
+
diff --git a/src/test/resources/fhir/Bundle/search-bundle-invalid-date-filter.xml b/src/test/resources/fhir/Bundle/search-bundle-invalid-date-filter.xml
index a807cf7..9536ada 100644
--- a/src/test/resources/fhir/Bundle/search-bundle-invalid-date-filter.xml
+++ b/src/test/resources/fhir/Bundle/search-bundle-invalid-date-filter.xml
@@ -10,8 +10,8 @@
-
-
+
+
diff --git a/src/test/resources/fhir/Bundle/search-bundle-invalid-date-value-double.xml b/src/test/resources/fhir/Bundle/search-bundle-invalid-date-value-double.xml
index a11867d..ebeed75 100644
--- a/src/test/resources/fhir/Bundle/search-bundle-invalid-date-value-double.xml
+++ b/src/test/resources/fhir/Bundle/search-bundle-invalid-date-value-double.xml
@@ -10,8 +10,8 @@
-
-
+
+
diff --git a/src/test/resources/fhir/Bundle/search-bundle-invalid-date-value-single.xml b/src/test/resources/fhir/Bundle/search-bundle-invalid-date-value-single.xml
index 048bb51..4836873 100644
--- a/src/test/resources/fhir/Bundle/search-bundle-invalid-date-value-single.xml
+++ b/src/test/resources/fhir/Bundle/search-bundle-invalid-date-value-single.xml
@@ -10,8 +10,8 @@
-
-
+
+
diff --git a/src/test/resources/fhir/Bundle/search-bundle-invalid-param.xml b/src/test/resources/fhir/Bundle/search-bundle-invalid-param.xml
index 2a5544d..5fd8014 100644
--- a/src/test/resources/fhir/Bundle/search-bundle-invalid-param.xml
+++ b/src/test/resources/fhir/Bundle/search-bundle-invalid-param.xml
@@ -10,8 +10,8 @@
-
-
+
+
diff --git a/src/test/resources/fhir/Bundle/search-bundle-invalid-request-method.xml b/src/test/resources/fhir/Bundle/search-bundle-invalid-request-method.xml
index 34aef0c..12cf4bf 100644
--- a/src/test/resources/fhir/Bundle/search-bundle-invalid-request-method.xml
+++ b/src/test/resources/fhir/Bundle/search-bundle-invalid-request-method.xml
@@ -10,8 +10,8 @@
-
-
+
+
diff --git a/src/test/resources/fhir/Bundle/search-bundle-invalid-resource-id-double.xml b/src/test/resources/fhir/Bundle/search-bundle-invalid-resource-id-double.xml
index fe17040..0d1f308 100644
--- a/src/test/resources/fhir/Bundle/search-bundle-invalid-resource-id-double.xml
+++ b/src/test/resources/fhir/Bundle/search-bundle-invalid-resource-id-double.xml
@@ -10,8 +10,8 @@
-
-
+
+
diff --git a/src/test/resources/fhir/Bundle/search-bundle-invalid-resource-id.xml b/src/test/resources/fhir/Bundle/search-bundle-invalid-resource-id.xml
index 785249c..e8766ae 100644
--- a/src/test/resources/fhir/Bundle/search-bundle-invalid-resource-id.xml
+++ b/src/test/resources/fhir/Bundle/search-bundle-invalid-resource-id.xml
@@ -10,8 +10,8 @@
-
-
+
+
diff --git a/src/test/resources/fhir/Bundle/search-bundle-invalid-resource.xml b/src/test/resources/fhir/Bundle/search-bundle-invalid-resource.xml
index ad33050..dc31662 100644
--- a/src/test/resources/fhir/Bundle/search-bundle-invalid-resource.xml
+++ b/src/test/resources/fhir/Bundle/search-bundle-invalid-resource.xml
@@ -10,8 +10,8 @@
-
-
+
+
diff --git a/src/test/resources/fhir/Bundle/search-bundle-invalid-summary-double.xml b/src/test/resources/fhir/Bundle/search-bundle-invalid-summary-double.xml
index 33ec49b..8d43073 100644
--- a/src/test/resources/fhir/Bundle/search-bundle-invalid-summary-double.xml
+++ b/src/test/resources/fhir/Bundle/search-bundle-invalid-summary-double.xml
@@ -10,8 +10,8 @@
-
-
+
+
diff --git a/src/test/resources/fhir/Bundle/search-bundle-invalid-summary-not-allowed.xml b/src/test/resources/fhir/Bundle/search-bundle-invalid-summary-not-allowed.xml
index df0cdc9..67781e3 100644
--- a/src/test/resources/fhir/Bundle/search-bundle-invalid-summary-not-allowed.xml
+++ b/src/test/resources/fhir/Bundle/search-bundle-invalid-summary-not-allowed.xml
@@ -10,8 +10,8 @@
-
-
+
+
diff --git a/src/test/resources/fhir/Bundle/search-bundle-invalid-summary-not-exists.xml b/src/test/resources/fhir/Bundle/search-bundle-invalid-summary-not-exists.xml
index b4385c6..6f8d513 100644
--- a/src/test/resources/fhir/Bundle/search-bundle-invalid-summary-not-exists.xml
+++ b/src/test/resources/fhir/Bundle/search-bundle-invalid-summary-not-exists.xml
@@ -10,8 +10,8 @@
-
-
+
+
diff --git a/src/test/resources/fhir/Bundle/search-bundle-invalid-summary-url-encoded-full.xml b/src/test/resources/fhir/Bundle/search-bundle-invalid-summary-url-encoded-full.xml
index 1605b03..ea73294 100644
--- a/src/test/resources/fhir/Bundle/search-bundle-invalid-summary-url-encoded-full.xml
+++ b/src/test/resources/fhir/Bundle/search-bundle-invalid-summary-url-encoded-full.xml
@@ -10,8 +10,8 @@
-
-
+
+
diff --git a/src/test/resources/fhir/Bundle/search-bundle-invalid-summary-url-encoded.xml b/src/test/resources/fhir/Bundle/search-bundle-invalid-summary-url-encoded.xml
index 74e6908..98b8fe1 100644
--- a/src/test/resources/fhir/Bundle/search-bundle-invalid-summary-url-encoded.xml
+++ b/src/test/resources/fhir/Bundle/search-bundle-invalid-summary-url-encoded.xml
@@ -10,8 +10,8 @@
-
-
+
+
diff --git a/src/test/resources/fhir/Bundle/search-bundle-response.xml b/src/test/resources/fhir/Bundle/search-bundle-response-valid.xml
similarity index 99%
rename from src/test/resources/fhir/Bundle/search-bundle-response.xml
rename to src/test/resources/fhir/Bundle/search-bundle-response-valid.xml
index 6c0413b..31ac6ca 100644
--- a/src/test/resources/fhir/Bundle/search-bundle-response.xml
+++ b/src/test/resources/fhir/Bundle/search-bundle-response-valid.xml
@@ -2,7 +2,7 @@
-
+
diff --git a/src/test/resources/fhir/Bundle/search-bundle-v1.1.xml b/src/test/resources/fhir/Bundle/search-bundle-v1.1.xml
index adf8b27..94cd1e2 100644
--- a/src/test/resources/fhir/Bundle/search-bundle-v1.1.xml
+++ b/src/test/resources/fhir/Bundle/search-bundle-v1.1.xml
@@ -9,7 +9,7 @@
-
+
diff --git a/src/test/resources/fhir/Bundle/search-bundle-v1.2.xml b/src/test/resources/fhir/Bundle/search-bundle-v1.2.xml
new file mode 100644
index 0000000..4d53649
--- /dev/null
+++ b/src/test/resources/fhir/Bundle/search-bundle-v1.2.xml
@@ -0,0 +1,634 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/test/resources/fhir/Bundle/search-bundle-v1.1-valid-encounter-type.xml b/src/test/resources/fhir/Bundle/search-bundle-valid-encounter-type.xml
similarity index 94%
rename from src/test/resources/fhir/Bundle/search-bundle-v1.1-valid-encounter-type.xml
rename to src/test/resources/fhir/Bundle/search-bundle-valid-encounter-type.xml
index 55f166f..2295f0a 100644
--- a/src/test/resources/fhir/Bundle/search-bundle-v1.1-valid-encounter-type.xml
+++ b/src/test/resources/fhir/Bundle/search-bundle-valid-encounter-type.xml
@@ -9,7 +9,7 @@
-
+
diff --git a/src/test/resources/fhir/Bundle/search-bundle-valid.xml b/src/test/resources/fhir/Bundle/search-bundle-valid.xml
new file mode 100644
index 0000000..7a02a7a
--- /dev/null
+++ b/src/test/resources/fhir/Bundle/search-bundle-valid.xml
@@ -0,0 +1,634 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/test/resources/fhir/Bundle/search-bundle.xml b/src/test/resources/fhir/Bundle/search-bundle.xml
deleted file mode 100644
index b2b6cc0..0000000
--- a/src/test/resources/fhir/Bundle/search-bundle.xml
+++ /dev/null
@@ -1,539 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file