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

Commit b661924

Browse files
committed
profile fixes and additional Task validation tests
1 parent 647c40d commit b661924

4 files changed

Lines changed: 220 additions & 4 deletions

File tree

codex-process-data-transfer/src/main/resources/fhir/StructureDefinition/num-codex-task-start-data-receive.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<differential>
2222
<element id="Task.instantiatesUri">
2323
<path value="Task.instantiatesUri" />
24-
<fixedUri value="http://netzwerk-universitaetsmedizin.de/bpe/Process/dataSend/${version}" />
24+
<fixedUri value="http://netzwerk-universitaetsmedizin.de/bpe/Process/dataReceive/${version}" />
2525
</element>
2626
<element id="Task.input">
2727
<path value="Task.input" />

codex-process-data-transfer/src/main/resources/fhir/StructureDefinition/num-codex-task-start-data-send.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
<element id="Task.input:pseudonym.value[x].system">
7272
<path value="Task.input.value[x].system" />
7373
<min value="1" />
74-
<fixedUri value="http://netzwerk-universitaetsmedizin.de/fhir/NamingSystem/diz-pseudonym" />
74+
<fixedUri value="http://netzwerk-universitaetsmedizin.de/fhir/NamingSystem/dic-pseudonym" />
7575
</element>
7676
<element id="Task.input:pseudonym.value[x].value">
7777
<path value="Task.input.value[x].value" />
@@ -80,6 +80,7 @@
8080
<element id="Task.input:export-from">
8181
<path value="Task.input" />
8282
<sliceName value="export-from" />
83+
<min value="0" />
8384
<max value="1" />
8485
</element>
8586
<element id="Task.input:export-from.type">

codex-process-data-transfer/src/main/resources/fhir/StructureDefinition/num-codex-task-start-data-translate.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<differential>
2222
<element id="Task.instantiatesUri">
2323
<path value="Task.instantiatesUri" />
24-
<fixedUri value="http://netzwerk-universitaetsmedizin.de/bpe/Process/dataSend/${version}" />
24+
<fixedUri value="http://netzwerk-universitaetsmedizin.de/bpe/Process/dataTranslate/${version}" />
2525
</element>
2626
<element id="Task.input">
2727
<path value="Task.input" />
@@ -83,7 +83,7 @@
8383
<element id="Task.input:pseudonym.value[x].system">
8484
<path value="Task.input.value[x].system" />
8585
<min value="1" />
86-
<fixedUri value="http://netzwerk-universitaetsmedizin.de/fhir/NamingSystem/diz-pseudonym" />
86+
<fixedUri value="http://netzwerk-universitaetsmedizin.de/fhir/NamingSystem/dic-pseudonym" />
8787
</element>
8888
<element id="Task.input:pseudonym.value[x].value">
8989
<path value="Task.input.value[x].value" />

codex-process-data-transfer/src/test/java/de/netzwerk_universitaetsmedizin/codex/processes/fhir/profile/TaskProfileTest.java

Lines changed: 215 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,46 @@
11
package de.netzwerk_universitaetsmedizin.codex.processes.fhir.profile;
22

