From 50aa1a62c71f98f530a471fa2492dbeff5c4e84c Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Fri, 13 Oct 2023 12:31:06 +0200
Subject: [PATCH] OZG-4457 generate response after accepting antrag from
 Enterperise Adapter

---
 .../java/de/ozgcloud/eingang/Application.java |  3 +
 .../eingang/common/formdata/FormHeader.java   |  1 +
 .../vorgang}/VorgangNummerSupplier.java       |  4 +-
 .../DeleteOnCloseInputStreamTest.java         | 13 ++++-
 .../formdata/FormHeaderTestFactory.java       |  2 +
 .../vorgang}/VorgangNummerSupplierTest.java   |  2 +-
 .../org.junit.jupiter.api.extension.Extension |  1 +
 .../test/resources/junit-platform.properties  |  1 +
 .../enterprise/entry/EntryController.java     | 32 ++++++++++-
 .../enterprise/entry/EntryResponse.java       | 23 ++++++++
 .../enterprise/entry/EntryControllerTest.java | 55 ++++++++++++++++++-
 .../entry/EntryResponseTestFactory.java       | 16 ++++++
 .../entry/ResponseVorgangTestFactory.java     | 24 ++++++++
 .../formcycle-adapter-impl/pom.xml            |  2 +
 .../eingang/formcycle/FormDataController.java |  1 +
 .../formcycle/FormDataControllerTest.java     |  1 +
 .../eingang/router/VorgangRemoteService.java  |  3 +-
 .../eingang/router/VorgangService.java        |  5 +-
 .../router/VorgangRemoteServiceTest.java      |  4 +-
 .../eingang/semantik/SemantikAdapter.java     |  4 +-
 20 files changed, 180 insertions(+), 17 deletions(-)
 rename {formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle => common/src/main/java/de/ozgcloud/eingang/common/vorgang}/VorgangNummerSupplier.java (91%)
 rename {formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle => common/src/test/java/de/ozgcloud/eingang/common/vorgang}/VorgangNummerSupplierTest.java (97%)
 create mode 100644 common/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension
 create mode 100644 common/src/test/resources/junit-platform.properties
 create mode 100644 enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/EntryResponse.java
 create mode 100644 enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/EntryResponseTestFactory.java
 create mode 100644 enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/ResponseVorgangTestFactory.java

diff --git a/common/src/main/java/de/ozgcloud/eingang/Application.java b/common/src/main/java/de/ozgcloud/eingang/Application.java
index 9ba0845dd..164da65a2 100644
--- a/common/src/main/java/de/ozgcloud/eingang/Application.java
+++ b/common/src/main/java/de/ozgcloud/eingang/Application.java
@@ -23,6 +23,8 @@
  */
 package de.ozgcloud.eingang;
 
+import java.util.TimeZone;
+
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.scheduling.annotation.EnableScheduling;
@@ -32,6 +34,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
 public class Application {
 
 	public static void main(String[] args) {
+		TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
 		SpringApplication.run(Application.class, args);
 	}
 }
