diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidMapper.java
index 989235cdeefc12aa88f7ca0c66eecb165af5ed59..e24e7101b1606ee6bb86cc90a294744a69661b0b 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidMapper.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidMapper.java
@@ -42,8 +42,12 @@ import de.ozgcloud.document.bescheid.GrpcSentInfo;
 		UserIdMapper.class })
 interface BescheidMapper {
 
+	@Mapping(target = "vorgangId", ignore = true)
 	@Mapping(target = "attachments", source = "grpcBescheid.attachmentsList")
-	Bescheid fromGrpc(GrpcBescheid grpcBescheid, String vorgangId);
+	Bescheid fromGrpc(GrpcBescheid grpcBescheid);
+
+	@Mapping(target = "attachments", source = "grpcBescheid.attachmentsList")
+	Bescheid fromGrpcAndVorgangId(GrpcBescheid grpcBescheid, String vorgangId);
 
 	List<FileId> fromProtocolStringList(ProtocolStringList value);
 
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidRemoteService.java
index 16485a34c36cb51ba6112f8374d47ddf7717e9aa..5890398e4c8f312ef8b2a092477ba147963570fa 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidRemoteService.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidRemoteService.java
@@ -36,6 +36,7 @@ import de.ozgcloud.document.bescheid.GrpcBescheidManagerConfigRequest;
 import de.ozgcloud.document.bescheid.GrpcGetAllBescheidRequest;
 import de.ozgcloud.document.bescheid.GrpcGetBescheidDraftRequest;
 import de.ozgcloud.document.bescheid.GrpcGetBescheidDraftResponse;
+import de.ozgcloud.document.bescheid.GrpcGetBescheidRequest;
 import net.devh.boot.grpc.client.inject.GrpcClient;
 
 @Service
@@ -49,25 +50,33 @@ class BescheidRemoteService {
 	public Optional<Bescheid> getBescheidDraft(String vorgangId) {
 		var request = buildGetBescheidDraftRequest(vorgangId);
 		var response = bescheidServiceStub.getBescheidDraft(request);
-		return getBescheidFromResponse(response).map(bescheid -> bescheidMapper.fromGrpc(bescheid, vorgangId));
+		return getBescheidFromResponse(response).map(bescheid -> bescheidMapper.fromGrpcAndVorgangId(bescheid, vorgangId));
 	}
 
 	GrpcGetBescheidDraftRequest buildGetBescheidDraftRequest(String vorgangId) {
-		return GrpcGetBescheidDraftRequest.newBuilder()
-				.setVorgangId(vorgangId)
-				.build();
+		return GrpcGetBescheidDraftRequest.newBuilder().setVorgangId(vorgangId).build();
 	}
 
 	Optional<GrpcBescheid> getBescheidFromResponse(GrpcGetBescheidDraftResponse response) {
 		return response.hasBescheid() ? Optional.of(response.getBescheid()) : Optional.empty();
 	}
 
+	public Bescheid getBescheid(String bescheidId) {
+		var request = buildGetBescheidRequest(bescheidId);
+		var response = bescheidServiceStub.getBescheid(request);
+		return bescheidMapper.fromGrpc(response.getBescheid());
+	}
+
+	GrpcGetBescheidRequest buildGetBescheidRequest(String bescheidId) {
+		return GrpcGetBescheidRequest.newBuilder().setId(bescheidId).build();
+	}
+
 	public Stream<Bescheid> findByVorgangId(String vorgangId) {
 		var request = buildGetAllBescheidRequest(vorgangId);
 
 		var response = bescheidServiceStub.getAll(request);
 
-		return response.getBescheidList().stream().map(grpcBescheid -> bescheidMapper.fromGrpc(grpcBescheid, vorgangId));
+		return response.getBescheidList().stream().map(grpcBescheid -> bescheidMapper.fromGrpcAndVorgangId(grpcBescheid, vorgangId));
 	}
 
 	GrpcGetAllBescheidRequest buildGetAllBescheidRequest(String vorgangId) {
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidService.java
index d08895f986fe673b8de45be743078b4b4b99e19d..8ebaf02e9e285f73ebc5fb881d03dd701753b728 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidService.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidService.java
@@ -42,6 +42,10 @@ public class BescheidService {
 		return remoteService.getBescheidDraft(vorgangId);
 	}
 
+	public Bescheid getBescheid(String bescheidId) {
+		return remoteService.getBescheid(bescheidId);
+	}
+
 	public Stream<Bescheid> findByVorgangId(String vorgangId) {
 		return remoteService.findByVorgangId(vorgangId);
 	}
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidMapperTest.java
index 2b93192a54784deb5eb7ea1a98f68f0933cb7924..8ddaddbedd9a0678fc2ec08a01fbbc58426697f1 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidMapperTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidMapperTest.java
@@ -27,8 +27,8 @@ import static org.assertj.core.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 
-import java.time.ZonedDateTime;
-
+import org.assertj.core.api.recursive.comparison.*;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.mapstruct.factory.Mappers;
@@ -36,7 +36,6 @@ import org.mockito.InjectMocks;
 import org.mockito.Mock;
 
 import de.ozgcloud.alfa.common.binaryfile.FileIdMapper;
-import de.ozgcloud.alfa.common.user.UserId;
 import de.ozgcloud.alfa.common.user.UserIdMapper;
 import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory;
 
@@ -49,100 +48,60 @@ class BescheidMapperTest {
 	@InjectMocks
 	private final BescheidMapper mapper = Mappers.getMapper(BescheidMapper.class);
 
+	@BeforeEach
+	void init() {
+		when(fileIdMapper.toFileId(any())).thenReturn(BescheidTestFactory.ATTACHMENT_ID);
+		when(userIdMapper.fromString(any())).thenReturn(BescheidTestFactory.SENT_INFO.getSentBy());
+	}
+
 	@Nested
 	class TestFromGrpc {
 
 		@Test
-		void shouldMapId() {
-			var bescheid = map();
-
-			assertThat(bescheid.getId()).isEqualTo(GrpcBescheidTestFactory.ID);
-		}
-
-		@Test
-		void shouldMapVorgangId() {
-			var bescheid = map();
+		void shouldMapAttachments() {
+			mapper.fromGrpc(GrpcBescheidTestFactory.create());
 
-			assertThat(bescheid.getVorgangId()).isEqualTo(VorgangHeaderTestFactory.ID);
+			verify(fileIdMapper).toFileId(GrpcBescheidTestFactory.ATTACHMENT_ID);
 		}
 
 		@Test
-		void shouldMapBewilligt() {
-			var bescheid = map();
+		void shouldMapSentBy() {
+			mapper.fromGrpc(GrpcBescheidTestFactory.create());
 
-			assertThat(bescheid.getBewilligt()).isEqualTo(GrpcBescheidTestFactory.BEWILLIGT);
+			verify(userIdMapper).fromString(GrpcSentInfoTestFactory.SENT_BY);
 		}
 
 		@Test
-		void shouldMapBeschiedenAm() {
-			var bescheid = map();
+		void shouldMapAllFields() {
+			var bescheid = mapper.fromGrpc(GrpcBescheidTestFactory.create());
 
-			assertThat(bescheid.getBeschiedenAm()).isEqualTo(GrpcBescheidTestFactory.BESCHIEDEN_AM);
+			assertThat(bescheid).usingRecursiveComparison(RecursiveComparisonConfiguration.builder().withIgnoredFields("vorgangId").build())
+					.isEqualTo(BescheidTestFactory.create());
 		}
+	}
 
-		@Test
-		void shouldMapBescheidDocument() {
-			var bescheid = map();
-
-			assertThat(bescheid.getBescheidDocument()).isEqualTo(GrpcBescheidTestFactory.BESCHEID_DOCUMENT);
-		}
+	@Nested
+	class TestFromGrpcAndVorgangId {
 
 		@Test
 		void shouldMapAttachments() {
-			when(fileIdMapper.toFileId(any())).thenCallRealMethod();
-
-			var bescheid = map();
+			mapper.fromGrpc(GrpcBescheidTestFactory.create());
 
-			assertThat(bescheid.getAttachments()).containsExactlyInAnyOrderElementsOf(BescheidTestFactory.ATTACHMENTS);
+			verify(fileIdMapper).toFileId(GrpcBescheidTestFactory.ATTACHMENT_ID);
 		}
 
 		@Test
-		void shouldMapNachrichtText() {
-			var bescheid = map();
+		void shouldMapSentBy() {
+			mapper.fromGrpc(GrpcBescheidTestFactory.create());
 
-			assertThat(bescheid.getNachrichtText()).isEqualTo(GrpcBescheidTestFactory.NACHRICHT_TEXT);
+			verify(userIdMapper).fromString(GrpcSentInfoTestFactory.SENT_BY);
 		}
 
 		@Test
-		void shouldMapNachrichtSubject() {
-			var bescheid = map();
-
-			assertThat(bescheid.getNachrichtSubject()).isEqualTo(GrpcBescheidTestFactory.NACHRICHT_SUBJECT);
-		}
-
-		@Test
-		void shouldMapStatus() {
-			var bescheid = map();
-
-			assertThat(bescheid.getStatus()).isEqualTo(BescheidTestFactory.STATUS);
-		}
-
-		@Nested
-		class TestMapSentInfo {
-			private final SentInfo expectedSentInfo = SentInfoTestFactory.createBuilder()
-					.sentAt(ZonedDateTime.parse(GrpcSentInfoTestFactory.SENT_AT))
-					.sentBy(UserId.from(GrpcSentInfoTestFactory.SENT_BY))
-					.build();
-
-			@Test
-			void shouldMapSentBy() {
-				when(userIdMapper.fromString(GrpcSentInfoTestFactory.SENT_BY)).thenCallRealMethod();
-
-				var bescheid = map();
-
-				assertThat(bescheid.getSentInfo().getSentBy()).isEqualTo(expectedSentInfo.getSentBy());
-			}
-
-			@Test
-			void shouldMapSentAt() {
-				var bescheid = map();
-
-				assertThat(bescheid.getSentInfo().getSentAt()).isEqualTo(expectedSentInfo.getSentAt());
-			}
-		}
+		void shouldMapAllFields() {
+			var bescheid = mapper.fromGrpcAndVorgangId(GrpcBescheidTestFactory.create(), VorgangHeaderTestFactory.ID);
 
-		private Bescheid map() {
-			return mapper.fromGrpc(GrpcBescheidTestFactory.create(), VorgangHeaderTestFactory.ID);
+			assertThat(bescheid).usingRecursiveComparison().isEqualTo(BescheidTestFactory.create());
 		}
 	}
 }
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidRemoteServiceTest.java
index ea402f0834a087f94d0aad579cbcbdc3e6dd690e..84d5208e2ca34eb32e6edbc42a196496152bbd5b 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidRemoteServiceTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidRemoteServiceTest.java
@@ -45,6 +45,8 @@ import de.ozgcloud.document.bescheid.GrpcGetAllBescheidRequest;
 import de.ozgcloud.document.bescheid.GrpcGetAllBescheidResponse;
 import de.ozgcloud.document.bescheid.GrpcGetBescheidDraftRequest;
 import de.ozgcloud.document.bescheid.GrpcGetBescheidDraftResponse;
+import de.ozgcloud.document.bescheid.GrpcGetBescheidRequest;
+import de.ozgcloud.document.bescheid.GrpcGetBescheidResponse;
 
 class BescheidRemoteServiceTest {
 
@@ -83,18 +85,25 @@ class BescheidRemoteServiceTest {
 			verify(bescheidServiceStub).getBescheidDraft(request);
 		}
 
+		@Test
+		void shouldGetBescheidFromResponse() {
+			service.getBescheidDraft(VorgangHeaderTestFactory.ID);
+
+			verify(service).getBescheidFromResponse(response);
+		}
+
 		@Test
 		void shouldCallMapper() {
 			doReturn(Optional.of(GrpcGetBescheidDraftResponseTestFactory.GRPC_BESCHEID)).when(service).getBescheidFromResponse(response);
 
 			service.getBescheidDraft(VorgangHeaderTestFactory.ID);
 
-			verify(bescheidMapper).fromGrpc(GrpcGetBescheidDraftResponseTestFactory.GRPC_BESCHEID, VorgangHeaderTestFactory.ID);
+			verify(bescheidMapper).fromGrpcAndVorgangId(GrpcGetBescheidDraftResponseTestFactory.GRPC_BESCHEID, VorgangHeaderTestFactory.ID);
 		}
 
 		@Test
 		void shouldReturnBescheid() {
-			when(bescheidMapper.fromGrpc(GrpcGetBescheidDraftResponseTestFactory.GRPC_BESCHEID, VorgangHeaderTestFactory.ID)).thenReturn(
+			when(bescheidMapper.fromGrpcAndVorgangId(GrpcGetBescheidDraftResponseTestFactory.GRPC_BESCHEID, VorgangHeaderTestFactory.ID)).thenReturn(
 					bescheidDraft);
 
 			var bescheidDraft = service.getBescheidDraft(VorgangHeaderTestFactory.ID);
@@ -110,13 +119,6 @@ class BescheidRemoteServiceTest {
 
 			assertThat(bescheidDraft).isEmpty();
 		}
-
-		@Test
-		void shouldGetBescheidFromResponse() {
-			service.getBescheidDraft(VorgangHeaderTestFactory.ID);
-
-			verify(service).getBescheidFromResponse(response);
-		}
 	}
 
 	@Nested
@@ -148,6 +150,61 @@ class BescheidRemoteServiceTest {
 		}
 	}
 
+	@Nested
+	class TestGetBescheid {
+
+		private final GrpcGetBescheidRequest request = GrpcGetBescheidRequestTestFactory.create();
+		private final GrpcGetBescheidResponse response = GrpcGetBescheidResponseTestFactory.create();
+
+		@BeforeEach
+		void setUp() {
+			doReturn(request).when(service).buildGetBescheidRequest(any());
+			when(bescheidServiceStub.getBescheid(any())).thenReturn(response);
+		}
+
+		@Test
+		void shouldBuildGetBescheidRequest() {
+			service.getBescheid(BescheidTestFactory.ID);
+
+			verify(service).buildGetBescheidRequest(BescheidTestFactory.ID);
+		}
+
+		@Test
+		void shouldCallGrpcService() {
+			service.getBescheid(BescheidTestFactory.ID);
+
+			verify(bescheidServiceStub).getBescheid(request);
+		}
+
+		@Test
+		void shouldCallMapper() {
+			service.getBescheid(BescheidTestFactory.ID);
+
+			verify(bescheidMapper).fromGrpc(GrpcGetBescheidResponseTestFactory.GRPC_BESCHEID);
+		}
+
+		@Test
+		void shouldReturnBescheid() {
+			var mappedBescheid = BescheidTestFactory.create();
+			when(bescheidMapper.fromGrpc(GrpcGetBescheidDraftResponseTestFactory.GRPC_BESCHEID)).thenReturn(mappedBescheid);
+
+			var bescheid = service.getBescheid(BescheidTestFactory.ID);
+
+			assertThat(bescheid).isEqualTo(mappedBescheid);
+		}
+	}
+
+	@Nested
+	class TestBuildGetBescheidRequest {
+
+		@Test
+		void shouldHaveId() {
+			var request = service.buildGetBescheidRequest(BescheidTestFactory.ID);
+
+			assertThat(request.getId()).isEqualTo(BescheidTestFactory.ID);
+		}
+	}
+
 	@Nested
 	class TestCanCreateBescheidDocument {
 
@@ -231,12 +288,12 @@ class BescheidRemoteServiceTest {
 		void shouldMapBescheid() {
 			service.findByVorgangId(VorgangHeaderTestFactory.ID).toList();
 
-			verify(bescheidMapper).fromGrpc(GrpcGetAllBescheidResponseTestFactory.GRPC_BESCHEID, VorgangHeaderTestFactory.ID);
+			verify(bescheidMapper).fromGrpcAndVorgangId(GrpcGetAllBescheidResponseTestFactory.GRPC_BESCHEID, VorgangHeaderTestFactory.ID);
 		}
 
 		@Test
 		void shouldReturnStreamOfBescheide() {
-			when(bescheidMapper.fromGrpc(any(), any())).thenReturn(bescheid);
+			when(bescheidMapper.fromGrpcAndVorgangId(any(), any())).thenReturn(bescheid);
 
 			var bescheide = service.findByVorgangId(VorgangHeaderTestFactory.ID);
 
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidServiceTest.java
index 07cb7f98e4ef1018673fb7fbb847c2082870bb28..16e9efb603bc76a00195db4e95abc49334472c53 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidServiceTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidServiceTest.java
@@ -74,6 +74,27 @@ class BescheidServiceTest {
 		}
 	}
 
+	@Nested
+	class TestGetBescheid {
+
+		@Test
+		void shouldCallRemoteService() {
+			service.getBescheid(BescheidTestFactory.ID);
+
+			verify(remoteService).getBescheid(BescheidTestFactory.ID);
+		}
+
+		@Test
+		void shouldReturnResultFromRemoteService() {
+			var remoteServiceResult = BescheidTestFactory.create();
+			when(remoteService.getBescheid(BescheidTestFactory.ID)).thenReturn(remoteServiceResult);
+
+			var result = service.getBescheid(BescheidTestFactory.ID);
+
+			assertThat(result).isEqualTo(remoteServiceResult);
+		}
+	}
+
 	@Nested
 	class TestFindByVorgangId {
 		private final Stream<Bescheid> bescheidsUnsorted = Stream.of(BescheidTestFactory.create());
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidTestFactory.java
index 2f84362023d62e5ee86f533280ec3b81abe689eb..c71d8b97b9dc54bca7afa98928a53fd16e0374f1 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidTestFactory.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidTestFactory.java
@@ -42,7 +42,9 @@ public class BescheidTestFactory {
 	public static final String BESCHIEDEN_AM = "2024-05-27";
 	public static final boolean BEWILLIGT = true;
 	public static final String BESCHEID_DOCUMENT = UUID.randomUUID().toString();
-	public static final List<FileId> ATTACHMENTS = List.of(FileId.from(UUID.randomUUID().toString()), FileId.from(UUID.randomUUID().toString()));
+	public static final String ATTACHMENT_ID_VALUE = UUID.randomUUID().toString();
+	public static final FileId ATTACHMENT_ID = FileId.from(ATTACHMENT_ID_VALUE);
+	public static final List<FileId> ATTACHMENTS = List.of(ATTACHMENT_ID);
 	public static final String NACHRICHT_TEXT = LoremIpsum.getInstance().getWords(10);
 	public static final String NACHRICHT_SUBJECT = LoremIpsum.getInstance().getWords(3);
 	public static final SendBy SEND_BY = SendBy.MANUAL;
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidTestFactory.java
index 9191a3995746f0e3071686cceefbdb17856c6c8b..c902cf1899e195310837819ca0a4eacaf8db3034 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidTestFactory.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidTestFactory.java
@@ -25,19 +25,22 @@ package de.ozgcloud.alfa.bescheid;
 
 import java.util.List;
 
-import de.ozgcloud.common.datatype.StringBasedValue;
 import de.ozgcloud.document.bescheid.GrpcBescheid;
 import de.ozgcloud.document.bescheid.GrpcSentInfo;
 
 public class GrpcBescheidTestFactory {
 
 	public static final String ID = BescheidTestFactory.ID;
+	public static final String STATUS = BescheidTestFactory.STATUS.toString();
+	public static final long VERSION = BescheidTestFactory.VERSION;
 	public static final boolean BEWILLIGT = BescheidTestFactory.BEWILLIGT;
 	public static final String BESCHIEDEN_AM = BescheidTestFactory.BESCHIEDEN_AM;
 	public static final String BESCHEID_DOCUMENT = BescheidTestFactory.BESCHEID_DOCUMENT;
-	public static final List<String> ATTACHMENTS = BescheidTestFactory.ATTACHMENTS.stream().map(StringBasedValue::toString).toList();
+	public static final String ATTACHMENT_ID = BescheidTestFactory.ATTACHMENT_ID_VALUE;
+	public static final List<String> ATTACHMENTS = List.of(ATTACHMENT_ID);
 	public static final String NACHRICHT_TEXT = BescheidTestFactory.NACHRICHT_TEXT;
 	public static final String NACHRICHT_SUBJECT = BescheidTestFactory.NACHRICHT_SUBJECT;
+	public static final String SEND_BY = BescheidTestFactory.SEND_BY.toString();
 	public static final GrpcSentInfo SENT_INFO = GrpcSentInfoTestFactory.create();
 
 	public static GrpcBescheid create() {
@@ -47,14 +50,15 @@ public class GrpcBescheidTestFactory {
 	public static GrpcBescheid.Builder createBuilder() {
 		return GrpcBescheid.newBuilder()
 				.setId(ID)
-				.setStatus(BescheidTestFactory.STATUS.toString())
+				.setStatus(STATUS)
+				.setVersion(VERSION)
 				.setBewilligt(BEWILLIGT)
 				.setBeschiedenAm(BESCHIEDEN_AM)
 				.setBescheidDocument(BESCHEID_DOCUMENT)
 				.addAllAttachments(ATTACHMENTS)
 				.setNachrichtText(NACHRICHT_TEXT)
 				.setNachrichtSubject(NACHRICHT_SUBJECT)
-				.setSendBy(BescheidTestFactory.SEND_BY.toString())
+				.setSendBy(SEND_BY)
 				.setSentInfo(SENT_INFO);
 	}
 }
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetBescheidRequestTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetBescheidRequestTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..2a8a54dba2fcd4a922094d975d6c7f0e2c960e26
--- /dev/null
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetBescheidRequestTestFactory.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+package de.ozgcloud.alfa.bescheid;
+
+import de.ozgcloud.document.bescheid.GrpcGetBescheidRequest;
+
+class GrpcGetBescheidRequestTestFactory {
+
+	public static GrpcGetBescheidRequest create() {
+		return createBuilder().build();
+	}
+
+	public static GrpcGetBescheidRequest.Builder createBuilder() {
+		return GrpcGetBescheidRequest.newBuilder().setId(BescheidTestFactory.ID);
+	}
+}
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetBescheidResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetBescheidResponseTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..9063b616dfe60ce73a8c7d7e5a9a45d5fb65eb56
--- /dev/null
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcGetBescheidResponseTestFactory.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+package de.ozgcloud.alfa.bescheid;
+
+import de.ozgcloud.document.bescheid.GrpcBescheid;
+import de.ozgcloud.document.bescheid.GrpcGetBescheidResponse;
+
+class GrpcGetBescheidResponseTestFactory {
+
+	public static final GrpcBescheid GRPC_BESCHEID = GrpcBescheidTestFactory.create();
+
+	public static GrpcGetBescheidResponse create() {
+		return createBuilder().build();
+	}
+
+	public static GrpcGetBescheidResponse.Builder createBuilder() {
+		return GrpcGetBescheidResponse.newBuilder().setBescheid(GRPC_BESCHEID);
+	}
+}
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcSentInfoTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcSentInfoTestFactory.java
index c3a8f6d4432efe8e65549b0fac23ed6c8c5b54b9..32342f5e1348f4a5a6f80e920462ceb7f6a8f6fa 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcSentInfoTestFactory.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcSentInfoTestFactory.java
@@ -23,15 +23,12 @@
  */
 package de.ozgcloud.alfa.bescheid;
 
-import java.time.ZonedDateTime;
-
-import de.ozgcloud.alfa.common.user.GrpcUserTestFactory;
 import de.ozgcloud.document.bescheid.GrpcSentInfo;
 
 public class GrpcSentInfoTestFactory {
 
-	public static final String SENT_AT = ZonedDateTime.now().toString();
-	public static final String SENT_BY = GrpcUserTestFactory.ID;
+	public static final String SENT_AT = SentInfoTestFactory.SENT_AT.toString();
+	public static final String SENT_BY = SentInfoTestFactory.SENT_BY.toString();
 
 	public static GrpcSentInfo create() {
 		return createBuilder().build();
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/FileIdMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/FileIdMapperTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..3262b3032fc0c9534694d01ddd2a7d217e35921b
--- /dev/null
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/FileIdMapperTest.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+package de.ozgcloud.alfa.common.binaryfile;
+
+import static org.assertj.core.api.Assertions.*;
+
+import java.util.UUID;
+
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.mapstruct.factory.Mappers;
+
+class FileIdMapperTest {
+
+	private final FileIdMapper mapper = Mappers.getMapper(FileIdMapper.class);
+	private final String fileIdValue = UUID.randomUUID().toString();
+
+	@Nested
+	class TestToFileId {
+
+		@Test
+		void shouldReturnFileId() {
+			var fileId = mapper.toFileId(fileIdValue);
+
+			assertThat(fileId).isEqualTo(FileId.from(fileIdValue));
+		}
+	}
+
+	@Nested
+	class TestToString {
+
+		@Test
+		void shouldReturnFileIdValue() {
+			var fileIdString = mapper.toString(FileId.from(fileIdValue));
+
+			assertThat(fileIdString).isEqualTo(fileIdValue);
+		}
+	}
+}
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/UserIdMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/UserIdMapperTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..7f7755c40e11b273295101ba4f2fa6027fd8f9cb
--- /dev/null
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/common/user/UserIdMapperTest.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+package de.ozgcloud.alfa.common.user;
+
+import static org.assertj.core.api.Assertions.*;
+
+import java.util.UUID;
+
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.NullAndEmptySource;
+import org.junit.jupiter.params.provider.ValueSource;
+import org.mapstruct.factory.Mappers;
+
+class UserIdMapperTest {
+
+	private final UserIdMapper mapper = Mappers.getMapper(UserIdMapper.class);
+	private final String userIdValue = UUID.randomUUID().toString();
+
+	@Nested
+	class TestFromString {
+
+		@ParameterizedTest
+		@NullAndEmptySource
+		@ValueSource(strings = {" "})
+		void shouldReturnNull(String str) {
+			var userId = mapper.fromString(str);
+
+			assertThat(userId).isNull();
+		}
+
+		@Test
+		void shouldReturnUserId() {
+			var userId = mapper.fromString(userIdValue);
+
+			assertThat(userId).isEqualTo(UserId.from(userIdValue));
+		}
+
+		@Test
+		void shouldTrimUserIdString() {
+			var userId = mapper.fromString(" " + userIdValue + " ");
+
+			assertThat(userId).isEqualTo(UserId.from(userIdValue));
+		}
+	}
+
+	@Nested
+	class TestToString {
+
+		@Test
+		void shouldReturnUserIdValue() {
+			var userIdString = mapper.toString(UserId.from(userIdValue));
+
+			assertThat(userIdString).isEqualTo(userIdValue);
+		}
+	}
+}