33
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_DATA_REFERENCE;
45
import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer.CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_EXPORT_FROM;
56
import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer.CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_EXPORT_TO;
7+
import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer.CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_PSEUDONYM;
8+
import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer.NAMING_SYSTEM_NUM_CODEX_CRR_PSEUDONYM;
9+
import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer.NAMING_SYSTEM_NUM_CODEX_DIC_PSEUDONYM;
10+
import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer.PROFILE_NUM_CODEX_TASK_DATA_RECEIVE_PROCESS_URI_AND_LATEST_VERSION;
11+
import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer.PROFILE_NUM_CODEX_TASK_DATA_SEND_PROCESS_URI_AND_LATEST_VERSION;
12+
import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer.PROFILE_NUM_CODEX_TASK_DATA_TRANSLATE_PROCESS_URI_AND_LATEST_VERSION;
613
import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer.PROFILE_NUM_CODEX_TASK_DATA_TRIGGER_PROCESS_URI_AND_LATEST_VERSION;
14+
import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer.PROFILE_NUM_CODEX_TASK_START_DATA_RECEIVE;
15+
import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer.PROFILE_NUM_CODEX_TASK_START_DATA_RECEIVE_MESSAGE_NAME;
16+
import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer.PROFILE_NUM_CODEX_TASK_START_DATA_SEND;
17+
import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer.PROFILE_NUM_CODEX_TASK_START_DATA_SEND_MESSAGE_NAME;
18+
import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer.PROFILE_NUM_CODEX_TASK_START_DATA_TRANSLATE;
19+
import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer.PROFILE_NUM_CODEX_TASK_START_DATA_TRANSLATE_MESSAGE_NAME;
720
import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer.PROFILE_NUM_CODEX_TASK_START_DATA_TRIGGER;
821
import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer.PROFILE_NUM_CODEX_TASK_START_DATA_TRIGGER_MESSAGE_NAME;
22+
import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer.PROFILE_NUM_CODEX_TASK_STOP_DATA_TRIGGER;
23+
import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.ConstantsDataTransfer.PROFILE_NUM_CODEX_TASK_STOP_DATA_TRIGGER_MESSAGE_NAME;
924
import static de.netzwerk_universitaetsmedizin.codex.processes.data_transfer.DataTransferProcessPluginDefinition.VERSION;
1025
import static org.highmed.dsf.bpe.ConstantsBase.CODESYSTEM_HIGHMED_BPMN;
26+
import static org.highmed.dsf.bpe.ConstantsBase.CODESYSTEM_HIGHMED_BPMN_VALUE_BUSINESS_KEY;
1127
import static org.highmed.dsf.bpe.ConstantsBase.CODESYSTEM_HIGHMED_BPMN_VALUE_MESSAGE_NAME;
1228
import static org.highmed.dsf.bpe.ConstantsBase.NAMINGSYSTEM_HIGHMED_ORGANIZATION_IDENTIFIER;
1329
import static org.junit.Assert.assertEquals;
1430

1531
import java.util.Arrays;
1632
import java.util.Date;
33+
import java.util.UUID;
1734

1835
import org.highmed.dsf.fhir.validation.ResourceValidator;
1936
import org.highmed.dsf.fhir.validation.ResourceValidatorImpl;
2037
import org.highmed.dsf.fhir.validation.ValidationSupportRule;
2138
import org.hl7.fhir.r4.model.DateTimeType;
39+
import org.hl7.fhir.r4.model.DateType;
40+
import org.hl7.fhir.r4.model.IdType;
41+
import org.hl7.fhir.r4.model.Identifier;
2242
import org.hl7.fhir.r4.model.InstantType;
43+
import org.hl7.fhir.r4.model.Reference;
2344
import org.hl7.fhir.r4.model.ResourceType;
2445
import org.hl7.fhir.r4.model.StringType;
2546
import org.hl7.fhir.r4.model.Task;
@@ -30,6 +51,7 @@
3051
import org.slf4j.Logger;
3152
import org.slf4j.LoggerFactory;
3253

54+
import ca.uhn.fhir.model.api.TemporalPrecisionEnum;
3355
import ca.uhn.fhir.validation.ResultSeverityEnum;
3456
import ca.uhn.fhir.validation.ValidationResult;
3557

@@ -50,10 +72,17 @@ public class TaskProfileTest
5072
private ResourceValidator resourceValidator = new ResourceValidatorImpl(validationRule.getFhirContext(),
5173
validationRule.getValidationSupport());
5274