diff --git a/common/src/main/java/de/ozgcloud/eingang/common/formdata/FormHeader.java b/common/src/main/java/de/ozgcloud/eingang/common/formdata/FormHeader.java
index 59c9ff40d..24b0e7276 100644
--- a/common/src/main/java/de/ozgcloud/eingang/common/formdata/FormHeader.java
+++ b/common/src/main/java/de/ozgcloud/eingang/common/formdata/FormHeader.java
@@ -37,6 +37,7 @@ import lombok.ToString;
 public class FormHeader {
 
 	private String requestId;
+	private String vorgangNummer;
 	@Builder.Default
 	private ZonedDateTime createdAt = ZonedDateTime.now();
 	private String formId;
diff --git a/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle/VorgangNummerSupplier.java b/common/src/main/java/de/ozgcloud/eingang/common/vorgang/VorgangNummerSupplier.java
similarity index 91%
rename from formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle/VorgangNummerSupplier.java
rename to common/src/main/java/de/ozgcloud/eingang/common/vorgang/VorgangNummerSupplier.java
index b7f953e97..5d1468262 100644
--- a/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle/VorgangNummerSupplier.java
+++ b/common/src/main/java/de/ozgcloud/eingang/common/vorgang/VorgangNummerSupplier.java
@@ -1,4 +1,4 @@
-package de.ozgcloud.eingang.formcycle;
+package de.ozgcloud.eingang.common.vorgang;
 
 import java.time.Instant;
 import java.time.LocalDate;
@@ -6,7 +6,7 @@ import java.time.LocalDate;
 import org.springframework.stereotype.Component;
 
 @Component
-class VorgangNummerSupplier {
+public class VorgangNummerSupplier {
 
 	static final String BASE30_ALPHABET = "23456789ABCDEFGHJKMNPQRSTVWXYZ";
 	static final int SUFFIX_LENGTH = 6;
diff --git a/common/src/test/java/de/ozgcloud/eingang/common/formdata/DeleteOnCloseInputStreamTest.java b/common/src/test/java/de/ozgcloud/eingang/common/formdata/DeleteOnCloseInputStreamTest.java
index 62d595e59..b7b7515b2 100644
--- a/common/src/test/java/de/ozgcloud/eingang/common/formdata/DeleteOnCloseInputStreamTest.java
+++ b/common/src/test/java/de/ozgcloud/eingang/common/formdata/DeleteOnCloseInputStreamTest.java
@@ -3,17 +3,26 @@ package de.ozgcloud.eingang.common.formdata;
 import static org.assertj.core.api.Assertions.*;
 
 import java.io.File;
+import java.io.IOException;
 
 import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
 
 import de.itvsh.kop.common.errorhandling.TechnicalException;
 
 class DeleteOnCloseInputStreamTest {
 
-	@InjectMocks
 	private DeleteOnCloseInputStream stream;
 
+	@Test
+	void shouldDeleteFileOnClose() throws IOException {
+		File file = File.createTempFile("Test", "test");
+		stream = new DeleteOnCloseInputStream(file);
+
+		stream.close();
+
+		assertThat(file).doesNotExist();
+	}
+
 	@Test
 	void shouldThrowException() {
 		var notExists = new File("notExists");
diff --git a/common/src/test/java/de/ozgcloud/eingang/common/formdata/FormHeaderTestFactory.java b/common/src/test/java/de/ozgcloud/eingang/common/formdata/FormHeaderTestFactory.java
index 676210d67..cf79e4032 100644
--- a/common/src/test/java/de/ozgcloud/eingang/common/formdata/FormHeaderTestFactory.java
+++ b/common/src/test/java/de/ozgcloud/eingang/common/formdata/FormHeaderTestFactory.java
@@ -35,6 +35,7 @@ public class FormHeaderTestFactory {
 	public static final String FORM_NAME = "formName";
 	public static final String FORM_ID = "formId";
 	public static final String REQUEST_ID = "requestId";
+	public static final String VORGANG_NUMMER = "ABCD-1234";
 	public static final ZonedDateTime CREATED_AT = ZonedDateTime.now();
 
 	public static FormHeader create() {
@@ -44,6 +45,7 @@ public class FormHeaderTestFactory {
 	public static FormHeader.FormHeaderBuilder createBuilder() {
 		return FormHeader.builder()
 				.requestId(REQUEST_ID)
+				.vorgangNummer(VORGANG_NUMMER)
 				.createdAt(CREATED_AT)
 				.formId(FORM_ID)
 				.formName(FORM_NAME)
diff --git a/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/VorgangNummerSupplierTest.java b/common/src/test/java/de/ozgcloud/eingang/common/vorgang/VorgangNummerSupplierTest.java
similarity index 97%
rename from formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/VorgangNummerSupplierTest.java
rename to common/src/test/java/de/ozgcloud/eingang/common/vorgang/VorgangNummerSupplierTest.java
index 568e82353..d474cd190 100644
--- a/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/VorgangNummerSupplierTest.java
+++ b/common/src/test/java/de/ozgcloud/eingang/common/vorgang/VorgangNummerSupplierTest.java
@@ -1,4 +1,4 @@
-package de.ozgcloud.eingang.formcycle;
+package de.ozgcloud.eingang.common.vorgang;
 
 import static org.assertj.core.api.Assertions.*;
 import static org.mockito.Mockito.*;
diff --git a/common/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension b/common/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension
new file mode 100644
index 000000000..79b126e6c
--- /dev/null
+++ b/common/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension
@@ -0,0 +1 @@
+org.mockito.junit.jupiter.MockitoExtension
\ No newline at end of file
diff --git a/common/src/test/resources/junit-platform.properties b/common/src/test/resources/junit-platform.properties
new file mode 100644
index 000000000..1cebb76d5
--- /dev/null
+++ b/common/src/test/resources/junit-platform.properties
@@ -0,0 +1 @@
+junit.jupiter.extensions.autodetection.enabled = true
\ No newline at end of file
diff --git a/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/EntryController.java b/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/EntryController.java
index 47febc1e9..20b6563bd 100644
--- a/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/EntryController.java
+++ b/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/EntryController.java
@@ -1,6 +1,7 @@
 package de.ozgcloud.eingang.enterprise.entry;
 
 import java.io.IOException;
+import java.time.ZonedDateTime;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.io.Resource;
@@ -13,6 +14,9 @@ import org.springframework.web.bind.annotation.RequestPart;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.ResponseStatus;
 
+import de.ozgcloud.eingang.common.formdata.FormData;
+import de.ozgcloud.eingang.common.vorgang.VorgangNummerSupplier;
+import de.ozgcloud.eingang.enterprise.entry.EntryResponse.ResponseVorgang;
 import de.ozgcloud.eingang.semantik.SemantikAdapter;
 
 @Controller
@@ -20,17 +24,41 @@ import de.ozgcloud.eingang.semantik.SemantikAdapter;
 @RequestMapping("antrag")
 public class EntryController {
 
+	private static final String STARTING_STATUS = "NEU";
+
 	@Autowired
 	private EntryDataMapper mapper;
 
 	@Autowired
 	private SemantikAdapter semantikAdapter;
+	@Autowired
+	private VorgangNummerSupplier vorgangNummerSupplier;
 
 	@ResponseStatus(HttpStatus.ACCEPTED)
 	@PostMapping(consumes = "multipart/form-data", produces = MediaType.APPLICATION_JSON_VALUE)
-	public void receiveAntrag(@RequestPart Resource formData) throws IOException {
+	public EntryResponse receiveAntrag(@RequestPart Resource formData) throws IOException {
 		var mapped = mapper.mapEntryData(formData.getInputStream());
+		mapped = addVorgangNummer(mapped);
+
+		var vorgangId = semantikAdapter.processFormData(mapped);
+
+		return buildResponse(mapped, vorgangId);
+	}
+
+	private FormData addVorgangNummer(FormData formData) {
+		var header = formData.getHeader().toBuilder().vorgangNummer(vorgangNummerSupplier.get()).build();
+		return formData.toBuilder().header(header).build();
+	}
 
-		semantikAdapter.processFormData(mapped);
+	EntryResponse buildResponse(FormData formData, String vorgangId) {
+		return EntryResponse.builder()
+				.transactionId(formData.getHeader().getRequestId())
+				.vorgang(ResponseVorgang.builder()
+						.vorgangId(vorgangId)
+						.vorgangNummer(formData.getHeader().getVorgangNummer())
+						.status(STARTING_STATUS)
+						.statusSince(ZonedDateTime.now().withNano(0))
+						.build())
+				.build();
 	}
 }
diff --git a/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/EntryResponse.java b/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/EntryResponse.java
new file mode 100644
index 000000000..840df7a6d
--- /dev/null
+++ b/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/EntryResponse.java
@@ -0,0 +1,23 @@
+package de.ozgcloud.eingang.enterprise.entry;
+
+import java.time.ZonedDateTime;
+
+import lombok.Builder;
+import lombok.Getter;
+
+@Builder
+@Getter
+class EntryResponse {
+
+	private String transactionId;
+	private ResponseVorgang vorgang;
+
+	@Builder
+	@Getter
+	static class ResponseVorgang {
+		private String vorgangId;
+		private String vorgangNummer;
+		private String status;
+		private ZonedDateTime statusSince;
+	}
+}
diff --git a/enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/EntryControllerTest.java b/enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/EntryControllerTest.java
index 19708556d..7086aee89 100644
--- a/enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/EntryControllerTest.java
+++ b/enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/EntryControllerTest.java
@@ -16,6 +16,8 @@ import org.mockito.ArgumentCaptor;
 import org.mockito.Captor;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
+import org.mockito.Spy;
+import org.springframework.core.io.Resource;
 import org.springframework.mock.web.MockMultipartFile;
 import org.springframework.test.web.servlet.MockMvc;
 import org.springframework.test.web.servlet.ResultActions;
@@ -24,11 +26,15 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders;
 import de.itvsh.kop.common.test.TestUtils;
 import de.ozgcloud.eingang.common.formdata.FormData;
 import de.ozgcloud.eingang.common.formdata.FormDataTestFactory;
+import de.ozgcloud.eingang.common.formdata.FormHeader;
+import de.ozgcloud.eingang.common.formdata.FormHeaderTestFactory;
+import de.ozgcloud.eingang.common.vorgang.VorgangNummerSupplier;
 import de.ozgcloud.eingang.semantik.SemantikAdapter;
 import lombok.SneakyThrows;
 
 class EntryControllerTest {
 
+	@Spy
 	@InjectMocks
 	private EntryController controller;
 
@@ -36,6 +42,8 @@ class EntryControllerTest {
 	private EntryDataMapper mapper;
 	@Mock
 	private SemantikAdapter semantikAdapter;
+	@Mock
+	private VorgangNummerSupplier vorgangNummerSupplier;
 
 	private MockMvc mockMvc;
 
@@ -47,8 +55,22 @@ class EntryControllerTest {
 	@Nested
 	class ReceiveAntrag {
 
+		private final FormHeader header = FormHeaderTestFactory.createBuilder().vorgangNummer(null).build();
+		private final FormData formData = FormDataTestFactory.createBuilder().header(header).build();
+
 		@Captor
 		private ArgumentCaptor<InputStream> streamCaptor;
+		@Captor
+		private ArgumentCaptor<FormData> formDataCaptor;
+
+		private final EntryResponse response = EntryResponseTestFactory.create();
+
+		@BeforeEach
+		void init() {
+			when(mapper.mapEntryData(any())).thenReturn(formData);
+			doReturn(response).when(controller).buildResponse(any(), any());
+			when(vorgangNummerSupplier.get()).thenReturn(FormHeaderTestFactory.VORGANG_NUMMER);
+		}
 
 		@Test
 		@SneakyThrows
@@ -70,12 +92,25 @@ class EntryControllerTest {
 
 		@Test
 		void shouldCallSemantikAdapter() {
-			FormData formData = FormDataTestFactory.create();
-			when(mapper.mapEntryData(any())).thenReturn(formData);
+			doPostRequest();
+
+			verify(semantikAdapter).processFormData(notNull());
+		}
 
+		@Test
+		void shouldSetVorgangNummer() {
 			doPostRequest();
 
-			verify(semantikAdapter).processFormData(formData);
+			verify(semantikAdapter).processFormData(formDataCaptor.capture());
+			assertThat(formDataCaptor.getValue().getHeader().getVorgangNummer()).isEqualTo(FormHeaderTestFactory.VORGANG_NUMMER);
+		}
+
+		@Test
+		@SneakyThrows
+		void shouldReturnResponse() {
+			var response = controller.receiveAntrag(mock(Resource.class));
+
+			assertThat(response).isSameAs(this.response);
 		}
 
 		@SneakyThrows
@@ -86,4 +121,18 @@ class EntryControllerTest {
 		}
 	}
 
+	@Nested
+	class BuildResponse {
+
+		@Test
+		@SneakyThrows
+		void shouldCreateResponse() {
+			var response = controller.buildResponse(FormDataTestFactory.create(), ResponseVorgangTestFactory.VORGANG_ID);
+
+			assertThat(response).usingRecursiveComparison()
+					.ignoringFields("vorgang.statusSince")
+					.isEqualTo(EntryResponseTestFactory.create());
+		}
+	}
+
 }
diff --git a/enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/EntryResponseTestFactory.java b/enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/EntryResponseTestFactory.java
new file mode 100644
index 000000000..b72c5b964
--- /dev/null
+++ b/enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/EntryResponseTestFactory.java
@@ -0,0 +1,16 @@
+package de.ozgcloud.eingang.enterprise.entry;
+
+import de.ozgcloud.eingang.common.formdata.FormHeaderTestFactory;
+
+class EntryResponseTestFactory {
+
+	static final EntryResponse create() {
+		return createBuilder().build();
+	}
+
+	static final EntryResponse.EntryResponseBuilder createBuilder() {
+		return EntryResponse.builder()
+				.transactionId(FormHeaderTestFactory.REQUEST_ID)
+				.vorgang(ResponseVorgangTestFactory.create());
+	}
+}
diff --git a/enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/ResponseVorgangTestFactory.java b/enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/ResponseVorgangTestFactory.java
new file mode 100644
index 000000000..021642935
--- /dev/null
+++ b/enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/ResponseVorgangTestFactory.java
@@ -0,0 +1,24 @@
+package de.ozgcloud.eingang.enterprise.entry;
+
+import java.time.ZonedDateTime;
+import java.util.UUID;
+
+import de.ozgcloud.eingang.common.formdata.FormHeaderTestFactory;
+import de.ozgcloud.eingang.enterprise.entry.EntryResponse.ResponseVorgang;
+
+public class ResponseVorgangTestFactory {
+
+	final static String VORGANG_ID = UUID.randomUUID().toString();
+
+	static ResponseVorgang create() {
+		return createBuilder().build();
+	}
+
+	static ResponseVorgang.ResponseVorgangBuilder createBuilder() {
+		return ResponseVorgang.builder()
+				.vorgangId(VORGANG_ID)
+				.vorgangNummer(FormHeaderTestFactory.VORGANG_NUMMER)
+				.status("NEU")
+				.statusSince(ZonedDateTime.now());
+	}
+}
diff --git a/formcycle-adapter/formcycle-adapter-impl/pom.xml b/formcycle-adapter/formcycle-adapter-impl/pom.xml
index b042a9d64..0eec81b38 100644
--- a/formcycle-adapter/formcycle-adapter-impl/pom.xml
+++ b/formcycle-adapter/formcycle-adapter-impl/pom.xml
@@ -50,11 +50,13 @@
 			<groupId>de.itvsh.ozg.pluto</groupId>
 			<artifactId>pluto-utils</artifactId>
 			<type>test-jar</type>
+			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>de.itvsh.kop.eingangsadapter</groupId>
 			<artifactId>common</artifactId>
 			<type>test-jar</type>
+			<scope>test</scope>
 		</dependency>
 
 		<!--spring-->
diff --git a/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle/FormDataController.java b/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle/FormDataController.java
index dbae0279f..b46745646 100644
--- a/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle/FormDataController.java
+++ b/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle/FormDataController.java
@@ -47,6 +47,7 @@ import de.ozgcloud.eingang.common.formdata.IncomingFileGroup;
 import de.ozgcloud.eingang.common.formdata.ServiceKonto;
 import de.ozgcloud.eingang.common.formdata.ServiceKonto.PostfachAddress;
 import de.ozgcloud.eingang.common.formdata.StringBasedIdentifier;
+import de.ozgcloud.eingang.common.vorgang.VorgangNummerSupplier;
 import de.ozgcloud.eingang.semantik.SemantikAdapter;
 import de.ozgcloud.eingang.semantik.enginebased.FilesMapperHelper;
 import lombok.RequiredArgsConstructor;
diff --git a/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormDataControllerTest.java b/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormDataControllerTest.java
index 529668d93..1e9430b99 100644
--- a/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormDataControllerTest.java
+++ b/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormDataControllerTest.java
@@ -53,6 +53,7 @@ import de.ozgcloud.eingang.common.formdata.FormHeader;
 import de.ozgcloud.eingang.common.formdata.IncomingFileGroupTestFactory;
 import de.ozgcloud.eingang.common.formdata.IncomingFileTestFactory;
 import de.ozgcloud.eingang.common.formdata.ServiceKonto.PostfachAddress;
+import de.ozgcloud.eingang.common.vorgang.VorgangNummerSupplier;
 import de.ozgcloud.eingang.common.formdata.StringBasedIdentifier;
 import de.ozgcloud.eingang.formcycle.common.protobuf.ProtobufMessageConverter;
 import de.ozgcloud.eingang.semantik.SemantikAdapter;
diff --git a/router/src/main/java/de/ozgcloud/eingang/router/VorgangRemoteService.java b/router/src/main/java/de/ozgcloud/eingang/router/VorgangRemoteService.java
index 673c66955..0284bb677 100644
--- a/router/src/main/java/de/ozgcloud/eingang/router/VorgangRemoteService.java
+++ b/router/src/main/java/de/ozgcloud/eingang/router/VorgangRemoteService.java
@@ -106,7 +106,8 @@ public class VorgangRemoteService {
 			uploadedAttachments = uploadAttachments();
 			uploadedRepresentations = uploadRepresentations();
 
-			return finishCreation();
+			finishCreation();
+			return vorgangId;
 		}
 
 		String startCreation() {
diff --git a/router/src/main/java/de/ozgcloud/eingang/router/VorgangService.java b/router/src/main/java/de/ozgcloud/eingang/router/VorgangService.java
index c9250df82..9d617ae52 100644
--- a/router/src/main/java/de/ozgcloud/eingang/router/VorgangService.java
+++ b/router/src/main/java/de/ozgcloud/eingang/router/VorgangService.java
@@ -40,9 +40,10 @@ public class VorgangService {
 	@Autowired
 	private GrpcEingangMapper grpcEingangMapper;
 
-	public void createVorgang(FormData formData) {
+	public String createVorgang(FormData formData) {
 		var eingang = grpcEingangMapper.toEingang(formData);
 		var organisationsEinheitenId = Optional.ofNullable(formData.getZustaendigeStelle()).map(ZustaendigeStelle::getOrganisationseinheitenId);
-		remoteService.createVorgang(formData, eingang, organisationsEinheitenId);
+
+		return remoteService.createVorgang(formData, eingang, organisationsEinheitenId);
 	}
 }
\ No newline at end of file
diff --git a/router/src/test/java/de/ozgcloud/eingang/router/VorgangRemoteServiceTest.java b/router/src/test/java/de/ozgcloud/eingang/router/VorgangRemoteServiceTest.java
index 8b1634ee1..2f8460969 100644
--- a/router/src/test/java/de/ozgcloud/eingang/router/VorgangRemoteServiceTest.java
+++ b/router/src/test/java/de/ozgcloud/eingang/router/VorgangRemoteServiceTest.java
@@ -160,10 +160,10 @@ class VorgangRemoteServiceTest {
 		}
 
 		@Test
-		void shouldReturnMessage() {
+		void shouldReturnVorgangId() {
 			var result = createVorgang();
 
-			assertThat(result).isEqualTo(finishResponse.getMessage());
+			assertThat(result).isEqualTo(vorgangId);
 		}
 
 		private String createVorgang() {
diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/SemantikAdapter.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/SemantikAdapter.java
index efee4d47f..74840e2f5 100644
--- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/SemantikAdapter.java
+++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/SemantikAdapter.java
@@ -44,11 +44,11 @@ public class SemantikAdapter {
 	@Autowired
 	private VorgangService vorgangService;
 
-	public void processFormData(FormData formData) {
+	public String processFormData(FormData formData) {
 		formData = parseByEngineAdapter(formData);
 		formData = parseByFormAdapter(formData);
 
-		vorgangService.createVorgang(formData);
+		return vorgangService.createVorgang(formData);
 	}
 
 	private FormData parseByEngineAdapter(FormData formData) {
-- 
GitLab