75+
private void logTask(Task task)
76+
{
77+
logger.debug("task: {}",
78+
validationRule.getFhirContext().newXmlParser().setPrettyPrint(true).encodeResourceToString(task));
79+
}
80+
5381
@Test
5482
public void testTaskStartDataTriggerValid() throws Exception
5583
{
5684
Task task = createValidTaskStartDataTrigger();
85+
logTask(task);
5786

5887
ValidationResult result = resourceValidator.validate(task);
5988
ValidationSupportRule.logValidationMessages(logger, result);
@@ -69,6 +98,7 @@ public void testTaskStartDataTriggerWithOutputValid() throws Exception
6998
task.addOutput().setValue(new InstantType(new Date())).getType().addCoding()
7099
.setSystem(CODESYSTEM_NUM_CODEX_DATA_TRANSFER)
71100
.setCode(CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_EXPORT_TO);
101+
logTask(task);
72102

73103
ValidationResult result = resourceValidator.validate(task);
74104
ValidationSupportRule.logValidationMessages(logger, result);
@@ -97,4 +127,189 @@ private Task createValidTaskStartDataTrigger()
97127

98128
return task;
99129
}
130+
131+
@Test
132+
public void testTaskStopDataTriggerValid() throws Exception
133+
{
134+
Task task = createValidTaskStopDataTrigger();
135+
logTask(task);
136+
137+
ValidationResult result = resourceValidator.validate(task);
138+
ValidationSupportRule.logValidationMessages(logger, result);
139+
140+
assertEquals(0, result.getMessages().stream().filter(m -> ResultSeverityEnum.ERROR.equals(m.getSeverity())
141+
|| ResultSeverityEnum.FATAL.equals(m.getSeverity())).count());
142+
}
143+
144+
private Task createValidTaskStopDataTrigger()
145+
{
146+
Task task = new Task();
147+
task.getMeta().addProfile(PROFILE_NUM_CODEX_TASK_STOP_DATA_TRIGGER);
148+
task.setInstantiatesUri(PROFILE_NUM_CODEX_TASK_DATA_TRIGGER_PROCESS_URI_AND_LATEST_VERSION);
149+
task.setStatus(TaskStatus.REQUESTED);
150+
task.setIntent(TaskIntent.ORDER);
151+
task.setAuthoredOn(new Date());
152+
task.getRequester().setType(ResourceType.Organization.name()).getIdentifier()
153+
.setSystem(NAMINGSYSTEM_HIGHMED_ORGANIZATION_IDENTIFIER).setValue("Test_DIC");
154+
task.getRestriction().addRecipient().setType(ResourceType.Organization.name()).getIdentifier()
155+
.setSystem(NAMINGSYSTEM_HIGHMED_ORGANIZATION_IDENTIFIER).setValue("Test_DIC");
156+
task.addInput().setValue(new StringType(PROFILE_NUM_CODEX_TASK_STOP_DATA_TRIGGER_MESSAGE_NAME)).getType()
157+
.addCoding().setSystem(CODESYSTEM_HIGHMED_BPMN).setCode(CODESYSTEM_HIGHMED_BPMN_VALUE_MESSAGE_NAME);
158+
task.addInput().setValue(new StringType(UUID.randomUUID().toString())).getType().addCoding()
159+
.setSystem(CODESYSTEM_HIGHMED_BPMN).setCode(CODESYSTEM_HIGHMED_BPMN_VALUE_BUSINESS_KEY);
160+
161+
return task;
162+
}
163+
164+
@Test
165+
public void testTaskStartDataSendValid() throws Exception
166+
{
167+
Task task = createValidTaskStartDataSend();
168+
logTask(task);
169+
170+
ValidationResult result = resourceValidator.validate(task);
171+
ValidationSupportRule.logValidationMessages(logger, result);
172+
173+
assertEquals(0, result.getMessages().stream().filter(m -> ResultSeverityEnum.ERROR.equals(m.getSeverity())
174+
|| ResultSeverityEnum.FATAL.equals(m.getSeverity())).count());
175+
}
176+
177+
@Test
178+
public void testTaskStartDataSendValidWithBusinessKey() throws Exception
179+
{
180+
Task task = createValidTaskStartDataSend();
181+
task.addInput().setValue(new StringType(UUID.randomUUID().toString())).getType().addCoding()
182+
.setSystem(CODESYSTEM_HIGHMED_BPMN).setCode(CODESYSTEM_HIGHMED_BPMN_VALUE_BUSINESS_KEY);
183+
logTask(task);
184+
185+
ValidationResult result = resourceValidator.validate(task);
186+
ValidationSupportRule.logValidationMessages(logger, result);
187+
188+
assertEquals(0, result.getMessages().stream().filter(m -> ResultSeverityEnum.ERROR.equals(m.getSeverity())
189+
|| ResultSeverityEnum.FATAL.equals(m.getSeverity())).count());
190+
}
191+
192+
@Test
193+
public void testTaskStartDataSendValidWithExportFrom() throws Exception
194+
{
195+
Task task = createValidTaskStartDataSend();
196+
task.addInput().setValue(new DateType(new Date(), TemporalPrecisionEnum.DAY)).getType().addCoding()
197+
.setSystem(CODESYSTEM_NUM_CODEX_DATA_TRANSFER)
198+
.setCode(CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_EXPORT_FROM);
199+
logTask(task);
200+
201+
ValidationResult result = resourceValidator.validate(task);
202+
ValidationSupportRule.logValidationMessages(logger, result);
203+
204+
assertEquals(0, result.getMessages().stream().filter(m -> ResultSeverityEnum.ERROR.equals(m.getSeverity())
205+
|| ResultSeverityEnum.FATAL.equals(m.getSeverity())).count());
206+
}
207+
208+
private Task createValidTaskStartDataSend()
209+
{
210+
Task task = new Task();
211+
task.getMeta().addProfile(PROFILE_NUM_CODEX_TASK_START_DATA_SEND);
212+
task.setInstantiatesUri(PROFILE_NUM_CODEX_TASK_DATA_SEND_PROCESS_URI_AND_LATEST_VERSION);
213+
task.setStatus(TaskStatus.REQUESTED);
214+
task.setIntent(TaskIntent.ORDER);
215+
task.setAuthoredOn(new Date());
216+
task.getRequester().setType(ResourceType.Organization.name()).getIdentifier()
217+
.setSystem(NAMINGSYSTEM_HIGHMED_ORGANIZATION_IDENTIFIER).setValue("Test_DIC");
218+
task.getRestriction().addRecipient().setType(ResourceType.Organization.name()).getIdentifier()
219+
.setSystem(NAMINGSYSTEM_HIGHMED_ORGANIZATION_IDENTIFIER).setValue("Test_DIC");
220+
task.addInput().setValue(new StringType(PROFILE_NUM_CODEX_TASK_START_DATA_SEND_MESSAGE_NAME)).getType()
221+
.addCoding().setSystem(CODESYSTEM_HIGHMED_BPMN).setCode(CODESYSTEM_HIGHMED_BPMN_VALUE_MESSAGE_NAME);
222+
// business-key optional
223+
// task.addInput().setValue(new StringType(UUID.randomUUID().toString())).getType().addCoding()
224+
// .setSystem(CODESYSTEM_HIGHMED_BPMN).setCode(CODESYSTEM_HIGHMED_BPMN_VALUE_BUSINESS_KEY);
225+
task.addInput()
226+
.setValue(new Identifier().setSystem(NAMING_SYSTEM_NUM_CODEX_DIC_PSEUDONYM).setValue("source/original"))
227+
.getType().addCoding().setSystem(CODESYSTEM_NUM_CODEX_DATA_TRANSFER)
228+
.setCode(CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_PSEUDONYM);
229+
task.addInput().setValue(new InstantType(new Date())).getType().addCoding()
230+
.setSystem(CODESYSTEM_NUM_CODEX_DATA_TRANSFER)
231+
.setCode(CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_EXPORT_TO);
232+
233+
return task;
234+
}
235+
236+
@Test
237+
public void testTaskStartDataTranslateValid() throws Exception
238+
{
239+
Task task = createValidTaskStartDataTranslate();
240+
logTask(task);
241+
242+
ValidationResult result = resourceValidator.validate(task);
243+
ValidationSupportRule.logValidationMessages(logger, result);
244+
245+
assertEquals(0, result.getMessages().stream().filter(m -> ResultSeverityEnum.ERROR.equals(m.getSeverity())
246+
|| ResultSeverityEnum.FATAL.equals(m.getSeverity())).count());
247+
}
248+
249+
private Task createValidTaskStartDataTranslate()
250+
{
251+
Task task = new Task();
252+
task.getMeta().addProfile(PROFILE_NUM_CODEX_TASK_START_DATA_TRANSLATE);
253+
task.setInstantiatesUri(PROFILE_NUM_CODEX_TASK_DATA_TRANSLATE_PROCESS_URI_AND_LATEST_VERSION);
254+
task.setStatus(TaskStatus.REQUESTED);
255+
task.setIntent(TaskIntent.ORDER);
256+
task.setAuthoredOn(new Date());
257+
task.getRequester().setType(ResourceType.Organization.name()).getIdentifier()
258+
.setSystem(NAMINGSYSTEM_HIGHMED_ORGANIZATION_IDENTIFIER).setValue("Test_DIC");
259+
task.getRestriction().addRecipient().setType(ResourceType.Organization.name()).getIdentifier()
260+
.setSystem(NAMINGSYSTEM_HIGHMED_ORGANIZATION_IDENTIFIER).setValue("Test_GTH");
261+
task.addInput().setValue(new StringType(PROFILE_NUM_CODEX_TASK_START_DATA_TRANSLATE_MESSAGE_NAME)).getType()
262+
.addCoding().setSystem(CODESYSTEM_HIGHMED_BPMN).setCode(CODESYSTEM_HIGHMED_BPMN_VALUE_MESSAGE_NAME);
263+
task.addInput().setValue(new StringType(UUID.randomUUID().toString())).getType().addCoding()
264+
.setSystem(CODESYSTEM_HIGHMED_BPMN).setCode(CODESYSTEM_HIGHMED_BPMN_VALUE_BUSINESS_KEY);
265+
task.addInput()
266+
.setValue(new Identifier().setSystem(NAMING_SYSTEM_NUM_CODEX_DIC_PSEUDONYM).setValue("source/original"))
267+
.getType().addCoding().setSystem(CODESYSTEM_NUM_CODEX_DATA_TRANSFER)
268+
.setCode(CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_PSEUDONYM);
269+
task.addInput().setValue(new Reference(new IdType("https://dic", "Binary", UUID.randomUUID().toString(), "1")))
270+
.getType().addCoding().setSystem(CODESYSTEM_NUM_CODEX_DATA_TRANSFER)
271+
.setCode(CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_DATA_REFERENCE);
272+
273+
return task;
274+
}
275+
276+
@Test
277+
public void testTaskStartDataReceiveValid() throws Exception
278+
{
279+
Task task = createValidTaskStartDataReceive();
280+
logTask(task);
281+
282+
ValidationResult result = resourceValidator.validate(task);
283+
ValidationSupportRule.logValidationMessages(logger, result);
284+
285+
assertEquals(0, result.getMessages().stream().filter(m -> ResultSeverityEnum.ERROR.equals(m.getSeverity())
286+
|| ResultSeverityEnum.FATAL.equals(m.getSeverity())).count());
287+
}
288+
289+
private Task createValidTaskStartDataReceive()
290+
{
291+
Task task = new Task();
292+
task.getMeta().addProfile(PROFILE_NUM_CODEX_TASK_START_DATA_RECEIVE);
293+
task.setInstantiatesUri(PROFILE_NUM_CODEX_TASK_DATA_RECEIVE_PROCESS_URI_AND_LATEST_VERSION);
294+
task.setStatus(TaskStatus.REQUESTED);
295+
task.setIntent(TaskIntent.ORDER);
296+
task.setAuthoredOn(new Date());
297+
task.getRequester().setType(ResourceType.Organization.name()).getIdentifier()
298+
.setSystem(NAMINGSYSTEM_HIGHMED_ORGANIZATION_IDENTIFIER).setValue("Test_GTH");
299+
task.getRestriction().addRecipient().setType(ResourceType.Organization.name()).getIdentifier()
300+
.setSystem(NAMINGSYSTEM_HIGHMED_ORGANIZATION_IDENTIFIER).setValue("Test_CRR");
301+
task.addInput().setValue(new StringType(PROFILE_NUM_CODEX_TASK_START_DATA_RECEIVE_MESSAGE_NAME)).getType()
302+
.addCoding().setSystem(CODESYSTEM_HIGHMED_BPMN).setCode(CODESYSTEM_HIGHMED_BPMN_VALUE_MESSAGE_NAME);
303+
task.addInput().setValue(new StringType(UUID.randomUUID().toString())).getType().addCoding()
304+
.setSystem(CODESYSTEM_HIGHMED_BPMN).setCode(CODESYSTEM_HIGHMED_BPMN_VALUE_BUSINESS_KEY);
305+
task.addInput()
306+
.setValue(new Identifier().setSystem(NAMING_SYSTEM_NUM_CODEX_CRR_PSEUDONYM).setValue("target/original"))
307+
.getType().addCoding().setSystem(CODESYSTEM_NUM_CODEX_DATA_TRANSFER)
308+
.setCode(CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_PSEUDONYM);
309+
task.addInput().setValue(new Reference(new IdType("https://gth", "Binary", UUID.randomUUID().toString(), "1")))
310+
.getType().addCoding().setSystem(CODESYSTEM_NUM_CODEX_DATA_TRANSFER)
311+
.setCode(CODESYSTEM_NUM_CODEX_DATA_TRANSFER_VALUE_DATA_REFERENCE);
312+
313+
return task;
314+
}
100315
}

0 commit comments

Comments
 (0)