diff --git a/Jenkinsfile b/Jenkinsfile
index 9364c4109f338181ff3cbda19f14e64a091fac51..edbce0d65de5036be152cff85206da9e6efc20f2 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -27,42 +27,25 @@ pipeline {
                     def rootVersion = getPomVersion('pom.xml')
                     def serverVersion = getPomVersion('vorgang-manager-server/pom.xml')
                     def interfaceVersion = getPomVersion('vorgang-manager-interface/pom.xml')
-                    def mailVersion = getPomVersion('nachrichten-manager/pom.xml')
 
                     if(isReleaseBranch()){
-                        if ( !(rootVersion ==~ RELEASE_REGEX) || !(serverVersion ==~ RELEASE_REGEX) || !(interfaceVersion ==~ RELEASE_REGEX) || !(mailVersion ==~ RELEASE_REGEX)) {
+                        if ( !(rootVersion ==~ RELEASE_REGEX) || !(serverVersion ==~ RELEASE_REGEX) || !(interfaceVersion ==~ RELEASE_REGEX) ) {
                             error("Keine Release Version für Branch ${env.BRANCH_NAME}.")
                         }
                     } else {
-                        if ( !(rootVersion ==~ SNAPSHOT_REGEX) || !(serverVersion ==~ SNAPSHOT_REGEX) || !(interfaceVersion ==~ SNAPSHOT_REGEX) || !(mailVersion ==~ SNAPSHOT_REGEX)) {
+                        if ( !(rootVersion ==~ SNAPSHOT_REGEX) || !(serverVersion ==~ SNAPSHOT_REGEX) || !(interfaceVersion ==~ SNAPSHOT_REGEX) ) {
                             error("Keine Snapshot Version für Branch ${env.BRANCH_NAME}.")
                         }
                     }
 
-                    if( !(rootVersion == serverVersion && rootVersion == interfaceVersion && rootVersion == mailVersion)){
+                    if( !(rootVersion == serverVersion && rootVersion == interfaceVersion )){
                         error("Versionen sind nicht identisch")                        
                     }
-
-                    def bayernIdProxyParent = getPomVersion('nachrichten-bayernid-proxy/pom.xml')
-                    def bayernIdProxyInterface = getPomVersion('nachrichten-bayernid-proxy/bayernid-proxy-interface/pom.xml')
-
-                    if(isReleaseBranch()){
-                        if ( !(bayernIdProxyParent ==~ RELEASE_REGEX) || !(bayernIdProxyInterface ==~ RELEASE_REGEX)) {
-                            error("Keine Release Version für BayernIdProxy Branch ${env.BRANCH_NAME}.")
-                        }
-                    } else {
-                        if ( !(bayernIdProxyParent ==~ SNAPSHOT_REGEX) || !(bayernIdProxyInterface ==~ SNAPSHOT_REGEX)) {
-                            error("Keine Snapshot Version für BayernIdProxy Branch ${env.BRANCH_NAME}.")
-                        }
-                    }
-                     if( !(bayernIdProxyParent == bayernIdProxyInterface)){
-                        error("Versionen BayernIdProxy sind nicht identisch")                        
-                    }
                 }
             }
         }
         
-        stage('Build VorgangManager / NachrichtenManagner') {
+        stage('Build VorgangManager') {
           steps {
                 script {
                     FAILED_STAGE=env.STAGE_NAME
@@ -105,20 +88,6 @@ pipeline {
            }
         }
 
-        stage('Build Docker image nachrichten-bayernid-proxy') {
-          steps {
-                script {
-                    FAILED_STAGE=env.STAGE_NAME
-                }
-
-                configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) {
-                    dir('nachrichten-bayernid-proxy/bayernid-proxy-impl') {
-                        sh 'mvn --no-transfer-progress -s $MAVEN_SETTINGS spring-boot:build-image -DskipTests -Dmaven.wagon.http.retryHandler.count=3'
-                    }
-                }
-           }
-        }
-
         stage('Tag and Push Docker image vorgang-manager') {
             steps {
                 script {
@@ -138,25 +107,6 @@ pipeline {
             }
         }
 
-        stage('Tag and Push Docker image nachrichten-bayernid-proxy') {
-            steps {
-                script {
-                    FAILED_STAGE=env.STAGE_NAME
-                    IMAGE_TAG_BAYERN_ID_PROXY = generateImageTag('nachrichten-bayernid-proxy/pom.xml')
-
-                    tagAndPushDockerImage('bayernid-proxy', IMAGE_TAG_BAYERN_ID_PROXY)
-
-                    if (env.BRANCH_NAME == 'master') {
-                        tagAndPushDockerImage('bayernid-proxy', 'snapshot-latest')
-                        tagAndPushDockerImage('bayernid-proxy', 'e2e-test')
-                    }
-                    else if (env.BRANCH_NAME == 'release') {
-                        tagAndPushDockerImage('bayernid-proxy', 'latest')
-                    }
-                }
-            }
-        }
-
         stage('Test, build and deploy Helm Chart vorgang-manager') {
             steps {
                 script {
@@ -175,26 +125,6 @@ pipeline {
             }
         }        
 
-        stage('Test, build and deploy Helm Chart bayernid-proxy') {
-            steps {
-                script {
-                    FAILED_STAGE=env.STAGE_NAME
-                    HELM_CHART_VERSION_BAYERN_ID_PROXY = generateHelmChartVersion("nachrichten-bayernid-proxy/pom.xml")
-
-                    dir('nachrichten-bayernid-proxy') {
-                        sh "./run_helm_test.sh"
-                    } 
-
-                    dir('nachrichten-bayernid-proxy/src/main/helm') {
-
-                        sh "helm package --version=${HELM_CHART_VERSION_BAYERN_ID_PROXY} ."
-
-                        deployHelmChart("bayernid-proxy", HELM_CHART_VERSION_BAYERN_ID_PROXY)
-                    }
-                }
-            }
-        }
-
         stage('Trigger Dev rollout') {
             when {
                 branch 'master'
@@ -206,7 +136,6 @@ pipeline {
                     cloneGitopsRepo()
 
                     setNewVorgangManagerGitopsVersion("dev")
-                    setNewNachrichtenBayernIdProxyGitopsVersion("dev")
                     pushDevGitopsRepo()
                 }
             }
@@ -223,7 +152,6 @@ pipeline {
                     cloneGitopsRepo()
 
                     setNewVorgangManagerGitopsVersion("test")
-                    setNewNachrichtenBayernIdProxyGitopsVersion("test")
 
                     pushTestGitopsRepo()
                 }
@@ -275,36 +203,6 @@ pipeline {
                                 unstable("SonarQube failed")
                             }
                         }
-                	
-                		dir('nachrichten-manager') {
-                        	try {
-                                withSonarQubeEnv('sonarqube-ozg-sh'){
-	                                sh 'mvn -s $MAVEN_SETTINGS sonar:sonar'
-	                            }
-	                        } catch (Exception e) {
-                                unstable("SonarQube failed")
-                            }
-                        }
-                		
-                		dir('notification-manager') {
-                        	try {
-                                withSonarQubeEnv('sonarqube-ozg-sh'){
-                                    sh 'mvn -s $MAVEN_SETTINGS sonar:sonar'
-	                            }
-	                        } catch (Exception e) {
-                                unstable("SonarQube failed")
-                            }
-                        }
-
-                        dir('nachrichten-bayernid-proxy') {
-                        	try {
-                                withSonarQubeEnv('sonarqube-ozg-sh'){
-                                    sh 'mvn -s $MAVEN_SETTINGS sonar:sonar'
-	                            }
-	                        } catch (Exception e) {
-                                unstable("SonarQube BayernIdProxy failed")
-                            }
-                        }
             		}
                 }
             }
@@ -414,18 +312,6 @@ Void setNewVorgangManagerGitopsVersion(String environment) {
     }
 }
 
-Void setNewNachrichtenBayernIdProxyGitopsVersion(String environment) {
-    dir("gitops") {
-        def envFile = "${environment}/application/values/bayernid-proxy-values.yaml"
-        def envVersions = readYaml file: envFile
-
-        envVersions.bayernid_proxy.image.tag = IMAGE_TAG_BAYERN_ID_PROXY
-        envVersions.bayernid_proxy.helm.version = HELM_CHART_VERSION_BAYERN_ID_PROXY
-
-        writeYaml file: envFile, data: envVersions, overwrite: true
-    }
-}
-
 Void pushDevGitopsRepo() {
     pushNewGitopsVersion('dev')
 }
@@ -443,7 +329,7 @@ Void pushNewGitopsVersion(String environment) {
         withCredentials([usernamePassword(credentialsId: 'jenkins-gitea-access-token', passwordVariable: 'TOKEN', usernameVariable: 'USER')]) {
             sh "git add ${environment}/application/values/*-values.yaml"
 
-            sh "git commit -m 'jenkins rollout ${environment} vorgang-manager version ${IMAGE_TAG} bayern-id version ${IMAGE_TAG_BAYERN_ID_PROXY}'"
+            sh "git commit -m 'jenkins rollout ${environment} vorgang-manager version ${IMAGE_TAG}'"
             sh 'git push https://${USER}:${TOKEN}@git.ozg-sh.de/ozgcloud-devops/gitops.git'
         }
     }
diff --git a/bescheid-manager/pom.xml b/bescheid-manager/pom.xml
index 07ca67426a2042ed3f702a4c3ef65e621c984e13..0b9174c6394ee1d61ac7380a2ad9b1e3c7c3b4a4 100644
--- a/bescheid-manager/pom.xml
+++ b/bescheid-manager/pom.xml
@@ -5,18 +5,19 @@
 	<parent>
 		<groupId>de.ozgcloud.common</groupId>
 		<artifactId>ozgcloud-common-parent</artifactId>
-		<version>4.0.1-SNAPSHOT</version>
+		<version>4.1.0-SNAPSHOT</version>
 		<relativePath />
 	</parent>
 
 	<groupId>de.ozgcloud.bescheid</groupId>
 	<artifactId>bescheid-manager</artifactId>
 	<name>OZG-Cloud Bescheid Manager</name>
-	<version>1.10.0-SNAPSHOT</version>
+	<version>1.11.0-SNAPSHOT</version>
 
 	<properties>
-		<vorgang-manager.version>2.6.0-SNAPSHOT</vorgang-manager.version>
-		<api-lib.version>0.7.0-SNAPSHOT</api-lib.version>
+		<vorgang-manager.version>2.7.0-SNAPSHOT</vorgang-manager.version>
+		<nachrichten-manager.version>2.7.0-SNAPSHOT</nachrichten-manager.version>
+		<api-lib.version>0.8.0-SNAPSHOT</api-lib.version>
 	</properties>
 
 	<dependencies>
@@ -26,6 +27,11 @@
 			<artifactId>vorgang-manager-interface</artifactId>
 			<version>${vorgang-manager.version}</version>
 		</dependency>
+		<dependency>
+			<groupId>de.ozgcloud.nachrichten</groupId>
+			<artifactId>nachrichten-manager-interface</artifactId>
+			<version>${nachrichten-manager.version}</version>
+		</dependency>
 		<dependency>
 			<groupId>de.ozgcloud.command</groupId>
 			<artifactId>command-manager</artifactId>
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/Bescheid.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/Bescheid.java
index c08d2a90c97761f8da7e20ee63bdbeec6fe20569..c26f275ff4adbdc446e5e4957928897b4e043aa2 100644
--- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/Bescheid.java
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/Bescheid.java
@@ -3,14 +3,11 @@ package de.ozgcloud.bescheid;
 import java.io.File;
 import java.util.Optional;
 
-import org.apache.commons.lang3.StringUtils;
-
 import de.ozgcloud.bescheid.vorgang.Vorgang;
 import de.ozgcloud.bescheid.vorgang.VorgangId;
 import de.ozgcloud.common.binaryfile.FileId;
 import lombok.Builder;
 import lombok.Getter;
-import lombok.RequiredArgsConstructor;
 import lombok.With;
 
 @Builder(toBuilder = true)
@@ -46,29 +43,26 @@ public class Bescheid {
 	private Vorgang.ServiceKonto serviceKonto;
 
 	public enum Status {
-		DRAFT, BESCHEID, SEND;
+		DRAFT, SENT;
 
-		public boolean not(String value) {
+		public boolean not(Object value) {
 			return !hasValue(value);
 		}
 
-		public boolean hasValue(String value) {
-			return this.name().equalsIgnoreCase(value);
+		public boolean hasValue(Object value) {
+			return this.name().equalsIgnoreCase(String.valueOf(value));
 		}
 	}
 
-	@RequiredArgsConstructor
 	public enum SendBy {
-		NACHRICHT("NACHRICHT"), MANUAL("MANUAL");
-
-		private final String value;
+		NACHRICHT, MANUAL;
 
 		public boolean notValue(Object sendByValue) {
 			return !hasValue(sendByValue);
 		}
 
 		public boolean hasValue(Object sendByValue) {
-			return StringUtils.equalsIgnoreCase(value, String.valueOf(sendByValue));
+			return this.name().equalsIgnoreCase(String.valueOf(sendByValue));
 		}
 
 	}
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java
index 5a16db15e398136d8f61e4091532f8a0d0b717b3..7da2c36ae9157cfeec547ac98f8ec6cd9f576f6d 100644
--- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java
@@ -24,9 +24,11 @@
 package de.ozgcloud.bescheid;
 
 import java.time.LocalDate;
+import java.util.Arrays;
 import java.util.Optional;
 import java.util.function.Consumer;
 import java.util.function.Predicate;
+import java.util.stream.Collectors;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.context.ApplicationEventPublisher;
@@ -34,6 +36,7 @@ import org.springframework.context.event.EventListener;
 import org.springframework.security.core.context.SecurityContext;
 import org.springframework.stereotype.Component;
 
+import de.ozgcloud.bescheid.Bescheid.SendBy;
 import de.ozgcloud.bescheid.attacheditem.AttachedItemService;
 import de.ozgcloud.bescheid.binaryfile.BinaryFileService;
 import de.ozgcloud.bescheid.common.callcontext.CurrentUserService;
@@ -43,6 +46,7 @@ import de.ozgcloud.bescheid.vorgang.VorgangId;
 import de.ozgcloud.command.Command;
 import de.ozgcloud.command.CommandCreatedEvent;
 import de.ozgcloud.command.CommandFailedEvent;
+import de.ozgcloud.common.errorhandling.TechnicalException;
 import de.ozgcloud.document.BescheidDocumentCreatedEvent;
 import de.ozgcloud.document.DocumentService;
 import lombok.NonNull;
@@ -59,7 +63,6 @@ class BescheidEventListener {
 	public static final String UPDATE_BESCHEID_ORDER = "UPDATE_BESCHEID";
 	public static final String CREATE_BESCHEID_DOCUMENT_ORDER = "CREATE_BESCHEID_DOCUMENT";
 	public static final String SEND_BESCHEID_ORDER = "SEND_BESCHEID";
-	public static final String SEND_POSTFACH_MAIL_ORDER = "SEND_POSTFACH_MAIL";
 
 	public static final Predicate<Command> IS_CREATE_BESCHEID_COMMAND = command -> CREATE_BESCHEID_ORDER.equals(command.getOrder());
 	private static final String IS_CREATE_BESCHEID = "{T(de.ozgcloud.bescheid.BescheidEventListener).IS_CREATE_BESCHEID_COMMAND.test(event.getSource())}";
@@ -76,9 +79,6 @@ class BescheidEventListener {
 	public static final Predicate<Command> IS_SEND_BESCHEID_COMMAND = command -> SEND_BESCHEID_ORDER.equals(command.getOrder());
 	private static final String IS_SEND_BESCHEID = "{T(de.ozgcloud.bescheid.BescheidEventListener).IS_SEND_BESCHEID_COMMAND.test(event.getSource())}";
 
-	public static final Predicate<Command> IS_SEND_POSTFACH_MAIL_COMMAND = command -> SEND_POSTFACH_MAIL_ORDER.equals(command.getOrder());
-	private static final String IS_SEND_POSTFACH_MAIL = "{T(de.ozgcloud.bescheid.BescheidEventListener).IS_SEND_POSTFACH_MAIL_COMMAND.test(event.getSource())}";
-
 	private static final String TEMPLATE_GROUP_KIEL = "Kiel";
 	static final String VORGANG_ID_BODYKEY = "vorgangId";
 	static final String BESCHEID_VOM_BODYKEY = "bescheidVom";
@@ -160,17 +160,16 @@ class BescheidEventListener {
 	}
 
 	void doSendBescheid(Command command) {
-		service.sendBescheidManually(command.getRelationId(), command.getRelationVersion());
-		eventPublisher.publishEvent(new BescheidSentEvent(command));
-	}
-
-	@EventListener(condition = IS_SEND_POSTFACH_MAIL)
-	public void onSendPostfachMailCommand(CommandCreatedEvent event) {
-		runWithSecurityContext(event.getSource(), this::doSendPostfachMail);
-	}
-
-	void doSendPostfachMail(Command command) {
-		service.sendBescheidPostfachMail(command.getRelationId(), command.getRelationVersion());
+		var bescheidItem = attachedItemService.getItem(command.getRelationId());
+		if (SendBy.MANUAL.hasValue(bescheidItem.getItem().get(Bescheid.FIELD_SEND_BY))) {
+			service.sendBescheidManually(bescheidItem, command.getRelationVersion());
+		} else if (SendBy.NACHRICHT.hasValue(bescheidItem.getItem().get(Bescheid.FIELD_SEND_BY))) {
+			service.sendBescheidPostfachMail(bescheidItem, command.getRelationVersion());
+		} else {
+			throw new TechnicalException("Bescheid has unexpected sendBy value: '%s'. Allowed values are %s."
+					.formatted(bescheidItem.getItem().get(Bescheid.FIELD_SEND_BY),
+							Arrays.stream(SendBy.values()).map(SendBy::name).collect(Collectors.joining(","))));
+		}
 		eventPublisher.publishEvent(new BescheidSentEvent(command));
 	}
 
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidGrpcService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidGrpcService.java
index 84d0d11a5d44d852abf7d4e2ea7c027a8cc946be..d7d033e480e6259f3a08eeda83fa4e7548d23b66 100644
--- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidGrpcService.java
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidGrpcService.java
@@ -1,9 +1,13 @@
 package de.ozgcloud.bescheid;
 
+import java.util.Collection;
+import java.util.List;
+
 import de.ozgcloud.bescheid.BescheidServiceGrpc.BescheidServiceImplBase;
+import de.ozgcloud.bescheid.attacheditem.AttachedItem;
+import de.ozgcloud.bescheid.attacheditem.AttachedItemMapper;
 import de.ozgcloud.bescheid.attacheditem.AttachedItemService;
-import de.ozgcloud.bescheid.attacheditem.BescheidItem;
-import de.ozgcloud.bescheid.attacheditem.BescheidItemMapper;
+import de.ozgcloud.bescheid.vorgang.VorgangId;
 import io.grpc.stub.StreamObserver;
 import lombok.RequiredArgsConstructor;
 import net.devh.boot.grpc.server.service.GrpcService;
@@ -13,12 +17,14 @@ import net.devh.boot.grpc.server.service.GrpcService;
 class BescheidGrpcService extends BescheidServiceImplBase {
 
 	private final AttachedItemService attachedItemService;
-	private final BescheidItemMapper bescheidMapper;
+	private final AttachedItemMapper attachedItemMapper;
+	private final BescheidService bescheidService;
+	private final GrpcBescheidMapper grpcBescheidMapper;
 
 	@Override
 	public void getBescheidDraft(GrpcGetBescheidDraftRequest request, StreamObserver<GrpcGetBescheidDraftResponse> responseObserver) {
 		var response = attachedItemService.findBescheidItem(request.getVorgangId())
-				.map(this::buildResponse)
+				.map(this::buildGetBescheidDraftResponse)
 				.orElseGet(GrpcGetBescheidDraftResponse::getDefaultInstance);
 
 		responseObserver.onNext(response);
@@ -26,9 +32,29 @@ class BescheidGrpcService extends BescheidServiceImplBase {
 
 	}
 
-	GrpcGetBescheidDraftResponse buildResponse(BescheidItem bescheidItem) {
+	GrpcGetBescheidDraftResponse buildGetBescheidDraftResponse(AttachedItem bescheidItem) {
 		return GrpcGetBescheidDraftResponse.newBuilder()
-				.setBescheid(bescheidMapper.toBescheid(bescheidItem))
+				.setBescheid(attachedItemMapper.toBescheid(bescheidItem))
 				.build();
 	}
+
+	@Override
+	public void getConfig(GrpcBescheidManagerConfigRequest request, StreamObserver<GrpcBescheidManagerConfigResponse> responseObserver) {
+		responseObserver.onNext(grpcBescheidMapper.fromBescheidManagerConfig(bescheidService.getConfig()));
+		responseObserver.onCompleted();
+	}
+
+	@Override
+	public void getAll(GrpcGetAllBescheidRequest request, StreamObserver<GrpcGetAllBescheidResponse> responseObserver) {
+		responseObserver.onNext(buildGetAllBescheidResponse(attachedItemService.findAllBescheid(VorgangId.from(request.getVorgangId()))));
+		responseObserver.onCompleted();
+	}
+
+	GrpcGetAllBescheidResponse buildGetAllBescheidResponse(Collection<AttachedItem> bescheidItems) {
+		return GrpcGetAllBescheidResponse.newBuilder().addAllBescheid(mapBescheid(bescheidItems)).build();
+	}
+
+	List<GrpcBescheid> mapBescheid(Collection<AttachedItem> bescheidItems) {
+		return bescheidItems.stream().map(attachedItemMapper::toBescheid).toList();
+	}
 }
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdResponse.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidManagerConfig.java
similarity index 81%
rename from nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdResponse.java
rename to bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidManagerConfig.java
index f7b17f2da4ae66fbc4078d1e9be11b124164293b..7fbeae993b492c3a8f0d891641640faac9958065 100644
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdResponse.java
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidManagerConfig.java
@@ -21,17 +21,23 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-package de.ozgcloud.nachrichten.postfach.bayernid.proxy.message;
+package de.ozgcloud.bescheid;
 
 import lombok.Builder;
 import lombok.Getter;
 
 @Builder
 @Getter
-public class BayernIdResponse {
+public class BescheidManagerConfig {
 
-	private boolean success;
-	private String status;
-	private String message;
+	private String version;
+	private String javaVersion;
+	private Features features;
 
+	@Builder
+	@Getter
+	static class Features {
+
+		private boolean canCreateBescheidDocument;
+	}
 }
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java
index 8eb392fbf673fc706751da2b68f3ef27df5fdefb..e30bf629a1fe8c1f09e9046b562eb16c6291849d 100644
--- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java
@@ -1,12 +1,12 @@
 package de.ozgcloud.bescheid;
 
-import java.util.Map;
 import java.util.Optional;
 
 import jakarta.annotation.PostConstruct;
 
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.boot.info.BuildProperties;
 import org.springframework.stereotype.Service;
 
 import de.ozgcloud.bescheid.attacheditem.AttachedItem;
@@ -34,6 +34,7 @@ class BescheidService {
 	private final NachrichtService nachrichtService;
 	private final CurrentUserService currentUserService;
 	private final ClientAttributeService bescheidClientAttributeService;
+	private final BuildProperties buildProperties;
 	private final Optional<BescheidRemoteService> remoteService;
 
 	@PostConstruct
@@ -51,9 +52,13 @@ class BescheidService {
 
 	private Bescheid doCreateBescheid(BescheidRequest request) {
 		var vorgang = vorgangService.getById(request.getVorgangId());
-		return remoteService.get().create(request, vorgang)
-				.toBuilder().vorgangId(vorgang.getId()).serviceKonto(vorgang.getServiceKonto())
-				.build();
+		return remoteService.map(service -> service.create(request, vorgang))
+				.map(bescheid -> updateBescheid(bescheid, vorgang))
+				.orElseThrow(() -> new TechnicalException(ERROR_MESSAGE_NO_SERVICE));
+	}
+
+	private Bescheid updateBescheid(Bescheid bescheid, Vorgang vorgang) {
+		return bescheid.toBuilder().vorgangId(vorgang.getId()).serviceKonto(vorgang.getServiceKonto()).build();
 	}
 
 	private void checkRemoteService() {
@@ -63,8 +68,7 @@ class BescheidService {
 		}
 	}
 
-	public void sendBescheidManually(String id, long version) {
-		var bescheidItem = attachedItemService.getItem(id);
+	public void sendBescheidManually(AttachedItem bescheidItem, long version) {
 		validateBescheidSendManually(bescheidItem, version);
 		sendBescheid(bescheidItem);
 	}
@@ -73,15 +77,14 @@ class BescheidService {
 		validateBescheid(bescheidItem, version);
 		var sendBy = bescheidItem.getItem().get(Bescheid.FIELD_SEND_BY);
 		if (Bescheid.SendBy.MANUAL.notValue(sendBy)) {
-			throw new TechnicalException("Bescheid has unexpected sendBy value: '%s'. Expected is %s" .formatted(sendBy, Bescheid.SendBy.MANUAL));
+			throw new TechnicalException("Bescheid has unexpected sendBy value: '%s'. Expected is %s".formatted(sendBy, Bescheid.SendBy.MANUAL));
 		}
 	}
 
-	public void sendBescheidPostfachMail(String id, long version) {
-		var bescheidItem = attachedItemService.getItem(id);
+	public void sendBescheidPostfachMail(AttachedItem bescheidItem, long version) {
 		validateBescheidSendPostfach(bescheidItem, version);
 		var vorgang = vorgangService.getById(VorgangId.from(bescheidItem.getVorgangId()));
-		nachrichtService.createNachrichtDraft(buildBescheid(bescheidItem, vorgang.getServiceKonto()));
+		nachrichtService.sendNachricht(buildBescheid(bescheidItem, vorgang.getServiceKonto()));
 		sendBescheid(bescheidItem);
 	}
 
@@ -101,11 +104,11 @@ class BescheidService {
 
 	void validateBescheid(AttachedItem bescheidItem, long version) {
 		if (bescheidItem.getVersion() != version) {
-			throw new TechnicalException("Bescheid has different version. Expected: %d, but was: %d" .formatted(version, bescheidItem.getVersion()));
+			throw new TechnicalException("Bescheid has different version. Expected: %d, but was: %d".formatted(version, bescheidItem.getVersion()));
 		}
 		var status = MapUtils.getString(bescheidItem.getItem(), Bescheid.FIELD_STATUS);
 		if (Bescheid.Status.DRAFT.not(status)) {
-			throw new TechnicalException("Bescheid has status '%s'. Bescheid must have status DRAFT" .formatted(status));
+			throw new TechnicalException("Bescheid has status '%s'. Bescheid must have status DRAFT".formatted(status));
 		}
 		if (StringUtils.isBlank(MapUtils.getString(bescheidItem.getItem(), Bescheid.FIELD_BESCHEID_DOCUMENT))) {
 			throw new TechnicalException("Bescheid has no document");
@@ -133,12 +136,11 @@ class BescheidService {
 	}
 
 	void sendBescheid(AttachedItem bescheidItem) {
-		attachedItemService.patch(setBescheidSendStatus(bescheidItem));
+		attachedItemService.setBescheidStatus(bescheidItem.getId(), bescheidItem.getVersion(), Bescheid.Status.SENT);
 		try {
 			vorgangService.bescheiden(bescheidItem.getVorgangId());
 		} catch (Exception e) {
-			var item = attachedItemService.getItem(bescheidItem.getId());
-			attachedItemService.patch(setBescheidDraftStatus(item));
+			attachedItemService.setBescheidStatus(bescheidItem.getId(), bescheidItem.getVersion(), Bescheid.Status.DRAFT);
 			throw e;
 		}
 		bescheidClientAttributeService.setAntragResult(bescheidItem.getVorgangId(), getBewilligt(bescheidItem));
@@ -148,11 +150,21 @@ class BescheidService {
 		return MapUtils.getBooleanValue(bescheidItem.getItem(), Bescheid.FIELD_BEWILLIGT, false);
 	}
 
-	AttachedItem setBescheidSendStatus(AttachedItem bescheidItem) {
-		return bescheidItem.toBuilder().item(Map.of(Bescheid.FIELD_STATUS, Bescheid.Status.SEND.name())).build();
+	public BescheidManagerConfig getConfig() {
+		return BescheidManagerConfig.builder()
+				.version(buildProperties.getVersion())
+				.javaVersion(getJavaVersion())
+				.features(buildFeatures())
+				.build();
 	}
 
-	AttachedItem setBescheidDraftStatus(AttachedItem bescheidItem) {
-		return bescheidItem.toBuilder().item(Map.of(Bescheid.FIELD_STATUS, Bescheid.Status.DRAFT.name())).build();
+	String getJavaVersion() {
+		return System.getProperty("java.version");
+	}
+
+	BescheidManagerConfig.Features buildFeatures() {
+		return BescheidManagerConfig.Features.builder()
+				.canCreateBescheidDocument(remoteService.isPresent())
+				.build();
 	}
 }
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/GrpcBescheidMapper.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/GrpcBescheidMapper.java
index 371bf37a8d7262e6e46857b6b4b6853a7a033194..7a8ee52f6ed2cee71cf8bffd38763b7fa9e58b48 100644
--- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/GrpcBescheidMapper.java
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/GrpcBescheidMapper.java
@@ -33,4 +33,14 @@ public interface GrpcBescheidMapper {
 	default String fromOptional(Optional<String> optionalString) {
 		return optionalString.orElse(StringUtils.EMPTY);
 	}
+
+	@Mapping(target = "versionBytes", ignore = true)
+	@Mapping(target = "unknownFields", ignore = true)
+	@Mapping(target = "mergeUnknownFields", ignore = true)
+	@Mapping(target = "mergeFrom", ignore = true)
+	@Mapping(target = "mergeFeatures", ignore = true)
+	@Mapping(target = "javaVersionBytes", ignore = true)
+	@Mapping(target = "clearOneof", ignore = true)
+	@Mapping(target = "clearField", ignore = true)
+	GrpcBescheidManagerConfigResponse fromBescheidManagerConfig(BescheidManagerConfig bescheidManagerConfig);
 }
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemMapper.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemMapper.java
index c2b373a33138cc4df45ea98c5f516921713f4863..9de9fedfcdb9c670b2451026e5fa21ee691a52fb 100644
--- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemMapper.java
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemMapper.java
@@ -23,14 +23,60 @@
  */
 package de.ozgcloud.bescheid.attacheditem;
 
+import static java.util.Objects.*;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Optional;
+
+import org.apache.commons.collections.MapUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.mapstruct.Mapper;
 
+import de.ozgcloud.bescheid.Bescheid;
+import de.ozgcloud.bescheid.GrpcBescheid;
 import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper;
 import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItem;
 
-@Mapper(uses = { GrpcObjectMapper.class})
-interface AttachedItemMapper {
+@Mapper(uses = { GrpcObjectMapper.class })
+public interface AttachedItemMapper {
 
 	AttachedItem mapFromVorgangAttachedItem(GrpcVorgangAttachedItem item);
 
+	default GrpcBescheid toBescheid(AttachedItem bescheidItem) {
+		var bescheidBuilder = GrpcBescheid.newBuilder().setVersion(bescheidItem.getVersion());
+		Optional.ofNullable(bescheidItem.getId()).ifPresent(bescheidBuilder::setId);
+		var bescheidData = bescheidItem.getItem();
+		Optional.ofNullable(MapUtils.getString(bescheidData, Bescheid.FIELD_BESCHIEDEN_AM)).map(StringUtils::trimToNull)
+				.ifPresent(bescheidBuilder::setBeschiedenAm);
+		Optional.ofNullable(MapUtils.getBoolean(bescheidData, Bescheid.FIELD_BEWILLIGT)).ifPresent(bescheidBuilder::setBewilligt);
+		Optional.ofNullable(MapUtils.getString(bescheidData, Bescheid.FIELD_BESCHEID_DOCUMENT)).map(StringUtils::trimToNull)
+				.ifPresent(bescheidBuilder::setBescheidDocument);
+		Optional.ofNullable(MapUtils.getString(bescheidData, Bescheid.FIELD_SEND_BY)).map(StringUtils::trimToNull)
+				.ifPresent(bescheidBuilder::setSendBy);
+		Optional.ofNullable(MapUtils.getString(bescheidData, Bescheid.FIELD_NACHRICHT_TEXT)).map(StringUtils::trimToNull)
+				.ifPresent(bescheidBuilder::setNachrichtText);
+		Optional.ofNullable(MapUtils.getString(bescheidData, Bescheid.FIELD_NACHRICHT_SUBJECT)).map(StringUtils::trimToNull)
+				.ifPresent(bescheidBuilder::setNachrichtSubject);
+		Optional.ofNullable(MapUtils.getString(bescheidData, Bescheid.FIELD_STATUS)).map(StringUtils::trimToNull)
+				.ifPresent(bescheidBuilder::setStatus);
+		Optional.ofNullable(bescheidData.get(Bescheid.FIELD_ATTACHMENTS)).map(this::toAttachments).ifPresent(bescheidBuilder::addAllAttachments);
+		return bescheidBuilder.build();
+	}
+
+	@SuppressWarnings("unchecked")
+	default Collection<String> toAttachments(Object attachmentsObject) {
+		if (attachmentsObject instanceof Collection<?> attachments) {
+			return (Collection<String>) attachments;
+		}
+		if (attachmentsObject instanceof String attachment) {
+			attachment = StringUtils.trimToNull(attachment);
+			if (nonNull(attachment)) {
+				return List.of(attachment);
+			}
+		} else if (nonNull(attachmentsObject)) {
+			return List.of(String.valueOf(attachmentsObject));
+		}
+		return null; //NOSONAR
+	}
 }
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java
index 0b2b6340757011822e3bb0778d23a66d22851f8b..7a3e82b746121e49326e8d24d2484f41693c912a 100644
--- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java
@@ -25,18 +25,24 @@ package de.ozgcloud.bescheid.attacheditem;
 
 import static java.util.Objects.*;
 
+import java.util.Arrays;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Optional;
 import java.util.function.Predicate;
+import java.util.stream.Collectors;
 
 import org.apache.commons.collections.MapUtils;
+import org.apache.commons.lang3.ArrayUtils;
 import org.springframework.stereotype.Service;
 
 import de.ozgcloud.apilib.common.command.OzgCloudCommand;
 import de.ozgcloud.apilib.common.command.OzgCloudCommandService;
 import de.ozgcloud.apilib.common.command.grpc.CommandMapper;
+import de.ozgcloud.bescheid.Bescheid;
 import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor;
+import de.ozgcloud.bescheid.vorgang.VorgangId;
 import de.ozgcloud.command.Command;
 import de.ozgcloud.common.errorhandling.TechnicalException;
 import lombok.RequiredArgsConstructor;
@@ -53,17 +59,17 @@ public class AttachedItemService {
 	static final String DELETE_ATTACHED_ITEM = "DELETE_ATTACHED_ITEM";
 	static final String PATCH_ATTACHED_ITEM = "PATCH_ATTACHED_ITEM";
 
-	private static final Predicate<String> notExpectedSendByValue = sendBy -> !BescheidItem.ACCEPTED_SEND_BY_VALUES.contains(sendBy);
+	private static final Predicate<String> notExpectedSendByValue = sendBy -> !ArrayUtils.contains(Bescheid.SendBy.values(), sendBy);
 
 	private final OzgCloudCommandService commandService;
 	private final VorgangAttachedItemRemoteService remoteService;
 	private final CommandMapper commandMapper;
 
-	public Optional<BescheidItem> findBescheidItem(String vorgangId) {
+	public Optional<AttachedItem> findBescheidItem(String vorgangId) {
 		return remoteService.findBescheidDraft(vorgangId);
 	}
 
-	public BescheidItem getBescheidItem(String id) {
+	public AttachedItem getBescheidItem(String id) {
 		return remoteService.getBescheid(id);
 	}
 
@@ -73,7 +79,7 @@ public class AttachedItemService {
 				.map(bescheid -> overrideAttachedItem(bescheid, command)).orElseGet(() -> createAttachedItem(command));
 	}
 
-	String overrideAttachedItem(BescheidItem bescheidItem, Command command) {
+	String overrideAttachedItem(AttachedItem bescheidItem, Command command) {
 		var bodyObject = buildAttachedItemAsMap(command, buildItemMapWithAllBescheidFields(command));
 		var finishedOzgCloudCommand = commandService.createAndWaitUntilDone(buildUpdateAttachedItemCommand(bescheidItem, bodyObject));
 		return finishedOzgCloudCommand.getCreatedResource();
@@ -81,13 +87,13 @@ public class AttachedItemService {
 
 	Map<String, Object> buildItemMapWithAllBescheidFields(Command command) {
 		var result = new HashMap<String, Object>();
-		result.put(BescheidItem.FIELD_BESCHIEDEN_AM, command.getBodyObject().get(BescheidItem.FIELD_BESCHIEDEN_AM));
-		result.put(BescheidItem.FIELD_BEWILLIGT, command.getBodyObject().get(BescheidItem.FIELD_BEWILLIGT));
-		result.put(BescheidItem.FIELD_BESCHEID_DOCUMENT, command.getBodyObject().get(BescheidItem.FIELD_BESCHEID_DOCUMENT));
-		result.put(BescheidItem.FIELD_SEND_BY, command.getBodyObject().get(BescheidItem.FIELD_SEND_BY));
-		result.put(BescheidItem.FIELD_NACHRICHT_TEXT, command.getBodyObject().get(BescheidItem.FIELD_NACHRICHT_TEXT));
-		result.put(BescheidItem.FIELD_NACHRICHT_SUBJECT, command.getBodyObject().get(BescheidItem.FIELD_NACHRICHT_SUBJECT));
-		result.put(BescheidItem.FIELD_ATTACHMENTS, command.getBodyObject().get(BescheidItem.FIELD_ATTACHMENTS));
+		result.put(Bescheid.FIELD_BESCHIEDEN_AM, command.getBodyObject().get(Bescheid.FIELD_BESCHIEDEN_AM));
+		result.put(Bescheid.FIELD_BEWILLIGT, command.getBodyObject().get(Bescheid.FIELD_BEWILLIGT));
+		result.put(Bescheid.FIELD_BESCHEID_DOCUMENT, command.getBodyObject().get(Bescheid.FIELD_BESCHEID_DOCUMENT));
+		result.put(Bescheid.FIELD_SEND_BY, command.getBodyObject().get(Bescheid.FIELD_SEND_BY));
+		result.put(Bescheid.FIELD_NACHRICHT_TEXT, command.getBodyObject().get(Bescheid.FIELD_NACHRICHT_TEXT));
+		result.put(Bescheid.FIELD_NACHRICHT_SUBJECT, command.getBodyObject().get(Bescheid.FIELD_NACHRICHT_SUBJECT));
+		result.put(Bescheid.FIELD_ATTACHMENTS, command.getBodyObject().get(Bescheid.FIELD_ATTACHMENTS));
 		return result;
 	}
 
@@ -99,7 +105,7 @@ public class AttachedItemService {
 		commandService.createAndWaitUntilDone(buildUpdateAttachedItemCommand(bescheidItem, bodyObject));
 	}
 
-	OzgCloudCommand buildUpdateAttachedItemCommand(BescheidItem bescheidItem, Map<String, Object> bodyObject) {
+	OzgCloudCommand buildUpdateAttachedItemCommand(AttachedItem bescheidItem, Map<String, Object> bodyObject) {
 		return OzgCloudCommand.builder()
 				.vorgangId(commandMapper.toOzgCloudVorgangId(bescheidItem.getVorgangId()))
 				.relationId(commandMapper.mapRelationId(bescheidItem.getId()))
@@ -124,23 +130,23 @@ public class AttachedItemService {
 
 	Map<String, Object> buildAttachedItemAsMap(Command command, Map<String, Object> itemmap) {
 		var result = new HashMap<String, Object>();
-		result.put(BescheidItem.PROPERTY_VORGANG_ID, command.getVorgangId());
-		result.put(BescheidItem.PROPERTY_CLIENT, BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME);
-		result.put(BescheidItem.PROPERTY_ITEM_NAME, BESCHEID_ITEM_NAME);
-		result.put(BescheidItem.PROPERTY_ITEM, itemmap);
+		result.put(AttachedItem.PROPERTY_VORGANG_ID, command.getVorgangId());
+		result.put(AttachedItem.PROPERTY_CLIENT, BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME);
+		result.put(AttachedItem.PROPERTY_ITEM_NAME, BESCHEID_ITEM_NAME);
+		result.put(AttachedItem.PROPERTY_ITEM, itemmap);
 		return result;
 	}
 
 	Map<String, Object> buildItemMapWithExistingBescheidFields(Command command) {
 		var result = new HashMap<String, Object>();
-		result.put(BescheidItem.FIELD_STATUS, BescheidItem.Status.DRAFT.name());
-		addValueFromMapIfExists(command.getBodyObject(), BescheidItem.FIELD_BESCHIEDEN_AM, result);
-		addValueFromMapIfExists(command.getBodyObject(), BescheidItem.FIELD_BEWILLIGT, result);
-		addValueFromMapIfExists(command.getBodyObject(), BescheidItem.FIELD_BESCHEID_DOCUMENT, result);
-		addValueFromMapIfExists(command.getBodyObject(), BescheidItem.FIELD_SEND_BY, result);
-		addValueFromMapIfExists(command.getBodyObject(), BescheidItem.FIELD_NACHRICHT_TEXT, result);
-		addValueFromMapIfExists(command.getBodyObject(), BescheidItem.FIELD_NACHRICHT_SUBJECT, result);
-		addValueFromMapIfExists(command.getBodyObject(), BescheidItem.FIELD_ATTACHMENTS, result);
+		result.put(Bescheid.FIELD_STATUS, Bescheid.Status.DRAFT.name());
+		addValueFromMapIfExists(command.getBodyObject(), Bescheid.FIELD_BESCHIEDEN_AM, result);
+		addValueFromMapIfExists(command.getBodyObject(), Bescheid.FIELD_BEWILLIGT, result);
+		addValueFromMapIfExists(command.getBodyObject(), Bescheid.FIELD_BESCHEID_DOCUMENT, result);
+		addValueFromMapIfExists(command.getBodyObject(), Bescheid.FIELD_SEND_BY, result);
+		addValueFromMapIfExists(command.getBodyObject(), Bescheid.FIELD_NACHRICHT_TEXT, result);
+		addValueFromMapIfExists(command.getBodyObject(), Bescheid.FIELD_NACHRICHT_SUBJECT, result);
+		addValueFromMapIfExists(command.getBodyObject(), Bescheid.FIELD_ATTACHMENTS, result);
 		return result;
 	}
 
@@ -151,16 +157,16 @@ public class AttachedItemService {
 	}
 
 	void validateBescheidData(Map<String, Object> bodyObject) {
-		if (isNull(bodyObject.get(BescheidItem.FIELD_BESCHIEDEN_AM))) {
-			throw new TechnicalException("Fields '%s' is required for bescheid creation" .formatted(BescheidItem.FIELD_BESCHIEDEN_AM));
+		if (isNull(bodyObject.get(Bescheid.FIELD_BESCHIEDEN_AM))) {
+			throw new TechnicalException("Fields '%s' is required for bescheid creation".formatted(Bescheid.FIELD_BESCHIEDEN_AM));
 		}
-		if (isNull(bodyObject.get(BescheidItem.FIELD_BEWILLIGT))) {
-			throw new TechnicalException("Fields '%s' is required for bescheid creation" .formatted(BescheidItem.FIELD_BEWILLIGT));
+		if (isNull(bodyObject.get(Bescheid.FIELD_BEWILLIGT))) {
+			throw new TechnicalException("Fields '%s' is required for bescheid creation".formatted(Bescheid.FIELD_BEWILLIGT));
 		}
-		Optional.ofNullable(MapUtils.getString(bodyObject, BescheidItem.FIELD_SEND_BY)).filter(notExpectedSendByValue)
+		Optional.ofNullable(MapUtils.getString(bodyObject, Bescheid.FIELD_SEND_BY)).filter(notExpectedSendByValue)
 				.ifPresent(sendBy ->
-						LOG.warn("Unexpected value for field '%s': %s. Allowed are: %s" .formatted(BescheidItem.FIELD_SEND_BY, sendBy,
-								String.join(", ", BescheidItem.ACCEPTED_SEND_BY_VALUES)))
+						LOG.warn("Unexpected value for field '%s': %s. Allowed are: %s".formatted(Bescheid.FIELD_SEND_BY, sendBy,
+								Arrays.stream(Bescheid.SendBy.values()).map(Bescheid.SendBy::name).collect(Collectors.joining(","))))
 				);
 	}
 
@@ -170,14 +176,14 @@ public class AttachedItemService {
 		commandService.createAndWaitUntilDone(buildDeleteItemCommand(command, bescheid));
 	}
 
-	void validateBescheidStatus(BescheidItem bescheid) {
-		var bescheidStatus = MapUtils.getString(bescheid.getBescheidData(), BescheidItem.FIELD_STATUS);
-		if (BescheidItem.Status.DRAFT.not(bescheidStatus)) {
+	void validateBescheidStatus(AttachedItem bescheid) {
+		var bescheidStatus = MapUtils.getString(bescheid.getItem(), Bescheid.FIELD_STATUS);
+		if (Bescheid.Status.DRAFT.not(bescheidStatus)) {
 			throw new TechnicalException("Bescheid draft with ID '%s' has an unexpected status: '%s'" .formatted(bescheid.getId(), bescheidStatus));
 		}
 	}
 
-	OzgCloudCommand buildDeleteItemCommand(Command command, BescheidItem bescheid) {
+	OzgCloudCommand buildDeleteItemCommand(Command command, AttachedItem bescheid) {
 		return OzgCloudCommand.builder()
 				.vorgangId(commandMapper.toOzgCloudVorgangId(command.getVorgangId()))
 				.relationId(commandMapper.mapRelationId(bescheid.getId()))
@@ -190,28 +196,25 @@ public class AttachedItemService {
 		return remoteService.getItem(id);
 	}
 
-	public void patch(AttachedItem item) {
-		commandService.createAndWaitUntilDone(buildPatchBescheidCommand(item));
+	public void setBescheidStatus(String id, long version, Bescheid.Status status) {
+		commandService.createAndWaitUntilDone(buildPatchBescheidCommand(id, version, status));
 	}
 
-	OzgCloudCommand buildPatchBescheidCommand(AttachedItem bescheidItem) {
+	OzgCloudCommand buildPatchBescheidCommand(String bescheidId, long bescheidVersion, Bescheid.Status bescheidStatus) {
 		return OzgCloudCommand.builder()
-				.vorgangId(commandMapper.toOzgCloudVorgangId(bescheidItem.getVorgangId()))
-				.relationId(commandMapper.mapRelationId(bescheidItem.getId()))
-				.relationVersion(bescheidItem.getVersion())
+				.relationId(commandMapper.mapRelationId(bescheidId))
+				.relationVersion(bescheidVersion)
 				.order(PATCH_ATTACHED_ITEM)
-				.bodyObject(buildObjectMap(bescheidItem))
+				.bodyObject(buildObjectMap(bescheidId, bescheidStatus))
 				.build();
 	}
 
-	Map<String, Object> buildObjectMap(AttachedItem bescheidItem) {
-		var bodyObject = new HashMap<String, Object>();
-		bodyObject.put(AttachedItem.PROPERTY_ID, bescheidItem.getId());
-		bodyObject.put(AttachedItem.PROPERTY_CLIENT, bescheidItem.getClient());
-		bodyObject.put(AttachedItem.PROPERTY_VORGANG_ID, bescheidItem.getVorgangId());
-		bodyObject.put(AttachedItem.PROPERTY_ITEM_NAME, bescheidItem.getItemName());
-		bodyObject.put(AttachedItem.PROPERTY_VERSION, bescheidItem.getVersion());
-		bodyObject.put(AttachedItem.PROPERTY_ITEM, bescheidItem.getItem());
-		return bodyObject;
+	Map<String, Object> buildObjectMap(String bescheidId, Bescheid.Status bescheidStatus) {
+		return Map.of(AttachedItem.PROPERTY_ID, bescheidId,
+				AttachedItem.PROPERTY_ITEM, Map.of(Bescheid.FIELD_STATUS, bescheidStatus.name()));
+	}
+
+	public Collection<AttachedItem> findAllBescheid(VorgangId vorgangId) {
+		return remoteService.findAllBescheid(vorgangId);
 	}
 }
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/BescheidItem.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/BescheidItem.java
deleted file mode 100644
index a018068459db579d4c480c4bf7223919d848fd6c..0000000000000000000000000000000000000000
--- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/BescheidItem.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * 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.bescheid.attacheditem;
-
-import java.util.Map;
-import java.util.Set;
-
-import lombok.Builder;
-import lombok.Getter;
-
-@Builder(toBuilder = true)
-@Getter
-@Deprecated(since = "2.6.0")
-public class BescheidItem {
-
-	static final Set<String> ACCEPTED_SEND_BY_VALUES = Set.of("POSTFACH", "MANUAL");
-
-	public static final String PROPERTY_ID = "id";
-	public static final String PROPERTY_CLIENT = "client";
-	public static final String PROPERTY_VORGANG_ID = "vorgangId";
-	public static final String PROPERTY_ITEM_NAME = "itemName";
-	public static final String PROPERTY_VERSION = "version";
-	public static final String PROPERTY_ITEM = "item";
-
-	public static final String FIELD_STATUS = "status";
-	public static final String FIELD_BESCHIEDEN_AM = "beschiedenAm";
-	public static final String FIELD_BEWILLIGT = "bewilligt";
-	public static final String FIELD_BESCHEID_DOCUMENT = "bescheidDocument";
-	public static final String FIELD_ATTACHMENTS = "attachments";
-	public static final String FIELD_SEND_BY = "sendBy";
-	public static final String FIELD_NACHRICHT_TEXT = "nachrichtText";
-	public static final String FIELD_NACHRICHT_SUBJECT = "nachrichtSubject";
-
-	private String id;
-	@Builder.Default
-	private long version = 0L;
-
-	private String client;
-	private String vorgangId;
-	private String itemName;
-
-	private Map<String, Object> bescheidData;
-
-	public enum Status {
-		DRAFT, BESCHEID, SEND;
-
-		public boolean not(String value) {
-			return !hasValue(value);
-		}
-
-		public boolean hasValue(String value) {
-			return this.name().equalsIgnoreCase(value);
-		}
-	}
-}
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/BescheidItemMapper.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/BescheidItemMapper.java
deleted file mode 100644
index 2c915d65d934abab2636433b02e30a1eaf8e764d..0000000000000000000000000000000000000000
--- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/BescheidItemMapper.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * 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.bescheid.attacheditem;
-
-import static java.util.Objects.*;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Optional;
-import java.util.stream.Stream;
-
-import org.apache.commons.collections.MapUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.stereotype.Component;
-
-import de.ozgcloud.bescheid.GrpcBescheid;
-import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper;
-import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemResponse;
-import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItem;
-import lombok.RequiredArgsConstructor;
-
-@Component
-@RequiredArgsConstructor
-@Deprecated(since = "2.6.0")
-public class BescheidItemMapper {
-
-	private final GrpcObjectMapper grpcObjectMapper;
-
-	public Stream<BescheidItem> fromFindVorgangAttachedItemResponse(GrpcFindVorgangAttachedItemResponse grpcResponse) {
-		return grpcResponse.getVorgangAttachedItemsList().stream()
-				.map(this::mapFromVorgangAttachedItem);
-	}
-
-	BescheidItem mapFromVorgangAttachedItem(GrpcVorgangAttachedItem item) {
-		return BescheidItem.builder()
-				.id(item.getId())
-				.version(item.getVersion())
-				.client(item.getClient())
-				.vorgangId(item.getVorgangId())
-				.itemName(item.getItemName())
-				.bescheidData(grpcObjectMapper.mapFromGrpc(item.getItem()))
-				.build();
-	}
-
-	public GrpcBescheid toBescheid(BescheidItem bescheid) {
-		var bescheidBuilder = GrpcBescheid.newBuilder().setVersion(bescheid.getVersion());
-		Optional.ofNullable(bescheid.getId()).ifPresent(bescheidBuilder::setId);
-		var bescheidData = bescheid.getBescheidData();
-		Optional.ofNullable(MapUtils.getString(bescheidData, BescheidItem.FIELD_BESCHIEDEN_AM)).map(StringUtils::trimToNull)
-				.ifPresent(bescheidBuilder::setBeschiedenAm);
-		Optional.ofNullable(MapUtils.getBoolean(bescheidData, BescheidItem.FIELD_BEWILLIGT)).ifPresent(bescheidBuilder::setBewilligt);
-		Optional.ofNullable(MapUtils.getString(bescheidData, BescheidItem.FIELD_BESCHEID_DOCUMENT)).map(StringUtils::trimToNull)
-				.ifPresent(bescheidBuilder::setBescheidDocument);
-		Optional.ofNullable(MapUtils.getString(bescheidData, BescheidItem.FIELD_SEND_BY)).map(StringUtils::trimToNull)
-				.ifPresent(bescheidBuilder::setSendBy);
-		Optional.ofNullable(MapUtils.getString(bescheidData, BescheidItem.FIELD_NACHRICHT_TEXT)).map(StringUtils::trimToNull)
-				.ifPresent(bescheidBuilder::setNachrichtText);
-		Optional.ofNullable(MapUtils.getString(bescheidData, BescheidItem.FIELD_NACHRICHT_SUBJECT)).map(StringUtils::trimToNull)
-				.ifPresent(bescheidBuilder::setNachrichtSubject);
-		Optional.ofNullable(bescheidData.get(BescheidItem.FIELD_ATTACHMENTS)).map(this::toAttachments).ifPresent(bescheidBuilder::addAllAttachments);
-		return bescheidBuilder.build();
-	}
-
-	@SuppressWarnings("unchecked")
-	Collection<String> toAttachments(Object attachmentsObject) {
-		if (attachmentsObject instanceof Collection<?> attachments) {
-			return (Collection<String>) attachments;
-		}
-		if (attachmentsObject instanceof String attachment) {
-			attachment = StringUtils.trimToNull(attachment);
-			if (nonNull(attachment)) {
-				return List.of(attachment);
-			}
-		} else if (nonNull(attachmentsObject)) {
-			return List.of(String.valueOf(attachmentsObject));
-		}
-		return null; //NOSONAR
-	}
-}
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/Utils.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/Utils.java
index c63bbfe295df2a72118b8a95b9d6188653fea4f4..d8d3d59256d47d46f24f0c6521ff35d74367b220 100644
--- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/Utils.java
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/Utils.java
@@ -33,7 +33,7 @@ import lombok.NoArgsConstructor;
 class Utils {
 
 	public static String extractClient(Command command) {
-		return MapUtils.getString(command.getBodyObject(), BescheidItem.PROPERTY_CLIENT);
+		return MapUtils.getString(command.getBodyObject(), AttachedItem.PROPERTY_CLIENT);
 	}
 
 }
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteService.java
index aa6709149d8d968e263c86e0197e281ff99c3a8e..ff07e6d16434e02343d1a07605c8351330d640ba 100644
--- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteService.java
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteService.java
@@ -27,13 +27,17 @@ import static de.ozgcloud.bescheid.attacheditem.AttachedItemService.*;
 
 import java.time.LocalDate;
 import java.util.Comparator;
+import java.util.List;
 import java.util.Optional;
+import java.util.stream.Stream;
 
 import org.apache.commons.collections.MapUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import de.ozgcloud.bescheid.Bescheid;
 import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor;
+import de.ozgcloud.bescheid.vorgang.VorgangId;
 import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemRequest;
 import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItemRequest;
 import de.ozgcloud.vorgang.vorgangAttachedItem.VorgangAttachedItemServiceGrpc.VorgangAttachedItemServiceBlockingStub;
@@ -45,9 +49,9 @@ import net.devh.boot.grpc.client.inject.GrpcClient;
 @Log4j2
 class VorgangAttachedItemRemoteService {
 
-	private static final Comparator<BescheidItem> BY_BESCHIEDEN_AM_DESC = (bescheid1, bescheid2) -> {
-		var beschiedenAm1 = LocalDate.parse(MapUtils.getString(bescheid1.getBescheidData(), BescheidItem.FIELD_BESCHIEDEN_AM));
-		var beschiedenAm2 = LocalDate.parse(MapUtils.getString(bescheid2.getBescheidData(), BescheidItem.FIELD_BESCHIEDEN_AM));
+	private static final Comparator<AttachedItem> BY_BESCHIEDEN_AM_DESC = (bescheid1, bescheid2) -> {
+		var beschiedenAm1 = LocalDate.parse(MapUtils.getString(bescheid1.getItem(), Bescheid.FIELD_BESCHIEDEN_AM));
+		var beschiedenAm2 = LocalDate.parse(MapUtils.getString(bescheid2.getItem(), Bescheid.FIELD_BESCHIEDEN_AM));
 		return beschiedenAm2.compareTo(beschiedenAm1);
 	};
 
@@ -56,14 +60,16 @@ class VorgangAttachedItemRemoteService {
 	@Autowired
 	private ClientInterceptor bescheidCallContextInterceptor;
 	@Autowired
-	private BescheidItemMapper bescheidItemMapper;
-	@Autowired
 	private AttachedItemMapper attachedItemMapper;
 
-	public Optional<BescheidItem> findBescheidDraft(String vorgangId) {
+	public Optional<AttachedItem> findBescheidDraft(String vorgangId) {
 		return findBescheidDraft(buildFindRequest(vorgangId));
 	}
 
+	public List<AttachedItem> findAllBescheid(VorgangId vorgangId) {
+		return findAllBescheid(buildFindRequest(vorgangId.toString())).toList();
+	}
+
 	GrpcFindVorgangAttachedItemRequest buildFindRequest(String vorgangId) {
 		return GrpcFindVorgangAttachedItemRequest.newBuilder()
 				.setVorgangId(vorgangId)
@@ -72,10 +78,8 @@ class VorgangAttachedItemRemoteService {
 				.build();
 	}
 
-	Optional<BescheidItem> findBescheidDraft(GrpcFindVorgangAttachedItemRequest request) {
-		var grpcResponse = getServiceStub().find(request);
-		var bescheidItems = bescheidItemMapper.fromFindVorgangAttachedItemResponse(grpcResponse).filter(this::hasStatusDraft)
-				.sorted(BY_BESCHIEDEN_AM_DESC).toList();
+	Optional<AttachedItem> findBescheidDraft(GrpcFindVorgangAttachedItemRequest request) {
+		var bescheidItems = findAllBescheid(request).filter(this::hasStatusDraft).toList();
 		if (bescheidItems.size() > 1) {
 			LOG.error("Found more than one ({}) draft bescheid for vorgangId: {}. Return one with last beschiedenAm date", bescheidItems.size(),
 					bescheidItems.getFirst().getVorgangId());
@@ -83,13 +87,19 @@ class VorgangAttachedItemRemoteService {
 		return bescheidItems.isEmpty() ? Optional.empty() : Optional.of(bescheidItems.getFirst());
 	}
 
-	boolean hasStatusDraft(BescheidItem bescheidItem) {
-		return BescheidItem.Status.DRAFT.hasValue(MapUtils.getString(bescheidItem.getBescheidData(), BescheidItem.FIELD_STATUS));
+	Stream<AttachedItem> findAllBescheid(GrpcFindVorgangAttachedItemRequest request) {
+		var grpcResponse = getServiceStub().find(request);
+		return grpcResponse.getVorgangAttachedItemsList().stream().map(attachedItemMapper::mapFromVorgangAttachedItem)
+				.sorted(BY_BESCHIEDEN_AM_DESC);
+	}
+
+	boolean hasStatusDraft(AttachedItem bescheidItem) {
+		return Bescheid.Status.DRAFT.hasValue(bescheidItem.getItem().get(Bescheid.FIELD_STATUS));
 	}
 
-	public BescheidItem getBescheid(String bescheidId) {
+	public AttachedItem getBescheid(String bescheidId) {
 		var grpcVorgangAttachedItemResponse = getServiceStub().getById(buildGetByIdRequest(bescheidId));
-		return bescheidItemMapper.mapFromVorgangAttachedItem(grpcVorgangAttachedItemResponse.getVorgangAttachedItem());
+		return attachedItemMapper.mapFromVorgangAttachedItem(grpcVorgangAttachedItemResponse.getVorgangAttachedItem());
 	}
 
 	public AttachedItem getItem(String id) {
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attributes/ClientAttributeService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attributes/ClientAttributeService.java
index 1bd31a95ad2bcafe9628557b233b0cb5799f0060..158597163c2ee60cfc4640a47e4704b453bda5b6 100644
--- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attributes/ClientAttributeService.java
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attributes/ClientAttributeService.java
@@ -31,7 +31,7 @@ import lombok.RequiredArgsConstructor;
 @RequiredArgsConstructor
 public class ClientAttributeService {
 
-	public static final String ATTRIBUTE_NAME_ANTRAG_BEWILLIGT = "ANTRAG_BEWILLIGT";
+	public static final String ATTRIBUTE_NAME_ANTRAG_BEWILLIGT = "antragBewilligt";
 
 	private final ClientAttributeRemoteService bescheidClientAttributeRemoteService;
 
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtService.java
index fc4a6e29d4b5b32820dc96b93c8d93e36eea985c..52d79a92202cba4286beaba7902536675abb679f 100644
--- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtService.java
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtService.java
@@ -2,29 +2,43 @@ package de.ozgcloud.bescheid.nachricht;
 
 import java.io.IOException;
 import java.io.StringWriter;
+import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
 
-import org.springframework.beans.factory.annotation.Autowired;
+import org.apache.commons.collections.MapUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
+import de.ozgcloud.apilib.common.command.OzgCloudCommand;
+import de.ozgcloud.apilib.common.command.OzgCloudCommandService;
+import de.ozgcloud.apilib.common.command.grpc.CommandMapper;
 import de.ozgcloud.bescheid.Bescheid;
 import de.ozgcloud.bescheid.vorgang.Vorgang.PostfachAddress;
 import de.ozgcloud.common.errorhandling.TechnicalException;
 import freemarker.template.Configuration;
 import freemarker.template.Template;
 import freemarker.template.TemplateException;
+import lombok.RequiredArgsConstructor;
 import lombok.extern.log4j.Log4j2;
 
 @Service
 @Log4j2
+@RequiredArgsConstructor
 public class NachrichtService {
 
-	@Autowired
-	private NachrichtRemoteService remoteService;
+	public static final String SEND_POSTFACH_NACHRICHT_ORDER = "SEND_POSTFACH_NACHRICHT";
+	public static final String FIELD_POSTFACH_ID = "postfachId";
+	static final String FIELD_REPLY_OPTION = "replyOption";
+	static final String REPLY_OPTION = "POSSIBLE";
+	static final String FIELD_SUBJECT = "subject";
+	static final String FIELD_MAIL_BODY = "mailBody";
+	static final String FIELD_ATTACHMENTS = "attachments";
 
-	@Autowired
-	private Configuration freemarkerCfg;
+	private final NachrichtRemoteService remoteService;
+	private final Configuration freemarkerCfg;
+	private final OzgCloudCommandService commandService;
+	private final CommandMapper commandMapper;
 
 	static final String SUBJECT = "Ihr Antrag";
 
@@ -45,14 +59,6 @@ public class NachrichtService {
 				.build());
 	}
 
-	Optional<PostfachAddress> getAddress(Bescheid bescheid) {
-		var serviceKonto = bescheid.getServiceKonto();
-		if (Objects.nonNull(serviceKonto)) {
-			return Optional.of(serviceKonto.getPostfachAddresses().get(0));
-		}
-		return Optional.empty();
-	}
-
 	String buildMessage(Bescheid bescheid) {
 		return bescheid.getNachrichtText()
 				.orElseGet(() -> fillTemplate(TEMPLATE_FILE, bescheid));
@@ -77,4 +83,46 @@ public class NachrichtService {
 			throw new TechnicalException("Error loading mail template", e);
 		}
 	}
+
+	public void sendNachricht(Bescheid bescheid) {
+		var commandToCreate = buildSendBescheidCommand(bescheid);
+		commandService.createAndWaitUntilDone(commandToCreate);
+	}
+
+	OzgCloudCommand buildSendBescheidCommand(Bescheid bescheid) {
+		return OzgCloudCommand.builder()
+				.vorgangId(commandMapper.toOzgCloudVorgangId(bescheid.getVorgangId().toString()))
+				.relationId(commandMapper.mapRelationId(bescheid.getVorgangId().toString()))
+				.order(SEND_POSTFACH_NACHRICHT_ORDER)
+				.createdBy(commandMapper.toOzgCloudUserId(bescheid.getCreatedBy().toString()))
+				.bodyObject(buildSendNachrichtCommandBody(bescheid))
+				.build();
+	}
+
+	Map<String, Object> buildSendNachrichtCommandBody(Bescheid bescheid) {
+		return Map.of(FIELD_POSTFACH_ID, getPostfachId(bescheid),
+				FIELD_REPLY_OPTION, REPLY_OPTION,
+				FIELD_SUBJECT, bescheid.getNachrichtSubject().orElse(SUBJECT),
+				FIELD_MAIL_BODY, bescheid.getNachrichtText().orElse(StringUtils.EMPTY),
+				FIELD_ATTACHMENTS, bescheid.getBescheidFileId().toString()
+		);
+
+	}
+
+	String getPostfachId(Bescheid bescheid) {
+		return getAddress(bescheid)
+				.map(PostfachAddress::getIdentifier)
+				.map(identifier -> MapUtils.getString(identifier, FIELD_POSTFACH_ID))
+				.filter(StringUtils::isNotBlank)
+				.orElseThrow(() -> new TechnicalException("No PostfachId found for Bescheid (vorgangId: %s)".formatted(bescheid.getVorgangId())));
+	}
+
+	Optional<PostfachAddress> getAddress(Bescheid bescheid) {
+		var serviceKonto = bescheid.getServiceKonto();
+		if (Objects.nonNull(serviceKonto)) {
+			return Optional.of(serviceKonto.getPostfachAddresses().get(0));
+		}
+		return Optional.empty();
+	}
+
 }
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java
index 15ab8a87d9ffee2ef4c5a532a924c16d2405a5da..8afc3d2ba7b37ed2b79a2574c946473bcf9ae7e6 100644
--- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java
@@ -26,7 +26,7 @@ public class VorgangService {
 		bescheiden(getById(VorgangId.from(vorgangId)));
 	}
 
-	public void bescheiden(Vorgang vorgang) {
+	private void bescheiden(Vorgang vorgang) {
 		commandService.createAndWaitUntilDone(buildBescheidenCommand(vorgang));
 	}
 
@@ -39,8 +39,4 @@ public class VorgangService {
 				.build();
 	}
 
-	public Vorgang.ServiceKonto getServiceKonto(String vorgangId) {
-		var vorgang = getById(VorgangId.from(vorgangId));
-		return vorgang.getServiceKonto();
-	}
 }
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java b/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java
index 25838cf4939ce8d9b2db28ac1f2bf404a83304e7..a8b47587248d0a8b9e91d315b4a3d422304f13f3 100644
--- a/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java
+++ b/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java
@@ -38,8 +38,8 @@ import de.ozgcloud.apilib.common.command.OzgCloudCommandService;
 import de.ozgcloud.apilib.common.command.grpc.CommandMapper;
 import de.ozgcloud.bescheid.Bescheid;
 import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor;
+import de.ozgcloud.bescheid.attacheditem.AttachedItem;
 import de.ozgcloud.bescheid.attacheditem.AttachedItemService;
-import de.ozgcloud.bescheid.attacheditem.BescheidItem;
 import de.ozgcloud.command.Command;
 import de.ozgcloud.common.errorhandling.TechnicalException;
 import lombok.RequiredArgsConstructor;
@@ -77,9 +77,9 @@ public class DocumentService {
 	}
 
 	void validateBescheidItem(String bescheidId) {
-		var bescheidData = attachedItemService.getBescheidItem(bescheidId).getBescheidData();
-		var status = MapUtils.getString(bescheidData, BescheidItem.FIELD_STATUS);
-		if (BescheidItem.Status.DRAFT.not(status)) {
+		var bescheidData = attachedItemService.getBescheidItem(bescheidId).getItem();
+		var status = MapUtils.getString(bescheidData, Bescheid.FIELD_STATUS);
+		if (Bescheid.Status.DRAFT.not(status)) {
 			throw new TechnicalException("Bescheid is not in draft status");
 		}
 	}
@@ -95,10 +95,10 @@ public class DocumentService {
 
 	Map<String, Object> buildAttachedItem(Command command, Map<String, Object> itemMap) {
 		var result = new HashMap<String, Object>();
-		result.put(BescheidItem.PROPERTY_VORGANG_ID, command.getVorgangId());
-		result.put(BescheidItem.PROPERTY_CLIENT, BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME);
-		result.put(BescheidItem.PROPERTY_ITEM_NAME, DOCUMENT_ITEM_NAME);
-		result.put(BescheidItem.PROPERTY_ITEM, itemMap);
+		result.put(AttachedItem.PROPERTY_VORGANG_ID, command.getVorgangId());
+		result.put(AttachedItem.PROPERTY_CLIENT, BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME);
+		result.put(AttachedItem.PROPERTY_ITEM_NAME, DOCUMENT_ITEM_NAME);
+		result.put(AttachedItem.PROPERTY_ITEM, itemMap);
 		return result;
 	}
 
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerTest.java
index 654825eb6bf6070b6651da59af1554a6e4669227..babf3dda4bd227f6fb19bea788f0980c54faaf1a 100644
--- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerTest.java
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerTest.java
@@ -10,6 +10,7 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.function.Consumer;
 
+import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Nested;
@@ -23,6 +24,7 @@ import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.security.core.context.SecurityContext;
 import org.springframework.test.util.ReflectionTestUtils;
 
+import de.ozgcloud.bescheid.attacheditem.AttachedItem;
 import de.ozgcloud.bescheid.attacheditem.AttachedItemService;
 import de.ozgcloud.bescheid.attacheditem.AttachedItemTestFactory;
 import de.ozgcloud.bescheid.binaryfile.BinaryFileService;
@@ -35,6 +37,7 @@ import de.ozgcloud.command.Command;
 import de.ozgcloud.command.CommandCreatedEventTestFactory;
 import de.ozgcloud.command.CommandFailedEvent;
 import de.ozgcloud.command.CommandTestFactory;
+import de.ozgcloud.common.errorhandling.TechnicalException;
 import de.ozgcloud.document.BescheidDocumentCreatedEvent;
 import de.ozgcloud.document.DocumentService;
 
@@ -495,74 +498,83 @@ class BescheidEventListenerTest {
 	@Nested
 	class TestDoSendBescheid {
 
-		private static final Command COMMAND = CommandTestFactory.createBuilder().relationId(AttachedItemTestFactory.ID)
-				.relationVersion(AttachedItemTestFactory.VERSION).build();
-
 		@Captor
 		private ArgumentCaptor<BescheidSentEvent> bescheidSentEventCaptor;
 
 		@Test
-		void shouldCallSendBescheid() {
-
-			listener.doSendBescheid(COMMAND);
+		void shouldThrowExceptionIfUnkonwnSendBy() {
+			var item = AttachedItemTestFactory.createBescheidItem();
+			item.put(Bescheid.FIELD_SEND_BY, "unknown");
+			var bescheidItem = AttachedItemTestFactory.createBescheidBuilder().item(item).build();
+			when(attachedItemService.getItem(any())).thenReturn(bescheidItem);
+			var command = CommandTestFactory.createBuilder().relationId(AttachedItemTestFactory.ID).build();
 
-			verify(service).sendBescheidManually(AttachedItemTestFactory.ID, AttachedItemTestFactory.VERSION);
+			Assertions.assertThrows(TechnicalException.class, () -> listener.doSendBescheid(command));
 		}
 
-		@Test
-		void shouldPublishEvent() {
-			listener.doSendBescheid(COMMAND);
+		@DisplayName("manually")
+		@Nested
+		class TestManually {
 
-			verify(eventPublisher).publishEvent(bescheidSentEventCaptor.capture());
-			assertThat(bescheidSentEventCaptor.getValue().getCommand()).isEqualTo(COMMAND);
-		}
-	}
+			private static final Command COMMAND = CommandTestFactory.createBuilder().relationId(AttachedItemTestFactory.ID)
+					.relationVersion(AttachedItemTestFactory.VERSION).bodyObject(AttachedItemTestFactory.createBescheidItem()).build();
 
-	@Nested
-	class TestOnSendPostfachMailCommand {
+			private final AttachedItem bescheidItem = AttachedItemTestFactory.createBescheid();
 
-		private final Command command = CommandTestFactory.create();
+			@BeforeEach
+			void init() {
+				when(attachedItemService.getItem(any())).thenReturn(bescheidItem);
+			}
 
-		@Test
-		void shouldCallRunWithSecurityContext() {
-			listener.onSendPostfachMailCommand(CommandCreatedEventTestFactory.withCommand(command));
+			@Test
+			void shouldCallSendBescheid() {
+				listener.doSendBescheid(COMMAND);
 
-			verify(listener).runWithSecurityContext(eq(command), any());
-		}
+				verify(service).sendBescheidManually(bescheidItem, AttachedItemTestFactory.VERSION);
+				verify(service, never()).sendBescheidPostfachMail(any(), anyLong());
+			}
 
-		@Test
-		void shouldExecuteDoSendPostfachMail() {
-			listener.onSendPostfachMailCommand(CommandCreatedEventTestFactory.withCommand(command));
+			@Test
+			void shouldPublishEvent() {
+				listener.doSendBescheid(COMMAND);
 
-			verify(listener).doSendPostfachMail(command);
+				verify(eventPublisher).publishEvent(bescheidSentEventCaptor.capture());
+				assertThat(bescheidSentEventCaptor.getValue().getCommand()).isEqualTo(COMMAND);
+			}
 		}
-	}
 
-	@Nested
-	class TestDoSendPostfachMail {
+		@DisplayName("per postfach mail")
+		@Nested
+		class TestPostfachMail {
 
-		@Captor
-		private ArgumentCaptor<BescheidSentEvent> bescheidSentEventCaptor;
+			private static final Command COMMAND = CommandTestFactory.createBuilder().relationId(AttachedItemTestFactory.ID)
+					.relationVersion(AttachedItemTestFactory.VERSION).bodyObject(AttachedItemTestFactory.createBescheidItem()).build();
 
-		@Test
-		void shouldCallBescheidService() {
-			var bescheidId = "bescheid-id";
-			var bescheidVersion = 1L;
-			var command = CommandTestFactory.createBuilder().relationId(bescheidId).relationVersion(bescheidVersion).build();
+			private AttachedItem bescheidItem;
 
-			listener.doSendPostfachMail(command);
+			@BeforeEach
+			void init() {
+				var item = AttachedItemTestFactory.createBescheidItem();
+				item.put(Bescheid.FIELD_SEND_BY, Bescheid.SendBy.NACHRICHT.name());
+				bescheidItem = AttachedItemTestFactory.createBescheidBuilder().item(item).build();
+				when(attachedItemService.getItem(any())).thenReturn(bescheidItem);
+			}
 
-			verify(service).sendBescheidPostfachMail(bescheidId, bescheidVersion);
-		}
+			@Test
+			void shouldCallBescheidService() {
+				listener.doSendBescheid(COMMAND);
 
-		@Test
-		void shouldPublishEvent() {
-			var command = CommandTestFactory.createBuilder().relationVersion(0L).build();
+				verify(service).sendBescheidPostfachMail(bescheidItem, AttachedItemTestFactory.VERSION);
+				verify(service, never()).sendBescheidManually(any(), anyLong());
+			}
 
-			listener.doSendPostfachMail(command);
+			@Test
+			void shouldPublishEvent() {
+				listener.doSendBescheid(COMMAND);
 
-			verify(eventPublisher).publishEvent(bescheidSentEventCaptor.capture());
-			assertThat(bescheidSentEventCaptor.getValue().getCommand()).isEqualTo(command);
+				verify(eventPublisher).publishEvent(bescheidSentEventCaptor.capture());
+				assertThat(bescheidSentEventCaptor.getValue().getCommand()).isEqualTo(COMMAND);
+			}
 		}
 	}
 
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceTest.java
index 4d965a689be4c55ce1a9909c85fa8e013eb2da7e..d5add97a8f5ac99853f9e90a44534a8174f4d76a 100644
--- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceTest.java
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceTest.java
@@ -4,8 +4,11 @@ import static org.assertj.core.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 
+import java.util.Collections;
+import java.util.List;
 import java.util.Optional;
 
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.mockito.ArgumentCaptor;
@@ -14,9 +17,12 @@ import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Spy;
 
+import de.ozgcloud.bescheid.attacheditem.AttachedItem;
+import de.ozgcloud.bescheid.attacheditem.AttachedItemMapper;
 import de.ozgcloud.bescheid.attacheditem.AttachedItemService;
-import de.ozgcloud.bescheid.attacheditem.BescheidItemMapper;
-import de.ozgcloud.bescheid.attacheditem.BescheidItemTestFactory;
+import de.ozgcloud.bescheid.attacheditem.AttachedItemTestFactory;
+import de.ozgcloud.bescheid.vorgang.VorgangId;
+import de.ozgcloud.command.CommandTestFactory;
 import io.grpc.stub.StreamObserver;
 
 class BescheidGrpcServiceTest {
@@ -28,7 +34,11 @@ class BescheidGrpcServiceTest {
 	@Mock
 	private AttachedItemService attachedItemService;
 	@Mock
-	private BescheidItemMapper mapper;
+	private AttachedItemMapper attachedItemMapper;
+	@Mock
+	private BescheidService bescheidService;
+	@Mock
+	private GrpcBescheidMapper grpcBescheidMapper;
 
 	@Nested
 	class TestGetBescheidDraft {
@@ -44,19 +54,20 @@ class BescheidGrpcServiceTest {
 
 		@Test
 		void shouldBuildResponse() {
-			when(mapper.toBescheid(any())).thenReturn(GrpcBescheidTestFactory.create());
-			when(attachedItemService.findBescheidItem(any())).thenReturn(Optional.of(BescheidItemTestFactory.create()));
+			when(attachedItemMapper.toBescheid(any())).thenReturn(GrpcBescheidTestFactory.create());
+			var bescheidItem = AttachedItemTestFactory.createBescheid();
+			when(attachedItemService.findBescheidItem(any())).thenReturn(Optional.of(bescheidItem));
 
 			service.getBescheidDraft(request, responseObserver);
 
-			verify(service).buildResponse(any());
+			verify(service).buildGetBescheidDraftResponse(bescheidItem);
 		}
 
 		@Test
 		void shouldCallNext() {
-			when(mapper.toBescheid(any())).thenReturn(GrpcBescheidTestFactory.create());
-			when(service.buildResponse(any())).thenReturn(response);
-			when(attachedItemService.findBescheidItem(any())).thenReturn(Optional.of(BescheidItemTestFactory.create()));
+			when(attachedItemMapper.toBescheid(any())).thenReturn(GrpcBescheidTestFactory.create());
+			when(service.buildGetBescheidDraftResponse(any())).thenReturn(response);
+			when(attachedItemService.findBescheidItem(any())).thenReturn(Optional.of(AttachedItemTestFactory.createBescheid()));
 
 			service.getBescheidDraft(request, responseObserver);
 
@@ -81,27 +92,189 @@ class BescheidGrpcServiceTest {
 	}
 
 	@Nested
-	class TestBuildResponse {
+	class TestBuildGetBescheidDraftResponse {
 
 		@Test
 		void shouldCallMapper() {
-			when(mapper.toBescheid(any())).thenReturn(GrpcBescheidTestFactory.create());
-			var bescheid = BescheidItemTestFactory.create();
+			when(attachedItemMapper.toBescheid(any())).thenReturn(GrpcBescheidTestFactory.create());
+			var bescheid = AttachedItemTestFactory.createBescheid();
 
-			service.buildResponse(bescheid);
+			service.buildGetBescheidDraftResponse(bescheid);
 
-			verify(mapper).toBescheid(bescheid);
+			verify(attachedItemMapper).toBescheid(bescheid);
 		}
 
 		@Test
 		void shouldSetBescheid() {
 			var grpcBescheid = GrpcBescheidTestFactory.create();
-			when(mapper.toBescheid(any())).thenReturn(grpcBescheid);
+			when(attachedItemMapper.toBescheid(any())).thenReturn(grpcBescheid);
 
-			var response = service.buildResponse(BescheidItemTestFactory.create());
+			var response = service.buildGetBescheidDraftResponse(AttachedItemTestFactory.createBescheid());
 
 			assertThat(response.getBescheid()).isEqualTo(grpcBescheid);
 		}
 	}
 
+	@Nested
+	class TestGetConfig {
+
+		private static final GrpcBescheidManagerConfigResponse RESPONSE = GrpcBescheidManagerConfigResponse.newBuilder().build();
+
+		@Mock
+		private GrpcBescheidManagerConfigRequest request;
+		@Mock
+		private StreamObserver<GrpcBescheidManagerConfigResponse> responseObserver;
+		@Captor
+		private ArgumentCaptor<GrpcBescheidManagerConfigResponse> responseCaptor;
+
+		@Test
+		void shouldCallBescheidService() {
+			getConfig();
+
+			verify(bescheidService).getConfig();
+		}
+
+		@Test
+		void shouldCallGrpcBescheidMapper() {
+			var config = BescheidManagerConfigTestFactory.create();
+			when(bescheidService.getConfig()).thenReturn(config);
+
+			getConfig();
+
+			verify(grpcBescheidMapper).fromBescheidManagerConfig(config);
+		}
+
+		@Test
+		void shouldCallNext() {
+			when(grpcBescheidMapper.fromBescheidManagerConfig(any())).thenReturn(RESPONSE);
+
+			getConfig();
+
+			verify(responseObserver).onNext(RESPONSE);
+		}
+
+		@Test
+		void shouldCallCompleted() {
+			getConfig();
+
+			verify(responseObserver).onCompleted();
+		}
+
+		private void getConfig() {
+			service.getConfig(request, responseObserver);
+		}
+	}
+
+	@Nested
+	class TestGetAll {
+
+		private static final GrpcGetAllBescheidResponse RESPONSE = GrpcGetAllBescheidResponse.newBuilder().build();
+		@Mock
+		private GrpcGetAllBescheidRequest request;
+		@Mock
+		private StreamObserver<GrpcGetAllBescheidResponse> responseObserver;
+		@Captor
+		private ArgumentCaptor<GrpcGetAllBescheidResponse> responseCaptor;
+		@Captor
+		private ArgumentCaptor<VorgangId> vorgangIdCaptor;
+
+		@BeforeEach
+		void init() {
+			when(request.getVorgangId()).thenReturn(CommandTestFactory.VORGANG_ID);
+			doReturn(RESPONSE).when(service).buildGetAllBescheidResponse(anyCollection());
+		}
+
+		@Test
+		void shouldCallFindAllBescheid() {
+			service.getAll(request, responseObserver);
+
+			verify(attachedItemService).findAllBescheid(vorgangIdCaptor.capture());
+			assertThat(vorgangIdCaptor.getValue()).hasToString(CommandTestFactory.VORGANG_ID);
+		}
+
+		@Test
+		void shouldCallBuildResponse() {
+			var expectedBescheidItem = AttachedItemTestFactory.createBescheid();
+			when(attachedItemService.findAllBescheid(any())).thenReturn(List.of(expectedBescheidItem));
+
+			service.getAll(request, responseObserver);
+
+			verify(service).buildGetAllBescheidResponse(List.of(expectedBescheidItem));
+		}
+
+		@Test
+		void shouldCallOnNext() {
+			service.getAll(request, responseObserver);
+
+			verify(responseObserver).onNext(RESPONSE);
+		}
+
+		@Test
+		void shouldCallOnCompleted() {
+			service.getAll(request, responseObserver);
+
+			verify(responseObserver).onCompleted();
+		}
+	}
+
+	@Nested
+	class TestBuildResponseAllBescheid {
+
+		private static final GrpcBescheid GRPC_BESCHEID = GrpcBescheidTestFactory.create();
+
+		@Mock
+		private AttachedItem attachedItem;
+
+		@BeforeEach
+		void init() {
+			doReturn(Collections.singletonList(GRPC_BESCHEID)).when(service).mapBescheid(anyCollection());
+		}
+
+		@Test
+		void shouldCallMapBescheid() {
+			var bescheidItems = Collections.singleton(attachedItem);
+
+			service.buildGetAllBescheidResponse(bescheidItems);
+
+			verify(service).mapBescheid(bescheidItems);
+		}
+
+		@Test
+		void shouldReturnResponse() {
+			var bescheidItems = Collections.singleton(attachedItem);
+
+			var response = service.buildGetAllBescheidResponse(bescheidItems);
+
+			assertThat(response.getBescheidList()).containsExactly(GRPC_BESCHEID);
+		}
+	}
+
+	@Nested
+	class TestMapBescheid {
+
+		private static final GrpcBescheid GRPC_BESCHEID = GrpcBescheidTestFactory.create();
+
+		@Mock
+		private AttachedItem attachedItem;
+
+		@BeforeEach
+		void init() {
+			when(attachedItemMapper.toBescheid(attachedItem)).thenReturn(GRPC_BESCHEID);
+		}
+
+		@Test
+		void shouldCallMapper() {
+			service.mapBescheid(Collections.singleton(attachedItem));
+
+			verify(attachedItemMapper).toBescheid(attachedItem);
+		}
+
+		@Test
+		void shouldSetBescheid() {
+			var result = service.mapBescheid(Collections.singleton(attachedItem));
+
+			assertThat(result).containsExactly(GRPC_BESCHEID);
+		}
+
+	}
 }
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/GrpcSendBayernIdMessageResponseTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidManagerConfigTestFactory.java
similarity index 63%
rename from nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/GrpcSendBayernIdMessageResponseTestFactory.java
rename to bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidManagerConfigTestFactory.java
index 3aa0719d3574451bd919d365e4dee250405bab2f..cdd3c20e856282db187f1f101422e449e2ecd354 100644
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/GrpcSendBayernIdMessageResponseTestFactory.java
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidManagerConfigTestFactory.java
@@ -21,23 +21,24 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-package de.ozgcloud.nachrichten.postfach.bayernid;
+package de.ozgcloud.bescheid;
 
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageResponse;
+import de.ozgcloud.bescheid.BescheidManagerConfig.BescheidManagerConfigBuilder;
+import de.ozgcloud.bescheid.BescheidManagerConfig.Features;
 
-public class GrpcSendBayernIdMessageResponseTestFactory {
+public class BescheidManagerConfigTestFactory {
 
-	public static final String STATUS = "code";
-	public static final String MESSAGE_TEXT = "messageText";
+	public static final String VERSION = "1.0.0";
+	public static final String JAVA_VERSION = "21";
 
-	public static GrpcSendBayernIdMessageResponse create() {
+	public static BescheidManagerConfig create() {
 		return createBuilder().build();
 	}
 
-	public static GrpcSendBayernIdMessageResponse.Builder createBuilder() {
-		return GrpcSendBayernIdMessageResponse.newBuilder()
-				.setSuccess(true)
-				.setStatus(STATUS)
-				.setMessage(MESSAGE_TEXT);
+	public static BescheidManagerConfigBuilder createBuilder() {
+		return BescheidManagerConfig.builder()
+				.version(VERSION)
+				.javaVersion(JAVA_VERSION)
+				.features(Features.builder().canCreateBescheidDocument(true).build());
 	}
 }
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java
index 2d80f5de69e2af46c5a3d1ad6dba7229f4e2932d..9f96b98a60c87a1fcb1494d4293c169c0bcf0e9f 100644
--- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java
@@ -5,7 +5,6 @@ import static org.junit.jupiter.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 
-import java.util.Collections;
 import java.util.Map;
 import java.util.Optional;
 
@@ -20,6 +19,7 @@ import org.mockito.Captor;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Spy;
+import org.springframework.boot.info.BuildProperties;
 import org.springframework.test.util.ReflectionTestUtils;
 
 import de.ozgcloud.bescheid.attacheditem.AttachedItem;
@@ -57,6 +57,8 @@ class BescheidServiceTest {
 	private UserProfile callContextUser;
 	@Mock
 	private ClientAttributeService clientAttributeService;
+	@Mock
+	private BuildProperties buildProperties;
 
 	@BeforeEach
 	void init() {
@@ -107,14 +109,6 @@ class BescheidServiceTest {
 		@BeforeEach
 		void init() {
 			doNothing().when(service).validateBescheidSendManually(any(), anyLong());
-			doReturn(bescheidItem).when(attachedItemService).getItem(anyString());
-		}
-
-		@Test
-		void shouldCallGetItem() {
-			sendBescheid();
-
-			verify(attachedItemService).getItem(AttachedItemTestFactory.ID);
 		}
 
 		@Test
@@ -132,7 +126,7 @@ class BescheidServiceTest {
 		}
 
 		private void sendBescheid() {
-			service.sendBescheidManually(AttachedItemTestFactory.ID, AttachedItemTestFactory.VERSION);
+			service.sendBescheidManually(bescheidItem, AttachedItemTestFactory.VERSION);
 		}
 	}
 
@@ -171,7 +165,7 @@ class BescheidServiceTest {
 	@Nested
 	class TestSendBescheidPostfachMail {
 
-		private final AttachedItem bescheidItem = AttachedItemTestFactory.createBescheid();
+		private AttachedItem bescheidItem;
 		@Mock
 		private AttachedItem bescheidSendItem;
 		@Captor
@@ -179,21 +173,15 @@ class BescheidServiceTest {
 
 		@BeforeEach
 		void init() {
+			var item = AttachedItemTestFactory.createBescheidItem();
+			item.put(Bescheid.FIELD_SEND_BY, Bescheid.SendBy.NACHRICHT.name());
+			bescheidItem = AttachedItemTestFactory.createBescheidBuilder().item(item).build();
+
 			doNothing().when(service).validateBescheidSendPostfach(any(), anyLong());
-			doReturn(bescheidItem).when(attachedItemService).getItem(anyString());
 			lenient().when(callContextUser.getId()).thenReturn(UserId.from("user-id"));
 			lenient().when(currentUserService.getUserProfile()).thenReturn(callContextUser);
 		}
 
-		@Test
-		void shouldCallGetItem() {
-			when(vorgangService.getById(any())).thenReturn(VorgangTestFactory.create());
-
-			sendBescheid();
-
-			verify(attachedItemService).getItem(AttachedItemTestFactory.ID);
-		}
-
 		@Test
 		void shouldCallValidateBescheid() {
 			when(vorgangService.getById(any())).thenReturn(VorgangTestFactory.create());
@@ -232,7 +220,7 @@ class BescheidServiceTest {
 
 			sendBescheid();
 
-			verify(nachrichtService).createNachrichtDraft(bescheid);
+			verify(nachrichtService).sendNachricht(bescheid);
 		}
 
 		@Test
@@ -245,7 +233,7 @@ class BescheidServiceTest {
 		}
 
 		private void sendBescheid() {
-			service.sendBescheidPostfachMail(AttachedItemTestFactory.ID, AttachedItemTestFactory.VERSION);
+			service.sendBescheidPostfachMail(bescheidItem, AttachedItemTestFactory.VERSION);
 		}
 	}
 
@@ -473,19 +461,10 @@ class BescheidServiceTest {
 		private AttachedItem bescheidSendItem;
 
 		@Test
-		void shouldCallBuildBescheidSend() {
-			sendBescheid();
-
-			verify(service).setBescheidSendStatus(bescheidItem);
-		}
-
-		@Test
-		void shouldCallPatch() {
-			doReturn(bescheidSendItem).when(service).setBescheidSendStatus(any());
-
+		void shouldCallSetBescheidStatusSent() {
 			sendBescheid();
 
-			verify(attachedItemService).patch(bescheidSendItem);
+			verify(attachedItemService).setBescheidStatus(AttachedItemTestFactory.ID, AttachedItemTestFactory.VERSION, Bescheid.Status.SENT);
 		}
 
 		@Test
@@ -496,34 +475,12 @@ class BescheidServiceTest {
 		}
 
 		@Test
-		void shouldCallGetItem() {
-			when(attachedItemService.getItem(any())).thenReturn(AttachedItemTestFactory.createBescheid());
-			doThrow(new TechnicalException("error")).when(vorgangService).bescheiden(anyString());
-
-			assertThrows(TechnicalException.class, this::sendBescheid);
-
-			verify(attachedItemService).getItem(AttachedItemTestFactory.ID);
-		}
-
-		@Test
-		void shouldCallSetBescheidDraftStatus() {
-			doThrow(new TechnicalException("error")).when(vorgangService).bescheiden(anyString());
-			var updatedBescheidUitem = AttachedItemTestFactory.createBescheid();
-			when(attachedItemService.getItem(any())).thenReturn(updatedBescheidUitem);
-
-			assertThrows(TechnicalException.class, this::sendBescheid);
-
-			verify(service).setBescheidDraftStatus(updatedBescheidUitem);
-		}
-
-		@Test
-		void shouldCallPatchWhenBescheidenFails() {
-			doReturn(bescheidSendItem).when(service).setBescheidDraftStatus(any());
+		void shouldCallSetBescheidStatusDraft() {
 			doThrow(new TechnicalException("error")).when(vorgangService).bescheiden(anyString());
 
 			assertThrows(TechnicalException.class, this::sendBescheid);
 
-			verify(attachedItemService).patch(bescheidSendItem);
+			verify(attachedItemService).setBescheidStatus(AttachedItemTestFactory.ID, AttachedItemTestFactory.VERSION, Bescheid.Status.SENT);
 		}
 
 		@Test
@@ -570,28 +527,77 @@ class BescheidServiceTest {
 	}
 
 	@Nested
-	class TestSetBescheidSendStatus {
+	class TestGetConfig {
 
 		@Test
-		void shouldSetSendStatus() {
-			var bescheidItem = AttachedItemTestFactory.createBescheid();
+		void shouldCallGetVersion() {
+			service.getConfig();
+
+			verify(buildProperties).getVersion();
+		}
+
+		@Test
+		void shouldSetBescheidManagerVersion() {
+			when(buildProperties.getVersion()).thenReturn(BescheidManagerConfigTestFactory.VERSION);
+
+			var result = service.getConfig();
+
+			assertThat(result.getVersion()).isEqualTo(BescheidManagerConfigTestFactory.VERSION);
+		}
+
+		@Test
+		void shouldCallGetJavaVersion() {
+			service.getConfig();
+
+			verify(service).getJavaVersion();
+		}
+
+		@Test
+		void shouldSetJavaVersion() {
+			when(service.getJavaVersion()).thenReturn(BescheidManagerConfigTestFactory.JAVA_VERSION);
+
+			var result = service.getConfig();
+
+			assertThat(result.getJavaVersion()).isEqualTo(BescheidManagerConfigTestFactory.JAVA_VERSION);
+		}
+
+		@Test
+		void shouldCallBuildFeatures() {
+			service.getConfig();
+
+			verify(service).buildFeatures();
+		}
 
-			var result = service.setBescheidSendStatus(bescheidItem);
+		@Test
+		void shouldSetFeatures() {
+			var features = BescheidManagerConfig.Features.builder().build();
+			when(service.buildFeatures()).thenReturn(features);
+
+			var result = service.getConfig();
 
-			assertThat(result.getItem()).containsEntry(Bescheid.FIELD_STATUS, Bescheid.Status.SEND.name());
+			assertThat(result.getFeatures()).isSameAs(features);
 		}
+
 	}
 
 	@Nested
-	class TestSetBescheidDraftStatus {
+	class TestBuildFeatures {
 
 		@Test
-		void shouldSetDraftStatus() {
-			var bescheidItem = AttachedItemTestFactory.createBescheidBuilder().item(Collections.emptyMap()).build();
+		void shouldSetCannotCreateBescheidDocument() {
+			ReflectionTestUtils.setField(service, "remoteService", Optional.empty());
+
+			var result = service.buildFeatures();
 
-			var result = service.setBescheidDraftStatus(bescheidItem);
+			assertThat(result.isCanCreateBescheidDocument()).isFalse();
+		}
+
+		@Test
+		void shouldSetCanCreateBescheidDocument() {
+			var result = service.buildFeatures();
 
-			assertThat(result.getItem()).containsEntry(Bescheid.FIELD_STATUS, Bescheid.Status.DRAFT.name());
+			assertThat(result.isCanCreateBescheidDocument()).isTrue();
 		}
+
 	}
 }
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidTestFactory.java
index a0fac1f66bc68d8fe0056ca38c34f551ac163e63..12469cfc9df73ca8a18c288c3a6ae5c68f4921cb 100644
--- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidTestFactory.java
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidTestFactory.java
@@ -10,6 +10,7 @@ import com.thedeanda.lorem.LoremIpsum;
 import de.ozgcloud.bescheid.common.callcontext.UserProfileTestFactory;
 import de.ozgcloud.bescheid.vorgang.ServiceKontoTestFactory;
 import de.ozgcloud.bescheid.vorgang.VorgangTestFactory;
+import de.ozgcloud.common.binaryfile.FileId;
 import de.ozgcloud.common.binaryfile.TempFileUtils;
 
 public class BescheidTestFactory {
@@ -36,6 +37,7 @@ public class BescheidTestFactory {
 				.contentType(CONTENT_TYPE)
 				.bescheidFileName(FILE_NAME)
 				.bescheidFile(BESCHEID_FILE)
+				.bescheidFileId(FileId.from(BESCHEID_FILE_ID))
 				.nachrichtSubject(Optional.of(NACHRICHT_SUBJECT))
 				.nachrichtText(Optional.of(NACHRICHT_TEXT))
 				.genehmigt(true)
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/GrpcBescheidItemMapperTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/GrpcBescheidItemMapperTest.java
index e68c1c2a0516915186443a7d9e0fabf317ec1a60..169c80a19cc0c8251b93f846f72c40269dab08aa 100644
--- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/GrpcBescheidItemMapperTest.java
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/GrpcBescheidItemMapperTest.java
@@ -8,7 +8,7 @@ import org.mapstruct.factory.Mappers;
 
 class GrpcBescheidItemMapperTest {
 
-	private GrpcBescheidMapper mapper = Mappers.getMapper(GrpcBescheidMapper.class);
+	private final GrpcBescheidMapper mapper = Mappers.getMapper(GrpcBescheidMapper.class);
 
 	@Nested
 	class TestFromBescheid {
@@ -21,4 +21,15 @@ class GrpcBescheidItemMapperTest {
 		}
 	}
 
+	@Nested
+	class TestFromBescheidManagerConfig {
+
+		@Test
+		void shouldMapAllFields() {
+			var result = mapper.fromBescheidManagerConfig(BescheidManagerConfigTestFactory.create());
+
+			assertThat(result).usingRecursiveComparison().isEqualTo(GrpcBescheidManagerConfigResponseTestFactory.create());
+		}
+	}
+
 }
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/GrpcAttachmentMetadataTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/GrpcBescheidManagerConfigResponseTestFactory.java
similarity index 66%
rename from nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/GrpcAttachmentMetadataTestFactory.java
rename to bescheid-manager/src/test/java/de/ozgcloud/bescheid/GrpcBescheidManagerConfigResponseTestFactory.java
index 6972e7a9c35f9c887e32565a392e1d483282d1ba..2657fdf48c5a7727715ec7c26bf3fb94b232b95f 100644
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/GrpcAttachmentMetadataTestFactory.java
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/GrpcBescheidManagerConfigResponseTestFactory.java
@@ -21,20 +21,18 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-package de.ozgcloud.nachrichten.postfach.bayernid.proxy;
+package de.ozgcloud.bescheid;
 
-public class GrpcAttachmentMetadataTestFactory {
+public class GrpcBescheidManagerConfigResponseTestFactory {
 
-	public static final String FILE_TYPE = "plain/text";
-	public static final String FILE_NAME = "test.txt";
-
-	public static GrpcAttachmentMetadata create() {
+	public static GrpcBescheidManagerConfigResponse create() {
 		return createBuilder().build();
 	}
 
-	public static GrpcAttachmentMetadata.Builder createBuilder() {
-		return GrpcAttachmentMetadata.newBuilder()
-				.setFileType(FILE_TYPE)
-				.setFileName(FILE_NAME);
+	public static GrpcBescheidManagerConfigResponse.Builder createBuilder() {
+		return GrpcBescheidManagerConfigResponse.newBuilder()
+				.setVersion(BescheidManagerConfigTestFactory.VERSION)
+				.setJavaVersion(BescheidManagerConfigTestFactory.JAVA_VERSION)
+				.setFeatures(GrpcBescheidManagerFeatures.newBuilder().setCanCreateBescheidDocument(true).build());
 	}
 }
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemMapperTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemMapperTest.java
index 782c98d8cc4bc4066b43d34e9a45334d724ca7d5..14414597f4bc01bf08565e9c6cedd9bf37d666e1 100644
--- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemMapperTest.java
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemMapperTest.java
@@ -26,36 +26,177 @@ package de.ozgcloud.bescheid.attacheditem;
 import static org.assertj.core.api.Assertions.*;
 import static org.mockito.Mockito.*;
 
+import java.util.List;
+import java.util.Map;
+
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+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.mapstruct.factory.Mappers;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
+import org.mockito.Spy;
 
+import de.ozgcloud.bescheid.Bescheid;
+import de.ozgcloud.bescheid.GrpcBescheid;
 import de.ozgcloud.document.DocumentService;
 import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper;
 
 class AttachedItemMapperTest {
 
+	@Spy
 	@InjectMocks
 	private AttachedItemMapper mapper = Mappers.getMapper(AttachedItemMapper.class);
 
 	@Mock
 	private GrpcObjectMapper grpcObjectMapper;
 
-	@BeforeEach
-	void init() {
-		when(grpcObjectMapper.mapFromGrpc(any())).thenReturn(AttachedItemTestFactory.createDocumentItem());
+	@Nested
+	class TestMapFromVorgangAttachedItem {
+
+		@BeforeEach
+		void init() {
+			when(grpcObjectMapper.mapFromGrpc(any())).thenReturn(AttachedItemTestFactory.createDocumentItem());
+		}
+
+		@Test
+		void shouldMapFromVorgangAttachedItem() {
+			var grpcVorgangAttachedItem = GrpcVorgangAttachedItemTestFactory.createBuilder().setItemName(DocumentService.DOCUMENT_ITEM_NAME)
+					.setVersion(AttachedItemTestFactory.VERSION).build();
+
+			var result = mapper.mapFromVorgangAttachedItem(grpcVorgangAttachedItem);
+
+			assertThat(result).usingRecursiveComparison().isEqualTo(AttachedItemTestFactory.createDocument());
+		}
 	}
 
-	@Test
-	void shouldMapFromVorgangAttachedItem() {
-		var grpcVorgangAttachedItem = GrpcVorgangAttachedItemTestFactory.createBuilder().setItemName(DocumentService.DOCUMENT_ITEM_NAME)
-				.setVersion(AttachedItemTestFactory.VERSION).build();
+	@Nested
+	class TestToBescheid {
+
+		@Test
+		void shouldSetBeschiedenAm() {
+			var bescheid = mapBescheid();
+
+			assertThat(bescheid.getBeschiedenAm()).isEqualTo(AttachedItemTestFactory.BESCHEIDEN_AM);
+		}
+
+		@Test
+		void shouldSetBewilligt() {
+			var bescheid = mapBescheid();
+
+			assertThat(bescheid.getBewilligt()).isTrue();
+		}
+
+		@Test
+		void shouldSetBescheidDocument() {
+			var bescheid = mapBescheid();
+
+			assertThat(bescheid.getBescheidDocument()).isEqualTo(AttachedItemTestFactory.BESCHEID_DOCUMENT);
+		}
+
+		@Test
+		void shouldSetSendBy() {
+			var bescheid = mapBescheid();
+
+			assertThat(bescheid.getSendBy()).isEqualTo(AttachedItemTestFactory.SEND_BY.name());
+		}
+
+		@Test
+		void shouldSetNachrichtText() {
+			var bescheid = mapBescheid();
+
+			assertThat(bescheid.getNachrichtText()).isEqualTo(AttachedItemTestFactory.NACHRICHT_TEXT);
+		}
+
+		@Test
+		void shouldSetNachrichtSubject() {
+			var bescheid = mapBescheid();
+
+			assertThat(bescheid.getNachrichtSubject()).isEqualTo(AttachedItemTestFactory.NACHRICHT_SUBJECT);
+		}
+
+		@Test
+		void shouldCallToAttachments() {
+			var expectedAttachments = List.of(AttachedItemTestFactory.ATTACHMENT);
+			var bescheidItem = AttachedItemTestFactory.createBescheidBuilder()
+					.item(Map.of(Bescheid.FIELD_ATTACHMENTS, expectedAttachments)).build();
+
+			mapper.toBescheid(bescheidItem);
 
-		var result = mapper.mapFromVorgangAttachedItem(grpcVorgangAttachedItem);
+			verify(mapper).toAttachments(expectedAttachments);
+		}
 
-		assertThat(result).usingRecursiveComparison().isEqualTo(AttachedItemTestFactory.createDocument());
+		@Test
+		void shouldNotCallToAttachments() {
+			var bescheidItem = AttachedItemTestFactory.createBescheidBuilder().clearItem().build();
+
+			mapper.toBescheid(bescheidItem);
+
+			verify(mapper, never()).toAttachments(any());
+		}
+
+		@Test
+		void shouldSetAttachments() {
+			doReturn(List.of(AttachedItemTestFactory.ATTACHMENT)).when(mapper).toAttachments(any());
+
+			var bescheid = mapBescheid();
+
+			assertThat(bescheid.getAttachmentsList()).containsExactly(AttachedItemTestFactory.ATTACHMENT);
+		}
+
+		@Test
+		void shouldSetId() {
+			var bescheid = mapBescheid();
+
+			assertThat(bescheid.getId()).isEqualTo(AttachedItemTestFactory.ID);
+		}
+
+		@Test
+		void shouldSetVersion() {
+			var bescheid = mapBescheid();
+
+			assertThat(bescheid.getVersion()).isEqualTo(AttachedItemTestFactory.VERSION);
+		}
+
+		@Test
+		void shouldSetStatus() {
+			var bescheid = mapBescheid();
+
+			assertThat(bescheid.getStatus()).isEqualTo(Bescheid.Status.DRAFT.name());
+		}
+
+		private GrpcBescheid mapBescheid() {
+			return mapper.toBescheid(AttachedItemTestFactory.createBescheid());
+		}
 	}
 
+	@Nested
+	class TestToAttachments {
+
+		@Test
+		void shouldMapCollection() {
+			var result = mapper.toAttachments(List.of(AttachedItemTestFactory.ATTACHMENT));
+
+			assertThat(result).containsExactly(AttachedItemTestFactory.ATTACHMENT);
+		}
+
+		@Test
+		void shouldMapSingleValue() {
+			var result = mapper.toAttachments(AttachedItemTestFactory.ATTACHMENT);
+
+			assertThat(result).containsExactly(AttachedItemTestFactory.ATTACHMENT);
+		}
+
+		@DisplayName("should return null")
+		@ParameterizedTest(name = "when attachmentsObject is \"{0}\"")
+		@NullAndEmptySource
+		void shouldReturnNull(String attachmentsObject) {
+			var result = mapper.toAttachments(attachmentsObject);
+
+			assertThat(result).isNull();
+		}
+	}
 }
\ No newline at end of file
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemServiceTest.java
index abb9739abd06cf487fe5e8d1919eb186f22394ea..fe29f7c3257cb03537de97b1490cc2ec9fd80bc8 100644
--- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemServiceTest.java
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemServiceTest.java
@@ -48,7 +48,10 @@ import de.ozgcloud.apilib.common.command.OzgCloudCommandService;
 import de.ozgcloud.apilib.common.command.grpc.CommandMapper;
 import de.ozgcloud.apilib.common.datatypes.GenericId;
 import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId;
+import de.ozgcloud.bescheid.Bescheid;
 import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor;
+import de.ozgcloud.bescheid.vorgang.VorgangId;
+import de.ozgcloud.bescheid.vorgang.VorgangTestFactory;
 import de.ozgcloud.command.Command;
 import de.ozgcloud.command.CommandTestFactory;
 import de.ozgcloud.common.errorhandling.TechnicalException;
@@ -79,7 +82,7 @@ class AttachedItemServiceTest {
 
 		@Test
 		void shouldReturnBescheidItem() {
-			var expected = BescheidItemTestFactory.create();
+			var expected = AttachedItemTestFactory.createBescheid();
 			when(remoteService.findBescheidDraft(anyString())).thenReturn(Optional.of(expected));
 
 			var actual = service.findBescheidItem(CommandTestFactory.VORGANG_ID);
@@ -93,17 +96,17 @@ class AttachedItemServiceTest {
 
 		@Test
 		void shouldCallGetBescheid() {
-			service.getBescheidItem(BescheidItemTestFactory.ID);
+			service.getBescheidItem(AttachedItemTestFactory.ID);
 
-			verify(remoteService).getBescheid(BescheidItemTestFactory.ID);
+			verify(remoteService).getBescheid(AttachedItemTestFactory.ID);
 		}
 
 		@Test
 		void shouldReturnBescheidItem() {
-			var expected = BescheidItemTestFactory.create();
+			var expected = AttachedItemTestFactory.createBescheid();
 			when(remoteService.getBescheid(anyString())).thenReturn(expected);
 
-			var actual = service.getBescheidItem(BescheidItemTestFactory.ID);
+			var actual = service.getBescheidItem(AttachedItemTestFactory.ID);
 
 			assertThat(actual).isEqualTo(expected);
 		}
@@ -114,14 +117,13 @@ class AttachedItemServiceTest {
 
 		private static final String CREATED_ATTACHED_ITEM_ID = "attached-item-id";
 
-		private Command command = CommandTestFactory.createBuilder().bodyObject(BescheidItemTestFactory.createBescheidBody()).build();
-		private final BescheidItem bescheidItem = BescheidItemTestFactory.create();
+		private final AttachedItem bescheidItem = AttachedItemTestFactory.createBescheid();
+		private Command command = CommandTestFactory.createBuilder().bodyObject(AttachedItemTestFactory.createBescheidItem()).build();
 
 		@Mock
 		private OzgCloudCommand ozgCloudCommand;
-
 		@Captor
-		private ArgumentCaptor<BescheidItem> bescheidItemCaptor;
+		private ArgumentCaptor<AttachedItem> bescheidItemCaptor;
 
 		@Test
 		void shouldCallValidateData() {
@@ -274,7 +276,7 @@ class AttachedItemServiceTest {
 			@DisplayName(value = "should fail if bescheidAm is missing")
 			@Test
 			void shouldThrowExceptionByBescheidAm() {
-				Map<String, Object> map = Map.of(BescheidItem.FIELD_BEWILLIGT, true);
+				Map<String, Object> map = Map.of(Bescheid.FIELD_BEWILLIGT, true);
 
 				assertThrows(TechnicalException.class, () -> service.validateBescheidData(map));
 			}
@@ -282,7 +284,7 @@ class AttachedItemServiceTest {
 			@DisplayName(value = "should fail if bewilligt is missing")
 			@Test
 			void shouldThrowExceptionByBewilligt() {
-				Map<String, Object> map = Map.of(BescheidItem.FIELD_BESCHIEDEN_AM, "2021-01-01");
+				Map<String, Object> map = Map.of(Bescheid.FIELD_BESCHIEDEN_AM, "2021-01-01");
 
 				assertThrows(TechnicalException.class, () -> service.validateBescheidData(map));
 			}
@@ -295,8 +297,8 @@ class AttachedItemServiceTest {
 		@Mock
 		private OzgCloudCommand updateAttachedItemCommand;
 
-		private final Command command = CommandTestFactory.createBuilder().relationId(BescheidItemTestFactory.ID).build();
-		private final BescheidItem bescheidItem = BescheidItemTestFactory.create();
+		private final Command command = CommandTestFactory.createBuilder().relationId(AttachedItemTestFactory.ID).build();
+		private final AttachedItem bescheidItem = AttachedItemTestFactory.createBescheid();
 
 		@BeforeEach
 		void init() {
@@ -307,7 +309,7 @@ class AttachedItemServiceTest {
 		void shouldCallGetBescheid() {
 			service.updateBescheidDraft(command);
 
-			verify(remoteService).getBescheid(BescheidItemTestFactory.ID);
+			verify(remoteService).getBescheid(AttachedItemTestFactory.ID);
 		}
 
 		@Test
@@ -365,27 +367,27 @@ class AttachedItemServiceTest {
 	@Nested
 	class TestBuildAttachedItemAsMap {
 
-		private final Command command = CommandTestFactory.createBuilder().bodyObject(BescheidItemTestFactory.createBescheidBody()).build();
+		private final Command command = CommandTestFactory.createBuilder().bodyObject(AttachedItemTestFactory.createBescheidItem()).build();
 
 		@Test
 		void shouldSetVorgangId() {
 			var map = service.buildAttachedItemAsMap(command, Map.of());
 
-			assertThat(map).containsEntry(BescheidItem.PROPERTY_VORGANG_ID, command.getVorgangId());
+			assertThat(map).containsEntry(AttachedItem.PROPERTY_VORGANG_ID, command.getVorgangId());
 		}
 
 		@Test
 		void shouldSetClient() {
 			var map = service.buildAttachedItemAsMap(command, Map.of());
 
-			assertThat(map).containsEntry(BescheidItem.PROPERTY_CLIENT, BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME);
+			assertThat(map).containsEntry(AttachedItem.PROPERTY_CLIENT, BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME);
 		}
 
 		@Test
 		void shouldSetItemName() {
 			var map = service.buildAttachedItemAsMap(command, Map.of());
 
-			assertThat(map).containsEntry(BescheidItem.PROPERTY_ITEM_NAME, AttachedItemService.BESCHEID_ITEM_NAME);
+			assertThat(map).containsEntry(AttachedItem.PROPERTY_ITEM_NAME, AttachedItemService.BESCHEID_ITEM_NAME);
 		}
 
 		@Test
@@ -394,7 +396,7 @@ class AttachedItemServiceTest {
 
 			var map = service.buildAttachedItemAsMap(command, expectedMap);
 
-			assertThat(map).containsEntry(BescheidItem.PROPERTY_ITEM, expectedMap);
+			assertThat(map).containsEntry(AttachedItem.PROPERTY_ITEM, expectedMap);
 		}
 	}
 
@@ -405,7 +407,7 @@ class AttachedItemServiceTest {
 		@Mock
 		private OzgCloudCommand updateItemCommand;
 
-		private final Command command = CommandTestFactory.createBuilder().bodyObject(BescheidItemTestFactory.createBescheidBody()).build();
+		private final Command command = CommandTestFactory.createBuilder().bodyObject(AttachedItemTestFactory.createBescheidItem()).build();
 
 		@BeforeEach
 		void init() {
@@ -415,7 +417,7 @@ class AttachedItemServiceTest {
 
 		@Test
 		void shouldCallBuildItemMapWithAllBescheidFields() {
-			service.overrideAttachedItem(BescheidItemTestFactory.create(), command);
+			service.overrideAttachedItem(AttachedItemTestFactory.createBescheid(), command);
 
 			verify(service).buildItemMapWithAllBescheidFields(command);
 		}
@@ -425,7 +427,7 @@ class AttachedItemServiceTest {
 			var itemMap = Map.of("key", (Object) "value");
 			doReturn(itemMap).when(service).buildItemMapWithAllBescheidFields(any());
 
-			service.overrideAttachedItem(BescheidItemTestFactory.create(), command);
+			service.overrideAttachedItem(AttachedItemTestFactory.createBescheid(), command);
 
 			verify(service).buildAttachedItemAsMap(command, itemMap);
 		}
@@ -434,7 +436,7 @@ class AttachedItemServiceTest {
 		void shouldCallBuildUpdateAttachedItemCommand() {
 			var bodyObject = Map.of("key", (Object) "value");
 			doReturn(bodyObject).when(service).buildAttachedItemAsMap(any(), any());
-			var bescheidItem = BescheidItemTestFactory.create();
+			var bescheidItem = AttachedItemTestFactory.createBescheid();
 
 			service.overrideAttachedItem(bescheidItem, command);
 
@@ -445,14 +447,14 @@ class AttachedItemServiceTest {
 		void shouldCallCommandService() {
 			doReturn(updateItemCommand).when(service).buildUpdateAttachedItemCommand(any(), any());
 
-			service.overrideAttachedItem(BescheidItemTestFactory.create(), command);
+			service.overrideAttachedItem(AttachedItemTestFactory.createBescheid(), command);
 
 			verify(commandService).createAndWaitUntilDone(updateItemCommand);
 		}
 
 		@Test
 		void shouldReturnCreatedResource() {
-			var result = service.overrideAttachedItem(BescheidItemTestFactory.create(), command);
+			var result = service.overrideAttachedItem(AttachedItemTestFactory.createBescheid(), command);
 
 			assertThat(result).isEqualTo(CREATED_RESOURCE);
 		}
@@ -499,62 +501,62 @@ class AttachedItemServiceTest {
 	@Nested
 	class TestBuildBescheidMap {
 
-		private final Command command = CommandTestFactory.createBuilder().bodyObject(BescheidItemTestFactory.createBescheidBody()).build();
+		private final Command command = CommandTestFactory.createBuilder().bodyObject(AttachedItemTestFactory.createBescheidItem()).build();
 
 		@Test
 		void shouldSetStatus() {
 			var bescheidMap = service.buildItemMapWithExistingBescheidFields(command);
 
-			assertThat(bescheidMap).containsEntry(BescheidItem.FIELD_STATUS, BescheidItem.Status.DRAFT.name());
+			assertThat(bescheidMap).containsEntry(Bescheid.FIELD_STATUS, Bescheid.Status.DRAFT.name());
 		}
 
 		@Test
 		void shouldSetBeschiedenAm() {
 			var bescheidMap = service.buildItemMapWithExistingBescheidFields(command);
 
-			assertThat(bescheidMap).containsEntry(BescheidItem.FIELD_BESCHIEDEN_AM, BescheidItemTestFactory.BESCHEIDEN_AM);
+			assertThat(bescheidMap).containsEntry(Bescheid.FIELD_BESCHIEDEN_AM, AttachedItemTestFactory.BESCHEIDEN_AM);
 		}
 
 		@Test
 		void shouldSetBewilligt() {
 			var bescheidMap = service.buildItemMapWithExistingBescheidFields(command);
 
-			assertThat(bescheidMap).containsEntry(BescheidItem.FIELD_BEWILLIGT, true);
+			assertThat(bescheidMap).containsEntry(Bescheid.FIELD_BEWILLIGT, true);
 		}
 
 		@Test
 		void shouldSetBescheidDocument() {
 			var bescheidMap = service.buildItemMapWithExistingBescheidFields(command);
 
-			assertThat(bescheidMap).containsEntry(BescheidItem.FIELD_BESCHEID_DOCUMENT, BescheidItemTestFactory.BESCHEID_DOCUMENT);
+			assertThat(bescheidMap).containsEntry(Bescheid.FIELD_BESCHEID_DOCUMENT, AttachedItemTestFactory.BESCHEID_DOCUMENT);
 		}
 
 		@Test
 		void shouldSetSendBy() {
 			var bescheidMap = service.buildItemMapWithExistingBescheidFields(command);
 
-			assertThat(bescheidMap).containsEntry(BescheidItem.FIELD_SEND_BY, BescheidItemTestFactory.SEND_BY);
+			assertThat(bescheidMap).containsEntry(Bescheid.FIELD_SEND_BY, AttachedItemTestFactory.SEND_BY.name());
 		}
 
 		@Test
 		void shouldSetNachrichtText() {
 			var bescheidMap = service.buildItemMapWithExistingBescheidFields(command);
 
-			assertThat(bescheidMap).containsEntry(BescheidItem.FIELD_NACHRICHT_TEXT, BescheidItemTestFactory.NACHRICHT_TEXT);
+			assertThat(bescheidMap).containsEntry(Bescheid.FIELD_NACHRICHT_TEXT, AttachedItemTestFactory.NACHRICHT_TEXT);
 		}
 
 		@Test
 		void shouldSetNachrichtSubject() {
 			var bescheidMap = service.buildItemMapWithExistingBescheidFields(command);
 
-			assertThat(bescheidMap).containsEntry(BescheidItem.FIELD_NACHRICHT_SUBJECT, BescheidItemTestFactory.NACHRICHT_SUBJECT);
+			assertThat(bescheidMap).containsEntry(Bescheid.FIELD_NACHRICHT_SUBJECT, AttachedItemTestFactory.NACHRICHT_SUBJECT);
 		}
 
 		@Test
 		void shouldSetAttachments() {
 			var bescheidMap = service.buildItemMapWithExistingBescheidFields(command);
 
-			assertThat(bescheidMap).containsEntry(BescheidItem.FIELD_ATTACHMENTS, List.of(BescheidItemTestFactory.ATTACHMENT));
+			assertThat(bescheidMap).containsEntry(Bescheid.FIELD_ATTACHMENTS, List.of(AttachedItemTestFactory.ATTACHMENT));
 		}
 	}
 
@@ -563,7 +565,7 @@ class AttachedItemServiceTest {
 
 		@Test
 		void shouldCallVorgangIdMapper() {
-			service.buildUpdateAttachedItemCommand(BescheidItemTestFactory.create(), Map.of());
+			service.buildUpdateAttachedItemCommand(AttachedItemTestFactory.createBescheid(), Map.of());
 
 			verify(commandMapper).toOzgCloudVorgangId(CommandTestFactory.VORGANG_ID);
 		}
@@ -573,16 +575,16 @@ class AttachedItemServiceTest {
 			var expectedVorgangId = OzgCloudVorgangId.from(CommandTestFactory.VORGANG_ID);
 			when(commandMapper.toOzgCloudVorgangId(any())).thenReturn(expectedVorgangId);
 
-			var result = service.buildUpdateAttachedItemCommand(BescheidItemTestFactory.create(), Map.of());
+			var result = service.buildUpdateAttachedItemCommand(AttachedItemTestFactory.createBescheid(), Map.of());
 
 			assertThat(result.getVorgangId()).isEqualTo(expectedVorgangId);
 		}
 
 		@Test
 		void shouldCallRelationIdMapper() {
-			service.buildUpdateAttachedItemCommand(BescheidItemTestFactory.create(), Map.of());
+			service.buildUpdateAttachedItemCommand(AttachedItemTestFactory.createBescheid(), Map.of());
 
-			verify(commandMapper).mapRelationId(BescheidItemTestFactory.ID);
+			verify(commandMapper).mapRelationId(AttachedItemTestFactory.ID);
 		}
 
 		@Test
@@ -590,21 +592,21 @@ class AttachedItemServiceTest {
 			var expectedId = GenericId.from("relationId");
 			when(commandMapper.mapRelationId(any())).thenReturn(expectedId);
 
-			var result = service.buildUpdateAttachedItemCommand(BescheidItemTestFactory.create(), Map.of());
+			var result = service.buildUpdateAttachedItemCommand(AttachedItemTestFactory.createBescheid(), Map.of());
 
 			assertThat(result.getRelationId()).isEqualTo(expectedId);
 		}
 
 		@Test
 		void shouldSetRelationVersion() {
-			var result = service.buildUpdateAttachedItemCommand(BescheidItemTestFactory.create(), Map.of());
+			var result = service.buildUpdateAttachedItemCommand(AttachedItemTestFactory.createBescheid(), Map.of());
 
-			assertThat(result.getRelationVersion()).isEqualTo(BescheidItemTestFactory.VERSION);
+			assertThat(result.getRelationVersion()).isEqualTo(AttachedItemTestFactory.VERSION);
 		}
 
 		@Test
 		void shouldSetOrder() {
-			var result = service.buildUpdateAttachedItemCommand(BescheidItemTestFactory.create(), Map.of());
+			var result = service.buildUpdateAttachedItemCommand(AttachedItemTestFactory.createBescheid(), Map.of());
 
 			assertThat(result.getOrder()).isEqualTo(AttachedItemService.UPDATE_ATTACHED_ITEM_ORDER);
 		}
@@ -613,7 +615,7 @@ class AttachedItemServiceTest {
 		void shouldSetBodyObject() {
 			var bodyObject = Map.of("key", (Object) "value");
 
-			var result = service.buildUpdateAttachedItemCommand(BescheidItemTestFactory.create(), bodyObject);
+			var result = service.buildUpdateAttachedItemCommand(AttachedItemTestFactory.createBescheid(), bodyObject);
 
 			assertThat(result.getBodyObject()).containsAllEntriesOf(bodyObject);
 		}
@@ -626,21 +628,21 @@ class AttachedItemServiceTest {
 		@Mock
 		private OzgCloudCommand deleteItemOzgCloudCommand;
 
-		private final Command command = CommandTestFactory.createBuilder().relationId(BescheidItemTestFactory.ID).build();
+		private final Command command = CommandTestFactory.createBuilder().relationId(AttachedItemTestFactory.ID).build();
 
 		@Test
 		void shouldCallGetBescheid() {
-			when(remoteService.getBescheid(any())).thenReturn(BescheidItemTestFactory.create());
+			when(remoteService.getBescheid(any())).thenReturn(AttachedItemTestFactory.createBescheid());
 
 			deleteBescheidDraft();
 
-			verify(remoteService).getBescheid(BescheidItemTestFactory.ID);
+			verify(remoteService).getBescheid(AttachedItemTestFactory.ID);
 		}
 
 		@Test
 		void shouldCallCommandService() {
 			doReturn(deleteItemOzgCloudCommand).when(service).buildDeleteItemCommand(any(), any());
-			when(remoteService.getBescheid(any())).thenReturn(BescheidItemTestFactory.create());
+			when(remoteService.getBescheid(any())).thenReturn(AttachedItemTestFactory.createBescheid());
 
 			deleteBescheidDraft();
 
@@ -663,7 +665,7 @@ class AttachedItemServiceTest {
 
 			@Test
 			void shouldCallCommandMapperWithVorgangId() {
-				service.buildDeleteItemCommand(command, BescheidItemTestFactory.create());
+				service.buildDeleteItemCommand(command, AttachedItemTestFactory.createBescheid());
 
 				verify(commandMapper).toOzgCloudVorgangId(CommandTestFactory.VORGANG_ID);
 			}
@@ -673,38 +675,38 @@ class AttachedItemServiceTest {
 				var expectedVorgangId = OzgCloudVorgangId.from(CommandTestFactory.VORGANG_ID);
 				when(commandMapper.toOzgCloudVorgangId(any())).thenReturn(expectedVorgangId);
 
-				var ozgCloudCommand = service.buildDeleteItemCommand(command, BescheidItemTestFactory.create());
+				var ozgCloudCommand = service.buildDeleteItemCommand(command, AttachedItemTestFactory.createBescheid());
 
 				assertThat(ozgCloudCommand.getVorgangId()).isEqualTo(expectedVorgangId);
 			}
 
 			@Test
 			void shouldCallCommandMapperWithRelationId() {
-				service.buildDeleteItemCommand(command, BescheidItemTestFactory.create());
+				service.buildDeleteItemCommand(command, AttachedItemTestFactory.createBescheid());
 
-				verify(commandMapper).mapRelationId(BescheidItemTestFactory.ID);
+				verify(commandMapper).mapRelationId(AttachedItemTestFactory.ID);
 			}
 
 			@Test
 			void shouldSetRelationId() {
-				var expectedId = GenericId.from(BescheidItemTestFactory.ID);
+				var expectedId = GenericId.from(AttachedItemTestFactory.ID);
 				when(commandMapper.mapRelationId(any())).thenReturn(expectedId);
 
-				var ozgCloudCommand = service.buildDeleteItemCommand(command, BescheidItemTestFactory.create());
+				var ozgCloudCommand = service.buildDeleteItemCommand(command, AttachedItemTestFactory.createBescheid());
 
 				assertThat(ozgCloudCommand.getRelationId()).isEqualTo(expectedId);
 			}
 
 			@Test
 			void shouldSetRelationVersion() {
-				var ozgCloudCommand = service.buildDeleteItemCommand(command, BescheidItemTestFactory.create());
+				var ozgCloudCommand = service.buildDeleteItemCommand(command, AttachedItemTestFactory.createBescheid());
 
-				assertThat(ozgCloudCommand.getRelationVersion()).isEqualTo(BescheidItemTestFactory.VERSION);
+				assertThat(ozgCloudCommand.getRelationVersion()).isEqualTo(AttachedItemTestFactory.VERSION);
 			}
 
 			@Test
 			void shouldSetOrder() {
-				var ozgCloudCommand = service.buildDeleteItemCommand(command, BescheidItemTestFactory.create());
+				var ozgCloudCommand = service.buildDeleteItemCommand(command, AttachedItemTestFactory.createBescheid());
 
 				assertThat(ozgCloudCommand.getOrder()).isEqualTo(AttachedItemService.DELETE_ATTACHED_ITEM);
 			}
@@ -716,12 +718,13 @@ class AttachedItemServiceTest {
 
 		@Test
 		void shouldFilterDraftStatus() {
-			assertDoesNotThrow(() -> service.validateBescheidStatus(BescheidItemTestFactory.create()));
+			assertDoesNotThrow(() -> service.validateBescheidStatus(AttachedItemTestFactory.createBescheid()));
 		}
 
 		@Test
 		void shouldThrowExceptionIfBescheidIsNotDraft() {
-			var bescheidItem = BescheidItemTestFactory.createBuilder().bescheidData(Map.of(BescheidItem.FIELD_STATUS, "otherStatus")).build();
+			var bescheidItem =
+					AttachedItemTestFactory.createBescheidBuilder().clearItem().itemEntry(Bescheid.FIELD_STATUS, "otherStatus").build();
 
 			assertThrows(TechnicalException.class, () -> service.validateBescheidStatus(bescheidItem));
 		}
@@ -733,9 +736,9 @@ class AttachedItemServiceTest {
 
 		@Test
 		void shouldCallRemoteService() {
-			service.getItem(BescheidItemTestFactory.ID);
+			service.getItem(AttachedItemTestFactory.ID);
 
-			verify(service).getItem(BescheidItemTestFactory.ID);
+			verify(service).getItem(AttachedItemTestFactory.ID);
 		}
 
 		@Test
@@ -743,7 +746,7 @@ class AttachedItemServiceTest {
 			var expectedItem = AttachedItemTestFactory.createDocument();
 			doReturn(expectedItem).when(remoteService).getItem(any());
 
-			var result = service.getItem(BescheidItemTestFactory.ID);
+			var result = service.getItem(AttachedItemTestFactory.ID);
 
 			assertThat(result).isEqualTo(expectedItem);
 		}
@@ -757,46 +760,31 @@ class AttachedItemServiceTest {
 
 		@Test
 		void shouldCallBuildPatchBescheidCommand() {
-			var item = AttachedItemTestFactory.createDocument();
+			setBescheidStatus();
 
-			service.patch(item);
-
-			verify(service).buildPatchBescheidCommand(item);
+			verify(service).buildPatchBescheidCommand(AttachedItemTestFactory.ID, AttachedItemTestFactory.VERSION, Bescheid.Status.DRAFT);
 		}
 
 		@Test
 		void shouldCallCommandService() {
-			doReturn(command).when(service).buildPatchBescheidCommand(any());
+			doReturn(command).when(service).buildPatchBescheidCommand(any(), anyLong(), any());
 
-			service.patch(AttachedItemTestFactory.createDocument());
+			setBescheidStatus();
 
 			verify(commandService).createAndWaitUntilDone(command);
 		}
+
+		private void setBescheidStatus() {
+			service.setBescheidStatus(AttachedItemTestFactory.ID, AttachedItemTestFactory.VERSION, Bescheid.Status.DRAFT);
+		}
 	}
 
 	@Nested
 	class TestBuildPatchBescheidCommand {
 
-		@Test
-		void shouldCallVorgangIdMapper() {
-			service.buildPatchBescheidCommand(AttachedItemTestFactory.createDocument());
-
-			verify(commandMapper).toOzgCloudVorgangId(CommandTestFactory.VORGANG_ID);
-		}
-
-		@Test
-		void shouldSetVorgangId() {
-			var expectedVorgangId = OzgCloudVorgangId.from(CommandTestFactory.VORGANG_ID);
-			when(commandMapper.toOzgCloudVorgangId(any())).thenReturn(expectedVorgangId);
-
-			var result = service.buildPatchBescheidCommand(AttachedItemTestFactory.createDocument());
-
-			assertThat(result.getVorgangId()).isEqualTo(expectedVorgangId);
-		}
-
 		@Test
 		void shouldCallRelationIdMapper() {
-			service.buildPatchBescheidCommand(AttachedItemTestFactory.createDocument());
+			buildPatchBescheidCommand();
 
 			verify(commandMapper).mapRelationId(AttachedItemTestFactory.ID);
 		}
@@ -806,92 +794,83 @@ class AttachedItemServiceTest {
 			var expectedId = GenericId.from(AttachedItemTestFactory.ID);
 			when(commandMapper.mapRelationId(any())).thenReturn(expectedId);
 
-			var result = service.buildPatchBescheidCommand(AttachedItemTestFactory.createDocument());
+			var result = buildPatchBescheidCommand();
 
 			assertThat(result.getRelationId()).isEqualTo(expectedId);
 		}
 
 		@Test
 		void shouldSetRelationVersion() {
-			var result = service.buildPatchBescheidCommand(AttachedItemTestFactory.createDocument());
+			var result = buildPatchBescheidCommand();
 
 			assertThat(result.getRelationVersion()).isEqualTo(AttachedItemTestFactory.VERSION);
 		}
 
 		@Test
 		void shouldSetOrder() {
-			var result = service.buildPatchBescheidCommand(AttachedItemTestFactory.createDocument());
+			var result = buildPatchBescheidCommand();
 
 			assertThat(result.getOrder()).isEqualTo(AttachedItemService.PATCH_ATTACHED_ITEM);
 		}
 
 		@Test
 		void shouldCallBuildObjectMap() {
-			var bescheidItem = AttachedItemTestFactory.createDocument();
+			var result = buildPatchBescheidCommand();
 
-			service.buildPatchBescheidCommand(bescheidItem);
-
-			verify(service).buildObjectMap(bescheidItem);
+			verify(service).buildObjectMap(AttachedItemTestFactory.ID, Bescheid.Status.DRAFT);
 		}
 
 		@Test
 		void shouldSetBodyObject() {
-			var expectedMap = Map.of("key", (Object) "value");
-			doReturn(expectedMap).when(service).buildObjectMap(any());
+			var bodyObject = Map.of("key", (Object) "value");
+			doReturn(bodyObject).when(service).buildObjectMap(any(), any());
 
-			var result = service.buildPatchBescheidCommand(AttachedItemTestFactory.createDocument());
+			var result = buildPatchBescheidCommand();
+
+			assertThat(result.getBodyObject()).isSameAs(bodyObject);
+		}
 
-			assertThat(result.getBodyObject()).containsAllEntriesOf(expectedMap);
+		private OzgCloudCommand buildPatchBescheidCommand() {
+			return service.buildPatchBescheidCommand(AttachedItemTestFactory.ID, AttachedItemTestFactory.VERSION, Bescheid.Status.DRAFT);
 		}
 	}
 
 	@Nested
-	class TestBuildBodyObject {
+	class TestBuildObjectMap {
 
 		@Test
-		void shouldSetId() {
-			var result = buildObjectMap();
+		void shouldSetBescheidId() {
+			var result = service.buildObjectMap(AttachedItemTestFactory.ID, Bescheid.Status.DRAFT);
 
 			assertThat(result).containsEntry(AttachedItem.PROPERTY_ID, AttachedItemTestFactory.ID);
 		}
 
 		@Test
-		void shouldSetClient() {
-			var result = buildObjectMap();
-
-			assertThat(result).containsEntry(AttachedItem.PROPERTY_CLIENT, AttachedItemTestFactory.CLIENT);
-		}
-
-		@Test
-		void shouldSetVorgangId() {
-			var result = buildObjectMap();
+		void shouldSetBescheidStatus() {
+			var result = service.buildObjectMap(AttachedItemTestFactory.ID, Bescheid.Status.DRAFT);
 
-			assertThat(result).containsEntry(AttachedItem.PROPERTY_VORGANG_ID, CommandTestFactory.VORGANG_ID);
+			assertThat(result).extracting(AttachedItem.PROPERTY_ITEM, MAP).containsEntry(Bescheid.FIELD_STATUS, Bescheid.Status.DRAFT.name());
 		}
+	}
 
-		@Test
-		void shouldSetItemName() {
-			var result = buildObjectMap();
-
-			assertThat(result).containsEntry(AttachedItem.PROPERTY_ITEM_NAME, AttachedItemService.BESCHEID_ITEM_NAME);
-		}
+	@Nested
+	class TestFindAllBescheid {
 
 		@Test
-		void shouldSetVersion() {
-			var result = buildObjectMap();
+		void shouldCallRemoteService() {
+			service.findAllBescheid(VorgangTestFactory.ID);
 
-			assertThat(result).containsEntry(AttachedItem.PROPERTY_VERSION, AttachedItemTestFactory.VERSION);
+			verify(remoteService).findAllBescheid(VorgangTestFactory.ID);
 		}
 
 		@Test
-		void shouldSetItem() {
-			var result = buildObjectMap();
+		void shouldReturnResult() {
+			var expectedBescheidItem = AttachedItemTestFactory.createBescheid();
+			when(remoteService.findAllBescheid(any(VorgangId.class))).thenReturn(Collections.singletonList(expectedBescheidItem));
 
-			assertThat(result).containsEntry(AttachedItem.PROPERTY_ITEM, AttachedItemTestFactory.createBescheidItem());
-		}
+			var result = service.findAllBescheid(VorgangTestFactory.ID);
 
-		private Map<String, Object> buildObjectMap() {
-			return service.buildObjectMap(AttachedItemTestFactory.createBescheid());
+			assertThat(result).containsExactly(expectedBescheidItem);
 		}
 	}
 }
\ No newline at end of file
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/BescheidItemMapperTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/BescheidItemMapperTest.java
deleted file mode 100644
index 027085c7c1c70681debd0503f3e1920c5620a039..0000000000000000000000000000000000000000
--- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/BescheidItemMapperTest.java
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * 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.bescheid.attacheditem;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.Mockito.*;
-
-import java.util.List;
-import java.util.Map;
-
-import org.junit.jupiter.api.DisplayName;
-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.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Spy;
-
-import de.ozgcloud.bescheid.GrpcBescheid;
-import de.ozgcloud.command.CommandTestFactory;
-import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper;
-import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemResponse;
-
-class BescheidItemMapperTest {
-
-	@Spy
-	@InjectMocks
-	private BescheidItemMapper mapper;
-
-	@Mock
-	private GrpcObjectMapper grpcObjectMapper;
-
-	@Nested
-	class TestFromFindVorgangAttachedItemResponse {
-
-		GrpcFindVorgangAttachedItemResponse grpcResponse = GrpcFindVorgangAttachedItemResponseTestFactory.create();
-
-		@Test
-		void shouldCallMapFromVorgangAttachedItem() {
-			mapper.fromFindVorgangAttachedItemResponse(grpcResponse).toList();
-
-			verify(mapper).mapFromVorgangAttachedItem(grpcResponse.getVorgangAttachedItems(0));
-		}
-
-		@Test
-		void shouldReturnBescheidITem() {
-			var bescheid = BescheidItemTestFactory.create();
-			doReturn(bescheid).when(mapper).mapFromVorgangAttachedItem(any());
-
-			var result = mapper.fromFindVorgangAttachedItemResponse(grpcResponse).toList();
-
-			assertThat(result).first().isEqualTo(bescheid);
-		}
-	}
-
-	@Nested
-	class TestMapFromVorgangAttachedItem {
-
-		@Test
-		void shouldSetId() {
-			var result = mapper.mapFromVorgangAttachedItem(GrpcVorgangAttachedItemTestFactory.create());
-
-			assertThat(result.getId()).isEqualTo(BescheidItemTestFactory.ID);
-		}
-
-		@Test
-		void shouldSetVersion() {
-			var grpcAttachedItem = GrpcVorgangAttachedItemTestFactory.createBuilder().setVersion(BescheidItemTestFactory.VERSION).build();
-
-			var result = mapper.mapFromVorgangAttachedItem(grpcAttachedItem);
-
-			assertThat(result.getVersion()).isEqualTo(BescheidItemTestFactory.VERSION);
-		}
-
-		@Test
-		void shouldSetClient() {
-			var result = mapper.mapFromVorgangAttachedItem(GrpcVorgangAttachedItemTestFactory.create());
-
-			assertThat(result.getClient()).isEqualTo(BescheidItemTestFactory.CLIENT);
-		}
-
-		@Test
-		void shouldSetVorgangId() {
-			var result = mapper.mapFromVorgangAttachedItem(GrpcVorgangAttachedItemTestFactory.create());
-
-			assertThat(result.getVorgangId()).isEqualTo(CommandTestFactory.VORGANG_ID);
-		}
-
-		@Test
-		void shouldSetItemName() {
-			var result = mapper.mapFromVorgangAttachedItem(GrpcVorgangAttachedItemTestFactory.create());
-
-			assertThat(result.getItemName()).isEqualTo(AttachedItemService.BESCHEID_ITEM_NAME);
-		}
-
-		@Test
-		void shouldCallGrpcObjectMapper() {
-			var grpcAttachedItem = GrpcVorgangAttachedItemTestFactory.create();
-
-			mapper.mapFromVorgangAttachedItem(grpcAttachedItem);
-
-			verify(grpcObjectMapper).mapFromGrpc(grpcAttachedItem.getItem());
-		}
-
-		@Test
-		void shouldSetBescheidData() {
-			var bescheidData = BescheidItemTestFactory.createBescheidBody();
-			when(grpcObjectMapper.mapFromGrpc(any())).thenReturn(bescheidData);
-
-			var result = mapper.mapFromVorgangAttachedItem(GrpcVorgangAttachedItemTestFactory.create());
-
-			assertThat(result.getBescheidData()).isEqualTo(bescheidData);
-		}
-	}
-
-	@Nested
-	class TestToBescheid {
-
-		@Test
-		void shouldSetBeschiedenAm() {
-			var bescheid = mapBescheid();
-
-			assertThat(bescheid.getBeschiedenAm()).isEqualTo(BescheidItemTestFactory.BESCHEIDEN_AM);
-		}
-
-		@Test
-		void shouldSetBewilligt() {
-			var bescheid = mapBescheid();
-
-			assertThat(bescheid.getBewilligt()).isTrue();
-		}
-
-		@Test
-		void shouldSetBescheidDocument() {
-			var bescheid = mapBescheid();
-
-			assertThat(bescheid.getBescheidDocument()).isEqualTo(BescheidItemTestFactory.BESCHEID_DOCUMENT);
-		}
-
-		@Test
-		void shouldSetSendBy() {
-			var bescheid = mapBescheid();
-
-			assertThat(bescheid.getSendBy()).isEqualTo(BescheidItemTestFactory.SEND_BY);
-		}
-
-		@Test
-		void shouldSetNachrichtText() {
-			var bescheid = mapBescheid();
-
-			assertThat(bescheid.getNachrichtText()).isEqualTo(BescheidItemTestFactory.NACHRICHT_TEXT);
-		}
-
-		@Test
-		void shouldSetNachrichtSubject() {
-			var bescheid = mapBescheid();
-
-			assertThat(bescheid.getNachrichtSubject()).isEqualTo(BescheidItemTestFactory.NACHRICHT_SUBJECT);
-		}
-
-		@Test
-		void shouldCallToAttachments() {
-			var expectedAttachments = List.of(BescheidItemTestFactory.ATTACHMENT);
-			var bescheidItem = BescheidItemTestFactory.createBuilder()
-					.bescheidData(Map.of(BescheidItem.FIELD_ATTACHMENTS, expectedAttachments)).build();
-
-			mapper.toBescheid(bescheidItem);
-
-			verify(mapper).toAttachments(expectedAttachments);
-		}
-
-		@Test
-		void shouldNotCallToAttachments() {
-			var bescheidItem = BescheidItemTestFactory.createBuilder().bescheidData(Map.of()).build();
-
-			mapper.toBescheid(bescheidItem);
-
-			verify(mapper, never()).toAttachments(any());
-		}
-
-		@Test
-		void shouldSetAttachments() {
-			doReturn(List.of(BescheidItemTestFactory.ATTACHMENT)).when(mapper).toAttachments(any());
-
-			var bescheid = mapBescheid();
-
-			assertThat(bescheid.getAttachmentsList()).containsExactly(BescheidItemTestFactory.ATTACHMENT);
-		}
-
-		@Test
-		void shouldSetId() {
-			var bescheid = mapBescheid();
-
-			assertThat(bescheid.getId()).isEqualTo(BescheidItemTestFactory.ID);
-		}
-
-		@Test
-		void shouldSetVersion() {
-			var bescheid = mapBescheid();
-
-			assertThat(bescheid.getVersion()).isEqualTo(BescheidItemTestFactory.VERSION);
-		}
-
-		private GrpcBescheid mapBescheid() {
-			return mapper.toBescheid(BescheidItemTestFactory.create());
-		}
-	}
-
-	@Nested
-	class TestToAttachments {
-
-		@Test
-		void shouldMapCollection() {
-			var result = mapper.toAttachments(List.of(BescheidItemTestFactory.ATTACHMENT));
-
-			assertThat(result).containsExactly(BescheidItemTestFactory.ATTACHMENT);
-		}
-
-		@Test
-		void shouldMapSingleValue() {
-			var result = mapper.toAttachments(BescheidItemTestFactory.ATTACHMENT);
-
-			assertThat(result).containsExactly(BescheidItemTestFactory.ATTACHMENT);
-		}
-
-		@DisplayName("should return null")
-		@ParameterizedTest(name = "when attachmentsObject is \"{0}\"")
-		@NullAndEmptySource
-		void shouldReturnNull(String attachmentsObject) {
-			var result = mapper.toAttachments(attachmentsObject);
-
-			assertThat(result).isNull();
-		}
-	}
-}
\ No newline at end of file
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/BescheidItemTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/BescheidItemTestFactory.java
deleted file mode 100644
index 1299edf5394b1d9a8ec0d804663dbd450b3d741c..0000000000000000000000000000000000000000
--- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/BescheidItemTestFactory.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * 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.bescheid.attacheditem;
-
-import java.util.List;
-import java.util.Map;
-
-import de.ozgcloud.bescheid.attacheditem.BescheidItem.BescheidItemBuilder;
-import de.ozgcloud.command.CommandTestFactory;
-
-public class BescheidItemTestFactory {
-
-	public static final String ID = "bescheid-item-id";
-	public static final long VERSION = 10L;
-	public static final String CLIENT = "client";
-
-	public static final String BESCHEIDEN_AM = "2024-01-01";
-	public static final String BESCHEID_DOCUMENT = "bescheid-document";
-	public static final String ATTACHMENT = "attachment-id";
-	public static final String SEND_BY = "POSTFACH";
-	public static final String NACHRICHT_TEXT = "nachricht-text";
-	public static final String NACHRICHT_SUBJECT = "nachricht-subject";
-
-	public static BescheidItem create() {
-		return createBuilder().build();
-	}
-
-	public static BescheidItemBuilder createBuilder() {
-		return BescheidItem.builder()
-				.id(ID)
-				.version(VERSION)
-				.client(CLIENT)
-				.vorgangId(CommandTestFactory.VORGANG_ID)
-				.itemName(AttachedItemService.BESCHEID_ITEM_NAME)
-				.bescheidData(createBescheidBody());
-	}
-
-	public static Map<String,  Object> createBescheidBody() {
-		return Map.of(
-				BescheidItem.FIELD_STATUS, BescheidItem.Status.DRAFT,
-				BescheidItem.FIELD_BESCHIEDEN_AM, BESCHEIDEN_AM,
-				BescheidItem.FIELD_BEWILLIGT, true,
-				BescheidItem.FIELD_BESCHEID_DOCUMENT, BESCHEID_DOCUMENT,
-				BescheidItem.FIELD_ATTACHMENTS, List.of(ATTACHMENT),
-				BescheidItem.FIELD_SEND_BY, SEND_BY,
-				BescheidItem.FIELD_NACHRICHT_TEXT, NACHRICHT_TEXT,
-				BescheidItem.FIELD_NACHRICHT_SUBJECT, NACHRICHT_SUBJECT);
-	}
-}
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/GrpcVorgangAttachedItemTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/GrpcVorgangAttachedItemTestFactory.java
index 85515f502425418404afb44e84fd6ed10473f921..fa3431732af5d052b593ed5b8827d0565741f44c 100644
--- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/GrpcVorgangAttachedItemTestFactory.java
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/GrpcVorgangAttachedItemTestFactory.java
@@ -41,9 +41,9 @@ public class GrpcVorgangAttachedItemTestFactory {
 
 	static GrpcVorgangAttachedItem.Builder createBuilder() {
 		return GrpcVorgangAttachedItem.newBuilder()
-				.setId(BescheidItemTestFactory.ID)
+				.setId(AttachedItemTestFactory.ID)
 				.setVorgangId(CommandTestFactory.VORGANG_ID)
-				.setClient(BescheidItemTestFactory.CLIENT)
+				.setClient(AttachedItemTestFactory.CLIENT)
 				.setItemName(AttachedItemService.BESCHEID_ITEM_NAME)
 				.setItem(OBJECT);
 	}
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/UtilsTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/UtilsTest.java
index 9809590526f543c40d3efa67b4b09908d2b7f478..c6ba16773eaf8c543412d378709d506d7996cd3a 100644
--- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/UtilsTest.java
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/UtilsTest.java
@@ -35,11 +35,10 @@ class UtilsTest {
 
 	@Test
 	void shouldReturnClient() {
-		var command = CommandTestFactory.createBuilder().bodyObject(Map.of(BescheidItem.PROPERTY_CLIENT, BescheidItemTestFactory.CLIENT))
-				.build();
+		var command = CommandTestFactory.createBuilder().bodyObject(Map.of(AttachedItem.PROPERTY_CLIENT, AttachedItemTestFactory.CLIENT)).build();
 
 		var client = Utils.extractClient(command);
 
-		assertThat(client).isEqualTo(BescheidItemTestFactory.CLIENT);
+		assertThat(client).isEqualTo(AttachedItemTestFactory.CLIENT);
 	}
 }
\ No newline at end of file
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteServiceTest.java
index 444249e06cc391cd8b6d05304ab33f93134cb899..11779af655705946b71d382902ce71b3c97118e6 100644
--- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteServiceTest.java
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteServiceTest.java
@@ -28,11 +28,11 @@ package de.ozgcloud.bescheid.attacheditem;
 import static org.assertj.core.api.Assertions.*;
 import static org.mockito.Mockito.*;
 
-import java.util.Map;
+import java.util.Collections;
+import java.util.List;
 import java.util.Optional;
 import java.util.stream.Stream;
 
-import org.apache.commons.collections.MapUtils;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Nested;
@@ -41,8 +41,12 @@ import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Spy;
 
+import de.ozgcloud.bescheid.Bescheid;
 import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor;
+import de.ozgcloud.bescheid.vorgang.VorgangTestFactory;
 import de.ozgcloud.command.CommandTestFactory;
+import de.ozgcloud.vorgang.common.GrpcObject;
+import de.ozgcloud.vorgang.common.GrpcProperty;
 import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemRequest;
 import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcFindVorgangAttachedItemResponse;
 import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItem;
@@ -64,8 +68,6 @@ class VorgangAttachedItemRemoteServiceTest {
 	@Mock
 	private ClientInterceptor bescheidCallContextInterceptor;
 	@Mock
-	private BescheidItemMapper bescheidItemMapper;
-	@Mock
 	private AttachedItemMapper attachedItemMapper;
 
 	@Nested
@@ -74,15 +76,18 @@ class VorgangAttachedItemRemoteServiceTest {
 		@Mock
 		private GrpcFindVorgangAttachedItemRequest request;
 
-		@BeforeEach
-		void init() {
-			doReturn(serviceStub).when(service).getServiceStub();
-		}
-
 		@Nested
 		@DisplayName("by vorgangId")
 		class TestGetByVorgangId {
 
+			private static final AttachedItem BESCHEID_ITEM = AttachedItemTestFactory.createBescheid();
+
+			@BeforeEach
+			void init() {
+				doReturn(request).when(service).buildFindRequest(any());
+				doReturn(Optional.of(BESCHEID_ITEM)).when(service).findBescheidDraft(any(GrpcFindVorgangAttachedItemRequest.class));
+			}
+
 			@Test
 			void shouldCallCreateFindRequestBuilder() {
 				service.findBescheidDraft(VORGANG_ID);
@@ -92,68 +97,63 @@ class VorgangAttachedItemRemoteServiceTest {
 
 			@Test
 			void shouldCallGetBescheidDraft() {
-				doReturn(request).when(service).buildFindRequest(any());
-
 				service.findBescheidDraft(VORGANG_ID);
 
 				verify(service).findBescheidDraft(request);
 			}
+
+			@Test
+			void shouldReturnResult() {
+				var result = service.findBescheidDraft(VORGANG_ID);
+
+				assertThat(result).contains(BESCHEID_ITEM);
+			}
 		}
 
 		@Nested
 		@DisplayName("by grpc request")
 		class TestByGrpcRequest {
 
+			private static final AttachedItem BESCHEID_ITEM = AttachedItemTestFactory.createBescheid();
+
 			@Mock
 			private GrpcFindVorgangAttachedItemResponse response;
 
-			@Test
-			void shouldCallGetServiceStub() {
-				service.findBescheidDraft(request);
-
-				verify(service).getServiceStub();
+			@BeforeEach
+			void init() {
 			}
 
 			@Test
-			void shouldCallFind() {
-				service.findBescheidDraft(request);
-
-				verify(serviceStub).find(request);
-			}
-
-			@Test
-			void shouldCallMapper() {
-				when(serviceStub.find(any())).thenReturn(response);
+			void shouldCallFindAllBescheid() {
+				doReturn(Stream.of(BESCHEID_ITEM)).when(service).findAllBescheid(any(GrpcFindVorgangAttachedItemRequest.class));
 
 				service.findBescheidDraft(request);
 
-				verify(bescheidItemMapper).fromFindVorgangAttachedItemResponse(response);
+				verify(service).findAllBescheid(request);
 			}
 
 			@Test
 			void shouldCallHasStatusDraft() {
-				var item = BescheidItemTestFactory.create();
-				when(bescheidItemMapper.fromFindVorgangAttachedItemResponse(any())).thenReturn(Stream.of(item));
+				doReturn(Stream.of(BESCHEID_ITEM)).when(service).findAllBescheid(any(GrpcFindVorgangAttachedItemRequest.class));
 
 				service.findBescheidDraft(request);
 
-				verify(service).hasStatusDraft(item);
+				verify(service).hasStatusDraft(BESCHEID_ITEM);
 			}
 
 			@Test
 			void shouldFilterDraftItems() {
-				var item = BescheidItemTestFactory.create();
-				when(bescheidItemMapper.fromFindVorgangAttachedItemResponse(any())).thenReturn(Stream.of(item));
+				doReturn(Stream.of(BESCHEID_ITEM)).when(service).findAllBescheid(any(GrpcFindVorgangAttachedItemRequest.class));
 				doReturn(true).when(service).hasStatusDraft(any());
 
 				var result = service.findBescheidDraft(request);
 
-				assertThat(result).contains(item);
+				assertThat(result).contains(BESCHEID_ITEM);
 			}
 
 			@Test
 			void shouldReturnEmptyWhenNotFound() {
-				when(bescheidItemMapper.fromFindVorgangAttachedItemResponse(any())).thenReturn(Stream.empty());
+				doReturn(Stream.empty()).when(service).findAllBescheid(any(GrpcFindVorgangAttachedItemRequest.class));
 
 				var result = service.findBescheidDraft(request);
 
@@ -162,7 +162,7 @@ class VorgangAttachedItemRemoteServiceTest {
 
 			@Test
 			void shouldReturnEmptyWhenNotDraft() {
-				when(bescheidItemMapper.fromFindVorgangAttachedItemResponse(any())).thenReturn(Stream.of(BescheidItemTestFactory.create()));
+				doReturn(Stream.of(BESCHEID_ITEM)).when(service).findAllBescheid(any(GrpcFindVorgangAttachedItemRequest.class));
 				doReturn(false).when(service).hasStatusDraft(any());
 
 				var result = service.findBescheidDraft(request);
@@ -170,25 +170,45 @@ class VorgangAttachedItemRemoteServiceTest {
 				assertThat(result).isEmpty();
 			}
 
-			@Test
-			void shouldReturnLastBescheid() {
-				var item1 = BescheidItemTestFactory.createBuilder().bescheidData(Map.of(
-						BescheidItem.FIELD_BESCHIEDEN_AM, "2021-01-01")).build();
-				var item2 = BescheidItemTestFactory.create();
-				when(bescheidItemMapper.fromFindVorgangAttachedItemResponse(any())).thenReturn(Stream.of(item1, item2));
-				doReturn(true).when(service).hasStatusDraft(any());
+		}
 
-				var result = service.findBescheidDraft(request);
+	}
 
-				assertThat(getBeschiedenAm(result)).isEqualTo(BescheidItemTestFactory.BESCHEIDEN_AM);
-			}
+	@Nested
+	class TestFindAllBescheid {
 
-			private String getBeschiedenAm(Optional<BescheidItem> item) {
-				assertThat(item).isPresent();
-				return MapUtils.getString(item.get().getBescheidData(), BescheidItem.FIELD_BESCHIEDEN_AM);
-			}
+		private static final AttachedItem RESULT_BESCHEID_ITEM = AttachedItemTestFactory.createBescheid();
+
+		@Mock
+		private GrpcFindVorgangAttachedItemRequest request;
+
+		@BeforeEach
+		void init() {
+			doReturn(Stream.of(RESULT_BESCHEID_ITEM)).when(service).findAllBescheid(any(GrpcFindVorgangAttachedItemRequest.class));
+		}
+
+		@Test
+		void shouldCallBuildFindRequest() {
+			service.findAllBescheid(VorgangTestFactory.ID);
+
+			verify(service).buildFindRequest(VorgangTestFactory.ID.toString());
+		}
+
+		@Test
+		void shouldCallFindAllBescheid() {
+			doReturn(request).when(service).buildFindRequest(any());
+
+			service.findAllBescheid(VorgangTestFactory.ID);
+
+			verify(service).findAllBescheid(request);
 		}
 
+		@Test
+		void shouldReturnResult() {
+			var result = service.findAllBescheid(VorgangTestFactory.ID);
+
+			assertThat(result).containsExactly(RESULT_BESCHEID_ITEM);
+		}
 	}
 
 	@Nested
@@ -220,12 +240,75 @@ class VorgangAttachedItemRemoteServiceTest {
 		}
 	}
 
+	@Nested
+	class TestFindAllBescheidWithGrpcRequest {
+
+		@Mock
+		private GrpcFindVorgangAttachedItemRequest request;
+		@Mock
+		private GrpcFindVorgangAttachedItemResponse response;
+		@Mock
+		private GrpcVorgangAttachedItem grpcVorgangAttachedItem;
+
+		@BeforeEach
+		void init() {
+			doReturn(serviceStub).when(service).getServiceStub();
+			when(serviceStub.find(any())).thenReturn(response);
+		}
+
+		@Test
+		void shouldCallGetServiceStub() {
+			service.findAllBescheid(request);
+
+			verify(service).getServiceStub();
+		}
+
+		@Test
+		void shouldCallMapper() {
+			when(response.getVorgangAttachedItemsList()).thenReturn(Collections.singletonList(grpcVorgangAttachedItem));
+
+			service.findAllBescheid(request).toList();
+
+			verify(attachedItemMapper).mapFromVorgangAttachedItem(grpcVorgangAttachedItem);
+		}
+
+		@Test
+		void shouldReturnSortedResult() {
+			var beschiedenAmFirst = "2021-01-01";
+			var beschiedenAmLast = "2024-01-01";
+			createItems(beschiedenAmFirst, beschiedenAmLast);
+
+			var result = service.findAllBescheid(request).toList();
+
+			assertThat(result).hasSize(2);
+			assertThat(result.get(0).getItem()).containsEntry(Bescheid.FIELD_BESCHIEDEN_AM, beschiedenAmLast);
+			assertThat(result.get(1).getItem()).containsEntry(Bescheid.FIELD_BESCHIEDEN_AM, beschiedenAmFirst);
+		}
+
+		private void createItems(String beschiedenAmFirst, String beschiedenAmLast) {
+			var itemBeschiedenFirst = createGrpcAttachedItem(beschiedenAmLast);
+			when(attachedItemMapper.mapFromVorgangAttachedItem(itemBeschiedenFirst)).thenReturn(createAttachedItem(beschiedenAmLast));
+			var itemBeschiedenLast = createGrpcAttachedItem(beschiedenAmFirst);
+			when(attachedItemMapper.mapFromVorgangAttachedItem(itemBeschiedenLast)).thenReturn(createAttachedItem(beschiedenAmFirst));
+			when(response.getVorgangAttachedItemsList()).thenReturn(List.of(itemBeschiedenFirst, itemBeschiedenLast));
+		}
+
+		private GrpcVorgangAttachedItem createGrpcAttachedItem(String beschiedenAm) {
+			return GrpcVorgangAttachedItemTestFactory.createBuilder().clearItem().setItem(GrpcObject.newBuilder().addProperty(
+					GrpcProperty.newBuilder().setName(Bescheid.FIELD_BESCHIEDEN_AM).addValue(beschiedenAm))).build();
+		}
+
+		private AttachedItem createAttachedItem(String beschiedenAm) {
+			return AttachedItemTestFactory.createBescheidBuilder().clearItem().itemEntry(Bescheid.FIELD_BESCHIEDEN_AM, beschiedenAm).build();
+		}
+	}
+
 	@Nested
 	class TestHasStatusDraft {
 
 		@Test
 		void shouldReturnTrueIfDraft() {
-			var item = BescheidItemTestFactory.createBuilder().bescheidData(Map.of(BescheidItem.FIELD_STATUS, BescheidItem.Status.DRAFT.name()))
+			var item = AttachedItemTestFactory.createBescheidBuilder().clearItem().itemEntry(Bescheid.FIELD_STATUS, Bescheid.Status.DRAFT.name())
 					.build();
 
 			var result = service.hasStatusDraft(item);
@@ -235,7 +318,7 @@ class VorgangAttachedItemRemoteServiceTest {
 
 		@Test
 		void shouldReturnFalseIfNotDraft() {
-			var item = BescheidItemTestFactory.createBuilder().bescheidData(Map.of(BescheidItem.FIELD_STATUS, BescheidItem.Status.BESCHEID.name()))
+			var item = AttachedItemTestFactory.createBescheidBuilder().clearItem().itemEntry(Bescheid.FIELD_STATUS, Bescheid.Status.SENT.name())
 					.build();
 
 			var result = service.hasStatusDraft(item);
@@ -275,7 +358,7 @@ class VorgangAttachedItemRemoteServiceTest {
 
 			getBescheid();
 
-			verify(service).buildGetByIdRequest(BescheidItemTestFactory.ID);
+			verify(service).buildGetByIdRequest(AttachedItemTestFactory.ID);
 		}
 
 		@Test
@@ -294,13 +377,13 @@ class VorgangAttachedItemRemoteServiceTest {
 
 			getBescheid();
 
-			verify(bescheidItemMapper).mapFromVorgangAttachedItem(grpcVorgangAttachedItem);
+			verify(attachedItemMapper).mapFromVorgangAttachedItem(grpcVorgangAttachedItem);
 		}
 
 		@Test
 		void shouldReturnFoundBescheid() {
-			var expectedBescheid = BescheidItemTestFactory.create();
-			when(bescheidItemMapper.mapFromVorgangAttachedItem(any())).thenReturn(expectedBescheid);
+			var expectedBescheid = AttachedItemTestFactory.createBescheid();
+			when(attachedItemMapper.mapFromVorgangAttachedItem(any())).thenReturn(expectedBescheid);
 			when(grpcVorgangAttachedItemResponse.getVorgangAttachedItem()).thenReturn(grpcVorgangAttachedItem);
 
 			var result = getBescheid();
@@ -308,8 +391,8 @@ class VorgangAttachedItemRemoteServiceTest {
 			assertThat(result).isEqualTo(expectedBescheid);
 		}
 
-		private BescheidItem getBescheid() {
-			return service.getBescheid(BescheidItemTestFactory.ID);
+		private AttachedItem getBescheid() {
+			return service.getBescheid(AttachedItemTestFactory.ID);
 		}
 	}
 
@@ -378,7 +461,7 @@ class VorgangAttachedItemRemoteServiceTest {
 		}
 
 		private AttachedItem getItem() {
-			return service.getItem(BescheidItemTestFactory.ID);
+			return service.getItem(AttachedItemTestFactory.ID);
 		}
 	}
 
@@ -387,9 +470,9 @@ class VorgangAttachedItemRemoteServiceTest {
 
 		@Test
 		void shouldSetBescheidId() {
-			var request = service.buildGetByIdRequest(BescheidItemTestFactory.ID);
+			var request = service.buildGetByIdRequest(AttachedItemTestFactory.ID);
 
-			assertThat(request.getId()).isEqualTo(BescheidItemTestFactory.ID);
+			assertThat(request.getId()).isEqualTo(AttachedItemTestFactory.ID);
 		}
 	}
 
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtServiceITCase.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtServiceITCase.java
index bffdefb5ef06bb6f12b9966e41983ecdc2066fea..5bb7b63531909383162dd11ddcfdaf02949f7d73 100644
--- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtServiceITCase.java
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtServiceITCase.java
@@ -7,6 +7,7 @@ import java.util.Optional;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.info.BuildProperties;
 import org.springframework.boot.test.mock.mockito.MockBean;
 
 import de.ozgcloud.apilib.common.command.OzgCloudCommandService;
@@ -23,6 +24,8 @@ class NachrichtServiceITCase {
 	private OzgCloudCommandService commandService;
 	@MockBean
 	private CommandMapper commandMapper;
+	@MockBean
+	private BuildProperties buildProperties;
 
 	@Nested
 	class TestBuildMessage {
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtServiceTest.java
index 84ded81a81d00efedee18241e553e943e68cb919..dd3bfc977b5e4712b1bb9bae69070504132cf2fe 100644
--- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtServiceTest.java
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtServiceTest.java
@@ -1,9 +1,11 @@
 package de.ozgcloud.bescheid.nachricht;
 
 import static org.assertj.core.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 
+import java.util.Map;
 import java.util.Optional;
 
 import org.junit.jupiter.api.BeforeEach;
@@ -13,8 +15,18 @@ import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Spy;
 
+import de.ozgcloud.apilib.common.command.OzgCloudCommand;
+import de.ozgcloud.apilib.common.command.OzgCloudCommandService;
+import de.ozgcloud.apilib.common.command.grpc.CommandMapper;
+import de.ozgcloud.apilib.common.datatypes.GenericId;
+import de.ozgcloud.apilib.user.OzgCloudUserId;
+import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId;
+import de.ozgcloud.bescheid.Bescheid;
 import de.ozgcloud.bescheid.BescheidTestFactory;
+import de.ozgcloud.bescheid.vorgang.PostfachAddressTestFactory;
+import de.ozgcloud.bescheid.vorgang.Vorgang;
 import de.ozgcloud.bescheid.vorgang.VorgangTestFactory;
+import de.ozgcloud.common.errorhandling.TechnicalException;
 
 class NachrichtServiceTest {
 
@@ -24,6 +36,10 @@ class NachrichtServiceTest {
 
 	@Mock
 	private NachrichtRemoteService remoteService;
+	@Mock
+	private OzgCloudCommandService commandService;
+	@Mock
+	private CommandMapper commandMapper;
 
 	@Nested
 	class TestCreateNachrichtDraft {
@@ -104,4 +120,222 @@ class NachrichtServiceTest {
 			assertThat(message).isEqualTo("FROM_TEMPLATE");
 		}
 	}
+
+	@Nested
+	class TestSendNachricht {
+
+		@Mock
+		private OzgCloudCommand ozgCloudCommand;
+
+		@BeforeEach
+		void init() {
+			doReturn(ozgCloudCommand).when(service).buildSendBescheidCommand(any());
+		}
+
+		@Test
+		void shouldCallBuildBescheidCommand() {
+			var bescheid = BescheidTestFactory.create();
+
+			service.sendNachricht(bescheid);
+
+			verify(service).buildSendBescheidCommand(bescheid);
+		}
+
+		@Test
+		void shouldCallCommandService() {
+			service.sendNachricht(BescheidTestFactory.create());
+
+			verify(commandService).createAndWaitUntilDone(ozgCloudCommand);
+		}
+
+	}
+
+	@Nested
+	class TestBuildSendBescheidCommand {
+
+		private static final Map<String, Object> bodyObject = Map.of("key", "value");
+		private final Bescheid bescheid = BescheidTestFactory.create();
+
+		@BeforeEach
+		void init() {
+			doReturn(bodyObject).when(service).buildSendNachrichtCommandBody(any());
+		}
+
+		@Test
+		void shouldCallVorgangIdMapper() {
+			buildCommand();
+
+			verify(commandMapper).toOzgCloudVorgangId(VorgangTestFactory.ID.toString());
+		}
+
+		@Test
+		void shouldSetVorgangId() {
+			var vorgangId = OzgCloudVorgangId.from(VorgangTestFactory.ID.toString());
+			when(commandMapper.toOzgCloudVorgangId(anyString())).thenReturn(vorgangId);
+
+			var result = buildCommand();
+
+			assertThat(result.getVorgangId()).isEqualTo(vorgangId);
+		}
+
+		@Test
+		void shouldCallMapRelationId() {
+			buildCommand();
+
+			verify(commandMapper).mapRelationId(VorgangTestFactory.ID.toString());
+		}
+
+		@Test
+		void shouldSetRelationId() {
+			var relationId = GenericId.from("relation-id");
+			when(commandMapper.mapRelationId(anyString())).thenReturn(relationId);
+
+			var result = buildCommand();
+
+			assertThat(result.getRelationId()).isEqualTo(relationId);
+		}
+
+		@Test
+		void shouldSetOrder() {
+			var result = buildCommand();
+
+			assertThat(result.getOrder()).isEqualTo(NachrichtService.SEND_POSTFACH_NACHRICHT_ORDER);
+		}
+
+		@Test
+		void shouldCallCreatedBy() {
+			buildCommand();
+
+			verify(commandMapper).toOzgCloudUserId(BescheidTestFactory.CREATED_BY.toString());
+		}
+
+		@Test
+		void shouldSetCreatedBy() {
+			var userId = OzgCloudUserId.from(BescheidTestFactory.CREATED_BY.toString());
+			when(commandMapper.toOzgCloudUserId(anyString())).thenReturn(userId);
+
+			var result = buildCommand();
+
+			assertThat(result.getCreatedBy()).isEqualTo(userId);
+		}
+
+		@Test
+		void shouldCallBuildSendNachrichtCommandBody() {
+			buildCommand();
+
+			verify(service).buildSendNachrichtCommandBody(bescheid);
+		}
+
+		@Test
+		void shouldSetBodyObject() {
+			var result = buildCommand();
+
+			assertThat(result.getBodyObject()).isEqualTo(bodyObject);
+		}
+
+		private OzgCloudCommand buildCommand() {
+			return service.buildSendBescheidCommand(bescheid);
+		}
+	}
+
+	@Nested
+	class TestBuildSendNachrichtCommandBody {
+
+		private static final String POSTFACH_ID = "postfach-id";
+
+		private final Bescheid bescheid = BescheidTestFactory.create();
+
+		@BeforeEach
+		void init() {
+			doReturn(POSTFACH_ID).when(service).getPostfachId(any());
+		}
+
+		@Test
+		void shouldSetPostfachId() {
+			var result = service.buildSendNachrichtCommandBody(bescheid);
+
+			assertThat(result).containsEntry(NachrichtService.FIELD_POSTFACH_ID, POSTFACH_ID);
+		}
+
+		@Test
+		void shouldSetReplyOption() {
+			var result = service.buildSendNachrichtCommandBody(bescheid);
+
+			assertThat(result).containsEntry(NachrichtService.FIELD_REPLY_OPTION, NachrichtService.REPLY_OPTION);
+		}
+
+		@Test
+		void shouldSetSubject() {
+			var result = service.buildSendNachrichtCommandBody(bescheid);
+
+			assertThat(result).containsEntry(NachrichtService.FIELD_SUBJECT, BescheidTestFactory.NACHRICHT_SUBJECT);
+		}
+
+		@Test
+		void shouldSetMailBody() {
+			var result = service.buildSendNachrichtCommandBody(bescheid);
+
+			assertThat(result).containsEntry(NachrichtService.FIELD_MAIL_BODY, BescheidTestFactory.NACHRICHT_TEXT);
+		}
+
+		@Test
+		void shouldSetAttachments() {
+			var result = service.buildSendNachrichtCommandBody(bescheid);
+
+			assertThat(result).containsEntry(NachrichtService.FIELD_ATTACHMENTS, BescheidTestFactory.BESCHEID_FILE_ID);
+		}
+	}
+
+	@Nested
+	class TestGetPostfachId {
+
+		private static final Vorgang.PostfachAddress POSTFACH_ADDRESS = PostfachAddressTestFactory.create();
+
+		@BeforeEach
+		void init() {
+			doReturn(Optional.of(POSTFACH_ADDRESS)).when(service).getAddress(any());
+		}
+
+		@Test
+		void shouldCallGetAddress() {
+			var bescheid = BescheidTestFactory.create();
+
+			service.getPostfachId(bescheid);
+
+			verify(service).getAddress(bescheid);
+		}
+
+		@Test
+		void shouldReturnPostfachId() {
+			var bescheid = BescheidTestFactory.create();
+
+			var result = service.getPostfachId(bescheid);
+
+			assertThat(result).isEqualTo(PostfachAddressTestFactory.POSTFACH_ID);
+		}
+
+	}
+
+	@Nested
+	class TestNoPostfachId {
+
+		@Test
+		void shouldThrowExceptionIfNoPostfachAddress() {
+			doReturn(Optional.empty()).when(service).getAddress(any());
+
+			assertThrows(TechnicalException.class, this::getPostfachId);
+		}
+
+		@Test
+		void shouldThrowExceptionIfNoPostfachId() {
+			var postfachAddress = PostfachAddressTestFactory.createBuilder().identifier(Map.of()).build();
+			doReturn(Optional.of(postfachAddress)).when(service).getAddress(any());
+
+			assertThrows(TechnicalException.class, this::getPostfachId);
+		}
+
+		private void getPostfachId() {
+			service.getPostfachId(BescheidTestFactory.create());
+		}
+	}
 }
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceTest.java
index a19b60778f59f8a9fd72d3f2ce80706692a7b283..9696b3cba965a5c2a3c9cdfb50e87dc330b7e37a 100644
--- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceTest.java
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceTest.java
@@ -37,7 +37,7 @@ class SmartDocumentsBescheidRemoteServiceTest {
 		void shouldFillBescheid() {
 			var bescheid = service.buildBescheid(BescheidRequestTestFactory.create(), SmartDocumentsResponseTestFactory.create());
 
-			assertThat(bescheid).usingRecursiveComparison().ignoringFields("serviceKonto", "nachrichtSubject")
+			assertThat(bescheid).usingRecursiveComparison().ignoringFields("serviceKonto", "nachrichtSubject", "bescheidFileId")
 					.isEqualTo(BescheidTestFactory.createBuilder().nachrichtText(Optional.empty()).build());
 		}
 	}
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/AttachmentTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/PostfachAddressTestFactory.java
similarity index 60%
rename from nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/AttachmentTestFactory.java
rename to bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/PostfachAddressTestFactory.java
index bc3f4fd378d3af6be1a28a3fbb892f760f4e1d38..7f7ef749025025cc565b4b04b6a5db8183eb3fb1 100644
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/AttachmentTestFactory.java
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/PostfachAddressTestFactory.java
@@ -21,26 +21,28 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-package de.ozgcloud.nachrichten.postfach.bayernid.proxy.message;
+package de.ozgcloud.bescheid.vorgang;
 
-import java.io.ByteArrayInputStream;
+import java.util.Map;
+import java.util.UUID;
 
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.Attachment.AttachmentBuilder;
+import de.ozgcloud.bescheid.nachricht.NachrichtService;
+import de.ozgcloud.bescheid.vorgang.Vorgang.PostfachAddress.PostfachAddressBuilder;
 
-public class AttachmentTestFactory {
+public class PostfachAddressTestFactory {
 
-	public static final String FILE_NAME = "test.txt";
-	public static final String TYPE = "plain/text";
-	public static final byte[] CONTENT = "test".getBytes();
+	public static final String POSTFACH_ID = UUID.randomUUID().toString();
+	public static final int TYPE = 1;
+	public static final String VERSION = "1.0";
 
-	public static Attachment create() {
+	public static Vorgang.PostfachAddress create() {
 		return createBuilder().build();
 	}
 
-	public static AttachmentBuilder createBuilder() {
-		return Attachment.builder()
-				.name(FILE_NAME)
+	public static PostfachAddressBuilder createBuilder() {
+		return Vorgang.PostfachAddress.builder()
 				.type(TYPE)
-				.content(new ByteArrayInputStream(CONTENT));
+				.version(VERSION)
+				.identifier(Map.of(NachrichtService.FIELD_POSTFACH_ID, POSTFACH_ID));
 	}
 }
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/ServiceKontoTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/ServiceKontoTestFactory.java
index 9efe58ebcf125e07f34ac2c4a0c3622dc68e92bd..a08054b9b37b697c0cc2ec5b08b273e8ed4fcdc0 100644
--- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/ServiceKontoTestFactory.java
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/ServiceKontoTestFactory.java
@@ -1,6 +1,5 @@
 package de.ozgcloud.bescheid.vorgang;
 
-import de.ozgcloud.bescheid.vorgang.Vorgang.PostfachAddress;
 import de.ozgcloud.bescheid.vorgang.Vorgang.ServiceKonto;
 
 public class ServiceKontoTestFactory {
@@ -11,6 +10,6 @@ public class ServiceKontoTestFactory {
 
 	public static ServiceKonto.ServiceKontoBuilder createBuilder() {
 		return ServiceKonto.builder()
-				.postfachAddress(PostfachAddress.builder().build());
+				.postfachAddress(PostfachAddressTestFactory.create());
 	}
 }
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/document/DocumentServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/document/DocumentServiceTest.java
index a9b9669ca351e63c42e259ec75d193b24c98355a..9589ada3b530def97b9876347110100bf7f788a7 100644
--- a/bescheid-manager/src/test/java/de/ozgcloud/document/DocumentServiceTest.java
+++ b/bescheid-manager/src/test/java/de/ozgcloud/document/DocumentServiceTest.java
@@ -47,10 +47,9 @@ import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId;
 import de.ozgcloud.bescheid.Bescheid;
 import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor;
 import de.ozgcloud.bescheid.BescheidTestFactory;
+import de.ozgcloud.bescheid.attacheditem.AttachedItem;
 import de.ozgcloud.bescheid.attacheditem.AttachedItemService;
 import de.ozgcloud.bescheid.attacheditem.AttachedItemTestFactory;
-import de.ozgcloud.bescheid.attacheditem.BescheidItem;
-import de.ozgcloud.bescheid.attacheditem.BescheidItemTestFactory;
 import de.ozgcloud.command.Command;
 import de.ozgcloud.command.CommandTestFactory;
 import de.ozgcloud.common.binaryfile.FileId;
@@ -74,7 +73,7 @@ class DocumentServiceTest {
 	@Mock
 	private DocumentMapper documentMapper;
 
-	private Command command = CommandTestFactory.createBuilder().relationId(RELATION_ID).build();
+	private final Command command = CommandTestFactory.createBuilder().relationId(RELATION_ID).build();
 
 	@Nested
 	class TestCreateBescheidDocument {
@@ -87,7 +86,7 @@ class DocumentServiceTest {
 		@Nested
 		class TestWithCommand {
 
-			private Command command = CommandTestFactory.createBuilder().relationId(RELATION_ID)
+			private final Command command = CommandTestFactory.createBuilder().relationId(RELATION_ID)
 					.bodyObject(Map.of(DocumentService.FIELD_DOCUMENT_FILE, FILE_ID)).build();
 
 			@BeforeEach
@@ -123,7 +122,7 @@ class DocumentServiceTest {
 		@Nested
 		class TestWithBescheid {
 
-			private Bescheid bescheid = BescheidTestFactory.create().withBescheidFileId(FileId.from(BescheidTestFactory.BESCHEID_FILE_ID));
+			private final Bescheid bescheid = BescheidTestFactory.create().withBescheidFileId(FileId.from(BescheidTestFactory.BESCHEID_FILE_ID));
 
 			@BeforeEach
 			void init() {
@@ -198,11 +197,11 @@ class DocumentServiceTest {
 
 		@Test
 		void shouldCallGetBescheidItem() {
-			when(attachedItemService.getBescheidItem(any())).thenReturn(BescheidItemTestFactory.create());
+			when(attachedItemService.getBescheidItem(any())).thenReturn(AttachedItemTestFactory.createBescheid());
 
 			validateBescheidItem();
 
-			verify(attachedItemService).getBescheidItem(BescheidItemTestFactory.ID);
+			verify(attachedItemService).getBescheidItem(AttachedItemTestFactory.ID);
 		}
 
 		@Test
@@ -215,20 +214,20 @@ class DocumentServiceTest {
 		@Test
 		void shouldNotThrowExceptionIfNotDraft() {
 			when(attachedItemService.getBescheidItem(any())).thenReturn(
-					BescheidItemTestFactory.createBuilder().bescheidData(Map.of(BescheidItem.FIELD_STATUS, "not-draft")).build());
+					AttachedItemTestFactory.createBescheidBuilder().clearItem().itemEntry(Bescheid.FIELD_STATUS, "not-draft").build());
 
 			assertThrows(TechnicalException.class, this::validateBescheidItem);
 		}
 
 		@Test
 		void shouldValidateBescheidItem() {
-			when(attachedItemService.getBescheidItem(any())).thenReturn(BescheidItemTestFactory.create());
+			when(attachedItemService.getBescheidItem(any())).thenReturn(AttachedItemTestFactory.createBescheid());
 
 			assertDoesNotThrow(this::validateBescheidItem);
 		}
 
 		void validateBescheidItem() {
-			service.validateBescheidItem(BescheidItemTestFactory.ID);
+			service.validateBescheidItem(AttachedItemTestFactory.ID);
 		}
 	}
 
@@ -293,20 +292,20 @@ class DocumentServiceTest {
 	@Nested
 	class TestBuildAttachedItem {
 
-		private static final Map<String, Object> ITEM_MAP = Map.of("key", (Object) "value");
+		private static final Map<String, Object> ITEM_MAP = Map.of("key", "value");
 
 		@Test
 		void shouldSetVorgangId() {
 			var attachedItem = buildAttachedItem();
 
-			assertThat(attachedItem).containsEntry(BescheidItem.PROPERTY_VORGANG_ID, CommandTestFactory.VORGANG_ID);
+			assertThat(attachedItem).containsEntry(AttachedItem.PROPERTY_VORGANG_ID, CommandTestFactory.VORGANG_ID);
 		}
 
 		@Test
 		void shouldSetClient() {
 			var attachedItem = buildAttachedItem();
 
-			assertThat(attachedItem).containsEntry(BescheidItem.PROPERTY_CLIENT,
+			assertThat(attachedItem).containsEntry(AttachedItem.PROPERTY_CLIENT,
 					BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME);
 		}
 
@@ -314,14 +313,14 @@ class DocumentServiceTest {
 		void shouldSetItemName() {
 			var attachedItem = buildAttachedItem();
 
-			assertThat(attachedItem).containsEntry(BescheidItem.PROPERTY_ITEM_NAME, DocumentService.DOCUMENT_ITEM_NAME);
+			assertThat(attachedItem).containsEntry(AttachedItem.PROPERTY_ITEM_NAME, DocumentService.DOCUMENT_ITEM_NAME);
 		}
 
 		@Test
 		void shouldSetItem() {
 			var attachedItem = buildAttachedItem();
 
-			assertThat(attachedItem).containsEntry(BescheidItem.PROPERTY_ITEM, ITEM_MAP);
+			assertThat(attachedItem).containsEntry(AttachedItem.PROPERTY_ITEM, ITEM_MAP);
 		}
 
 		private Map<String, Object> buildAttachedItem() {
@@ -402,7 +401,7 @@ class DocumentServiceTest {
 
 			@Test
 			void shouldThrowExceptionIfFileIdMissing() {
-				bescheid = BescheidTestFactory.create();
+				bescheid = BescheidTestFactory.createBuilder().bescheidFileId(null).build();
 
 				assertThrows(TechnicalException.class, () -> service.buildItemMap(bescheid));
 
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/pom.xml b/nachrichten-bayernid-proxy/bayernid-proxy-impl/pom.xml
deleted file mode 100644
index 48b8d1ed900b3118507b1c51cacbeff588ab1d5f..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/pom.xml
+++ /dev/null
@@ -1,228 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    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.
-
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-		 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>de.ozgcloud.nachrichten</groupId>
-		<artifactId>nachrichten-bayernid-proxy</artifactId>
-		<version>0.3.0-SNAPSHOT</version>
-		<relativePath>../</relativePath>
-	</parent>
-
-	<artifactId>bayernid-proxy-impl</artifactId>
-	<name>OZG Cloud BayernID Proxy Implementation</name>
-
-	<properties>
-		<jaxb-maven-plugin.version>4.0.0</jaxb-maven-plugin.version>
-
-		<spring-boot.build-image.imageName>docker.ozg-sh.de/bayernid-proxy:build-latest</spring-boot.build-image.imageName>
-	</properties>
-
-	<dependencies>
-		<dependency>
-			<groupId>de.ozgcloud.nachrichten</groupId>
-			<artifactId>bayernid-proxy-interface</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-
-		<!-- Spring -->
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter</artifactId>
-		</dependency>
-		<dependency>
-		<groupId>org.springframework.boot</groupId>
-		<artifactId>spring-boot-starter-web</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-actuator</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-validation</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.ws</groupId>
-			<artifactId>spring-ws-core</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework</groupId>
-			<artifactId>spring-oxm</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.ws</groupId>
-			<artifactId>spring-xml</artifactId>
-		</dependency>
-
-		<!-- commons -->
-		<dependency>
-			<groupId>org.apache.httpcomponents.client5</groupId>
-			<artifactId>httpclient5</artifactId>
-		</dependency>
-
-		<!-- grpc -->
-		<dependency>
-			<groupId>net.devh</groupId>
-			<artifactId>grpc-server-spring-boot-starter</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>io.grpc</groupId>
-			<artifactId>grpc-inprocess</artifactId>
-		</dependency>
-
-		<!-- aspectJ -->
-		<dependency>
-			<groupId>org.aspectj</groupId>
-			<artifactId>aspectjweaver</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.aspectj</groupId>
-			<artifactId>aspectjrt</artifactId>
-		</dependency>
-
-		<!-- Tools -->
-		<dependency>
-			<groupId>org.mapstruct</groupId>
-			<artifactId>mapstruct</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.glassfish.jaxb</groupId>
-			<artifactId>jaxb-runtime</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>com.fasterxml.jackson.dataformat</groupId>
-			<artifactId>jackson-dataformat-xml</artifactId>
-		</dependency>
-
-		<!-- Dev -->
-		<dependency>
-			<groupId>org.projectlombok</groupId>
-			<artifactId>lombok</artifactId>
-			<optional>true</optional>
-			<scope>provided</scope>
-		</dependency>
-
-		<!-- Test -->
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-test</artifactId>
-			<scope>test</scope>
-			<exclusions>
-				<exclusion>
-					<groupId>org.junit.vintage</groupId>
-					<artifactId>junit-vintage-engine</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-		<dependency>
-			<groupId>org.junit.jupiter</groupId>
-			<artifactId>junit-jupiter-engine</artifactId>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.junit.jupiter</groupId>
-			<artifactId>junit-jupiter-params</artifactId>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.wiremock</groupId>
-			<artifactId>wiremock-standalone</artifactId>
-			<version>${wiremock.version}</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>net.devh</groupId>
-			<artifactId>grpc-client-spring-boot-starter</artifactId>
-			<scope>test</scope>
-		</dependency>
-
-	</dependencies>
-
-	<build>
-		<finalName>${project.artifactId}</finalName>
-		<plugins>
-			<plugin>
-				<groupId>org.springframework.boot</groupId>
-				<artifactId>spring-boot-maven-plugin</artifactId>
-			</plugin>
-
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-surefire-plugin</artifactId>
-			</plugin>
-
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-failsafe-plugin</artifactId>
-			</plugin>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-compiler-plugin</artifactId>
-			</plugin>
-			<plugin>
-				<groupId>org.jacoco</groupId>
-				<artifactId>jacoco-maven-plugin</artifactId>
-			</plugin>
-			<plugin>
-				<groupId>org.jvnet.jaxb</groupId>
-				<artifactId>jaxb-maven-plugin</artifactId>
-				<version>${jaxb-maven-plugin.version}</version>
-				<configuration>
-					<schemas>
-						<schema>
-							<fileset>
-								<directory>${basedir}/src/main/resources/bayernid</directory>
-								<includes>
-									<include>*.wsdl</include>
-								</includes>
-							</fileset>
-						</schema>
-						<schema>
-							<fileset>
-								<directory>${basedir}/src/main/resources/bayernid</directory>
-								<includes>
-									<include>*.xsd</include>
-								</includes>
-							</fileset>
-						</schema>
-					</schemas>
-					<episode>false</episode>
-				</configuration>
-				<executions>
-					<execution>
-						<goals>
-							<goal>generate</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
-</project>
\ No newline at end of file
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProperties.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProperties.java
deleted file mode 100644
index 4fe6e1a75367636864088b1d13b506f7fb393b25..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProperties.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy;
-
-import jakarta.validation.constraints.NotBlank;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.validation.annotation.Validated;
-
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-@Validated
-@Configuration
-@ConfigurationProperties(prefix = "ozgcloud.bayernid")
-public class BayernIdProperties {
-
-	@NotBlank
-	private String server;
-
-	private boolean useSsl = true;
-}
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyApplication.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyApplication.java
deleted file mode 100644
index 6b47fed8a9a59718b29fab5ac6006b03d81f7294..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyApplication.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy;
-
-import java.util.TimeZone;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.context.annotation.EnableAspectJAutoProxy;
-import org.springframework.scheduling.annotation.EnableAsync;
-
-@SpringBootApplication
-@EnableAsync(proxyTargetClass = true)
-@EnableAspectJAutoProxy(proxyTargetClass = true)
-public class BayernIdProxyApplication {
-
-	public static void main(String[] args) {
-		TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
-		SpringApplication.run(BayernIdProxyApplication.class, args);
-	}
-
-}
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyConfiguration.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyConfiguration.java
deleted file mode 100644
index 1705b377cb69f6fea167d7c54dd681289bf0fec8..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyConfiguration.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy;
-
-import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
-import org.apache.hc.client5.http.impl.io.BasicHttpClientConnectionManager;
-import org.apache.hc.client5.http.io.HttpClientConnectionManager;
-import org.apache.hc.client5.http.socket.ConnectionSocketFactory;
-import org.apache.hc.client5.http.socket.PlainConnectionSocketFactory;
-import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory;
-import org.apache.hc.core5.http.config.RegistryBuilder;
-import org.springframework.boot.ssl.SslBundles;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.oxm.jaxb.Jaxb2Marshaller;
-import org.springframework.ws.transport.http.HttpComponents5MessageSender;
-
-import akdb.bsp.postkorb.komm.webservice.ObjectFactory;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.akdb.BayernIdRemoteService;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessageMapper;
-import lombok.RequiredArgsConstructor;
-
-@Configuration
-@RequiredArgsConstructor
-class BayernIdProxyConfiguration {
-
-	private final SslBundles sslBundles;
-	private final BayernIdProperties properties;
-
-	@Bean
-	Jaxb2Marshaller createJaxb2Marshaller() {
-		var marshaller = new Jaxb2Marshaller();
-		marshaller.setContextPaths("akdb.bsp.postkorb.komm.webservice", "de.akdb.egov.bsp.nachrichten");
-		return marshaller;
-	}
-
-	@Bean
-	BayernIdRemoteService soapHttpClient(BayernIdMessageMapper messageMapper, Jaxb2Marshaller marshaller) {
-		var bayernIdRemoteService = new BayernIdRemoteService(messageMapper, new ObjectFactory());
-		bayernIdRemoteService.setMarshaller(marshaller);
-		bayernIdRemoteService.setUnmarshaller(marshaller);
-		bayernIdRemoteService.setDefaultUri(properties.getServer());
-		bayernIdRemoteService.setMessageSender(createMessageSender());
-		return bayernIdRemoteService;
-	}
-
-	HttpComponents5MessageSender createMessageSender() {
-		var httpClient = HttpClientBuilder.create()
-				.setConnectionManager(createConnectionManager())
-				.addRequestInterceptorFirst(new HttpComponents5MessageSender.RemoveSoapHeadersInterceptor())
-				.build();
-		return new HttpComponents5MessageSender(httpClient);
-	}
-
-	private HttpClientConnectionManager createConnectionManager() {
-		var socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create().register("http", new PlainConnectionSocketFactory());
-		if (properties.isUseSsl()) {
-			socketFactoryRegistry.register("https", createSslConnectionSocketFactory());
-		}
-		return new BasicHttpClientConnectionManager(socketFactoryRegistry.build());
-	}
-
-	private SSLConnectionSocketFactory createSslConnectionSocketFactory() {
-		return new SSLConnectionSocketFactory(sslBundles.getBundle("bayern-id-ca").createSslContext());
-	}
-
-}
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyGrpcService.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyGrpcService.java
deleted file mode 100644
index b92528052e8b3685c7d9804dd24e1685b3db5560..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyGrpcService.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy;
-
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.BayernIdProxyServiceGrpc.BayernIdProxyServiceImplBase;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessageMapper;
-import io.grpc.stub.StreamObserver;
-import lombok.RequiredArgsConstructor;
-import net.devh.boot.grpc.server.service.GrpcService;
-
-@GrpcService
-@RequiredArgsConstructor
-public class BayernIdProxyGrpcService extends BayernIdProxyServiceImplBase {
-
-	private final BayernIdProxyService proxyService;
-	private final BayernIdMessageMapper messageMapper;
-
-	@Override
-	public StreamObserver<GrpcSendBayernIdMessageRequest> sendMessageAsStream(StreamObserver<GrpcSendBayernIdMessageResponse> responseObserver) {
-		return new UploadStreamObserver(responseObserver, proxyService, messageMapper);
-	}
-}
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyService.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyService.java
deleted file mode 100644
index 1a760fd479ba85227a3a17f0473ad94abaf27109..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyService.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy;
-
-import org.springframework.stereotype.Service;
-
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.akdb.BayernIdRemoteService;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessage;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdResponse;
-import lombok.RequiredArgsConstructor;
-
-@Service
-@RequiredArgsConstructor
-public class BayernIdProxyService {
-
-	private final BayernIdRemoteService bayernIdRemoteService;
-
-	public BayernIdResponse sendPostfachNachricht(BayernIdMessage message) {
-		return bayernIdRemoteService.sendPostfachNachricht(message);
-	}
-
-}
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/DeleteOnCloseInputStream.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/DeleteOnCloseInputStream.java
deleted file mode 100644
index d1655a9c7ddcc5627e7f30bcaec565c30a0431c0..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/DeleteOnCloseInputStream.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach.bayernid.proxy;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.nio.file.Files;
-
-public class DeleteOnCloseInputStream extends FileInputStream {
-
-	private final File file;
-
-	public DeleteOnCloseInputStream(File file) throws FileNotFoundException {
-		super(file);
-		this.file = file;
-	}
-
-	@Override
-	public void close() throws IOException {
-		super.close();
-		Files.deleteIfExists(file.toPath());
-	}
-}
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/UploadStreamObserver.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/UploadStreamObserver.java
deleted file mode 100644
index e223ae4e59c7483418cc295d8c018902f4fa0fd1..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/UploadStreamObserver.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy;
-
-import static java.util.Objects.*;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.concurrent.atomic.AtomicReference;
-
-import com.google.protobuf.ByteString;
-
-import de.ozgcloud.common.errorhandling.TechnicalException;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.Attachment;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessage.BayernIdMessageBuilder;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessageMapper;
-import io.grpc.stub.StreamObserver;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.log4j.Log4j2;
-
-@Log4j2
-@RequiredArgsConstructor
-public class UploadStreamObserver implements StreamObserver<GrpcSendBayernIdMessageRequest> {
-
-	static final String ATTACHMENT_FILE_SUFFIX = ".ozg-cloud.tmp";
-
-	private final StreamObserver<GrpcSendBayernIdMessageResponse> responseObserver;
-	private final BayernIdProxyService proxyService;
-	private final BayernIdMessageMapper messageMapper;
-
-	private final AtomicReference<BayernIdMessageBuilder> messageBuilder = new AtomicReference<>();
-	private OutputStream attachmentWriter;
-
-	@Override
-	public synchronized void onNext(GrpcSendBayernIdMessageRequest sendRequest) {
-		if (sendRequest.hasMessageMetadata()) {
-			readMessageMetadata(sendRequest.getMessageMetadata());
-			return;
-		}
-		readAttachments(sendRequest.getAttachments());
-	}
-
-	void readMessageMetadata(GrpcBayernIdMessageMetadata sendRequest) {
-		messageBuilder.set(messageMapper.toBayernIdMessage(sendRequest));
-	}
-
-	void readAttachments(GrpcAttachments attachments) {
-		if (attachments.hasAttachmentMetadata()) {
-			addDataContainer(attachments.getAttachmentMetadata());
-			return;
-		}
-		writeAttachment(attachments.getContent());
-	}
-
-	void addDataContainer(GrpcAttachmentMetadata attachmentMetadata) {
-		messageBuilder.get().attachment(buildAttachment(attachmentMetadata));
-	}
-
-	Attachment buildAttachment(GrpcAttachmentMetadata attachmentMetadata) {
-		var attachmentFile = createTemporallyFile(attachmentMetadata.getFileName());
-		return Attachment.builder()
-				.name(attachmentMetadata.getFileName())
-				.type(attachmentMetadata.getFileType())
-				.content(attachmentFile)
-				.build();
-	}
-
-	InputStream createTemporallyFile(String fileName) {
-		try {
-			closeTemporallyWriter();
-			var tempFilePath = createFile(fileName);
-			attachmentWriter = newOutputStream(tempFilePath);
-			return newInputStream(tempFilePath);
-		} catch (IOException e) {
-			throw new TechnicalException("Can not create temporary file for attachment " + fileName, e);
-		}
-	}
-
-	Path createFile(String fileName) throws IOException {
-		var tmpFile = Files.createTempFile(fileName, ATTACHMENT_FILE_SUFFIX);
-		tmpFile.toFile().deleteOnExit();
-		return tmpFile;
-	}
-
-	OutputStream newOutputStream(Path filePath) throws IOException {
-		return Files.newOutputStream(filePath);
-	}
-
-	InputStream newInputStream(Path filePath) throws IOException {
-		return new DeleteOnCloseInputStream(filePath.toFile());
-	}
-
-	void closeTemporallyWriter() {
-		try {
-			if (nonNull(attachmentWriter)) {
-				attachmentWriter.close();
-			}
-		} catch (IOException e) {
-			throw new TechnicalException("Can not close attachment file", e);
-		}
-	}
-
-	void writeAttachment(ByteString content) {
-		try {
-			attachmentWriter.write(content.toByteArray());
-			attachmentWriter.flush();
-		} catch (IOException e) {
-			throw new TechnicalException("Can not save attachment content", e);
-		}
-	}
-
-	@Override
-	public void onError(Throwable t) {
-		closeTemporallyWriter();
-		throw new TechnicalException("Error while sending postfach message", t);
-	}
-
-	@Override
-	public void onCompleted() {
-		closeTemporallyWriter();
-		try {
-			var bayernIdResponse = proxyService.sendPostfachNachricht(messageBuilder.get().build());
-			responseObserver.onNext(messageMapper.fromBayernIdResponse(bayernIdResponse));
-			responseObserver.onCompleted();
-		} catch (Exception e) {
-			throw new TechnicalException("Error while sending postfach message", e);
-		}
-	}
-}
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/akdb/BayernIdRemoteService.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/akdb/BayernIdRemoteService.java
deleted file mode 100644
index 9446a6a57b9fa105e237b6542b2bfeb6cecab4b0..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/akdb/BayernIdRemoteService.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy.akdb;
-
-import java.io.IOException;
-
-import jakarta.xml.bind.JAXBElement;
-
-import org.springframework.ws.client.core.support.WebServiceGatewaySupport;
-import org.springframework.xml.transform.StringResult;
-import org.springframework.xml.transform.StringSource;
-
-import akdb.bsp.postkorb.komm.webservice.ObjectFactory;
-import akdb.bsp.postkorb.komm.webservice.SendBspNachrichtNative;
-import akdb.bsp.postkorb.komm.webservice.SendBspNachrichtNativeOutput;
-import de.akdb.egov.bsp.nachrichten.BspNachricht;
-import de.akdb.egov.bsp.nachrichten.BspQuittung;
-import de.ozgcloud.common.errorhandling.TechnicalException;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessage;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessageMapper;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdResponse;
-import lombok.RequiredArgsConstructor;
-
-@RequiredArgsConstructor
-public class BayernIdRemoteService extends WebServiceGatewaySupport {
-
-	private final BayernIdMessageMapper messageMapper;
-	private final ObjectFactory objectFactory;
-
-	public BayernIdResponse sendPostfachNachricht(BayernIdMessage message) {
-		var sendNachricht = createSendNachricht(message);
-		var sendBspNachrichtResponse = sendBspNachricht(sendNachricht);
-		var bspQuittung = createBspQuitung(sendBspNachrichtResponse);
-		return messageMapper.toBayernIdResponse(bspQuittung);
-	}
-
-	SendBspNachrichtNative createSendNachricht(BayernIdMessage message) {
-		var bspNachricht = messageMapper.toBspNachricht(message);
-		var sendBspNachricht = new SendBspNachrichtNative();
-		sendBspNachricht.setBspNachricht(buildBspNachrichtXml(bspNachricht));
-		return sendBspNachricht;
-	}
-
-	String buildBspNachrichtXml(BspNachricht message) {
-		try {
-			var result = new StringResult();
-			getMarshaller().marshal(message, result);
-			return result.toString();
-		} catch (IOException e) {
-			throw new TechnicalException("Error while marshalling BspNachricht", e);
-		}
-	}
-
-	SendBspNachrichtNativeOutput sendBspNachricht(SendBspNachrichtNative request) {
-		return send(objectFactory.createSendBspNachrichtNative(request)).getValue();
-	}
-
-	@SuppressWarnings("unchecked")
-	JAXBElement<SendBspNachrichtNativeOutput> send(JAXBElement<SendBspNachrichtNative> jaxbSendBspNachrichtNative) {
-		return (JAXBElement<SendBspNachrichtNativeOutput>) getWebServiceTemplate().marshalSendAndReceive(jaxbSendBspNachrichtNative);
-	}
-	BspQuittung createBspQuitung(SendBspNachrichtNativeOutput bspNachrichtResponse) {
-		try {
-			return (BspQuittung) getUnmarshaller().unmarshal(new StringSource(bspNachrichtResponse.getBspQuittung()));
-		} catch (IOException e) {
-			throw new TechnicalException("Error while unmarshalling BspQuittung", e);
-		}
-	}
-
-}
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/errorhandling/ExceptionHandler.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/errorhandling/ExceptionHandler.java
deleted file mode 100644
index fba0b8d8e0b7e1d5068e9f7a2bdf2d91519c0030..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/errorhandling/ExceptionHandler.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy.errorhandling;
-
-import java.util.UUID;
-
-import de.ozgcloud.common.errorhandling.ExceptionUtil;
-import de.ozgcloud.common.errorhandling.TechnicalException;
-import de.ozgcloud.common.grpc.GrpcUtil;
-import io.grpc.Metadata;
-import io.grpc.Status;
-import io.grpc.StatusException;
-import lombok.extern.log4j.Log4j2;
-import net.devh.boot.grpc.server.advice.GrpcAdvice;
-import net.devh.boot.grpc.server.advice.GrpcExceptionHandler;
-
-@GrpcAdvice
-@Log4j2
-public class ExceptionHandler {
-
-	static final String KEY_EXCEPTION_ID = "EXCEPTION_ID";
-
-	@GrpcExceptionHandler
-	public StatusException handleTechnicalException(TechnicalException e) {
-		LOG.error("Technical exception occurred", e);
-		return createStatusException(buildInternalStatus(e), buildMetadata(e.getExceptionId()));
-	}
-
-	@GrpcExceptionHandler
-	public StatusException handleRuntimeException(RuntimeException e) {
-		var exceptionId = createExceptionId();
-		LOG.error(ExceptionUtil.formatMessageWithExceptionId("gRPC internal exception.",exceptionId), e);
-		return createStatusException(buildInternalStatus(e), buildMetadata(exceptionId));
-	}
-
-	Status buildInternalStatus(RuntimeException e) {
-		return Status.INTERNAL.withDescription(e.getMessage()).withCause(e.getCause());
-	}
-
-	String createExceptionId() {
-		return UUID.randomUUID().toString();
-	}
-
-	Metadata buildMetadata(String exceptionId) {
-		var metadata = new Metadata();
-		metadata.put(GrpcUtil.keyOfString(KEY_EXCEPTION_ID), exceptionId);
-		return metadata;
-	}
-
-	StatusException createStatusException(Status status, Metadata metadata) {
-		return new StatusException(status, metadata);
-	}
-}
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/Absender.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/Absender.java
deleted file mode 100644
index e5cbd91cffbcaab77b6f96e86d391476def7694f..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/Absender.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy.message;
-
-import lombok.Builder;
-import lombok.Getter;
-
-@Builder
-@Getter
-public class Absender {
-
-	private String postkorbId;
-	private String name;
-	private String anschrift;
-	private String email;
-	private String telefon;
-	private String hyperlink;
-	private String dienst;
-	private String mandant;
-	private String gemeindeschluessel;
-}
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/Attachment.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/Attachment.java
deleted file mode 100644
index 4c144a4f25b95a12b32ba22f21bfa228ed1f6aef..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/Attachment.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy.message;
-
-import java.io.InputStream;
-
-import lombok.Builder;
-import lombok.Getter;
-
-@Builder
-@Getter
-public class Attachment {
-
-	private String name;
-	private String type;
-	private InputStream content;
-
-}
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdMessage.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdMessage.java
deleted file mode 100644
index 71328dde692f42a4eb197722c9a21b03d9c87b1b..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdMessage.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy.message;
-
-import java.util.List;
-
-import lombok.Builder;
-import lombok.Getter;
-import lombok.Singular;
-
-@Builder
-@Getter
-public class BayernIdMessage {
-
-	private String messageId;
-	private String createdAt;
-	private String vorgangId;
-	private Absender absender;
-	private Empfaenger empfaenger;
-	private String subject;
-	private String storkQaaLevel;
-	private String text;
-	@Singular
-	private List<Attachment> attachments;
-}
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdMessageMapper.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdMessageMapper.java
deleted file mode 100644
index 0e7a7488191a84c17593abbcb887dfc7d3293469..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdMessageMapper.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy.message;
-
-import java.io.IOException;
-
-import org.mapstruct.Mapper;
-import org.mapstruct.Mapping;
-import org.mapstruct.NullValueCheckStrategy;
-import org.mapstruct.NullValuePropertyMappingStrategy;
-
-import de.akdb.egov.bsp.nachrichten.AbsenderType;
-import de.akdb.egov.bsp.nachrichten.BspNachricht;
-import de.akdb.egov.bsp.nachrichten.BspQuittung;
-import de.akdb.egov.bsp.nachrichten.DataContainerType;
-import de.akdb.egov.bsp.nachrichten.SchluesseltabelleType;
-import de.ozgcloud.common.errorhandling.TechnicalException;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcAbsender;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcBayernIdMessageMetadata;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageResponse;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessage.BayernIdMessageBuilder;
-
-@Mapper(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
-public interface BayernIdMessageMapper {
-
-	String TABELLE_NUMMER_TEXT_ENCODING = "9004";
-	String TABELLE_NUMMER_MIME_TYPE = "9005";
-	String TABELLE_NUMMER_GEMEINDE_SCHLUESSEL = "36";
-	String TEXT_ENCODING_PLAIN_TEXT = "text/plain";
-
-	@Mapping(target = "attachments", ignore = true)
-	BayernIdMessageBuilder toBayernIdMessage(GrpcBayernIdMessageMetadata grpcMessage);
-
-	@Mapping(target = "gemeindeschluessel.tabelle", constant = TABELLE_NUMMER_GEMEINDE_SCHLUESSEL)
-	@Mapping(target = "gemeindeschluessel.schluessel", source = "gemeindeschluessel")
-	AbsenderType toAbsenderType(GrpcAbsender absender);
-
-	@Mapping(target = "unknownFields", ignore = true)
-	@Mapping(target = "statusBytes", ignore = true)
-	@Mapping(target = "messageBytes", ignore = true)
-	@Mapping(target = "mergeUnknownFields", ignore = true)
-	@Mapping(target = "mergeFrom", ignore = true)
-	@Mapping(target = "clearOneof", ignore = true)
-	@Mapping(target = "clearField", ignore = true)
-	GrpcSendBayernIdMessageResponse fromBayernIdResponse(BayernIdResponse message);
-
-	@Mapping(target = "nachrichtenKopf.identifikationNachricht.nachrichtenId", source = "messageId")
-	@Mapping(target = "nachrichtenKopf.identifikationNachricht.erstellungszeitpunkt", source = "createdAt")
-	@Mapping(target = "nachrichtenKopf.empfaenger.postkorbId", source = "empfaenger.postkorbId")
-	@Mapping(target = "nachrichtenKopf.empfaenger.name", source = "empfaenger.name")
-	@Mapping(target = "nachrichtenKopf.empfaenger.anschrift", source = "empfaenger.anschrift")
-	@Mapping(target = "nachrichtenKopf.absender", source = "absender")
-	@Mapping(target = "nachrichtenInhalt.betreff", source = "subject")
-	@Mapping(target = "nachrichtenInhalt.storkQaaLevel", source = "storkQaaLevel")
-	@Mapping(target = "nachrichtenInhalt.zuVorgang.vorgangsId", source = "vorgangId")
-	@Mapping(target = "nachrichtenInhalt.freiText.encoding.schluessel", constant = TEXT_ENCODING_PLAIN_TEXT)
-	@Mapping(target = "nachrichtenInhalt.freiText.encoding.tabelle", constant = TABELLE_NUMMER_TEXT_ENCODING)
-	@Mapping(target = "nachrichtenInhalt.freiText.text", source = "text")
-	@Mapping(target = "nachrichtenInhalt.dataContainer", source = "attachments")
-	BspNachricht toBspNachricht(BayernIdMessage message);
-
-	@Mapping(target = "gemeindeschluessel.tabelle", constant = TABELLE_NUMMER_GEMEINDE_SCHLUESSEL)
-	@Mapping(target = "gemeindeschluessel.schluessel", source = "gemeindeschluessel")
-	AbsenderType toAbsenderType(Absender absender);
-
-	default DataContainerType toDataContainerType(Attachment attachment) {
-		var dataContainer = new DataContainerType();
-		dataContainer.setFileType(toSchluesseltabelleType(attachment));
-		dataContainer.setFileName(attachment.getName());
-		try {
-			var content = attachment.getContent();
-			try {
-				dataContainer.setInhalt(content.readAllBytes());
-			} finally {
-				content.close();
-			}
-		} catch (IOException e) {
-			throw new TechnicalException("Error reading attachment content", e);
-		}
-		return dataContainer;
-	}
-
-	default SchluesseltabelleType toSchluesseltabelleType(Attachment attachment) {
-		var schluesseltabelle = new SchluesseltabelleType();
-		schluesseltabelle.setSchluessel(attachment.getType());
-		schluesseltabelle.setTabelle(TABELLE_NUMMER_MIME_TYPE);
-		return schluesseltabelle;
-	}
-
-	@Mapping(target = "status", source = "ergebnisStatus.schluessel")
-	@Mapping(target = "message", source = "ergaenzendeHinweise")
-	@Mapping(target = "success", source = "annahmeErfolgreich")
-	BayernIdResponse toBayernIdResponse(BspQuittung quittung);
-}
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/Empfaenger.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/Empfaenger.java
deleted file mode 100644
index 6cfd6fb4ef00f9ab4e2c315203c4f41b093b34fc..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/Empfaenger.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy.message;
-
-import lombok.Builder;
-import lombok.Getter;
-
-@Builder
-@Getter
-public class Empfaenger {
-
-	private String postkorbId;
-	private String name;
-	private String anschrift;
-}
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
deleted file mode 100644
index 31f436d781244c879e37eb6d97662f3c5102e6b7..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ /dev/null
@@ -1,14 +0,0 @@
-net.devh.boot.grpc.common.autoconfigure.GrpcCommonCodecAutoConfiguration
-net.devh.boot.grpc.common.autoconfigure.GrpcCommonTraceAutoConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcAdviceAutoConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcHealthServiceAutoConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcMetadataConsulConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcMetadataEurekaConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcMetadataNacosConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcMetadataZookeeperConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcReflectionServiceAutoConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcServerAutoConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcServerFactoryAutoConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcServerMetricAutoConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcServerSecurityAutoConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcServerTraceAutoConfiguration
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/application-dev.yml b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/application-dev.yml
deleted file mode 100644
index df2f1cca69b93f18902100a3a93997030beb2000..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/application-dev.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-ozgcloud:
-  bayernid:
-    proxy:
-      server: "https://infra-pre-id.bayernportal.de/bspx-postkorb-okkomm-ws/bspservices/postkorbkomm"
-      postkorbId: "28721c6f-b78f-4d5c-a048-19fd2fc429d2"
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/application-local.yml b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/application-local.yml
deleted file mode 100644
index f048bc1e34b576c9d95d558300db721823dc58f5..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/application-local.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-logging:
-  config: classpath:log4j2-local.xml
-
-server:
-  port: 9097
-management:
-  server.port: 9098
-
-grpc:
-  server:
-    port: 9099
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/application.yml b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/application.yml
deleted file mode 100644
index 69790c2b42e751213e739cf8ca6a87df6fd74068..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/application.yml
+++ /dev/null
@@ -1,29 +0,0 @@
-logging:
-  level:
-    ROOT: WARN
-    '[de.ozgcloud]': INFO
-  config: classpath:log4j2-local.xml
-
-
-management:
-  server:
-    port: 8081
-  health:
-    livenessState:
-      enabled: true
-    readinessState:
-      enabled: true
-  endpoint:
-    health:
-      group:
-        exploratory:
-          include: livenessState,readinessState,ping
-          show-details: always
-      probes:
-        enabled: true
-    prometheus:
-      enabled: true
-  endpoints:
-    web:
-      exposure:
-        include: "*"
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/bayernid/PostfachnachrichtenServiceBy.wsdl b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/bayernid/PostfachnachrichtenServiceBy.wsdl
deleted file mode 100644
index a2df76060c0568ed74ed70e6cc71fdc6a9005c98..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/bayernid/PostfachnachrichtenServiceBy.wsdl
+++ /dev/null
@@ -1,108 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<definitions name="PostkorbKommService"
-	xmlns="http://schemas.xmlsoap.org/wsdl/"
-	xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
-	xmlns:bsp="http://akdb.de/portal/gehaltsabrechnungen-bspnachricht"
-	xmlns:tns="urn:akdb:bsp:postkorb:komm:webservice"
-	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-	targetNamespace="urn:akdb:bsp:postkorb:komm:webservice">
-	<types>
-		<xs:schema
-			targetNamespace='urn:akdb:bsp:postkorb:komm:webservice' version='1.1'
-			xmlns:tns='urn:akdb:bsp:postkorb:komm:webservice'
-			xmlns:xs='http://www.w3.org/2001/XMLSchema'>
-			<xs:element name='sendBspNachricht'
-				type='tns:sendBspNachricht' />
-			<xs:complexType name='sendBspNachricht'>
-				<xs:sequence>
-					<xs:element minOccurs='1' name='okKommBspNachrichtInput'
-						type='xs:base64Binary' />
-				</xs:sequence>
-			</xs:complexType>
-			<xs:element name='sendBspNachrichtOutput'
-				type='tns:sendBspNachrichtOutput' />
-			<xs:complexType name='sendBspNachrichtOutput'>
-				<xs:sequence>
-					<xs:element minOccurs='1'
-						name='okKommBspNachrichtOutput' type='xs:base64Binary' />
-				</xs:sequence>
-			</xs:complexType>
-			<xs:element name='sendBspNachrichtNative'
-				type='tns:sendBspNachrichtNative' />
-			<xs:complexType name='sendBspNachrichtNative'>
-				<xs:sequence>
-					<xs:element minOccurs='1' name='bspNachricht'
-						type='xs:string' />
-				</xs:sequence>
-			</xs:complexType>
-			<xs:element name='sendBspNachrichtNativeOutput'
-				type='tns:sendBspNachrichtNativeOutput' />
-			<xs:complexType name='sendBspNachrichtNativeOutput'>
-				<xs:sequence>
-					<xs:element minOccurs='1' name='bspQuittung'
-						type='xs:string' />
-				</xs:sequence>
-			</xs:complexType>
-		</xs:schema>
-	</types>
-	<message name='PostkorbKommService_sendBspNachrichtInput'>
-		<part element='tns:sendBspNachricht'
-			name='okKommBspNachrichtInput'></part>
-	</message>
-	<message name='PostkorbKommService_sendBspNachrichtOutput'>
-		<part element='tns:sendBspNachrichtOutput'
-			name='sendBspNachrichtOutput'></part>
-	</message>
-	<message name='PostkorbKommService_sendBspNachrichtNativeInput'>
-		<part element='tns:sendBspNachrichtNative'
-			name='sendBspNachrichtNative'></part>
-	</message>
-	<message
-		name='PostkorbKommService_sendBspNachrichtNativeOutput'>
-		<part element='tns:sendBspNachrichtNativeOutput'
-			name='bspQuittung'></part>
-	</message>
-	<portType name='PostkorbKommPortType'>
-		<operation name='sendBspNachricht'>
-			<input message='tns:PostkorbKommService_sendBspNachrichtInput'></input>
-			<output
-				message='tns:PostkorbKommService_sendBspNachrichtOutput'></output>
-		</operation>
-		<operation name='sendBspNachrichtNative'>
-			<input
-				message='tns:PostkorbKommService_sendBspNachrichtNativeInput'></input>
-			<output
-				message='tns:PostkorbKommService_sendBspNachrichtNativeOutput'></output>
-		</operation>
-	</portType>
-	<binding name="PostkorbKommBinding"
-		type="tns:PostkorbKommPortType">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name='sendBspNachricht'>
-			<soap:operation soapAction='' />
-			<input>
-				<soap:body use='literal' />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-		</operation>
-		<operation name='sendBspNachrichtNative'>
-			<soap:operation soapAction='' />
-			<input>
-				<soap:body use='literal' />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-		</operation>
-	</binding>
-	<service name="PostkorbKommService">
-		<port name="PostkorbKommPort" binding="tns:PostkorbKommBinding">
-			<!-- <soap:address location="${web-services-base- url}/bspservices/postkorbkomm" 
-				/> -->
-			<soap:address location="http://localhost:8080/bspx-postkorb-okkomm-ws/bspservices/postkorbkomm" />
-		</port>
-	</service>
-</definitions>
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/bayernid/bspnachrichten-2.13.xsd b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/bayernid/bspnachrichten-2.13.xsd
deleted file mode 100644
index 23b0e247d2bd9d2ab3f2206e4354d0c497844f28..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/bayernid/bspnachrichten-2.13.xsd
+++ /dev/null
@@ -1,343 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Service- und Portalplattform
-    AKDB München, Geschäftsfeld eGovernment
-
-    Copyright (c) AKDB
-
--->
-<xsd:schema targetNamespace="http://www.akdb.de/egov/bsp/nachrichten"
-  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-  xmlns:bsp="http://www.akdb.de/egov/bsp/nachrichten"
-  elementFormDefault="qualified">
-
-  <xsd:element name="BspNachricht">
-    <xsd:annotation>
-      <xsd:appinfo>
-        <title>Nachricht für die Kommunikation zwischen Bürgerservice-Portal
-          und externen Fachverfahren</title>
-      </xsd:appinfo>
-      <xsd:documentation>Einheitliches Nachrichtenschema für die
-        Kommunikation zwischen Bürgerservice-Portal und externem Verfahren.
-        Nachrichten vom Bürgerservice-Portal an den Postkorb eines
-        Verfahrens
-        oder Nachrichten von den Verfahren an das Bürgerservice-Portal müssen
-        gemäß diesem Schema aufgebaut sein.
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:complexType>
-      <xsd:sequence>
-        <xsd:element name="NachrichtenKopf" type="bsp:NachrichtenKopfType"/>
-        <xsd:element name="NachrichtenInhalt" type="bsp:NachrichtenInhaltType"/>
-      </xsd:sequence>
-      <xsd:attribute name="version" use="required">
-        <xsd:annotation>
-          <xsd:documentation>Dieses Attribut kennzeichnet die
-            Nachrichten-Version, z. B. "1.0", "1.1".</xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleType>
-           <xsd:restriction base="xsd:string">
-             <xsd:enumeration value="1.1"/>
-             <xsd:enumeration value="1.2"/>
-             <xsd:enumeration value="1.3"/>
-             <xsd:enumeration value="1.4"/>
-             <xsd:enumeration value="1.5"/>
-           </xsd:restriction>
-        </xsd:simpleType>
-      </xsd:attribute>
-      <xsd:attribute name="fassung" use="required" >
-        <xsd:annotation>
-          <xsd:documentation>Dieses Attribut kennzeichnet das Datum, an dem
-            die diesen Schemata im Status final produziert wurde. Format:
-            YYYY-MM-DD.</xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleType>
-          <xsd:restriction base="xsd:string">
-            <xsd:enumeration value="2017-03-15"/>
-            <xsd:enumeration value="2018-04-01"/>
-            <xsd:enumeration value="2018-11-01"/>
-            <xsd:enumeration value="2019-06-28"/>
-            <xsd:enumeration value="2020-03-15"/>
-          </xsd:restriction>
-        </xsd:simpleType>
-      </xsd:attribute>
-      <xsd:attribute name="produkt" type="xsd:string" use="optional">
-        <xsd:annotation>
-          <xsd:documentation>In diesem Attribut ist der Name des Produktes
-            (der Software) einzutragen, mit dem diese Nachricht erstellt
-            worden ist. z.B. BSP, PWS</xsd:documentation>
-        </xsd:annotation>
-      </xsd:attribute>
-      <xsd:attribute name="produkthersteller" type="xsd:string" use="optional"/>
-      <xsd:attribute name="produktversion" type="xsd:string" use="optional"/>
-    </xsd:complexType>
-  </xsd:element>
-
-  <xsd:element name="BspQuittung">
-    <xsd:annotation>
-      <xsd:appinfo>
-        <title>Quittung über den Empfang einer BSO-Nachricht</title>
-      </xsd:appinfo>
-      <xsd:documentation>Zu einer empfangenen BSP-Nachricht wird eine
-                Quittung geliefert, die bestätigt, dass die Nachricht übernommen wurde
-                oder aufgrund eines technischen oder fachlichen Fehlers abgewiesen wurde.
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:complexType>
-      <xsd:sequence>
-        <xsd:element name="AnnahmeErfolgreich" type="xsd:boolean" minOccurs="1" maxOccurs="1"/>
-          <xsd:element name="ErgebnisStatus" type="bsp:SchluesseltabelleType" minOccurs="1" maxOccurs="1">
-            <xsd:annotation>
-              <xsd:documentation>Schluesseltabelle 9006 (0 (erfolgreich angenommen), 99 (sonstiger technischer Fehler), ...)</xsd:documentation>
-            </xsd:annotation>
-          </xsd:element>
-        <xsd:element name="ErgaenzendeHinweise" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-      </xsd:sequence>
-      <xsd:attribute name="version" use="required">
-        <xsd:annotation>
-          <xsd:documentation>Dieses Attribut kennzeichnet die
-            Nachrichten-Version, z. B. "1.0", "1.1".</xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleType>
-          <xsd:restriction base="xsd:string">
-            <xsd:enumeration value="1.1"/>
-			<xsd:enumeration value="1.2"/>
-            <xsd:enumeration value="1.3"/>
-            <xsd:enumeration value="1.4"/>
-            <xsd:enumeration value="1.5"/>
-           </xsd:restriction>
-        </xsd:simpleType>
-      </xsd:attribute>
-      <xsd:attribute name="fassung" use="required">
-        <xsd:annotation>
-          <xsd:documentation>Dieses Attribut kennzeichnet das Datum, an dem
-            die diesen Schemata im Status final produziert wurde. Format:
-            YYYY-MM-DD.</xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleType>
-          <xsd:restriction base="xsd:string">
-            <xsd:enumeration value="2017-03-15"/>
-            <xsd:enumeration value="2018-04-01"/>
-            <xsd:enumeration value="2018-11-01"/>
-            <xsd:enumeration value="2019-06-28"/>
-            <xsd:enumeration value="2020-03-15"/>			
-          </xsd:restriction>
-        </xsd:simpleType>
-      </xsd:attribute>
-      <xsd:attribute name="produkt" type="xsd:string" use="optional">
-        <xsd:annotation>
-          <xsd:documentation>In diesem Attribut ist der Name des Produktes
-            (der Software) einzutragen, mit dem diese Nachricht erstellt
-            worden ist. z.B. BSP, PWS</xsd:documentation>
-        </xsd:annotation>
-      </xsd:attribute>
-      <xsd:attribute name="produkthersteller" type="xsd:string" use="optional"/>
-      <xsd:attribute name="produktversion" type="xsd:string" use="optional"/>
-    </xsd:complexType>
-  </xsd:element>
-
-  <xsd:complexType name="NachrichtenKopfType">
-    <xsd:sequence>
-      <xsd:element name="Identifikation.Nachricht" type="bsp:Identifikation.NachrichtType" maxOccurs="1" minOccurs="1"/>
-      <xsd:element name="Anwenderkennung" type="xsd:string" minOccurs="0">
-        <xsd:annotation>
-          <xsd:documentation> Die Anwenderkennung stellt Informationen über die absendende Person
-          zur Verfügung und dient der Protokollierung.
-          Anhand dieser Kennung kann die absendende Person identifiziert werden.
-          </xsd:documentation>
-        </xsd:annotation>
-      </xsd:element>
-      <xsd:element name="Absender" type="bsp:AbsenderType" maxOccurs="1" minOccurs="1"/>
-      <xsd:element name="Empfaenger" type="bsp:EmpfaengerType"  maxOccurs="1" minOccurs="1"/>
-      <xsd:element name="AntwortAuf" type="xsd:string" maxOccurs="1" minOccurs="0">
-        <xsd:annotation>
-          <xsd:documentation>Eine Nachricht kann mit einer exisiterenden
-            Nachricht in Beziehung gebracht werden als Antwortnachricht oder
-            weitergeleitete Nachricht. Der Bezug erfolgt hierbei über die
-            NachrichtenId.
-          </xsd:documentation>
-        </xsd:annotation>
-      </xsd:element>
-      <xsd:element name="WeiterleitungZu" type="xsd:string" minOccurs="0"/>
-      <xsd:element name="lesebestaetigungAntwortAdresse" type="xsd:string" minOccurs="0"/>
-    </xsd:sequence>
-  </xsd:complexType>
-  <xsd:complexType name="Identifikation.NachrichtType">
-    <xsd:sequence>
-      <xsd:element name="Ereignis" type="bsp:SchluesseltabelleType">
-        <xsd:annotation>
-          <xsd:documentation>Schluesseltabelle 9001, Schluessel: BspNachricht
-          </xsd:documentation>
-        </xsd:annotation>
-      </xsd:element>
-      <xsd:element name="Erstellungszeitpunkt" type="xsd:dateTime" maxOccurs="1" minOccurs="1"/>
-      <xsd:element name="NachrichtenId" type="xsd:string" maxOccurs="1" minOccurs="1">
-        <xsd:annotation>
-          <xsd:documentation>eine beliebige, eindeutige ID, die durch den
-            erstellenden Client generiert wird. Zusammen mit
-            Erstellungszeitpunkt und Absender kann eine Nachricht bsp-global
-            eindeutig identifiziert werden.
-          </xsd:documentation>
-        </xsd:annotation>
-      </xsd:element>
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="AbsenderType">
-    <xsd:sequence>
-      <xsd:element name="PostkorbId" type="xsd:string" maxOccurs="1" minOccurs="0"/>
-      <xsd:element name="Verfahren" type="xsd:string" maxOccurs="1" minOccurs="0"/>
-      <xsd:element name="Dienst" type="bsp:NonEmptyString" maxOccurs="1" minOccurs="0"/>
-      <xsd:element name="Mandant" type="bsp:NonEmptyString" maxOccurs="1" minOccurs="0"/>
-      <xsd:element name="Gemeindeschluessel" type="bsp:SchluesseltabelleType" minOccurs="0">
-        <xsd:annotation>
-          <xsd:documentation>Der amtliche Gemeindeschlüssel (AGS).
-            Als Tabellennummer ist hier die 36 (OSCI-XMeld-Schlüsseltabelle "Amtlicher Gemeindeschluessel") zu verwenden.
-          </xsd:documentation>
-        </xsd:annotation>
-      </xsd:element>
-      <xsd:element name="Name" type="xsd:string" maxOccurs="1" minOccurs="0"/>
-      <xsd:element name="Anschrift" type="xsd:string" maxOccurs="1" minOccurs="0"/>
-      <xsd:element name="Email" type="xsd:string" maxOccurs="1" minOccurs="0"/>
-      <xsd:element name="Telefon" type="xsd:string" maxOccurs="1" minOccurs="0"/>
-      <xsd:element name="Hyperlink" type="xsd:string" maxOccurs="1" minOccurs="0"/>
-   </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="EmpfaengerType">
-    <xsd:sequence>
-      <xsd:element name="PostkorbId" type="xsd:string" maxOccurs="1" minOccurs="1"/>
-      <xsd:element name="Verfahren" type="xsd:string" maxOccurs="1" minOccurs="0"/>
-      <xsd:element name="Dienst" type="xsd:string" maxOccurs="1" minOccurs="0"/>
-      <xsd:element name="Mandant" type="xsd:string" maxOccurs="1" minOccurs="0"/>
-      <xsd:element name="Gemeindeschluessel" type="bsp:SchluesseltabelleType" minOccurs="0">
-        <xsd:annotation>
-          <xsd:documentation>Der amtliche Gemeindeschlüssel (AGS).
-            Als Tabellennummer ist hier die 36 (OSCI-XMeld-Schlüsseltabelle "Amtlicher Gemeindeschluessel") zu verwenden.
-          </xsd:documentation>
-        </xsd:annotation>
-      </xsd:element>
-      <xsd:element name="Name" type="xsd:string" maxOccurs="1" minOccurs="0"/>
-      <xsd:element name="Anschrift" type="xsd:string" maxOccurs="1" minOccurs="0"/>
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="NachrichtenInhaltType">
-    <xsd:sequence>
-      <xsd:element name="Betreff" type="bsp:NonEmptyString" maxOccurs="1"   minOccurs="1"/>
-      <xsd:element name="Kategorie" type="bsp:SchluesseltabelleType" minOccurs="0">
-        <xsd:annotation>
-          <xsd:documentation>Schluesseltabelle 9002 (KAT_STATUS, KAT_INFOBSP, ...)
-          </xsd:documentation>
-        </xsd:annotation>
-      </xsd:element>
-      <xsd:choice minOccurs="0">
-        <xsd:element name="StorkQaaLevel" type="bsp:StorkQaaLevel"/>
-        <xsd:element name="NpaGescheutzt" type="xsd:boolean" >
-          <!-- deprecated, wird durch StorkQaaLevel="STORK-QAA-Level-1" ersetzt -->
-          <xsd:annotation>
-            <xsd:documentation>
-              Diese Nachricht kann im BüsP-Postkorb nur nach
-              vorheriger Anmeldung mit dem nPA gelesen werden.
-            </xsd:documentation>
-          </xsd:annotation>
-        </xsd:element>
-      </xsd:choice>
-      <xsd:element name="ZuVorgang" type="bsp:ZuVorgangType" minOccurs="0"/>
-      <xsd:element name="FreiText" type="bsp:FreiTextType"/>
-      <xsd:element name="DataContainer" type="bsp:DataContainerType" minOccurs="0" maxOccurs="unbounded"/>
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="ZuVorgangType">
-    <xsd:annotation>
-      <xsd:documentation>VorgangsName oder VorgangsId müssen angegeben
-        werden. Es können auch beide angegeben werden.</xsd:documentation>
-    </xsd:annotation>
-    <xsd:sequence minOccurs="0">
-      <xsd:element name="VorgangsName" type="xsd:string"/>
-      <xsd:element name="VorgangsId" type="xsd:string"/>
-      <xsd:element name="VorgangStatus" type="bsp:SchluesseltabelleType">
-        <xsd:annotation>
-          <xsd:documentation>Schluesseltabelle 9003 (ST_ERHALTEN, ST_GELESEN,...)
-          </xsd:documentation>
-        </xsd:annotation>
-      </xsd:element>
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="FreiTextType">
-    <xsd:sequence>
-      <xsd:element name="Encoding" type="bsp:SchluesseltabelleType" maxOccurs="1" minOccurs="1">
-        <xsd:annotation>
-          <xsd:documentation>Schluesseltabelle 9004 (text/plain, text/html, ...)
-          </xsd:documentation>
-        </xsd:annotation>
-      </xsd:element>
-      <xsd:element name="Text" type="bsp:NonEmptyString" maxOccurs="1" minOccurs="1">
-        <xsd:annotation>
-          <xsd:documentation>
-            Wenn als Encoding text/plain festgelegt ist, so wird die Zeichensequenz "\n" als ein Zeilenvorschub interpretiert.
-            Das Backslash-Zeichen (\) wird mit einem weiteren Backslash-Zeichen entwertet.
-          </xsd:documentation>
-        </xsd:annotation>
-      </xsd:element>
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="DataContainerType">
-    <xsd:sequence minOccurs="0">
-      <xsd:element name="Inhalt" type="xsd:base64Binary" maxOccurs="1" minOccurs="1"/>
-      <xsd:element name="FileName" maxOccurs="1" minOccurs="0">
-          <xsd:simpleType>
-            <xsd:restriction base="xsd:string">
-              <xsd:maxLength value="255"/>
-            </xsd:restriction>
-          </xsd:simpleType>
-      </xsd:element>
-      <xsd:element name="FileType" type="bsp:SchluesseltabelleType" maxOccurs="1" minOccurs="1">
-        <xsd:annotation>
-          <xsd:documentation>Schluesseltabelle 9005 (application/pdf, text/html, ...)
-          </xsd:documentation>
-        </xsd:annotation>
-      </xsd:element>
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="SchluesseltabelleType">
-    <xsd:annotation>
-      <xsd:documentation>Dieser Datentyp wird für Schlüsselwerte benötigt.
-        Mit dem Datentyp SchluesseltabelleType übermittelt man den Schlüssel
-        und die Nummer der Tabelle, in der das Schlüssel-Wert Paar definiert
-        worden ist.
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:sequence>
-      <xsd:element name="Tabelle" type="xsd:string"/>
-      <xsd:element name="Schluessel" type="xsd:string"/>
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:simpleType name="StorkQaaLevel">
-    <xsd:restriction base="xsd:string">
-      <!-- since version 1.2 - deprecated -->
-      <xsd:enumeration value="LEVEL_1"/>
-      <xsd:enumeration value="LEVEL_2"/>
-      <xsd:enumeration value="LEVEL_3"/>
-      <xsd:enumeration value="LEVEL_4"/>
-      <!--  since version 1.3 -->
-      <xsd:enumeration value="STORK-QAA-Level-1"/>
-      <xsd:enumeration value="STORK-QAA-Level-2"/>
-      <xsd:enumeration value="STORK-QAA-Level-3"/>
-      <xsd:enumeration value="STORK-QAA-Level-4"/>
-    </xsd:restriction>
-  </xsd:simpleType>
-  <xsd:simpleType name="NonEmptyString">
-    <xsd:restriction base="xsd:string">
-      <xsd:minLength value="1"/>
-    </xsd:restriction>
-  </xsd:simpleType>
-</xsd:schema>
-
-
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/log4j2-local.xml b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/log4j2-local.xml
deleted file mode 100644
index 5d7001e1f9186d197a2d301d3910c9d73ed05d15..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/main/resources/log4j2-local.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<configuration>
-	<Appenders>
-		<Console name="CONSOLE" target="SYSTEM_OUT">
-			<PatternLayout pattern="[%-5level] %c{1.} %msg%n"/>
-		</Console>
-	</Appenders>
-
-	<Loggers>
-		<Root level="WARN">
-			<appender-ref ref="CONSOLE" />
-		</Root>
-	</Loggers>
-</configuration>
\ No newline at end of file
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyGrpcServiceITCase.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyGrpcServiceITCase.java
deleted file mode 100644
index 8f9468c817590b7f34f0c83318084569ae09eaf6..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyGrpcServiceITCase.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy;
-
-import static org.assertj.core.api.Assertions.*;
-
-import java.io.InputStream;
-import java.util.Set;
-import java.util.concurrent.ExecutionException;
-
-import org.apache.commons.lang3.tuple.Pair;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.core.io.Resource;
-import org.springframework.test.annotation.DirtiesContext;
-import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
-
-import com.github.tomakehurst.wiremock.junit5.WireMockRuntimeInfo;
-import com.github.tomakehurst.wiremock.junit5.WireMockTest;
-
-import de.ozgcloud.common.test.ITCase;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.akdb.BayernIdRemoteService;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.mock.GrpcBayernIdProxyTestClient;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.mock.MockBayernIdInitializer;
-import io.grpc.StatusRuntimeException;
-import lombok.SneakyThrows;
-import net.devh.boot.grpc.client.autoconfigure.GrpcClientAutoConfiguration;
-import net.devh.boot.grpc.client.autoconfigure.GrpcClientHealthAutoConfiguration;
-import net.devh.boot.grpc.client.autoconfigure.GrpcClientMetricAutoConfiguration;
-import net.devh.boot.grpc.client.autoconfigure.GrpcClientSecurityAutoConfiguration;
-import net.devh.boot.grpc.client.autoconfigure.GrpcClientTraceAutoConfiguration;
-import net.devh.boot.grpc.client.autoconfigure.GrpcDiscoveryClientAutoConfiguration;
-import net.devh.boot.grpc.client.inject.GrpcClient;
-
-@SpringBootTest(classes = BayernIdProxyApplication.class, properties = {
-		"grpc.server.inProcessName=test",
-		"grpc.client.inProcess.address=in-process:test",
-		"ozgcloud.bayernid.server: http://bayern-id",
-		"ozgcloud.bayernid.useSsl: false"
-})
-@SpringJUnitConfig(classes = BayernIdProxyGrpcServiceITCase.TestConfig.class)
-@DirtiesContext
-@WireMockTest
-@ITCase
-class BayernIdProxyGrpcServiceITCase {
-
-	@Autowired
-	private BayernIdProxyGrpcService service;
-	@Autowired
-	private BayernIdRemoteService bayernIdRemoteService;
-
-	@GrpcClient("inProcess")
-	private BayernIdProxyServiceGrpc.BayernIdProxyServiceStub serviceStub;
-
-	private MockBayernIdInitializer bayernIdInitializer;
-
-	@Value("classpath:test.pdf")
-	private Resource pdfResource;
-	@Value("classpath:test.txt")
-	private Resource txtResource;
-
-	private String pdfName = "test.pdf";
-	private String txtName = "test.txt";
-
-	private GrpcBayernIdProxyTestClient grpcTestClient;
-
-	@BeforeEach
-	void setup(WireMockRuntimeInfo wmRuntimeInfo) {
-		bayernIdRemoteService.setDefaultUri("http://localhost:" + wmRuntimeInfo.getHttpPort());
-		bayernIdInitializer = new MockBayernIdInitializer(wmRuntimeInfo);
-		grpcTestClient = new GrpcBayernIdProxyTestClient(serviceStub);
-	}
-
-	@Test
-	@SneakyThrows
-	void shouldSendMessage() {
-		bayernIdInitializer.createResponseOk();
-
-		var bayernIdResponse = grpcTestClient.sendMessage(GrpcBayernIdMessageMetadataTestFactory.create(), createAttachmentIterator());
-
-		assertThat(bayernIdResponse.isSuccess()).isTrue();
-		assertThat(bayernIdResponse.getStatus()).isEqualTo("0");
-	}
-
-	@SneakyThrows
-	@Test
-	void shouldReceiveErrorResponse() {
-		bayernIdInitializer.createResponseError();
-
-		var bayernIdResponse = grpcTestClient.sendMessage(GrpcBayernIdMessageMetadataTestFactory.create(), createAttachmentIterator());
-
-		assertThat(bayernIdResponse.isSuccess()).isFalse();
-		assertThat(bayernIdResponse.getStatus()).isEqualTo("31");
-		assertThat(bayernIdResponse.getMessage()).isEqualTo("Unzulässiger Nachrichteninhalt");
-	}
-
-	@Test
-	void shouldPassException() {
-		bayernIdInitializer.createResponseWithException();
-
-		try {
-			grpcTestClient.sendMessage(GrpcBayernIdMessageMetadataTestFactory.create(), createAttachmentIterator());
-		} catch (ExecutionException e) {
-			assertException(e.getMessage(), e.getCause());
-		}
-	}
-
-	@Test
-	void shouldPass500Response() {
-		bayernIdInitializer.create500Response();
-
-		try {
-			grpcTestClient.sendMessage(GrpcBayernIdMessageMetadataTestFactory.create(), createAttachmentIterator());
-		} catch (ExecutionException e) {
-			assertException(e.getMessage(), e.getCause());
-		}
-	}
-
-	private void assertException(String exceptionMessage, Throwable cause) {
-		assertThat(cause).isInstanceOf(StatusRuntimeException.class);
-		assertThat(exceptionMessage).contains("(ExceptionId:");
-	}
-
-
-	@SneakyThrows
-	Set<Pair<GrpcAttachmentMetadata, InputStream>> createAttachmentIterator() {
-		return Set.of(
-				Pair.of(GrpcAttachmentMetadata.newBuilder().setFileName(txtName).setFileType("text/plain").build(), txtResource.getInputStream()),
-				Pair.of(GrpcAttachmentMetadata.newBuilder().setFileName(pdfName).setFileType("application/pdf").build(), pdfResource.getInputStream())
-		);
-	}
-
-	@Configuration
-	@ImportAutoConfiguration({
-			GrpcClientAutoConfiguration.class,
-			GrpcClientHealthAutoConfiguration.class,
-			GrpcClientMetricAutoConfiguration.class,
-			GrpcClientSecurityAutoConfiguration.class,
-			GrpcClientTraceAutoConfiguration.class,
-			GrpcDiscoveryClientAutoConfiguration.class
-	})
-	static class TestConfig {
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyServiceTest.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyServiceTest.java
deleted file mode 100644
index 2bda292babf25b186a903b7d261ba22f00c241c8..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdProxyServiceTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.Mockito.*;
-
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.akdb.BayernIdRemoteService;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessage;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdResponse;
-
-class BayernIdProxyServiceTest {
-
-	@InjectMocks
-	private BayernIdProxyService service;
-
-	@Mock
-	private BayernIdRemoteService remoteService;
-	@Mock
-	private BayernIdMessage message;
-	@Mock
-	private BayernIdResponse bayernIdResponse;
-
-	@Test
-	void shouldCallRemoteService() {
-		sendMessage();
-
-		verify(remoteService).sendPostfachNachricht(message);
-	}
-
-	@Test
-	void shouldReturnBayernIdResponse() {
-		when(remoteService.sendPostfachNachricht(any())).thenReturn(bayernIdResponse);
-
-		var result = sendMessage();
-
-		assertThat(result).isEqualTo(bayernIdResponse);
-	}
-
-	private BayernIdResponse sendMessage() {
-		return service.sendPostfachNachricht(message);
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdResponseTestFactory.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdResponseTestFactory.java
deleted file mode 100644
index 09b4146c945d211c8001de8b6570ccbae19c07f0..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/BayernIdResponseTestFactory.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy;
-
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdResponse;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdResponse.BayernIdResponseBuilder;
-
-public class BayernIdResponseTestFactory {
-
-	public static final String STATUS = "OK";
-	public static final String MESSAGE = "Message sent successfully";
-
-	public static BayernIdResponse create() {
-		return createBuilder().build();
-	}
-
-	public static BayernIdResponseBuilder createBuilder() {
-		return BayernIdResponse.builder()
-				.success(true)
-				.status(STATUS)
-				.message(MESSAGE);
-	}
-}
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/GrpcAbsenderTestFactory.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/GrpcAbsenderTestFactory.java
deleted file mode 100644
index a955fd2dea9219c92f62c327c82c4278f734ddb7..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/GrpcAbsenderTestFactory.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy;
-
-public class GrpcAbsenderTestFactory {
-
-	public static final String NAME = "Musterstadt Stadtverwaltung";
-	public static final String ANSCHRIFT = "Musterstraße 1";
-	public static final String EMAIL = "example@mail.loc";
-	public static final String TELEFON = "0456123456789";
-	public static final String HYPERLINK = "http://some.link";
-	public static final String MANDANT = "Musterstadt";
-	public static final String DIENST = "Stadtverwaltung";
-	public static final String GEMEINDE_SCHLUESSEL = "123456789";
-
-	public static GrpcAbsender create() {
-		return createBuilder().build();
-	}
-
-	public static GrpcAbsender.Builder createBuilder() {
-		return GrpcAbsender.newBuilder()
-				.setName(NAME)
-				.setAnschrift(ANSCHRIFT)
-				.setEmail(EMAIL)
-				.setTelefon(TELEFON)
-				.setHyperlink(HYPERLINK)
-				.setMandant(MANDANT)
-				.setDienst(DIENST)
-				.setGemeindeschluessel(GEMEINDE_SCHLUESSEL);
-	}
-}
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/GrpcBayernIdMessageMetadataTestFactory.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/GrpcBayernIdMessageMetadataTestFactory.java
deleted file mode 100644
index 854a5c1a22be51055d84ccb07f068822d358e405..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/GrpcBayernIdMessageMetadataTestFactory.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy;
-
-import java.time.ZonedDateTime;
-import java.util.GregorianCalendar;
-import java.util.UUID;
-
-import javax.xml.datatype.DatatypeFactory;
-
-import lombok.SneakyThrows;
-
-public class GrpcBayernIdMessageMetadataTestFactory {
-
-	public static final String MESSAGE_ID = "messageId";
-	public static final ZonedDateTime CREATED_AT = ZonedDateTime.now();
-	public static final String CREATED_AT_STRING = convertZoneDDateTime(CREATED_AT);
-	public static final String STORK_QAA_LEVEL = "LEVEL_1";
-	public static final String SUBJECT = "subject";
-	public static final String VORGANG_ID = UUID.randomUUID().toString();
-	public static final String MESSAGE_TEXT = "some completely random text";
-
-	public static GrpcBayernIdMessageMetadata create() {
-		return createBuilder().build();
-	}
-
-	public static GrpcBayernIdMessageMetadata.Builder createBuilder() {
-		return GrpcBayernIdMessageMetadata.newBuilder()
-				.setMessageId(MESSAGE_ID)
-				.setCreatedAt(convertZoneDDateTime(CREATED_AT))
-				.setAbsender(GrpcAbsenderTestFactory.create())
-				.setEmpfaenger(GrpcEmpfaengerTestFactory.create())
-				.setSubject(SUBJECT)
-				.setStorkQaaLevel(STORK_QAA_LEVEL)
-				.setVorgangId(VORGANG_ID)
-				.setText(MESSAGE_TEXT);
-	}
-
-	@SneakyThrows
-	public static String convertZoneDDateTime(ZonedDateTime dateTime) {
-		return DatatypeFactory.newInstance().newXMLGregorianCalendar(GregorianCalendar.from(dateTime)).toString();
-	}
-}
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/GrpcEmpfaengerTestFactory.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/GrpcEmpfaengerTestFactory.java
deleted file mode 100644
index 5a0df823236427815e28e4851d6f428dc25cd8bf..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/GrpcEmpfaengerTestFactory.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy;
-
-public class GrpcEmpfaengerTestFactory {
-
-	public static final String POSTFACH_ID = "postfach-id-1";
-	public static final String NAME = "Max Empfaenger";
-	public static final String ANSCHRIFT = "anschrift";
-
-	public static GrpcEmpfaenger create() {
-		return createBuilder().build();
-	}
-
-	public static GrpcEmpfaenger.Builder createBuilder() {
-		return GrpcEmpfaenger.newBuilder()
-				.setPostkorbId(POSTFACH_ID)
-				.setName(NAME)
-				.setAnschrift(ANSCHRIFT);
-	}
-}
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/UploadStreamObserverTest.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/UploadStreamObserverTest.java
deleted file mode 100644
index d6efd88993fe8d530db3edaeefa7f26ca8c28f3f..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/UploadStreamObserverTest.java
+++ /dev/null
@@ -1,404 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.Mockito.*;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.nio.file.Path;
-import java.util.concurrent.atomic.AtomicReference;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Spy;
-import org.mockito.junit.jupiter.MockitoExtension;
-import org.springframework.test.util.ReflectionTestUtils;
-
-import com.google.protobuf.ByteString;
-
-import de.ozgcloud.common.errorhandling.TechnicalException;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.Attachment;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessage.BayernIdMessageBuilder;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessageMapper;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessageTestFactory;
-import io.grpc.stub.StreamObserver;
-import lombok.SneakyThrows;
-
-class UploadStreamObserverTest {
-
-	@Spy
-	@InjectMocks
-	private UploadStreamObserver uploadStreamObserver;
-
-	@Mock
-	private StreamObserver<GrpcSendBayernIdMessageResponse> responseObserver;
-	@Mock
-	private BayernIdProxyService proxyService;
-	@Mock
-	private BayernIdMessageMapper messageMapper;
-	@Mock
-	private BayernIdMessageBuilder bayernIdMessageBuilder;
-	@Mock
-	private AtomicReference<BayernIdMessageBuilder> messageBuilderAtomicReference;
-
-	@Nested
-	class TestOnNext {
-
-		@Test
-		void shouldCallReadMetadata() {
-			var messageMetadata = GrpcBayernIdMessageMetadataTestFactory.create();
-			var sendRequest = GrpcSendBayernIdMessageRequest.newBuilder().setMessageMetadata(messageMetadata).build();
-
-			uploadStreamObserver.onNext(sendRequest);
-
-			verify(uploadStreamObserver).readMessageMetadata(messageMetadata);
-			verify(uploadStreamObserver, never()).readAttachments(any());
-		}
-
-		@Test
-		void shouldCallReadAttachment() {
-			var attachments = GrpcAttachments.newBuilder().setAttachmentMetadata(GrpcAttachmentMetadataTestFactory.create()).build();
-			var sendRequest = GrpcSendBayernIdMessageRequest.newBuilder().setAttachments(attachments).build();
-			doNothing().when(uploadStreamObserver).readAttachments(any());
-
-			uploadStreamObserver.onNext(sendRequest);
-
-			verify(uploadStreamObserver).readAttachments(attachments);
-			verify(uploadStreamObserver, never()).readMessageMetadata(any());
-		}
-	}
-
-	@Nested
-	class TestReadMessageMetadata {
-
-		private GrpcBayernIdMessageMetadata messageMetadata = GrpcBayernIdMessageMetadataTestFactory.create();
-
-		@BeforeEach
-		void setup() {
-			ReflectionTestUtils.setField(uploadStreamObserver, "messageBuilder", messageBuilderAtomicReference);
-		}
-
-		@Test
-		void shouldCallMessageMapper() {
-			uploadStreamObserver.readMessageMetadata(messageMetadata);
-
-			verify(messageMapper).toBayernIdMessage(messageMetadata);
-		}
-
-		@Test
-		void shouldSetMessageBuilder() {
-			when(messageMapper.toBayernIdMessage(any())).thenReturn(bayernIdMessageBuilder);
-
-			uploadStreamObserver.readMessageMetadata(messageMetadata);
-
-			verify(messageBuilderAtomicReference).set(bayernIdMessageBuilder);
-		}
-
-	}
-
-	@Nested
-	class TestReadAttachments {
-
-		@Test
-		void shouldCallAddContainer() {
-			var attachmentMetadata = GrpcAttachmentMetadataTestFactory.create();
-			doNothing().when(uploadStreamObserver).addDataContainer(any());
-
-			uploadStreamObserver.readAttachments(GrpcAttachments.newBuilder().setAttachmentMetadata(attachmentMetadata).build());
-
-			verify(uploadStreamObserver).addDataContainer(attachmentMetadata);
-			verify(uploadStreamObserver, never()).writeAttachment(any());
-		}
-
-		@Test
-		void shouldCallWriteAttachment() {
-			var content = ByteString.copyFromUtf8("attachment");
-			var attachment = GrpcAttachments.newBuilder().setContent(content).build();
-			doNothing().when(uploadStreamObserver).writeAttachment(any());
-
-			uploadStreamObserver.readAttachments(attachment);
-
-			verify(uploadStreamObserver).writeAttachment(content);
-			verify(uploadStreamObserver, never()).addDataContainer(any());
-		}
-
-		@Nested
-		class TestAddDataContainer {
-
-			private GrpcAttachmentMetadata grpcAttachmentMetadata = GrpcAttachmentMetadataTestFactory.create();
-
-			@Mock
-			private Attachment attachment;
-
-			@Mock
-			private AtomicReference<BayernIdMessageBuilder> atomicMessageBuilder;
-
-			@BeforeEach
-			void setup() {
-				when(atomicMessageBuilder.get()).thenReturn(bayernIdMessageBuilder);
-				ReflectionTestUtils.setField(uploadStreamObserver, "messageBuilder", atomicMessageBuilder);
-			}
-
-			@Test
-			void shouldCallBuildAttachment() {
-				uploadStreamObserver.addDataContainer(grpcAttachmentMetadata);
-
-				verify(uploadStreamObserver).buildAttachment(grpcAttachmentMetadata);
-			}
-
-			@Test
-			void shouldAddAttachment() {
-				doReturn(attachment).when(uploadStreamObserver).buildAttachment(any());
-
-				uploadStreamObserver.addDataContainer(grpcAttachmentMetadata);
-
-				verify(bayernIdMessageBuilder).attachment(attachment);
-			}
-		}
-
-		@Nested
-		class TestBuildAttachment {
-
-			private GrpcAttachmentMetadata grpcAttachmentMetadata = GrpcAttachmentMetadataTestFactory.create();
-
-			@Mock
-			private InputStream tmpFileInputStream;
-
-			@BeforeEach
-			void setup() {
-				doReturn(tmpFileInputStream).when(uploadStreamObserver).createTemporallyFile(any());
-			}
-
-			@Test
-			void shouldCallCreateTemporallyFile() {
-				uploadStreamObserver.buildAttachment(grpcAttachmentMetadata);
-
-				verify(uploadStreamObserver).createTemporallyFile(GrpcAttachmentMetadataTestFactory.FILE_NAME);
-			}
-
-			@Test
-			void shouldSetTemporallyFile() {
-				var result = uploadStreamObserver.buildAttachment(grpcAttachmentMetadata);
-
-				assertThat(result.getContent()).isEqualTo(tmpFileInputStream);
-			}
-
-			@Test
-			void shouldSetAttachmentName() {
-				var result = uploadStreamObserver.buildAttachment(grpcAttachmentMetadata);
-
-				assertThat(result.getName()).isEqualTo(GrpcAttachmentMetadataTestFactory.FILE_NAME);
-			}
-
-			@Test
-			void shouldSetAttachmentType() {
-				var result = uploadStreamObserver.buildAttachment(grpcAttachmentMetadata);
-
-				assertThat(result.getType()).isEqualTo(GrpcAttachmentMetadataTestFactory.FILE_TYPE);
-			}
-		}
-
-		@Nested
-		class TestCreateTemporallyFile {
-
-			@Mock
-			private OutputStream attachmentWriter;
-			@Mock
-			private InputStream tmpFileInputStream;
-
-			private Path tempFilePath = Path.of("tempFile");
-
-			@Test
-			void shouldCallCloseTemporallyFile() {
-
-				uploadStreamObserver.createTemporallyFile("test.txt");
-
-				verify(uploadStreamObserver).closeTemporallyWriter();
-			}
-
-			@SneakyThrows
-			@Test
-			void shouldCallCreateFile() {
-				uploadStreamObserver.createTemporallyFile(GrpcAttachmentMetadataTestFactory.FILE_NAME);
-
-				verify(uploadStreamObserver).createFile(GrpcAttachmentMetadataTestFactory.FILE_NAME);
-			}
-
-			@SneakyThrows
-			@Test
-			void shouldCallNewOutputStream() {
-				doReturn(tempFilePath).when(uploadStreamObserver).createFile(any());
-
-				uploadStreamObserver.createTemporallyFile(GrpcAttachmentMetadataTestFactory.FILE_NAME);
-
-				verify(uploadStreamObserver).newOutputStream(tempFilePath);
-			}
-
-			@SneakyThrows
-			@Test
-			void shouldInitializeOutputWriter() {
-				doReturn(attachmentWriter).when(uploadStreamObserver).newOutputStream(any());
-
-				uploadStreamObserver.createTemporallyFile(GrpcAttachmentMetadataTestFactory.FILE_NAME);
-
-				assertThat(getAttachmentWriter()).isEqualTo(attachmentWriter);
-			}
-
-			@SneakyThrows
-			@Test
-			void shouldCallNewInputStream() {
-				doReturn(tempFilePath).when(uploadStreamObserver).createFile(any());
-
-				uploadStreamObserver.createTemporallyFile(GrpcAttachmentMetadataTestFactory.FILE_NAME);
-
-				verify(uploadStreamObserver).newInputStream(tempFilePath);
-			}
-
-			@SneakyThrows
-			@Test
-			void shouldReturnInputStream() {
-				doReturn(tmpFileInputStream).when(uploadStreamObserver).newInputStream(any());
-
-				var result = uploadStreamObserver.createTemporallyFile(GrpcAttachmentMetadataTestFactory.FILE_NAME);
-
-				assertThat(result).isEqualTo(tmpFileInputStream);
-			}
-
-			@SneakyThrows
-			@Test
-			void shouldThrowException() {
-				doThrow(new IOException()).when(uploadStreamObserver).createFile(any());
-
-				assertThrows(TechnicalException.class, () -> uploadStreamObserver.createTemporallyFile(GrpcAttachmentMetadataTestFactory.FILE_NAME));
-			}
-
-			private OutputStream getAttachmentWriter() {
-				return (OutputStream) ReflectionTestUtils.getField(uploadStreamObserver, "attachmentWriter");
-			}
-		}
-	}
-
-	@Nested
-	class TestOnError {
-
-		@Test
-		void shouldCallCloseTemporallyWriter() {
-			try {
-				uploadStreamObserver.onError(new RuntimeException());
-			} catch (TechnicalException e) {
-				// expected
-			}
-
-			verify(uploadStreamObserver).closeTemporallyWriter();
-		}
-
-		@Test
-		void shouldTrowTechnicalException() {
-			var cause = new RuntimeException();
-
-			var thrownException = assertThrows(TechnicalException.class, () -> uploadStreamObserver.onError(cause));
-
-			assertThat(thrownException.getCause()).isEqualTo(cause);
-		}
-	}
-
-	@Nested
-	class TestOnComplete {
-
-		@BeforeEach
-		void setup() {
-			when(messageBuilderAtomicReference.get()).thenReturn(bayernIdMessageBuilder);
-			ReflectionTestUtils.setField(uploadStreamObserver, "messageBuilder", messageBuilderAtomicReference);
-		}
-
-		@Test
-		void shouldCallCloseTemporallyWriter() {
-			uploadStreamObserver.onCompleted();
-
-			verify(uploadStreamObserver).closeTemporallyWriter();
-		}
-
-		@Test
-		void shouldCallSendBayernIdMessage() {
-			var bayernIdMessage = BayernIdMessageTestFactory.create();
-			when(bayernIdMessageBuilder.build()).thenReturn(bayernIdMessage);
-
-			uploadStreamObserver.onCompleted();
-
-			verify(proxyService).sendPostfachNachricht(bayernIdMessage);
-		}
-
-		@Test
-		void shouldCallMessageMapper() {
-			var bayernIdResponse = BayernIdResponseTestFactory.create();
-			when(proxyService.sendPostfachNachricht(any())).thenReturn(bayernIdResponse);
-
-			uploadStreamObserver.onCompleted();
-
-			verify(messageMapper).fromBayernIdResponse(bayernIdResponse);
-		}
-
-		@Test
-		void shouldCallResponseObserver() {
-			var grpcSendResponse = GrpcSendBayernIdMessageResponse.newBuilder().build();
-			when(messageMapper.fromBayernIdResponse(any())).thenReturn(grpcSendResponse);
-
-			uploadStreamObserver.onCompleted();
-
-			verify(responseObserver).onNext(grpcSendResponse);
-		}
-
-		@Test
-		void shouldCallSendResponse() {
-			uploadStreamObserver.onCompleted();
-
-			verify(responseObserver).onNext(any());
-		}
-
-		@Test
-		void shouldCallComplete() {
-			uploadStreamObserver.onCompleted();
-
-			verify(responseObserver).onCompleted();
-		}
-
-		@Test
-		void shouldThrowTechnicalException() {
-			var cause = new RuntimeException();
-
-			doThrow(cause).when(proxyService).sendPostfachNachricht(any());
-
-			var receivedException = assertThrows(TechnicalException.class, () -> uploadStreamObserver.onCompleted());
-			assertThat(receivedException.getCause()).isEqualTo(cause);
-		}
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/akdb/BayernIdRemoteServiceTest.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/akdb/BayernIdRemoteServiceTest.java
deleted file mode 100644
index 9d257bd0ad3013894d2cb1fdde68ca318bf18716..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/akdb/BayernIdRemoteServiceTest.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy.akdb;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.Mockito.*;
-
-import jakarta.xml.bind.JAXBElement;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Spy;
-import org.springframework.ws.client.core.WebServiceTemplate;
-
-import akdb.bsp.postkorb.komm.webservice.ObjectFactory;
-import akdb.bsp.postkorb.komm.webservice.SendBspNachrichtNative;
-import akdb.bsp.postkorb.komm.webservice.SendBspNachrichtNativeOutput;
-import de.akdb.egov.bsp.nachrichten.BspNachricht;
-import de.akdb.egov.bsp.nachrichten.BspQuittung;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessage;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessageMapper;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdResponse;
-
-class BayernIdRemoteServiceTest {
-
-	@Spy
-	@InjectMocks
-	private BayernIdRemoteService service;
-
-	@Mock
-	private BayernIdMessageMapper messageMapper;
-	@Mock
-	private ObjectFactory objectFactory;
-
-	@Nested
-	class TestSendPostfachNachricht {
-
-		@Mock
-		private SendBspNachrichtNative sendNachricht;
-		@Mock
-		private SendBspNachrichtNativeOutput sendBspNachrichtResponse;
-		@Mock
-		private BspQuittung bspQuittung;
-		@Mock
-		private JAXBElement<SendBspNachrichtNativeOutput> jaxbSendBspNachrichtNativeOutput;
-		@Mock
-		private BayernIdResponse response;
-		@Mock
-		private BayernIdMessage message;
-
-		@BeforeEach
-		void setup(){
-			doReturn(bspQuittung).when(service).createBspQuitung(any());
-			doReturn(sendNachricht).when(service).createSendNachricht(any());
-		}
-
-		@Test
-		void shouldCallCreateSendNachricht() {
-			doReturn(jaxbSendBspNachrichtNativeOutput).when(service).send(any());
-
-			sendMessage();
-
-			verify(service).createSendNachricht(message);
-		}
-
-		@Test
-		void shouldCallSendBspNachricht() {
-			doReturn(jaxbSendBspNachrichtNativeOutput).when(service).send(any());
-
-			sendMessage();
-
-			verify(service).sendBspNachricht(sendNachricht);
-		}
-
-		@Test
-		void shouldCallCreateBspQuitung() {
-			doReturn(sendBspNachrichtResponse).when(service).sendBspNachricht(any());
-
-			sendMessage();
-
-			verify(service).createBspQuitung(sendBspNachrichtResponse);
-		}
-
-		@Test
-		void shouldCallMessageMapper() {
-			doReturn(sendBspNachrichtResponse).when(service).sendBspNachricht(any());
-
-			sendMessage();
-
-			verify(messageMapper).toBayernIdResponse(bspQuittung);
-		}
-
-		@Test
-		void shouldReturnResponse() {
-			doReturn(response).when(messageMapper).toBayernIdResponse(bspQuittung);
-			doReturn(sendBspNachrichtResponse).when(service).sendBspNachricht(any());
-
-			var result = sendMessage();
-
-			assertThat(result).isEqualTo(response);
-		}
-
-		private BayernIdResponse sendMessage() {
-			return service.sendPostfachNachricht(message);
-		}
-
-	}
-
-	@Nested
-	class TestCreateSendNachricht {
-
-		private static final String RESULT_STRING = "result";
-
-		@Mock
-		private BayernIdMessage message;
-		@Mock
-		private BspNachricht bspNachricht;
-
-		@BeforeEach
-		void setup() {
-			doReturn(RESULT_STRING).when(service).buildBspNachrichtXml(any());
-		}
-
-		@Test
-		void shouldCallMessageMapper() {
-			service.createSendNachricht(message);
-
-			verify(messageMapper).toBspNachricht(message);
-		}
-
-		@Test
-		void shouldCallBuildBspNachrichtXml() {
-			when(messageMapper.toBspNachricht(any())).thenReturn(bspNachricht);
-
-			service.createSendNachricht(message);
-
-			verify(service).buildBspNachrichtXml(bspNachricht);
-		}
-
-		@Test
-		void shouldSetBspNachricht() {
-			var result = service.createSendNachricht(message);
-
-			assertThat(result.getBspNachricht()).isEqualTo(RESULT_STRING);
-		}
-	}
-
-	@Nested
-	class TestSendBspNachricht {
-
-		@Mock
-		private SendBspNachrichtNative sendBspNachrichtRequest;
-		@Mock
-		private JAXBElement<SendBspNachrichtNative> jaxbSendBspNachrichtNative;
-		@Mock
-		private JAXBElement<SendBspNachrichtNativeOutput> jaxbSendBspNachrichtNativeOutput;
-		@Mock
-		private SendBspNachrichtNativeOutput response;
-
-		@BeforeEach
-		void setup() {
-			doReturn(jaxbSendBspNachrichtNativeOutput).when(service).send(any());
-			when(jaxbSendBspNachrichtNativeOutput.getValue()).thenReturn(response);
-		}
-
-		@Test
-		void shouldCallMarshaller() {
-			service.sendBspNachricht(sendBspNachrichtRequest);
-
-			verify(objectFactory).createSendBspNachrichtNative(sendBspNachrichtRequest);
-		}
-
-		@Test
-		void shouldReturnValue() {
-			var sendBspNachrichtNativeOutput = service.sendBspNachricht(sendBspNachrichtRequest);
-
-			assertThat(sendBspNachrichtNativeOutput).isEqualTo(response);
-		}
-
-		@Test
-		void shouldCallSend() {
-			when(objectFactory.createSendBspNachrichtNative(any())).thenReturn(jaxbSendBspNachrichtNative);
-
-			service.sendBspNachricht(sendBspNachrichtRequest);
-
-			verify(service).send(jaxbSendBspNachrichtNative);
-		}
-
-	}
-
-	@Nested
-	class TestSend {
-
-		@Mock
-		private JAXBElement<SendBspNachrichtNative> jaxbSendBspNachrichtNative;
-		@Mock
-		private WebServiceTemplate webServiceTemplate;
-
-		@Test
-		void shouldCallMarshalSendAndReceive() {
-			doReturn(webServiceTemplate).when(service).getWebServiceTemplate();
-
-			service.send(jaxbSendBspNachrichtNative);
-
-			verify(webServiceTemplate).marshalSendAndReceive(jaxbSendBspNachrichtNative);
-		}
-
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/errorhandling/ExceptionHandlerTest.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/errorhandling/ExceptionHandlerTest.java
deleted file mode 100644
index ad74aecebb47abac348397281e65549b481a052b..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/errorhandling/ExceptionHandlerTest.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy.errorhandling;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.Mockito.*;
-
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Spy;
-
-import de.ozgcloud.common.errorhandling.TechnicalException;
-import de.ozgcloud.common.grpc.GrpcUtil;
-import io.grpc.Metadata;
-import io.grpc.Status;
-import io.grpc.Status.Code;
-import io.grpc.StatusException;
-
-class ExceptionHandlerTest {
-
-	@Spy
-	@InjectMocks
-	private ExceptionHandler exceptionHandler;
-
-	@Nested
-	class TestHandleTechnicalException {
-
-		private static final TechnicalException EXCEPTION = new TechnicalException("Test");
-
-		@Mock
-		private Metadata metadata;
-		@Mock
-		private StatusException statusException;
-
-		@Test
-		void shouldCallBuildInternalStatus() {
-			exceptionHandler.handleTechnicalException(EXCEPTION);
-
-			verify(exceptionHandler).buildInternalStatus(EXCEPTION);
-		}
-
-		@Test
-		void shouldCallBuildMetadata() {
-			exceptionHandler.handleTechnicalException(EXCEPTION);
-
-			verify(exceptionHandler).buildMetadata(EXCEPTION.getExceptionId());
-		}
-
-		@Test
-		void shouldCallCreateStatusException() {
-			var status = Status.INTERNAL;
-			doReturn(status).when(exceptionHandler).buildInternalStatus(any());
-			doReturn(metadata).when(exceptionHandler).buildMetadata(any());
-
-			exceptionHandler.handleTechnicalException(EXCEPTION);
-
-			verify(exceptionHandler).createStatusException(status, metadata);
-		}
-
-		@Test
-		void shouldReturnStatusException() {
-			doReturn(statusException).when(exceptionHandler).createStatusException(any(), any());
-
-			var result = exceptionHandler.handleTechnicalException(EXCEPTION);
-
-			assertThat(result).isEqualTo(statusException);
-		}
-	}
-
-	@Nested
-	class TestHandleRuntimeException {
-
-		private static final RuntimeException EXCEPTION = new RuntimeException("Test");
-
-		@Mock
-		private Metadata metadata;
-		@Mock
-		private StatusException statusException;
-
-		@Test
-		void shouldCallBuildInternalStatus() {
-			exceptionHandler.handleRuntimeException(EXCEPTION);
-
-			verify(exceptionHandler).buildInternalStatus(EXCEPTION);
-		}
-
-		@Test
-		void shouldCallCreateExceptionId() {
-			exceptionHandler.handleRuntimeException(EXCEPTION);
-
-			verify(exceptionHandler).createExceptionId();
-		}
-
-		@Test
-		void shouldCallBuildMetadata() {
-			var exceptionId = "42";
-			doReturn(exceptionId).when(exceptionHandler).createExceptionId();
-
-			exceptionHandler.handleRuntimeException(EXCEPTION);
-
-			verify(exceptionHandler).buildMetadata(exceptionId);
-		}
-
-		@Test
-		void shouldCallCreateStatusException() {
-			var status = Status.INTERNAL;
-			doReturn(status).when(exceptionHandler).buildInternalStatus(any());
-			doReturn(metadata).when(exceptionHandler).buildMetadata(any());
-
-			exceptionHandler.handleRuntimeException(EXCEPTION);
-
-			verify(exceptionHandler).createStatusException(status, metadata);
-		}
-
-		@Test
-		void shouldReturnStatusException() {
-			doReturn(statusException).when(exceptionHandler).createStatusException(any(), any());
-
-			var result = exceptionHandler.handleRuntimeException(EXCEPTION);
-
-			assertThat(result).isEqualTo(statusException);
-		}
-	}
-
-	@Nested
-	class TestBuildInternalStatus {
-
-		private static final Exception CAUSE = new Exception("Cause");
-		private static final RuntimeException EXCEPTION = new RuntimeException("Test", CAUSE);
-
-		@Test
-		void shouldSetInternalStatusCode() {
-			var result = exceptionHandler.buildInternalStatus(EXCEPTION);
-
-			assertThat(result.getCode()).isEqualTo(Code.INTERNAL);
-		}
-
-		@Test
-		void shouldSetDescription() {
-			var result = exceptionHandler.buildInternalStatus(EXCEPTION);
-
-			assertThat(result.getDescription()).isEqualTo(EXCEPTION.getMessage());
-		}
-
-		@Test
-		void shouldSetCause() {
-			var result = exceptionHandler.buildInternalStatus(EXCEPTION);
-
-			assertThat(result.getCause()).isEqualTo(CAUSE);
-		}
-	}
-
-	@Nested
-	class TestBuildMetadata {
-
-		private static final String EXCEPTION_ID = "42";
-		@Test
-		void shouldSetExceptionIdKey() {
-			var result = exceptionHandler.buildMetadata(EXCEPTION_ID);
-
-			assertThat(result.keys()).containsOnly(ExceptionHandler.KEY_EXCEPTION_ID.toLowerCase());
-		}
-
-		@Test
-		void shouldSetExceptionIdValue() {
-			var result = exceptionHandler.buildMetadata(EXCEPTION_ID);
-
-			assertThat(result.get(GrpcUtil.keyOfString(ExceptionHandler.KEY_EXCEPTION_ID))).isEqualTo(EXCEPTION_ID);
-		}
-
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/AbsenderTestFactory.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/AbsenderTestFactory.java
deleted file mode 100644
index 31164b3b208dd923bc8d7f0ee156bcc73546d841..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/AbsenderTestFactory.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy.message;
-
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.Absender.AbsenderBuilder;
-
-public class AbsenderTestFactory {
-
-	public static final String ABSENDER_POSTKORB_ID = "absenderPostkorbId";
-	public static final String NAME = "Musterstadt Stadtverwaltung";
-	public static final String ANSCHRIFT = "Musterstraße 1";
-	public static final String EMAIL = "mail@exam.ple";
-	public static final String TELEFON = "0456123456789";
-	public static final String HYPERLINK = "http://some.link";
-	public static final String MANDANT = "Musterstadt";
-	public static final String DIENST = "Stadtverwaltung";
-	public static final String GEMEINDE_SCHLUESSEL = "123456789";
-
-	public static Absender create() {
-		return createBuilder().build();
-	}
-
-	public static AbsenderBuilder createBuilder() {
-		return Absender.builder()
-				.postkorbId(ABSENDER_POSTKORB_ID)
-				.name(NAME)
-				.anschrift(ANSCHRIFT)
-				.email(EMAIL)
-				.telefon(TELEFON)
-				.hyperlink(HYPERLINK)
-				.mandant(MANDANT)
-				.dienst(DIENST)
-				.gemeindeschluessel(GEMEINDE_SCHLUESSEL);
-	}
-}
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdMessageMapperTest.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdMessageMapperTest.java
deleted file mode 100644
index f807b82c3e86863a7041a9fa29b148205f083262..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdMessageMapperTest.java
+++ /dev/null
@@ -1,506 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy.message;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.Mockito.*;
-
-import java.io.ByteArrayInputStream;
-import java.util.List;
-
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mapstruct.factory.Mappers;
-import org.mockito.Mockito;
-import org.testcontainers.shaded.org.apache.commons.io.IOUtils;
-
-import de.akdb.egov.bsp.nachrichten.BspNachricht;
-import de.akdb.egov.bsp.nachrichten.BspQuittung;
-import de.akdb.egov.bsp.nachrichten.DataContainerType;
-import de.akdb.egov.bsp.nachrichten.FreiTextType;
-import de.akdb.egov.bsp.nachrichten.NachrichtenInhaltType;
-import de.akdb.egov.bsp.nachrichten.NachrichtenKopfType;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.BayernIdResponseTestFactory;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcAbsenderTestFactory;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcBayernIdMessageMetadata;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcBayernIdMessageMetadataTestFactory;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcEmpfaengerTestFactory;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageResponse;
-import lombok.SneakyThrows;
-
-class BayernIdMessageMapperTest {
-
-	private BayernIdMessageMapper mapper = Mappers.getMapper(BayernIdMessageMapper.class);
-
-	@Nested
-	class ToBayernIdMessage {
-
-		private static final GrpcBayernIdMessageMetadata MESSAGE_METADATA = GrpcBayernIdMessageMetadataTestFactory.create();
-
-		@Test
-		void shouldSetMessageId() {
-			var result = mapToBayernIdMessage();
-
-			assertThat(result.getMessageId()).isEqualTo(GrpcBayernIdMessageMetadataTestFactory.MESSAGE_ID);
-		}
-
-		@Test
-		void shouldSetCreatedAt() {
-			var result = mapToBayernIdMessage();
-
-			assertThat(result.getCreatedAt()).isEqualTo(GrpcBayernIdMessageMetadataTestFactory.CREATED_AT_STRING);
-		}
-
-		@Test
-		void shouldSetSubject() {
-			var result = mapToBayernIdMessage();
-
-			assertThat(result.getSubject()).isEqualTo(GrpcBayernIdMessageMetadataTestFactory.SUBJECT);
-		}
-
-		@Test
-		void shoulSetStorkQaaLevel() {
-			var result = mapToBayernIdMessage();
-
-			assertThat(result.getStorkQaaLevel()).isEqualTo(GrpcBayernIdMessageMetadataTestFactory.STORK_QAA_LEVEL);
-		}
-
-		@Test
-		void shouldSetVorgangId() {
-			var result = mapToBayernIdMessage();
-
-			assertThat(result.getVorgangId()).isEqualTo(GrpcBayernIdMessageMetadataTestFactory.VORGANG_ID);
-		}
-
-		@Test
-		void shouldSetText() {
-			var result = mapToBayernIdMessage();
-
-			assertThat(result.getText()).isEqualTo(GrpcBayernIdMessageMetadataTestFactory.MESSAGE_TEXT);
-		}
-
-		@Nested
-		class TestSetAbsender {
-
-			@Test
-			void shouldSetName() {
-				var result = mapToAbsender();
-
-				assertThat(result.getName()).isEqualTo(GrpcAbsenderTestFactory.NAME);
-			}
-
-			@Test
-			void shouldSetAnschrift() {
-				var result = mapToAbsender();
-
-				assertThat(result.getAnschrift()).isEqualTo(GrpcAbsenderTestFactory.ANSCHRIFT);
-			}
-
-			@Test
-			void shouldSetEmail() {
-				var result = mapToAbsender();
-
-				assertThat(result.getEmail()).isEqualTo(GrpcAbsenderTestFactory.EMAIL);
-			}
-
-			@Test
-			void shouldSetTelefon() {
-				var result = mapToAbsender();
-
-				assertThat(result.getTelefon()).isEqualTo(GrpcAbsenderTestFactory.TELEFON);
-			}
-
-			@Test
-			void shouldSetHyperlink() {
-				var result = mapToAbsender();
-
-				assertThat(result.getHyperlink()).isEqualTo(GrpcAbsenderTestFactory.HYPERLINK);
-			}
-
-			@Test
-			void shouldSetMandant() {
-				var result = mapToAbsender();
-
-				assertThat(result.getMandant()).isEqualTo(GrpcAbsenderTestFactory.MANDANT);
-			}
-
-			@Test
-			void shouldSetDienst() {
-				var result = mapToAbsender();
-
-				assertThat(result.getDienst()).isEqualTo(GrpcAbsenderTestFactory.DIENST);
-			}
-
-			@Test
-			void shouldSetGemeindeschluessel() {
-				var result = mapToAbsender();
-
-				assertThat(result.getGemeindeschluessel()).isEqualTo(GrpcAbsenderTestFactory.GEMEINDE_SCHLUESSEL);
-			}
-
-			private Absender mapToAbsender() {
-				var bayernIdMessage = mapToBayernIdMessage();
-				assertThat(bayernIdMessage.getAbsender()).isNotNull();
-				return bayernIdMessage.getAbsender();
-			}
-		}
-
-		@Nested
-		class TestSetEmpfaenger {
-
-			@Test
-			void shouldSetPostfachId() {
-				var result = mapToEmpfänger();
-
-				assertThat(result.getPostkorbId()).isEqualTo(GrpcEmpfaengerTestFactory.POSTFACH_ID);
-			}
-
-			@Test
-			void shouldSetName() {
-				var result = mapToEmpfänger();
-
-				assertThat(result.getName()).isEqualTo(GrpcEmpfaengerTestFactory.NAME);
-			}
-
-			@Test
-			void shouldSetAnschrift() {
-				var result = mapToEmpfänger();
-
-				assertThat(result.getAnschrift()).isEqualTo(GrpcEmpfaengerTestFactory.ANSCHRIFT);
-			}
-
-			private Empfaenger mapToEmpfänger() {
-				var bayernIdMessage = mapToBayernIdMessage();
-				assertThat(bayernIdMessage.getEmpfaenger()).isNotNull();
-				return bayernIdMessage.getEmpfaenger();
-
-			}
-		}
-
-		private BayernIdMessage mapToBayernIdMessage() {
-			return mapper.toBayernIdMessage(MESSAGE_METADATA).build();
-		}
-	}
-
-	@Nested
-	class TestFromBayernIdResponse {
-
-		private static final BayernIdResponse BAYERN_ID_RESPONSE = BayernIdResponseTestFactory.create();
-
-		@Test
-		void shouldSetSuccess() {
-			var result = mapToGrpcSendBayernIdMessageResponse();
-
-			assertThat(result.getSuccess()).isTrue();
-		}
-
-		@Test
-		void shouldSetStatus() {
-			var result = mapToGrpcSendBayernIdMessageResponse();
-
-			assertThat(result.getStatus()).isEqualTo(BayernIdResponseTestFactory.STATUS);
-		}
-
-		@Test
-		void shouldSetMessage() {
-			var result = mapToGrpcSendBayernIdMessageResponse();
-
-			assertThat(result.getMessage()).isEqualTo(BayernIdResponseTestFactory.MESSAGE);
-		}
-
-		private GrpcSendBayernIdMessageResponse mapToGrpcSendBayernIdMessageResponse() {
-			return mapper.fromBayernIdResponse(BAYERN_ID_RESPONSE);
-		}
-	}
-
-	@Nested
-	class TestToBspNachricht {
-
-		@Nested
-		class TestSetNachrichtenKopf {
-
-			@Test
-			void shouldSetNachrichtId() {
-				var result = mapToNachrichtenKopf().getIdentifikationNachricht();
-
-				assertThat(result.getNachrichtenId()).isEqualTo(BayernIdMessageTestFactory.MESSAGE_ID);
-			}
-
-			@Test
-			void shouldSetErstellungszeitpunkt() {
-				var result = mapToNachrichtenKopf().getIdentifikationNachricht();
-
-				assertThat(result.getErstellungszeitpunkt()).hasToString(BayernIdMessageTestFactory.CREATED_AT);
-			}
-
-			@Nested
-			class TestMapEmpfaenger {
-
-				@Test
-				void shouldSetPostkorbId() {
-					var result = mapToNachrichtenKopf().getEmpfaenger();
-
-					assertThat(result.getPostkorbId()).isEqualTo(EmpfaengerTestFactory.POSTKORB_ID);
-				}
-
-				@Test
-				void shouldSetName() {
-					var result = mapToNachrichtenKopf().getEmpfaenger();
-
-					assertThat(result.getName()).isEqualTo(EmpfaengerTestFactory.NAME);
-				}
-
-				@Test
-				void shouldSetAnschrift() {
-					var result = mapToNachrichtenKopf().getEmpfaenger();
-
-					assertThat(result.getAnschrift()).isEqualTo(EmpfaengerTestFactory.ANSCHRIFT);
-				}
-			}
-
-			@Nested
-			class TestMapAbsender {
-
-				@Test
-				void shouldSetName() {
-					var result = mapToNachrichtenKopf().getAbsender();
-
-					assertThat(result.getName()).isEqualTo(AbsenderTestFactory.NAME);
-				}
-
-				@Test
-				void shouldSetAnschrift() {
-					var result = mapToNachrichtenKopf().getAbsender();
-
-					assertThat(result.getAnschrift()).isEqualTo(AbsenderTestFactory.ANSCHRIFT);
-				}
-
-				@Test
-				void shouldSetEmail() {
-					var result = mapToNachrichtenKopf().getAbsender();
-
-					assertThat(result.getEmail()).isEqualTo(AbsenderTestFactory.EMAIL);
-				}
-
-				@Test
-				void shouldSetTelefon() {
-					var result = mapToNachrichtenKopf().getAbsender();
-
-					assertThat(result.getTelefon()).isEqualTo(AbsenderTestFactory.TELEFON);
-				}
-
-				@Test
-				void shouldSetHyperlink() {
-					var result = mapToNachrichtenKopf().getAbsender();
-
-					assertThat(result.getHyperlink()).isEqualTo(AbsenderTestFactory.HYPERLINK);
-				}
-
-				@Test
-				void shouldSetMandant() {
-					var result = mapToNachrichtenKopf().getAbsender();
-
-					assertThat(result.getMandant()).isEqualTo(AbsenderTestFactory.MANDANT);
-				}
-
-				@Test
-				void shouldSetDienst() {
-					var result = mapToNachrichtenKopf().getAbsender();
-
-					assertThat(result.getDienst()).isEqualTo(AbsenderTestFactory.DIENST);
-				}
-
-				@Test
-				void shouldSetGemeindeschluessel() {
-					var result = mapToNachrichtenKopf().getAbsender();
-
-					assertThat(result.getGemeindeschluessel().getSchluessel()).isEqualTo(AbsenderTestFactory.GEMEINDE_SCHLUESSEL);
-				}
-
-				@Test
-				void shouldSetPostkorbId() {
-					var result = mapToNachrichtenKopf().getAbsender();
-
-					assertThat(result.getPostkorbId()).isEqualTo(AbsenderTestFactory.ABSENDER_POSTKORB_ID);
-				}
-
-				@Test
-				void shouldSetGemeindeschluesselTabelle() {
-					var result = mapToNachrichtenKopf().getAbsender();
-
-					assertThat(result.getGemeindeschluessel().getTabelle()).isEqualTo(BayernIdMessageMapper.TABELLE_NUMMER_GEMEINDE_SCHLUESSEL);
-				}
-
-			}
-
-			private NachrichtenKopfType mapToNachrichtenKopf() {
-				var bspNachricht = mapToBspNachricht();
-				assertThat(bspNachricht.getNachrichtenKopf()).isNotNull();
-				return bspNachricht.getNachrichtenKopf();
-			}
-		}
-
-		@Nested
-		class TestNachrichtenInhalt {
-
-			@Test
-			void shouldSetBetreff() {
-				var result = mapToNachrichtenInhalt();
-
-				assertThat(result.getBetreff()).isEqualTo(BayernIdMessageTestFactory.SUBJECT);
-			}
-
-			@Test
-			void shouldSetStorkQaaLevel() {
-				var result = mapToNachrichtenInhalt();
-
-				assertThat(result.getStorkQaaLevel().name()).isEqualTo(BayernIdMessageTestFactory.STORK_QAA_LEVEL);
-			}
-
-			@Test
-			void shouldSetVorgangsId() {
-				var result = mapToNachrichtenInhalt();
-
-				assertThat(result.getZuVorgang().getVorgangsId()).isEqualTo(BayernIdMessageTestFactory.VORGANG_ID);
-			}
-
-			@Nested
-			class TestMapFreiText {
-
-				@Test
-				void shouldSetEncodingSchluessel() {
-					var result = mapToFreiText();
-
-					assertThat(result.getEncoding().getSchluessel()).isEqualTo(BayernIdMessageMapper.TEXT_ENCODING_PLAIN_TEXT);
-				}
-
-				@Test
-				void shouldSetEncodingTabelle() {
-					var result = mapToFreiText();
-
-					assertThat(result.getEncoding().getTabelle()).isEqualTo(BayernIdMessageMapper.TABELLE_NUMMER_TEXT_ENCODING);
-				}
-
-				@Test
-				void shouldSetText() {
-					var result = mapToFreiText();
-
-					assertThat(result.getText()).isEqualTo(BayernIdMessageTestFactory.TEXT);
-				}
-
-				private FreiTextType mapToFreiText() {
-					var bspNachricht = mapToBspNachricht();
-					assertThat(bspNachricht.getNachrichtenInhalt().getFreiText()).isNotNull();
-					return bspNachricht.getNachrichtenInhalt().getFreiText();
-				}
-			}
-
-			@Nested
-			class TestMapAttachments {
-
-				@Test
-				void shouldSetName() {
-					var result = mapToDataContainerType();
-
-					assertThat(result.get(0).getFileName()).isEqualTo(AttachmentTestFactory.FILE_NAME);
-				}
-
-				@Test
-				void shouldSetFileType() {
-					var result = mapToDataContainerType();
-
-					assertThat(result.get(0).getFileType().getSchluessel()).isEqualTo(AttachmentTestFactory.TYPE);
-				}
-
-				@Test
-				void shouldSetFielTypeTable() {
-					var result = mapToDataContainerType();
-
-					assertThat(result.get(0).getFileType().getTabelle()).isEqualTo(BayernIdMessageMapper.TABELLE_NUMMER_MIME_TYPE);
-				}
-
-				@Test
-				void shouldSetInhalt() {
-					var result = mapToDataContainerType();
-
-					var attachmentInputStream = result.get(0);
-					assertThat(attachmentInputStream.getInhalt()).isEqualTo(AttachmentTestFactory.CONTENT);
-				}
-
-				@SneakyThrows
-				@Test
-				void shouldCloseSourceStream() {
-					var inputStream = spy(new ByteArrayInputStream(AttachmentTestFactory.CONTENT));
-
-					var r1 = mapper.toDataContainerType(AttachmentTestFactory.createBuilder().content(inputStream).build());
-
-					verify(inputStream).close();
-				}
-
-				private List<DataContainerType> mapToDataContainerType() {
-					return mapToNachrichtenInhalt().getDataContainer();
-				}
-			}
-
-			private NachrichtenInhaltType mapToNachrichtenInhalt() {
-				var bspNachricht = mapToBspNachricht();
-				assertThat(bspNachricht.getNachrichtenInhalt()).isNotNull();
-				return bspNachricht.getNachrichtenInhalt();
-			}
-		}
-
-		private BspNachricht mapToBspNachricht() {
-			return mapper.toBspNachricht(BayernIdMessageTestFactory.create());
-		}
-	}
-
-	@Nested
-	class TestMapToBayernIdResponse {
-
-		@Test
-		void shouldSetSuccess() {
-			var result = mapToBayernIdResponse();
-
-			assertThat(result.isSuccess()).isTrue();
-		}
-
-		@Test
-		void shouldSetStatus() {
-			var result = mapToBayernIdResponse();
-
-			assertThat(result.getStatus()).isEqualTo(BspQuitungTestFactory.STATUS_SCHLUESSEL);
-		}
-
-		@Test
-		void shouldSetMessage() {
-			var result = mapToBayernIdResponse();
-
-			assertThat(result.getMessage()).isEqualTo(BspQuitungTestFactory.ERGAENZENDE_HINWEISE);
-		}
-
-		private BayernIdResponse mapToBayernIdResponse() {
-			return mapper.toBayernIdResponse(BspQuitungTestFactory.create());
-		}
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdMessageTestFactory.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdMessageTestFactory.java
deleted file mode 100644
index a9de0cb463ce242f7c327f0bdf1a5de7fb1b590a..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdMessageTestFactory.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy.message;
-
-import java.util.Collections;
-import java.util.List;
-
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessage.BayernIdMessageBuilder;
-
-public class BayernIdMessageTestFactory {
-
-	public static final String MESSAGE_ID = "messageId";
-	public static final String CREATED_AT = "2021-01-01T00:00:00Z";
-	public static final String VORGANG_ID = "vorgangId";
-	public static final String SUBJECT = "subject";
-	public static final String STORK_QAA_LEVEL = "LEVEL_1";
-	public static final String TEXT = "text";
-
-	public static BayernIdMessage create() {
-		return createBuilder().build();
-	}
-
-	public static BayernIdMessageBuilder createBuilder() {
-		return BayernIdMessage.builder()
-				.messageId(MESSAGE_ID)
-				.createdAt(CREATED_AT)
-				.vorgangId(VORGANG_ID)
-				.subject(SUBJECT)
-				.storkQaaLevel(STORK_QAA_LEVEL)
-				.text(TEXT)
-				.empfaenger(EmpfaengerTestFactory.create())
-				.absender(AbsenderTestFactory.create())
-				.attachments(List.of(AttachmentTestFactory.create()));
-	}
-
-}
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdRsponseTestFactory.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdRsponseTestFactory.java
deleted file mode 100644
index a66934b4c61a437c29a15f6e426488f8f8e51ada..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BayernIdRsponseTestFactory.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy.message;
-
-public class BayernIdRsponseTestFactory {
-
-
-}
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BspQuitungTestFactory.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BspQuitungTestFactory.java
deleted file mode 100644
index a526db4943155c6b1d4301abb6374de7bcf80bd5..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/BspQuitungTestFactory.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy.message;
-
-import de.akdb.egov.bsp.nachrichten.BspQuittung;
-import de.akdb.egov.bsp.nachrichten.SchluesseltabelleType;
-
-public class BspQuitungTestFactory {
-
-	public static final String STATUS_SCHLUESSEL = "OK";
-	public static final String ERGAENZENDE_HINWEISE = "Hinweis";
-
-	public static BspQuittung create() {
-		var statusTable  = new SchluesseltabelleType();
-		statusTable.setSchluessel(STATUS_SCHLUESSEL);
-		var quittung = new BspQuittung();
-		quittung.setAnnahmeErfolgreich(true);
-		quittung.setErgebnisStatus(statusTable);
-		quittung.setErgaenzendeHinweise(ERGAENZENDE_HINWEISE);
-		return quittung;
-	}
-}
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/EmpfaengerTestFactory.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/EmpfaengerTestFactory.java
deleted file mode 100644
index ce10fb25a7a096df6b04309a52b80d8bd1ecaa85..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/message/EmpfaengerTestFactory.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy.message;
-
-public class EmpfaengerTestFactory {
-
-	public static final String POSTKORB_ID = "postfachId";
-	public static final String NAME = "name";
-	public static final String ANSCHRIFT = "anschrift";
-
-	public static Empfaenger create() {
-		return createBuilder().build();
-	}
-
-	public static Empfaenger.EmpfaengerBuilder createBuilder() {
-		return Empfaenger.builder()
-				.postkorbId(POSTKORB_ID)
-				.name(NAME)
-				.anschrift(ANSCHRIFT);
-	}
-}
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/BayernIdResponse.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/BayernIdResponse.java
deleted file mode 100644
index 7e580efe72ed4adf560a30d132329b182808ab35..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/BayernIdResponse.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy.mock;
-
-import lombok.Builder;
-import lombok.Getter;
-
-@Builder
-@Getter
-public class BayernIdResponse {
-
-	private boolean success;
-	private String status;
-	private String message;
-
-}
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/GrpcBayernIdProxyTestClient.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/GrpcBayernIdProxyTestClient.java
deleted file mode 100644
index 14377844a1a24d94727bb4e32893e0b36ffcec43..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/GrpcBayernIdProxyTestClient.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy.mock;
-
-import java.io.InputStream;
-import java.util.Set;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.commons.lang3.tuple.Pair;
-
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.BayernIdProxyServiceGrpc;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcAttachmentMetadata;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcBayernIdMessageMetadata;
-import lombok.RequiredArgsConstructor;
-import lombok.SneakyThrows;
-
-@RequiredArgsConstructor
-public class GrpcBayernIdProxyTestClient {
-
-	static final int CHUNK_SIZE = 255 * 1024;
-
-	private final BayernIdProxyServiceGrpc.BayernIdProxyServiceStub serviceStub;
-
-	@SneakyThrows
-	public BayernIdResponse sendMessage(GrpcBayernIdMessageMetadata messageMetadata, Set<Pair<GrpcAttachmentMetadata, InputStream>> attachments) throws
-			ExecutionException {
-		var streamer = new MockChunkedDataStreamer(messageMetadata, attachments, CHUNK_SIZE);
-		var future = new CompletableFuture<BayernIdResponse>();
-		serviceStub.sendMessageAsStream(new MockBayernIdSendStreamObserver(future, streamer));
-		return future.get(10, TimeUnit.SECONDS);
-	}
-
-}
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/MockBayernIdInitializer.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/MockBayernIdInitializer.java
deleted file mode 100644
index b8783960212ad82bc38654f8103e29deeb5027f2..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/MockBayernIdInitializer.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy.mock;
-
-import static com.github.tomakehurst.wiremock.client.WireMock.*;
-
-import com.github.tomakehurst.wiremock.junit5.WireMockRuntimeInfo;
-
-import lombok.RequiredArgsConstructor;
-
-@RequiredArgsConstructor
-public class MockBayernIdInitializer {
-
-	private static final String RESPONSE_TEMPLATE = """
-			<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
-				<SOAP-ENV:Header/>
-				<SOAP-ENV:Body>
-					<ns2:sendBspNachrichtNativeOutput xmlns:ns2="urn:akdb:bsp:postkorb:komm:webservice">
-						<bspQuittung>%s</bspQuittung>
-					</ns2:sendBspNachrichtNativeOutput>
-				</SOAP-ENV:Body>
-			</SOAP-ENV:Envelope>
-						""";
-	public static final String BSP_NACHRICHT_SUCCESS = "&lt;?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?&gt;&lt;BspQuittung version=\"1.5\" fassung=\"2020-03-15\" xmlns=\"http://www.akdb.de/egov/bsp/nachrichten\"&gt;&lt;AnnahmeErfolgreich&gt;true&lt;/AnnahmeErfolgreich&gt;&lt;ErgebnisStatus&gt;&lt;Tabelle&gt;9006&lt;/Tabelle&gt;&lt;Schluessel&gt;0&lt;/Schluessel&gt;&lt;/ErgebnisStatus&gt;&lt;ErgaenzendeHinweise&gt;Nachricht wurde angenommen&lt;/ErgaenzendeHinweise&gt;&lt;/BspQuittung&gt;";
-	public static final String BSP_NACHRICHT_ERROR = "&lt;?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?&gt;&lt;BspQuittung version=\"1.5\" fassung=\"2020-03-15\" xmlns=\"http://www.akdb.de/egov/bsp/nachrichten\"&gt;&lt;AnnahmeErfolgreich&gt;false&lt;/AnnahmeErfolgreich&gt;&lt;ErgebnisStatus&gt;&lt;Tabelle&gt;9006&lt;/Tabelle&gt;&lt;Schluessel&gt;31&lt;/Schluessel&gt;&lt;/ErgebnisStatus&gt;&lt;ErgaenzendeHinweise&gt;Unzulässiger Nachrichteninhalt&lt;/ErgaenzendeHinweise&gt;&lt;/BspQuittung&gt;";
-
-	public final WireMockRuntimeInfo wmRuntimeInfo;
-
-	public void createResponseOk() {
-		wmRuntimeInfo.getWireMock().register(
-				post("/").willReturn(aResponse()
-						.withStatus(200)
-						.withHeader("Content-Type", "text/xml")
-						.withHeader("charset", "UTF-8")
-						.withBody(RESPONSE_TEMPLATE.formatted(BSP_NACHRICHT_SUCCESS))
-				));
-	}
-
-	public void createResponseError() {
-		wmRuntimeInfo.getWireMock().register(
-				post("/").willReturn(aResponse()
-						.withStatus(200)
-						.withHeader("Content-Type", "text/xml")
-						.withHeader("charset", "UTF-8")
-						.withBody(RESPONSE_TEMPLATE.formatted(BSP_NACHRICHT_ERROR))
-				));
-	}
-
-	public void createResponseWithException() {
-		wmRuntimeInfo.getWireMock().register(
-				post("/").willReturn(aResponse()
-						.withStatus(200)
-						.withHeader("Content-Type", "text/xml")
-						.withHeader("charset", "UTF-8")
-						.withBody("Internal Server Error")
-				));
-	}
-
-	public void create500Response() {
-		wmRuntimeInfo.getWireMock().register(
-				post("/").willReturn(aResponse()
-						.withStatus(500)
-						.withBody("Internal Server Error")
-				));
-	}
-
-}
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/MockBayernIdSendStreamObserver.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/MockBayernIdSendStreamObserver.java
deleted file mode 100644
index 242136773ccd360dba8ebb019b4113b579f5668a..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/MockBayernIdSendStreamObserver.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy.mock;
-
-import java.util.concurrent.CompletableFuture;
-
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageRequest;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageResponse;
-import io.grpc.stub.ClientCallStreamObserver;
-import io.grpc.stub.ClientResponseObserver;
-import lombok.AccessLevel;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-
-@RequiredArgsConstructor(access = AccessLevel.PROTECTED)
-class MockBayernIdSendStreamObserver implements ClientResponseObserver<GrpcSendBayernIdMessageRequest, GrpcSendBayernIdMessageResponse> {
-
-	private final CompletableFuture<BayernIdResponse> fileIdFuture;
-	private final MockChunkedDataStreamer fileStreamer;
-
-	@Getter
-	private BayernIdResponse bayernIdResponse;
-
-	private ClientCallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver;
-
-	@Override
-	public void beforeStart(ClientCallStreamObserver<GrpcSendBayernIdMessageRequest> requestStream) {
-		this.requestObserver = requestStream;
-		requestObserver.setOnReadyHandler(() -> fileStreamer.sendChunkedTo(requestObserver));
-	}
-
-	@Override
-	public void onNext(GrpcSendBayernIdMessageResponse response) {
-		bayernIdResponse = BayernIdResponse.builder().success(response.getSuccess()).message(response.getMessage()).status(response.getStatus())
-				.build();
-	}
-
-	@Override
-	public void onError(Throwable t) {
-		fileIdFuture.completeExceptionally(t);
-	}
-
-	@Override
-	public void onCompleted() {
-		fileIdFuture.complete(bayernIdResponse);
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/MockChunkedDataStreamer.java b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/MockChunkedDataStreamer.java
deleted file mode 100644
index 3ecf22321e0254432f47efd0cacc4302fc6b119d..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/mock/MockChunkedDataStreamer.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid.proxy.mock;
-
-import static java.util.Objects.*;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Set;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang3.tuple.Pair;
-
-import com.google.protobuf.ByteString;
-
-import de.ozgcloud.common.errorhandling.TechnicalException;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcAttachmentMetadata;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcAttachments;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcBayernIdMessageMetadata;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageRequest;
-import io.grpc.stub.CallStreamObserver;
-import lombok.extern.log4j.Log4j2;
-
-@Log4j2
-class MockChunkedDataStreamer {
-
-	private Set<Pair<GrpcAttachmentMetadata, InputStream>> attachments;
-	private final int chunkSize;
-	private boolean isFinished = false;
-	private GrpcBayernIdMessageMetadata messageMetadata;
-
-	public MockChunkedDataStreamer(GrpcBayernIdMessageMetadata metadata, Set<Pair<GrpcAttachmentMetadata, InputStream>> attachments, int chunkSize) {
-		this.messageMetadata = metadata;
-		this.attachments = attachments;
-		this.chunkSize = chunkSize;
-	}
-
-	public synchronized void sendChunkedTo(CallStreamObserver<GrpcSendBayernIdMessageRequest> streamObserver) {
-		if (isFinished) {
-			return;
-		}
-		sendMessageMetadata(streamObserver);
-		attachments.forEach(attachment -> {
-			sendAttachmentMetadata(attachment.getLeft(), streamObserver);
-			sendContentChunked(attachment.getRight(), streamObserver);
-		});
-		handleFileEndReached(streamObserver);
-	}
-
-	void sendContentChunked(InputStream contentStream, CallStreamObserver<GrpcSendBayernIdMessageRequest> streamObserver) {
-		var inProgerss = true;
-		do {
-			int size = sendNextChunk(contentStream, streamObserver);
-			if (size < chunkSize) {
-				sendNextChunk(contentStream, streamObserver);
-				inProgerss = false;
-			}
-		} while (inProgerss && streamObserver.isReady());
-		IOUtils.closeQuietly(contentStream);
-	}
-
-	void sendMessageMetadata(CallStreamObserver<GrpcSendBayernIdMessageRequest> streamObserver) {
-		if (nonNull(messageMetadata)) {
-			streamObserver.onNext(buildRequestWithMetadata(messageMetadata));
-			messageMetadata = null;
-		}
-	}
-
-	GrpcSendBayernIdMessageRequest buildRequestWithMetadata(GrpcBayernIdMessageMetadata metadata) {
-		return GrpcSendBayernIdMessageRequest.newBuilder().setMessageMetadata(metadata).build();
-	}
-
-	void sendAttachmentMetadata(GrpcAttachmentMetadata metadata, CallStreamObserver<GrpcSendBayernIdMessageRequest> streamObserver) {
-		streamObserver.onNext(buildRequestWithAttachmentMetadata(metadata));
-	}
-
-	GrpcSendBayernIdMessageRequest buildRequestWithAttachmentMetadata(GrpcAttachmentMetadata attachmentMetadata) {
-		return GrpcSendBayernIdMessageRequest.newBuilder()
-				.setAttachments(GrpcAttachments.newBuilder().setAttachmentMetadata(attachmentMetadata).build()).build();
-	}
-
-	private int sendNextChunk(InputStream contentStream, CallStreamObserver<GrpcSendBayernIdMessageRequest> streamObserver) {
-		try {
-			var content = contentStream.readNBytes(chunkSize);
-			var size = content.length;
-			if (size > 0) {
-				streamObserver.onNext(buildRequestWithContent(content));
-			}
-			return size;
-		} catch (IOException e) {
-			throw new TechnicalException("Error on sending a single chunk", e);
-		}
-	}
-
-	GrpcSendBayernIdMessageRequest buildRequestWithContent(byte[] bytes) {
-		return GrpcSendBayernIdMessageRequest.newBuilder().setAttachments(GrpcAttachments.newBuilder().setContent(ByteString.copyFrom(bytes)).build())
-				.build();
-	}
-
-	synchronized void handleFileEndReached(CallStreamObserver<GrpcSendBayernIdMessageRequest> streamObserver) {
-		isFinished = true;
-		streamObserver.onCompleted();
-	}
-
-}
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension
deleted file mode 100644
index 79b126e6cdb86bec1f4f08c205de8961bde1934a..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension
+++ /dev/null
@@ -1 +0,0 @@
-org.mockito.junit.jupiter.MockitoExtension
\ No newline at end of file
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/application-itcase.yml b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/application-itcase.yml
deleted file mode 100644
index d4d24173ab74f278b1e07c54dc468805f8965fdc..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/application-itcase.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-logging:
-  level:
-    ROOT: INFO
-    '[org.springframework]': WARN
-    '[de.ozgcloud]': INFO
-  config: classpath:log4j2-local.xml
-
-grpc:
-  server:
-    port: -1
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/junit-platform.properties b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/junit-platform.properties
deleted file mode 100644
index 1cebb76d5a58ac034b2627d12411d82d1e85821e..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/junit-platform.properties
+++ /dev/null
@@ -1 +0,0 @@
-junit.jupiter.extensions.autodetection.enabled = true
\ No newline at end of file
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
deleted file mode 100644
index ca6ee9cea8ec189a088d50559325d4e84ff8ad09..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
+++ /dev/null
@@ -1 +0,0 @@
-mock-maker-inline
\ No newline at end of file
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/test.pdf b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/test.pdf
deleted file mode 100644
index 184dd5915515ca49dfaa8840883e6259d2a667aa..0000000000000000000000000000000000000000
Binary files a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/test.pdf and /dev/null differ
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/test.txt b/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/test.txt
deleted file mode 100644
index 814be41a4bbeee81df9c0f296e3fcc3a3cef33f0..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-impl/src/test/resources/test.txt
+++ /dev/null
@@ -1 +0,0 @@
-some simple text
\ No newline at end of file
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-interface/pom.xml b/nachrichten-bayernid-proxy/bayernid-proxy-interface/pom.xml
deleted file mode 100644
index a13a3569467ee6c23ec1555ec0d047ec5ee61260..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-interface/pom.xml
+++ /dev/null
@@ -1,121 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (C) 2022-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.
-
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>de.ozgcloud.common</groupId>
-		<artifactId>ozgcloud-common-dependencies</artifactId>
-		<version>4.0.1</version>
-		<relativePath/>
-	</parent>
-
-	<groupId>de.ozgcloud.nachrichten</groupId>
-	<artifactId>bayernid-proxy-interface</artifactId>
-	<version>0.3.0-SNAPSHOT</version>
-
-	<name>OZG-Cloud BayernID Proxy Interface</name>
-	<description>Interface (gRPC) for BayernID Proxy Service</description>
-
-	<properties>
-		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
-		<java.version>21</java.version>
-		<maven.compiler.source>${java.version}</maven.compiler.source>
-		<maven.compiler.target>${java.version}</maven.compiler.target>
-
-		<find-and-replace-maven-plugin.version>1.1.0</find-and-replace-maven-plugin.version>
-	</properties>
-
-	<dependencies>
-		<!-- GRPC -->
-		<dependency>
-			<groupId>io.grpc</groupId>
-			<artifactId>grpc-stub</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>io.grpc</groupId>
-			<artifactId>grpc-protobuf</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>jakarta.annotation</groupId>
-			<artifactId>jakarta.annotation-api</artifactId>
-		</dependency>
-	</dependencies>
-
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>com.github.os72</groupId>
-				<artifactId>protoc-jar-maven-plugin</artifactId>
-				<version>${protoc-jar-plugin.version}</version>
-				<executions>
-					<execution>
-						<phase>generate-sources</phase>
-						<goals>
-							<goal>run</goal>
-						</goals>
-						<configuration>
-							<includeMavenTypes>direct</includeMavenTypes>
-							<outputTargets>
-								<outputTarget>
-									<type>java</type>
-								</outputTarget>
-								<outputTarget>
-									<type>grpc-java</type>
-									<pluginArtifact>io.grpc:protoc-gen-grpc-java:${protoc-gen.version}</pluginArtifact>
-								</outputTarget>
-							</outputTargets>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-			<plugin>
-				<groupId>io.github.floverfelt</groupId>
-				<artifactId>find-and-replace-maven-plugin</artifactId>
-				<version>${find-and-replace-maven-plugin.version}</version>
-				<executions>
-					<execution>
-						<id>exec</id>
-						<phase>process-sources</phase>
-						<goals>
-							<goal>find-and-replace</goal>
-						</goals>
-						<configuration>
-							<replacementType>file-contents</replacementType>
-							<baseDir>target/generated-sources/</baseDir>
-							<findRegex>javax</findRegex>
-							<replaceValue>jakarta</replaceValue>
-							<recursive>true</recursive>
-							<fileMask>.java</fileMask>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
-</project>
\ No newline at end of file
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-interface/src/main/protobuf/bayernidproxy.model.proto b/nachrichten-bayernid-proxy/bayernid-proxy-interface/src/main/protobuf/bayernidproxy.model.proto
deleted file mode 100644
index 91ed9ee0ab3f2db2c03907d0b12447fddab01bd9..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-interface/src/main/protobuf/bayernidproxy.model.proto
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * 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.
- */
-syntax = "proto3";
-
-package de.ozgcloud.nachrichten.postfach.bayernid.proxy;
-
-option java_multiple_files = true;
-option java_package = "de.ozgcloud.nachrichten.postfach.bayernid.proxy";
-option java_outer_classname = "BayernIdProxyModelProto";
-
-message GrpcSendBayernIdMessageRequest {
-  oneof request {
-    GrpcBayernIdMessageMetadata messageMetadata = 1;
-    GrpcAttachments attachments = 2;
-  }
-}
-
-message GrpcBayernIdMessageMetadata {
-  string messageId = 1;
-  string createdAt = 2;
-  GrpcAbsender absender = 3;
-  GrpcEmpfaenger empfaenger = 4;
-  string subject = 5;
-  string storkQaaLevel = 6;
-  string vorgangId = 7;
-  string text = 8;
-}
-
-message GrpcAbsender {
-  string name = 1;
-  string anschrift = 2;
-  string email = 3;
-  string telefon = 4;
-  string hyperlink = 5;
-  string dienst = 6;
-  string mandant = 7;
-  string gemeindeschluessel = 8;
-}
-
-message GrpcEmpfaenger {
-  string postkorbId = 1;
-  string name = 2;
-  string anschrift = 3;
-}
-
-message GrpcAttachments {
-  oneof request {
-    GrpcAttachmentMetadata attachmentMetadata = 1;
-    bytes content = 2;
-  }
-}
-
-message GrpcAttachmentMetadata {
-  string fileType = 1;
-  string fileName = 2;
-}
-
-message GrpcSendBayernIdMessageResponse {
-  bool success = 1;
-  string status = 2;
-  string message = 3;
-}
diff --git a/nachrichten-bayernid-proxy/bayernid-proxy-interface/src/main/protobuf/bayernproxy.proto b/nachrichten-bayernid-proxy/bayernid-proxy-interface/src/main/protobuf/bayernproxy.proto
deleted file mode 100644
index 039909e0f942195f3bc600bf04746a9c8af5f1b6..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/bayernid-proxy-interface/src/main/protobuf/bayernproxy.proto
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * 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.
- */
-syntax = "proto3";
-
-package de.ozgcloud.nachrichten.postfach.bayernid.proxy;
-
-import "bayernidproxy.model.proto";
-
-option java_multiple_files = true;
-option java_package = "de.ozgcloud.nachrichten.postfach.bayernid.proxy";
-option java_outer_classname = "BayernIdProxyProto";
-
-service BayernIdProxyService {
-
-  rpc SendMessageAsStream(stream GrpcSendBayernIdMessageRequest) returns (GrpcSendBayernIdMessageResponse);
-
-}
diff --git a/nachrichten-bayernid-proxy/pom.xml b/nachrichten-bayernid-proxy/pom.xml
deleted file mode 100644
index 297ab93399fcecfa16072733fe5915ad84039b09..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/pom.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (C) 2022-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.
-
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-		 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>de.ozgcloud.common</groupId>
-		<artifactId>ozgcloud-common-parent</artifactId>
-		<version>4.0.1-SNAPSHOT</version>
-		<relativePath/>
-	</parent>
-
-	<groupId>de.ozgcloud.nachrichten</groupId>
-	<artifactId>nachrichten-bayernid-proxy</artifactId>
-	<version>0.3.0-SNAPSHOT</version>
-	<packaging>pom</packaging>
-
-	<name>OZG-Cloud BayernID Proxy</name>
-	<description>Proxy Service for BayernID</description>
-
-	<modules>
-		<module>bayernid-proxy-impl</module>
-		<module>bayernid-proxy-interface</module>
-	</modules>
-
-	<properties>
-		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
-		<java.version>21</java.version>
-		<maven.compiler.source>${java.version}</maven.compiler.source>
-		<maven.compiler.target>${java.version}</maven.compiler.target>
-		<jaxb-maven-plugin.version>4.0.0</jaxb-maven-plugin.version>
-		<wiremock.version>3.5.1</wiremock.version>
-	</properties>
-
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>com.mycila</groupId>
-				<artifactId>license-maven-plugin</artifactId>
-			</plugin>
-		</plugins>
-	</build>
-</project>
\ No newline at end of file
diff --git a/nachrichten-bayernid-proxy/run_helm_test.sh b/nachrichten-bayernid-proxy/run_helm_test.sh
deleted file mode 100755
index 21019cc23dab325f1ec88421dc73caa849af660f..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/run_helm_test.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-
-set -e
-
-helm template  ./src/main/helm/ -f src/test/helm-linter-values.yaml
-helm lint -f src/test/helm-linter-values.yaml ./src/main/helm/
-cd src/main/helm && helm unittest -f '../../test/helm/*.yaml'  .
-
diff --git a/nachrichten-bayernid-proxy/src/main/helm/.helmignore b/nachrichten-bayernid-proxy/src/main/helm/.helmignore
deleted file mode 100644
index 3d0dbe446770be5127eb719b695414c427b09715..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/src/main/helm/.helmignore
+++ /dev/null
@@ -1 +0,0 @@
-tests/
\ No newline at end of file
diff --git a/nachrichten-bayernid-proxy/src/main/helm/Chart.yaml b/nachrichten-bayernid-proxy/src/main/helm/Chart.yaml
deleted file mode 100644
index b04099d33913b9524a729a95a20dc769f5663839..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/src/main/helm/Chart.yaml
+++ /dev/null
@@ -1,30 +0,0 @@
-#
-# Copyright (C) 2022 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.
-#
-
-apiVersion: v1
-appVersion: "1.0"
-description: A Helm chart for Bayernid-Proxy
-name: bayernid-proxy
-version: 0.0.0-MANAGED-BY-JENKINS
-icon: https://simpleicons.org/icons/helm.svg
diff --git a/nachrichten-bayernid-proxy/src/main/helm/templates/_helpers.tpl b/nachrichten-bayernid-proxy/src/main/helm/templates/_helpers.tpl
deleted file mode 100644
index 0ea6c8d8c9dd30157cc593c949f47a7be8a738a2..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/src/main/helm/templates/_helpers.tpl
+++ /dev/null
@@ -1,47 +0,0 @@
-
-{{/* Default Labels: Helm recommended best-practice labels https://helm.sh/docs/chart_best_practices/labels/ */}}
-{{- define "app.defaultLabels" }}
-app.kubernetes.io/instance: bayernid-proxy
-app.kubernetes.io/managed-by: {{ .Release.Service }}
-app.kubernetes.io/name: {{ .Release.Name }}
-app.kubernetes.io/namespace: {{ .Release.Namespace }}
-app.kubernetes.io/part-of: ozgcloud
-app.kubernetes.io/version: {{ .Chart.Version }}
-helm.sh/chart: {{ printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" }}
-app.kubernetes.io/component: bayernid-proxy
-component: bayernid-proxy
-{{- end -}}
-
-{{- define "app.matchLabels" }}
-app.kubernetes.io/name: {{ .Release.Name }}
-app.kubernetes.io/namespace: {{ .Release.Namespace }}
-component: bayernid-proxy
-{{- end -}}
-
-{{- define "app.envSpringProfiles" }}
-{{- if (.Values.env).overrideSpringProfiles -}}
-{{ printf "%s" (.Values.env).overrideSpringProfiles }}
-{{- else -}}
-{{ printf "oc, %s" (include "app.ozgcloudEnvironment" . ) }}
-{{- end -}}
-{{- end -}}
-
-{{- define "app.ozgcloudEnvironment" -}}
-{{- required "ozgcloud.environment muss angegeben sein" (.Values.ozgcloud).environment -}}
-{{- end -}}
-
-
-{{ define "app.zertifikatPath" }}
-{{- required "ozgcloud zertifikat path muss angegeben sein" (.Values.ozgcloud).bayernid.zertifikat.path -}}
-{{- end -}}
-
-
-{{ define "app.zertifikatFilename" }}
-{{- required "ozgcloud zertifikat fileName muss angegeben sein" (.Values.ozgcloud).bayernid.zertifikat.fileName -}}
-{{- end -}}
-
-
-{{- define "app.serviceAccountName" -}}
-{{ printf "%s" ( (.Values.serviceAccount).name | default "bayernid-proxy-service-account" ) }}
-{{- end -}}
-
diff --git a/nachrichten-bayernid-proxy/src/main/helm/templates/configmap_bindings_type.yaml b/nachrichten-bayernid-proxy/src/main/helm/templates/configmap_bindings_type.yaml
deleted file mode 100644
index d56b2505d154567012dff38fe9ef5b50887b45a5..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/src/main/helm/templates/configmap_bindings_type.yaml
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-# Copyright (C) 2022 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.
-#
-
-apiVersion: v1
-kind: ConfigMap
-metadata:
-  name: bindings-type
-  namespace: {{ .Release.Namespace }}
-data:
-  type: |
-    ca-certificates
\ No newline at end of file
diff --git a/nachrichten-bayernid-proxy/src/main/helm/templates/deployment.yaml b/nachrichten-bayernid-proxy/src/main/helm/templates/deployment.yaml
deleted file mode 100644
index b3169c97d56ffc2da535e79f0c7f929a69f2f07d..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/src/main/helm/templates/deployment.yaml
+++ /dev/null
@@ -1,166 +0,0 @@
-#
-# Copyright (C) 2022 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.
-#
-
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: {{ .Release.Name }}
-  namespace: {{ .Release.Namespace }}
-  labels:
-    {{- include "app.defaultLabels" . | indent 4 }}
-spec:
-  progressDeadlineSeconds: 600
-  replicas: {{ .Values.replicaCount }}
-  revisionHistoryLimit: 10
-  selector:
-    matchLabels:
-      {{- include "app.matchLabels" . | indent 6 }}
-  strategy:
-    rollingUpdate:
-      maxSurge: 1
-      maxUnavailable: 0
-    type: RollingUpdate
-  template:
-    metadata:
-      labels:
-        {{- include "app.defaultLabels" . | indent 8 }}
-    spec:  
-      {{- if (.Values.serviceAccount).create }}
-      serviceAccountName: {{ include "app.serviceAccountName" . }}
-      {{- end }}
-      topologySpreadConstraints:
-      - maxSkew: 1
-        topologyKey: kubernetes.io/hostname
-        whenUnsatisfiable: ScheduleAnyway
-        labelSelector:
-          matchLabels:
-            app.kubernetes.io/name: {{ .Release.Name }}
-      containers:
-      - env:
-          - name: SERVICE_BINDING_ROOT
-            value: "/bindings"
-          - name: spring_profiles_active
-            value: {{ include "app.envSpringProfiles" . }}
-
-          {{- with (.Values.env).customList }}
-{{ toYaml . | indent 10 }}
-          {{- end }}
-
-          - name: ozgcloud_bayernid_server
-            value: {{ required "ozgcloud.bayernid.server must be set" (.Values.ozgcloud).bayernid.server }}
-
-          - name: spring_ssl_bundle_jks_bayern-id-ca_keystore_location
-            value: "/keystore/bayernid/bayern-id-ca.p12"
-          - name: spring_ssl_bundle_jks_bayern-id-ca_keystore_type
-            value: PKCS12
-          - name: spring_ssl_bundle_jks_bayern-id-ca_keystore_password
-            valueFrom:
-              secretKeyRef:
-                name: {{ required "ozgcloud.bayernid.certificateSecretName must be set" ((.Values.ozgcloud).bayernid).certificateSecretName }}
-                key: password
-                optional: false
-
-        image: "{{ .Values.image.repo }}/{{ .Values.image.name }}:{{ coalesce (.Values.image).tag "latest" }}"
-        imagePullPolicy: Always
-        name: bayernid-proxy
-        ports:
-          - containerPort: 9090
-            name: grpc-9090
-            protocol: TCP
-          - containerPort: 8081
-            name: metrics
-            protocol: TCP
-        readinessProbe:
-          failureThreshold: 3
-          httpGet:
-            path: /actuator/health/readiness
-            port: 8081
-            scheme: HTTP
-          periodSeconds: 10
-          successThreshold: 1
-          timeoutSeconds: 3
-        startupProbe:
-          httpGet:
-            path: /actuator/health/readiness
-            port: 8081
-            scheme: HTTP
-          failureThreshold: 10
-          initialDelaySeconds: 20
-          periodSeconds: 10
-          successThreshold: 1
-          timeoutSeconds: 5
-        resources:
-        {{- with .Values.resources }}
-{{ toYaml . | indent 10 }}
-        {{- end }}
-        securityContext:
-          allowPrivilegeEscalation: false
-          privileged: false
-          readOnlyRootFilesystem: false
-          runAsNonRoot: true
-          {{- with (.Values.securityContext).runAsUser }}
-          runAsUser: {{ . }}
-          {{- end }}
-          {{- with (.Values.securityContext).runAsGroup }}
-          runAsGroup: {{ . }}
-          {{- end }}
-        stdin: true
-        terminationMessagePath: /dev/termination-log
-        terminationMessagePolicy: File
-        tty: true
-        volumeMounts:
-          - name: bindings
-            mountPath: "/bindings/ca-certificates/type"
-            subPath: type
-            readOnly: true
-          - name: bayern-id-ca
-            mountPath: "/keystore/bayernid/bayern-id-ca.p12"
-            subPath: zertifikat
-            readOnly: true
-          - name: temp-dir
-            mountPath: "/tmp"
-      
-      volumes: 
-        - name: bindings
-          configMap:
-            name: bindings-type
-        - name: bayern-id-ca
-          secret:
-            secretName: {{ required "ozgcloud.bayernid.certificateSecretName must be set" ((.Values.ozgcloud).bayernid).certificateSecretName }}
-            optional: false
-        - name: temp-dir
-          emptyDir: {}
-      dnsConfig: {}
-      dnsPolicy: ClusterFirst
-      imagePullSecrets:
-      - name: {{ required "imagePullSecret must be set" .Values.imagePullSecret  }}
-   
-      restartPolicy: Always
-      {{- with .Values.hostAliases }}
-      hostAliases:
-{{ toYaml . | indent 8 }}
-      {{- end }}
-      schedulerName: default-scheduler
-      securityContext: {}
-      terminationGracePeriodSeconds: 30
diff --git a/nachrichten-bayernid-proxy/src/main/helm/templates/network_policy.yaml b/nachrichten-bayernid-proxy/src/main/helm/templates/network_policy.yaml
deleted file mode 100644
index 95cd70f64a419cc1e585a2f977f48d45aae0eaee..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/src/main/helm/templates/network_policy.yaml
+++ /dev/null
@@ -1,72 +0,0 @@
-#
-# 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.
-#
-
-{{- if not (.Values.networkPolicy).disabled }} 
-apiVersion: networking.k8s.io/v1
-kind: NetworkPolicy
-metadata:
-  name: network-policy-bayernid-proxy
-  namespace: {{ .Release.Namespace }}
-spec:
-  podSelector:
-    matchLabels:
-      component: bayernid-proxy
-  policyTypes:
-    - Ingress
-    - Egress
-  ingress:
-  - ports:
-    - port: 9090
-    from:
-    - podSelector: 
-        matchLabels:
-          component: vorgang-manager
-{{- with (.Values.networkPolicy).additionalIngressConfig }}
-{{ toYaml . | indent 2 }}
-{{- end }}
-{{- with (.Values.networkPolicy).additionalIngressConfigNamespace }}
-{{ toYaml . | indent 2 }}
-{{- end }}
-  egress:
-  - to:
-    - namespaceSelector:
-        matchLabels:
-          kubernetes.io/metadata.name: {{ required "networkPolicy.dnsServerNamespace must be set" (.Values.networkPolicy).dnsServerNamespace }}
-    ports:
-      - port: 53
-        protocol: UDP
-      - port: 53
-        protocol: TCP
-      - port: 5353
-        protocol: UDP
-      - port: 5353
-        protocol: TCP
-{{- with (.Values.networkPolicy).additionalEgressConfig }}
-{{ toYaml . | indent 2 }}
-{{- end }}
-{{- with (.Values.networkPolicy).additionalEgressConfigNamespace }}
-{{ toYaml . | indent 2 }}
-{{- end }}
-
-{{- end }}
\ No newline at end of file
diff --git a/nachrichten-bayernid-proxy/src/main/helm/templates/service.yaml b/nachrichten-bayernid-proxy/src/main/helm/templates/service.yaml
deleted file mode 100644
index ed6467de511d8fddec146bd3fb2a96791f7f7a8f..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/src/main/helm/templates/service.yaml
+++ /dev/null
@@ -1,42 +0,0 @@
-#
-# Copyright (C) 2022 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.
-#
-
-apiVersion: v1
-kind: Service
-metadata:
-  name: {{.Release.Name }}
-  namespace: {{ .Release.Namespace }}
-  labels:
-    {{- include "app.defaultLabels" . | indent 4 }}
-spec:
-  type: ClusterIP
-  ports:
-    - name: grpc-9090
-      port: 9090
-      protocol: TCP
-    - name: metrics
-      port: 8081
-      protocol: TCP
-  selector:
-    {{- include "app.matchLabels" . | indent 4 }}
diff --git a/nachrichten-bayernid-proxy/src/main/helm/templates/service_account.yaml b/nachrichten-bayernid-proxy/src/main/helm/templates/service_account.yaml
deleted file mode 100644
index 231d53f52dfe67b27f474ebf552d1e10a052f042..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/src/main/helm/templates/service_account.yaml
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# 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.
-#
-
-{{- if (.Values.serviceAccount).create }}
-apiVersion: v1
-kind: ServiceAccount
-metadata:
-  name: {{ include "app.serviceAccountName" . }}
-  namespace: {{ .Release.Namespace }}
-{{- end }}
\ No newline at end of file
diff --git a/nachrichten-bayernid-proxy/src/main/helm/values.yaml b/nachrichten-bayernid-proxy/src/main/helm/values.yaml
deleted file mode 100644
index 7873a672af6bddd71ca66f81988d8a80d5c0b0ca..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/src/main/helm/values.yaml
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright (C) 2022 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.
-#
-
-
-replicaCount: 2
-
-
-image:
-  repo: docker.ozg-sh.de
-  name: bayernid-proxy
-  tag: latest # [default: latest]
-
-    
-vorgangmanagerName: vorgang-manager
-
-imagePullSecret: ozgcloud-image-pull-secret
-
-
diff --git a/nachrichten-bayernid-proxy/src/test/helm-linter-values.yaml b/nachrichten-bayernid-proxy/src/test/helm-linter-values.yaml
deleted file mode 100644
index 35e31ef09343dc75bec9ea0fb5712ecaf73382ca..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/src/test/helm-linter-values.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-ozgcloud:
-  environment: test
-  bayernid:
-      server: "https://test"
-      certificateSecretName: "bayernidCertificat"
-
-networkPolicy:
-  dnsServerNamespace: test-dns-namespace
-
diff --git a/nachrichten-bayernid-proxy/src/test/helm/configmap_bindings_type_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/configmap_bindings_type_test.yaml
deleted file mode 100644
index e097f3b15d2c12e7043830c5ba2d794302f07da4..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/src/test/helm/configmap_bindings_type_test.yaml
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright (C) 2022 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.
-#
-
-suite: Certificate ConfigMap Binding
-release:
-  name: vorgang-manager
-  namespace: sh-helm-test
-templates:
-  - templates/configmap_bindings_type.yaml
-tests:
-  - it: validate configMap values
-    asserts:
-      - isKind:
-          of: ConfigMap
-      - isAPIVersion:
-          of: v1
-      - equal:
-          path: metadata.name
-          value: bindings-type
-      - equal:
-          path: metadata.namespace
-          value: sh-helm-test
-      - equal:
-          path: data
-          value:
-            type: | 
-              ca-certificates
\ No newline at end of file
diff --git a/nachrichten-bayernid-proxy/src/test/helm/deployment_actuator_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deployment_actuator_test.yaml
deleted file mode 100644
index 7fc4a5ff86f25c1d2dbda8e2cf0c6c068956e267..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/src/test/helm/deployment_actuator_test.yaml
+++ /dev/null
@@ -1,67 +0,0 @@
-#
-# Copyright (C) 2022 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.
-#
-
-suite: test deployment actuator 
-release:
-  name: bayernid-proxy
-  namespace: sh-helm-test
-templates:
-  - templates/deployment.yaml
-set:
-  ozgcloud:
-    environment: dev
-    bayernid:
-      server: "http://test"
-      certificateSecretName: "bayernidCertificat"
-tests:
-  - it: testIsDeployment
-    template: deployment.yaml
-    asserts:
-      - equal:
-          path: spec.template.spec.containers[0].readinessProbe
-          value:
-            failureThreshold: 3
-            httpGet:
-              path: /actuator/health/readiness
-              port: 8081
-              scheme: HTTP
-            periodSeconds: 10
-            successThreshold: 1
-            timeoutSeconds: 3
-      - equal: 
-          path: spec.template.spec.containers[0].startupProbe
-          value: 
-            httpGet:
-              path: /actuator/health/readiness
-              port: 8081
-              scheme: HTTP
-            failureThreshold: 10
-            initialDelaySeconds: 20
-            periodSeconds: 10
-            successThreshold: 1
-            timeoutSeconds: 5    
-        
-
-
-
diff --git a/nachrichten-bayernid-proxy/src/test/helm/deployment_bayernid_certificate_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deployment_bayernid_certificate_test.yaml
deleted file mode 100644
index 70bd21da3534b32163c0d61c1e0b24e6e5b993b9..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/src/test/helm/deployment_bayernid_certificate_test.yaml
+++ /dev/null
@@ -1,114 +0,0 @@
-#
-# 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.
-#
-
-suite: test bayernid certificate
-release:
-  name: bayernid-proxy
-  namespace: sh-helm-test
-templates:
-  - templates/deployment.yaml
-set:
-  ozgcloud:
-    environment: dev
-    bayernid:
-      server: "https://test"
-      certificateSecretName: "bayernidCertificat"
-tests:
-  - it: should contains bayernid server
-    asserts:
-      - contains:
-          path: spec.template.spec.containers[0].env
-          content:
-            name: ozgcloud_bayernid_server
-            value: "https://test"
-
-  - it: should fail when bayernid server not set 
-    set: 
-      ozgcloud:
-        environment: dev
-        bayernid:
-          server: ""
-    asserts:
-      - failedTemplate:
-          errorMessage: "ozgcloud.bayernid.server must be set"
-
-
-  - it: should set variable keystore certificate
-    asserts:
-      - contains:
-          path: spec.template.spec.containers[0].env
-          content:
-            name: spring_ssl_bundle_jks_bayern-id-ca_keystore_location
-            value: /keystore/bayernid/bayern-id-ca.p12
-
-  - it: should set variable keystore type
-    asserts:
-      - contains:
-          path: spec.template.spec.containers[0].env
-          content:
-            name: spring_ssl_bundle_jks_bayern-id-ca_keystore_type
-            value: PKCS12
-
-  - it: should set variable keystore password secret reference
-    asserts:
-      - contains:
-          path: spec.template.spec.containers[0].env
-          content:
-            name: spring_ssl_bundle_jks_bayern-id-ca_keystore_password
-            valueFrom:
-              secretKeyRef:
-                name: bayernidCertificat
-                key: password
-                optional: false
-
-  - it: should fail when secret name for bayernid certificat is not set
-    set: 
-      ozgcloud:
-        environment: dev
-        bayernid:
-          server: "bayernIdServer"
-          certificateSecretName:
-    asserts:
-      - failedTemplate:
-          errorMessage: "ozgcloud.bayernid.certificateSecretName must be set"
-
-  - it: should have volumeMount for bayernid certificate keystore
-    asserts:
-      - contains:
-          path: spec.template.spec.containers[0].volumeMounts
-          content:
-            name: bayern-id-ca
-            mountPath: "/keystore/bayernid/bayern-id-ca.p12"
-            subPath: zertifikat
-            readOnly: true
-
-  - it: should have volume for bayernid certificate keystore
-    asserts:
-      - contains:
-           path: spec.template.spec.volumes
-           content:
-              name: bayern-id-ca
-              secret:
-                 secretName: bayernidCertificat
-                 optional: false
\ No newline at end of file
diff --git a/nachrichten-bayernid-proxy/src/test/helm/deployment_bindings_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deployment_bindings_test.yaml
deleted file mode 100644
index cc051bf7be028d28fa6015d6a63ba39af6637da0..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/src/test/helm/deployment_bindings_test.yaml
+++ /dev/null
@@ -1,72 +0,0 @@
-#
-# Copyright (C) 2022 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.
-#
-
-suite: deployment bayernid-proxy bindings
-release:
-  name: bayernid-proxy
-  namespace: sh-helm-test
-templates:
-  - templates/deployment.yaml
-set:
-  ozgcloud:
-    environment: dev
-    bayernid:
-      server: "http://test"
-      certificateSecretName: "bayernidCertificat"
-tests:
-  - it: should have volumeMounts for temp folder
-    asserts:
-      - contains:
-          path: spec.template.spec.containers[0].volumeMounts
-          content:
-            name: temp-dir
-            mountPath: "/tmp"
-            
-  - it: should have volume for temp folder
-    asserts:
-      - contains:
-           path: spec.template.spec.volumes
-           content:
-              name: temp-dir
-              emptyDir: {}
-
-  - it: should have bindings-type volume
-    asserts:
-      - contains:
-          path: spec.template.spec.volumes
-          content:
-            name: bindings
-            configMap:
-              name: bindings-type  
-
-  - it: should have bindings-type volumeMount
-    asserts:
-      - contains:
-          path: spec.template.spec.containers[0].volumeMounts
-          content:
-            name: bindings
-            mountPath: "/bindings/ca-certificates/type"
-            subPath: type
-            readOnly: true
-                
\ No newline at end of file
diff --git a/nachrichten-bayernid-proxy/src/test/helm/deployment_container_basic_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deployment_container_basic_test.yaml
deleted file mode 100644
index 0da62e9e3341fbf78b3434d257fdf8b2a1fdffc2..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/src/test/helm/deployment_container_basic_test.yaml
+++ /dev/null
@@ -1,64 +0,0 @@
-#
-# Copyright (C) 2022 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.
-#
-
-suite: test deployment container basics
-release:
-  name: bayernid-proxy
-  namespace: sh-helm-test
-templates:
-  - templates/deployment.yaml
-set:
-  ozgcloud:
-    environment: dev
-    bayernid:
-      server: "http://test"
-      certificateSecretName: "bayernidCertificat"
-tests:
-  - it: should have correct values for container image, name, imagePullPolicy
-    asserts:
-      - equal:
-          path: spec.template.spec.containers[0].image
-          value: docker.ozg-sh.de/bayernid-proxy:latest
-      - equal:
-          path: spec.template.spec.containers[0].name
-          value: bayernid-proxy
-      - equal: 
-          path: spec.template.spec.containers[0].imagePullPolicy
-          value: Always
-  - it: should have correct values for container ports
-    asserts:
-      - contains: 
-          path: spec.template.spec.containers[0].ports
-          content:  
-            containerPort: 9090
-            name: grpc-9090
-            protocol: TCP
-      - contains: 
-          path: spec.template.spec.containers[0].ports
-          content:  
-            containerPort: 8081
-            name: metrics
-            protocol: TCP
-            
-            
diff --git a/nachrichten-bayernid-proxy/src/test/helm/deployment_container_other_values_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deployment_container_other_values_test.yaml
deleted file mode 100644
index 8daa93f0c87ba344c70622e885c22a92a461f100..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/src/test/helm/deployment_container_other_values_test.yaml
+++ /dev/null
@@ -1,52 +0,0 @@
-   
-   #
-# Copyright (C) 2022 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.
-#
-
-suite: test deployment container other values
-release:
-  name: bayernid-proxy
-  namespace: sh-helm-test
-templates:
-  - templates/deployment.yaml
-set:
-  ozgcloud:
-    environment: dev
-    bayernid:
-      server: "http://test"
-      certificateSecretName: "bayernidCertificat"
-tests:
-  - it: should have correct values for container terminationMessagePolicy, terminationMessagePath, stdin, tty
-    asserts:
-      - equal:
-          path: spec.template.spec.containers[0].terminationMessagePolicy
-          value: File
-      - equal:
-          path: spec.template.spec.containers[0].terminationMessagePath
-          value: /dev/termination-log
-      - equal: 
-          path: spec.template.spec.containers[0].stdin
-          value: true
-      - equal: 
-          path: spec.template.spec.containers[0].tty
-          value: true
\ No newline at end of file
diff --git a/nachrichten-bayernid-proxy/src/test/helm/deployment_container_security_context_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deployment_container_security_context_test.yaml
deleted file mode 100644
index 5b6103b0ef2624acd8f70ffab8a370ec28401ba3..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/src/test/helm/deployment_container_security_context_test.yaml
+++ /dev/null
@@ -1,69 +0,0 @@
-#
-# Copyright (C) 2022 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.
-#
-
-suite: test deployment container security context
-release:
-  name: bayernid-proxy
-  namespace: sh-helm-test
-templates:
-  - templates/deployment.yaml
-set:
-  ozgcloud:
-    environment: dev
-    bayernid:
-      server: "http://test"
-      certificateSecretName: "bayernidCertificat"
-tests:
-  - it: check default values
-    asserts:
-      - equal:
-          path: spec.template.spec.containers[0].securityContext.allowPrivilegeEscalation
-          value: false
-      - equal:
-          path: spec.template.spec.containers[0].securityContext.privileged
-          value: false
-      - equal:
-          path: spec.template.spec.containers[0].securityContext.readOnlyRootFilesystem
-          value: false
-      - equal:
-          path: spec.template.spec.containers[0].securityContext.runAsNonRoot
-          value: true
-      - isNull:
-          path: spec.template.spec.containers[0].securityContext.runAsUser
-      - isNull:
-          path: spec.template.spec.containers[0].securityContext.runAsGroup
-  - it: check runAsUser
-    set:
-      securityContext.runAsUser: 1000
-    asserts:
-      - equal:
-          path: spec.template.spec.containers[0].securityContext.runAsUser
-          value: 1000
-  - it: check runAsGroup
-    set:
-      securityContext.runAsGroup: 1000
-    asserts:
-      - equal:
-          path: spec.template.spec.containers[0].securityContext.runAsGroup
-          value: 1000
\ No newline at end of file
diff --git a/nachrichten-bayernid-proxy/src/test/helm/deployment_defaults_labels_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deployment_defaults_labels_test.yaml
deleted file mode 100644
index 3e4455daed36fc9aadd506f6599b4c9c3a266f33..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/src/test/helm/deployment_defaults_labels_test.yaml
+++ /dev/null
@@ -1,75 +0,0 @@
-#
-# Copyright (C) 2022 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.
-#
-
-suite: test deployment default labels
-release:
-  name: bayernid-proxy
-  namespace: sh-helm-test
-templates:
-  - templates/deployment.yaml
-set:
-  ozgcloud:
-    environment: dev
-    bayernid:
-      server: "http://test"
-      certificateSecretName: "bayernidCertificat"
-tests:
-  - it: check metadata.labels
-    asserts:
-      - equal:
-          path: metadata.labels
-          value:
-            app.kubernetes.io/instance: bayernid-proxy
-            app.kubernetes.io/managed-by: Helm
-            app.kubernetes.io/name: bayernid-proxy
-            app.kubernetes.io/namespace: sh-helm-test
-            app.kubernetes.io/part-of: ozgcloud
-            app.kubernetes.io/version: 0.0.0-MANAGED-BY-JENKINS
-            helm.sh/chart: bayernid-proxy-0.0.0-MANAGED-BY-JENKINS
-            app.kubernetes.io/component: bayernid-proxy
-            component: bayernid-proxy
-  
-  - it: should set spec.selector.matchLabels
-    asserts:
-      - equal:
-          path: spec.selector.matchLabels
-          value:
-            app.kubernetes.io/name: bayernid-proxy
-            app.kubernetes.io/namespace: sh-helm-test
-            component: bayernid-proxy
-
-  - it: should have correct deyploment spec.template.metadata.labels
-    asserts:
-      - equal:
-          path: spec.template.metadata.labels
-          value: 
-            app.kubernetes.io/instance: bayernid-proxy
-            app.kubernetes.io/managed-by: Helm
-            app.kubernetes.io/name: bayernid-proxy
-            app.kubernetes.io/namespace: sh-helm-test
-            app.kubernetes.io/part-of: ozgcloud
-            app.kubernetes.io/version: 0.0.0-MANAGED-BY-JENKINS
-            helm.sh/chart: bayernid-proxy-0.0.0-MANAGED-BY-JENKINS
-            app.kubernetes.io/component: bayernid-proxy
-            component: bayernid-proxy
diff --git a/nachrichten-bayernid-proxy/src/test/helm/deployment_env_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deployment_env_test.yaml
deleted file mode 100644
index f94cc7c236928bbadcecf08ae2bef51a637d23db..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/src/test/helm/deployment_env_test.yaml
+++ /dev/null
@@ -1,53 +0,0 @@
-#
-# Copyright (C) 2022 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.
-#
-
-suite: test deployment container environments 
-templates:
-  - templates/deployment.yaml
-set:
-  ozgcloud:
-    environment: dev
-    bayernid:
-      server: "https://test"
-      certificateSecretName: "bayernidCertificat"
-tests:
-  - it: check customList
-    set:
-      env.customList:
-        - name: my_test_environment_name
-          value: "A test value"
-    asserts:
-      - contains:
-          path: spec.template.spec.containers[0].env
-          content:
-            name: my_test_environment_name
-            value: "A test value"
-
-  - it: check customList test value is not set by default
-    asserts:
-      - notContains:
-          path: spec.template.spec.containers[0].env
-          content:
-            name: my_test_environment_name
-            value: "A test value"
diff --git a/nachrichten-bayernid-proxy/src/test/helm/deployment_imagepull_secret_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deployment_imagepull_secret_test.yaml
deleted file mode 100644
index 69c1d1b6257a53596e6ab523422932fe5d61e41a..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/src/test/helm/deployment_imagepull_secret_test.yaml
+++ /dev/null
@@ -1,42 +0,0 @@
-#
-# Copyright (C) 2022 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.
-#
-
-suite: test deployment image pull secret
-release:
-  name: bayernid-proxy
-  namespace: sh-helm-test
-templates:
-  - templates/deployment.yaml
-set:
-  ozgcloud:
-    environment: dev
-    bayernid:
-      server: "http://test"
-      certificateSecretName: "bayernidCertificat"
-tests:
-  - it: should use correct imagePull secret
-    asserts:
-      - equal:
-          path: spec.template.spec.imagePullSecrets[0].name
-          value: ozgcloud-image-pull-secret
\ No newline at end of file
diff --git a/nachrichten-bayernid-proxy/src/test/helm/deployment_ozgcloud_base_values_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deployment_ozgcloud_base_values_test.yaml
deleted file mode 100644
index 00a0300659c67b9e1927870f63dcf26fe31321ee..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/src/test/helm/deployment_ozgcloud_base_values_test.yaml
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# Copyright (C) 2022 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.
-#
-
-suite: test ozgcloud base values
-release:
-  name: bayernid-proxy
-  namespace: sh-helm-test
-templates:
-  - templates/deployment.yaml
-
-tests:
-
-  - it: should fail on missing environment
-    asserts:
-      - failedTemplate:
-          errorMessage: ozgcloud.environment muss angegeben sein
-  - it: should not fail on not missing environment
-    set:
-      ozgcloud:
-        environment: dev
-        bayernid:
-          server: "http://test"
-          certificateSecretName: "bayernidCertificat"
-    asserts:
-      - notFailedTemplate: {}
diff --git a/nachrichten-bayernid-proxy/src/test/helm/deployment_resources_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deployment_resources_test.yaml
deleted file mode 100644
index cb794dac0ffaff7f164ede6eb5193e6dc3ca0743..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/src/test/helm/deployment_resources_test.yaml
+++ /dev/null
@@ -1,63 +0,0 @@
-#
-# Copyright (C) 2022 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.
-#
-
-suite: test deployment container resources
-release:
-  name: bayernid-proxy
-templates:
-  - templates/deployment.yaml
-set:
-  ozgcloud:
-    environment: dev
-    bayernid:
-      server: "http://test"
-      certificateSecretName: "bayernidCertificat"
-tests:
-  - it: should generate resources when values set
-    set:
-      resources:
-        limits:
-          cpu: 11m
-          memory: 22Mi
-        requests:
-          cpu: 33m
-          memory: 44Mi
-    asserts:
-      - equal:
-          path: spec.template.spec.containers[0].resources.limits.cpu
-          value: 11m
-      - equal:
-          path: spec.template.spec.containers[0].resources.limits.memory
-          value: 22Mi
-      - equal:
-          path: spec.template.spec.containers[0].resources.requests.cpu
-          value: 33m
-      - equal:
-          path: spec.template.spec.containers[0].resources.requests.memory
-          value: 44Mi
-  - it: should not generate resources when values not set
-    asserts:
-      - isEmpty:
-          path: spec.template.spec.containers[0].resources
-
diff --git a/nachrichten-bayernid-proxy/src/test/helm/deployment_service_account_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deployment_service_account_test.yaml
deleted file mode 100644
index 334d3f74c55057973868eefe40e1977ffe32b7de..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/src/test/helm/deployment_service_account_test.yaml
+++ /dev/null
@@ -1,57 +0,0 @@
-#
-# 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.
-#
-
-suite: deployment service account
-release:
-  namespace: sh-helm-test
-templates:
-  - templates/deployment.yaml
-set:
-  ozgcloud:
-    environment: dev
-    bayernid:
-      server: "http://test"
-      certificateSecretName: "bayernidCertificat"
-tests:
-  - it: should use service account with default name
-    set:
-      serviceAccount:
-        create: true
-    asserts:
-      - equal:
-          path: spec.template.spec.serviceAccountName
-          value: bayernid-proxy-service-account
-  - it: should use service account with name
-    set:
-      serviceAccount:
-        create: true
-        name: helm-service-account
-    asserts:
-      - equal:
-          path: spec.template.spec.serviceAccountName
-          value: helm-service-account
-  - it: should use default service account
-    asserts:
-      - isNull:
-          path: spec.template.spec.serviceAccountName
\ No newline at end of file
diff --git a/nachrichten-bayernid-proxy/src/test/helm/deployment_springProfile_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deployment_springProfile_test.yaml
deleted file mode 100644
index 70df4d35ce94b1fc4cd33fdaf7fd4752e8991435..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/src/test/helm/deployment_springProfile_test.yaml
+++ /dev/null
@@ -1,52 +0,0 @@
-#
-# Copyright (C) 2022 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.
-#
-
-suite: test deployment spring profiles
-release:
-  name: bayernid-proxy
-templates:
-  - templates/deployment.yaml
-set:
-  ozgcloud:
-    environment: dev
-    bayernid:
-      server: "http://test"
-      certificateSecretName: "bayernidCertificat"
-tests:
-  - it: should override spring profiles
-    set:
-      env.overrideSpringProfiles: oc,stage,ea
-    asserts:
-      - contains:
-          path: spec.template.spec.containers[0].env
-          content:
-            name: spring_profiles_active
-            value: oc,stage,ea
-  - it: should generate spring profiles 
-    asserts:
-      - contains:
-          path: spec.template.spec.containers[0].env
-          content:
-            name: spring_profiles_active
-            value: oc, dev
\ No newline at end of file
diff --git a/nachrichten-bayernid-proxy/src/test/helm/deployment_template_other_values_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deployment_template_other_values_test.yaml
deleted file mode 100644
index 9d9aff7d253c6a5151a768ccbe5e38c0ffb2b7fa..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/src/test/helm/deployment_template_other_values_test.yaml
+++ /dev/null
@@ -1,81 +0,0 @@
-#
-# Copyright (C) 2022 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.
-#
-
-suite: test deployment template other values
-release:
-  name: bayernid-proxy
-  namespace: sh-helm-test
-templates:
-  - templates/deployment.yaml
-set:
-  ozgcloud:
-    environment: dev
-    bayernid:
-      server: "http://test"
-      certificateSecretName: "bayernidCertificat"
-tests:
-  - it: should have correct spec.template.spec.topologySpreadConstraints values 
-    asserts: 
-      - contains:
-          path: spec.template.spec.topologySpreadConstraints
-          content: 
-            maxSkew: 1
-            topologyKey: kubernetes.io/hostname
-            whenUnsatisfiable: ScheduleAnyway
-            labelSelector:
-              matchLabels:
-                app.kubernetes.io/name: bayernid-proxy
-  - it: should have correct deployment spec.template.spec.dnsConfig dnsPolicy restartPolicy schedulerName and terminationGracePeriodSeconds values 
-    asserts:
-      - equal:
-          path: spec.template.spec.dnsConfig
-          value: {}
-      - equal:
-          path: spec.template.spec.dnsPolicy
-          value: ClusterFirst
-      - equal:
-          path: spec.template.spec.restartPolicy
-          value: Always
-      - equal:
-          path: spec.template.spec.terminationGracePeriodSeconds
-          value: 30
-      - equal:
-          path: spec.template.spec.schedulerName
-          value: default-scheduler
-  - it: should not generate spec.template.spec.hostAlias when values set
-    set: 
-      hostAliases: test-alias
-    asserts:
-      - equal:
-          path: spec.template.spec.hostAliases 
-          value: test-alias
-    
-    
-  - it: should not generate spec.template.spec.hostAlias when values not set
-    asserts:
-      - isNull:
-          path: spec.template.spec.hostAliases 
-         
-      
-      
diff --git a/nachrichten-bayernid-proxy/src/test/helm/deyploment_general_value_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/deyploment_general_value_test.yaml
deleted file mode 100644
index 53eadc8ef118fcf0177192a5fa14f1cf1fafe6a1..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/src/test/helm/deyploment_general_value_test.yaml
+++ /dev/null
@@ -1,78 +0,0 @@
-#
-# Copyright (C) 2022 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.
-#
-
-suite: test deployment general values
-release:
-  name: bayernid-proxy
-  namespace: sh-helm-test
-templates:
-  - templates/deployment.yaml
-set:
-  ozgcloud:
-    environment: dev
-    bayernid:
-      server: "http://test"
-      certificateSecretName: "bayernidCertificat"
-
-tests:
-  - it: should have correct apiVersion
-    asserts:
-      - isKind:
-          of: Deployment
-      - isAPIVersion:
-           of: "apps/v1"
-    
-  
-  - it: should have correct deployment metadata 
-    asserts: 
-      - equal:
-          path: metadata.name
-          value: bayernid-proxy
-      - equal: 
-          path: metadata.namespace
-          value: sh-helm-test
-
-
-  - it: should have correct deyployment general spec values
-    asserts:
-      - equal:
-          path: spec.progressDeadlineSeconds
-          value: 600
-      - equal:
-          path: spec.replicas
-          value: 2
-      - equal:
-          path: spec.revisionHistoryLimit
-          value: 10
-  - it: should have correct deployment spec strategy values
-    asserts:
-      - equal: 
-          path: spec.strategy
-          value: 
-            rollingUpdate:
-              maxSurge: 1
-              maxUnavailable: 0
-            type: RollingUpdate
-          
-
diff --git a/nachrichten-bayernid-proxy/src/test/helm/network_policy_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/network_policy_test.yaml
deleted file mode 100644
index 6942329e62a7ca2a0544cc56d6f3d6d76e9b2120..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/src/test/helm/network_policy_test.yaml
+++ /dev/null
@@ -1,183 +0,0 @@
-#
-# 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.
-#
-
-suite: network policy test
-release:
-  namespace: by-helm-test
-templates:
-  - templates/network_policy.yaml
-tests:
-  - it: should match apiVersion
-    set:
-      networkPolicy:
-        dnsServerNamespace: test-dns-namespace
-    asserts:
-      - isAPIVersion:
-          of: networking.k8s.io/v1
-
-  - it: should match kind
-    set:
-      networkPolicy:
-        dnsServerNamespace: test-dns-namespace
-    asserts:
-      - isKind:
-          of: NetworkPolicy
-
-  - it: should match metadata
-    set:
-      networkPolicy:
-        dnsServerNamespace: test-dns-namespace
-    asserts:
-      - equal:
-          path: metadata
-          value:
-            name: network-policy-bayernid-proxy
-            namespace: by-helm-test
-
-  - it: should generate spec
-    set:
-      networkPolicy:
-        dnsServerNamespace: test-dns-namespace
-    asserts:
-      - equal:
-          path: spec
-          value:
-            podSelector:
-              matchLabels:
-                component: bayernid-proxy
-            policyTypes:
-              - Ingress
-              - Egress
-            ingress:
-            - ports:
-              - port: 9090
-              from:
-              - podSelector: 
-                  matchLabels:
-                    component: vorgang-manager
-            egress:
-            - to:
-              - namespaceSelector:
-                  matchLabels:
-                    kubernetes.io/metadata.name: test-dns-namespace
-              ports:
-                - port: 53
-                  protocol: UDP
-                - port: 53
-                  protocol: TCP
-                - port: 5353
-                  protocol: UDP
-                - port: 5353
-                  protocol: TCP
-
-  - it: should add additionalIngressConfig
-    set:
-      networkPolicy:
-        dnsServerNamespace: test-dns-namespace
-        additionalIngressConfig:
-        - from:
-          - podSelector: 
-              matchLabels:
-                additionalIngressConfig: yes
-    asserts:
-      - contains:
-          path: spec.ingress
-          content:
-            from:
-            - podSelector: 
-                matchLabels:
-                  additionalIngressConfig: yes
-
-  - it: should add additionalEgressConfig
-    set:
-      networkPolicy: 
-        dnsServerNamespace: test-dns-namespace
-        additionalEgressConfig:
-        - to:
-          - podSelector:
-              matchLabels:
-                additionalEgressConfig: yes
-    asserts:
-    - contains:
-        path: spec.egress
-        content:
-          to:
-          - podSelector:
-              matchLabels:
-                additionalEgressConfig: yes
-
-
-  - it: should add additionalIngressConfigNamespace
-    set:
-      networkPolicy:
-        dnsServerNamespace: test-dns-namespace
-        additionalIngressConfigNamespace:
-        - from:
-          - podSelector: 
-              matchLabels:
-                additionalIngressConfigNamespace: yes
-    asserts:
-      - contains:
-          path: spec.ingress
-          content:
-            from:
-            - podSelector: 
-                matchLabels:
-                  additionalIngressConfigNamespace: yes
-
-  - it: should add additionalEgressConfigNamespace
-    set:
-      networkPolicy:
-        dnsServerNamespace: test-dns-namespace
-        additionalEgressConfigNamespace:
-        - to:
-          - podSelector:
-              matchLabels:
-                additionalEgressConfigNamespace: yes
-    asserts:
-    - contains:
-        path: spec.egress
-        content:
-          to:
-          - podSelector:
-              matchLabels:
-                additionalEgressConfigNamespace: yes
-
-  - it: test network policy disabled
-    set:
-      networkPolicy:
-        disabled: true
-        dnsServerNamespace: test-dns-namespace
-    asserts:
-      - hasDocuments:
-          count: 0
-
-  - it: test network policy unset should be disabled
-    set:
-      networkPolicy:
-        disabled: false
-        dnsServerNamespace: test-dns-namespace
-    asserts:
-      - hasDocuments:
-          count: 1
\ No newline at end of file
diff --git a/nachrichten-bayernid-proxy/src/test/helm/service_account_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/service_account_test.yaml
deleted file mode 100644
index 41565540d17ddc7998397ff62407b0e5bdf7c249..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/src/test/helm/service_account_test.yaml
+++ /dev/null
@@ -1,65 +0,0 @@
-#
-# 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.
-#
-
-suite: test service account
-release:
-  namespace: sh-helm-test
-templates:
-  - templates/service_account.yaml
-tests:
-  - it: should create service account with default name
-    set:
-      serviceAccount:
-        create: true
-    asserts:
-      - isKind:
-          of: ServiceAccount
-      - isAPIVersion:
-           of: v1
-      - equal:
-          path: metadata.name
-          value: bayernid-proxy-service-account
-      - equal:
-          path: metadata.namespace
-          value: sh-helm-test
-
-  - it: should create service account with name
-    set:
-      serviceAccount:
-        create: true
-        name: helm-service-account
-    asserts:
-      - isKind:
-          of: ServiceAccount
-      - equal:
-          path: metadata.name
-          value: helm-service-account
-      - equal:
-          path: metadata.namespace
-          value: sh-helm-test
-
-  - it: should not create service account
-    asserts:
-      - hasDocuments:
-         count: 0
\ No newline at end of file
diff --git a/nachrichten-bayernid-proxy/src/test/helm/service_test.yaml b/nachrichten-bayernid-proxy/src/test/helm/service_test.yaml
deleted file mode 100644
index 533bdd32b941ed3982480d0198f9941b81b80f2f..0000000000000000000000000000000000000000
--- a/nachrichten-bayernid-proxy/src/test/helm/service_test.yaml
+++ /dev/null
@@ -1,85 +0,0 @@
-#
-# Copyright (C) 2022 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.
-#
-
-suite: test service
-release:
-  name: bayernid-proxy
-  namespace: sh-helm-test
-templates:
-  - templates/service.yaml
-tests:
-  - it: should have the label component with correct value 
-    asserts:
-      - isKind:
-          of: Service
-      - isAPIVersion:
-           of: v1
-      - equal:
-          path: metadata.labels.component
-          value: bayernid-proxy
-  - it: should be of type ClusterIP
-    asserts:
-      - equal:
-          path: spec.type
-          value: ClusterIP
-  - it: ports should contain the grpc port
-    asserts:
-      - contains:
-          path: spec.ports
-          content:
-            name: grpc-9090
-            port: 9090
-            protocol: TCP
-          count: 1
-          any: true
-  - it: ports should contain the metrics port
-    asserts:
-      - contains:
-          path: spec.ports
-          content:
-            name: metrics
-            port: 8081
-            protocol: TCP
-          count: 1
-          any: true
-  - it: selector should contain the component label with correct value
-    asserts:
-      - equal:
-          path: spec.selector.component
-          value: bayernid-proxy
-
-  - it: selector should contain helm recommended labels name and namespace
-    asserts:
-      - equal:
-          path: spec.selector
-          value:
-            app.kubernetes.io/name: bayernid-proxy
-            app.kubernetes.io/namespace: sh-helm-test
-            component: bayernid-proxy
-
-  - it: check component label for service
-    asserts:
-      - equal:
-          path: metadata.labels["component"]
-          value: bayernid-proxy
\ No newline at end of file
diff --git a/nachrichten-manager/lombok.config b/nachrichten-manager/lombok.config
deleted file mode 100644
index d07dd9b0e2b0281fbf514a968b9451cb6af62f93..0000000000000000000000000000000000000000
--- a/nachrichten-manager/lombok.config
+++ /dev/null
@@ -1,30 +0,0 @@
-#
-# Copyright (C) 2022 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.
-#
-
-lombok.log.fieldName=LOG
-lombok.log.slf4j.flagUsage = ERROR
-lombok.log.log4j.flagUsage = ERROR
-lombok.data.flagUsage = ERROR
-lombok.nonNull.exceptionType = IllegalArgumentException
-lombok.addLombokGeneratedAnnotation = true
\ No newline at end of file
diff --git a/nachrichten-manager/pom.xml b/nachrichten-manager/pom.xml
deleted file mode 100644
index aeaac44692b56cda777a843885651a86dddccb0c..0000000000000000000000000000000000000000
--- a/nachrichten-manager/pom.xml
+++ /dev/null
@@ -1,349 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (C) 2022-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.
-
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>de.ozgcloud.common</groupId>
-		<artifactId>ozgcloud-common-parent</artifactId>
-		<version>4.0.1-SNAPSHOT</version>
-		<relativePath/>
-	</parent>
-
-	<groupId>de.ozgcloud.nachrichten</groupId>
-	<artifactId>nachrichten-manager</artifactId>
-	<version>2.6.0-SNAPSHOT</version>
-	<name>OZG-Cloud Nachrichten Manager</name>
-
-    <properties>
-        <java.version>17</java.version>
-        <!-- TODO version management -->
-        <shedlock.version>4.25.0</shedlock.version>
-        <logcaptor.version>2.7.10</logcaptor.version>
-        <ozgcloud.license.version>1.3.0</ozgcloud.license.version>
-        <jaxb-maven-plugin.version>3.0.1</jaxb-maven-plugin.version>
-        <ozg-info-manager-interface.version>0.10.0-22.8503e49-20240124.071709-1</ozg-info-manager-interface.version>
-        <bayernid-proxy-interface.version>0.1.0</bayernid-proxy-interface.version>
-    </properties>
-
-    <repositories>
-        <repository>
-            <id>shibboleth-releases</id>
-            <name>Shibboleth Releases Repository</name>
-            <url>https://build.shibboleth.net/maven/releases/</url>
-            <releases>
-                <enabled>true</enabled>
-                <checksumPolicy>warn</checksumPolicy>
-            </releases>
-            <snapshots>
-                <enabled>false</enabled>
-            </snapshots>
-        </repository>
-        <repository>
-            <id>shibboleth-thirdparty</id>
-            <name>Shibboleth Thirdparty Repository</name>
-            <url>https://build.shibboleth.net/maven/thirdparty/</url>
-            <releases>
-                <enabled>true</enabled>
-                <checksumPolicy>fail</checksumPolicy>
-            </releases>
-            <snapshots>
-                <enabled>false</enabled>
-            </snapshots>
-        </repository>
-    </repositories>
-
-    <dependencies>
-        <dependency>
-            <groupId>de.ozgcloud.vorgang</groupId>
-            <artifactId>vorgang-manager-base</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>de.ozgcloud.vorgang</groupId>
-            <artifactId>vorgang-manager-interface</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>de.ozgcloud.command</groupId>
-            <artifactId>command-manager</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>de.ozgcloud.vorgang</groupId>
-            <artifactId>vorgang-manager-utils</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>de.ozgcloud.nachrichten</groupId>
-            <artifactId>bayernid-proxy-interface</artifactId>
-            <version>${bayernid-proxy-interface.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.mgmtp.bup.ozg</groupId>
-            <artifactId>ozg-info-manager-interface</artifactId>
-            <version>${ozg-info-manager-interface.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-mail</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-json</artifactId>
-            <scope>compile</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-web</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-validation</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web-services</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.glassfish.jaxb</groupId>
-            <artifactId>jaxb-runtime</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>net.javacrumbs.shedlock</groupId>
-            <artifactId>shedlock-spring</artifactId>
-            <version>${shedlock.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>net.javacrumbs.shedlock</groupId>
-            <artifactId>shedlock-provider-mongo</artifactId>
-            <version>${shedlock.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.mapstruct</groupId>
-            <artifactId>mapstruct</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.security</groupId>
-            <artifactId>spring-security-saml2-service-provider</artifactId>
-        </dependency>
-
- 
-        <dependency>
-            <groupId>net.devh</groupId>
-            <artifactId>grpc-server-spring-boot-starter</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>net.devh</groupId>
-            <artifactId>grpc-client-spring-boot-starter</artifactId>
-        </dependency>
-
-        <!-- commons -->
-        <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-lang3</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.httpcomponents.client5</groupId>
-            <artifactId>httpclient5</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>commons-beanutils</groupId>
-            <artifactId>commons-beanutils</artifactId>
-        </dependency>
-
-        <!-- DEV -->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-devtools</artifactId>
-            <scope>runtime</scope>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>org.projectlombok</groupId>
-            <artifactId>lombok</artifactId>
-            <optional>true</optional>
-            <scope>provided</scope>
-        </dependency>
-
-        <!-- TEST -->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-test</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-configuration-processor</artifactId>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>io.github.hakky54</groupId>
-            <artifactId>logcaptor</artifactId>
-            <version>${logcaptor.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>de.ozgcloud.vorgang</groupId>
-            <artifactId>vorgang-manager-base</artifactId>
-            <version>${project.version}</version>
-            <type>test-jar</type>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-maven-plugin</artifactId>
-                <configuration>
-                    <skip>true</skip>
-                </configuration>
-            </plugin>
-
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>test-jar</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-
-            <plugin>
-                <groupId>org.jvnet.jaxb</groupId>
-                <artifactId>jaxb-maven-plugin</artifactId>
-                <version>${jaxb-maven-plugin.version}</version>
-                <configuration>
-                    <schemas>
-                        <schema>
-                            <fileset>
-                                <directory>${basedir}/src/main/resources/bayernid</directory>
-                                <includes>
-                                    <include>*.wsdl</include>
-                                </includes>
-                            </fileset>
-                        </schema>
-                        <schema>
-                            <fileset>
-                                <directory>${basedir}/src/main/resources/bayernid</directory>
-                                <includes>
-                                    <include>*.xsd</include>
-                                </includes>
-                            </fileset>
-                        </schema>
-                    </schemas>
-                    <episode>false</episode>
-                </configuration>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>generate</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-            </plugin>
-
-            <plugin>
-                <groupId>org.sonarsource.scanner.maven</groupId>
-                <artifactId>sonar-maven-plugin</artifactId>
-            </plugin>
-            <plugin>
-                <groupId>org.jacoco</groupId>
-                <artifactId>jacoco-maven-plugin</artifactId>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-failsafe-plugin</artifactId>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-            </plugin>
-
-            <plugin>
-                <groupId>com.mycila</groupId>
-                <artifactId>license-maven-plugin</artifactId>
-                <configuration>
-                    <mapping>
-                        <config>SCRIPT_STYLE</config>
-                    </mapping>
-                    <licenseSets>
-                        <licenseSet>
-                            <header>license/eupl_v1_2_de/header.txt</header>
-                            <excludes>
-                                <exclude>**/README</exclude>
-                                <exclude>src/test/resources/**</exclude>
-                                <exclude>src/main/resources/**</exclude>
-                            </excludes>
-                        </licenseSet>
-                    </licenseSets>
-                </configuration>
-                <dependencies>
-                    <dependency>
-                        <groupId>de.ozgcloud.common</groupId>
-                        <artifactId>ozgcloud-common-license</artifactId>
-                        <version>${ozgcloud.license.version}</version>
-                    </dependency>
-                </dependencies>
-            </plugin>
-        </plugins>
-    </build>
-
-    <distributionManagement>
-        <repository>
-            <id>ozg-nexus</id>
-            <name>ozg-releases</name>
-            <url>https://nexus.ozg-sh.de/repository/ozg-releases/</url>
-        </repository>
-        <snapshotRepository>
-            <id>ozg-snapshots-nexus</id>
-            <name>ozg-snapshots</name>
-            <url>https://nexus.ozg-sh.de/repository/ozg-snapshots/</url>
-        </snapshotRepository>
-    </distributionManagement>
-</project>
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/NachrichtenManagerProperties.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/NachrichtenManagerProperties.java
deleted file mode 100644
index 0592f801054c7d45d99648fe7ffe10c4782a35e8..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/NachrichtenManagerProperties.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package de.ozgcloud.nachrichten;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.context.annotation.Configuration;
-
-import lombok.Getter;
-import lombok.Setter;
-
-@Configuration
-@ConfigurationProperties(prefix = "ozgcloud.nachrichten-manager")
-@Setter
-@Getter
-public class NachrichtenManagerProperties {
-
-	private String url;
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcService.java
deleted file mode 100644
index 4921595ed99fe131abde54ebfccb4f42ad2a8d3e..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcService.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * 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.nachrichten.antragraum;
-
-import org.apache.commons.lang3.NotImplementedException;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-
-import de.ozgcloud.vorgang.grpc.command.GrpcCommand;
-import io.grpc.stub.StreamObserver;
-import lombok.RequiredArgsConstructor;
-import net.devh.boot.grpc.server.service.GrpcService;
-
-@GrpcService
-@RequiredArgsConstructor
-@ConditionalOnProperty(AntragraumProperties.PROPERTY_ANTRAGSRAUM_URL)
-class AntragraumGrpcService extends AntragraumServiceGrpc.AntragraumServiceImplBase {
-	private final AntragraumService antragraumService;
-	private final AntragraumNachrichtMapper mapper;
-
-	@Override
-	public void findRueckfragen(GrpcFindRueckfragenRequest request, StreamObserver<GrpcFindRueckfragenResponse> streamObserver) {
-		var rueckfragen = antragraumService.findRueckfragen(request.getSamlToken()).map(mapper::toGrpc).toList();
-		var response = GrpcFindRueckfragenResponse.newBuilder().addAllRueckfrage(rueckfragen).build();
-
-		streamObserver.onNext(response);
-		streamObserver.onCompleted();
-	}
-
-	@Override
-	public void sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequest request, StreamObserver<GrpcCommand> streamObserver) {
-		var answer = request.getAnswer();
-
-		var commandId = antragraumService.sendRueckfrageAnswer(request.getSamlToken(), answer.getRueckfrageId(), mapper.toPostfachNachricht(answer));
-
-		streamObserver.onNext(GrpcCommand.newBuilder().setId(commandId).build());
-		streamObserver.onCompleted();
-	}
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapper.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapper.java
deleted file mode 100644
index cb54984efbb573241ed2aeca1fc2f08fc56d2e8e..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapper.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * 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.nachrichten.antragraum;
-
-import org.mapstruct.CollectionMappingStrategy;
-import org.mapstruct.Mapper;
-import org.mapstruct.Mapping;
-import org.mapstruct.NullValueCheckStrategy;
-
-import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
-
-@Mapper(collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
-interface AntragraumNachrichtMapper {
-	String DEFAULT_STATUS = "NEU";
-
-	@Mapping(source = "sentAt", target = "sentAt", dateFormat = "yyyy-MM-dd'T'HH:mm:ss")
-	@Mapping(source = "mailBody", target = "text")
-	@Mapping(source = "subject", target = "vorgangName")
-	@Mapping(source = "attachments", target = "attachmentFileIdList")
-	@Mapping(target = "status", constant = DEFAULT_STATUS)
-	GrpcRueckfrage toGrpc(PostfachNachricht postfachNachricht);
-
-	@Mapping(target = "mailBody", source = "answerText")
-	@Mapping(target = "attachments", source = "attachmentFileIdList")
-	@Mapping(target = "createdAt", ignore = true)
-	@Mapping(target = "createdBy", ignore = true)
-	@Mapping(target = "direction", ignore = true)
-	@Mapping(target = "id", ignore = true)
-	@Mapping(target = "messageCode", ignore = true)
-	@Mapping(target = "messageId", source = "rueckfrageId")
-	@Mapping(target = "postfachAddress", ignore = true)
-	@Mapping(target = "postfachId", ignore = true)
-	@Mapping(target = "replyOption", ignore = true)
-	@Mapping(target = "sentAt", ignore = true)
-	@Mapping(target = "sentSuccessful", ignore = true)
-	@Mapping(target = "subject", ignore = true)
-	@Mapping(target = "vorgangId", ignore = true)
-	PostfachNachricht toPostfachNachricht(GrpcRueckfrageAnswer answer);
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumProperties.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumProperties.java
deleted file mode 100644
index 9db391f6c208a0aa6c1c1849d9a6c588a031ceb2..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumProperties.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * 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.nachrichten.antragraum;
-
-import jakarta.validation.constraints.NotEmpty;
-
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.core.io.Resource;
-import org.springframework.validation.annotation.Validated;
-
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-@Configuration
-@ConditionalOnProperty(AntragraumProperties.PROPERTY_ANTRAGSRAUM_URL)
-@ConfigurationProperties(prefix = "ozgcloud.antragraum")
-@Validated
-public class AntragraumProperties {
-
-	public static final String PROPERTY_ANTRAGSRAUM_URL = "ozgcloud.antragraum.url";
-
-	@NotEmpty
-	private String url;
-
-	/**
-	 * The entityId as defined the BayernId SAML Metadata
-	 */
-	@NotEmpty
-	private String entityId;
-	/**
-	 * The uri where to load the idp Metadata from
-	 */
-	private Resource metadataUri;
-	/**
-	 * The location of the private key for decrypting the saml token data
-	 */
-	private Resource decryptionPrivateKey;
-	/**
-	 * The location of the certificate for decrypting the saml token data
-	 */
-	private Resource decryptionCertificate;
-
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumService.java
deleted file mode 100644
index 3d9ea7abd01eaa507573d2614f599654e0e2bfbf..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumService.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * 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.nachrichten.antragraum;
-
-import static java.util.Objects.*;
-
-import java.util.stream.Stream;
-
-import org.apache.commons.collections.CollectionUtils;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.stereotype.Service;
-
-import de.ozgcloud.nachrichten.NachrichtenManagerProperties;
-import de.ozgcloud.nachrichten.postfach.PersistPostfachNachrichtService;
-import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
-import jakarta.annotation.PostConstruct;
-import lombok.RequiredArgsConstructor;
-
-@Service
-@RequiredArgsConstructor
-@ConditionalOnProperty(AntragraumProperties.PROPERTY_ANTRAGSRAUM_URL)
-public class AntragraumService {
-	private final PersistPostfachNachrichtService postfachNachrichtService;
-	private final Saml2Verifier verifier;
-	private final Saml2Parser parser;
-	private final Saml2Decrypter decrypter;
-
-	static final String USER_NOTIFICATION_TEMPLATE = """
-			Guten Tag,
-
-			bei der Bearbeitung Ihres Antrags hat sich eine Rückfrage ergeben. Bitte beantworten Sie diese im Antragsraum:
-
-			%s
-
-			Vielen Dank,
-			Ihre digitale Verwaltung
-			""";
-
-	private final AntragraumProperties properties;
-	private final NachrichtenManagerProperties nachrichtenManagerProperties;
-
-	@PostConstruct
-	void init() {
-		if (isNull(nachrichtenManagerProperties.getUrl())) {
-			throw new IllegalStateException("Address of Nachrichten-Manager is not set");
-		}
-	}
-
-	public String getAntragsraumUrl() {
-		return properties.getUrl();
-	}
-
-	public String getUserNotificationText() {
-		return USER_NOTIFICATION_TEMPLATE.formatted(getAntragsraumUrl());
-	}
-
-	public Stream<PostfachNachricht> findRueckfragen(String samlToken) {
-		verifyToken(samlToken);
-		var postfachId = decrypter.decryptPostfachId(parser.parse(samlToken));
-
-		return postfachNachrichtService.findRueckfragen(postfachId);
-	}
-
-	public Stream<PostfachNachricht> findRueckfrageAnswers(String rueckfrageId) {
-		return postfachNachrichtService.findAnswers(rueckfrageId);
-	}
-
-	public String sendRueckfrageAnswer(String samlToken, String rueckfrageId, PostfachNachricht nachricht) {
-		verifyToken(samlToken);
-
-		return postfachNachrichtService.persistAnswer(rueckfrageId, nachricht);
-	}
-
-	void verifyToken(String token) {
-		var errors = verifier.verify(token);
-		if (CollectionUtils.isNotEmpty(errors)) {
-			throw new SecurityException("SAML Token verification failed. Errors: %s".formatted(errors));
-		}
-	}
-
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/BayernIdSamlConfiguration.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/BayernIdSamlConfiguration.java
deleted file mode 100644
index 0961155476fed54722e9572435b34c5225e67e80..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/BayernIdSamlConfiguration.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * 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.nachrichten.antragraum;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateFactory;
-import java.security.cert.X509Certificate;
-import java.security.interfaces.RSAPrivateKey;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import jakarta.annotation.PostConstruct;
-
-import org.opensaml.core.config.ConfigurationService;
-import org.opensaml.core.config.InitializationService;
-import org.opensaml.core.criterion.EntityIdCriterion;
-import org.opensaml.core.xml.XMLObject;
-import org.opensaml.core.xml.config.XMLObjectProviderRegistry;
-import org.opensaml.saml.common.xml.SAMLConstants;
-import org.opensaml.saml.criterion.ProtocolCriterion;
-import org.opensaml.saml.metadata.criteria.role.impl.EvaluableProtocolRoleDescriptorCriterion;
-import org.opensaml.saml.saml2.metadata.EntitiesDescriptor;
-import org.opensaml.saml.saml2.metadata.EntityDescriptor;
-import org.opensaml.saml.saml2.metadata.KeyDescriptor;
-import org.opensaml.security.credential.Credential;
-import org.opensaml.security.credential.CredentialResolver;
-import org.opensaml.security.credential.UsageType;
-import org.opensaml.security.credential.criteria.impl.EvaluableEntityIDCredentialCriterion;
-import org.opensaml.security.credential.criteria.impl.EvaluableUsageCredentialCriterion;
-import org.opensaml.security.credential.impl.CollectionCredentialResolver;
-import org.opensaml.security.criteria.UsageCriterion;
-import org.opensaml.security.x509.BasicX509Credential;
-import org.opensaml.xmlsec.config.impl.DefaultSecurityConfigurationBootstrap;
-import org.opensaml.xmlsec.keyinfo.KeyInfoSupport;
-import org.opensaml.xmlsec.signature.support.SignatureTrustEngine;
-import org.opensaml.xmlsec.signature.support.impl.ExplicitKeySignatureTrustEngine;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.core.io.Resource;
-import org.springframework.security.converter.RsaKeyConverters;
-import org.springframework.security.saml2.Saml2Exception;
-import org.springframework.security.saml2.core.Saml2X509Credential;
-import org.springframework.util.Assert;
-
-import lombok.Getter;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
-import net.shibboleth.utilities.java.support.xml.BasicParserPool;
-import net.shibboleth.utilities.java.support.xml.ParserPool;
-import net.shibboleth.utilities.java.support.xml.XMLParserException;
-
-@Configuration
-@ConditionalOnProperty(AntragraumProperties.PROPERTY_ANTRAGSRAUM_URL)
-class BayernIdSamlConfiguration {
-	private XMLObjectProviderRegistry registry;
-	@Getter
-	private ParserPool parserPool;
-	@Autowired
-	private AntragraumProperties antragraumProperties;
-
-	@PostConstruct
-	void initOpenSAML() {
-		try {
-			registry = new XMLObjectProviderRegistry();
-			ConfigurationService.register(XMLObjectProviderRegistry.class, registry);
-			parserPool = initParserPool();
-
-			registry.setParserPool(parserPool);
-			InitializationService.initialize();
-		} catch (Exception e) {
-			throw new RuntimeException("Initialization failed");
-		}
-	}
-
-	private ParserPool initParserPool() throws ComponentInitializationException {
-		var localParserPool = new BasicParserPool();
-
-		final var features = createFeatureMap();
-
-		localParserPool.setBuilderFeatures(features);
-
-		localParserPool.setBuilderAttributes(new HashMap<>());
-
-		localParserPool.initialize();
-
-		return localParserPool;
-	}
-
-	private Map<String, Boolean> createFeatureMap() {
-		final Map<String, Boolean> features = new HashMap<>();
-		features.put("http://xml.org/sax/features/external-general-entities", Boolean.FALSE);
-		features.put("http://xml.org/sax/features/external-parameter-entities", Boolean.FALSE);
-		features.put("http://apache.org/xml/features/disallow-doctype-decl", Boolean.TRUE);
-		features.put("http://apache.org/xml/features/validation/schema/normalized-value", Boolean.FALSE);
-		features.put("http://javax.xml.XMLConstants/feature/secure-processing", Boolean.TRUE);
-		return features;
-	}
-
-	SignatureTrustEngine getTrustEngine() {
-		Set<Credential> credentials = new HashSet<>();
-		Collection<Saml2X509Credential> keys = getCertificatesFromMetadata();
-
-		for (Saml2X509Credential key : keys) {
-			var cred = new BasicX509Credential(key.getCertificate());
-			cred.setUsageType(UsageType.SIGNING);
-			cred.setEntityId(antragraumProperties.getEntityId());
-			credentials.add(cred);
-		}
-
-		CredentialResolver credentialsResolver = new CollectionCredentialResolver(credentials);
-		return new ExplicitKeySignatureTrustEngine(credentialsResolver,
-				DefaultSecurityConfigurationBootstrap.buildBasicInlineKeyInfoCredentialResolver());
-	}
-
-	CriteriaSet getVerificationCriteria() {
-		var criteria = new CriteriaSet();
-		criteria.add(new EvaluableEntityIDCredentialCriterion(new EntityIdCriterion(antragraumProperties.getEntityId())));
-		criteria.add(new EvaluableProtocolRoleDescriptorCriterion(new ProtocolCriterion("urn:oasis:names:tc:SAML:2.0:protocol")));
-		criteria.add(new EvaluableUsageCredentialCriterion(new UsageCriterion(UsageType.SIGNING)));
-		return criteria;
-	}
-
-	Saml2X509Credential getDecryptionCredential() {
-		var privateKey = readPrivateKey(antragraumProperties.getDecryptionPrivateKey());
-		var certificate = readCertificateFromResource(antragraumProperties.getDecryptionCertificate());
-		return new Saml2X509Credential(privateKey, certificate, Saml2X509Credential.Saml2X509CredentialType.DECRYPTION);
-	}
-
-	private RSAPrivateKey readPrivateKey(Resource location) {
-		Assert.state(location != null, "No private key location specified");
-		Assert.state(location.exists(), () -> "Private key location '" + location + "' does not exist");
-		try (var inputStream = location.getInputStream()) {
-			return RsaKeyConverters.pkcs8().convert(inputStream);
-		} catch (IOException e) {
-			throw new IllegalArgumentException(e);
-		}
-	}
-
-	private X509Certificate readCertificateFromResource(Resource location) {
-		Assert.state(location != null, "No certificate location specified");
-		Assert.state(location.exists(), () -> "Certificate  location '" + location + "' does not exist");
-		try (var inputStream = location.getInputStream()) {
-
-			return (X509Certificate) CertificateFactory.getInstance("X.509").generateCertificate(inputStream);
-		} catch (IOException | CertificateException e) {
-			throw new IllegalArgumentException(e);
-		}
-	}
-
-	List<Saml2X509Credential> getCertificatesFromMetadata() {
-		try (var metadata = antragraumProperties.getMetadataUri().getInputStream()) {
-			var xmlObject = xmlObject(metadata);
-			if (xmlObject instanceof EntitiesDescriptor descriptors) {
-				for (EntityDescriptor descriptor : descriptors.getEntityDescriptors()) {
-					if (descriptor.getIDPSSODescriptor(SAMLConstants.SAML20P_NS) != null) {
-						return getVerificationCertificates(descriptor);
-					}
-				}
-			}
-		} catch (IOException e) {
-			throw new Saml2Exception("Error reading idp metadata.", e);
-		} catch (ComponentInitializationException | XMLParserException e) {
-			throw new Saml2Exception("Error initializing parser pool.", e);
-		}
-
-		throw new Saml2Exception("No IDPSSO Descriptors found");
-	}
-
-	private XMLObject xmlObject(InputStream inputStream) throws ComponentInitializationException, XMLParserException {
-		var document = getParserPool().parse(inputStream);
-		var element = document.getDocumentElement();
-		var unmarshaller = this.registry.getUnmarshallerFactory().getUnmarshaller(element);
-		if (unmarshaller == null) {
-			throw new Saml2Exception("Unsupported element of type " + element.getTagName());
-		}
-		try {
-			return unmarshaller.unmarshall(element);
-		} catch (Exception ex) {
-			throw new Saml2Exception(ex);
-		}
-	}
-
-	List<Saml2X509Credential> getVerificationCertificates(EntityDescriptor descriptor) {
-		var idpssoDescriptor = descriptor.getIDPSSODescriptor(SAMLConstants.SAML20P_NS);
-		if (idpssoDescriptor == null) {
-			throw new Saml2Exception("Metadata response is missing the necessary IDPSSODescriptor element");
-		}
-		List<Saml2X509Credential> verification = new ArrayList<>();
-		for (KeyDescriptor keyDescriptor : idpssoDescriptor.getKeyDescriptors()) {
-			if (keyDescriptor.getUse().equals(UsageType.SIGNING)) {
-				var certificates = certificates(keyDescriptor);
-				for (X509Certificate certificate : certificates) {
-					verification.add(Saml2X509Credential.verification(certificate));
-				}
-			}
-		}
-		if (verification.isEmpty()) {
-			throw new Saml2Exception(
-					"Metadata response is missing verification certificates, necessary for verifying SAML assertions");
-		}
-
-		return verification;
-	}
-
-	private List<X509Certificate> certificates(KeyDescriptor keyDescriptor) {
-		try {
-			return KeyInfoSupport.getCertificates(keyDescriptor.getKeyInfo());
-		} catch (CertificateException ex) {
-			throw new Saml2Exception(ex);
-		}
-	}
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Decrypter.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Decrypter.java
deleted file mode 100644
index 9728ddba81bb0105dde77407ea24b44214e0b29d..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Decrypter.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * 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.nachrichten.antragraum;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-
-import jakarta.annotation.PostConstruct;
-
-import org.opensaml.core.xml.schema.XSString;
-import org.opensaml.saml.saml2.core.AttributeStatement;
-import org.opensaml.saml.saml2.core.EncryptedAssertion;
-import org.opensaml.saml.saml2.core.Response;
-import org.opensaml.saml.saml2.encryption.Decrypter;
-import org.opensaml.saml.saml2.encryption.EncryptedElementTypeEncryptedKeyResolver;
-import org.opensaml.security.credential.Credential;
-import org.opensaml.security.credential.CredentialSupport;
-import org.opensaml.xmlsec.encryption.support.ChainingEncryptedKeyResolver;
-import org.opensaml.xmlsec.encryption.support.EncryptedKeyResolver;
-import org.opensaml.xmlsec.encryption.support.InlineEncryptedKeyResolver;
-import org.opensaml.xmlsec.encryption.support.SimpleRetrievalMethodEncryptedKeyResolver;
-import org.opensaml.xmlsec.keyinfo.KeyInfoCredentialResolver;
-import org.opensaml.xmlsec.keyinfo.impl.CollectionKeyInfoCredentialResolver;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.security.saml2.Saml2Exception;
-import org.springframework.stereotype.Service;
-
-import lombok.RequiredArgsConstructor;
-
-@Service
-@RequiredArgsConstructor
-@ConditionalOnProperty(AntragraumProperties.PROPERTY_ANTRAGSRAUM_URL)
-class Saml2Decrypter {
-	private final BayernIdSamlConfiguration configuration;
-
-	public static final String LEGACY_POSTKORB_HANDLE_KEY = "legacyPostkorbHandle";
-	private Decrypter decrypter;
-	private static final EncryptedKeyResolver encryptedKeyResolver = new ChainingEncryptedKeyResolver(
-			Arrays.asList(new InlineEncryptedKeyResolver(), new EncryptedElementTypeEncryptedKeyResolver(),
-					new SimpleRetrievalMethodEncryptedKeyResolver()));
-
-	@PostConstruct
-	void init() {
-		Collection<Credential> credentials = new ArrayList<>();
-		var decryptionX509Credential = configuration.getDecryptionCredential();
-
-		Credential cred = CredentialSupport.getSimpleCredential(decryptionX509Credential.getCertificate(), decryptionX509Credential.getPrivateKey());
-		credentials.add(cred);
-
-		KeyInfoCredentialResolver resolver = new CollectionKeyInfoCredentialResolver(credentials);
-		var setupDecrypter = new Decrypter(null, resolver, encryptedKeyResolver);
-		setupDecrypter.setRootInNewDocument(true);
-
-		decrypter = setupDecrypter;
-	}
-
-	void decryptResponseElements(Response response) {
-		for (EncryptedAssertion encryptedAssertion : response.getEncryptedAssertions()) {
-			try {
-				var assertion = decrypter.decrypt(encryptedAssertion);
-				response.getAssertions().add(assertion);
-			} catch (Exception ex) {
-				throw new Saml2Exception(ex);
-			}
-		}
-	}
-
-	String decryptPostfachId(Response response) {
-		decryptResponseElements(response);
-
-		var samlAssertion = response.getAssertions().get(0);
-		var statements = (AttributeStatement) samlAssertion.getStatements().get(1);
-		var attributes = statements.getAttributes();
-		var postfachIdOptional = attributes.stream().filter(attribute -> LEGACY_POSTKORB_HANDLE_KEY.equals(attribute.getFriendlyName())).findFirst();
-
-		return postfachIdOptional.map(postfachIdAttribute -> {
-			var values = postfachIdAttribute.getAttributeValues();
-			return ((XSString) values.get(0)).getValue();
-		}).orElseThrow();
-
-	}
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Parser.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Parser.java
deleted file mode 100644
index fa23252ab39606a73825a3981127f0731f0f7e49..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Parser.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * 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.nachrichten.antragraum;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
-import java.util.Objects;
-
-import org.opensaml.core.xml.XMLObject;
-import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
-import org.opensaml.core.xml.io.UnmarshallingException;
-import org.opensaml.saml.saml2.core.Response;
-import org.opensaml.saml.saml2.core.impl.ResponseUnmarshaller;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.security.saml2.Saml2Exception;
-import org.springframework.stereotype.Service;
-
-import lombok.RequiredArgsConstructor;
-import net.shibboleth.utilities.java.support.xml.XMLParserException;
-
-@Service
-@ConditionalOnProperty(AntragraumProperties.PROPERTY_ANTRAGSRAUM_URL)
-@RequiredArgsConstructor
-class Saml2Parser {
-	private final BayernIdSamlConfiguration configuration;
-	private ResponseUnmarshaller unmarshaller;
-
-	Response parse(String request) {
-		return (Response) xmlObject(new ByteArrayInputStream(request.getBytes(StandardCharsets.UTF_8)));
-	}
-
-	XMLObject xmlObject(InputStream inputStream) throws Saml2Exception {
-		try {
-			var document = configuration.getParserPool().parse(inputStream);
-			var element = document.getDocumentElement();
-			return getUnmarshaller().unmarshall(element);
-		} catch (XMLParserException | UnmarshallingException e) {
-			throw new Saml2Exception("Failed to deserialize LogoutRequest", e);
-		}
-	}
-
-	private ResponseUnmarshaller getUnmarshaller() {
-		if (Objects.nonNull(unmarshaller)) {
-			return unmarshaller;
-		}
-
-		unmarshaller = (ResponseUnmarshaller) XMLObjectProviderRegistrySupport.getUnmarshallerFactory()
-				.getUnmarshaller(Response.DEFAULT_ELEMENT_NAME);
-		return unmarshaller;
-	}
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Verifier.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Verifier.java
deleted file mode 100644
index e8cdf4d18e1ce1846294a165a1da80175aef452e..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Verifier.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * 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.nachrichten.antragraum;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-
-import jakarta.annotation.PostConstruct;
-
-import org.opensaml.saml.security.impl.SAMLSignatureProfileValidator;
-import org.opensaml.xmlsec.signature.support.SignatureTrustEngine;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.security.saml2.core.Saml2Error;
-import org.springframework.security.saml2.core.Saml2ErrorCodes;
-import org.springframework.stereotype.Service;
-
-import lombok.RequiredArgsConstructor;
-import lombok.extern.log4j.Log4j2;
-import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
-
-@Log4j2
-@RequiredArgsConstructor
-@Service
-@ConditionalOnProperty(AntragraumProperties.PROPERTY_ANTRAGSRAUM_URL)
-class Saml2Verifier {
-	public static final String INVALID_SIGNATURE = "Invalid signature for object [%s]: ";
-	public static final String SIGNATURE_MISSING = "Signature missing";
-	private final Saml2Parser parser;
-	private final BayernIdSamlConfiguration configuration;
-	private SignatureTrustEngine trustEngine;
-	private CriteriaSet verificationCriteria;
-
-	@PostConstruct
-	void init() {
-		trustEngine = configuration.getTrustEngine();
-		verificationCriteria = configuration.getVerificationCriteria();
-	}
-
-	List<Saml2Error> verify(String samlToken) {
-		var response = parser.parse(samlToken);
-
-		List<Saml2Error> errors = new ArrayList<>();
-		var signature = response.getSignature();
-		var profileValidator = new SAMLSignatureProfileValidator();
-		if (Objects.nonNull(signature)) {
-			try {
-				profileValidator.validate(signature);
-			} catch (Exception ex) {
-				LOG.error("Error validating SAML Token: ", ex);
-				errors.add(new Saml2Error(Saml2ErrorCodes.INVALID_SIGNATURE, INVALID_SIGNATURE.formatted(response.getID())));
-			}
-
-			try {
-				if (!trustEngine.validate(signature, verificationCriteria)) {
-					errors.add(new Saml2Error(Saml2ErrorCodes.INVALID_SIGNATURE, INVALID_SIGNATURE.formatted(response.getID())));
-				}
-			} catch (Exception ex) {
-				LOG.error("Error validating SAML Token: ", ex);
-				errors.add(new Saml2Error(Saml2ErrorCodes.INVALID_SIGNATURE, INVALID_SIGNATURE.formatted(response.getID())));
-			}
-		} else {
-			errors.add(new Saml2Error(Saml2ErrorCodes.INVALID_SIGNATURE, SIGNATURE_MISSING));
-		}
-
-		return errors;
-	}
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeRemoteService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeRemoteService.java
deleted file mode 100644
index 1263c973b8dacb71b7d05752974c99d0f3580be7..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeRemoteService.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.attributes;
-
-import org.springframework.stereotype.Service;
-
-import de.ozgcloud.nachrichten.common.grpc.NachrichtenCallContextAttachingInterceptor;
-import de.ozgcloud.vorgang.grpc.clientAttribute.ClientAttributeServiceGrpc.ClientAttributeServiceBlockingStub;
-import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcAccessPermission;
-import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute;
-import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttributeValue;
-import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcSetClientAttributeRequest;
-import net.devh.boot.grpc.client.inject.GrpcClient;
-
-@Service
-class ClientAttributeRemoteService {
-
-	@GrpcClient("pluto")
-	private ClientAttributeServiceBlockingStub stub;
-
-	public void setBooleanReadOnlyClientAttribute(String vorgangId, String attributeName, boolean value) {
-		stub.withInterceptors(new NachrichtenCallContextAttachingInterceptor())
-				.set(buildRequest(vorgangId, attributeName, value));
-	}
-
-	private GrpcSetClientAttributeRequest buildRequest(String vorgangId, String attributeName, boolean value) {
-		return buildRequest(vorgangId, GrpcClientAttribute.newBuilder()
-				.setAccess(GrpcAccessPermission.READ_ONLY)
-				.setAttributeName(attributeName)
-				.setValue(GrpcClientAttributeValue.newBuilder().setBoolValue(value).build()).build());
-	}
-
-	public void setBooleanWriteableClientAttribute(String vorgangId, String attributeName, boolean value) {
-		stub.withInterceptors(new NachrichtenCallContextAttachingInterceptor())
-				.set(buildRequestForWritableAttribute(vorgangId, attributeName, value));
-	}
-
-	private GrpcSetClientAttributeRequest buildRequestForWritableAttribute(String vorgangId, String attributeName, boolean value) {
-		return buildRequest(vorgangId, GrpcClientAttribute.newBuilder()
-				.setAccess(GrpcAccessPermission.READ_WRITE)
-				.setAttributeName(attributeName)
-				.setValue(GrpcClientAttributeValue.newBuilder().setBoolValue(value).build()).build());
-	}
-
-	private GrpcSetClientAttributeRequest buildRequest(String vorgangId, GrpcClientAttribute attribute) {
-		return GrpcSetClientAttributeRequest.newBuilder()
-				.setVorgangId(vorgangId)
-				.setAttribute(attribute)
-				.build();
-	}
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeService.java
deleted file mode 100644
index 7588936184d490bdc797d2e1079e9d18942f3039..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeService.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.attributes;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.stereotype.Service;
-
-@Service("nachrichtenClientAttributeService")
-public class ClientAttributeService {
-
-	static final String ATTRIBUTE_NAME_HAS_POSTFACH_NACHRICHT = "hasPostfachNachricht";
-
-	static final String ATTRIBUTE_NAME_HAS_NEW_POSTFACH_NACHRICHT = "hasNewPostfachNachricht";
-
-	@Autowired
-	private ClientAttributeRemoteService remoteService;
-
-	@Async
-	public void setHasPostfachNachricht(String vorgangId) {
-		remoteService.setBooleanReadOnlyClientAttribute(vorgangId, ATTRIBUTE_NAME_HAS_POSTFACH_NACHRICHT, true);
-	}
-
-	@Async
-	public void setHasNewPostfachNachricht(String vorgangId) {
-		remoteService.setBooleanWriteableClientAttribute(vorgangId, ATTRIBUTE_NAME_HAS_NEW_POSTFACH_NACHRICHT, true);
-	}
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeTestFactory.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeTestFactory.java
deleted file mode 100644
index 1938b59ea336a5de1bfb9eed068e0442f61d4b60..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeTestFactory.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.attributes;
-
-public class ClientAttributeTestFactory {
-
-	static final String ATTRIBUTE_NAME = "TestAttribute";
-	static final String VALUE = "TestStringValue";
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/errorhandling/FunctionalException.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/errorhandling/FunctionalException.java
deleted file mode 100644
index df6be012c461f8428c0a34fea27db273db722e41..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/errorhandling/FunctionalException.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.common.errorhandling;
-
-public class FunctionalException extends RuntimeException {
-
-	private static final long serialVersionUID = 1L;
-
-	public FunctionalException(String message, Throwable cause) {
-		super(message, cause);
-	}
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/errorhandling/TechnicalException.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/errorhandling/TechnicalException.java
deleted file mode 100644
index 307353addb43e18be2ccc745c9f139f08bee5b2a..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/errorhandling/TechnicalException.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.common.errorhandling;
-
-@Deprecated /** please use {@link de.ozgcloud.common.errorhandling.TechnicalException} */
-public class TechnicalException extends RuntimeException {
-
-	private static final long serialVersionUID = 1L;
-
-	public TechnicalException(String message) {
-		super(message);
-	}
-
-	public TechnicalException(String message, Throwable cause) {
-		super(message, cause);
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/grpc/NachrichtenCallContextAttachingInterceptor.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/grpc/NachrichtenCallContextAttachingInterceptor.java
deleted file mode 100644
index d3fa03da97bf23b79dfc2d31325b28777260d8be..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/grpc/NachrichtenCallContextAttachingInterceptor.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.common.grpc;
-
-import static de.ozgcloud.common.grpc.GrpcUtil.*;
-
-import java.util.UUID;
-
-import io.grpc.CallOptions;
-import io.grpc.Channel;
-import io.grpc.ClientCall;
-import io.grpc.ClientInterceptor;
-import io.grpc.ForwardingClientCall.SimpleForwardingClientCall;
-import io.grpc.Metadata;
-import io.grpc.MethodDescriptor;
-
-public class NachrichtenCallContextAttachingInterceptor implements ClientInterceptor {
-
-	static final String KEY_USER_ID = "USER_ID-bin";
-	static final String KEY_CLIENT_NAME = "CLIENT_NAME-bin";
-	static final String KEY_REQUEST_ID = "REQUEST_ID-bin";
-
-	public static final String NACHRICHTEN_MANAGER_CLIENT_NAME = "OzgCloud_NachrichtenManager";
-	static final String NACHRICHTEN_MANAGER_SENDER_USER_ID = "system-nachrichten_manager-sender";
-
-	// <A> = Request, <B> = Response
-	@Override
-	public <A, B> ClientCall<A, B> interceptCall(MethodDescriptor<A, B> method, CallOptions callOptions, Channel next) {
-		return new CallContextAttachingClientCall<>(next.newCall(method, callOptions));
-	}
-
-	final class CallContextAttachingClientCall<A, B> extends SimpleForwardingClientCall<A, B> {
-
-		protected CallContextAttachingClientCall(ClientCall<A, B> delegate) {
-			super(delegate);
-		}
-
-		@Override
-		public void start(Listener<B> responseListener, Metadata headers) {
-			headers.merge(buildCallContextMetadata());
-			super.start(responseListener, headers);
-		}
-
-		private Metadata buildCallContextMetadata() {
-			var metadata = new Metadata();
-
-			metadata.put(createKeyOf(KEY_USER_ID), NACHRICHTEN_MANAGER_SENDER_USER_ID.getBytes());
-			metadata.put(createKeyOf(KEY_CLIENT_NAME), NACHRICHTEN_MANAGER_CLIENT_NAME.getBytes());
-			metadata.put(createKeyOf(KEY_REQUEST_ID), generateRequestId().getBytes());
-
-			return metadata;
-		}
-
-		// TODO OZG-1974 requestId zentraler erzeugen
-		private String generateRequestId() {
-			return UUID.randomUUID().toString();
-		}
-
-	}
-
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/EMailService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/EMailService.java
deleted file mode 100644
index 8f5c54e5ddc42b29e9c78810d1fa423db98adb4d..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/EMailService.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.email;
-
-import java.util.Objects;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationEventPublisher;
-import org.springframework.mail.MailException;
-import org.springframework.mail.javamail.JavaMailSender;
-import org.springframework.mail.javamail.MimeMessageHelper;
-import org.springframework.stereotype.Service;
-
-import de.ozgcloud.common.errorhandling.TechnicalException;
-import de.ozgcloud.nachrichten.email.MailSendRequest.MailAttachment;
-import jakarta.mail.MessagingException;
-import jakarta.mail.internet.MimeMessage;
-import lombok.extern.log4j.Log4j2;
-
-@Service
-@Log4j2
-class EMailService {
-
-	static final String HEADER_READ_RECEIPT = "Read-Receipt-To";
-	static final String HEADER_CONFIRM_READING = "X-Confirm-reading-to";
-	static final String HEADER_DISPOSITION_NOTIFICATION = "Disposition-Notification-To";
-	static final String HEADER_SENSITIVITY = "Sensitivity"; // RFC2156
-	static final String VALUE_SENSITIVITY = "Company-Confidential";
-
-	@Autowired
-	private JavaMailSender sender;
-
-	@Autowired
-	private ApplicationEventPublisher publisher;
-
-	public void sendEmail(MailSendRequest request) {
-		MimeMessage message = sender.createMimeMessage();
-		prepareAndSendMail(message, request);
-	}
-
-	void prepareAndSendMail(MimeMessage message, MailSendRequest request) {
-		MimeMessageHelper helper = buildMultipartHelper(message);
-
-		writeEmail(helper, request);
-		addAttachments(helper, request);
-		if (request.isReceiptRequired()) {
-			requestReceipt(message, request);
-		}
-		addHeader(message, "Content-Transfer-Encoding", "quoted-printable");
-		send(message, request);
-	}
-
-	void writeEmail(MimeMessageHelper helper, MailSendRequest request) {
-		try {
-			var toAddresses = request.getToAddresses().stream().map(this::formatEmailAddress).toArray(String[]::new);
-			helper.setTo(toAddresses);
-			helper.setFrom(request.getFromAddress());
-			helper.setSubject(request.getSubject());
-			helper.setText(request.getBody());
-			// TODO replyTo ausbauen
-			setReplyTo(helper, request);
-		} catch (MessagingException e) {
-			throw new TechnicalException("Error writing mail", e);
-		}
-	}
-
-	private String formatEmailAddress(MailRecipient mailRecipient) {
-		if (StringUtils.isAllBlank(mailRecipient.firstName(), mailRecipient.lastName())) {
-			return mailRecipient.email();
-		}
-		var builder = new StringBuilder();
-		if (StringUtils.isNotEmpty(mailRecipient.firstName())) {
-			builder.append(mailRecipient.firstName()).append(" ");
-		}
-		if (StringUtils.isNotEmpty(mailRecipient.lastName())) {
-			builder.append(mailRecipient.lastName()).append(" ");
-		}
-		return builder.append("<").append(mailRecipient.email()).append(">").toString();
-	}
-
-	private void setReplyTo(MimeMessageHelper helper, MailSendRequest request) throws MessagingException {
-		if (Objects.nonNull(request.getReplyTo())) {
-			helper.setReplyTo(request.getReplyTo());
-		}
-	}
-
-	void requestReceipt(MimeMessage message, MailSendRequest request) {
-		addHeader(message, HEADER_READ_RECEIPT, request.getFromAddress());
-		addHeader(message, HEADER_CONFIRM_READING, request.getFromAddress());
-		addHeader(message, HEADER_DISPOSITION_NOTIFICATION, request.getFromAddress());
-	}
-
-	private void addHeader(MimeMessage message, String header, String value) {
-		try {
-			message.addHeader(header, value);
-		} catch (MessagingException e) {
-			throw new TechnicalException(String.format("Error adding header '%s' with value '%s'", header, value), e);
-		}
-	}
-
-	void addAttachments(MimeMessageHelper helper, MailSendRequest request) {
-		request.getAttachments().forEach(attachment -> addAttachment(helper, attachment));
-	}
-
-	private void addAttachment(MimeMessageHelper helper, MailAttachment attachment) {
-		try {
-			if (Objects.isNull(attachment.getContentId())) {
-				helper.addAttachment(attachment.getDataSource().getName(), attachment.getDataSource());
-			} else {
-				helper.addInline(attachment.getContentId(), attachment.getDataSource());
-
-			}
-
-		} catch (MessagingException e) {
-			throw new TechnicalException("Error adding Attachment.", e);
-		}
-	}
-
-	private MimeMessageHelper buildMultipartHelper(MimeMessage message) {
-		try {
-			return new MimeMessageHelper(message, true);
-		} catch (MessagingException e) {
-			throw new TechnicalException("Error creating multipart message helper.", e);
-		}
-	}
-
-	void send(MimeMessage message, MailSendRequest request) {
-		try {
-			sender.send(message);
-			publisher.publishEvent(new MailSentEvent(request));
-		} catch (MailException e) {
-			LOG.error("Error sending mail", e);
-			publisher.publishEvent(new MailSendErrorEvent(request, e.getMessage()));
-		}
-	}
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/EmailGrpcService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/EmailGrpcService.java
deleted file mode 100644
index 4a53a505a48ece44cdbc9d1ed82cbe783de11634..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/EmailGrpcService.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.email;
-
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-
-import de.ozgcloud.nachrichten.email.MailSendRequest.MailSendRequestBuilder;
-import io.grpc.stub.StreamObserver;
-import net.devh.boot.grpc.server.service.GrpcService;
-
-@GrpcService
-public class EmailGrpcService extends EmailServiceGrpc.EmailServiceImplBase {
-
-	@Autowired
-	private MailService mailService;
-
-	@Value("${ozgcloud.notification.mail-from}")
-	private String mailFrom;
-
-	@Override
-	public void sendEmail(GrpcSendEmailRequest grpcRequest, StreamObserver<GrpcSendEmailResponse> responseObserver) {
-		createSendMailRequests(grpcRequest).forEach(mailService::sendMail);
-		responseObserver.onNext(GrpcSendEmailResponse.newBuilder().build());
-		responseObserver.onCompleted();
-	}
-
-	private List<MailSendRequest> createSendMailRequests(GrpcSendEmailRequest grpcRequest) {
-		var subject = grpcRequest.getSubject();
-		var body = grpcRequest.getBody();
-		return grpcRequest.getRecipientsList().stream()
-				.map(this::prepareMailSendRequest)
-				.map(builder -> builder.subject(subject).body(body).build())
-				.toList();
-	}
-
-	private MailSendRequestBuilder prepareMailSendRequest(GrpcRecipient recipient) {
-		var mailRecipient = MailRecipient.builder().firstName(recipient.getFirstName()).lastName(recipient.getLastName()).email(recipient.getEmail())
-				.build();
-		return MailSendRequest.builder().fromAddress(mailFrom).toAddress(mailRecipient);
-	}
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailRecipient.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailRecipient.java
deleted file mode 100644
index e5f76ec83abb204fb3e88ffd4c69f1ff243548b2..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailRecipient.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.email;
-
-import lombok.Builder;
-
-@Builder
-public record MailRecipient(String firstName, String lastName, String email) {
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSendErrorEvent.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSendErrorEvent.java
deleted file mode 100644
index 0bb7d78e7a4dc551691dea0b5f3425d15e95aa31..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSendErrorEvent.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.email;
-
-import org.springframework.context.ApplicationEvent;
-
-import lombok.Getter;
-
-public class MailSendErrorEvent extends ApplicationEvent {
-
-	private static final long serialVersionUID = 1L;
-
-	@Getter
-	private final String errorMessage;
-
-	MailSendErrorEvent(MailSendRequest source, String errorMessage) {
-		super(source);
-		this.errorMessage = errorMessage;
-	}
-
-	@Override
-	public MailSendRequest getSource() {
-		return (MailSendRequest) super.getSource();
-	}
-
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSendRequest.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSendRequest.java
deleted file mode 100644
index 8026f7cc8e9c1c1f287ec4621e7354092a02f648..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSendRequest.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.email;
-
-import java.util.Collection;
-
-import jakarta.activation.DataSource;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.Singular;
-
-@Getter
-@Builder
-public class MailSendRequest {
-
-	private String fromAddress;
-	@Singular
-	private Collection<MailRecipient> toAddresses;
-
-	private String replyTo;
-
-	private String subject;
-	private String body;
-	@Singular
-	private Collection<MailAttachment> attachments;
-
-	private boolean receiptRequired;
-
-	private Object requestReference;
-
-	@Getter
-	@Builder
-	public static class MailAttachment {
-
-		private DataSource dataSource;
-		private String contentId;
-
-	}
-
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSentEvent.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSentEvent.java
deleted file mode 100644
index 1c69e781b75afd951e5b3dee5c2b840765a90039..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSentEvent.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.email;
-
-import org.springframework.context.ApplicationEvent;
-
-public class MailSentEvent extends ApplicationEvent {
-
-	private static final long serialVersionUID = 1L;
-
-	MailSentEvent(MailSendRequest source) {
-		super(source);
-	}
-
-	@Override
-	public MailSendRequest getSource() {
-		return (MailSendRequest) super.getSource();
-	}
-
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailService.java
deleted file mode 100644
index 1dd1bbde8018bbd11c39c1dff3c44590a05e20cc..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailService.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.email;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.stereotype.Service;
-
-@Service
-public class MailService {
-
-	@Autowired
-	private EMailService emailService;
-
-	@Async
-	public void sendMail(MailSendRequest request) {
-		emailService.sendEmail(request);
-	}
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerRemoteService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerRemoteService.java
deleted file mode 100644
index 47e348e465deef3bf276d8e01040f37c03bf0c82..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerRemoteService.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package de.ozgcloud.nachrichten.info;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import de.ozgcloud.info.nachricht.GrpcNewNachrichtRequest;
-import de.ozgcloud.info.nachricht.NachrichtServiceGrpc.NachrichtServiceBlockingStub;
-import net.devh.boot.grpc.client.inject.GrpcClient;
-
-@Service
-class InfoManagerRemoteService {
-
-	@GrpcClient("info-manager")
-	private NachrichtServiceBlockingStub nachrichtServiceStub;
-
-	@Autowired
-	private InfomanagerNachrichtMapper nachrichtMapper;
-
-	public String sendNotification(InfoManagerRequest nachricht) {
-		var grpcNewNachrichtReply = nachrichtServiceStub.saveNewNachricht(buildNachrichtRequest(nachricht));
-		return grpcNewNachrichtReply.getStatus();
-	}
-
-	GrpcNewNachrichtRequest buildNachrichtRequest(InfoManagerRequest nachricht) {
-		return GrpcNewNachrichtRequest.newBuilder().setNachricht(nachrichtMapper.toGrpc(nachricht)).build();
-	}
-
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerRequest.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerRequest.java
deleted file mode 100644
index 639de00a4579a5bb79587ae266e6a3b7c70de697..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerRequest.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package de.ozgcloud.nachrichten.info;
-
-import lombok.Builder;
-import lombok.Getter;
-
-@Builder
-@Getter
-public class InfoManagerRequest {
-
-	private String nachrichtId;
-	private String vorgangId;
-	private String postfachId;
-	private String nachrichtenManagerUrl;
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerService.java
deleted file mode 100644
index 0894f261289cbb127021fda5807a1a889e5615f6..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerService.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package de.ozgcloud.nachrichten.info;
-
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-
-import de.ozgcloud.nachrichten.NachrichtenManagerProperties;
-import de.ozgcloud.nachrichten.antragraum.AntragraumProperties;
-import de.ozgcloud.nachrichten.postfach.PostfachException;
-import de.ozgcloud.nachrichten.postfach.PostfachMessageCode;
-import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
-import lombok.RequiredArgsConstructor;
-
-@RequiredArgsConstructor
-@ConditionalOnProperty(AntragraumProperties.PROPERTY_ANTRAGSRAUM_URL)
-public class InfoManagerService {
-
-	private final InfoManagerRemoteService infomanagerRemoteService;
-	private final NachrichtenManagerProperties nachrichtenManagerProperties;
-
-	public void notifyInfoManager(PostfachNachricht postfachNachricht) {
-		try {
-			infomanagerRemoteService.sendNotification(builInfomanagerRequest(postfachNachricht));
-		} catch (RuntimeException e) {
-			throw new PostfachException("Error while sending notification to Antragsraum", PostfachMessageCode.PROCESS_FAILED_MESSAGE_CODE, e);
-		}
-	}
-
-	InfoManagerRequest builInfomanagerRequest(PostfachNachricht postfachNachricht) {
-		return InfoManagerRequest.builder()
-				.nachrichtId(postfachNachricht.getId())
-				.vorgangId(postfachNachricht.getVorgangId())
-				.postfachId(postfachNachricht.getPostfachId())
-				.nachrichtenManagerUrl(nachrichtenManagerProperties.getUrl())
-				.build();
-	}
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfomanagerNachrichtMapper.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfomanagerNachrichtMapper.java
deleted file mode 100644
index 655bdc3f724e1792b4ee5fb0408f10d403e354fd..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfomanagerNachrichtMapper.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package de.ozgcloud.nachrichten.info;
-
-import org.mapstruct.Mapper;
-import org.mapstruct.Mapping;
-
-import de.ozgcloud.info.nachricht.GrpcNachricht;
-
-@Mapper
-interface InfomanagerNachrichtMapper {
-
-	@Mapping(target = "nachrichtenListUrl", source = "nachrichtenManagerUrl")
-	GrpcNachricht toGrpc(InfoManagerRequest infomanagerNachricht);
-
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfomanagerProperties.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfomanagerProperties.java
deleted file mode 100644
index eb89410dcb38b94405da0135acbfbb0db0fff40d..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfomanagerProperties.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package de.ozgcloud.nachrichten.info;
-
-import jakarta.validation.constraints.NotEmpty;
-
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.validation.annotation.Validated;
-
-import de.ozgcloud.nachrichten.antragraum.AntragraumProperties;
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-@Configuration
-@ConfigurationProperties(prefix = "grpc.client.info-manager")
-@ConditionalOnProperty(AntragraumProperties.PROPERTY_ANTRAGSRAUM_URL)
-@Validated
-public class InfomanagerProperties {
-
-	@NotEmpty
-	private String address;
-
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/AttachmentFile.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/AttachmentFile.java
deleted file mode 100644
index 0133636869be97afda3d6b5f1475c5773fe5a720..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/AttachmentFile.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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.nachrichten.postfach;
-
-import static java.util.Objects.*;
-
-import java.io.InputStream;
-import java.util.function.Supplier;
-
-import lombok.AccessLevel;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.ToString;
-
-@Builder
-@Getter
-@ToString
-public class AttachmentFile {
-	private String name;
-	private String contentType;
-	@Getter(AccessLevel.NONE)
-	@ToString.Exclude
-	private Supplier<InputStream> content;
-
-	public InputStream getContent() {
-		if (isNull(content)) {
-			return InputStream.nullInputStream();
-		}
-		return content.get();
-	}
-
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/BinaryFileService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/BinaryFileService.java
deleted file mode 100644
index 6f7465cea0ab0426c3ddcf8f456a159479905a53..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/BinaryFileService.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach;
-
-import java.io.InputStream;
-
-import com.mongodb.client.gridfs.model.GridFSFile;
-
-//Temporally replacement for using GRPC Api
-public interface BinaryFileService {
-
-	InputStream getUploadedFileStream(FileId fileId);
-
-	GridFSFile getFile(FileId fileId);
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/FileId.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/FileId.java
deleted file mode 100644
index 785167921385774bb9e5ebd5917fc73f0e2a2523..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/FileId.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach;
-
-import java.util.UUID;
-
-import de.ozgcloud.common.datatype.StringBasedValue;
-import lombok.EqualsAndHashCode;
-
-@EqualsAndHashCode(callSuper = true)
-public class FileId extends StringBasedValue {
-
-	private static final long serialVersionUID = 1L;
-
-	FileId(String fileId) {
-		super(fileId);
-	}
-
-	public static FileId createNew() {
-		return from(UUID.randomUUID().toString());
-	}
-
-	public static FileId from(String fileId) {
-		return new FileId(fileId);
-	}
-
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachNachrichtMapper.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachNachrichtMapper.java
deleted file mode 100644
index 53a1512d66e5c20b10821c3953e9343ccb7ac690..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachNachrichtMapper.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package de.ozgcloud.nachrichten.postfach;
-
-import org.mapstruct.Mapper;
-import org.mapstruct.Mapping;
-
-import de.ozgcloud.vorgang.common.GrpcObject;
-import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper;
-
-@Mapper(uses = GrpcObjectMapper.class)
-public interface GrpcPostfachNachrichtMapper {
-
-	@Mapping(target = "attachments", source = "attachmentList")
-	@Mapping(target = "createdAt", ignore = true)
-	@Mapping(target = "createdBy", ignore = true)
-	@Mapping(target = "direction", constant = "OUT")
-	@Mapping(target = "messageCode", ignore = true)
-	@Mapping(target = "messageId", ignore = true)
-	@Mapping(target = "postfachId", ignore = true)
-	@Mapping(target = "sentAt", ignore = true)
-	@Mapping(target = "sentSuccessful", ignore = true)
-	@Mapping(target = "vorgangId", ignore = true)
-	PostfachNachricht mapFromGrpc(GrpcPostfachNachricht nachricht);
-
-	default PostfachAddressIdentifier map(GrpcObject value) {
-		return StringBasedIdentifier.builder().postfachId(value.getProperty(0).getValue(0)).build();
-	}
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/NotConfiguredException.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/NotConfiguredException.java
deleted file mode 100644
index a677491d25e04978252be8dd2cc48a70cf89bdd4..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/NotConfiguredException.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach;
-
-public class NotConfiguredException extends PostfachException { // NOSONAR
-
-	private static final long serialVersionUID = 1L;
-
-	public NotConfiguredException() {
-		super("Postfach is not completely configured. Sending and receiving of postfach mails is not possible.",
-				PostfachMessageCode.SERVER_CONNECTION_FAILED_MESSAGE_CODE);
-	}
-
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtService.java
deleted file mode 100644
index e25434580bfdd469b80fbf950f39197c53996c6e..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtService.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach;
-
-import java.util.Map;
-import java.util.Optional;
-import java.util.stream.Stream;
-
-//Temporally replacement for usign GRPC Api
-public interface PersistPostfachNachrichtService {
-
-	void persistNachricht(Optional<String> userId, PostfachNachricht nachricht);
-
-	Stream<Map<String, Object>> findByVorgangAsMap(String vorgangId);
-
-	Optional<Map<String, Object>> findById(String nachrichtId);
-
-	void patch(String postfachMailId, Map<String, Object> propertyMap);
-
-	Map<String, Object> getById(String itemId);
-
-	// TODO use file id as soon it is available
-	String persistAttachment(String vorgangId, AttachmentFile attachment);
-
-	Stream<PostfachNachricht> findRueckfragen(String postfachId);
-
-	/**
-	 * Persists the given answer
-	 * 
-	 * @param answer       The given answer
-	 * @param rueckfrageId The ID of the original Rueckfrage
-	 * @return
-	 */
-	String persistAnswer(String rueckfrageId, PostfachNachricht answer);
-
-	/**
-	 * Returns all Answers given for the Rueckfrage identified by id
-	 * 
-	 * @param rueckfrageId ID of the Rueckfrage to load answers for.
-	 * @return all Answers
-	 */
-	Stream<PostfachNachricht> findAnswers(String rueckfrageId);
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/Postfach.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/Postfach.java
deleted file mode 100644
index 4177ff1a1adb9ab0204e17f8924ab574298c6ed2..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/Postfach.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package de.ozgcloud.nachrichten.postfach;
-
-import lombok.Builder;
-import lombok.Getter;
-
-@Builder
-@Getter
-class Postfach {
-
-	private String type;
-
-	private boolean isReplyAllowed;
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddress.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddress.java
deleted file mode 100644
index 29ce7bec0ced118af2891c46d6504ecfb783a9eb..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddress.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package de.ozgcloud.nachrichten.postfach;
-
-import lombok.Builder;
-import lombok.Getter;
-
-@Getter
-@Builder
-public class PostfachAddress {
-
-	public static final String VERSION_FIELD = "version";
-	public static final String TYPE_FIELD = "type";
-	public static final String IDENTIFIER_FIELD = "identifier";
-	public static final String SERVICEKONTO_TYPE_FIELD = "serviceKontoType";
-
-	private String version;
-	private int type;
-	private PostfachAddressIdentifier identifier;
-	private String serviceKontoType;
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddressIdentifier.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddressIdentifier.java
deleted file mode 100644
index 5d60cfbd4c5550d249fb6701571e058249dffa38..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddressIdentifier.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package de.ozgcloud.nachrichten.postfach;
-
-public interface PostfachAddressIdentifier {
-
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachBadRequestException.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachBadRequestException.java
deleted file mode 100644
index 6b9fdea6c23650971db706fd1792a6d5029cb3bf..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachBadRequestException.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach;
-
-public class PostfachBadRequestException extends PostfachException {
-
-	private static final long serialVersionUID = 1L;
-
-	public PostfachBadRequestException(Throwable cause) {
-		super("Bad-Request Received from Postfach Server", PostfachMessageCode.PROCESS_FAILED_MESSAGE_CODE, cause);
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachEventListener.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachEventListener.java
deleted file mode 100644
index 98dc2be90e015d7d16e8a549f8dbd9ec90725d2f..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachEventListener.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.function.Predicate;
-
-import org.apache.commons.collections.MapUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.event.EventListener;
-import org.springframework.stereotype.Component;
-
-import de.ozgcloud.command.Command;
-import de.ozgcloud.command.CommandCreatedEvent;
-import de.ozgcloud.nachrichten.postfach.PostfachNachricht.Direction;
-import lombok.extern.log4j.Log4j2;
-
-@Component
-@Log4j2
-public class PostfachEventListener {
-
-	private static final String IS_SEND_POSTFACH_NACHRICHT_COMMAND = "{T(de.ozgcloud.nachrichten.postfach.PostfachEventListener).IS_SEND_POSTFACH_NACHRICHT.test(event.getSource())}";
-
-	public static final Predicate<Command> IS_SEND_POSTFACH_NACHRICHT = command -> command.getOrder().equals("SEND_POSTFACH_NACHRICHT");
-
-	@Autowired
-	private PostfachService service;
-
-	@EventListener(condition = IS_SEND_POSTFACH_NACHRICHT_COMMAND)
-	public void sendPostfachNachricht(CommandCreatedEvent event) {
-		var command = event.getSource();
-		try {
-			service.sendMail(command.getId(), command.getCreatedBy(), buildNachricht(command, command.getBodyObject()));
-		} catch (RuntimeException e) {
-			service.publishMailSentFailedEvent(command.getId(), "Error on sending Postfach Nachricht: " + e.getMessage());
-			LOG.error("Error on sending Postfach Nachricht.", e);
-		}
-	}
-
-	private PostfachNachricht buildNachricht(Command command, Map<String, Object> commandBody) {
-		var postfachMailBuilder = PostfachNachricht.builder()
-				.id(isNewNachricht(command) ? null : command.getRelationId())
-				.vorgangId(command.getVorgangId())
-				.postfachId(MapUtils.getString(commandBody, PostfachNachricht.FIELD_POSTFACH_ID))
-				.replyOption(PostfachNachricht.ReplyOption.valueOf(MapUtils.getString(commandBody, PostfachNachricht.FIELD_REPLY_OPTION)))
-				.createdBy(command.getCreatedBy())
-				.direction(Direction.OUT)
-				.subject(MapUtils.getString(commandBody, PostfachNachricht.FIELD_SUBJECT))
-				.mailBody(MapUtils.getString(commandBody, PostfachNachricht.FIELD_MAIL_BODY))
-				.attachments(getStringListValue(commandBody, PostfachNachricht.FIELD_ATTACHMENTS));
-
-		Optional.ofNullable(getPostfachAddress(commandBody)).map(this::buildPostfachAddress).ifPresent(postfachMailBuilder::postfachAddress);
-
-		return postfachMailBuilder.build();
-	}
-
-	private boolean isNewNachricht(Command command) {
-		return Objects.isNull(command.getRelationId()) || StringUtils.equals(command.getVorgangId(), command.getRelationId());
-	}
-
-	private PostfachAddress buildPostfachAddress(Map<String, Object> postfachAddress) {
-		return PostfachAddress.builder()
-				.type(MapUtils.getIntValue(postfachAddress, PostfachAddress.TYPE_FIELD))
-				.version(MapUtils.getString(postfachAddress, PostfachAddress.VERSION_FIELD))
-				.identifier(buildIdentifier(postfachAddress))
-				.serviceKontoType(MapUtils.getString(postfachAddress, PostfachAddress.SERVICEKONTO_TYPE_FIELD))
-				.build();
-	}
-
-	@SuppressWarnings("unchecked")
-	private Map<String, Object> getPostfachAddress(Map<String, Object> commandBody) {
-		return (Map<String, Object>) commandBody.get(PostfachNachricht.POSTFACH_ADDRESS_FIELD);
-	}
-
-	private PostfachAddressIdentifier buildIdentifier(Map<String, Object> postfachAddress) {
-		var identifier = getIdentifier(postfachAddress);
-		return StringBasedIdentifier.builder().postfachId(MapUtils.getString(identifier, PostfachNachricht.FIELD_POSTFACH_ID)).build();
-	}
-
-	@SuppressWarnings("unchecked")
-	private Map<String, Object> getIdentifier(Map<String, Object> postfachAddress) {
-		return (Map<String, Object>) postfachAddress.get(PostfachAddress.IDENTIFIER_FIELD);
-	}
-
-	List<String> getStringListValue(Map<String, Object> commandBody, String fieldName) {
-		return Optional.ofNullable(commandBody.get(fieldName))
-				.map(this::mapObjectToList)
-				.orElse(Collections.emptyList());
-	}
-
-	private List<String> mapObjectToList(Object object) {
-		if (object instanceof Collection<?> objects) {
-			return objects.stream().map(Objects::toString).toList();
-		} else {
-			return List.of(object.toString());
-		}
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachException.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachException.java
deleted file mode 100644
index 26717bcba4d2b7f992fa845f1d2573c353117ffe..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachException.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach;
-
-import de.ozgcloud.common.errorhandling.TechnicalException;
-import lombok.Getter;
-
-public class PostfachException extends TechnicalException {
-
-	private static final long serialVersionUID = 1L;
-	@Getter
-	private final PostfachMessageCode messageCode;
-
-	public PostfachException(String message, PostfachMessageCode messageCode) {
-		super(message);
-		this.messageCode = messageCode;
-	}
-
-	public PostfachException(String message, PostfachMessageCode messageCode, Throwable cause) {
-		super(message, cause);
-
-		this.messageCode = messageCode;
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachGrpcService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachGrpcService.java
deleted file mode 100644
index 6a9cb11772b676ccb5d0a008c75f9776058a0f33..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachGrpcService.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach;
-
-import org.apache.commons.collections.CollectionUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import de.ozgcloud.nachrichten.postfach.PostfachServiceGrpc.PostfachServiceImplBase;
-import io.grpc.stub.StreamObserver;
-import net.devh.boot.grpc.server.service.GrpcService;
-
-@GrpcService
-class PostfachGrpcService extends PostfachServiceImplBase {
-
-	@Autowired
-	private PostfachService service;
-	@Autowired
-	private PostfachNachrichtMapper mapper;
-	@Autowired
-	private PostfachMapper postfachMapper;
-
-	@Autowired
-	private GrpcPostfachNachrichtMapper nachrichtMapper;
-
-	@Override
-	public void saveNachrichtDraft(GrpcSaveNachrichtDraftRequest request, StreamObserver<GrpcSaveNachrichtDraftResponse> response) {
-		service.saveDraft(request.getVorgangId(), nachrichtMapper.mapFromGrpc(request.getNachricht()));
-
-		response.onNext(GrpcSaveNachrichtDraftResponse.newBuilder().build());
-		response.onCompleted();
-	}
-
-	@Override
-	public void sendPostfachMail(GrpcSendPostfachMailRequest req, StreamObserver<GrpcSendPostfachMailResponse> response) {
-		service.sendMail(req.getCommandId(), req.getContext().getUser().getId(), mapper.fromGrpcMail(req.getMail()));
-
-		response.onNext(GrpcSendPostfachMailResponse.newBuilder().build());
-		response.onCompleted();
-	}
-
-	@Override
-	public void findPostfachMail(GrpcFindPostfachMailRequest req, StreamObserver<GrpcFindPostfachMailResponse> response) {
-		var responseBuilder = GrpcFindPostfachMailResponse.newBuilder();
-		service.findById(req.getNachrichtId()).map(mapper::fromMap).ifPresent(responseBuilder::setNachricht);
-
-		response.onNext(responseBuilder.build());
-		response.onCompleted();
-	}
-
-	@Override
-	public void findPostfachMails(GrpcFindPostfachMailsRequest req, StreamObserver<GrpcFindPostfachMailsResponse> response) {
-		var mails = service.findByVorgang(req.getVorgangId()).map(mapper::fromMap).toList();
-
-		response.onNext(GrpcFindPostfachMailsResponse.newBuilder().addAllMails(mails).build());
-		response.onCompleted();
-	}
-
-	@Override
-	public void resendPostfachMail(GrpcResendPostfachMailRequest request, StreamObserver<GrpcResendPostfachMailResponse> response) {
-		service.resendMail(request.getCommandId(), request.getPostfachMailId());
-
-		response.onNext(GrpcResendPostfachMailResponse.newBuilder().build());
-		response.onCompleted();
-	}
-
-	@Override
-	public void isPostfachConfigured(GrpcIsPostfachConfiguredRequest request, StreamObserver<GrpcIsPostfachConfiguredResponse> response) {
-		response.onNext(GrpcIsPostfachConfiguredResponse.newBuilder().setIsConfigured(service.isPostfachConfigured()).build());
-		response.onCompleted();
-	}
-
-	@Override
-	public void getPostfachConfig(GrpcGetPostfachConfigRequest request, StreamObserver<GrpcGetPostfachConfigResponse> response) {
-		response.onNext(buildGetPostfachConfigResponse());
-		response.onCompleted();
-	}
-
-	GrpcGetPostfachConfigResponse buildGetPostfachConfigResponse() {
-		var grpcPostfachs = service.getPostfachs().map(postfachMapper::toGrpc).toList();
-		if (CollectionUtils.isEmpty(grpcPostfachs)) {
-			return GrpcGetPostfachConfigResponse.newBuilder().setConfigured(false).build();
-		}
-		return GrpcGetPostfachConfigResponse.newBuilder().setConfigured(true).addAllPostfach(grpcPostfachs).build();
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMailSentEvent.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMailSentEvent.java
deleted file mode 100644
index 84daf0b1b4cf05b11baf6d21fd4da166319abe1d..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMailSentEvent.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach;
-
-import de.ozgcloud.command.CommandExecutedEvent;
-
-public class PostfachMailSentEvent extends CommandExecutedEvent {
-
-	private static final long serialVersionUID = 1L;
-
-	PostfachMailSentEvent(String commandId) {
-		super(commandId);
-	}
-
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMailSentFailedEvent.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMailSentFailedEvent.java
deleted file mode 100644
index c139a1167aedc70086e476d260552fbf9d0b5424..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMailSentFailedEvent.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach;
-
-import de.ozgcloud.command.CommandFailedEvent;
-
-public class PostfachMailSentFailedEvent extends CommandFailedEvent {
-
-	private static final long serialVersionUID = 1L;
-
-	PostfachMailSentFailedEvent(String commandId, String errorMessage) {
-		super(commandId, errorMessage);
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMapper.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMapper.java
deleted file mode 100644
index 5ef07c77b6572b095e04af58b0d9de5cd659c86b..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMapper.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package de.ozgcloud.nachrichten.postfach;
-
-import org.mapstruct.Mapper;
-
-@Mapper
-public interface PostfachMapper {
-
-	GrpcPostfach toGrpc(Postfach postfach);
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMessageCode.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMessageCode.java
deleted file mode 100644
index edcdb065cdd9d24f228f0da6ab6ac17146981e8b..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMessageCode.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach;
-
-import lombok.AccessLevel;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-@AllArgsConstructor(access = AccessLevel.PRIVATE)
-public enum PostfachMessageCode {
-
-	PROCESS_FAILED_MESSAGE_CODE("postfachnachricht.server.processing_failed"),
-	SERVER_CONNECTION_FAILED_MESSAGE_CODE("postfachnachricht.server.connection_failed"),
-	SEND_SUCCESSFUL_MESSAGE_CODE("postfachnachricht.successful");
-
-	@Getter
-	private String messageCode;
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachricht.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachricht.java
deleted file mode 100644
index 54c5ccf3824951d6f9e32bd61f0c4cbfcc1f6221..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachricht.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach;
-
-import java.time.ZonedDateTime;
-import java.util.Collections;
-import java.util.List;
-
-import jakarta.validation.constraints.NotNull;
-import lombok.Builder;
-import lombok.Getter;
-
-@Builder(toBuilder = true)
-@Getter
-public class PostfachNachricht {
-
-	public enum ReplyOption {
-		POSSIBLE, MANDATORY, FORBIDDEN
-	}
-
-	public static final String FIELD_ID = "id";
-	public static final String FIELD_VORGANG_ID = "vorgangId";
-
-	public static final String FIELD_POSTFACH_ID = "postfachId";
-	public static final String POSTFACH_ADDRESS_FIELD = "postfachAddress";
-
-	public static final String FIELD_MESSAGE_ID = "messageId";
-	public static final String FIELD_CREATED_AT = "createdAt";
-	public static final String FIELD_CREATED_BY = "createdBy";
-	public static final String FIELD_SENT_AT = "sentAt";
-	public static final String FIELD_SENT_SUCCESSFUL = "sentSuccessful";
-	public static final String FIELD_MESSAGE_CODE = "messageCode";
-	public static final String FIELD_DIRECTION = "direction";
-	public static final String FIELD_SUBJECT = "subject";
-	public static final String FIELD_MAIL_BODY = "mailBody";
-	public static final String FIELD_REPLY_OPTION = "replyOption";
-	public static final String FIELD_ATTACHMENTS = "attachments";
-
-	public enum Direction {
-		IN, OUT
-	}
-
-	private String id;
-
-	private String vorgangId;
-	private String postfachId;
-	private PostfachAddress postfachAddress;
-	private String messageId;
-
-	@Builder.Default
-	private ZonedDateTime createdAt = ZonedDateTime.now().withNano(0);
-	private String createdBy;
-
-	private ZonedDateTime sentAt;
-	private Boolean sentSuccessful;
-	private String messageCode;
-
-	private Direction direction;
-
-	private String subject;
-	private String mailBody;
-
-	@NotNull
-	private ReplyOption replyOption;
-
-	@Builder.Default
-	private List<String> attachments = Collections.emptyList();
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapper.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapper.java
deleted file mode 100644
index d7b6ca635a2f6940a7f28777a64ce0a8d6bc4089..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapper.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach;
-
-import java.time.ZonedDateTime;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-
-import org.apache.commons.collections.MapUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.mapstruct.Mapper;
-import org.mapstruct.Mapping;
-import org.mapstruct.MappingConstants;
-import org.mapstruct.ReportingPolicy;
-import org.mapstruct.ValueMapping;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import de.ozgcloud.nachrichten.postfach.PostfachNachricht.Direction;
-import de.ozgcloud.vorgang.common.GrpcObject;
-import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper;
-
-@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN)
-public abstract class PostfachNachrichtMapper {
-
-	@Autowired
-	private GrpcObjectMapper grpcObjectMapper;
-
-	@Mapping(target = "attachments", source = "attachmentList")
-	@Mapping(target = "createdAt", ignore = true)
-	@Mapping(target = "createdBy", ignore = true)
-	@Mapping(target = "direction", ignore = true)
-	@Mapping(target = "messageId", ignore = true)
-	@Mapping(target = "sentAt", ignore = true)
-	@Mapping(target = "sentSuccessful", ignore = true)
-	@ValueMapping(source = "UNRECOGNIZED", target = MappingConstants.NULL)
-	@ValueMapping(source = "UNDEFINED", target = MappingConstants.NULL)
-	public abstract PostfachNachricht fromGrpcMail(GrpcPostfachMail grpcMail);
-
-	public PostfachAddressIdentifier toPostfachAddressIdentifier(GrpcObject grpcObject) {
-		var postfachId = grpcObject.getPropertyList().get(0).getValue(0);
-		return StringBasedIdentifier.builder().postfachId(postfachId).build();
-	}
-
-	@SuppressWarnings("unchecked")
-	public GrpcPostfachMail fromMap(Map<String, Object> mailMap) {
-		var postfachMailBuilder = GrpcPostfachMail.newBuilder()
-				.setId(MapUtils.getString(mailMap, PostfachNachricht.FIELD_ID))
-				.setVorgangId(MapUtils.getString(mailMap, PostfachNachricht.FIELD_VORGANG_ID))
-				.setPostfachId(MapUtils.getString(mailMap, PostfachNachricht.FIELD_POSTFACH_ID, StringUtils.EMPTY))
-				.setCreatedAt(MapUtils.getString(mailMap, PostfachNachricht.FIELD_CREATED_AT))
-				.setCreatedBy(MapUtils.getString(mailMap, PostfachNachricht.FIELD_CREATED_BY, StringUtils.EMPTY))
-				.setSentAt(MapUtils.getString(mailMap, PostfachNachricht.FIELD_SENT_AT, StringUtils.EMPTY))
-				.setSentSuccessful(MapUtils.getBooleanValue(mailMap, PostfachNachricht.FIELD_SENT_SUCCESSFUL, false))
-				.setMessageCode(MapUtils.getString(mailMap, PostfachNachricht.FIELD_MESSAGE_CODE, StringUtils.EMPTY))
-				.setDirection(GrpcDirection.valueOf(MapUtils.getString(mailMap, PostfachNachricht.FIELD_DIRECTION)))
-				.setSubject(MapUtils.getString(mailMap, PostfachNachricht.FIELD_SUBJECT))
-				.setMailBody(MapUtils.getString(mailMap, PostfachNachricht.FIELD_MAIL_BODY))
-				.setReplyOption(MapUtils.getString(mailMap, PostfachNachricht.FIELD_REPLY_OPTION))
-				.addAllAttachment((Iterable<String>) mailMap.getOrDefault(PostfachNachricht.FIELD_ATTACHMENTS, Collections.emptyList()));
-
-		Optional.ofNullable(getAsMap(mailMap, PostfachNachricht.POSTFACH_ADDRESS_FIELD))
-				.filter(MapUtils::isNotEmpty)
-				.map(this::buildGrpcPostfachAddress)
-				.ifPresent(postfachMailBuilder::setPostfachAddress);
-
-		return postfachMailBuilder.build();
-	}
-
-	GrpcPostfachAddress buildGrpcPostfachAddress(Map<String, Object> postfachAddressMap) {
-		var postfachAddressBuilder = GrpcPostfachAddress.newBuilder()
-				.setType(MapUtils.getIntValue(postfachAddressMap, PostfachAddress.TYPE_FIELD))
-				.setVersion(MapUtils.getString(postfachAddressMap, PostfachAddress.VERSION_FIELD))
-				.setIdentifier(grpcObjectMapper.fromMap(postfachAddressMap));
-		Optional.ofNullable(MapUtils.getString(postfachAddressMap, PostfachAddress.SERVICEKONTO_TYPE_FIELD))
-				.ifPresent(postfachAddressBuilder::setServiceKontoType);
-		return postfachAddressBuilder.build();
-	}
-
-	PostfachNachricht fromMapToPostfachMail(Map<String, Object> mailMap) {
-		var postfachMailBuilder = PostfachNachricht.builder()
-				.id(MapUtils.getString(mailMap, PostfachNachricht.FIELD_ID))
-				.vorgangId(MapUtils.getString(mailMap, (PostfachNachricht.FIELD_VORGANG_ID)))
-				.postfachId(MapUtils.getString(mailMap, PostfachNachricht.FIELD_POSTFACH_ID, StringUtils.EMPTY))
-				.messageId(MapUtils.getString(mailMap, PostfachNachricht.FIELD_MESSAGE_ID))
-				.createdAt(ZonedDateTime.parse(MapUtils.getString(mailMap, PostfachNachricht.FIELD_CREATED_AT)))
-				.createdBy(MapUtils.getString(mailMap, PostfachNachricht.FIELD_CREATED_BY))
-				.sentAt(getString(mailMap, PostfachNachricht.FIELD_SENT_AT).map(ZonedDateTime::parse).orElse(null))
-				.sentSuccessful(MapUtils.getBoolean(mailMap, PostfachNachricht.FIELD_SENT_SUCCESSFUL))
-				.messageCode(MapUtils.getString(mailMap, PostfachNachricht.FIELD_MESSAGE_CODE))
-				.direction(Direction.valueOf(MapUtils.getString(mailMap, PostfachNachricht.FIELD_DIRECTION)))
-				.subject(MapUtils.getString(mailMap, PostfachNachricht.FIELD_SUBJECT))
-				.mailBody(MapUtils.getString(mailMap, PostfachNachricht.FIELD_MAIL_BODY))
-				.replyOption(PostfachNachricht.ReplyOption.valueOf(MapUtils.getString(mailMap, PostfachNachricht.FIELD_REPLY_OPTION)))
-				.attachments(getAsList(mailMap, PostfachNachricht.FIELD_ATTACHMENTS));
-
-		Optional.ofNullable(getAsMap(mailMap, PostfachNachricht.POSTFACH_ADDRESS_FIELD))
-				.filter(MapUtils::isNotEmpty)
-				.map(this::buildPostfachAddress)
-				.ifPresent(postfachMailBuilder::postfachAddress);
-
-		return postfachMailBuilder.build();
-	}
-
-	private Optional<String> getString(Map<String, Object> mailMap, String key) {
-		return Optional.ofNullable(MapUtils.getString(mailMap, key));
-	}
-
-	@SuppressWarnings("unchecked")
-	private List<String> getAsList(Map<String, Object> mailMap, String fieldName) {
-		return (List<String>) mailMap.getOrDefault(fieldName, Collections.emptyList());
-	}
-
-	PostfachAddress buildPostfachAddress(Map<String, Object> postfachAddressMap) {
-		return PostfachAddress.builder()
-				.type(MapUtils.getIntValue(postfachAddressMap, PostfachAddress.TYPE_FIELD))
-				.version(MapUtils.getString(postfachAddressMap, PostfachAddress.VERSION_FIELD))
-				.identifier(buildIdentifier(postfachAddressMap))
-				.serviceKontoType(MapUtils.getString(postfachAddressMap, PostfachAddress.SERVICEKONTO_TYPE_FIELD))
-				.build();
-	}
-
-	PostfachAddressIdentifier buildIdentifier(Map<String, Object> postfachAddressMap) {
-		return StringBasedIdentifier.builder().postfachId(getPostfachId(postfachAddressMap)).build();
-	}
-
-	private String getPostfachId(Map<String, Object> postfachAddressMap) {
-		var identifier = getAsMap(postfachAddressMap, PostfachAddress.IDENTIFIER_FIELD);
-		return MapUtils.getString(identifier, PostfachNachricht.FIELD_POSTFACH_ID);
-
-	}
-
-	@SuppressWarnings("unchecked")
-	Map<String, Object> getAsMap(Map<String, Object> map, String fieldName) {
-		return MapUtils.getMap(map, fieldName, Collections.emptyMap());
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachRemoteService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachRemoteService.java
deleted file mode 100644
index be4e1c28a4027bd3c39f507dfe1a95bcfecdb8a0..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachRemoteService.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package de.ozgcloud.nachrichten.postfach;
-
-import java.util.stream.Stream;
-
-public interface PostfachRemoteService {
-
-	void sendMessage(PostfachNachricht nachricht);
-
-	Stream<PostfachNachricht> getAllMessages();
-
-	void deleteMessage(String messageId);
-
-	String getPostfachType();
-
-	boolean isReplyAllowed();
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachRuntimeException.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachRuntimeException.java
deleted file mode 100644
index c77551d186e651867b76f0bfd0d4a14b43550055..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachRuntimeException.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach;
-
-public class PostfachRuntimeException extends PostfachException {// NOSONAR
-
-	private static final long serialVersionUID = 1L;
-
-	public PostfachRuntimeException(Throwable cause) {
-		super("Error executing Request to Postfach", PostfachMessageCode.SERVER_CONNECTION_FAILED_MESSAGE_CODE, cause);
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachScheduler.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachScheduler.java
deleted file mode 100644
index 58dfa87a7ff91e447a0f45574fa67e548df5a70a..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachScheduler.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.context.annotation.Profile;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
-
-import net.javacrumbs.shedlock.spring.annotation.SchedulerLock;
-
-@Component
-@Profile("!itcase")
-@ConditionalOnBean(PostfachRemoteService.class)
-@ConditionalOnProperty(name = { "ozgcloud.osi.postfach.scheduler.enabled" })
-class PostfachScheduler {
-
-	@Autowired
-	private PostfachService service;
-
-	@Scheduled(initialDelayString = "${ozgcloud.osi.postfach.scheduler.initialDelay:5000}", //
-			fixedDelayString = "${ozgcloud.osi.postfach.scheduler.fixedDelay:900000}")
-	@SchedulerLock(name = "PostfachScheduler")
-	void runGetMessagesTask() {
-		service.fetchAndPersistReplies();
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachService.java
deleted file mode 100644
index c00faf36947a9ca9b608e65ae794025e0be89fbc..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachService.java
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach;
-
-import java.time.ZonedDateTime;
-import java.util.EnumSet;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
-import java.util.function.Predicate;
-import java.util.stream.Stream;
-
-import jakarta.validation.Valid;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationEventPublisher;
-import org.springframework.stereotype.Service;
-import org.springframework.validation.annotation.Validated;
-
-import de.ozgcloud.nachrichten.antragraum.AntragraumService;
-import de.ozgcloud.nachrichten.attributes.ClientAttributeService;
-import de.ozgcloud.nachrichten.info.InfoManagerService;
-import de.ozgcloud.nachrichten.postfach.PostfachNachricht.Direction;
-import de.ozgcloud.nachrichten.postfach.PostfachNachricht.ReplyOption;
-import de.ozgcloud.nachrichten.postfach.osi.OsiPostfachServerProcessException;
-import de.ozgcloud.vorgang.callcontext.CurrentUserService;
-import lombok.NonNull;
-import lombok.extern.log4j.Log4j2;
-
-@Log4j2
-@Service
-@Validated
-class PostfachService {
-
-	private static final Predicate<PostfachNachricht> IS_FROM_HUMAN_USER = nachricht -> !StringUtils.startsWith(nachricht.getCreatedBy(), "system");
-	private static final Set<String> POSTFACH_TYPES_WITH_ANTRAGSRAUM = Set.of("BayernId");
-
-	@Autowired(required = false)
-	private PostfachRemoteService postfachRemoteService;
-
-	private static final Set<ReplyOption> REPLY_POSSIBLE_OPTION = EnumSet.of(ReplyOption.POSSIBLE, ReplyOption.MANDATORY);
-
-	@Autowired
-	private PostfachNachrichtMapper mapper;
-
-	@Autowired
-	private PersistPostfachNachrichtService persistingService;
-	@Autowired
-	private ClientAttributeService clientAttributeService;
-
-	@Autowired
-	private ApplicationEventPublisher publisher;
-
-	@Autowired
-	private CurrentUserService userService;
-
-	@Autowired
-	private Optional<InfoManagerService> infomanagerService;
-	@Autowired
-	private Optional<AntragraumService> antragraumService;
-
-	public void saveDraft(String vorgangId, PostfachNachricht nachricht) {
-		persistMail(userService.getUser().getUserId(),
-				nachricht.toBuilder().vorgangId(vorgangId)
-						.createdBy(userService.getUser().getUserId().orElse(null))
-						.build());
-	}
-
-	public void sendMail(String commandId, String userId, @Valid PostfachNachricht mail) {
-		var sendResponse = handleSendMail(commandId, mail);
-		persistSentMail(userId, addMailSentInformation(mail, sendResponse));
-	}
-
-	PostfachNachricht addMailSentInformation(PostfachNachricht mail, SendPostfachNachrichtResponse sendResponse) {
-		return mail.toBuilder().sentAt(ZonedDateTime.now()).sentSuccessful(sendResponse.isSentSuccessful())
-				.messageCode(sendResponse.getMessageCode().getMessageCode())
-				.build();
-	}
-
-	void persistSentMail(@NonNull String userId, PostfachNachricht mail) {
-		persistMail(Optional.of(userId), mail.toBuilder()
-				.direction(Direction.OUT)
-				.createdAt(ZonedDateTime.now().withNano(0)).createdBy(userId)
-				.build());
-
-	}
-
-	public Optional<Map<String, Object>> findById(String nachrichtId) {
-		return persistingService.findById(nachrichtId);
-	}
-
-	public Stream<Map<String, Object>> findByVorgang(String vorgangId) {
-		return persistingService.findByVorgangAsMap(vorgangId);
-	}
-
-	public void fetchAndPersistReplies() {
-		ifPostfachConfigured(() -> postfachRemoteService.getAllMessages().forEach(this::persistReceivedMail));
-	}
-
-	private void persistReceivedMail(PostfachNachricht nachricht) {
-		persistMail(Optional.empty(), nachricht);
-		clientAttributeService.setHasNewPostfachNachricht(nachricht.getVorgangId());
-
-		postfachRemoteService.deleteMessage(nachricht.getMessageId());
-	}
-
-	void persistMail(Optional<String> userId, PostfachNachricht mail) {
-		persistingService.persistNachricht(userId, mail);
-
-		if (IS_FROM_HUMAN_USER.test(mail)) {
-			clientAttributeService.setHasPostfachNachricht(mail.getVorgangId());
-		}
-	}
-
-	public void resendMail(String commandId, String postfachMailId) {
-		PostfachNachricht nachricht = mapper.fromMapToPostfachMail(persistingService.getById(postfachMailId));
-
-		var sendResponse = handleSendMail(commandId, nachricht);
-		patchMail(nachricht.getId(), createResendPatchMap(sendResponse));
-	}
-
-	SendPostfachNachrichtResponse handleSendMail(String commandId, PostfachNachricht mail) {
-		try {
-			var processedPostfachNachricht = processForAntragsraum(mail).orElse(mail);
-			doSendMail(processedPostfachNachricht);
-
-			publishMailSentEvent(commandId);
-			return buildSendNachrichtResponse(true, PostfachMessageCode.SEND_SUCCESSFUL_MESSAGE_CODE);
-		} catch (OsiPostfachServerProcessException e) {
-			return proceedwithWarnException(commandId, e);
-
-		} catch (PostfachException e) {
-			return proceedWithErrorException(commandId, e);
-		}
-	}
-
-	Optional<PostfachNachricht> processForAntragsraum(PostfachNachricht mail) {
-		if (isNotifyAntragsraum(mail.getReplyOption())) {
-			infomanagerService.ifPresent(infoManager -> infoManager.notifyInfoManager(mail));
-			return adjustMail(mail);
-		}
-		return Optional.empty();
-	}
-
-	boolean isNotifyAntragsraum(ReplyOption replyOption) {
-		return REPLY_POSSIBLE_OPTION.contains(replyOption) && isPostfachWithAntragsraum(postfachRemoteService);
-	}
-
-	Optional<PostfachNachricht> adjustMail(PostfachNachricht nachricht) {
-		return antragraumService.map(antragraum -> nachricht.toBuilder().mailBody(antragraum.getUserNotificationText()).build());
-	}
-
-	SendPostfachNachrichtResponse proceedwithWarnException(String commandId, OsiPostfachServerProcessException e) {
-		LOG.warn(e.getMessage(), e);
-		return proceedWithException(commandId, e);
-	}
-
-	SendPostfachNachrichtResponse proceedWithErrorException(String commandId, PostfachException e) {
-		LOG.error(e.getMessage(), e);
-		return proceedWithException(commandId, e);
-	}
-
-	private SendPostfachNachrichtResponse proceedWithException(String commandId, PostfachException e) {
-		publishMailSentFailedEvent(commandId, e.getMessage());
-		return buildSendNachrichtResponse(false, e.getMessageCode());
-
-	}
-
-	void doSendMail(PostfachNachricht nachricht) {
-		ifPostfachConfigured(() -> postfachRemoteService.sendMessage(nachricht));
-	}
-
-	private void publishMailSentEvent(String commandId) {
-		publisher.publishEvent(new PostfachMailSentEvent(commandId));
-	}
-
-	public void publishMailSentFailedEvent(String commandId, String message) {
-		publisher.publishEvent(new PostfachMailSentFailedEvent(commandId, message));
-	}
-
-	private SendPostfachNachrichtResponse buildSendNachrichtResponse(boolean sentSuccesful, PostfachMessageCode messageCode) {
-		return SendPostfachNachrichtResponse.builder().sentSuccessful(sentSuccesful).messageCode(messageCode).build();
-	}
-
-	Map<String, Object> createResendPatchMap(SendPostfachNachrichtResponse sendResponse) {
-		return Map.of(PostfachNachricht.FIELD_SENT_AT, ZonedDateTime.now().withNano(0).toString(),
-				PostfachNachricht.FIELD_SENT_SUCCESSFUL, sendResponse.isSentSuccessful(),
-				PostfachNachricht.FIELD_MESSAGE_CODE, sendResponse.getMessageCode().getMessageCode());
-	}
-
-	private void patchMail(String postfachMailId, Map<String, Object> propertyMap) {
-		persistingService.patch(postfachMailId, propertyMap);
-	}
-
-	public boolean isPostfachConfigured() {
-		return postfachRemoteService != null;
-	}
-
-	public Stream<Postfach> getPostfachs() {
-		return isPostfachConfigured() ? Stream.of(buildPostfach(postfachRemoteService)) : Stream.empty();
-	}
-
-	Postfach buildPostfach(PostfachRemoteService postfachRemoteService) {
-		return Postfach.builder().type(postfachRemoteService.getPostfachType()).isReplyAllowed(isReplyAllowed(postfachRemoteService)).build();
-	}
-
-	boolean isReplyAllowed(PostfachRemoteService postfachRemoteService) {
-		return isPostfachWithAntragsraum(postfachRemoteService) || postfachRemoteService.isReplyAllowed();
-	}
-
-	boolean isPostfachWithAntragsraum(PostfachRemoteService postfachRemoteService) {
-		return POSTFACH_TYPES_WITH_ANTRAGSRAUM.contains(postfachRemoteService.getPostfachType()) && infomanagerService.isPresent();
-	}
-
-	private void ifPostfachConfigured(Runnable block) {
-		if (!isPostfachConfigured()) {
-			throw new NotConfiguredException();
-		}
-		block.run();
-	}
-
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/SendPostfachNachrichtResponse.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/SendPostfachNachrichtResponse.java
deleted file mode 100644
index 841d4b9b32b0d1b2cf391ed6e9ec2ecaa08ae144..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/SendPostfachNachrichtResponse.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-
-@Getter
-@Builder
-@AllArgsConstructor
-class SendPostfachNachrichtResponse {
-	private boolean sentSuccessful;
-	private PostfachMessageCode messageCode;
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/StringBasedIdentifier.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/StringBasedIdentifier.java
deleted file mode 100644
index da37d0e5d7c1c788f3a9ab2a4af4b1f0215d2a51..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/StringBasedIdentifier.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package de.ozgcloud.nachrichten.postfach;
-
-import lombok.Builder;
-import lombok.Getter;
-
-@Builder
-@Getter
-public class StringBasedIdentifier implements PostfachAddressIdentifier {
-
-	private String postfachId;
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/Absender.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/Absender.java
deleted file mode 100644
index cdf3b85f3e35e788143069296b2d07a565c728fb..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/Absender.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.bayernid;
-
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.Pattern;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-
-@Getter
-@Builder
-@AllArgsConstructor
-class Absender {
-	@Pattern(regexp = "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}")
-	private String postkorbId;
-	@NotBlank
-	private String name;
-	private String anschrift;
-	@NotBlank
-	private String dienst;
-	@NotBlank
-	private String mandant;
-	private String gemeindeSchluessel;
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachment.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachment.java
deleted file mode 100644
index 1e248904d60e5a6115b25011c02ea1e5755ab494..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachment.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach.bayernid;
-
-import java.io.InputStream;
-
-import lombok.Builder;
-import lombok.Getter;
-
-@Builder
-@Getter
-public class BayernIdAttachment {
-
-	private String fileName;
-	private String contentType;
-	private InputStream content;
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentService.java
deleted file mode 100644
index 0110fcc97ad21678c6c98d0871ff129feef6c52a..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentService.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach.bayernid;
-
-import java.io.InputStream;
-import java.util.Optional;
-
-import org.bson.Document;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.stereotype.Service;
-
-import com.mongodb.client.gridfs.model.GridFSFile;
-
-import de.ozgcloud.common.errorhandling.TechnicalException;
-import de.ozgcloud.nachrichten.postfach.BinaryFileService;
-import de.ozgcloud.nachrichten.postfach.FileId;
-
-@Service
-@ConditionalOnProperty(prefix = "ozgcloud.bayernid", name = { "enabled" })
-public class BayernIdAttachmentService {
-
-	static final String NAME_KEY = "name";
-	static final String CONTENT_TYPE_KEY = "contentType";
-
-	@Autowired
-	private BinaryFileService binaryFileService;
-
-	public BayernIdAttachment getMessageAttachment(FileId fileId) {
-		return Optional.ofNullable(binaryFileService.getFile(fileId))
-				.map(GridFSFile::getMetadata)
-				.map(metadata -> buildBayernIdAttachment(metadata, getAttachmentContentStream(fileId)))
-				.orElseThrow(() -> new TechnicalException("Can not find attachment with id " + fileId));
-	}
-
-	BayernIdAttachment buildBayernIdAttachment(Document metadata, InputStream attachmentContent) {
-		return BayernIdAttachment.builder()
-				.fileName(metadata.getString(NAME_KEY))
-				.contentType(metadata.getString(CONTENT_TYPE_KEY))
-				.content(attachmentContent)
-				.build();
-	}
-
-	InputStream getAttachmentContentStream(FileId fileId) {
-		return binaryFileService.getUploadedFileStream(fileId);
-	}
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapper.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapper.java
deleted file mode 100644
index 3224a98caece162ca3f6615210b9073c796b8028..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapper.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.bayernid;
-
-import java.time.ZonedDateTime;
-import java.util.GregorianCalendar;
-import java.util.Objects;
-
-import javax.xml.datatype.DatatypeConfigurationException;
-import javax.xml.datatype.DatatypeFactory;
-
-import org.mapstruct.Condition;
-import org.mapstruct.Mapper;
-import org.mapstruct.Mapping;
-import org.mapstruct.ReportingPolicy;
-
-import de.ozgcloud.common.errorhandling.TechnicalException;
-import de.ozgcloud.nachrichten.postfach.PostfachAddress;
-import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
-import de.ozgcloud.nachrichten.postfach.StringBasedIdentifier;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcAbsender;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcAttachmentMetadata;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcBayernIdMessageMetadata;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageRequest;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageResponse;
-
-@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE)
-interface BayernIdPostfachNachrichtMapper {
-
-	String MESSAGE_LEVEL = "LEVEL_1";
-
-	@Mapping(target = "attachments", ignore = true)
-	@Mapping(target = "messageMetadata", expression = "java(toBayernIdMessageMetadata(nachricht, absender))")
-	GrpcSendBayernIdMessageRequest toSendBayernIdMessageMetadataRequest(PostfachNachricht nachricht, Absender absender);
-
-	@Mapping(target = "messageId", source = "nachricht.messageId")
-	@Mapping(target = "createdAt", expression = "java(convertZonedDateTime(nachricht.getCreatedAt()))")
-	@Mapping(target = "subject", source = "nachricht.subject")
-	@Mapping(target = "storkQaaLevel", constant = MESSAGE_LEVEL)
-	@Mapping(target = "vorgangId", source = "nachricht.vorgangId")
-	@Mapping(target = "text", source = "nachricht.mailBody")
-	@Mapping(target = "empfaenger.postkorbId", source = "nachricht.postfachAddress")
-	GrpcBayernIdMessageMetadata toBayernIdMessageMetadata(PostfachNachricht nachricht, Absender absender);
-
-	@Mapping(target = "gemeindeschluessel", source = "gemeindeSchluessel")
-	GrpcAbsender toAbsender(Absender absender);
-
-	@Mapping(target = "messageMetadata", ignore = true)
-	@Mapping(target = "attachments.content", ignore = true)
-	@Mapping(target = "attachments.attachmentMetadata", expression = "java(toAttachmentMetadata(bayernIdAttachment))")
-	GrpcSendBayernIdMessageRequest toSendBayernIdAttachmentsMetadataRequest(BayernIdAttachment bayernIdAttachment);
-
-	@Mapping(target = "fileType", source = "contentType")
-	GrpcAttachmentMetadata toAttachmentMetadata(BayernIdAttachment attachment);
-
-	default String convertZonedDateTime(ZonedDateTime zonedDateTime) {
-		try {
-			return DatatypeFactory.newInstance().newXMLGregorianCalendar(GregorianCalendar.from(zonedDateTime)).toString();
-		} catch (DatatypeConfigurationException e) {
-			throw new TechnicalException("Error creating XMLGregorianCalendar which should not happen in this case.", e);
-		}
-	}
-
-	BayernIdResponse fromSendBayernIdMessageResponse(GrpcSendBayernIdMessageResponse response);
-
-	default String toPostkorbId(PostfachAddress postfachAddress) {
-		return ((StringBasedIdentifier) postfachAddress.getIdentifier()).getPostfachId();
-	}
-
-	@Condition
-	default boolean nonNull(String value) {
-		return Objects.nonNull(value);
-	}
-
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachRemoteService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachRemoteService.java
deleted file mode 100644
index 33915314af41b8e4ddd75c824083cb7cfe311e6b..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachRemoteService.java
+++ /dev/null
@@ -1,132 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.bayernid;
-
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-import java.util.function.BiFunction;
-import java.util.function.Function;
-import java.util.stream.Stream;
-
-import jakarta.annotation.PostConstruct;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.stereotype.Component;
-
-import com.google.protobuf.ByteString;
-
-import de.ozgcloud.common.errorhandling.TechnicalException;
-import de.ozgcloud.nachrichten.postfach.FileId;
-import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
-import de.ozgcloud.nachrichten.postfach.PostfachRemoteService;
-import de.ozgcloud.nachrichten.postfach.PostfachRuntimeException;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.BayernIdProxyServiceGrpc.BayernIdProxyServiceStub;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcAttachments;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageRequest;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageResponse;
-import io.grpc.stub.CallStreamObserver;
-import io.grpc.stub.StreamObserver;
-import lombok.extern.log4j.Log4j2;
-import net.devh.boot.grpc.client.inject.GrpcClient;
-
-@Log4j2
-@ConditionalOnProperty(prefix = "ozgcloud.bayernid", name = { "enabled" }, havingValue = "true")
-@Component
-class BayernIdPostfachRemoteService implements PostfachRemoteService {
-
-	static final String POSTFACH_TYPE = "BayernId";
-
-	@GrpcClient("bayern-id")
-	private BayernIdProxyServiceStub bayernIdProxyServiceStub;
-
-	@Autowired
-	private BayernIdProperties bayernIdProperties;
-	@Autowired
-	private BayernIdPostfachResponseHandler responseHandler;
-	@Autowired
-	private BayernIdPostfachNachrichtMapper mapper;
-	@Autowired
-	private BayernIdAttachmentService bayernIdAttachmentService;
-
-	@PostConstruct
-	void init() {
-		LOG.info("BayernID Postfach remote service initialized.");
-	}
-
-	@Override
-	public void sendMessage(PostfachNachricht nachricht) {
-		try {
-			var sender = createMessageWithFilesSender(nachricht).send();
-			var response = waitUntilTransferCompleted(sender);
-			responseHandler.handleResponse(mapper.fromSendBayernIdMessageResponse(response));
-		} catch (BayernIdServerException e) {
-			throw e;
-		} catch (RuntimeException e) {
-			throw new PostfachRuntimeException(e);
-		}
-	}
-
-	MessageWithFilesSender createMessageWithFilesSender(PostfachNachricht nachricht) {
-		return MessageWithFilesSender.builder()
-				.reqObserverBuilder(buildCallStreamObserverBuilder())
-				.messageMetadata(mapper.toSendBayernIdMessageMetadataRequest(nachricht, bayernIdProperties.getAbsender()))
-				.attachmentIds(nachricht.getAttachments())
-				.toAttachment(buildAttachmentBuilder())
-				.attachmentMetadataMapper(buildAttachmentMetadataMapper())
-				.chunkBuilder(buildChunkRequest())
-				.build();
-	}
-
-	Function<StreamObserver<GrpcSendBayernIdMessageResponse>, CallStreamObserver<GrpcSendBayernIdMessageRequest>> buildCallStreamObserverBuilder() {
-		return responseObserver ->
-				(CallStreamObserver<GrpcSendBayernIdMessageRequest>) bayernIdProxyServiceStub.sendMessageAsStream(responseObserver);
-	}
-
-	Function<String, BayernIdAttachment> buildAttachmentBuilder() {
-		return attachmentId -> bayernIdAttachmentService.getMessageAttachment(FileId.from(attachmentId));
-	}
-
-	BiFunction<byte[], Integer, GrpcSendBayernIdMessageRequest> buildChunkRequest() {
-		return (bytes, length) -> GrpcSendBayernIdMessageRequest.newBuilder()
-				.setAttachments(GrpcAttachments.newBuilder().setContent(ByteString.copyFrom(bytes, 0, length)).build())
-				.build();
-	}
-
-	Function<BayernIdAttachment, GrpcSendBayernIdMessageRequest> buildAttachmentMetadataMapper() {
-		return mapper::toSendBayernIdAttachmentsMetadataRequest;
-	}
-
-	GrpcSendBayernIdMessageResponse waitUntilTransferCompleted(MessageWithFilesSender sender) {
-		try {
-			return sender.getResultFuture().get(2, TimeUnit.MINUTES);
-		} catch (InterruptedException e) {
-			Thread.currentThread().interrupt();
-			sender.cancelOnError(e);
-			throw new TechnicalException("Waiting for finishing upload was interrupted.", e);
-		} catch (ExecutionException | TimeoutException e) {
-			sender.cancelOnTimeout();
-			throw new TechnicalException("Error / Timeout on uploading data.", e);
-		}
-	}
-
-	@Override
-	public Stream<PostfachNachricht> getAllMessages() {
-		throw new UnsupportedOperationException("Bayern ID doesn't support this operation.");
-	}
-
-	@Override
-	public void deleteMessage(String messageId) {
-		throw new UnsupportedOperationException("Bayern ID doesn't support this operation.");
-	}
-
-	@Override
-	public String getPostfachType() {
-		return POSTFACH_TYPE;
-	}
-
-	@Override
-	public boolean isReplyAllowed() {
-		return false;
-	}
-
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachResponseHandler.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachResponseHandler.java
deleted file mode 100644
index 86b970880b589f65af7e416196cc936ebed7ce63..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachResponseHandler.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.bayernid;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.stereotype.Component;
-
-import lombok.extern.log4j.Log4j2;
-
-@Log4j2
-@Component
-@ConditionalOnProperty(prefix = "ozgcloud.bayernid", name = { "enabled" })
-class BayernIdPostfachResponseHandler {
-
-	public void handleResponse(BayernIdResponse bayernIdResponse) {
-		if (bayernIdResponse.isSuccess()) {
-			return;
-		}
-		var message = StringUtils.defaultIfBlank(bayernIdResponse.getMessage(), "Cannot send message to BayernID.");
-		throw new BayernIdServerException(message, MailSendingResponseStatus.fromSchluessel(bayernIdResponse.getStatus()));
-	}
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdProperties.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdProperties.java
deleted file mode 100644
index a4c8d2b271e482447a4e81f761cc262cd42a49b6..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdProperties.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.bayernid;
-
-import jakarta.validation.constraints.NotNull;
-
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.validation.annotation.Validated;
-
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-@Validated
-@Configuration
-@ConfigurationProperties(prefix = "ozgcloud.bayernid")
-@ConditionalOnProperty(prefix = "ozgcloud.bayernid", name = { "enabled" })
-@ConfigurationPropertiesScan
-class BayernIdProperties {
-
-	@NotNull
-	private Absender absender;
-
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdResponse.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdResponse.java
deleted file mode 100644
index 329282c745a5416bcc5917e5bdc08285bae5c471..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdResponse.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid;
-
-import lombok.Builder;
-import lombok.Getter;
-
-@Builder
-@Getter
-public class BayernIdResponse {
-
-	private boolean success;
-	private String status;
-	private String message;
-
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdServerException.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdServerException.java
deleted file mode 100644
index 76b186249315bb80f205b0d9b5cbadd5d7ba9a4a..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdServerException.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.bayernid;
-
-import de.ozgcloud.nachrichten.postfach.PostfachException;
-import de.ozgcloud.nachrichten.postfach.PostfachMessageCode;
-
-class BayernIdServerException extends PostfachException {
-
-	static final String TABELLE_NUMMER_EMPFANG_ERGEBNISSTATUS = "9006";
-	private static final String ERROR_MESSAGE_TEMPLATE = TABELLE_NUMMER_EMPFANG_ERGEBNISSTATUS + " / %s / %s / %s";
-
-	private final MailSendingResponseStatus mailSendingResponseStatus;
-
-	public BayernIdServerException(String message) {
-		super(message, PostfachMessageCode.PROCESS_FAILED_MESSAGE_CODE);
-		this.mailSendingResponseStatus = null;
-	}
-
-	public BayernIdServerException(String message, MailSendingResponseStatus mailSendingResponseStatus) {
-		super(message, PostfachMessageCode.PROCESS_FAILED_MESSAGE_CODE);
-		this.mailSendingResponseStatus = mailSendingResponseStatus;
-	}
-
-	@Override
-	public String getMessage() {
-		if (mailSendingResponseStatus == null) {
-			return super.getMessage();
-		}
-		return ERROR_MESSAGE_TEMPLATE.formatted(mailSendingResponseStatus.getSchluessel(), mailSendingResponseStatus.getMessage(), super.getMessage());
-	}
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/FileSender.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/FileSender.java
deleted file mode 100644
index 610b3808b14f417a0ab09edb8f0efc7c4003a2a2..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/FileSender.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.function.BiFunction;
-
-import org.apache.commons.io.IOUtils;
-
-import de.ozgcloud.common.errorhandling.TechnicalException;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageRequest;
-import io.grpc.stub.CallStreamObserver;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.log4j.Log4j2;
-
-@Log4j2
-class FileSender {
-
-	static final int CHUNK_SIZE = 4 * 1024;
-
-	private final AtomicBoolean metaDataSent = new AtomicBoolean(false);
-	private final AtomicBoolean done = new AtomicBoolean(false);
-
-	private final BiFunction<byte[], Integer, GrpcSendBayernIdMessageRequest> chunkBuilder;
-	private final CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver;
-	private final GrpcSendBayernIdMessageRequest metadata;
-	private final StreamReader streamReader;
-
-	public FileSender(BiFunction<byte[], Integer, GrpcSendBayernIdMessageRequest> chunkBuilder,
-			CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver, GrpcSendBayernIdMessageRequest metadata,
-			InputStream inputStream) {
-		this.chunkBuilder = chunkBuilder;
-		this.requestObserver = requestObserver;
-		this.metadata = metadata;
-		this.streamReader = new StreamReader(inputStream);
-	}
-
-	public void send() {
-		if (!done.get()) {
-			sendMetadata();
-			while (!done.get() && requestObserver.isReady()) {
-				LOG.debug("Sending next chunk.");
-				sendNextChunk();
-			}
-			LOG.debug("Finished or waiting to become ready.");
-		}
-	}
-
-	void sendMetadata() {
-		if (metaDataSent.getAndSet(true)) {
-			return;
-		}
-		LOG.debug("Sending Attachment Metadata.");
-		requestObserver.onNext(metadata);
-	}
-
-	long sendNextChunk() {
-		byte[] contentToSend = streamReader.getNextData();
-
-		if (streamReader.getLastReadSize() > 0) {
-			sendChunk(contentToSend, streamReader.getLastReadSize());
-		} else {
-			endTransfer();
-		}
-		return contentToSend.length;
-	}
-
-	void endTransfer() {
-		done.set(true);
-		LOG.debug("File Transfer done. Closing stream.");
-		streamReader.close();
-	}
-
-	void sendChunk(byte[] content, int length) {
-		LOG.debug("Sending {} byte Data.", length);
-		var chunk = chunkBuilder.apply(content, length);
-		requestObserver.onNext(chunk);
-	}
-
-	@RequiredArgsConstructor
-	class StreamReader {
-
-		private final InputStream inStream;
-		private final byte[] buffer = new byte[CHUNK_SIZE];
-		@Getter
-		private int lastReadSize = 0;
-		@Getter
-		private final AtomicBoolean done = new AtomicBoolean(false);
-
-		byte[] getNextData() {
-			readNext();
-			return buffer;
-		}
-
-		void close() {
-			IOUtils.closeQuietly(inStream);
-		}
-
-		void readNext() {
-			try {
-				lastReadSize = inStream.read(buffer, 0, CHUNK_SIZE);
-			} catch (IOException e) {
-				throw new TechnicalException("Error on reading a single chunk", e);
-			}
-		}
-	}
-
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/MailSendingResponseStatus.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/MailSendingResponseStatus.java
deleted file mode 100644
index f95f2db2a19bc4c51d7872387f380e97b5b4ca97..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/MailSendingResponseStatus.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.bayernid;
-
-enum MailSendingResponseStatus {
-	SUCCESS("0", "Nachricht wurde erfolgreich übernommen"),
-	OK_KOMM_SCHEMA_ERROR("10", "Fehler im OK.KOMM-Schema"),
-	OK_KOMM_INVALID_SCHEMA_PARAMETER("11", "Ungültige Parameter im OK.KOMM-Schema"),
-	ERROR_IN_MESSAGE_SCHEMA("20", "Fehler im BSP-Nachrichtenschema"),
-	INVALID_POSTKORB_ID("30", "Ungültiger Postkorb-Handle"),
-	IMPROPER_MESSAGE_CONTENT("31", "Unzulässiger Nachrichteninhalt"),
-	IMPROPER_MESSAGE_ATTACHMENT("32", "Unzulässiger Nachrichtenanhang"),
-	TECHNICAL_ERROR("99", "Sonstiger technischer Fehler"),
-	UNKNOWN("-1", "Unbekannte Server Antwort");
-
-	private String schluessel;
-	private String message;
-
-	MailSendingResponseStatus(String schluessel, String message) {
-		this.schluessel = schluessel;
-		this.message = message;
-	}
-
-	public static MailSendingResponseStatus fromSchluessel(String schluessel) {
-		return switch (schluessel) {
-			case "0" -> MailSendingResponseStatus.SUCCESS;
-			case "10" -> MailSendingResponseStatus.OK_KOMM_SCHEMA_ERROR;
-			case "11" -> MailSendingResponseStatus.OK_KOMM_INVALID_SCHEMA_PARAMETER;
-			case "20" -> MailSendingResponseStatus.ERROR_IN_MESSAGE_SCHEMA;
-			case "30" -> MailSendingResponseStatus.INVALID_POSTKORB_ID;
-			case "31" -> MailSendingResponseStatus.IMPROPER_MESSAGE_CONTENT;
-			case "32" -> MailSendingResponseStatus.IMPROPER_MESSAGE_ATTACHMENT;
-			case "99" -> MailSendingResponseStatus.TECHNICAL_ERROR;
-			default -> MailSendingResponseStatus.UNKNOWN;
-		};
-	}
-
-	public String getSchluessel() {
-		return schluessel;
-	}
-
-	public String getMessage() {
-		return message;
-	}
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/MessageWithFilesSender.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/MessageWithFilesSender.java
deleted file mode 100644
index 29457e1e4f1af0826f45f899cf8aedfdb289aa81..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/MessageWithFilesSender.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid;
-
-import static java.util.Objects.*;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.function.BiFunction;
-import java.util.function.Function;
-
-import de.ozgcloud.common.binaryfile.BinaryFileUploadStreamObserver;
-import de.ozgcloud.common.errorhandling.TechnicalException;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageRequest;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageResponse;
-import io.grpc.stub.CallStreamObserver;
-import io.grpc.stub.StreamObserver;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.extern.log4j.Log4j2;
-
-@Log4j2
-@Builder
-public class MessageWithFilesSender {
-
-	static final int CHUNK_SIZE = 4 * 1024;
-
-	@Getter
-	private final CompletableFuture<GrpcSendBayernIdMessageResponse> resultFuture = new CompletableFuture<>();
-	private final AtomicBoolean done = new AtomicBoolean(false);
-	private final AtomicBoolean metaDataSent = new AtomicBoolean(false);
-
-	private final Function<StreamObserver<GrpcSendBayernIdMessageResponse>, CallStreamObserver<GrpcSendBayernIdMessageRequest>> reqObserverBuilder;
-	private final GrpcSendBayernIdMessageRequest messageMetadata;
-	@Builder.Default
-	private final List<String> attachmentIds = Collections.emptyList();
-	private final Function<String, BayernIdAttachment> toAttachment;
-	private final Function<BayernIdAttachment, GrpcSendBayernIdMessageRequest> attachmentMetadataMapper;
-	private final BiFunction<byte[], Integer, GrpcSendBayernIdMessageRequest> chunkBuilder;
-
-	private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver;
-	private List<FileSender> fileSenders;
-
-	public MessageWithFilesSender send() {
-		var responseStreamObserver = BinaryFileUploadStreamObserver.create(resultFuture, this::sendNext);
-		requestObserver = reqObserverBuilder.apply(responseStreamObserver);
-		return this;
-	}
-
-	public void sendNext() {
-		if (done.get()) {
-			return;
-		}
-		waitForObserver();
-		sendMetadata();
-		sendAttachments();
-	}
-
-	synchronized void waitForObserver() {
-		while (isNull(requestObserver)) {
-			try {
-				LOG.debug("wait for observer");
-				wait(300);
-			} catch (InterruptedException e) {
-				LOG.error("Error on waiting for request Observer.", e);
-				Thread.currentThread().interrupt();
-			}
-		}
-	}
-
-	void sendMetadata() {
-		if (metaDataSent.getAndSet(true)) {
-			return;
-		}
-		requestObserver.onNext(messageMetadata);
-	}
-
-	void sendAttachments() {
-		if (isNull(fileSenders)) {
-			fileSenders = createFileSenders();
-		}
-		fileSenders.forEach(FileSender::send);
-		completeRequest();
-	}
-
-	List<FileSender> createFileSenders() {
-		return attachmentIds.stream().map(toAttachment).map(this::buildFileSender).toList();
-	}
-
-	FileSender buildFileSender(BayernIdAttachment attachment) {
-		return new FileSender(chunkBuilder, requestObserver, attachmentMetadataMapper.apply(attachment), attachment.getContent());
-	}
-
-	void completeRequest() {
-		done.set(true);
-		requestObserver.onCompleted();
-	}
-
-	public void cancelOnTimeout() {
-		LOG.warn("File transfer canceled on timeout");
-		resultFuture.cancel(true);
-		requestObserver.onError(new TechnicalException("Timeout on waiting for upload."));
-	}
-
-	public void cancelOnError(Throwable t) {
-		resultFuture.cancel(true);
-		requestObserver.onError(t);
-	}
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/Message.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/Message.java
deleted file mode 100644
index 0af5a298f95413a0dc54b169c7a7a9a0159b4b2f..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/Message.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach.osi;
-
-import java.util.List;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonValue;
-
-import lombok.AccessLevel;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.RequiredArgsConstructor;
-import lombok.Singular;
-import lombok.ToString;
-
-@Getter
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-@AllArgsConstructor
-@ToString
-@Builder
-public class Message {
-
-	@RequiredArgsConstructor
-	public enum EidasLevel {
-		LOW(0), MEDIUM(1), HIGH(2);
-
-		private final int numValue;
-
-		@JsonValue
-		public int toValue() {
-			return numValue;
-		}
-	}
-
-	private String messageId;
-
-	@JsonProperty("sequenceNumber")
-	private String vorgangId;
-
-	@JsonProperty("nameIdentifier")
-	private String postfachId;
-
-	private String subject;
-	@JsonProperty("body")
-	private String mailBody;
-
-	@JsonProperty("isHtml")
-	private boolean isHtml;
-
-	@JsonProperty("replyAction")
-	@Builder.Default
-	private ReplyOption replyOption = ReplyOption.FORBIDDEN;
-	@Builder.Default
-	private EidasLevel eidasLevel = EidasLevel.MEDIUM;
-
-	@JsonProperty("isObligatory")
-	private boolean rechtsverbindlich;
-
-	@Singular
-	private List<MessageAttachment> attachments;
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachment.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachment.java
deleted file mode 100644
index 58bfba6a02786644e62ec4d78d0fe41883424040..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachment.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach.osi;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.ToString;
-
-@ToString
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@Getter
-public class MessageAttachment {
-
-	private String fileName;
-	private String content;
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentService.java
deleted file mode 100644
index c6c2170130d3064b96fcd183ac141eac0f93e890..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentService.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach.osi;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.Charset;
-import java.util.Base64;
-
-import org.apache.commons.io.IOUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import de.ozgcloud.common.errorhandling.TechnicalException;
-import de.ozgcloud.nachrichten.postfach.AttachmentFile;
-import de.ozgcloud.nachrichten.postfach.BinaryFileService;
-import de.ozgcloud.nachrichten.postfach.FileId;
-import de.ozgcloud.nachrichten.postfach.PersistPostfachNachrichtService;
-import lombok.val;
-
-@Service
-public class MessageAttachmentService {
-
-	@Autowired
-	private PersistPostfachNachrichtService persistPostfachNachrichtService;
-
-	@Autowired
-	private BinaryFileService binaryFileService;
-
-	public MessageAttachment getMessageAttachment(FileId fileId) {
-		try {
-			val metadata = binaryFileService.getFile(fileId).getMetadata();
-			return MessageAttachment.builder()
-					.fileName(metadata.getString("name"))
-					.content(getAttachmentContent(fileId))
-					.build();
-		} catch (IOException e) {
-			throw new TechnicalException(e.getMessage(), e);
-		}
-	}
-
-	String getAttachmentContent(FileId fileId) throws IOException {
-		ByteArrayOutputStream contentStream = new ByteArrayOutputStream();
-		IOUtils.copy(getAttachmentContentStream(fileId), contentStream);
-		return encodeAttachmentContent(contentStream.toByteArray());
-	}
-
-	private String encodeAttachmentContent(byte[] content) {
-		return new String(Base64.getEncoder().encode(content));
-	}
-
-	public String persistAttachment(String vorgangId, MessageAttachment attachment) {
-		return persistPostfachNachrichtService.persistAttachment(vorgangId, mapAttachmentFile(attachment));
-	}
-
-	AttachmentFile mapAttachmentFile(MessageAttachment attachment) {
-		return AttachmentFile.builder()
-				.name(attachment.getFileName())
-				.content(() -> IOUtils.toInputStream(attachment.getContent(), Charset.defaultCharset())).build();
-	}
-
-	InputStream getAttachmentContentStream(FileId fileId) {
-		return binaryFileService.getUploadedFileStream(fileId);
-	}
-
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MockOsiPostfachConfiguration.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MockOsiPostfachConfiguration.java
deleted file mode 100644
index 0664694bb08542c6c1fb9135ef2c6581da264cb3..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MockOsiPostfachConfiguration.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach.osi;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Profile;
-import org.springframework.web.client.RestTemplate;
-
-@Profile("e2e")
-@Configuration
-public class MockOsiPostfachConfiguration {
-
-	@Bean
-	public RestTemplate restTemplate() {
-		return new MockOsiPostfachRestTemplate();
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MockOsiPostfachRestTemplate.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MockOsiPostfachRestTemplate.java
deleted file mode 100644
index 364d8bea445f69cebaf1c377516495ce76b4abf2..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MockOsiPostfachRestTemplate.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach.osi;
-
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.client.RestClientException;
-import org.springframework.web.client.RestTemplate;
-
-class MockOsiPostfachRestTemplate extends RestTemplate {
-
-	@Override
-	public <T> ResponseEntity<T> exchange(String url, HttpMethod method, HttpEntity<?> requestEntity, Class<T> responseType, Object... uriVariables)
-			throws RestClientException {
-		return ResponseEntity.ok().build();
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapper.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapper.java
deleted file mode 100644
index ad900a06ffc7f7a077444f70276d627d2be8a657..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapper.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.osi;
-
-import java.util.List;
-import java.util.Optional;
-
-import org.mapstruct.Mapper;
-import org.mapstruct.Mapping;
-import org.mapstruct.Named;
-import org.mapstruct.ReportingPolicy;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import de.ozgcloud.nachrichten.postfach.FileId;
-import de.ozgcloud.nachrichten.postfach.PostfachAddress;
-import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
-import de.ozgcloud.nachrichten.postfach.StringBasedIdentifier;
-
-@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN)
-public abstract class OsiPostfachMessageMapper {
-
-	private static final String POSTFACH_ADDRESS_VERSION = "1.0";
-	private static final int POSTFACH_ADDRESS_TYPE = 1;
-
-	@Autowired
-	private MessageAttachmentService messageAttachmentService;
-
-	@Mapping(target = "attachment", ignore = true)
-	@Mapping(target = "isHtml", constant = "true")
-	@Mapping(target = "rechtsverbindlich", constant = "false")
-	@Mapping(target = "eidasLevel", constant = "MEDIUM")
-	@Mapping(target = "postfachId", expression = "java(toPostfachId(nachricht))")
-	@Mapping(target = "mailBody", qualifiedByName = "replaceNewLine")
-	public abstract Message toOsiMessage(PostfachNachricht nachricht);
-
-	@Mapping(target = "createdBy", ignore = true)
-	@Mapping(target = "id", ignore = true)
-	@Mapping(target = "messageCode", ignore = true)
-	@Mapping(target = "sentAt", ignore = true)
-	@Mapping(target = "sentSuccessful", ignore = true)
-	@Mapping(target = "createdAt", expression = "java(java.time.ZonedDateTime.now())")
-	@Mapping(target = "direction", constant = "IN")
-	@Mapping(target = "attachments", expression = "java(persistAttachements(message.getVorgangId() ,message.getAttachments()))")
-	@Mapping(target = "postfachAddress", expression = "java(buildPostfachAddressByPostfachId(message.getPostfachId()))")
-	@Mapping(target = "mailBody", qualifiedByName = "clearReceivedMessage")
-	public abstract PostfachNachricht toPostfachNachricht(Message message);
-
-	List<MessageAttachment> map(List<String> attachedFileIds) {
-		return attachedFileIds.stream().map(FileId::from).map(fileId -> messageAttachmentService.getMessageAttachment(fileId)).toList();
-	}
-
-	List<String> persistAttachements(String vorgangId, List<MessageAttachment> attachments) {
-		return attachments.stream().map(attachment -> messageAttachmentService.persistAttachment(vorgangId, attachment)).toList();
-	}
-
-	@Mapping(target = "attachment", ignore = true)
-	@Mapping(target = "messageId", ignore = true)
-	String toPostfachId(PostfachNachricht nachricht) {
-		return Optional.ofNullable(nachricht.getPostfachAddress())
-				.map(PostfachAddress::getIdentifier)
-				.filter(StringBasedIdentifier.class::isInstance)
-				.map(StringBasedIdentifier.class::cast)
-				.map(StringBasedIdentifier::getPostfachId)
-				.orElse(nachricht.getPostfachId());
-	}
-
-	PostfachAddress buildPostfachAddressByPostfachId(String postfachId) {
-		return PostfachAddress.builder()
-				.type(POSTFACH_ADDRESS_TYPE)
-				.version(POSTFACH_ADDRESS_VERSION)
-				.identifier(StringBasedIdentifier.builder().postfachId(postfachId).build())
-				.serviceKontoType(OsiPostfachRemoteService.POSTFACH_TYPE)
-				.build();
-
-	}
-
-	@Named("replaceNewLine")
-	String replaceNewlines(String nachricht) {
-		return Optional.ofNullable(nachricht).map(str -> str.replaceAll("(\r\n|\n)", "<br>")).orElse(null);
-	}
-
-	@Named("clearReceivedMessage")
-	String clearReceivedMessage(String nachricht) {
-		return Optional.ofNullable(nachricht).map(str -> str.replace("&amp;", "&")).orElse(null);
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachProperties.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachProperties.java
deleted file mode 100644
index 5b3b3065f8e50d6e8b52b4a146224b49d6085c1c..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachProperties.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach.osi;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.context.annotation.Configuration;
-
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-@Configuration
-@ConfigurationProperties(prefix = OsiPostfachProperties.PROXY_API_PREFIX)
-public class OsiPostfachProperties {
-
-	static final String PREFIX = "ozgcloud.osi.postfach";
-	static final String PROXY_API_PREFIX = PREFIX + ".proxyapi";
-
-	private String url;
-	private String key;
-	private String realm;
-
-	@Autowired
-	private ProxyConfiguration proxyConfiguration;
-
-	@Getter
-	@Setter
-	@Configuration
-	@ConfigurationProperties(prefix = ProxyConfiguration.PREFIX)
-	static class ProxyConfiguration {
-		static final String PREFIX = OsiPostfachProperties.PREFIX + ".http-proxy";
-
-		private String host;
-		private Integer port;
-
-		private boolean authenticationRequired;
-		private String username;
-		private String password;
-	}
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteService.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteService.java
deleted file mode 100644
index a355f1a63849411bf6ae24c8f9dd73e1b36767c8..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteService.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach.osi;
-
-import java.util.Arrays;
-import java.util.Objects;
-import java.util.function.Supplier;
-import java.util.stream.Stream;
-
-import jakarta.annotation.PostConstruct;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Service;
-import org.springframework.web.client.HttpClientErrorException;
-import org.springframework.web.client.RestTemplate;
-import org.springframework.web.util.UriComponentsBuilder;
-
-import de.ozgcloud.nachrichten.postfach.NotConfiguredException;
-import de.ozgcloud.nachrichten.postfach.PostfachBadRequestException;
-import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
-import de.ozgcloud.nachrichten.postfach.PostfachRemoteService;
-import de.ozgcloud.nachrichten.postfach.PostfachRuntimeException;
-import lombok.extern.log4j.Log4j2;
-
-@Service
-@Log4j2
-@ConditionalOnProperty(prefix = OsiPostfachProperties.PROXY_API_PREFIX, name = { "url", "key", "realm" })
-class OsiPostfachRemoteService implements PostfachRemoteService {
-
-	static final String POSTFACH_TYPE = "OSI";
-
-	@Autowired
-	private OsiPostfachMessageMapper mapper;
-	@Autowired
-	private OsiPostfachProperties properties;
-	@Autowired(required = false)
-	private RestTemplate restTemplate;
-
-	@PostConstruct
-	public void init() {
-		LOG.info("OSI Postfach remote service initialized.");
-		if (isNotConfigured()) {
-			LOG.warn("OSI Postfach Api not configured. Failed to read config " + OsiPostfachProperties.PROXY_API_PREFIX);
-		}
-	}
-
-	@Override
-	public void sendMessage(PostfachNachricht nachricht) {
-		checkWhetherIsConfigured();
-
-		HttpEntity<Message> request = new HttpEntity<>(mapper.toOsiMessage(nachricht));
-
-		var response = executeHandlingException(
-				() -> restTemplate.exchange(properties.getUrl(), HttpMethod.POST, request, String.class));
-
-		sentFailed(response);
-	}
-
-	@Override
-	public Stream<PostfachNachricht> getAllMessages() {
-		checkWhetherIsConfigured();
-
-		ResponseEntity<Message[]> response = executeHandlingException(
-				() -> restTemplate.exchange(properties.getUrl(), HttpMethod.GET, null, Message[].class));
-
-		if (Objects.isNull(response.getBody())) {
-			LOG.warn("OSI Postfach response with an empty body");
-			return Stream.empty();
-		}
-		return Arrays.stream(response.getBody()).map(mapper::toPostfachNachricht);
-	}
-
-	private void sentFailed(ResponseEntity<String> response) {
-		if (isSentFailed(response)) {
-			throw new OsiPostfachServerProcessException();
-		}
-	}
-
-	private boolean isSentFailed(ResponseEntity<String> response) {
-		return StringUtils.equals(response.getBody(), String.valueOf(false));
-	}
-
-	@Override
-	public void deleteMessage(String messageId) {
-		checkWhetherIsConfigured();
-
-		UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(properties.getUrl()).queryParam("messageGuid", messageId);
-		executeHandlingException(() -> restTemplate.exchange(builder.toUriString(), HttpMethod.DELETE, null, String.class));
-	}
-
-	private void checkWhetherIsConfigured() {
-		if (isNotConfigured()) {
-			throw new NotConfiguredException();
-		}
-	}
-
-	private boolean isNotConfigured() {
-		return Objects.isNull(restTemplate) || Objects.isNull(properties.getUrl()) || Objects.isNull(properties.getKey());
-	}
-
-	private <T> T executeHandlingException(Supplier<T> runnable) {
-		try {
-			return runnable.get();
-		} catch (HttpClientErrorException e) {
-			throw new PostfachBadRequestException(e);
-		} catch (RuntimeException e) {
-			throw new PostfachRuntimeException(e);
-		}
-	}
-
-	@Override
-	public String getPostfachType() {
-		return POSTFACH_TYPE;
-	}
-
-	@Override
-	public boolean isReplyAllowed() {
-		return true;
-	}
-
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachServerProcessException.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachServerProcessException.java
deleted file mode 100644
index 4d2bcf43ff62f5c9d25bad9953a0003027f6a048..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachServerProcessException.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach.osi;
-
-import de.ozgcloud.nachrichten.postfach.PostfachException;
-import de.ozgcloud.nachrichten.postfach.PostfachMessageCode;
-
-public class OsiPostfachServerProcessException extends PostfachException {// NOSONAR
-
-	private static final long serialVersionUID = 1L;
-
-	OsiPostfachServerProcessException() {
-		super("Postfach server returned false", PostfachMessageCode.PROCESS_FAILED_MESSAGE_CODE);
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/PostfachConfiguration.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/PostfachConfiguration.java
deleted file mode 100644
index 669c30cfd886152a0de43a5e95a8f8a68295c020..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/PostfachConfiguration.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach.osi;
-
-import java.util.Objects;
-
-import org.apache.commons.lang3.StringUtils;
-import org.apache.hc.client5.http.auth.AuthScope;
-import org.apache.hc.client5.http.auth.CredentialsProvider;
-import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
-import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider;
-import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
-import org.apache.hc.client5.http.impl.classic.HttpClients;
-import org.apache.hc.core5.http.HttpHost;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.web.client.RestTemplateBuilder;
-import org.springframework.boot.web.client.RestTemplateCustomizer;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Profile;
-import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
-import org.springframework.web.client.RestTemplate;
-
-@Profile("!e2e")
-@Configuration
-public class PostfachConfiguration implements RestTemplateCustomizer {
-
-	static final String HEADER_API_KEY = "apiKey";
-	static final String HEADER_API_REALM = "realm";
-
-	@Autowired
-	private OsiPostfachProperties properties;
-
-	@Bean
-	@ConditionalOnProperty(prefix = OsiPostfachProperties.PROXY_API_PREFIX, name = { "url", "key", "realm" })
-	public RestTemplate restTemplate(RestTemplateBuilder builder, OsiPostfachProperties properties) {
-		return builder
-				.defaultHeader(HEADER_API_KEY, properties.getKey())
-				.defaultHeader(HEADER_API_REALM, properties.getRealm())
-				.build();
-	}
-
-	@Override
-	public void customize(RestTemplate restTemplate) {
-		if (StringUtils.isNotBlank(properties.getProxyConfiguration().getHost())) {
-			setProxy(restTemplate);
-		}
-	}
-
-	private void setProxy(RestTemplate restTemplate) {
-		var proxyConfig = properties.getProxyConfiguration();
-		var port = Objects.isNull(proxyConfig.getPort()) ? -1 : proxyConfig.getPort();
-		var proxy = new HttpHost(proxyConfig.getHost(), port);
-
-		var httpClient = HttpClientBuilder.create()
-				.setProxy(proxy).setDefaultCredentialsProvider(buildCredentialsProvider(proxy))
-				.build();
-
-		HttpClients.custom().build();
-		restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClient));
-	}
-
-	private CredentialsProvider buildCredentialsProvider(HttpHost proxyHost) {
-		var proxyConfig = properties.getProxyConfiguration();
-
-		if (!proxyConfig.isAuthenticationRequired()) {
-			return null;
-		}
-
-		var credsProvider = new BasicCredentialsProvider();
-		credsProvider.setCredentials(
-				new AuthScope(proxyHost),
-				new UsernamePasswordCredentials(proxyConfig.getUsername(), proxyConfig.getPassword().toCharArray()));
-		return credsProvider;
-	}
-
-}
diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/ReplyOption.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/ReplyOption.java
deleted file mode 100644
index 92fb168058a4f420f318650e7f58f8f13cb27ca3..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/ReplyOption.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.osi;
-
-import com.fasterxml.jackson.annotation.JsonValue;
-
-import lombok.RequiredArgsConstructor;
-
-@RequiredArgsConstructor
-public enum ReplyOption {
-	POSSIBLE(0), MANDATORY(1), FORBIDDEN(2);
-
-	private final int numValue;
-
-	@JsonValue
-	public int toValue() {
-		return numValue;
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/nachrichten-manager/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
deleted file mode 100644
index 08abec6c597ed602bc6a36d5de3111b9a0d66a74..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ /dev/null
@@ -1,20 +0,0 @@
-net.devh.boot.grpc.client.autoconfigure.GrpcClientAutoConfiguration
-net.devh.boot.grpc.client.autoconfigure.GrpcClientMetricAutoConfiguration
-net.devh.boot.grpc.client.autoconfigure.GrpcClientHealthAutoConfiguration
-net.devh.boot.grpc.client.autoconfigure.GrpcClientSecurityAutoConfiguration
-net.devh.boot.grpc.client.autoconfigure.GrpcClientTraceAutoConfiguration
-net.devh.boot.grpc.client.autoconfigure.GrpcDiscoveryClientAutoConfiguration
-net.devh.boot.grpc.common.autoconfigure.GrpcCommonCodecAutoConfiguration
-net.devh.boot.grpc.common.autoconfigure.GrpcCommonTraceAutoConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcAdviceAutoConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcHealthServiceAutoConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcMetadataConsulConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcMetadataEurekaConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcMetadataNacosConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcMetadataZookeeperConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcReflectionServiceAutoConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcServerAutoConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcServerFactoryAutoConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcServerMetricAutoConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcServerSecurityAutoConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcServerTraceAutoConfiguration
diff --git a/nachrichten-manager/src/main/resources/application-bayern.yaml b/nachrichten-manager/src/main/resources/application-bayern.yaml
deleted file mode 100644
index f8fcba293cb9f21fd400b4f86a3c0320c0fa6aa3..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/resources/application-bayern.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-ozgcloud:
-  antragraum:
-    entityId: https://antragsraum.ozgcloud.de/
\ No newline at end of file
diff --git a/nachrichten-manager/src/main/resources/application-bayernlocal.yaml b/nachrichten-manager/src/main/resources/application-bayernlocal.yaml
deleted file mode 100644
index 898a6a6d7a85c34656f5ba0a34611a10025f4962..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/resources/application-bayernlocal.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-ozgcloud:
-  antragraum:
-    url: https://dev.antragsraum.de/
-    entityId: https://antragsraum.ozgcloud.de/
-    metadataUri: "classpath:/bayernid/metadata/bayernid-idp-infra.xml"
-    decryptionPrivateKey: "classpath:/bayernid/bayernid-test-enc.key"
-    decryptionCertificate: "classpath:/bayernid/bayernid-test-enc.crt"
\ No newline at end of file
diff --git a/nachrichten-manager/src/main/resources/bayernid/PostfachnachrichtenServiceBy.wsdl b/nachrichten-manager/src/main/resources/bayernid/PostfachnachrichtenServiceBy.wsdl
deleted file mode 100644
index a2df76060c0568ed74ed70e6cc71fdc6a9005c98..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/resources/bayernid/PostfachnachrichtenServiceBy.wsdl
+++ /dev/null
@@ -1,108 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<definitions name="PostkorbKommService"
-	xmlns="http://schemas.xmlsoap.org/wsdl/"
-	xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
-	xmlns:bsp="http://akdb.de/portal/gehaltsabrechnungen-bspnachricht"
-	xmlns:tns="urn:akdb:bsp:postkorb:komm:webservice"
-	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-	targetNamespace="urn:akdb:bsp:postkorb:komm:webservice">
-	<types>
-		<xs:schema
-			targetNamespace='urn:akdb:bsp:postkorb:komm:webservice' version='1.1'
-			xmlns:tns='urn:akdb:bsp:postkorb:komm:webservice'
-			xmlns:xs='http://www.w3.org/2001/XMLSchema'>
-			<xs:element name='sendBspNachricht'
-				type='tns:sendBspNachricht' />
-			<xs:complexType name='sendBspNachricht'>
-				<xs:sequence>
-					<xs:element minOccurs='1' name='okKommBspNachrichtInput'
-						type='xs:base64Binary' />
-				</xs:sequence>
-			</xs:complexType>
-			<xs:element name='sendBspNachrichtOutput'
-				type='tns:sendBspNachrichtOutput' />
-			<xs:complexType name='sendBspNachrichtOutput'>
-				<xs:sequence>
-					<xs:element minOccurs='1'
-						name='okKommBspNachrichtOutput' type='xs:base64Binary' />
-				</xs:sequence>
-			</xs:complexType>
-			<xs:element name='sendBspNachrichtNative'
-				type='tns:sendBspNachrichtNative' />
-			<xs:complexType name='sendBspNachrichtNative'>
-				<xs:sequence>
-					<xs:element minOccurs='1' name='bspNachricht'
-						type='xs:string' />
-				</xs:sequence>
-			</xs:complexType>
-			<xs:element name='sendBspNachrichtNativeOutput'
-				type='tns:sendBspNachrichtNativeOutput' />
-			<xs:complexType name='sendBspNachrichtNativeOutput'>
-				<xs:sequence>
-					<xs:element minOccurs='1' name='bspQuittung'
-						type='xs:string' />
-				</xs:sequence>
-			</xs:complexType>
-		</xs:schema>
-	</types>
-	<message name='PostkorbKommService_sendBspNachrichtInput'>
-		<part element='tns:sendBspNachricht'
-			name='okKommBspNachrichtInput'></part>
-	</message>
-	<message name='PostkorbKommService_sendBspNachrichtOutput'>
-		<part element='tns:sendBspNachrichtOutput'
-			name='sendBspNachrichtOutput'></part>
-	</message>
-	<message name='PostkorbKommService_sendBspNachrichtNativeInput'>
-		<part element='tns:sendBspNachrichtNative'
-			name='sendBspNachrichtNative'></part>
-	</message>
-	<message
-		name='PostkorbKommService_sendBspNachrichtNativeOutput'>
-		<part element='tns:sendBspNachrichtNativeOutput'
-			name='bspQuittung'></part>
-	</message>
-	<portType name='PostkorbKommPortType'>
-		<operation name='sendBspNachricht'>
-			<input message='tns:PostkorbKommService_sendBspNachrichtInput'></input>
-			<output
-				message='tns:PostkorbKommService_sendBspNachrichtOutput'></output>
-		</operation>
-		<operation name='sendBspNachrichtNative'>
-			<input
-				message='tns:PostkorbKommService_sendBspNachrichtNativeInput'></input>
-			<output
-				message='tns:PostkorbKommService_sendBspNachrichtNativeOutput'></output>
-		</operation>
-	</portType>
-	<binding name="PostkorbKommBinding"
-		type="tns:PostkorbKommPortType">
-		<soap:binding style="document"
-			transport="http://schemas.xmlsoap.org/soap/http" />
-		<operation name='sendBspNachricht'>
-			<soap:operation soapAction='' />
-			<input>
-				<soap:body use='literal' />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-		</operation>
-		<operation name='sendBspNachrichtNative'>
-			<soap:operation soapAction='' />
-			<input>
-				<soap:body use='literal' />
-			</input>
-			<output>
-				<soap:body use="literal" />
-			</output>
-		</operation>
-	</binding>
-	<service name="PostkorbKommService">
-		<port name="PostkorbKommPort" binding="tns:PostkorbKommBinding">
-			<!-- <soap:address location="${web-services-base- url}/bspservices/postkorbkomm" 
-				/> -->
-			<soap:address location="http://localhost:8080/bspx-postkorb-okkomm-ws/bspservices/postkorbkomm" />
-		</port>
-	</service>
-</definitions>
diff --git a/nachrichten-manager/src/main/resources/bayernid/bspnachrichten-2.13.xsd b/nachrichten-manager/src/main/resources/bayernid/bspnachrichten-2.13.xsd
deleted file mode 100644
index 23b0e247d2bd9d2ab3f2206e4354d0c497844f28..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/resources/bayernid/bspnachrichten-2.13.xsd
+++ /dev/null
@@ -1,343 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Service- und Portalplattform
-    AKDB München, Geschäftsfeld eGovernment
-
-    Copyright (c) AKDB
-
--->
-<xsd:schema targetNamespace="http://www.akdb.de/egov/bsp/nachrichten"
-  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-  xmlns:bsp="http://www.akdb.de/egov/bsp/nachrichten"
-  elementFormDefault="qualified">
-
-  <xsd:element name="BspNachricht">
-    <xsd:annotation>
-      <xsd:appinfo>
-        <title>Nachricht für die Kommunikation zwischen Bürgerservice-Portal
-          und externen Fachverfahren</title>
-      </xsd:appinfo>
-      <xsd:documentation>Einheitliches Nachrichtenschema für die
-        Kommunikation zwischen Bürgerservice-Portal und externem Verfahren.
-        Nachrichten vom Bürgerservice-Portal an den Postkorb eines
-        Verfahrens
-        oder Nachrichten von den Verfahren an das Bürgerservice-Portal müssen
-        gemäß diesem Schema aufgebaut sein.
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:complexType>
-      <xsd:sequence>
-        <xsd:element name="NachrichtenKopf" type="bsp:NachrichtenKopfType"/>
-        <xsd:element name="NachrichtenInhalt" type="bsp:NachrichtenInhaltType"/>
-      </xsd:sequence>
-      <xsd:attribute name="version" use="required">
-        <xsd:annotation>
-          <xsd:documentation>Dieses Attribut kennzeichnet die
-            Nachrichten-Version, z. B. "1.0", "1.1".</xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleType>
-           <xsd:restriction base="xsd:string">
-             <xsd:enumeration value="1.1"/>
-             <xsd:enumeration value="1.2"/>
-             <xsd:enumeration value="1.3"/>
-             <xsd:enumeration value="1.4"/>
-             <xsd:enumeration value="1.5"/>
-           </xsd:restriction>
-        </xsd:simpleType>
-      </xsd:attribute>
-      <xsd:attribute name="fassung" use="required" >
-        <xsd:annotation>
-          <xsd:documentation>Dieses Attribut kennzeichnet das Datum, an dem
-            die diesen Schemata im Status final produziert wurde. Format:
-            YYYY-MM-DD.</xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleType>
-          <xsd:restriction base="xsd:string">
-            <xsd:enumeration value="2017-03-15"/>
-            <xsd:enumeration value="2018-04-01"/>
-            <xsd:enumeration value="2018-11-01"/>
-            <xsd:enumeration value="2019-06-28"/>
-            <xsd:enumeration value="2020-03-15"/>
-          </xsd:restriction>
-        </xsd:simpleType>
-      </xsd:attribute>
-      <xsd:attribute name="produkt" type="xsd:string" use="optional">
-        <xsd:annotation>
-          <xsd:documentation>In diesem Attribut ist der Name des Produktes
-            (der Software) einzutragen, mit dem diese Nachricht erstellt
-            worden ist. z.B. BSP, PWS</xsd:documentation>
-        </xsd:annotation>
-      </xsd:attribute>
-      <xsd:attribute name="produkthersteller" type="xsd:string" use="optional"/>
-      <xsd:attribute name="produktversion" type="xsd:string" use="optional"/>
-    </xsd:complexType>
-  </xsd:element>
-
-  <xsd:element name="BspQuittung">
-    <xsd:annotation>
-      <xsd:appinfo>
-        <title>Quittung über den Empfang einer BSO-Nachricht</title>
-      </xsd:appinfo>
-      <xsd:documentation>Zu einer empfangenen BSP-Nachricht wird eine
-                Quittung geliefert, die bestätigt, dass die Nachricht übernommen wurde
-                oder aufgrund eines technischen oder fachlichen Fehlers abgewiesen wurde.
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:complexType>
-      <xsd:sequence>
-        <xsd:element name="AnnahmeErfolgreich" type="xsd:boolean" minOccurs="1" maxOccurs="1"/>
-          <xsd:element name="ErgebnisStatus" type="bsp:SchluesseltabelleType" minOccurs="1" maxOccurs="1">
-            <xsd:annotation>
-              <xsd:documentation>Schluesseltabelle 9006 (0 (erfolgreich angenommen), 99 (sonstiger technischer Fehler), ...)</xsd:documentation>
-            </xsd:annotation>
-          </xsd:element>
-        <xsd:element name="ErgaenzendeHinweise" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-      </xsd:sequence>
-      <xsd:attribute name="version" use="required">
-        <xsd:annotation>
-          <xsd:documentation>Dieses Attribut kennzeichnet die
-            Nachrichten-Version, z. B. "1.0", "1.1".</xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleType>
-          <xsd:restriction base="xsd:string">
-            <xsd:enumeration value="1.1"/>
-			<xsd:enumeration value="1.2"/>
-            <xsd:enumeration value="1.3"/>
-            <xsd:enumeration value="1.4"/>
-            <xsd:enumeration value="1.5"/>
-           </xsd:restriction>
-        </xsd:simpleType>
-      </xsd:attribute>
-      <xsd:attribute name="fassung" use="required">
-        <xsd:annotation>
-          <xsd:documentation>Dieses Attribut kennzeichnet das Datum, an dem
-            die diesen Schemata im Status final produziert wurde. Format:
-            YYYY-MM-DD.</xsd:documentation>
-        </xsd:annotation>
-        <xsd:simpleType>
-          <xsd:restriction base="xsd:string">
-            <xsd:enumeration value="2017-03-15"/>
-            <xsd:enumeration value="2018-04-01"/>
-            <xsd:enumeration value="2018-11-01"/>
-            <xsd:enumeration value="2019-06-28"/>
-            <xsd:enumeration value="2020-03-15"/>			
-          </xsd:restriction>
-        </xsd:simpleType>
-      </xsd:attribute>
-      <xsd:attribute name="produkt" type="xsd:string" use="optional">
-        <xsd:annotation>
-          <xsd:documentation>In diesem Attribut ist der Name des Produktes
-            (der Software) einzutragen, mit dem diese Nachricht erstellt
-            worden ist. z.B. BSP, PWS</xsd:documentation>
-        </xsd:annotation>
-      </xsd:attribute>
-      <xsd:attribute name="produkthersteller" type="xsd:string" use="optional"/>
-      <xsd:attribute name="produktversion" type="xsd:string" use="optional"/>
-    </xsd:complexType>
-  </xsd:element>
-
-  <xsd:complexType name="NachrichtenKopfType">
-    <xsd:sequence>
-      <xsd:element name="Identifikation.Nachricht" type="bsp:Identifikation.NachrichtType" maxOccurs="1" minOccurs="1"/>
-      <xsd:element name="Anwenderkennung" type="xsd:string" minOccurs="0">
-        <xsd:annotation>
-          <xsd:documentation> Die Anwenderkennung stellt Informationen über die absendende Person
-          zur Verfügung und dient der Protokollierung.
-          Anhand dieser Kennung kann die absendende Person identifiziert werden.
-          </xsd:documentation>
-        </xsd:annotation>
-      </xsd:element>
-      <xsd:element name="Absender" type="bsp:AbsenderType" maxOccurs="1" minOccurs="1"/>
-      <xsd:element name="Empfaenger" type="bsp:EmpfaengerType"  maxOccurs="1" minOccurs="1"/>
-      <xsd:element name="AntwortAuf" type="xsd:string" maxOccurs="1" minOccurs="0">
-        <xsd:annotation>
-          <xsd:documentation>Eine Nachricht kann mit einer exisiterenden
-            Nachricht in Beziehung gebracht werden als Antwortnachricht oder
-            weitergeleitete Nachricht. Der Bezug erfolgt hierbei über die
-            NachrichtenId.
-          </xsd:documentation>
-        </xsd:annotation>
-      </xsd:element>
-      <xsd:element name="WeiterleitungZu" type="xsd:string" minOccurs="0"/>
-      <xsd:element name="lesebestaetigungAntwortAdresse" type="xsd:string" minOccurs="0"/>
-    </xsd:sequence>
-  </xsd:complexType>
-  <xsd:complexType name="Identifikation.NachrichtType">
-    <xsd:sequence>
-      <xsd:element name="Ereignis" type="bsp:SchluesseltabelleType">
-        <xsd:annotation>
-          <xsd:documentation>Schluesseltabelle 9001, Schluessel: BspNachricht
-          </xsd:documentation>
-        </xsd:annotation>
-      </xsd:element>
-      <xsd:element name="Erstellungszeitpunkt" type="xsd:dateTime" maxOccurs="1" minOccurs="1"/>
-      <xsd:element name="NachrichtenId" type="xsd:string" maxOccurs="1" minOccurs="1">
-        <xsd:annotation>
-          <xsd:documentation>eine beliebige, eindeutige ID, die durch den
-            erstellenden Client generiert wird. Zusammen mit
-            Erstellungszeitpunkt und Absender kann eine Nachricht bsp-global
-            eindeutig identifiziert werden.
-          </xsd:documentation>
-        </xsd:annotation>
-      </xsd:element>
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="AbsenderType">
-    <xsd:sequence>
-      <xsd:element name="PostkorbId" type="xsd:string" maxOccurs="1" minOccurs="0"/>
-      <xsd:element name="Verfahren" type="xsd:string" maxOccurs="1" minOccurs="0"/>
-      <xsd:element name="Dienst" type="bsp:NonEmptyString" maxOccurs="1" minOccurs="0"/>
-      <xsd:element name="Mandant" type="bsp:NonEmptyString" maxOccurs="1" minOccurs="0"/>
-      <xsd:element name="Gemeindeschluessel" type="bsp:SchluesseltabelleType" minOccurs="0">
-        <xsd:annotation>
-          <xsd:documentation>Der amtliche Gemeindeschlüssel (AGS).
-            Als Tabellennummer ist hier die 36 (OSCI-XMeld-Schlüsseltabelle "Amtlicher Gemeindeschluessel") zu verwenden.
-          </xsd:documentation>
-        </xsd:annotation>
-      </xsd:element>
-      <xsd:element name="Name" type="xsd:string" maxOccurs="1" minOccurs="0"/>
-      <xsd:element name="Anschrift" type="xsd:string" maxOccurs="1" minOccurs="0"/>
-      <xsd:element name="Email" type="xsd:string" maxOccurs="1" minOccurs="0"/>
-      <xsd:element name="Telefon" type="xsd:string" maxOccurs="1" minOccurs="0"/>
-      <xsd:element name="Hyperlink" type="xsd:string" maxOccurs="1" minOccurs="0"/>
-   </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="EmpfaengerType">
-    <xsd:sequence>
-      <xsd:element name="PostkorbId" type="xsd:string" maxOccurs="1" minOccurs="1"/>
-      <xsd:element name="Verfahren" type="xsd:string" maxOccurs="1" minOccurs="0"/>
-      <xsd:element name="Dienst" type="xsd:string" maxOccurs="1" minOccurs="0"/>
-      <xsd:element name="Mandant" type="xsd:string" maxOccurs="1" minOccurs="0"/>
-      <xsd:element name="Gemeindeschluessel" type="bsp:SchluesseltabelleType" minOccurs="0">
-        <xsd:annotation>
-          <xsd:documentation>Der amtliche Gemeindeschlüssel (AGS).
-            Als Tabellennummer ist hier die 36 (OSCI-XMeld-Schlüsseltabelle "Amtlicher Gemeindeschluessel") zu verwenden.
-          </xsd:documentation>
-        </xsd:annotation>
-      </xsd:element>
-      <xsd:element name="Name" type="xsd:string" maxOccurs="1" minOccurs="0"/>
-      <xsd:element name="Anschrift" type="xsd:string" maxOccurs="1" minOccurs="0"/>
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="NachrichtenInhaltType">
-    <xsd:sequence>
-      <xsd:element name="Betreff" type="bsp:NonEmptyString" maxOccurs="1"   minOccurs="1"/>
-      <xsd:element name="Kategorie" type="bsp:SchluesseltabelleType" minOccurs="0">
-        <xsd:annotation>
-          <xsd:documentation>Schluesseltabelle 9002 (KAT_STATUS, KAT_INFOBSP, ...)
-          </xsd:documentation>
-        </xsd:annotation>
-      </xsd:element>
-      <xsd:choice minOccurs="0">
-        <xsd:element name="StorkQaaLevel" type="bsp:StorkQaaLevel"/>
-        <xsd:element name="NpaGescheutzt" type="xsd:boolean" >
-          <!-- deprecated, wird durch StorkQaaLevel="STORK-QAA-Level-1" ersetzt -->
-          <xsd:annotation>
-            <xsd:documentation>
-              Diese Nachricht kann im BüsP-Postkorb nur nach
-              vorheriger Anmeldung mit dem nPA gelesen werden.
-            </xsd:documentation>
-          </xsd:annotation>
-        </xsd:element>
-      </xsd:choice>
-      <xsd:element name="ZuVorgang" type="bsp:ZuVorgangType" minOccurs="0"/>
-      <xsd:element name="FreiText" type="bsp:FreiTextType"/>
-      <xsd:element name="DataContainer" type="bsp:DataContainerType" minOccurs="0" maxOccurs="unbounded"/>
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="ZuVorgangType">
-    <xsd:annotation>
-      <xsd:documentation>VorgangsName oder VorgangsId müssen angegeben
-        werden. Es können auch beide angegeben werden.</xsd:documentation>
-    </xsd:annotation>
-    <xsd:sequence minOccurs="0">
-      <xsd:element name="VorgangsName" type="xsd:string"/>
-      <xsd:element name="VorgangsId" type="xsd:string"/>
-      <xsd:element name="VorgangStatus" type="bsp:SchluesseltabelleType">
-        <xsd:annotation>
-          <xsd:documentation>Schluesseltabelle 9003 (ST_ERHALTEN, ST_GELESEN,...)
-          </xsd:documentation>
-        </xsd:annotation>
-      </xsd:element>
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="FreiTextType">
-    <xsd:sequence>
-      <xsd:element name="Encoding" type="bsp:SchluesseltabelleType" maxOccurs="1" minOccurs="1">
-        <xsd:annotation>
-          <xsd:documentation>Schluesseltabelle 9004 (text/plain, text/html, ...)
-          </xsd:documentation>
-        </xsd:annotation>
-      </xsd:element>
-      <xsd:element name="Text" type="bsp:NonEmptyString" maxOccurs="1" minOccurs="1">
-        <xsd:annotation>
-          <xsd:documentation>
-            Wenn als Encoding text/plain festgelegt ist, so wird die Zeichensequenz "\n" als ein Zeilenvorschub interpretiert.
-            Das Backslash-Zeichen (\) wird mit einem weiteren Backslash-Zeichen entwertet.
-          </xsd:documentation>
-        </xsd:annotation>
-      </xsd:element>
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="DataContainerType">
-    <xsd:sequence minOccurs="0">
-      <xsd:element name="Inhalt" type="xsd:base64Binary" maxOccurs="1" minOccurs="1"/>
-      <xsd:element name="FileName" maxOccurs="1" minOccurs="0">
-          <xsd:simpleType>
-            <xsd:restriction base="xsd:string">
-              <xsd:maxLength value="255"/>
-            </xsd:restriction>
-          </xsd:simpleType>
-      </xsd:element>
-      <xsd:element name="FileType" type="bsp:SchluesseltabelleType" maxOccurs="1" minOccurs="1">
-        <xsd:annotation>
-          <xsd:documentation>Schluesseltabelle 9005 (application/pdf, text/html, ...)
-          </xsd:documentation>
-        </xsd:annotation>
-      </xsd:element>
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:complexType name="SchluesseltabelleType">
-    <xsd:annotation>
-      <xsd:documentation>Dieser Datentyp wird für Schlüsselwerte benötigt.
-        Mit dem Datentyp SchluesseltabelleType übermittelt man den Schlüssel
-        und die Nummer der Tabelle, in der das Schlüssel-Wert Paar definiert
-        worden ist.
-      </xsd:documentation>
-    </xsd:annotation>
-    <xsd:sequence>
-      <xsd:element name="Tabelle" type="xsd:string"/>
-      <xsd:element name="Schluessel" type="xsd:string"/>
-    </xsd:sequence>
-  </xsd:complexType>
-
-  <xsd:simpleType name="StorkQaaLevel">
-    <xsd:restriction base="xsd:string">
-      <!-- since version 1.2 - deprecated -->
-      <xsd:enumeration value="LEVEL_1"/>
-      <xsd:enumeration value="LEVEL_2"/>
-      <xsd:enumeration value="LEVEL_3"/>
-      <xsd:enumeration value="LEVEL_4"/>
-      <!--  since version 1.3 -->
-      <xsd:enumeration value="STORK-QAA-Level-1"/>
-      <xsd:enumeration value="STORK-QAA-Level-2"/>
-      <xsd:enumeration value="STORK-QAA-Level-3"/>
-      <xsd:enumeration value="STORK-QAA-Level-4"/>
-    </xsd:restriction>
-  </xsd:simpleType>
-  <xsd:simpleType name="NonEmptyString">
-    <xsd:restriction base="xsd:string">
-      <xsd:minLength value="1"/>
-    </xsd:restriction>
-  </xsd:simpleType>
-</xsd:schema>
-
-
diff --git a/nachrichten-manager/src/main/resources/bayernid/metadata/bayernid-idp-infra.xml b/nachrichten-manager/src/main/resources/bayernid/metadata/bayernid-idp-infra.xml
deleted file mode 100644
index ec1ed7ca7099b8be7a8cff7448a740f0b9404c34..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/main/resources/bayernid/metadata/bayernid-idp-infra.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><md:EntitiesDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata">
-    <md:EntityDescriptor entityID="https://infra-pre-id.bayernportal.de/idp">
-        <md:IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
-            <md:KeyDescriptor use="signing">
-                <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
-                    <ds:X509Data>
-                        <ds:X509Certificate>MIIFbzCCA1egAwIBAgIJAPdFXXarkBN2MA0GCSqGSIb3DQEBCwUAME4xCzAJBgNV
-                            BAYTAkRFMQ8wDQYDVQQIDAZCYXllcm4xETAPBgNVBAcMCE11ZW5jaGVuMQ0wCwYD
-                            VQQKDARBS0RCMQwwCgYDVQQLDANJRE0wHhcNMjAxMDI3MTMxODQxWhcNMjUxMDI2
-                            MTMxODQxWjBOMQswCQYDVQQGEwJERTEPMA0GA1UECAwGQmF5ZXJuMREwDwYDVQQH
-                            DAhNdWVuY2hlbjENMAsGA1UECgwEQUtEQjEMMAoGA1UECwwDSURNMIICIjANBgkq
-                            hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzDtWAEdC3J9FD+ti1exRhN1lzNgKWqO2
-                            gQNdJvlt7KGHA2VGGO7tqRogTuoqi/ydtiHJ8+lhp4kcWqyfv7i9HXOncvcsRRmR
-                            dZjUY2Iui6ozJqD5LVm/vP5YfdP7vQPdbqyyfpoJhf3mbMEtdNDdGRnGIPUfDn+C
-                            Fbo37f9tPwMgf3jgh4gxaujtLIhhr9gevVTEeZAFu9EvzLNd3kEtRb7MuXqIOdu1
-                            rW8HlGYFwwVLqEyBn8XG0QAIfhMmGjFMG7z+Kco2quwOmmZVzWQfeH/3AlN2KbcP
-                            t7j+pl+6Bew2AAivP7O+95YKORqQjTu3rPWMF4txPId37MSjoytwBRyd5EACTvhQ
-                            BOGrDFKQUOx6fTtRc8+7XGVz8MdQaZQWQXXh1ByU783twNdnRSrSVIyLdjiy1uCb
-                            jvsSAtbzGBygPIvDo3skCNLNFXsChtHIfFFDK20KPGb0ghEDf2q3hDbFG3ZDGGyn
-                            ZmJcZKuZhJqodJ/++sAXADyTJNAPVYDjKCF4ypELp2Eu/p1gaQPJEb74L/ZFZVOE
-                            JFyXIiaqB9J+fcn/biqHHOmcCi8n9aIiNt1fatr1Z4lQRWoGtKaGU0+bzUSH4Bgs
-                            2EG4u1CI2MKDWqK2aEsHrtu8tbS9LrUmDVKtaEUOeul8xWVa036vp/YUIdiJNZSx
-                            ZG4iTmSOATECAwEAAaNQME4wHQYDVR0OBBYEFFYeltslkaolOmcINXQeSe7nURwp
-                            MB8GA1UdIwQYMBaAFFYeltslkaolOmcINXQeSe7nURwpMAwGA1UdEwQFMAMBAf8w
-                            DQYJKoZIhvcNAQELBQADggIBAKqAlXoO41SAiycYUOrR90pfwTCysmbtHF5RWSCM
-                            jF2aCG8URJ7bXwC0lBH8E5zCetFZwdqZziQtxzRkIOfhS5uWbH0RDhwuxZG+5RTP
-                            yaHPAZI6e5xHDu8vHl/VbC3lnL/6K8l+Purr/yo8qkJqrPgThZRL9jBQyYRhDSsJ
-                            UyIw5zcKKUQC/JWtMQAQcopbjekCs6xDT1HqIN90Sc/gOfYjNo0dGMNmro9mxcw8
-                            2Iow18KNVdtEexfD+/6x4NPD61pzuQEe09TR+Cv3XyzBoGQ/2arijcPnGvth79ff
-                            VFtRSf3fSs7wEKV9g3mEWXFDtPBhDj6K0kKU/kJfEZixkXl92MY+bmugrtTIrazj
-                            tfrgMglIAHu9XCYWd/gef0J+PNfHsxgbTEr3XSC+5/xoFKPQSw3PgV8lkUDq4mJU
-                            Ky/q4YmA37XQxourFR5pWvF03YACdtq6zPjtVeI7Cvkte6k0YW5S3cx9RmPv6YZh
-                            laZ5ERpWNiv6IjokLsvNeemf2PApjO7Q2EDBIoHBYH31wwJSsyRDrSVmbaqLFI15
-                            fLXeh2A4YbaBDZdGvDiLOAk+dG1wdZ2aGw/uNBzMtc8VeKqI1HPcqIluBA3uUPpy
-                            LLA+9hDPf6Pp4j0gkXxBikz+/h22bFxE1HmDiOSkEn+2NmOHuEFeA+D8jsCAL5VJ
-                            3emK</ds:X509Certificate>
-                    </ds:X509Data>
-                </ds:KeyInfo>
-            </md:KeyDescriptor>
-            <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat>
-            <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://infra-pre-id.bayernportal.de/idp/profile/SAML2/POST/SSO"/>
-            <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://infra-pre-id.bayernportal.de/idp/profile/SAML2/Redirect/SSO"/>
-        </md:IDPSSODescriptor>
-    </md:EntityDescriptor>
-</md:EntitiesDescriptor>
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcServiceTest.java
deleted file mode 100644
index 968c13b46cacfbf6528a6f3ac6d750e0154c08f5..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcServiceTest.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (c) 2024.
- * 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.nachrichten.antragraum;
-
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-
-import java.util.UUID;
-import java.util.stream.Stream;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Spy;
-
-import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
-import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory;
-import de.ozgcloud.vorgang.grpc.command.GrpcCommand;
-import io.grpc.stub.StreamObserver;
-
-class AntragraumGrpcServiceTest {
-	@Spy
-	@InjectMocks
-	private AntragraumGrpcService antragsraumGrpcService;
-	@Mock
-	private AntragraumService antragraumService;
-	@Mock
-	private AntragraumNachrichtMapper mapper;
-
-	@Nested
-	class TestFindRueckfragen {
-
-		@Nested
-		class TestFindRueckfragenGrpc {
-			@Mock
-			private StreamObserver<GrpcFindRueckfragenResponse> streamObserver;
-
-			@BeforeEach
-			void setup() {
-				when(antragraumService.findRueckfragen(any())).thenReturn(Stream.of(PostfachNachrichtTestFactory.create()));
-				when(mapper.toGrpc(any(PostfachNachricht.class))).thenReturn(GrpcRueckfrage.getDefaultInstance());
-			}
-
-			@Test
-			void shouldCallMapper() {
-				antragsraumGrpcService.findRueckfragen(GrpcFindRueckfrageRequestTestFactory.create(), streamObserver);
-
-				verify(mapper).toGrpc(any(PostfachNachricht.class));
-			}
-
-			@Test
-			void shouldCallOnNext() {
-				antragsraumGrpcService.findRueckfragen(GrpcFindRueckfrageRequestTestFactory.create(), streamObserver);
-
-				verify(streamObserver).onNext(any(GrpcFindRueckfragenResponse.class));
-			}
-
-			@Test
-			void shouldCallOnCompleted() {
-				antragsraumGrpcService.findRueckfragen(GrpcFindRueckfrageRequestTestFactory.create(), streamObserver);
-
-				verify(streamObserver).onCompleted();
-			}
-		}
-	}
-
-	@Nested
-	class TestSendAnswer {
-		@Mock
-		private StreamObserver<GrpcCommand> streamObserver;
-
-		@BeforeEach
-		void setup() {
-			when(antragraumService.sendRueckfrageAnswer(anyString(), anyString(), any(PostfachNachricht.class)))
-					.thenReturn(UUID.randomUUID().toString());
-			when(mapper.toPostfachNachricht(any(GrpcRueckfrageAnswer.class))).thenReturn(PostfachNachrichtTestFactory.create());
-		}
-
-		@Test
-		void shouldCallMapper() {
-			antragsraumGrpcService.sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequestTestFactory.create(), streamObserver);
-
-			verify(mapper).toPostfachNachricht(any(GrpcRueckfrageAnswer.class));
-		}
-
-		@Test
-		void shouldCallAntragraumService() {
-			antragsraumGrpcService.sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequestTestFactory.create(), streamObserver);
-
-			verify(antragraumService).sendRueckfrageAnswer(anyString(), anyString(), any(PostfachNachricht.class));
-		}
-
-		@Test
-		void shouldCallOnNext() {
-			antragsraumGrpcService.sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequestTestFactory.create(), streamObserver);
-
-			verify(streamObserver).onNext(any(GrpcCommand.class));
-		}
-
-		@Test
-		void shouldCallOnCompleted() {
-			antragsraumGrpcService.sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequestTestFactory.create(), streamObserver);
-
-			verify(streamObserver).onCompleted();
-		}
-
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapperTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapperTest.java
deleted file mode 100644
index 5ff78a92ed2d37b75e8c380ea47c87d41a50790c..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapperTest.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (c) 2024.
- * 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.nachrichten.antragraum;
-
-import static org.assertj.core.api.Assertions.*;
-
-import java.time.format.DateTimeFormatter;
-
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mapstruct.factory.Mappers;
-
-import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
-import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory;
-import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory;
-
-class AntragraumNachrichtMapperTest {
-
-	AntragraumNachrichtMapper mapper = Mappers.getMapper(AntragraumNachrichtMapper.class);
-
-	@Nested
-	class TestMapRueckfrage {
-
-		@Test
-		void shouldMapVorgangId() {
-			var result = map();
-
-			assertThat(result.getVorgangId()).isEqualTo(MessageTestFactory.VORGANG_ID);
-		}
-
-		@Test
-		void shouldMapId() {
-			var result = map();
-
-			assertThat(result.getId()).isEqualTo(PostfachNachrichtTestFactory.ID);
-		}
-
-		@Test
-		void shouldMapVorgangName() {
-			var result = map();
-
-			assertThat(result.getVorgangName()).isEqualTo(MessageTestFactory.SUBJECT);
-		}
-
-		@Test
-		void shouldMapStatus() {
-			var result = map();
-
-			assertThat(result.getStatus()).isEqualTo(AntragraumNachrichtMapper.DEFAULT_STATUS);
-		}
-
-		@Test
-		void shouldMapSentAt() {
-			var result = map();
-
-			assertThat(result.getSentAt()).isEqualTo(PostfachNachrichtTestFactory.SENT_AT.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
-		}
-
-		@Test
-		void shouldMapText() {
-			var result = map();
-
-			assertThat(result.getText()).isEqualTo(PostfachNachrichtTestFactory.MAIL_BODY);
-		}
-
-		@Test
-		void shouldMapAttachments() {
-			var result = map();
-
-			assertThat(result.getAttachmentFileIdCount()).isEqualTo(1);
-			assertThat(result.getAttachmentFileId(0)).isEqualTo(PostfachNachrichtTestFactory.ATTACHMENTS.get(0));
-		}
-
-		private GrpcRueckfrage map() {
-			return mapper.toGrpc(PostfachNachrichtTestFactory.create());
-		}
-
-	}
-
-	@Nested
-	class TestMapAnswerToPostfachNachricht {
-		@Test
-		void shouldMapText() {
-			var result = map();
-
-			assertThat(result.getMailBody()).isEqualTo(GrpcRueckfrageAnswerTestFactory.TEXT);
-		}
-
-		@Test
-		void shouldMapMessageId() {
-			var result = map();
-
-			assertThat(result.getMessageId()).isEqualTo(GrpcRueckfrageAnswerTestFactory.RUECKFRAGE_ID);
-		}
-
-		@Test
-		void shouldMapAttachmentIds() {
-			var result = map();
-
-			assertThat(result.getAttachments()).isEqualTo(GrpcRueckfrageAnswerTestFactory.ATTACHMENT_ID_LIST);
-		}
-
-		private PostfachNachricht map() {
-			return mapper.toPostfachNachricht(GrpcRueckfrageAnswerTestFactory.create());
-		}
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumServiceTest.java
deleted file mode 100644
index 1b8cfe1ed00be12d1d23043ef422878b7283f254..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumServiceTest.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package de.ozgcloud.nachrichten.antragraum;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-
-import java.util.UUID;
-
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Spy;
-import org.opensaml.saml.saml2.core.Response;
-
-import de.ozgcloud.nachrichten.NachrichtenManagerProperties;
-import de.ozgcloud.nachrichten.postfach.PersistPostfachNachrichtService;
-import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
-import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory;
-
-class AntragraumServiceTest {
-	@Spy
-	@InjectMocks
-	private AntragraumService service;
-
-	@Mock
-	private AntragraumProperties properties;
-	@Mock
-	private NachrichtenManagerProperties nachrichtenManagerProperties;
-	@Mock
-	private PersistPostfachNachrichtService postfachNachrichtService;
-	@Mock
-	private Saml2Verifier verifier;
-	@Mock
-	private Saml2Parser parser;
-	@Mock
-	private Saml2Decrypter decrypter;
-
-	@Nested
-	class TestGetAntragsraumUrl {
-
-		private static final String URL = "url";
-
-		@Test
-		void shouldReturnUrl() {
-			when(properties.getUrl()).thenReturn(URL);
-
-			var url = service.getAntragsraumUrl();
-
-			assertThat(url).isEqualTo(URL);
-		}
-
-	}
-
-	@Nested
-	class TestFindRueckfragen {
-		static final String SAML_TOKEN = "TOKEN";
-
-		@Test
-		void shouldCallVerify() {
-			service.findRueckfragen(SAML_TOKEN);
-
-			verify(service).verifyToken(anyString());
-		}
-
-		@Test
-		void shouldCallVerifier() {
-			service.findRueckfragen(SAML_TOKEN);
-
-			verify(verifier).verify(anyString());
-		}
-
-		@Test
-		void shouldCallDecrypt() {
-			when(parser.parse(anyString())).thenReturn(mock(Response.class));
-
-			service.findRueckfragen(SAML_TOKEN);
-
-			verify(decrypter).decryptPostfachId(any(Response.class));
-		}
-
-		@Test
-		void shouldCallPostfachService() {
-			when(decrypter.decryptPostfachId(any())).thenReturn(GrpcFindRueckfrageRequestTestFactory.POSTFACH_ID);
-
-			service.findRueckfragen(SAML_TOKEN);
-
-			verify(postfachNachrichtService).findRueckfragen(anyString());
-		}
-	}
-
-	@Nested
-	class TestSendRueckfragenAnswers {
-		static final String SAML_TOKEN = "TOKEN";
-		static final String RUECKFRAGE_ID = UUID.randomUUID().toString();
-		static final PostfachNachricht NACHRICHT = PostfachNachrichtTestFactory.create();
-
-		@Test
-		void shouldCallVerify() {
-			service.sendRueckfrageAnswer(SAML_TOKEN, RUECKFRAGE_ID, NACHRICHT);
-
-			verify(service).verifyToken(anyString());
-		}
-
-		@Test
-		void shouldCallVerifier() {
-			service.findRueckfragen(SAML_TOKEN);
-
-			verify(verifier).verify(anyString());
-		}
-
-		@Test
-		void shouldCallPostfachService() {
-			service.sendRueckfrageAnswer(SAML_TOKEN, RUECKFRAGE_ID, NACHRICHT);
-
-			verify(postfachNachrichtService).persistAnswer(anyString(), any(PostfachNachricht.class));
-		}
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/BayernIdSamlConfigurationTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/BayernIdSamlConfigurationTest.java
deleted file mode 100644
index 045f5caf46429366373499cfd279563895d3d9ad..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/BayernIdSamlConfigurationTest.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2024.
- * 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.nachrichten.antragraum;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.Mockito.*;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.springframework.core.io.InputStreamResource;
-
-import de.ozgcloud.common.test.TestUtils;
-
-class BayernIdSamlConfigurationTest {
-	@Mock
-	private AntragraumProperties properties;
-	@InjectMocks
-	private BayernIdSamlConfiguration bayernIdSamlConfiguration;
-
-	@Nested
-	class TestCreationOfParserPool {
-		@BeforeEach
-		void setup() throws Exception {
-			bayernIdSamlConfiguration.initOpenSAML();
-		}
-
-		@Test
-		void shouldCreateParserPool() {
-			assertThat(bayernIdSamlConfiguration.getParserPool()).isNotNull();
-		}
-	}
-
-	@Nested
-	class TestCreatingTrustEngine {
-		@BeforeEach
-		void setup() throws Exception {
-			when(properties.getMetadataUri()).thenReturn(new InputStreamResource(TestUtils.loadFile("bayernid-idp-infra.xml")));
-			when(properties.getEntityId()).thenReturn("https://antragsraum.ozgcloud.de/");
-			bayernIdSamlConfiguration.initOpenSAML();
-		}
-
-		@Test
-		void shouldCreateTrustEngine() {
-			assertThat(bayernIdSamlConfiguration.getTrustEngine()).isNotNull();
-		}
-	}
-
-	@Nested
-	class TestLoadingVerficationData {
-		@Test
-		void shouldCreateVerificationCriteria() {
-			when(properties.getEntityId()).thenReturn("https://antragsraum.ozgcloud.de/");
-			bayernIdSamlConfiguration.initOpenSAML();
-
-			assertThat(bayernIdSamlConfiguration.getVerificationCriteria()).isNotNull();
-		}
-
-		@Test
-		void shouldLoadVerificationCert() throws Exception {
-			when(properties.getMetadataUri()).thenReturn(new InputStreamResource(TestUtils.loadFile("bayernid-idp-infra.xml")));
-			bayernIdSamlConfiguration.initOpenSAML();
-
-			assertThat(bayernIdSamlConfiguration.getCertificatesFromMetadata()).isNotNull();
-		}
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcFindRueckfrageRequestTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcFindRueckfrageRequestTestFactory.java
deleted file mode 100644
index 9795428ab0d6020b63251d765af3e25e0f89cfa4..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcFindRueckfrageRequestTestFactory.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2024.
- * 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.nachrichten.antragraum;
-
-import de.ozgcloud.common.test.TestUtils;
-
-import java.util.UUID;
-
-public class GrpcFindRueckfrageRequestTestFactory {
-	static final String POSTFACH_ID = UUID.randomUUID().toString();
-	static final String SAML_TOKEN = TestUtils.loadTextFile("SamlResponse.xml");
-
-	static GrpcFindRueckfragenRequest create() {
-		return createBuilder().build();
-	}
-
-	static GrpcFindRueckfragenRequest.Builder createBuilder() {
-		return GrpcFindRueckfragenRequest.newBuilder()
-				.setPostfachId(POSTFACH_ID)
-				.setSamlToken(SAML_TOKEN);
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcNachrichtTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcNachrichtTestFactory.java
deleted file mode 100644
index 1218f303b5e0c3dd25a8d11b30a7aef43adfb0af..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcNachrichtTestFactory.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package de.ozgcloud.nachrichten.antragraum;
-
-import de.ozgcloud.info.nachricht.GrpcNachricht;
-import de.ozgcloud.nachrichten.info.InfoManagerRequestTestFactory;
-import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory;
-import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory;
-
-public class GrpcNachrichtTestFactory {
-
-	public static GrpcNachricht create() {
-		return createBuilder().build();
-	}
-
-	public static GrpcNachricht.Builder createBuilder() {
-		return GrpcNachricht.newBuilder()
-				.setNachrichtId(PostfachNachrichtTestFactory.ID)
-				.setVorgangId(MessageTestFactory.VORGANG_ID)
-				.setPostfachId(MessageTestFactory.POSTFACH_ID)
-				.setNachrichtenListUrl(InfoManagerRequestTestFactory.NACHRICHTEN_MANAGER_URL);
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcRueckfrageAnswerTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcRueckfrageAnswerTestFactory.java
deleted file mode 100644
index 6c0fb28f113bc5e179aff00d19a9e5cd5a7a6cc9..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcRueckfrageAnswerTestFactory.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package de.ozgcloud.nachrichten.antragraum;
-
-import java.util.List;
-import java.util.UUID;
-
-import com.thedeanda.lorem.LoremIpsum;
-
-public class GrpcRueckfrageAnswerTestFactory {
-	static final String RUECKFRAGE_ID = UUID.randomUUID().toString();
-	static final String TEXT = LoremIpsum.getInstance().getParagraphs(2, 4);
-	static final List<String> ATTACHMENT_ID_LIST = List.of(UUID.randomUUID().toString());
-
-	static GrpcRueckfrageAnswer create() {
-		return createBuilder().build();
-	}
-
-	static GrpcRueckfrageAnswer.Builder createBuilder() {
-		return GrpcRueckfrageAnswer.newBuilder()
-				.setRueckfrageId(RUECKFRAGE_ID)
-				.setAnswerText(TEXT)
-				.addAllAttachmentFileId(ATTACHMENT_ID_LIST);
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcSendRueckfrageAnswerRequestTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcSendRueckfrageAnswerRequestTestFactory.java
deleted file mode 100644
index f1fa9bcfd3877d5bdc17b611f06d373feb565205..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcSendRueckfrageAnswerRequestTestFactory.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package de.ozgcloud.nachrichten.antragraum;
-
-import de.ozgcloud.common.test.TestUtils;
-
-public class GrpcSendRueckfrageAnswerRequestTestFactory {
-	static final String SAML_TOKEN = TestUtils.loadTextFile("SamlResponse.xml");
-	static final GrpcRueckfrageAnswer ANSWER = GrpcRueckfrageAnswerTestFactory.create();
-
-	static GrpcSendRueckfrageAnswerRequest create() {
-		return createBuilder().build();
-	}
-
-	static GrpcSendRueckfrageAnswerRequest.Builder createBuilder() {
-		return GrpcSendRueckfrageAnswerRequest.newBuilder()
-				.setAnswer(ANSWER)
-				.setSamlToken(SAML_TOKEN);
-	}
-
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2DecrypterTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2DecrypterTest.java
deleted file mode 100644
index 1dd94cea3e8ef54e5b7d62ac936921ed583d748b..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2DecrypterTest.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (c) 2024.
- * 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.nachrichten.antragraum;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.Mockito.*;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.Test;
-import org.mockito.Mock;
-import org.opensaml.saml.saml2.core.Attribute;
-import org.opensaml.saml.saml2.core.AttributeStatement;
-import org.opensaml.saml.saml2.core.Response;
-import org.springframework.core.io.InputStreamResource;
-import org.springframework.test.util.ReflectionTestUtils;
-
-import de.ozgcloud.common.test.TestUtils;
-
-@Disabled("Passende certificat und key file muessen local vorhanden sein")
-class Saml2DecrypterTest {
-	private Response samlResponse;
-
-	@Mock
-	private AntragraumProperties properties;
-
-	private BayernIdSamlConfiguration configuration;
-
-	private Saml2Decrypter decrypter;
-
-	@BeforeEach
-	void setup() throws Exception {
-		when(properties.getDecryptionCertificate()).thenReturn(new InputStreamResource(TestUtils.loadFile("bayernid-test-enc.crt")));
-		when(properties.getDecryptionPrivateKey()).thenReturn(new InputStreamResource(TestUtils.loadFile("bayernid-test-enc.key")));
-
-		configuration = new BayernIdSamlConfiguration();
-		ReflectionTestUtils.setField(configuration, "antragraumProperties", properties);
-		configuration.initOpenSAML();
-
-		var samlResponseString = TestUtils.loadTextFile("SamlResponse.xml");
-		var parser = new Saml2Parser(configuration);
-		samlResponse = parser.parse(samlResponseString);
-
-		decrypter = new Saml2Decrypter(configuration);
-		decrypter.init();
-	}
-
-	@Test
-	void shouldDecrypt() {
-		assertThat(samlResponse.getAssertions()).isEmpty();
-
-		decrypter.decryptResponseElements(samlResponse);
-
-		assertThat(samlResponse.getAssertions()).isNotEmpty();
-	}
-
-	@Test
-	void shouldHaveSubject() {
-		decrypter.decryptResponseElements(samlResponse);
-		var samlAssertion = samlResponse.getAssertions().get(0);
-
-		assertThat(samlAssertion.getSubject()).isNotNull();
-	}
-
-	@Test
-	void shouldHaveAuthnStatements() {
-		decrypter.decryptResponseElements(samlResponse);
-		var samlAssertion = samlResponse.getAssertions().get(0);
-		var authnStatements = samlAssertion.getAuthnStatements();
-
-		assertThat(authnStatements).isNotNull();
-	}
-
-	@Test
-	void shouldHaveStatements() {
-		decrypter.decryptResponseElements(samlResponse);
-		var samlAssertion = samlResponse.getAssertions().get(0);
-		var statements = samlAssertion.getStatements();
-
-		assertThat(statements).isNotNull();
-	}
-
-	@Test
-	void shouldHaveAttributes() {
-		decrypter.decryptResponseElements(samlResponse);
-		var samlAssertion = samlResponse.getAssertions().get(0);
-		var statements = (AttributeStatement) samlAssertion.getStatements().get(1);
-		var attributes = statements.getAttributes();
-		assertThat(attributes).hasSize(7);
-	}
-
-	@Test
-	void shouldHavePostfachId() {
-		decrypter.decryptResponseElements(samlResponse);
-		var samlAssertion = samlResponse.getAssertions().get(0);
-		var statements = (AttributeStatement) samlAssertion.getStatements().get(1);
-		var attributes = statements.getAttributes();
-		var postfachIdOptional = attributes.stream().filter(attribute -> "legacyPostkorbHandle".equals(attribute.getFriendlyName())).findFirst();
-		assertThat(postfachIdOptional).map(Attribute::getAttributeValues).isNotNull();
-	}
-
-	@Test
-	void shouldGetPostfachId() {
-		var postfachId = decrypter.decryptPostfachId(samlResponse);
-
-		assertThat(postfachId).isEqualTo("28721c6f-b78f-4d5c-a048-19fd2fc429d2");
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2ParserTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2ParserTest.java
deleted file mode 100644
index afcca2fbe9c930eebf72c015495ac38f3a3ed2bd..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2ParserTest.java
+++ /dev/null
@@ -1,72 +0,0 @@
-
-package de.ozgcloud.nachrichten.antragraum;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.Mockito.*;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.opensaml.saml.saml2.core.Response;
-import org.springframework.test.util.ReflectionTestUtils;
-
-import de.ozgcloud.common.test.TestUtils;
-
-class Saml2ParserTest {
-	private BayernIdSamlConfiguration configuration;
-
-	@BeforeEach
-	void setup() {
-		var properties = mock(AntragraumProperties.class);
-		configuration = new BayernIdSamlConfiguration();
-		ReflectionTestUtils.setField(configuration, "antragraumProperties", properties);
-		configuration.initOpenSAML();
-	}
-
-	@Test
-	void shouldInit() {
-		var parser = new Saml2Parser(configuration);
-
-		assertThat(parser).isNotNull();
-	}
-
-	@Test
-	void shouldParseSamlToken() throws Exception {
-		var response = getResponse();
-		assertThat(response).isNotNull();
-	}
-
-	@Test
-	void shouldHaveAssertions() throws Exception {
-		var response = getResponse();
-		assertThat(response.getAssertions()).isNotNull();
-	}
-
-	@Test
-	void shouldHaveEncryptedAssertions() throws Exception {
-		var response = getResponse();
-		assertThat(response.getEncryptedAssertions()).isNotNull();
-	}
-
-	@Test
-	void shouldHaveIssuer() throws Exception {
-		var response = getResponse();
-		assertThat(response.getIssuer().getValue()).isEqualTo("https://infra-pre-id.bayernportal.de/idp");
-	}
-
-	@Test
-	void shouldGetXMLObject() throws Exception {
-		var parser = new Saml2Parser(configuration);
-
-		try (var tokenStream = TestUtils.loadFile("SamlResponse.xml")) {
-			assertThat(parser.xmlObject(tokenStream)).isNotNull();
-		}
-	}
-
-	private Response getResponse() throws Exception {
-		var token = TestUtils.loadTextFile("SamlResponse.xml");
-		var parser = new Saml2Parser(configuration);
-
-		return parser.parse(token);
-	}
-
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2VerifierTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2VerifierTest.java
deleted file mode 100644
index 03dbcb5983d097f1516bdea5bc6f284345d43b15..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2VerifierTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 2024.
- * 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.nachrichten.antragraum;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.Mockito.*;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.mockito.Mock;
-import org.springframework.core.io.InputStreamResource;
-import org.springframework.test.util.ReflectionTestUtils;
-
-import de.ozgcloud.common.test.TestUtils;
-
-class Saml2VerifierTest {
-	private String samlResponse;
-
-	private Saml2Verifier verifier;
-
-	@Mock
-	private AntragraumProperties properties;
-
-	private BayernIdSamlConfiguration configuration;
-
-	@BeforeEach
-	void setup() throws Exception {
-		when(properties.getMetadataUri()).thenReturn(new InputStreamResource(TestUtils.loadFile("bayernid-idp-infra.xml")));
-		when(properties.getEntityId()).thenReturn("https://antragsraum.ozgcloud.de");
-		samlResponse = TestUtils.loadTextFile("SamlResponse.xml");
-
-		configuration = new BayernIdSamlConfiguration();
-		ReflectionTestUtils.setField(configuration, "antragraumProperties", properties);
-		configuration.initOpenSAML();
-
-		var parser = new Saml2Parser(configuration);
-
-		verifier = new Saml2Verifier(parser, configuration);
-		verifier.init();
-	}
-
-	@Test
-	void shouldGetVerificationError() {
-		var res = verifier.verify(samlResponse);
-
-		assertThat(res).isNotEmpty();
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/ClientAttributeRemoteServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/ClientAttributeRemoteServiceTest.java
deleted file mode 100644
index bcd766f4b63ed511d3386056e87ccfa54f5340f0..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/ClientAttributeRemoteServiceTest.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.attributes;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Captor;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-
-import de.ozgcloud.vorgang.grpc.clientAttribute.ClientAttributeServiceGrpc.ClientAttributeServiceBlockingStub;
-import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcAccessPermission;
-import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttributeValue;
-import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcSetClientAttributeRequest;
-
-class ClientAttributeRemoteServiceTest {
-
-	@InjectMocks
-	private ClientAttributeRemoteService remoteService;
-	@Mock
-	private ClientAttributeServiceBlockingStub stub;
-
-	@Captor
-	private ArgumentCaptor<GrpcSetClientAttributeRequest> requestCaptor;
-
-	@BeforeEach
-	void prepareStubMock() {
-		when(stub.withInterceptors(any())).thenReturn(stub);
-	}
-
-	@Nested
-	class TestSetBooleanReadOnlyClientAttribute {
-
-		@Test
-		void shouldCallStub() {
-			callService();
-
-			verify(stub).set(any());
-		}
-
-		@Test
-		void shouldFillRequest() {
-			var expectedAttribute = GrpcClientAttributeTestFactory.createBuilder()
-					.setAccess(GrpcAccessPermission.READ_ONLY)
-					.setValue(GrpcClientAttributeValue.newBuilder().setBoolValue(true).build())
-					.build();
-
-			var request = callService();
-
-			assertThat(request).usingRecursiveComparison().isEqualTo(GrpcSetClientAttributeRequestTestFactory.createWithAttribute(expectedAttribute));
-		}
-
-		private GrpcSetClientAttributeRequest callService() {
-			remoteService.setBooleanReadOnlyClientAttribute(GrpcSetClientAttributeRequestTestFactory.VORGANG_ID,
-					ClientAttributeTestFactory.ATTRIBUTE_NAME, true);
-
-			verify(stub).set(requestCaptor.capture());
-
-			return requestCaptor.getValue();
-		}
-	}
-
-	@Nested
-	class TestSetBooleanWritableClientAttribute {
-
-		@Test
-		void shouldCallStub() {
-			callService();
-
-			verify(stub).set(any());
-		}
-
-		@Test
-		void shouldFillRequest() {
-			var expectedAttribute = GrpcClientAttributeTestFactory.createBuilder()
-					.setAccess(GrpcAccessPermission.READ_WRITE)
-					.setValue(GrpcClientAttributeValue.newBuilder().setBoolValue(true).build())
-					.build();
-
-			var request = callService();
-
-			assertThat(request).usingRecursiveComparison().isEqualTo(GrpcSetClientAttributeRequestTestFactory.createWithAttribute(expectedAttribute));
-		}
-
-		private GrpcSetClientAttributeRequest callService() {
-			remoteService.setBooleanWriteableClientAttribute(GrpcSetClientAttributeRequestTestFactory.VORGANG_ID,
-					ClientAttributeTestFactory.ATTRIBUTE_NAME, true);
-
-			verify(stub).set(requestCaptor.capture());
-
-			return requestCaptor.getValue();
-		}
-	}
-
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/ClientAttributeServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/ClientAttributeServiceTest.java
deleted file mode 100644
index 6a2bcc8bb843e43ee8199dcbd0c5f42e3ead0f49..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/ClientAttributeServiceTest.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.attributes;
-
-import static org.mockito.Mockito.*;
-
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-
-class ClientAttributeServiceTest {
-
-	private static final String VORGANG_ID = "81";
-
-	@InjectMocks
-	private ClientAttributeService service;
-	@Mock
-	private ClientAttributeRemoteService remoteService;
-
-	@Nested
-	class TestSetHasNachricht {
-
-		@Test
-		void shouldCallRemoteService() {
-			service.setHasPostfachNachricht(VORGANG_ID);
-
-			verify(remoteService).setBooleanReadOnlyClientAttribute(VORGANG_ID, ClientAttributeService.ATTRIBUTE_NAME_HAS_POSTFACH_NACHRICHT, true);
-		}
-	}
-
-	@Nested
-	class TestSetHasNewNachricht {
-		@Test
-		void shouldCallRemoteService() {
-			service.setHasNewPostfachNachricht(VORGANG_ID);
-
-			verify(remoteService).setBooleanWriteableClientAttribute(VORGANG_ID, ClientAttributeService.ATTRIBUTE_NAME_HAS_NEW_POSTFACH_NACHRICHT,
-					true);
-		}
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/GrpcClientAttributeTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/GrpcClientAttributeTestFactory.java
deleted file mode 100644
index aa74eb83c907c8cc1614aded540f13fc53a3f3de..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/GrpcClientAttributeTestFactory.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.attributes;
-
-import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcAccessPermission;
-import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute;
-import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttributeValue;
-
-public class GrpcClientAttributeTestFactory {
-
-	public static final GrpcClientAttribute create() {
-		return createBuilder().build();
-	}
-
-	public static final GrpcClientAttribute.Builder createBuilder() {
-		return GrpcClientAttribute.newBuilder()
-				.setAttributeName(ClientAttributeTestFactory.ATTRIBUTE_NAME)
-				.setAccess(GrpcAccessPermission.READ_WRITE)
-				.setValue(GrpcClientAttributeValue.newBuilder().setStringValue(ClientAttributeTestFactory.VALUE).build());
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/GrpcSetClientAttributeRequestTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/GrpcSetClientAttributeRequestTestFactory.java
deleted file mode 100644
index 0558b0d9360776e5c6d5b86fb948f30720e29011..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/GrpcSetClientAttributeRequestTestFactory.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.attributes;
-
-import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcAccessPermission;
-import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute;
-import de.ozgcloud.vorgang.grpc.clientAttribute.GrpcSetClientAttributeRequest;
-
-class GrpcSetClientAttributeRequestTestFactory {
-
-	static final String VORGANG_ID = "55";
-	static final GrpcAccessPermission access = GrpcAccessPermission.READ_ONLY;
-
-	public static GrpcSetClientAttributeRequest create() {
-		return createBuilder().build();
-	}
-
-	public static GrpcSetClientAttributeRequest createWithAttribute(GrpcClientAttribute attribute) {
-		return createBuilder().setAttribute(attribute).build();
-	}
-
-	public static GrpcSetClientAttributeRequest.Builder createBuilder() {
-		return GrpcSetClientAttributeRequest.newBuilder()
-				.setVorgangId(VORGANG_ID)
-				.setAttribute(GrpcClientAttributeTestFactory.create());
-	}
-
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/EMailServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/EMailServiceTest.java
deleted file mode 100644
index f749f48e4f1cd41f07a89f93bcb346eb23686a64..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/EMailServiceTest.java
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.email;
-
-import static de.ozgcloud.nachrichten.email.MailSendRequestTestFactory.*;
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-
-import jakarta.activation.DataSource;
-import jakarta.mail.MessagingException;
-import jakarta.mail.internet.MimeMessage;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Spy;
-import org.springframework.context.ApplicationEventPublisher;
-import org.springframework.mail.MailSendException;
-import org.springframework.mail.javamail.JavaMailSender;
-import org.springframework.mail.javamail.MimeMessageHelper;
-
-import lombok.SneakyThrows;
-
-class EMailServiceTest {
-
-	@Spy // NOSONAR
-	@InjectMocks
-	private EMailService service;
-
-	@Mock
-	private JavaMailSender sender;
-	@Mock
-	private ApplicationEventPublisher publisher;
-
-	@Nested
-	class TestSendingEmail {
-
-		@Nested
-		class TestSendEmail {
-			private MailSendRequest request = MailSendRequestTestFactory.create();
-
-			@Mock // NOSONAR
-			private MimeMessage message;
-
-			@BeforeEach
-			void initTest() {
-				when(sender.createMimeMessage()).thenReturn(message);
-			}
-
-			@Test
-			void shouldWriteEmail() {
-				service.sendEmail(request);
-
-				verify(service).writeEmail(any(), eq(request));
-			}
-
-			@Test
-			void shouldAddAttachments() {
-				service.sendEmail(request);
-
-				verify(service).addAttachments(any(), eq(request));
-			}
-
-			@Test
-			void shouldSendMessage() {
-				service.sendEmail(request);
-
-				verify(service).send(message, request);
-			}
-		}
-
-		@Nested
-		class TestWriteEmail {
-
-			@Mock // NOSONAR
-			private MimeMessageHelper helper;
-
-			private MailSendRequest request = MailSendRequestTestFactory.create();
-
-			@Test
-			void shouldSetToAddress() throws MessagingException {
-				service.writeEmail(helper, request);
-
-				verify(helper).setTo(new String[] { formatMailRecipient(EMAIL_RECIPIENT) });
-			}
-
-			@SneakyThrows
-			@Test
-			void shouldFormatToEmailAddresses() {
-				var request = MailSendRequestTestFactory.createBuilder().clearToAddresses().toAddress(EMAIL_RECIPIENT).build();
-
-				service.writeEmail(helper, request);
-
-				verify(helper).setTo(new String[] { formatMailRecipient(EMAIL_RECIPIENT) });
-			}
-
-			@SneakyThrows
-			@Test
-			void shouldFormatFromEmailAddresses() {
-				service.writeEmail(helper, request);
-
-				verify(helper).setFrom(FROM);
-			}
-
-			@Test
-			void shouldSetFromAddress() throws MessagingException {
-				service.writeEmail(helper, request);
-
-				verify(helper).setFrom(MailSendRequestTestFactory.FROM);
-			}
-
-			@Test
-			void shouldSetSubject() throws MessagingException {
-				service.writeEmail(helper, request);
-
-				verify(helper).setSubject(MailSendRequestTestFactory.SUBJECT);
-			}
-
-			@Test
-			void shouldSetBody() throws MessagingException {
-				service.writeEmail(helper, request);
-
-				verify(helper).setText(MailSendRequestTestFactory.BODY);
-			}
-
-			@Test
-			void shouldSetReplyTo() throws MessagingException {
-				service.writeEmail(helper, request);
-
-				verify(helper).setReplyTo(MailSendRequestTestFactory.REPLY_TO);
-			}
-
-			public static String formatMailRecipient(MailRecipient mailRecipient) {
-				return EMAIL_ADDRESS_TEMPLATE.formatted(mailRecipient.firstName(), mailRecipient.lastName(), mailRecipient.email());
-			}
-		}
-
-		@Nested
-		class TestAddAttachments {
-
-			@Mock // NOSONAR
-			private MimeMessageHelper helper;
-
-			private MailSendRequest request = MailSendRequestTestFactory.create();
-
-			@Test
-			void shouldAddInlineAttachment() throws MessagingException {
-				service.addAttachments(helper, request);
-
-				verify(helper).addAttachment(eq(MailSendRequestTestFactory.ATTACHMENT_NAME), any(DataSource.class));
-			}
-		}
-
-		@Nested
-		class TestAddHeaders {
-			@Mock // NOSONAR
-			private MimeMessage message;
-
-			private MailSendRequest request = MailSendRequestTestFactory.createBuilder().receiptRequired(true).build();
-
-			@Test
-			void shouldRequestReceipt() {
-				service.prepareAndSendMail(message, request);
-
-				verify(service).requestReceipt(any(), any());
-			}
-
-			@Test
-			void shouldNotRequestReceipt() {
-				MailSendRequest request = MailSendRequestTestFactory.createBuilder().receiptRequired(false).build();
-
-				service.prepareAndSendMail(message, request);
-
-				verify(service, never()).requestReceipt(any(), any());
-			}
-
-			@Nested
-			class RequestReceipt {
-
-				@Test
-				void shouldAddReadReceiptToHeader() throws MessagingException {
-					service.requestReceipt(message, request);
-
-					verify(message).addHeader(EMailService.HEADER_READ_RECEIPT, MailSendRequestTestFactory.FROM);
-				}
-
-				@Test
-				void shouldAddConfirmReadingHeader() throws MessagingException {
-					service.requestReceipt(message, request);
-
-					verify(message).addHeader(EMailService.HEADER_CONFIRM_READING, MailSendRequestTestFactory.FROM);
-				}
-
-				@Test
-				void shouldAddDispositionNotificationHeader() throws MessagingException {
-					service.requestReceipt(message, request);
-
-					verify(message).addHeader(EMailService.HEADER_DISPOSITION_NOTIFICATION, MailSendRequestTestFactory.FROM);
-				}
-			}
-		}
-
-		@Nested
-		class TestSend {
-
-			@Mock // NOSONAR
-			private MimeMessage message;
-			private MailSendRequest request = MailSendRequestTestFactory.create();
-
-			@Test
-			void shouldCallSender() {
-				service.send(message, request);
-
-				verify(sender).send(message);
-			}
-
-			@Test
-			void shouldTriggerEvent() {
-				service.send(message, request);
-
-				verify(publisher).publishEvent(any(MailSentEvent.class));
-			}
-
-			@Test
-			void shouldTriggerEventOnError() {
-				doThrow(MailSendException.class).when(sender).send(any(MimeMessage.class));
-
-				service.send(message, request);
-
-				verify(publisher).publishEvent(any(MailSendErrorEvent.class));
-				verify(publisher, never()).publishEvent(any(MailSentEvent.class));
-			}
-		}
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/EmailGrpcServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/EmailGrpcServiceTest.java
deleted file mode 100644
index 06d0c091a5577e9add0bcd41703082bd8597a412..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/EmailGrpcServiceTest.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.email;
-
-import io.grpc.stub.StreamObserver;
-import lombok.SneakyThrows;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Captor;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.springframework.test.util.ReflectionTestUtils;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.Mockito.*;
-
-class EmailGrpcServiceTest {
-
-	@Mock
-	private MailService mailService;
-
-	@InjectMocks
-	private EmailGrpcService emailGrpcService;
-
-	@Nested
-	@DisplayName("When called send email gRPC endpoint")
-	class TestSendEmail {
-
-		@Mock
-		private StreamObserver<GrpcSendEmailResponse> streamObserver;
-		@Captor
-		private ArgumentCaptor<MailSendRequest> mailRequestCaptor;
-
-		@BeforeEach
-		@SneakyThrows
-		public void init() {
-			ReflectionTestUtils.setField(emailGrpcService, "mailFrom", MailSendRequestTestFactory.FROM);
-		}
-
-		@Test
-		void shouldSendEmail() {
-			var mailSendRequest = MailSendRequestTestFactory.createBuilder().clearToAddresses()
-					.toAddress(MailSendRequestTestFactory.EMAIL_RECIPIENT).clearAttachments()
-					.replyTo(null).requestReference(null).build();
-
-			emailGrpcService.sendEmail(GrpcNotificationRecipientsTestFactory.create(), streamObserver);
-
-			verify(mailService).sendMail(mailRequestCaptor.capture());
-			assertThat(mailRequestCaptor.getValue()).usingRecursiveComparison().isEqualTo(mailSendRequest);
-		}
-
-		@Test
-		void shouldSendAllEmail() {
-			var request = GrpcNotificationRecipientsTestFactory.createBuilder().addRecipients(GrpcRecipientTestFactory.create()).build();
-
-			emailGrpcService.sendEmail(request, streamObserver);
-
-			verify(mailService, times(2)).sendMail(any());
-		}
-
-		@Test
-		void shouldSendResponse() {
-			var notification = GrpcNotificationRecipientsTestFactory.create();
-
-			emailGrpcService.sendEmail(notification, streamObserver);
-
-			verify(streamObserver, times(1)).onNext(GrpcSendEmailResponse.newBuilder().build());
-		}
-
-		@Test
-		void shouldCloseObserver() {
-			var notification = GrpcNotificationRecipientsTestFactory.create();
-
-			emailGrpcService.sendEmail(notification, streamObserver);
-
-			verify(streamObserver, times(1)).onCompleted();
-		}
-	}
-
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/GrpcNotificationRecipientsTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/GrpcNotificationRecipientsTestFactory.java
deleted file mode 100644
index ec2ac285d3f24c84b1569babc2f6d43413c6dc0b..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/GrpcNotificationRecipientsTestFactory.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.email;
-
-public class GrpcNotificationRecipientsTestFactory {
-
-	public static final GrpcRecipient GRPC_EMAIL_RECIPIENT = GrpcRecipientTestFactory.create();
-
-	public static GrpcSendEmailRequest create() {
-		return createBuilder().build();
-	}
-
-	public static GrpcSendEmailRequest.Builder createBuilder() {
-		return  GrpcSendEmailRequest.newBuilder()
-				.setSubject(MailSendRequestTestFactory.SUBJECT)
-				.setBody(MailSendRequestTestFactory.BODY)
-				.addRecipients(GRPC_EMAIL_RECIPIENT);
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/GrpcRecipientTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/GrpcRecipientTestFactory.java
deleted file mode 100644
index 6b378f8143242cdb832bbd5acd0594d081ba42ef..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/GrpcRecipientTestFactory.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.email;
-
-public class GrpcRecipientTestFactory {
-
-	public static GrpcRecipient create() {
-		return createBuilder().build();
-	}
-
-	public static GrpcRecipient.Builder createBuilder() {
-		return GrpcRecipient.newBuilder()
-				.setFirstName(MailRecipientTestFactory.FIRST_NAME)
-				.setLastName(MailRecipientTestFactory.LAST_NAME)
-				.setEmail(MailSendRequestTestFactory.TO);
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailRecipientTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailRecipientTestFactory.java
deleted file mode 100644
index b2c567ea471b758ed07897a4fa9eaa9561cbad33..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailRecipientTestFactory.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.email;
-
-public class MailRecipientTestFactory {
-
-	public static final String FIRST_NAME = "first";
-	public static final String LAST_NAME = "last";
-	public static final String EMAIL = "default@email.local";
-
-	public static MailRecipient create() {
-		return createBuilder().build();
-	}
-
-	public static MailRecipient.MailRecipientBuilder createBuilder() {
-		return MailRecipient.builder()
-				.firstName(FIRST_NAME)
-				.lastName(LAST_NAME)
-				.email(EMAIL);
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSendErrorEventTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSendErrorEventTestFactory.java
deleted file mode 100644
index b2b9757a03b5a35fe60cb58782a585857911b0f0..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSendErrorEventTestFactory.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.email;
-
-public class MailSendErrorEventTestFactory {
-
-	public static final String ERROR_MSG = "leider kaputt";
-
-	public static MailSendErrorEvent create(MailSendRequest request) {
-		return new MailSendErrorEvent(request, ERROR_MSG);
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSendRequestTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSendRequestTestFactory.java
deleted file mode 100644
index 3e7fea3f26be53b05dd8e5aeccf7258f4b0c1076..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSendRequestTestFactory.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.email;
-
-import java.util.UUID;
-
-import de.ozgcloud.nachrichten.email.MailSendRequest.MailAttachment;
-import jakarta.mail.util.ByteArrayDataSource;
-
-class MailSendRequestTestFactory {
-
-	public static final String FROM = "from@mailinator.com";
-	public static final String TO = "to@mailinator.com";
-
-	public static final String SUBJECT = "The Subject";
-	public static final String BODY = "Lorem ipsum";
-
-	private static final String REFERENCE = UUID.randomUUID().toString();
-
-	public static final String ATTACHMENT_NAME = "aFile";
-	public static final String ATTACHMENT = "BINARY_BLAH";
-
-	public static final String REPLY_TO = "replyTo@mailinator.com";
-
-	public static final MailRecipient EMAIL_RECIPIENT = MailRecipientTestFactory.createBuilder().email(TO).build();
-
-	public static final String EMAIL_ADDRESS_TEMPLATE = "%s %s <%s>";
-
-	public static MailSendRequest create() {
-		return createBuilder().build();
-	}
-
-	public static MailSendRequest.MailSendRequestBuilder createBuilder() {
-		var ds = new ByteArrayDataSource(ATTACHMENT.getBytes(), "plain/text");
-		ds.setName(ATTACHMENT_NAME);
-
-		return MailSendRequest.builder()
-				.fromAddress(FROM)
-				.toAddress(EMAIL_RECIPIENT)
-				.subject(SUBJECT)
-				.body(BODY)
-				.requestReference(REFERENCE)
-				.attachment(MailAttachment.builder()
-						.dataSource(ds)
-						.build())
-				.replyTo(REPLY_TO);
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSentEventTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSentEventTestFactory.java
deleted file mode 100644
index 599956765d060fe7291d24b4f6cbf6d687daf141..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSentEventTestFactory.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.email;
-
-public class MailSentEventTestFactory {
-
-	public static MailSentEvent create(Object reference) {
-
-		return new MailSentEvent(MailSendRequestTestFactory.createBuilder().requestReference(reference).build());
-	}
-
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerRemoteServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerRemoteServiceTest.java
deleted file mode 100644
index 1410dd83c2d5f6418cbe4b408f91de93a55356af..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerRemoteServiceTest.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package de.ozgcloud.nachrichten.info;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Spy;
-
-import de.ozgcloud.info.nachricht.GrpcNachricht;
-import de.ozgcloud.info.nachricht.GrpcNewNachrichtReply;
-import de.ozgcloud.info.nachricht.GrpcNewNachrichtRequest;
-import de.ozgcloud.info.nachricht.NachrichtServiceGrpc.NachrichtServiceBlockingStub;
-
-class InfoManagerRemoteServiceTest {
-
-	@Spy
-	@InjectMocks
-	private InfoManagerRemoteService service;
-
-	@Mock
-	private NachrichtServiceBlockingStub nachrichtServiceStub;
-	@Mock
-	private InfomanagerNachrichtMapper nachrichtMapper;
-
-	@Nested
-	class TestSendNotification {
-
-		private static final String INFO_MANAGER_STATUS = "status";
-
-		@Mock
-		private GrpcNewNachrichtRequest grpcRequest;
-		@Mock
-		private GrpcNewNachrichtReply grpcReply;
-
-		@BeforeEach
-		void setup() {
-			doReturn(grpcRequest).when(service).buildNachrichtRequest(any());
-			when(nachrichtServiceStub.saveNewNachricht(any())).thenReturn(grpcReply);
-		}
-
-		@Test
-		void shouldCallGrpcClient() {
-			sendNotification();
-
-			verify(nachrichtServiceStub).saveNewNachricht(grpcRequest);
-		}
-
-		@Test
-		void shouldReturnStatus() {
-			when(grpcReply.getStatus()).thenReturn(INFO_MANAGER_STATUS);
-
-			var status = sendNotification();
-
-			assertThat(status).isEqualTo(INFO_MANAGER_STATUS);
-		}
-
-		private String sendNotification() {
-			return service.sendNotification(InfoManagerRequestTestFactory.create());
-		}
-	}
-
-	@Nested
-	class TestBuildNachrichtRequest {
-
-		@Mock
-		private GrpcNachricht grpcNachricht;
-
-		@BeforeEach
-		void setup() {
-			when(nachrichtMapper.toGrpc(any())).thenReturn(grpcNachricht);
-		}
-
-		@Test
-		void shouldCallMapper() {
-			var nachricht = InfoManagerRequestTestFactory.create();
-
-			service.buildNachrichtRequest(nachricht);
-
-			verify(nachrichtMapper).toGrpc(nachricht);
-		}
-
-		@Test
-		void shouldSetNachricht() {
-			var grpcRequest = service.buildNachrichtRequest(InfoManagerRequestTestFactory.create());
-
-			assertThat(grpcRequest.getNachricht()).isEqualTo(grpcNachricht);
-		}
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerRequestTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerRequestTestFactory.java
deleted file mode 100644
index 0690a65817010332a7bb2a68ad277f0d57192777..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerRequestTestFactory.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package de.ozgcloud.nachrichten.info;
-
-import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory;
-import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory;
-
-public class InfoManagerRequestTestFactory {
-
-	public static final String NACHRICHTEN_MANAGER_URL = "nachrichten-manager";
-
-	public static InfoManagerRequest create() {
-		return createBuilder().build();
-	}
-
-	private static InfoManagerRequest.InfoManagerRequestBuilder createBuilder() {
-		return InfoManagerRequest.builder()
-				.nachrichtId(PostfachNachrichtTestFactory.ID)
-				.vorgangId(MessageTestFactory.VORGANG_ID)
-				.postfachId(MessageTestFactory.POSTFACH_ID)
-				.nachrichtenManagerUrl(NACHRICHTEN_MANAGER_URL);
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerServiceTest.java
deleted file mode 100644
index 95e41db14745b4268f4154f0c7d9a2cee28d907c..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerServiceTest.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package de.ozgcloud.nachrichten.info;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Spy;
-
-import de.ozgcloud.nachrichten.NachrichtenManagerProperties;
-import de.ozgcloud.nachrichten.postfach.PostfachException;
-import de.ozgcloud.nachrichten.postfach.PostfachMessageCode;
-import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
-import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory;
-import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory;
-
-class InfoManagerServiceTest {
-
-	@Spy
-	@InjectMocks
-	private InfoManagerService service;
-
-	@Mock
-	private InfoManagerRemoteService infomanagerRemoteService;
-	@Mock
-	private NachrichtenManagerProperties nachrichtenManagerProperties;
-
-	@Nested
-	class TestNotifyInfoManager {
-
-		private static final String NACHRICHTEN_MANAGER_URL = "nachrichtenManagerUrl";
-
-		private PostfachNachricht postfachNachricht = PostfachNachrichtTestFactory.create();
-
-		@Test
-		void shouldCallBuildInfomanagerNachricht() {
-			service.notifyInfoManager(postfachNachricht);
-
-			verify(service).builInfomanagerRequest(postfachNachricht);
-		}
-
-		@Test
-		void shouldCallInfoManagerRemoteService() {
-			var infomanagerNachricht = InfoManagerRequestTestFactory.create();
-			doReturn(infomanagerNachricht).when(service).builInfomanagerRequest(any());
-
-			service.notifyInfoManager(postfachNachricht);
-
-			verify(infomanagerRemoteService).sendNotification(infomanagerNachricht);
-		}
-
-		@Test
-		void shouldThrowPostfachException() {
-			var causeException = new RuntimeException();
-			when(infomanagerRemoteService.sendNotification(any())).thenThrow(causeException);
-
-			var exception = assertThrows(PostfachException.class, () -> service.notifyInfoManager(postfachNachricht));
-			assertThat(exception.getMessageCode()).isEqualTo(PostfachMessageCode.PROCESS_FAILED_MESSAGE_CODE);
-		}
-
-		@Nested
-		class TestBuildInfomanagerNachricht {
-
-			@Test
-			void shouldSetNachrichtId() {
-				var request = buildInfomanagerNachricht();
-
-				assertThat(request.getNachrichtId()).isEqualTo(PostfachNachrichtTestFactory.ID);
-			}
-
-			@Test
-			void shouldSetVorgangId() {
-				var request = buildInfomanagerNachricht();
-
-				assertThat(request.getVorgangId()).isEqualTo(MessageTestFactory.VORGANG_ID);
-			}
-
-			@Test
-			void shouldSetPostfachId() {
-				var request = buildInfomanagerNachricht();
-
-				assertThat(request.getPostfachId()).isEqualTo(MessageTestFactory.POSTFACH_ID);
-			}
-
-			@Test
-			void shouldSetNachrichtenManagerUrl() {
-				when(nachrichtenManagerProperties.getUrl()).thenReturn(NACHRICHTEN_MANAGER_URL);
-
-				var request = buildInfomanagerNachricht();
-
-				assertThat(request.getNachrichtenManagerUrl()).isEqualTo(NACHRICHTEN_MANAGER_URL);
-			}
-
-			private InfoManagerRequest buildInfomanagerNachricht() {
-				return service.builInfomanagerRequest(postfachNachricht);
-			}
-		}
-
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfomanagerNachrichtMapperTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfomanagerNachrichtMapperTest.java
deleted file mode 100644
index a9d67291fc58a3b091205f14bd4d6411e02cd925..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfomanagerNachrichtMapperTest.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package de.ozgcloud.nachrichten.info;
-
-import static org.assertj.core.api.Assertions.*;
-
-import org.junit.jupiter.api.Test;
-import org.mapstruct.factory.Mappers;
-
-import de.ozgcloud.info.nachricht.GrpcNachricht;
-import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory;
-import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory;
-
-class InfomanagerNachrichtMapperTest {
-
-	private InfomanagerNachrichtMapper mapper = Mappers.getMapper(InfomanagerNachrichtMapper.class);
-
-	@Test
-	void shouldMapNachrichtId() {
-		var result = map();
-
-		assertThat(result.getNachrichtId()).isEqualTo(PostfachNachrichtTestFactory.ID);
-	}
-
-	@Test
-	void shouldMapVorgangId() {
-		var result = map();
-
-		assertThat(result.getVorgangId()).isEqualTo(MessageTestFactory.VORGANG_ID);
-	}
-
-	@Test
-	void shouldMapPostfachId() {
-		var result = map();
-
-		assertThat(result.getPostfachId()).isEqualTo(MessageTestFactory.POSTFACH_ID);
-	}
-
-	@Test
-	void shouldMapNachrichtenManagerUrl() {
-		var result = map();
-
-		assertThat(result.getNachrichtenListUrl()).isEqualTo(InfoManagerRequestTestFactory.NACHRICHTEN_MANAGER_URL);
-	}
-
-	private GrpcNachricht map() {
-		return mapper.toGrpc(InfoManagerRequestTestFactory.create());
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachAddressTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachAddressTestFactory.java
deleted file mode 100644
index 4e173a0123dca030adb5d4b0a67baa7cf36e2375..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachAddressTestFactory.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package de.ozgcloud.nachrichten.postfach;
-
-import de.ozgcloud.vorgang.common.GrpcObject;
-import de.ozgcloud.vorgang.common.GrpcProperty;
-
-public class GrpcPostfachAddressTestFactory {
-
-	public static GrpcPostfachAddress create() {
-		return createBuilder().build();
-	}
-
-	public static GrpcPostfachAddress.Builder createBuilder() {
-		return GrpcPostfachAddress.newBuilder()
-				.setType(PostfachAddressTestFactory.TYPE)
-				.setIdentifier(createIdentifier())
-				.setVersion(PostfachAddressTestFactory.VERSION)
-				.setServiceKontoType(PostfachTestFactory.POSTFACH_TYPE);
-	}
-
-	public static GrpcObject createIdentifier() {
-		return GrpcObject.newBuilder()
-				.addProperty(GrpcProperty.newBuilder()
-						.setName(PostfachNachricht.FIELD_POSTFACH_ID)
-						.addValue(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE)
-						.build())
-				.build();
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachMailTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachMailTestFactory.java
deleted file mode 100644
index 7f4399a3ec061bf428ca9b8f117e760d98533052..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachMailTestFactory.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach;
-
-import static de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory.*;
-import static de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory.*;
-
-public class GrpcPostfachMailTestFactory {
-
-	public static GrpcPostfachMail create() {
-		return createBuilder().build();
-	}
-
-	public static GrpcPostfachMail.Builder createBuilder() {
-		return GrpcPostfachMail.newBuilder()
-				.setId(ID)
-				.setVorgangId(VORGANG_ID)
-				.setPostfachId(POSTFACH_ID)
-				.setPostfachAddress(GrpcPostfachAddressTestFactory.create())
-				.setCreatedAt(CREATED_AT_STR)
-				.setCreatedBy(CREATED_BY)
-				.setSentAt(SENT_AT_STR)
-				.setSentSuccessful(SENT_SUCCESSFUL)
-				.setMessageCode(MESSAGE_CODE)
-				.setDirection(GrpcDirection.valueOf(DIRECTION.name()))
-				.setSubject(SUBJECT)
-				.setMailBody(PostfachNachrichtTestFactory.MAIL_BODY)
-				.setReplyOption(PostfachNachrichtTestFactory.REPLY_OPTION.name())
-				.addAllAttachment(PostfachNachrichtTestFactory.ATTACHMENTS);
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcResendPostfachMailRequestTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcResendPostfachMailRequestTestFactory.java
deleted file mode 100644
index 74968834e0528a9ee4fcc8968195a2973aa35ed6..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcResendPostfachMailRequestTestFactory.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach;
-
-import java.util.UUID;
-
-import de.ozgcloud.vorgang.grpc.command.GrpcCallContext;
-import de.ozgcloud.vorgang.grpc.command.GrpcUser;
-
-public class GrpcResendPostfachMailRequestTestFactory {
-
-	public static final String COMMAND_ID = UUID.randomUUID().toString();
-	public static final String USER_ID = UUID.randomUUID().toString();
-
-	public static GrpcResendPostfachMailRequest create() {
-		return createBuilder().build();
-	}
-
-	public static GrpcResendPostfachMailRequest.Builder createBuilder() {
-		return GrpcResendPostfachMailRequest.newBuilder()
-				.setContext(GrpcCallContext.newBuilder().setUser(GrpcUser.newBuilder().setId(USER_ID).build()).build())
-				.setCommandId(COMMAND_ID)
-				.setPostfachMailId(PostfachNachrichtTestFactory.ID);
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcSaveNachrichtDraftRequestTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcSaveNachrichtDraftRequestTestFactory.java
deleted file mode 100644
index 0c5a79c00147ea8050c4b6be651baa42a6d1161d..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcSaveNachrichtDraftRequestTestFactory.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package de.ozgcloud.nachrichten.postfach;
-
-import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory;
-
-public class GrpcSaveNachrichtDraftRequestTestFactory {
-
-	static GrpcSaveNachrichtDraftRequest create() {
-		return createBuilder().build();
-	}
-
-	static GrpcSaveNachrichtDraftRequest.Builder createBuilder() {
-		return GrpcSaveNachrichtDraftRequest.newBuilder()
-				.setVorgangId(MessageTestFactory.VORGANG_ID);
-
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcSendPostfachMailRequestTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcSendPostfachMailRequestTestFactory.java
deleted file mode 100644
index 076daa2e6bc31781983f8eb7ae50471d02ab0903..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcSendPostfachMailRequestTestFactory.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach;
-
-import java.util.UUID;
-
-import de.ozgcloud.vorgang.grpc.command.GrpcCallContext;
-import de.ozgcloud.vorgang.grpc.command.GrpcUser;
-
-class GrpcSendPostfachMailRequestTestFactory {
-
-	public static final String COMMAND_ID = UUID.randomUUID().toString();
-	public static final String USER_ID = UUID.randomUUID().toString();
-
-	public static GrpcSendPostfachMailRequest create() {
-		return createBuilder().build();
-	}
-
-	public static GrpcSendPostfachMailRequest.Builder createBuilder() {
-		return GrpcSendPostfachMailRequest.newBuilder()
-				.setContext(GrpcCallContext.newBuilder().setUser(GrpcUser.newBuilder().setId(USER_ID).build()).build())
-				.setCommandId(COMMAND_ID)
-				.setMail(GrpcPostfachMailTestFactory.createBuilder().clearCreatedAt().clearDirection().build());
-	}
-
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachAddressTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachAddressTestFactory.java
deleted file mode 100644
index 94f5df83467203175a20f03facaa15f6e3ed33cd..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachAddressTestFactory.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package de.ozgcloud.nachrichten.postfach;
-
-import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory;
-
-public class PostfachAddressTestFactory {
-
-	public final static int TYPE = 1;
-	public static final String STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE = MessageTestFactory.POSTFACH_ID;
-	public final static StringBasedIdentifier IDENTIFIER = StringBasedIdentifier.builder().postfachId(STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE)
-			.build();
-	public static final String VERSION = "1.0";
-
-	public static PostfachAddress create() {
-		return createBuilder().build();
-	}
-
-	public static PostfachAddress.PostfachAddressBuilder createBuilder() {
-		return PostfachAddress.builder()
-				.type(TYPE)
-				.identifier(IDENTIFIER)
-				.version(VERSION)
-				.serviceKontoType(PostfachTestFactory.POSTFACH_TYPE);
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachEventListenerTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachEventListenerTest.java
deleted file mode 100644
index 3964f981ad91a24b27d679420b55d43e0dbc8ed2..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachEventListenerTest.java
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Captor;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-
-import de.ozgcloud.command.Command;
-import de.ozgcloud.command.CommandCreatedEvent;
-import de.ozgcloud.nachrichten.postfach.PostfachNachricht.Direction;
-import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory;
-
-class PostfachEventListenerTest {
-
-	@InjectMocks
-	private PostfachEventListener listener;
-
-	@Mock
-	private PostfachService service;
-	@Mock
-	private Command command;
-
-	@Captor
-	private ArgumentCaptor<PostfachNachricht> nachrichtCaptor;
-
-	@DisplayName("Send postfach nachricht")
-	@Nested
-	class TestSendPostfachNachricht {
-
-		private static final String COMMAND_ID = UUID.randomUUID().toString();
-		private static final String USER_ID = PostfachNachrichtTestFactory.CREATED_BY;
-
-		@BeforeEach
-		void mockCommand() {
-			when(command.getId()).thenReturn(COMMAND_ID);
-			when(command.getCreatedBy()).thenReturn(USER_ID);
-			when(command.getVorgangId()).thenReturn(MessageTestFactory.VORGANG_ID);
-			when(command.getRelationId()).thenReturn(MessageTestFactory.VORGANG_ID);
-			when(command.getBodyObject()).thenReturn(buildCommandBody());
-		}
-
-		@Test
-		void shouldCallService() {
-			listener.sendPostfachNachricht(new CommandCreatedEvent(command));
-
-			verify(service).sendMail(eq(COMMAND_ID), eq(USER_ID), nachrichtCaptor.capture());
-			assertThat(nachrichtCaptor.getValue())
-					.usingRecursiveComparison().ignoringFields("id", "createdAt", "messageCode", "messageId", "sentAt", "sentSuccessful")
-					.isEqualTo(PostfachNachrichtTestFactory.createBuilder().direction(Direction.OUT).build());
-		}
-
-		@Test
-		void shouldNotHaveIdForNewNachricht() {
-			listener.sendPostfachNachricht(new CommandCreatedEvent(command));
-
-			verify(service).sendMail(eq(COMMAND_ID), eq(USER_ID), nachrichtCaptor.capture());
-			assertThat(nachrichtCaptor.getValue().getId()).isNull();
-		}
-
-		@Test
-		void shouldHaveIdForSavedNachricht() {
-			when(command.getRelationId()).thenReturn(PostfachNachrichtTestFactory.ID);
-
-			listener.sendPostfachNachricht(new CommandCreatedEvent(command));
-
-			verify(service).sendMail(eq(COMMAND_ID), eq(USER_ID), nachrichtCaptor.capture());
-			assertThat(nachrichtCaptor.getValue().getId()).isEqualTo(PostfachNachrichtTestFactory.ID);
-		}
-
-		@DisplayName("with postfachAddress")
-		@Nested
-		class TestWithPostfachAddress {
-
-			@BeforeEach
-			void mockCommandBodyObject() {
-				var body = buildCommandBody();
-				body.remove(PostfachNachricht.FIELD_POSTFACH_ID);
-				when(command.getBodyObject()).thenReturn(body);
-			}
-
-			@Test
-			void shouldHandleEmptyPostfachId() {
-				var postfachMailToSend = sendPostfachNachricht();
-
-				assertThat(postfachMailToSend.getPostfachId()).isNull();
-			}
-		}
-
-		@DisplayName("with postfachId")
-		@Nested
-		class TestWithPostfachId {
-
-			@BeforeEach
-			void mockCommandBodyObject() {
-				var body = buildCommandBody();
-				body.remove(PostfachNachricht.POSTFACH_ADDRESS_FIELD);
-				when(command.getBodyObject()).thenReturn(body);
-			}
-
-			@Test
-			void shouldHandleEmptyPostfachAddress() {
-				var postfachMailToSend = sendPostfachNachricht();
-
-				assertThat(postfachMailToSend.getPostfachAddress()).isNull();
-			}
-		}
-
-		private PostfachNachricht sendPostfachNachricht() {
-			listener.sendPostfachNachricht(new CommandCreatedEvent(command));
-
-			verify(service).sendMail(eq(COMMAND_ID), eq(USER_ID), nachrichtCaptor.capture());
-
-			return nachrichtCaptor.getValue();
-		}
-
-		private Map<String, Object> buildCommandBody() {
-			var map = new HashMap<String, Object>();
-			map.putAll(Map.of(
-					PostfachNachricht.FIELD_VORGANG_ID, "fake",
-					PostfachNachricht.FIELD_POSTFACH_ID, MessageTestFactory.POSTFACH_ID,
-					PostfachNachricht.POSTFACH_ADDRESS_FIELD, //
-					Map.of(PostfachAddress.VERSION_FIELD, PostfachAddressTestFactory.VERSION,
-							PostfachAddress.TYPE_FIELD, PostfachAddressTestFactory.TYPE,
-							PostfachAddress.SERVICEKONTO_TYPE_FIELD, PostfachTestFactory.POSTFACH_TYPE,
-							PostfachAddress.IDENTIFIER_FIELD, //
-							Map.of(PostfachNachricht.FIELD_POSTFACH_ID, PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE)),
-					PostfachNachricht.FIELD_SUBJECT, MessageTestFactory.SUBJECT,
-					PostfachNachricht.FIELD_MAIL_BODY, PostfachNachrichtTestFactory.MAIL_BODY,
-					PostfachNachricht.FIELD_REPLY_OPTION, PostfachNachrichtTestFactory.REPLY_OPTION.name(),
-					PostfachNachricht.FIELD_ATTACHMENTS, PostfachNachrichtTestFactory.ATTACHMENTS));
-			return map;
-		}
-	}
-
-	@DisplayName("Get string list value")
-	@Nested
-	class TestGetStringListValue {
-
-		@Test
-		void shouldReturnMultipleValuesFieldAsStringList() {
-			var commandBodyMap = new HashMap<String, Object>();
-			commandBodyMap.put(PostfachNachricht.FIELD_ATTACHMENTS, List.of("1", "2"));
-
-			var list = listener.getStringListValue(commandBodyMap, PostfachNachricht.FIELD_ATTACHMENTS);
-
-			assertThat(list).contains("1").contains("2");
-		}
-
-		@Test
-		void shouldReturnSingleValueFieldAsStringList() {
-			var commandBodyMap = new HashMap<String, Object>();
-			commandBodyMap.put(PostfachNachricht.FIELD_ATTACHMENTS, List.of("1", "2"));
-
-			var list = listener.getStringListValue(commandBodyMap, PostfachNachricht.FIELD_ATTACHMENTS);
-
-			assertThat(list).contains("1").contains("2");
-		}
-
-		@Test
-		void shouldReturnEmptyFieldValueAsEmptyCollection() {
-			var commandBodyMap = new HashMap<String, Object>();
-			commandBodyMap.put(PostfachNachricht.FIELD_ATTACHMENTS, Collections.emptyList());
-
-			var list = listener.getStringListValue(commandBodyMap, PostfachNachricht.FIELD_ATTACHMENTS);
-
-			assertThat(list).isEmpty();
-		}
-
-		@Test
-		void shouldReturnEmptyFieldAsEmptyCollection() {
-			var commandBodyMap = new HashMap<String, Object>();
-
-			var list = listener.getStringListValue(commandBodyMap, PostfachNachricht.FIELD_ATTACHMENTS);
-
-			assertThat(list).isEmpty();
-		}
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachGrpcServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachGrpcServiceTest.java
deleted file mode 100644
index dec8669386bfc6918fbffbe810845f183e53494b..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachGrpcServiceTest.java
+++ /dev/null
@@ -1,331 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-
-import java.util.stream.Stream;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mapstruct.factory.Mappers;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Captor;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Spy;
-
-import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory;
-import io.grpc.stub.StreamObserver;
-
-class PostfachGrpcServiceTest {
-
-	@InjectMocks
-	private PostfachGrpcService service;
-
-	@Mock
-	private PostfachService postfachService;
-	@Mock
-	private GrpcPostfachNachrichtMapper nachrichtMapper;
-	@Mock
-	private PostfachMapper postfachMapper;
-
-	@Spy
-	private PostfachNachrichtMapper mapper = Mappers.getMapper(PostfachNachrichtMapper.class);
-
-	@Nested
-	class TestSaveNachrichtDraft {
-
-		@Mock
-		private StreamObserver<GrpcSaveNachrichtDraftResponse> responseObserver;
-
-		@BeforeEach
-		void init() {
-			when(nachrichtMapper.mapFromGrpc(any())).thenReturn(PostfachNachrichtTestFactory.create());
-		}
-
-		@Test
-		void shouldCallService() {
-			var nachricht = PostfachNachrichtTestFactory.create();
-			when(nachrichtMapper.mapFromGrpc(any())).thenReturn(nachricht);
-
-			service.saveNachrichtDraft(GrpcSaveNachrichtDraftRequestTestFactory.create(), responseObserver);
-
-			verify(postfachService).saveDraft(MessageTestFactory.VORGANG_ID, nachricht);
-		}
-
-		@Test
-		void shouldSendResponse() {
-			service.saveNachrichtDraft(GrpcSaveNachrichtDraftRequestTestFactory.create(), responseObserver);
-
-			verify(responseObserver).onNext(any());
-		}
-
-		@Test
-		void shouldCompleteCall() {
-			service.saveNachrichtDraft(GrpcSaveNachrichtDraftRequestTestFactory.create(), responseObserver);
-
-			verify(responseObserver).onCompleted();
-		}
-
-	}
-
-	@Nested
-	class TestSendMail {
-
-		@Mock
-		private StreamObserver<GrpcSendPostfachMailResponse> responseObserver;
-
-		@Captor
-		private ArgumentCaptor<PostfachNachricht> mailCaptor;
-
-		@Test
-		void shouldCallPostfachServiceWithCommandId() {
-			service.sendPostfachMail(GrpcSendPostfachMailRequestTestFactory.create(), responseObserver);
-
-			verify(postfachService).sendMail(eq(GrpcSendPostfachMailRequestTestFactory.COMMAND_ID), anyString(), any());
-		}
-
-		@Test
-		void shouldCallServiceWithMail() {
-			service.sendPostfachMail(GrpcSendPostfachMailRequestTestFactory.create(), responseObserver);
-
-			verify(postfachService).sendMail(anyString(), anyString(), mailCaptor.capture());
-			assertThat(mailCaptor.getValue()).usingRecursiveComparison()
-					.ignoringFields(PostfachNachricht.FIELD_MESSAGE_ID, PostfachNachricht.FIELD_CREATED_AT, PostfachNachricht.FIELD_CREATED_BY,
-							PostfachNachricht.FIELD_DIRECTION, PostfachNachricht.FIELD_SENT_SUCCESSFUL, PostfachNachricht.FIELD_SENT_AT,
-							PostfachNachricht.FIELD_MESSAGE_CODE,
-							PostfachNachricht.FIELD_ATTACHMENTS) // TODO remove this for sending attachments
-					.isEqualTo(PostfachNachrichtTestFactory.create());
-		}
-
-		@Test
-		void shouldCallServiceWithUserId() {
-			service.sendPostfachMail(GrpcSendPostfachMailRequestTestFactory.create(), responseObserver);
-
-			verify(postfachService).sendMail(anyString(), eq(GrpcSendPostfachMailRequestTestFactory.USER_ID), any());
-		}
-
-		@Test
-		void shouldSendResponse() {
-			service.sendPostfachMail(GrpcSendPostfachMailRequestTestFactory.create(), responseObserver);
-
-			verify(responseObserver).onNext(notNull());
-		}
-
-		@Test
-		void shouldCompleteCall() {
-			service.sendPostfachMail(GrpcSendPostfachMailRequestTestFactory.create(), responseObserver);
-
-			verify(responseObserver).onCompleted();
-		}
-	}
-
-	@Nested
-	class TestFindPostfachMail {
-
-		private GrpcFindPostfachMailRequest request;
-		@Mock
-		private StreamObserver<GrpcFindPostfachMailResponse> responseObserver;
-
-		@BeforeEach
-		void init() {
-			request = GrpcFindPostfachMailRequest.newBuilder().setNachrichtId(PostfachNachrichtTestFactory.ID).build();
-		}
-
-		@Test
-		void shouldCallService() {
-			service.findPostfachMail(request, responseObserver);
-
-			verify(postfachService).findById(PostfachNachrichtTestFactory.ID);
-		}
-
-		@Test
-		void shouldCallOnNext() {
-			service.findPostfachMail(request, responseObserver);
-
-			verify(responseObserver).onNext(notNull());
-		}
-
-		@Test
-		void shouldCompleteCall() {
-			service.findPostfachMail(request, responseObserver);
-
-			verify(responseObserver).onCompleted();
-		}
-	}
-
-	@Nested
-	class TestFindPostfachMails {
-
-		private static final String VORGANG_ID = "42";
-		private GrpcFindPostfachMailsRequest request;
-
-		@Mock
-		private StreamObserver<GrpcFindPostfachMailsResponse> responseObserver;
-
-		@BeforeEach
-		void init() {
-			request = GrpcFindPostfachMailsRequest.newBuilder().setVorgangId(VORGANG_ID).build();
-		}
-
-		@Test
-		void shouldCallService() {
-			service.findPostfachMails(request, responseObserver);
-
-			verify(postfachService).findByVorgang(VORGANG_ID);
-		}
-
-		@Test
-		void shouldCompleteCall() {
-			service.findPostfachMails(request, responseObserver);
-
-			verify(responseObserver).onCompleted();
-		}
-
-	}
-
-	@Nested
-	class TestResendMail {
-
-		@Mock
-		private StreamObserver<GrpcResendPostfachMailResponse> responseObserver;
-
-		@Test
-		void shouldCallPostfachService() {
-			service.resendPostfachMail(GrpcResendPostfachMailRequestTestFactory.create(), responseObserver);
-
-			verify(postfachService).resendMail(GrpcResendPostfachMailRequestTestFactory.COMMAND_ID, PostfachNachrichtTestFactory.ID);
-		}
-
-		@Test
-		void shouldSendResponse() {
-			service.resendPostfachMail(GrpcResendPostfachMailRequestTestFactory.create(), responseObserver);
-
-			verify(responseObserver).onNext(notNull());
-		}
-
-		@Test
-		void shouldCompleteCall() {
-			service.resendPostfachMail(GrpcResendPostfachMailRequestTestFactory.create(), responseObserver);
-
-			verify(responseObserver).onCompleted();
-		}
-	}
-
-	@Nested
-	class TestIsPostfachConfigured {
-
-		private final GrpcIsPostfachConfiguredRequest request = GrpcIsPostfachConfiguredRequest.newBuilder().build();
-
-		@Mock
-		private StreamObserver<GrpcIsPostfachConfiguredResponse> responseObserver;
-
-		@Test
-		void shouldCallPostfachService() {
-			service.isPostfachConfigured(request, responseObserver);
-
-			verify(postfachService).isPostfachConfigured();
-		}
-
-		@Test
-		void shouldSendResponse() {
-			service.isPostfachConfigured(request, responseObserver);
-
-			verify(responseObserver).onNext(notNull());
-		}
-
-		@Test
-		void shouldCompleteCall() {
-			service.isPostfachConfigured(request, responseObserver);
-
-			verify(responseObserver).onCompleted();
-		}
-	}
-
-	@Nested
-	class TestGetPostfachConfig {
-		private GrpcGetPostfachConfigRequest request = GrpcGetPostfachConfigRequest.newBuilder().build();
-
-		@Mock
-		private StreamObserver<GrpcGetPostfachConfigResponse> responseObserver;
-
-		@Test
-		void shouldSendResponse() {
-			service.getPostfachConfig(request, responseObserver);
-
-			verify(responseObserver).onNext(notNull());
-		}
-
-		@Test
-		void shouldCompleteCall() {
-			service.getPostfachConfig(request, responseObserver);
-
-			verify(responseObserver).onCompleted();
-		}
-
-		@Nested
-		class TestBuildGetPostfachConfigResponse {
-
-			@Test
-			void shouldReturnNotConfigured() {
-				var response = service.buildGetPostfachConfigResponse();
-
-				assertThat(response).isEqualTo(GrpcGetPostfachConfigResponse.newBuilder().setConfigured(false).build());
-			}
-
-			@Nested
-			class TestConfigured {
-
-				@Mock
-				private Postfach postfach;
-				@Mock
-				private GrpcPostfach grpcPostfach;
-
-				@BeforeEach
-				void setup() {
-					when(postfachService.getPostfachs()).thenReturn(Stream.of(postfach));
-					when(postfachMapper.toGrpc(postfach)).thenReturn(grpcPostfach);
-				}
-
-				@Test
-				void shouldReturnPostfachs() {
-					var response = service.buildGetPostfachConfigResponse();
-
-					assertThat(response.getConfigured()).isTrue();
-				}
-
-				@Test
-				void shouldSetPostfach() {
-					var response = service.buildGetPostfachConfigResponse();
-
-					assertThat(response.getPostfachList()).containsExactly(grpcPostfach);
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachMapperTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachMapperTest.java
deleted file mode 100644
index fb1d7eecd2a43dee1fddb15de49a71bb578b7e4a..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachMapperTest.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package de.ozgcloud.nachrichten.postfach;
-
-import static org.assertj.core.api.Assertions.*;
-
-import org.junit.jupiter.api.Test;
-import org.mapstruct.factory.Mappers;
-
-class PostfachMapperTest {
-
-	private PostfachMapper mapper = Mappers.getMapper(PostfachMapper.class);
-
-	@Test
-	void shouldMapType() {
-		var result = mapper.toGrpc(PostfachTestFactory.create());
-
-		assertThat(result.getType()).isEqualTo(PostfachTestFactory.POSTFACH_TYPE);
-	}
-
-	@Test
-	void shouldMapReplyAllowed() {
-		var result = mapper.toGrpc(PostfachTestFactory.create());
-
-		assertThat(result.getReplyAllowed()).isTrue();
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapperTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapperTest.java
deleted file mode 100644
index e0ea9bac95098ccf47917dccb4661338824afe80..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapperTest.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-
-import java.util.Map;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.ValueSource;
-import org.mapstruct.factory.Mappers;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-
-import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper;
-import lombok.SneakyThrows;
-
-class PostfachNachrichtMapperTest {
-
-	@InjectMocks
-	private PostfachNachrichtMapper mapper = Mappers.getMapper(PostfachNachrichtMapper.class);
-	@Mock
-	private GrpcObjectMapper grpcObjectMapper;
-
-	@DisplayName("From map")
-	@Nested
-	class TestFromMap {
-
-		@DisplayName("with existing postfachAddress")
-		@Nested
-		class TestWithExistingPostfachAddress {
-
-			@BeforeEach
-			void mockGrpcObjectMapper() {
-				when(grpcObjectMapper.fromMap(any())).thenReturn(GrpcPostfachAddressTestFactory.createIdentifier());
-			}
-
-			@Test
-			void shouldFillGrpcMail() {
-				var grpcMail = fromMap(PostfachNachrichtTestFactory.asMap());
-
-				assertThat(grpcMail).usingRecursiveComparison().isEqualTo(GrpcPostfachMailTestFactory.create());
-			}
-
-			@Test
-			void shouldCallGrpcObjectMapper() {
-				fromMap(getMapWithoutProperty(PostfachNachricht.FIELD_SENT_SUCCESSFUL));
-
-				verify(grpcObjectMapper).fromMap(any());
-			}
-
-			@Test
-			void shouldIgnoreSentSuccessful() {
-				var grpcMail = fromMap(getMapWithoutProperty(PostfachNachricht.FIELD_SENT_SUCCESSFUL));
-
-				assertThat(grpcMail.getSentSuccessful()).isFalse();
-			}
-
-			@Test
-			void shouldIgnoreSentAt() {
-				var grpcMail = fromMap(getMapWithoutProperty(PostfachNachricht.FIELD_SENT_AT));
-
-				assertThat(grpcMail.getSentAt()).isEmpty();
-			}
-
-			@ParameterizedTest
-			@ValueSource(strings = PostfachNachricht.FIELD_POSTFACH_ID)
-			void shouldMapDefaultOnNonExistingValues(String fieldName) {
-				var mapped = fromMap(getMapWithoutProperty(fieldName));
-
-				var fieldValue = getAttributeFromGrpcObject(mapped, fieldName);
-				assertThat((String) fieldValue).isEmpty();
-			}
-		}
-
-		@DisplayName("with missing postfachAddress")
-		@Nested
-		class TestWithMissinPostfachAddress {
-
-			@Test
-			void shouldNotThrowException() {
-				assertDoesNotThrow(() -> fromMap(getMapWithoutProperty(PostfachNachricht.POSTFACH_ADDRESS_FIELD)));
-			}
-		}
-
-		private GrpcPostfachMail fromMap(Map<String, Object> map) {
-			return mapper.fromMap(map);
-		}
-	}
-
-	@DisplayName("From map to postfachMail")
-	@Nested
-	class TestFromMapToPostfachMail {
-
-		@Test
-		void shouldMap() {
-			var mail = fromMapToPostfachMail(PostfachNachrichtTestFactory.asMap());
-
-			assertThat(mail).usingRecursiveComparison().isEqualTo(PostfachNachrichtTestFactory.create());
-		}
-
-		@DisplayName("with missing postfachAddress")
-		@Nested
-		class TestWithMissinPostfachAddress {
-
-			@Test
-			void shouldMapAsNull() {
-				var mail = fromMapToPostfachMail(getMapWithoutProperty(PostfachNachricht.POSTFACH_ADDRESS_FIELD));
-
-				assertThat(mail.getPostfachAddress()).isNull();
-			}
-
-			@Test
-			void shouldNotThrowExceptionOnMissingPostfachAddress() {
-				assertDoesNotThrow(() -> fromMapToPostfachMail(getMapWithoutProperty(PostfachNachricht.POSTFACH_ADDRESS_FIELD)));
-			}
-		}
-
-		@ParameterizedTest
-		@ValueSource(strings = PostfachNachricht.FIELD_POSTFACH_ID)
-		void shouldMapDefaultOnNonExistingValues(String fieldName) {
-			var mapped = fromMapToPostfachMail(getMapWithoutProperty(fieldName));
-
-			var fieldValue = getAttributeFromObject(mapped, fieldName);
-			assertThat((String) fieldValue).isEmpty();
-		}
-
-		private PostfachNachricht fromMapToPostfachMail(Map<String, Object> map) {
-			return mapper.fromMapToPostfachMail(map);
-		}
-	}
-
-	@DisplayName("From grpc mail")
-	@Nested
-	class TestFromGrpcMail {
-
-		@Test
-		void shouldMapFields() {
-			var mapped = fromGrpcMail(GrpcPostfachMailTestFactory.create());
-
-			assertThat(mapped).usingRecursiveComparison()
-					.ignoringFields("createdAt", "createdBy", "direction", "messageId", "sentAt", "sentSuccessful", "memoizedHashCode")
-					.isEqualTo(PostfachNachrichtTestFactory.create());
-		}
-
-		@Test
-		void shouldHandleEmptyPostfachId() {
-			var postfachMailWithoutPostfachId = GrpcPostfachMailTestFactory.createBuilder().clearPostfachId().build();
-
-			assertDoesNotThrow(() -> fromGrpcMail(postfachMailWithoutPostfachId));
-		}
-
-		private PostfachNachricht fromGrpcMail(GrpcPostfachMail postfachMail) {
-			return mapper.fromGrpcMail(postfachMail);
-		}
-	}
-
-	private Map<String, Object> getMapWithoutProperty(String entryKey) {
-		var map = PostfachNachrichtTestFactory.asMap();
-		map.remove(entryKey);
-		return map;
-	}
-
-	private Object getAttributeFromGrpcObject(Object obj, String name) {
-		return getAttributeFrom(obj, name + "_");
-	}
-
-	@SneakyThrows
-	private Object getAttributeFromObject(Object obj, String name) {
-		return getAttributeFrom(obj, name);
-	}
-
-	@SneakyThrows
-	private Object getAttributeFrom(Object obj, String name) {
-		var clazz = obj.getClass();
-		var field = clazz.getDeclaredField(name);
-		field.setAccessible(true);
-
-		return field.get(obj);
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtTestFactory.java
deleted file mode 100644
index 23276159b678b7b0501794021e79c7fbe2241283..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtTestFactory.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach;
-
-import static de.ozgcloud.nachrichten.postfach.PostfachNachricht.ReplyOption.*;
-import static de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory.*;
-
-import java.time.ZonedDateTime;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-import de.ozgcloud.nachrichten.postfach.PostfachNachricht.Direction;
-
-public class PostfachNachrichtTestFactory {
-
-	public static final String ID = UUID.randomUUID().toString();
-	public static final String CREATED_AT_STR = "2020-04-01T10:30:10Z";
-	public static final ZonedDateTime CREATED_AT = ZonedDateTime.parse(CREATED_AT_STR);
-	public static final String CREATED_BY = UUID.randomUUID().toString();
-	public static final String MAIL_BODY = "Body\nString";
-
-	public static final String SENT_AT_STR = "2020-04-01T11:30:10Z";
-	public static final ZonedDateTime SENT_AT = ZonedDateTime.parse(SENT_AT_STR);
-	public static final boolean SENT_SUCCESSFUL = true;
-	public static final String MESSAGE_CODE = PostfachMessageCode.SEND_SUCCESSFUL_MESSAGE_CODE.getMessageCode();
-	public static final PostfachNachricht.ReplyOption REPLY_OPTION = MANDATORY;
-
-	public static final PostfachNachricht.Direction DIRECTION = Direction.IN;
-
-	public static final String ATTACHMENT_FILE_ID = "21";
-	public static final List<String> ATTACHMENTS = List.of(ATTACHMENT_FILE_ID);
-
-	public static PostfachNachricht create() {
-		return createBuilder().build();
-	}
-
-	public static PostfachNachricht.PostfachNachrichtBuilder createBuilder() {
-		return PostfachNachricht.builder()
-				.id(ID)
-				.postfachId(POSTFACH_ID)
-				.postfachAddress(PostfachAddressTestFactory.create())
-				.messageId(MESSAGE_ID)
-				.vorgangId(VORGANG_ID)
-				.direction(DIRECTION)
-				.createdAt(CREATED_AT)
-				.createdBy(CREATED_BY)
-				.sentAt(SENT_AT)
-				.sentSuccessful(SENT_SUCCESSFUL)
-				.messageCode(MESSAGE_CODE)
-				.replyOption(REPLY_OPTION)
-				.subject(SUBJECT)
-				.mailBody(MAIL_BODY)
-				.attachments(ATTACHMENTS);
-	}
-
-	public static Map<String, Object> asMap() {
-		var map = new HashMap<String, Object>();
-		map.put(PostfachNachricht.FIELD_ID, ID);
-		map.put(PostfachNachricht.FIELD_POSTFACH_ID, POSTFACH_ID);
-		map.put(PostfachNachricht.POSTFACH_ADDRESS_FIELD, getPostfachAddressAsMap());
-		map.put(PostfachNachricht.FIELD_MESSAGE_ID, MESSAGE_ID);
-		map.put(PostfachNachricht.FIELD_VORGANG_ID, VORGANG_ID);
-		map.put(PostfachNachricht.FIELD_DIRECTION, DIRECTION.name());
-		map.put(PostfachNachricht.FIELD_CREATED_AT, CREATED_AT_STR);
-		map.put(PostfachNachricht.FIELD_CREATED_BY, CREATED_BY);
-		map.put(PostfachNachricht.FIELD_SENT_AT, SENT_AT_STR);
-		map.put(PostfachNachricht.FIELD_SENT_SUCCESSFUL, SENT_SUCCESSFUL);
-		map.put(PostfachNachricht.FIELD_MESSAGE_CODE, MESSAGE_CODE);
-		map.put(PostfachNachricht.FIELD_REPLY_OPTION, REPLY_OPTION.name());
-		map.put(PostfachNachricht.FIELD_SUBJECT, SUBJECT);
-		map.put(PostfachNachricht.FIELD_MAIL_BODY, MAIL_BODY);
-		map.put(PostfachNachricht.FIELD_ATTACHMENTS, ATTACHMENTS);
-		return map;
-	}
-
-	private static Map<String, Object> getPostfachAddressAsMap() {
-		return Map.of(PostfachAddress.TYPE_FIELD, PostfachAddressTestFactory.TYPE,
-				PostfachAddress.VERSION_FIELD, PostfachAddressTestFactory.VERSION,
-				PostfachAddress.IDENTIFIER_FIELD, getPostfachAddressIdentifierAsMap(),
-				PostfachAddress.SERVICEKONTO_TYPE_FIELD, PostfachTestFactory.POSTFACH_TYPE);
-	}
-
-	private static Map<String, Object> getPostfachAddressIdentifierAsMap() {
-		return Map.of(PostfachNachricht.FIELD_POSTFACH_ID, PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE);
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachSchedulerTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachSchedulerTest.java
deleted file mode 100644
index af624e27e141f71b36fe0458f58cb19ee58cdd33..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachSchedulerTest.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach;
-
-import static org.mockito.Mockito.*;
-
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-
-public class PostfachSchedulerTest {
-
-	@InjectMocks // NOSONAR
-	private PostfachScheduler scheduler;
-	@Mock
-	private PostfachService service;
-
-	@Nested
-	class TestRunGetMessagesTask {
-
-		@Test
-		void shouldCallService() {
-			scheduler.runGetMessagesTask();
-
-			verify(service).fetchAndPersistReplies();
-		}
-
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachServiceTest.java
deleted file mode 100644
index 495a14faa0c0a0889dae79daf0d11a6703860748..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachServiceTest.java
+++ /dev/null
@@ -1,815 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-
-import java.time.ZonedDateTime;
-import java.time.temporal.ChronoUnit;
-import java.util.Optional;
-import java.util.UUID;
-import java.util.stream.Stream;
-
-import org.apache.logging.log4j.Logger;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.EnumSource;
-import org.mapstruct.factory.Mappers;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Captor;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Spy;
-import org.springframework.boot.logging.LogLevel;
-import org.springframework.context.ApplicationEventPublisher;
-import org.springframework.test.util.ReflectionTestUtils;
-
-import de.ozgcloud.nachrichten.antragraum.AntragraumService;
-import de.ozgcloud.nachrichten.attributes.ClientAttributeService;
-import de.ozgcloud.nachrichten.info.InfoManagerService;
-import de.ozgcloud.nachrichten.postfach.PostfachNachricht.Direction;
-import de.ozgcloud.nachrichten.postfach.PostfachNachricht.ReplyOption;
-import de.ozgcloud.nachrichten.postfach.osi.MessageAttachmentService;
-import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory;
-import de.ozgcloud.nachrichten.postfach.osi.OsiPostfachServerProcessException;
-import de.ozgcloud.nachrichten.postfach.osi.OsiPostfachServerProcessExceptionTestFactory;
-import de.ozgcloud.vorgang.callcontext.CallContextUserTestFactory;
-import de.ozgcloud.vorgang.callcontext.CurrentUserService;
-import nl.altindag.log.LogCaptor;
-
-class PostfachServiceTest {
-
-	@Spy
-	@InjectMocks
-	private PostfachService service;
-	@Mock
-	private PostfachRemoteService postfachRemoteService;
-
-	@Mock
-	private PersistPostfachNachrichtService persistingService;
-	@Spy
-	private PostfachNachrichtMapper mapper = Mappers.getMapper(PostfachNachrichtMapper.class);
-
-	@Mock
-	private ClientAttributeService clientAttributeService;
-	@Mock
-	private MessageAttachmentService messageAttachmentService;
-	@Mock
-	private ApplicationEventPublisher publisher;
-
-	@Mock
-	private CurrentUserService userService;
-	@Spy
-	private Optional<AntragraumService> antragsraumService = Optional.of(mock(AntragraumService.class));
-	@Spy
-	private Optional<InfoManagerService> infomanagerService = Optional.of(mock(InfoManagerService.class));
-
-	static final String COMMAND_ID = UUID.randomUUID().toString();
-	static final String USER_ID = UUID.randomUUID().toString();
-
-	@Nested
-	class TestSaveDraft {
-
-		@Captor
-		private ArgumentCaptor<Optional<String>> userIdCaptor;
-		@Captor
-		private ArgumentCaptor<PostfachNachricht> nachrichtCaptor;
-
-		@BeforeEach
-		void init() {
-			doNothing().when(service).persistMail(any(), any());
-
-			when(userService.getUser()).thenReturn(CallContextUserTestFactory.create());
-		}
-
-		@Test
-		void shouldUseUserIdFromContext() {
-			service.saveDraft(MessageTestFactory.VORGANG_ID, PostfachNachrichtTestFactory.create());
-
-			verify(service).persistMail(userIdCaptor.capture(), any());
-			assertThat(userIdCaptor.getValue()).contains(CallContextUserTestFactory.ID);
-		}
-
-		@Test
-		void shouldPersistNachricht() {
-			service.saveDraft(MessageTestFactory.VORGANG_ID, PostfachNachrichtTestFactory.create());
-
-			verify(service).persistMail(any(), any());
-		}
-
-		@Test
-		void shouldAddVorgangId() {
-			service.saveDraft(MessageTestFactory.VORGANG_ID, PostfachNachrichtTestFactory.createBuilder().vorgangId(null).build());
-
-			verify(service).persistMail(any(), nachrichtCaptor.capture());
-			assertThat(nachrichtCaptor.getValue().getVorgangId()).isEqualTo(MessageTestFactory.VORGANG_ID);
-		}
-	}
-
-	@Nested
-	class TestSendMail {
-
-		@Test
-		void shouldCallDoSendMail() {
-			when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE);
-			var mail = PostfachNachrichtTestFactory.create();
-
-			service.sendMail(COMMAND_ID, USER_ID, mail);
-
-			verify(service).doSendMail(mail);
-		}
-
-		@Test
-		void shouldCallPersistSentMail() {
-			when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE);
-			var mail = PostfachNachrichtTestFactory.create();
-			doReturn(mail).when(service).addMailSentInformation(any(PostfachNachricht.class), any(SendPostfachNachrichtResponse.class));
-
-			service.sendMail(COMMAND_ID, USER_ID, PostfachNachrichtTestFactory.create());
-
-			verify(service).persistSentMail(USER_ID, mail);
-		}
-
-		@Test
-		void shouldAddMailSentInformation() {
-			var postfachMail = service.addMailSentInformation(PostfachNachrichtTestFactory.createBuilder().sentAt(null).sentSuccessful(null).build(),
-					SendPostfachNachrichtResponseTestFactory.create());
-
-			assertThat(postfachMail.getSentAt()).isNotNull();
-			assertThat(postfachMail.getSentSuccessful()).isEqualTo(SendPostfachNachrichtResponseTestFactory.SENT_SUCCESSFUL);
-			assertThat(postfachMail.getMessageCode()).isEqualTo(SendPostfachNachrichtResponseTestFactory.MESSAGE_CODE.getMessageCode());
-		}
-
-		@Test
-		void shouldHandleSendMail() {
-			when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE);
-			var mail = PostfachNachrichtTestFactory.create();
-			service.sendMail(COMMAND_ID, USER_ID, mail);
-
-			verify(service).handleSendMail(COMMAND_ID, mail);
-		}
-
-		@Nested
-		class TestPersistSentMail {
-
-			@Captor
-			private ArgumentCaptor<PostfachNachricht> mailCaptor;
-
-			@Test
-			void shouldCallPersistingService() {
-				var mail = PostfachNachrichtTestFactory.create();
-
-				service.persistSentMail(USER_ID, mail);
-
-				verify(persistingService).persistNachricht(any(), notNull());
-			}
-
-			@Test
-			void shouldSetDirectionToIN() {
-				service.persistSentMail(USER_ID, PostfachNachrichtTestFactory.createBuilder().direction(null).build());
-
-				verify(persistingService).persistNachricht(any(), mailCaptor.capture());
-				assertThat(mailCaptor.getValue().getDirection()).isEqualTo(Direction.OUT);
-			}
-
-			@Test
-			void shouldSetCreatedAt() {
-				service.persistSentMail(USER_ID, PostfachNachrichtTestFactory.createBuilder().createdAt(null).build());
-
-				verify(persistingService).persistNachricht(any(), mailCaptor.capture());
-				assertThat(mailCaptor.getValue().getCreatedAt()).isCloseTo(ZonedDateTime.now(), within(2, ChronoUnit.SECONDS));
-			}
-
-			@Test
-			void shouldSetCreatedBy() {
-				service.persistSentMail(USER_ID, PostfachNachrichtTestFactory.createBuilder().createdBy(null).build());
-
-				verify(persistingService).persistNachricht(any(), mailCaptor.capture());
-				assertThat(mailCaptor.getValue().getCreatedBy()).isEqualTo(USER_ID);
-			}
-
-			@Test
-			void shouldSetUserId() {
-				var mail = PostfachNachrichtTestFactory.create();
-
-				service.persistSentMail(USER_ID, mail);
-
-				verify(persistingService).persistNachricht(eq(Optional.of(USER_ID)), any());
-			}
-
-			@Test
-			void shouldSetClientAttribute() {
-				service.persistSentMail(USER_ID, PostfachNachrichtTestFactory.create());
-
-				verify(clientAttributeService).setHasPostfachNachricht(MessageTestFactory.VORGANG_ID);
-			}
-
-			@Test
-			void shouldNOTSetNewNachricht() {
-				service.persistSentMail(USER_ID, PostfachNachrichtTestFactory.create());
-
-				verify(clientAttributeService, never()).setHasNewPostfachNachricht(any());
-			}
-		}
-
-		@Nested
-		class TestProcessForAntragsraum {
-
-			@Mock
-			private PostfachNachricht modifiedMail;
-
-			@Test
-			void shouldReturnEmpty() {
-				doReturn(false).when(service).isPostfachWithAntragsraum(any());
-
-				var result = service.processForAntragsraum(PostfachNachrichtTestFactory.create());
-
-				assertThat(result).isEmpty();
-			}
-
-			@Test
-			void shouldCallNotifyAntragsraum() {
-				doReturn(true).when(service).isPostfachWithAntragsraum(any());
-				var mail = PostfachNachrichtTestFactory.create();
-
-				service.processForAntragsraum(mail);
-
-				verify(infomanagerService.get()).notifyInfoManager(mail);
-			}
-
-			@Test
-			void shouldReturnAdjustedMail() {
-				doReturn(true).when(service).isPostfachWithAntragsraum(any());
-				doReturn(Optional.of(modifiedMail)).when(service).adjustMail(any());
-
-				var result = service.processForAntragsraum(PostfachNachrichtTestFactory.create());
-
-				assertThat(result).contains(modifiedMail);
-			}
-
-			@DisplayName("Is notify antragsraum")
-			@Nested
-			class TestIsNotifyAntragsraum {
-
-				@DisplayName("should return true if")
-				@ParameterizedTest(name = "replyOption is {0}")
-				@EnumSource(value = ReplyOption.class, names = { "FORBIDDEN" }, mode = EnumSource.Mode.EXCLUDE)
-				void shouldConfirm(ReplyOption replyOption) {
-					doReturn(true).when(service).isPostfachWithAntragsraum(any());
-
-					var result = service.isNotifyAntragsraum(replyOption);
-
-					assertThat(result).isTrue();
-				}
-
-				@DisplayName("should return false if reply is forbidden")
-				@Test
-				void shouldDeclineIfForbidden() {
-					var result = service.isNotifyAntragsraum(ReplyOption.FORBIDDEN);
-
-					assertThat(result).isFalse();
-				}
-
-				@DisplayName("should return false if antragsraum is not configured")
-				@Test
-				void shouldDeclineIfNotConfigured() {
-					doReturn(false).when(service).isPostfachWithAntragsraum(any());
-
-					var result = service.isNotifyAntragsraum(ReplyOption.POSSIBLE);
-
-					assertThat(result).isFalse();
-				}
-			}
-
-			@Nested
-			class TestAdjustMail {
-
-				@Mock
-				private PostfachNachricht mail;
-
-				@Nested
-				class TestReplaceBody {
-
-					@Test
-					void shouldReturnEmptyIfNoAntragsraum() {
-						ReflectionTestUtils.setField(service, "antragraumService", Optional.empty());
-
-						var result = adjustMail();
-
-						assertThat(result).isEmpty();
-					}
-
-					@Test
-					void shouldAdjustMailBody() {
-						when(mail.toBuilder()).thenReturn(PostfachNachrichtTestFactory.createBuilder());
-						var expectedMailBody = "Antragsraum Text";
-						when(antragsraumService.get().getUserNotificationText()).thenReturn(expectedMailBody);
-
-						var result = adjustMail();
-
-						assertThat(result).isPresent().get().extracting(PostfachNachricht::getMailBody).isEqualTo(expectedMailBody);
-					}
-				}
-
-				private Optional<PostfachNachricht> adjustMail() {
-					return service.adjustMail(mail);
-				}
-			}
-
-		}
-	}
-
-	@Nested
-	class TestFindById {
-		@Test
-		void shouldCallPersistingService() {
-			service.findById(PostfachNachrichtTestFactory.ID);
-
-			verify(persistingService).findById(PostfachNachrichtTestFactory.ID);
-		}
-	}
-
-	@Nested
-	class TestFindByVorgang {
-
-		private static final String VORGANG_ID = UUID.randomUUID().toString();
-
-		@Test
-		void shouldCallPersistingService() {
-			service.findByVorgang(VORGANG_ID);
-
-			verify(persistingService).findByVorgangAsMap(VORGANG_ID);
-		}
-	}
-
-	@Nested
-	class TestFetchAndPersistReplies {
-
-		private static final PostfachNachricht nachricht = PostfachNachrichtTestFactory.create();
-
-		@BeforeEach
-		void initTest() {
-			lenient().when(postfachRemoteService.getAllMessages()).thenReturn(Stream.of(nachricht));
-		}
-
-		@Test
-		void shouldCallGetAllMessages() {
-			service.fetchAndPersistReplies();
-
-			verify(postfachRemoteService).getAllMessages();
-		}
-
-		@Test
-		void shouldCallPersistingService() {
-			service.fetchAndPersistReplies();
-
-			verify(persistingService).persistNachricht(eq(Optional.empty()), any());
-		}
-
-		@Test
-		void shouldCallDelete() {
-			service.fetchAndPersistReplies();
-
-			verify(postfachRemoteService).deleteMessage(MessageTestFactory.MESSAGE_ID);
-		}
-
-		@Test
-		void shouldSetNewPostfachNachricht() {
-			service.fetchAndPersistReplies();
-
-			verify(clientAttributeService).setHasNewPostfachNachricht(MessageTestFactory.VORGANG_ID);
-		}
-
-		@Test
-		void shouldCallClientAttributeService() {
-			service.fetchAndPersistReplies();
-
-			verify(clientAttributeService).setHasNewPostfachNachricht(MessageTestFactory.VORGANG_ID);
-		}
-
-		@Test
-		void shouldThrowNotConfiguredException() {
-			doReturn(false).when(service).isPostfachConfigured();
-
-			assertThatExceptionOfType(NotConfiguredException.class).isThrownBy(() -> service.fetchAndPersistReplies());
-			verify(postfachRemoteService, never()).getAllMessages();
-		}
-	}
-
-	@Nested
-	class TestPeristMail {
-		@Test
-		void shouldPersistMail() {
-			PostfachNachricht mail = PostfachNachrichtTestFactory.create();
-
-			service.persistMail(Optional.of(USER_ID), mail);
-
-			verify(persistingService).persistNachricht(eq(Optional.of(USER_ID)), same(mail));
-		}
-
-		@Test
-		void shouldSetHasPostfachNachricht() {
-			var mail = PostfachNachrichtTestFactory.create();
-
-			service.persistMail(Optional.of(USER_ID), mail);
-
-			verify(clientAttributeService).setHasPostfachNachricht(MessageTestFactory.VORGANG_ID);
-		}
-
-		@Test
-		@DisplayName("should NOT set hasPostfachNachricht if Nachricht is sent from system")
-		void shouldNOTSetHasNachrichtForSystemNachricht() {
-			var mail = PostfachNachrichtTestFactory.createBuilder().createdBy("system-123").build();
-
-			service.persistMail(Optional.of(USER_ID), mail);
-
-			verify(clientAttributeService, never()).setHasPostfachNachricht(MessageTestFactory.VORGANG_ID);
-		}
-	}
-
-	@Nested
-	class TestResendPostfachMail {
-
-		static final String COMMAND_ID = UUID.randomUUID().toString();
-		static final PostfachNachricht mail = PostfachNachrichtTestFactory.create();
-
-		@BeforeEach
-		void mockService() {
-			when(persistingService.getById(anyString())).thenReturn(PostfachNachrichtTestFactory.asMap());
-			doReturn(mail).when(mapper).fromMapToPostfachMail(anyMap());
-			when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE);
-		}
-
-		@Test
-		void shouldCallPersistingServiceGetById() {
-			service.resendMail(COMMAND_ID, PostfachNachrichtTestFactory.ID);
-
-			verify(persistingService).getById(PostfachNachrichtTestFactory.ID);
-		}
-
-		@Test
-		void shouldMapFromMapToPostfachMail() {
-			service.resendMail(COMMAND_ID, PostfachNachrichtTestFactory.ID);
-
-			verify(mapper).fromMapToPostfachMail(PostfachNachrichtTestFactory.asMap());
-		}
-
-		@Test
-		void shouldSendMail() {
-			service.resendMail(COMMAND_ID, PostfachNachrichtTestFactory.ID);
-
-			verify(postfachRemoteService).sendMessage(any(PostfachNachricht.class));
-		}
-
-		@Test
-		void shouldPatchMail() {
-			service.resendMail(COMMAND_ID, PostfachNachrichtTestFactory.ID);
-
-			verify(persistingService).patch(anyString(), anyMap());
-		}
-
-		@Test
-		void shouldHandleSentMail() {
-			service.resendMail(COMMAND_ID, PostfachNachrichtTestFactory.ID);
-
-			verify(service).handleSendMail(COMMAND_ID, mail);
-		}
-	}
-
-	@Nested
-	class TestCreateResendPatchMap {
-
-		@Test
-		void shouldContainsSentAt() {
-			var map = service.createResendPatchMap(SendPostfachNachrichtResponseTestFactory.create());
-
-			assertThat(map).containsKey(PostfachNachricht.FIELD_SENT_AT);
-			assertThat(ZonedDateTime.parse(map.get(PostfachNachricht.FIELD_SENT_AT).toString())).isCloseTo(ZonedDateTime.now(),
-					within(2, ChronoUnit.SECONDS));
-		}
-
-		@Test
-		void shouldContainsSentSuccessful() {
-			var map = service.createResendPatchMap(SendPostfachNachrichtResponseTestFactory.create());
-
-			assertThat(map).containsEntry(PostfachNachricht.FIELD_SENT_SUCCESSFUL, true);
-		}
-
-		@Test
-		void shouldContainsMessageCode() {
-			var map = service.createResendPatchMap(SendPostfachNachrichtResponseTestFactory.create());
-
-			assertThat(map).containsEntry(PostfachNachricht.FIELD_MESSAGE_CODE,
-					SendPostfachNachrichtResponseTestFactory.MESSAGE_CODE.getMessageCode());
-		}
-	}
-
-	@DisplayName("Handle send mail")
-	@Nested
-	class TestHandleSendMail {
-
-		final String COMMAND_ID = UUID.randomUUID().toString();
-		final PostfachNachricht mail = PostfachNachrichtTestFactory.create();
-
-		@Test
-		void shouldDoSendMail() {
-			when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE);
-
-			service.handleSendMail(COMMAND_ID, mail);
-
-			verify(service).doSendMail(mail);
-		}
-
-		@Nested
-		class TestSentSuccess {
-
-			@Captor
-			private ArgumentCaptor<PostfachMailSentEvent> eventCaptor;
-
-			@Mock
-			private PostfachNachricht modifiedMail;
-
-			@Test
-			void shouldDoSendMail() {
-				when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE);
-
-				service.handleSendMail(COMMAND_ID, mail);
-
-				verify(service).doSendMail(mail);
-			}
-
-			@Test
-			void shouldPublishEvent() {
-				when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE);
-
-				service.handleSendMail(COMMAND_ID, mail);
-
-				verify(publisher).publishEvent(eventCaptor.capture());
-				assertThat(eventCaptor.getValue().getSource()).isEqualTo(COMMAND_ID);
-			}
-
-			@Test
-			void shouldReturnResponse() {
-				when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE);
-
-				var response = service.handleSendMail(COMMAND_ID, mail);
-
-				assertThat(response.isSentSuccessful()).isTrue();
-				assertThat(response.getMessageCode()).isEqualTo(PostfachMessageCode.SEND_SUCCESSFUL_MESSAGE_CODE);
-			}
-
-			@Test
-			void shouldSendProcessedPostfachNachricht() {
-				doReturn(Optional.of(modifiedMail)).when(service).processForAntragsraum(any());
-
-				service.handleSendMail(COMMAND_ID, mail);
-
-				verify(service).doSendMail(modifiedMail);
-			}
-
-		}
-
-		@DisplayName("receive")
-		@Nested
-		class TestSentFailed {
-
-			@Captor
-			private ArgumentCaptor<PostfachMailSentFailedEvent> eventFailedCaptor;
-
-			@DisplayName("OsiPostfachException")
-			@Nested
-			class TestOnOsiPostfachException {
-
-				private final static String MESSAGE = "Osi Postfach throws an exception.";
-
-				@BeforeEach
-				void mockService() {
-					when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE);
-					doThrow(new PostfachException(MESSAGE, PostfachMessageCode.SEND_SUCCESSFUL_MESSAGE_CODE)).when(postfachRemoteService)
-							.sendMessage(any());
-				}
-
-				@Test
-				void shouldPublishEvent() {
-					service.handleSendMail(COMMAND_ID, mail);
-
-					verify(publisher).publishEvent(eventFailedCaptor.capture());
-					assertThat(eventFailedCaptor.getValue().getSource()).isEqualTo(COMMAND_ID);
-					assertThat(eventFailedCaptor.getValue().getErrorMessage()).startsWith(MESSAGE);
-				}
-
-				@Test
-				void shouldLogError() {
-					var logCaptor = LogCaptor.forClass(PostfachService.class);
-
-					service.handleSendMail(COMMAND_ID, mail);
-
-					verify(service).proceedWithErrorException(eq(COMMAND_ID), any(PostfachException.class));
-					assertThat(logCaptor.getLogEvents().get(0).getLevel()).isEqualTo(LogLevel.ERROR.name());
-					assertThat(logCaptor.getLogEvents().get(0).getMessage()).startsWith(MESSAGE);
-				}
-
-				@Test
-				void shouldReturnResponse() {
-					var response = service.handleSendMail(COMMAND_ID, mail);
-
-					assertThat(response.isSentSuccessful()).isFalse();
-					assertThat(response.getMessageCode()).isEqualTo(PostfachMessageCode.SEND_SUCCESSFUL_MESSAGE_CODE);
-				}
-			}
-
-			@DisplayName("OsiPostfachServerProcessException")
-			@Nested
-			class TestOsiPostfachServerProcessException {
-
-				private final static String MESSAGE = "Postfach server returned false";
-
-				@Mock
-				private Logger logger;
-
-				@BeforeEach
-				void mockService() {
-					doThrow(OsiPostfachServerProcessExceptionTestFactory.create()).when(postfachRemoteService).sendMessage(any());
-					when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE);
-				}
-
-				@Test
-				void shouldPublishEvent() {
-					service.handleSendMail(COMMAND_ID, mail);
-
-					verify(publisher).publishEvent(eventFailedCaptor.capture());
-					assertThat(eventFailedCaptor.getValue().getSource()).isEqualTo(COMMAND_ID);
-					assertThat(eventFailedCaptor.getValue().getErrorMessage()).startsWith(MESSAGE);
-				}
-
-				@Test
-				void shouldLogWarning() {
-					var logCaptor = LogCaptor.forClass(PostfachService.class);
-
-					service.handleSendMail(COMMAND_ID, mail);
-
-					verify(service).proceedwithWarnException(eq(COMMAND_ID), any(OsiPostfachServerProcessException.class));
-					assertThat(logCaptor.getLogEvents().get(0).getLevel()).isEqualTo(LogLevel.WARN.name());
-					assertThat(logCaptor.getLogEvents().get(0).getMessage()).startsWith(MESSAGE);
-				}
-
-				@Test
-				void shouldReturnResponse() {
-					var response = service.handleSendMail(COMMAND_ID, mail);
-
-					assertThat(response.isSentSuccessful()).isFalse();
-					assertThat(response.getMessageCode()).isEqualTo(PostfachMessageCode.PROCESS_FAILED_MESSAGE_CODE);
-				}
-			}
-		}
-
-	}
-
-	@Nested
-	class TestDoSendMail {
-		@Test
-		void shouldCallPostfachRemoteService() {
-			service.doSendMail(PostfachNachrichtTestFactory.create());
-
-			verify(postfachRemoteService).sendMessage(any());
-		}
-
-		@Nested
-		class WithoutRemoteService {
-			@InjectMocks
-			private PostfachService service;
-
-			@Test
-			void shouldThrowNotConfiguredException() {
-				var nachricht = PostfachNachrichtTestFactory.create();
-
-				assertThatExceptionOfType(NotConfiguredException.class).isThrownBy(() -> service.doSendMail(nachricht));
-
-				verify(postfachRemoteService, never()).sendMessage(any());
-			}
-		}
-
-	}
-
-	@Nested
-	class TestIsPostfachConfigured {
-
-		@Test
-		void shouldReturnTrue() {
-			assertThat(service.isPostfachConfigured()).isTrue();
-		}
-	}
-
-	@Nested
-	class TestGetPostfachs {
-
-		private Postfach postfach = PostfachTestFactory.create();
-
-		@Test
-		void shouldCallBuildPostfach() {
-			when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE);
-
-			service.getPostfachs();
-
-			verify(service).buildPostfach(postfachRemoteService);
-		}
-
-		@Test
-		void shouldReturnPostfachs() {
-			doReturn(postfach).when(service).buildPostfach(any());
-
-			var result = service.getPostfachs();
-
-			assertThat(result).containsOnly(postfach);
-		}
-
-		@Test
-		void shouldReturnEmptyStream() {
-			doReturn(false).when(service).isPostfachConfigured();
-
-			var result = service.getPostfachs();
-
-			assertThat(result).isEmpty();
-		}
-
-		@Nested
-		class TestBuildPostfach {
-
-			@Test
-			void shouldSetPostfachType() {
-				when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE);
-
-				var result = service.buildPostfach(postfachRemoteService);
-
-				assertThat(result.getType()).isEqualTo(PostfachTestFactory.POSTFACH_TYPE);
-			}
-
-			@Test
-			void shouldSetIsReplyAllowed() {
-				doReturn(true).when(service).isReplyAllowed(any());
-
-				var result = service.buildPostfach(postfachRemoteService);
-
-				assertThat(result.isReplyAllowed()).isTrue();
-			}
-		}
-
-		@Nested
-		class TestIsReplyAllowed {
-
-			@Test
-			void shouldAllowWithAntragsraum() {
-				doReturn(true).when(service).isPostfachWithAntragsraum(postfachRemoteService);
-
-				var result = service.isReplyAllowed(postfachRemoteService);
-
-				assertThat(result).isTrue();
-			}
-
-			@Test
-			void shouldAllowWithPostfach() {
-				doReturn(false).when(service).isPostfachWithAntragsraum(postfachRemoteService);
-				when(postfachRemoteService.isReplyAllowed()).thenReturn(true);
-
-				var result = service.isReplyAllowed(postfachRemoteService);
-
-				assertThat(result).isTrue();
-			}
-
-			@Test
-			void shouldNotAllow() {
-				doReturn(false).when(service).isPostfachWithAntragsraum(postfachRemoteService);
-
-				var result = service.isReplyAllowed(postfachRemoteService);
-
-				assertThat(result).isFalse();
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachTestFactory.java
deleted file mode 100644
index 866a3700b3cb28852d31830b6e2b2b34860572bb..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachTestFactory.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package de.ozgcloud.nachrichten.postfach;
-
-import de.ozgcloud.nachrichten.postfach.Postfach.PostfachBuilder;
-
-public class PostfachTestFactory {
-
-	public static final String POSTFACH_TYPE = "postfachType";
-
-	public static final boolean REPLY_ALLOWED = true;
-
-	public static Postfach create() {
-		return createBuilder().build();
-	}
-
-	public static PostfachBuilder createBuilder() {
-		return Postfach.builder()
-				.type(POSTFACH_TYPE)
-				.isReplyAllowed(REPLY_ALLOWED);
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/SendPostfachNachrichtResponseTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/SendPostfachNachrichtResponseTestFactory.java
deleted file mode 100644
index 4db1275867bb7556e6fc8659f270ad7a7204dc70..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/SendPostfachNachrichtResponseTestFactory.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach;
-
-public class SendPostfachNachrichtResponseTestFactory {
-
-	public static final boolean SENT_SUCCESSFUL = true;
-	public static final PostfachMessageCode MESSAGE_CODE = PostfachMessageCode.SEND_SUCCESSFUL_MESSAGE_CODE;
-
-	public static SendPostfachNachrichtResponse create() {
-		return createBuilder().build();
-	}
-
-	public static SendPostfachNachrichtResponse.SendPostfachNachrichtResponseBuilder createBuilder() {
-		return SendPostfachNachrichtResponse.builder()
-				.sentSuccessful(SENT_SUCCESSFUL)
-				.messageCode(MESSAGE_CODE);
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/AbsenderTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/AbsenderTestFactory.java
deleted file mode 100644
index 7be527b0372b1755f0de47c3c523725f34693dd0..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/AbsenderTestFactory.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.bayernid;
-
-import de.ozgcloud.nachrichten.postfach.bayernid.Absender.AbsenderBuilder;
-
-public class AbsenderTestFactory {
-	public static final String POSTKORB_ID="28721c6f-b78f-4d5c-a048-19fd2fc429d2";
-	public static final String NAME="test name";
-	public static final String ANSCHRIFT="Niemalsgasse 5, 99999 Irgendwo Stadt";
-	public static final String DIENST="Stadtverwaltung";
-	public static final String MANDANT="Fürth";
-	public static final String GEMEINDE_SCHLUESSEL="09563000";
-
-	public static Absender create(){
-		return createBuilder().build();
-	}
-
-	public static AbsenderBuilder createBuilder(){
-		return Absender.builder()
-				.postkorbId(POSTKORB_ID)
-				.name(NAME)
-				.anschrift(ANSCHRIFT)
-				.dienst(DIENST)
-				.mandant(MANDANT)
-				.gemeindeSchluessel(GEMEINDE_SCHLUESSEL);
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/AbsenderTypeTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/AbsenderTypeTestFactory.java
deleted file mode 100644
index f404f056bddd3c4b77210dd02ab7e086631783dd..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/AbsenderTypeTestFactory.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.bayernid;
-
-import de.akdb.egov.bsp.nachrichten.AbsenderType;
-import lombok.val;
-
-public class AbsenderTypeTestFactory {
-	public static final String DIENST = "Stadtverwaltung";
-	public static final String MANDANT = "Fürth";
-
-	public static AbsenderType create() {
-		val absenderType = new AbsenderType();
-		absenderType.setDienst(DIENST);
-		absenderType.setMandant(MANDANT);
-		return absenderType;
-	}
-
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentServiceTest.java
deleted file mode 100644
index 5db43d5340835019620df44b1c52465a50dd793d..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentServiceTest.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach.bayernid;
-
-import static de.ozgcloud.nachrichten.postfach.bayernid.BayernIdAttachmentTestFactory.*;
-import static org.assertj.core.api.Assertions.*;
-import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-
-import org.bson.Document;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Spy;
-
-import com.mongodb.client.gridfs.model.GridFSFile;
-
-import de.ozgcloud.common.errorhandling.TechnicalException;
-import de.ozgcloud.nachrichten.postfach.BinaryFileService;
-import de.ozgcloud.nachrichten.postfach.FileId;
-
-class BayernIdAttachmentServiceTest {
-
-	private static final FileId FILE_ID = FileId.from("42");
-
-	@InjectMocks
-	@Spy
-	private BayernIdAttachmentService bayernIdAttachmentService;
-
-	@Mock
-	private BinaryFileService fileService;
-
-	@Mock
-	private GridFSFile gridFsfile;
-
-	@Mock
-	private Document metadata;
-
-	@Nested
-	class TestLoadingAttachment {
-
-		@BeforeEach
-		void init() {
-			when(gridFsfile.getMetadata()).thenReturn(metadata);
-			when(fileService.getFile(any())).thenReturn(gridFsfile);
-		}
-
-		@Test
-		void shouldCallGetFile() {
-			when(fileService.getUploadedFileStream(any())).thenReturn(new ByteArrayInputStream(CONTENT));
-
-			bayernIdAttachmentService.getMessageAttachment(FILE_ID);
-
-			verify(fileService).getFile(FILE_ID);
-		}
-
-		@Test
-		void shouldCallGetAttachmentContent() {
-			when(fileService.getUploadedFileStream(any())).thenReturn(new ByteArrayInputStream(CONTENT));
-
-			bayernIdAttachmentService.getMessageAttachment(FILE_ID);
-
-			verify(bayernIdAttachmentService).getMessageAttachment(FILE_ID);
-		}
-
-		@Test
-		void shouldCallBuildBayernIdAttachment() {
-			var contentStream = getContentStream();
-			doReturn(contentStream).when(bayernIdAttachmentService).getAttachmentContentStream(any());
-
-			bayernIdAttachmentService.getMessageAttachment(FILE_ID);
-
-			verify(bayernIdAttachmentService).buildBayernIdAttachment(metadata, contentStream);
-		}
-
-	}
-
-	@Nested
-	class TestLoadAttachmentError {
-
-		@Test
-		@DisplayName("should throw TechnicalException if attachment not found")
-		void shouldThrowException() {
-			when(fileService.getFile(any())).thenReturn(null);
-
-			assertThrows(TechnicalException.class, () -> bayernIdAttachmentService.getMessageAttachment(FILE_ID));
-		}
-
-		@Test
-		@DisplayName("should throw TechnicalException if metadata is null")
-		void shouldThrowExceptionIfNoMetadata() {
-			when(fileService.getFile(any())).thenReturn(gridFsfile);
-			when(gridFsfile.getMetadata()).thenReturn(null);
-
-			assertThrows(TechnicalException.class, () -> bayernIdAttachmentService.getMessageAttachment(FILE_ID));
-		}
-	}
-
-	@Nested
-	class TestBuildBayernIdAttachment {
-
-		@BeforeEach
-		void setup() {
-			when(metadata.getString(BayernIdAttachmentService.NAME_KEY)).thenReturn(BayernIdAttachmentTestFactory.FILENAME);
-			when(metadata.getString(BayernIdAttachmentService.CONTENT_TYPE_KEY)).thenReturn(BayernIdAttachmentTestFactory.CONTENT_TYPE);
-		}
-
-		@Test
-		void shouldSetFileName() {
-			var attachment = buildBayernIdAttachment();
-
-			assertThat(attachment.getFileName()).isEqualTo(BayernIdAttachmentTestFactory.FILENAME);
-		}
-
-		@Test
-		void shouldSetContent() {
-			var attachment = buildBayernIdAttachment();
-
-			assertThat(attachment.getContent()).hasSameContentAs(new ByteArrayInputStream(CONTENT));
-		}
-
-		@Test
-		void shouldSetContentType() {
-			var attachment = buildBayernIdAttachment();
-
-			assertThat(attachment.getContentType()).isEqualTo(BayernIdAttachmentTestFactory.CONTENT_TYPE);
-		}
-
-		private BayernIdAttachment buildBayernIdAttachment() {
-			return bayernIdAttachmentService.buildBayernIdAttachment(metadata, getContentStream());
-		}
-	}
-
-	@Nested
-	class TestLoadingAttachmentContent {
-
-		@BeforeEach
-		void init() {
-			when(fileService.getUploadedFileStream(any()))
-					.thenReturn(new ByteArrayInputStream(CONTENT));
-		}
-
-		@Test
-		void shouldGetInputStream() {
-			InputStream input = bayernIdAttachmentService.getAttachmentContentStream(FILE_ID);
-
-			assertThat(input).hasSameContentAs(getContentStream());
-		}
-
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentTestFactory.java
deleted file mode 100644
index 2fe959b6e55845a65ad5596239816a23945759b3..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentTestFactory.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach.bayernid;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-
-import de.ozgcloud.nachrichten.postfach.bayernid.BayernIdAttachment.BayernIdAttachmentBuilder;
-
-public class BayernIdAttachmentTestFactory {
-
-	public final static String FILENAME = "test.txt";
-	public final static String CONTENT_TYPE = "text/plain";
-	public static final byte[] CONTENT = "test".getBytes();
-	public static final long SIZE = 4L;
-
-	public static BayernIdAttachment create() {
-		return createBuilder().build();
-	}
-
-	public static BayernIdAttachmentBuilder createBuilder() {
-		return BayernIdAttachment.builder()
-				.fileName(FILENAME)
-				.content(new ByteArrayInputStream(CONTENT))
-				.contentType(CONTENT_TYPE);
-	}
-
-	public static InputStream getContentStream() {
-		return new ByteArrayInputStream(CONTENT);
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapperTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapperTest.java
deleted file mode 100644
index f8f9dee1eea29e1a5d4939e54e597a96b0c8a924..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapperTest.java
+++ /dev/null
@@ -1,272 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.bayernid;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.Mockito.*;
-
-import java.time.ZoneId;
-import java.time.ZonedDateTime;
-
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mapstruct.factory.Mappers;
-import org.mockito.Spy;
-
-import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
-import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcAttachmentMetadata;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcAttachments;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcBayernIdMessageMetadata;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageRequest;
-import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory;
-
-class BayernIdPostfachNachrichtMapperTest {
-
-	@Spy
-	private BayernIdPostfachNachrichtMapper mapper = Mappers.getMapper(BayernIdPostfachNachrichtMapper.class);
-
-	@Nested
-	class TestMapToSendBayernIdMessageMetadataRequest {
-
-		private static final PostfachNachricht NACHRICHT = PostfachNachrichtTestFactory.create();
-		private static final Absender ABSENDER = AbsenderTestFactory.create();
-
-		@Test
-		void shouldIgnoreAttachments() {
-			var request = mapper.toSendBayernIdMessageMetadataRequest(NACHRICHT, ABSENDER);
-
-			assertThat(request.getAttachments()).isEqualTo(GrpcAttachments.getDefaultInstance());
-		}
-
-		@Test
-		void shouldCallToBayernIdMessageMetadata() {
-			mapper.toSendBayernIdMessageMetadataRequest(NACHRICHT, ABSENDER);
-
-			verify(mapper).toBayernIdMessageMetadata(NACHRICHT, ABSENDER);
-		}
-
-		@Nested
-		class TestMapToBayernIdMessageMetadata {
-
-			@Test
-			void shouldSetMessageId() {
-				var metadata = toMessageMetadata();
-
-				assertThat(metadata.getMessageId()).isEqualTo(MessageTestFactory.MESSAGE_ID);
-			}
-
-			@Nested
-			class TestCreatedAt {
-
-				@Test
-				void shouldCallConvertZonedDateTime() {
-					toMessageMetadata();
-
-					verify(mapper).convertZonedDateTime(PostfachNachrichtTestFactory.CREATED_AT);
-				}
-
-				@Test
-				void shouldSetCreatedAt() {
-					doReturn(PostfachNachrichtTestFactory.CREATED_AT_STR).when(mapper).convertZonedDateTime(any());
-
-					var metadata = toMessageMetadata();
-
-					assertThat(metadata.getCreatedAt()).isEqualTo(PostfachNachrichtTestFactory.CREATED_AT_STR);
-				}
-			}
-
-			@Test
-			void shouldSetSubject() {
-				var metadata = toMessageMetadata();
-
-				assertThat(metadata.getSubject()).isEqualTo(MessageTestFactory.SUBJECT);
-			}
-
-			@Test
-			void shouldSetStorkQaaLevel() {
-				var metadata = toMessageMetadata();
-
-				assertThat(metadata.getStorkQaaLevel()).isEqualTo(BayernIdPostfachNachrichtMapper.MESSAGE_LEVEL);
-			}
-
-			@Test
-			void shouldSetVorgangId() {
-				var metadata = toMessageMetadata();
-
-				assertThat(metadata.getVorgangId()).isEqualTo(MessageTestFactory.VORGANG_ID);
-			}
-
-			@Test
-			void shouldSetText() {
-				var metadata = toMessageMetadata();
-
-				assertThat(metadata.getText()).isEqualTo(PostfachNachrichtTestFactory.MAIL_BODY);
-			}
-
-			@Nested
-			class TestMapAbsender {
-
-				@Test
-				void shouldSetName() {
-					var metadata = toMessageMetadata();
-
-					assertThat(metadata.getAbsender().getName()).isEqualTo(AbsenderTestFactory.NAME);
-				}
-
-				@Test
-				void shouldSetAnschrift() {
-					var metadata = toMessageMetadata();
-
-					assertThat(metadata.getAbsender().getAnschrift()).isEqualTo(AbsenderTestFactory.ANSCHRIFT);
-				}
-
-				@Test
-				void shouldSetDienst() {
-					var metadata = toMessageMetadata();
-
-					assertThat(metadata.getAbsender().getDienst()).isEqualTo(AbsenderTestFactory.DIENST);
-				}
-
-				@Test
-				void shouldSetMandant() {
-					var metadata = toMessageMetadata();
-
-					assertThat(metadata.getAbsender().getMandant()).isEqualTo(AbsenderTestFactory.MANDANT);
-				}
-
-				@Test
-				void shouldSetGemeindeschluessel() {
-					var metadata = toMessageMetadata();
-
-					assertThat(metadata.getAbsender().getGemeindeschluessel()).isEqualTo(AbsenderTestFactory.GEMEINDE_SCHLUESSEL);
-				}
-
-			}
-
-			@Nested
-			class TestMapToEmpfaenger {
-
-				@Test
-				void shouldSetPostkorbId() {
-					var metadata = toMessageMetadata();
-
-					assertThat(metadata.getEmpfaenger().getPostkorbId()).isEqualTo(MessageTestFactory.POSTFACH_ID);
-				}
-			}
-
-			private GrpcBayernIdMessageMetadata toMessageMetadata() {
-				return mapper.toBayernIdMessageMetadata(NACHRICHT, ABSENDER);
-			}
-		}
-	}
-
-	@Nested
-	class TestMapToSendBayernIdAttachmentsMetadata {
-
-		private static final BayernIdAttachment ATTACHMENT = BayernIdAttachmentTestFactory.create();
-
-		@Test
-		void shouldIgnoreMessageMetadata() {
-			var request = toMessageRequest();
-
-			assertThat(request.getMessageMetadata()).isEqualTo(GrpcBayernIdMessageMetadata.getDefaultInstance());
-		}
-
-		@Test
-		void shouldIgnoreContent() {
-			var request = toMessageRequest();
-
-			assertThat(request.getAttachments().getContent()).isEmpty();
-		}
-
-		@Test
-		void shouldCallToAttachmentsMetadata() {
-			toMessageRequest();
-
-			verify(mapper).toAttachmentMetadata(ATTACHMENT);
-		}
-
-		private GrpcSendBayernIdMessageRequest toMessageRequest() {
-			return mapper.toSendBayernIdAttachmentsMetadataRequest(ATTACHMENT);
-		}
-	}
-
-	@Nested
-	class TestMapToAttachmentMetadata {
-
-		@Test
-		void shouldSetFileName() {
-			var metadata = toMessageRequest();
-
-			assertThat(metadata.getFileName()).isEqualTo(BayernIdAttachmentTestFactory.FILENAME);
-		}
-
-		@Test
-		void shouldSetFileType() {
-			var metadata = toMessageRequest();
-
-			assertThat(metadata.getFileType()).isEqualTo(BayernIdAttachmentTestFactory.CONTENT_TYPE);
-		}
-
-		private GrpcAttachmentMetadata toMessageRequest() {
-			return mapper.toAttachmentMetadata(BayernIdAttachmentTestFactory.create());
-		}
-	}
-
-	@Nested
-	class TestMapToGregorianCalendar {
-
-		@Test
-		void shouldReturnGregorianCalendar() {
-			var expectedDateTiem = "2024-02-14T23:29:25.000+01:00";
-			var dateTiem = ZonedDateTime.of(2024, 2, 14, 23, 29, 25, 0, ZoneId.of("Europe/Berlin"));
-
-			var calendar = mapper.convertZonedDateTime(dateTiem);
-
-			assertThat(calendar).isEqualTo(expectedDateTiem);
-		}
-	}
-
-	@Nested
-	class TestMapFromSendBayernIdMessageResponse {
-
-		@Test
-		void shouldSetSuccess() {
-			var result = mapper.fromSendBayernIdMessageResponse(GrpcSendBayernIdMessageResponseTestFactory.create());
-
-			assertThat(result.isSuccess()).isTrue();
-		}
-
-		@Test
-		void shouldSetStatus() {
-			var result = mapper.fromSendBayernIdMessageResponse(GrpcSendBayernIdMessageResponseTestFactory.create());
-
-			assertThat(result.getStatus()).isEqualTo(GrpcSendBayernIdMessageResponseTestFactory.STATUS);
-		}
-
-		@Test
-		void shouldSetMessage(){
-			var result = mapper.fromSendBayernIdMessageResponse(GrpcSendBayernIdMessageResponseTestFactory.create());
-
-			assertThat(result.getMessage()).isEqualTo(GrpcSendBayernIdMessageResponseTestFactory.MESSAGE_TEXT);
-		}
-	}
-
-	@Nested
-	class TestSkipNulls {
-
-		@Test
-		void shouldNotSetNull() {
-			var bayernIdMessageMetadata = mapper.toBayernIdMessageMetadata(PostfachNachrichtTestFactory.createBuilder().messageId(null).build(),
-					AbsenderTestFactory.create());
-
-			assertThat(bayernIdMessageMetadata.getMessageId()).isEmpty();
-		}
-
-		@Test
-		void shouldReturnTrueIfNotNull() {
-			var result = mapper.nonNull("test");
-
-			assertThat(result).isTrue();
-		}
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachRemoteServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachRemoteServiceTest.java
deleted file mode 100644
index d9386a774121f94b44fb3cfe57c7fc6c9f5d3e4c..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachRemoteServiceTest.java
+++ /dev/null
@@ -1,455 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.Mockito.*;
-
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.TimeoutException;
-import java.util.function.BiFunction;
-import java.util.function.Function;
-
-import org.apache.commons.lang3.StringUtils;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Captor;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Spy;
-
-import de.ozgcloud.common.errorhandling.TechnicalException;
-import de.ozgcloud.nachrichten.postfach.FileId;
-import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory;
-import de.ozgcloud.nachrichten.postfach.PostfachRuntimeException;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.BayernIdProxyServiceGrpc;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageRequest;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageResponse;
-import io.grpc.stub.CallStreamObserver;
-import io.grpc.stub.StreamObserver;
-import lombok.SneakyThrows;
-
-class BayernIdPostfachRemoteServiceTest {
-
-	@Spy
-	@InjectMocks
-	private BayernIdPostfachRemoteService service;
-
-	@Mock
-	private BayernIdProxyServiceGrpc.BayernIdProxyServiceStub bayernIdProxyServiceStub;
-	@Mock
-	private BayernIdProperties properties;
-	@Mock
-	private BayernIdPostfachResponseHandler responseHandler;
-	@Mock
-	private BayernIdPostfachNachrichtMapper mapper;
-	@Mock
-	private BayernIdAttachmentService attachmentService;
-
-	@Nested
-	@DisplayName("Get all messages")
-	class TestGetAllMessages {
-
-		@Test
-		void shouldThrowUnsupportedOperationException() {
-			assertThatExceptionOfType(UnsupportedOperationException.class).isThrownBy(service::getAllMessages);
-		}
-	}
-
-	@Nested
-	@DisplayName("Delete messages")
-	class TestDeleteMessages {
-
-		@Test
-		void shouldThrowUnsupportedOperationException() {
-			assertThatExceptionOfType(UnsupportedOperationException.class).isThrownBy(() -> service.deleteMessage(StringUtils.EMPTY));
-		}
-	}
-
-	@Nested
-	@DisplayName("Send message")
-	class TestSendMessage {
-
-		@Mock
-		private GrpcSendBayernIdMessageResponse grpcResponse;
-		@Mock
-		private MessageWithFilesSender messageWithFilesSender;
-		@Mock
-		private BayernIdResponse bayernIdResponse;
-
-		@Nested
-		class TestSend {
-
-			@BeforeEach
-			void setup() {
-				doReturn(grpcResponse).when(service).waitUntilTransferCompleted(any());
-			}
-
-			@Test
-			void shouldCallCreateMessageWithFileSender() {
-				sendMessage();
-
-				verify(service).createMessageWithFilesSender(any());
-			}
-
-			@Test
-			void shouldCallSend() {
-				doReturn(messageWithFilesSender).when(service).createMessageWithFilesSender(any());
-
-				sendMessage();
-
-				verify(messageWithFilesSender).send();
-			}
-
-			@Test
-			void shouldCallWaitForResults() {
-				var expectedSender = mock(MessageWithFilesSender.class);
-				when(messageWithFilesSender.send()).thenReturn(expectedSender);
-				doReturn(messageWithFilesSender).when(service).createMessageWithFilesSender(any());
-
-				sendMessage();
-
-				verify(service).waitUntilTransferCompleted(expectedSender);
-			}
-
-			@Test
-			void shouldCallMaapper() {
-				sendMessage();
-
-				verify(mapper).fromSendBayernIdMessageResponse(grpcResponse);
-			}
-
-			@Test
-			void shouldCallResponseHandler() {
-				when(mapper.fromSendBayernIdMessageResponse(any())).thenReturn(bayernIdResponse);
-
-				sendMessage();
-
-				verify(responseHandler).handleResponse(bayernIdResponse);
-			}
-		}
-
-		@Nested
-		class TestExceptionHandling {
-
-			@Test
-			void shouldHandleExceptionWhenSending() {
-				var thrownException = new RuntimeException("Test");
-				when(messageWithFilesSender.send()).thenThrow(thrownException);
-				doReturn(messageWithFilesSender).when(service).createMessageWithFilesSender(any());
-
-				assertThrows(PostfachRuntimeException.class, TestSendMessage.this::sendMessage);
-			}
-
-			@Test
-			void shouldHandleExceptionWhenWaiting() {
-				var thrownException = new RuntimeException("Test");
-				doThrow(thrownException).when(service).waitUntilTransferCompleted(any());
-
-				assertThrows(PostfachRuntimeException.class, TestSendMessage.this::sendMessage);
-			}
-
-			@Test
-			void shouldPassBayernIdServerException() {
-				doReturn(grpcResponse).when(service).waitUntilTransferCompleted(any());
-				var thrownException = new BayernIdServerException("Test");
-				doThrow(thrownException).when(responseHandler).handleResponse(any());
-
-				var resultException = assertThrows(BayernIdServerException.class, TestSendMessage.this::sendMessage);
-				assertThat(resultException).isEqualTo(thrownException);
-			}
-		}
-
-		private void sendMessage() {
-			service.sendMessage(PostfachNachrichtTestFactory.create());
-		}
-	}
-
-	@Nested
-	class TestCreateMessageWithFileSender {
-
-		@Mock
-		private Function<StreamObserver<GrpcSendBayernIdMessageResponse>, CallStreamObserver<GrpcSendBayernIdMessageRequest>> streamObserverBuilder;
-		@Mock
-		private GrpcSendBayernIdMessageRequest metadataRequest;
-		@Mock
-		private Function<String, BayernIdAttachment> attachmentBuilder;
-		@Mock
-		private Function<BayernIdAttachment, GrpcSendBayernIdMessageRequest> attachmentMetadataMapper;
-		@Mock
-		private BiFunction<byte[], Integer, GrpcSendBayernIdMessageRequest> chunkBuilder;
-
-		@Test
-		void shouldSetStreamObserverBuilder() {
-			doReturn(streamObserverBuilder).when(service).buildCallStreamObserverBuilder();
-
-			var sender = createMessageWithFilesSender();
-
-			assertThat(sender).extracting("reqObserverBuilder").isEqualTo(streamObserverBuilder);
-		}
-
-		@Test
-		void shouldCallMessageMetadataMapper() {
-			var absender = AbsenderTestFactory.create();
-			when(properties.getAbsender()).thenReturn(absender);
-			var nachricht = PostfachNachrichtTestFactory.create();
-
-			service.createMessageWithFilesSender(nachricht);
-
-			verify(mapper).toSendBayernIdMessageMetadataRequest(nachricht, absender);
-		}
-
-		@Test
-		void shouldSetMessageMetadata() {
-			when(mapper.toSendBayernIdMessageMetadataRequest(any(), any())).thenReturn(metadataRequest);
-
-			var sender = createMessageWithFilesSender();
-
-			assertThat(sender).extracting("messageMetadata").isEqualTo(metadataRequest);
-		}
-
-		@Test
-		void shouldSetAttachmentIds() {
-			var nachricht = PostfachNachrichtTestFactory.create();
-
-			var sender = createMessageWithFilesSender();
-
-			assertThat(sender).extracting("attachmentIds").isEqualTo(nachricht.getAttachments());
-		}
-
-		@Test
-		void shouldSetAttachmentBuilder() {
-			doReturn(attachmentBuilder).when(service).buildAttachmentBuilder();
-
-			var sender = createMessageWithFilesSender();
-
-			assertThat(sender).extracting("toAttachment").isEqualTo(attachmentBuilder);
-		}
-
-		@Test
-		void shouldSetAttachmentMetadataBuilder() {
-			doReturn(attachmentMetadataMapper).when(service).buildAttachmentMetadataMapper();
-
-			var sender = createMessageWithFilesSender();
-
-			assertThat(sender).extracting("attachmentMetadataMapper").isEqualTo(attachmentMetadataMapper);
-		}
-
-		@Test
-		void shouldSetChunkBuilder() {
-			doReturn(chunkBuilder).when(service).buildChunkRequest();
-
-			var sender = createMessageWithFilesSender();
-
-			assertThat(sender).extracting("chunkBuilder").isEqualTo(chunkBuilder);
-		}
-
-		private MessageWithFilesSender createMessageWithFilesSender() {
-			return service.createMessageWithFilesSender(PostfachNachrichtTestFactory.create());
-		}
-	}
-
-	@Nested
-	class TestBuildCallStreamObserverBuilder {
-
-		@Mock
-		private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver;
-		@Mock
-		private StreamObserver<GrpcSendBayernIdMessageResponse> responseObserver;
-
-		@Test
-		void shouldCallSendMessageAsStream() {
-			service.buildCallStreamObserverBuilder().apply(responseObserver);
-
-			verify(bayernIdProxyServiceStub).sendMessageAsStream(responseObserver);
-		}
-
-		@Test
-		void shouldReturnRequestObserver() {
-			when(bayernIdProxyServiceStub.sendMessageAsStream(any())).thenReturn(requestObserver);
-
-			var result = service.buildCallStreamObserverBuilder().apply(responseObserver);
-
-			assertThat(result).isEqualTo(requestObserver);
-		}
-	}
-
-	@Nested
-	class TestBuildAttachmentBuilder {
-
-		@Captor
-		private ArgumentCaptor<FileId> attachmentIdCaptor;
-
-		@Test
-		void shouldCallGetMessageAttachment (){
-			var attachmentId = "test";
-
-			service.buildAttachmentBuilder().apply(attachmentId);
-
-			verify(attachmentService).getMessageAttachment(attachmentIdCaptor.capture());
-			assertThat(attachmentIdCaptor.getValue()).extracting(FileId::toString).isEqualTo(attachmentId);
-		}
-
-		@Test
-		void shouldReturnAttachment() {
-			var attachment = BayernIdAttachmentTestFactory.create();
-			when(attachmentService.getMessageAttachment(any())).thenReturn(attachment);
-
-			var result = service.buildAttachmentBuilder().apply(StringUtils.EMPTY);
-
-			assertThat(result).isEqualTo(attachment);
-		}
-	}
-
-	@Nested
-	class TestBuildChunkRequest {
-
-		@Captor
-		private ArgumentCaptor<byte[]> bytesCaptor;
-		@Captor
-		private ArgumentCaptor<Integer> lengthCaptor;
-
-		@Test
-		void shouldReturnRequest() {
-			var bytes = new byte[] { 1, 2, 3 };
-			var length = 3;
-
-			var result = service.buildChunkRequest().apply(bytes, length);
-
-			assertThat(result.getAttachments().getContent().toByteArray()).isEqualTo(bytes);
-		}
-	}
-
-	@Nested
-	class TestBuildAttachmentMetadataMapper {
-
-		private static final BayernIdAttachment ATTACHMENT = BayernIdAttachmentTestFactory.create();
-
-		@Mock
-		private GrpcSendBayernIdMessageRequest attachmentMetadataRequest;
-
-		@Test
-		void shouldCallMapper() {
-			service.buildAttachmentMetadataMapper().apply(ATTACHMENT);
-
-			verify(mapper).toSendBayernIdAttachmentsMetadataRequest(ATTACHMENT);
-		}
-
-		@Test
-		void shouldReturnResult() {
-			when(mapper.toSendBayernIdAttachmentsMetadataRequest(any())).thenReturn(attachmentMetadataRequest);
-
-			var result = service.buildAttachmentMetadataMapper().apply(ATTACHMENT);
-
-			assertThat(result).isEqualTo(attachmentMetadataRequest);
-		}
-	}
-
-	@Nested
-	class TestWaitUntilTransferCompleted {
-
-		@Mock
-		private MessageWithFilesSender sender;
-		@Mock
-		private GrpcSendBayernIdMessageResponse grpcResponse;
-		@Mock
-		private CompletableFuture<GrpcSendBayernIdMessageResponse> resultFuture;
-
-		@BeforeEach
-		void setup() {
-			doReturn(resultFuture).when(sender).getResultFuture();
-		}
-
-		@Test
-		void shouldCallGet() {
-			service.waitUntilTransferCompleted(sender);
-
-			verify(sender).getResultFuture();
-		}
-
-		@Test
-		@SneakyThrows
-		void shouldReturnResult() {
-			when(resultFuture.get(anyLong(), any())).thenReturn(grpcResponse);
-
-			var result = service.waitUntilTransferCompleted(sender);
-
-			assertThat(result).isEqualTo(grpcResponse);
-		}
-
-		@SneakyThrows
-		@Test
-		void shouldHandleInterruptedException() {
-			var interruptedException = new InterruptedException();
-
-			when(resultFuture.get(anyLong(), any())).thenThrow(interruptedException);
-
-			assertThrows(TechnicalException.class, () -> service.waitUntilTransferCompleted(sender));
-			verify(sender).cancelOnError(interruptedException);
-		}
-
-		@Test
-		@SneakyThrows
-		void shouldHandleTimeout() {
-			when(resultFuture.get(anyLong(), any())).thenThrow(new TimeoutException());
-
-			assertThrows(TechnicalException.class, () -> service.waitUntilTransferCompleted(sender));
-			verify(sender).cancelOnTimeout();
-		}
-
-		@Test
-		@SneakyThrows
-		void shouldHandleExecutionException() {
-			var executionException = new ExecutionException(new RuntimeException());
-			when(resultFuture.get(anyLong(), any())).thenThrow(executionException);
-
-			assertThrows(TechnicalException.class, () -> service.waitUntilTransferCompleted(sender));
-			verify(sender).cancelOnTimeout();
-		}
-
-	}
-
-	@Nested
-	class TestGetPostfach {
-
-		@Test
-		void shouldHasTyp() {
-			var postfachType = service.getPostfachType();
-
-			assertThat(postfachType).isEqualTo(BayernIdPostfachRemoteService.POSTFACH_TYPE);
-		}
-
-		@Test
-		void shouldSetReplyNotAllowed() {
-			var isReplyAllowed = service.isReplyAllowed();
-
-			assertThat(isReplyAllowed).isFalse();
-		}
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachResponseHandlerTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachResponseHandlerTest.java
deleted file mode 100644
index f51750b664c3ad3b41642b8ae989eb7be8e91a2c..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachResponseHandlerTest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.bayernid;
-
-import static org.assertj.core.api.Assertions.*;
-
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.EnumSource;
-import org.mockito.InjectMocks;
-
-class BayernIdPostfachResponseHandlerTest {
-
-	@InjectMocks
-	private BayernIdPostfachResponseHandler handler;
-
-	@Nested
-	@DisplayName("Test successful Postfachserver response")
-	class TestSuccessfulPostfachServerResponse {
-
-		@Test
-		void shouldNotThrowAnyException() {
-			assertThatCode(() -> handler.handleResponse(BayernIdResponseTestFactory.create())).doesNotThrowAnyException();
-		}
-	}
-
-	@Nested
-	@DisplayName("Test faulty Postfachserver response ")
-	class TestFaultyPostfachserverResponse {
-
-		@DisplayName("Fehler im OK.KOMM-Schema")
-		@ParameterizedTest(name = "when response status: {0}")
-		@EnumSource(value = MailSendingResponseStatus.class, mode = EnumSource.Mode.EXCLUDE, names = { "SUCCESS" })
-		void shouldThrowPostfachBadRequestExceptionForSchluessel(MailSendingResponseStatus responseStatus) {
-			var bayernIdResponse = BayernIdResponseTestFactory.createBuilder().success(false).status(responseStatus.getSchluessel()).build();
-
-			var exception = Assertions.assertThrows(BayernIdServerException.class, () -> handler.handleResponse(bayernIdResponse));
-			assertThat(exception.getMessage()).startsWith("9006 / %s / %s".formatted(responseStatus.getSchluessel(), responseStatus.getMessage()));
-		}
-
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPropertiesITCase.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPropertiesITCase.java
deleted file mode 100644
index 273962d099c7d4efd9bb367a971665cf6482ff2d..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPropertiesITCase.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.bayernid;
-
-import static org.assertj.core.api.Assertions.*;
-
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.TestPropertySource;
-
-import de.ozgcloud.common.test.ITCase;
-
-@SpringBootTest(classes = { BayernIdProperties.class })
-@ITCase
-class BayernIdPropertiesITCase {
-
-	private static final String NAME = "test name";
-
-	@TestPropertySource(properties = {
-			"ozgcloud.bayernid.enabled=true",
-			"ozgcloud.bayernid.absender.postkorbId=28721c6f-b78f-4d5c-a048-19fd2fc429d2",
-			"ozgcloud.bayernid.absender.name=test name",
-			"ozgcloud.bayernid.absender.anschrift=Niemalsgasse 5, 99999 Irgendwo Stadt",
-			"ozgcloud.bayernid.absender.dienst=Stadtverwaltung",
-			"ozgcloud.bayernid.absender.mandant=Fürth",
-			"ozgcloud.bayernid.absender.gemeindeSchluessel=09563000",
-	})
-	@DisplayName("Test loading bayernid configuration")
-	@Nested
-	class TestLoadingConfiguration {
-
-		// TODO remove access data
-		private static final String POSTKORBID = "28721c6f-b78f-4d5c-a048-19fd2fc429d2";
-		private static final String DIENST = "Stadtverwaltung";
-		private static final String ANSCHRIFT = "Niemalsgasse 5, 99999 Irgendwo Stadt";
-		private static final String PASSWORD = "SyPaRAxe97";
-		private static final String RESOURCE_PATH = "bayernid.p12";
-		private static final String MANDANT = "Fürth";
-		private static final String GEMEINDE_SCHLUESSEL = "09563000";
-
-		@Autowired
-		private BayernIdProperties properties;
-
-		@Test
-		void shouldHaveProperties() {
-			assertThat(properties).isNotNull();
-		}
-
-		@Test
-		void shouldHaveAbsender() {
-			assertThat(properties.getAbsender())
-					.isNotNull()
-					.usingRecursiveComparison()
-					.isEqualTo(Absender.builder()
-							.anschrift(ANSCHRIFT)
-							.dienst(DIENST)
-							.name(NAME)
-							.mandant(MANDANT)
-							.gemeindeSchluessel(GEMEINDE_SCHLUESSEL)
-							.postkorbId(POSTKORBID).build());
-		}
-
-	}
-
-	@TestPropertySource(properties = { "ozgcloud.other=test name" })
-	@DisplayName("Test loading application context without bayerid properties")
-	@Nested
-	class TestLoadingOtherConfiguration {
-
-		@Value("${ozgcloud.other}")
-		private String testValue;
-
-		@Autowired(required = false)
-		private BayernIdProperties properties;
-
-		@Test
-		void shouldLoadTestProperty() {
-			assertThat(testValue).isEqualTo(NAME);
-		}
-
-		@Test
-		void shouldNotLoadBayernIdProperties() {
-			assertThat(properties).isNull();
-		}
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdResponseTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdResponseTestFactory.java
deleted file mode 100644
index 654daa5f583d37613870ac9e75beafb8b751bf75..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdResponseTestFactory.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.bayernid;
-
-import de.akdb.egov.bsp.nachrichten.BspQuittung;
-import de.akdb.egov.bsp.nachrichten.SchluesseltabelleType;
-import de.ozgcloud.nachrichten.postfach.bayernid.BayernIdResponse.BayernIdResponseBuilder;
-
-public class BayernIdResponseTestFactory {
-	public static final String ERGAENZENE_HINWEISE = "ergaenzenderHinweis";
-
-	public static BayernIdResponse create() {
-		return createBuilder().build();
-	}
-
-	public static BayernIdResponseBuilder createBuilder() {
-		return BayernIdResponse.builder()
-				.success(true)
-				.status("0")
-				.message(ERGAENZENE_HINWEISE);
-	}
-
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BspNachrichtTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BspNachrichtTestFactory.java
deleted file mode 100644
index 53ebdd4821421d811e0cbfdd6b5159be0a4cea8f..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BspNachrichtTestFactory.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.bayernid;
-
-import de.akdb.egov.bsp.nachrichten.BspNachricht;
-import de.akdb.egov.bsp.nachrichten.NachrichtenKopfType;
-import lombok.val;
-
-public class BspNachrichtTestFactory {
-	public static final NachrichtenKopfType NACHRICHTEN_KOPF_TYPE = NachrichtenKopfTypeTestFactory.create();
-
-	public static BspNachricht create() {
-		val bspNachricht = new BspNachricht();
-		bspNachricht.setNachrichtenKopf(NACHRICHTEN_KOPF_TYPE);
-		return bspNachricht;
-	}
-
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/EmpfaengerTypeTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/EmpfaengerTypeTestFactory.java
deleted file mode 100644
index 7bb257f8aa31f1686a0e22f7a321587df1cd340d..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/EmpfaengerTypeTestFactory.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.bayernid;
-
-import java.util.UUID;
-
-import de.akdb.egov.bsp.nachrichten.EmpfaengerType;
-import lombok.val;
-
-public class EmpfaengerTypeTestFactory {
-	public static final String POSTKORB_ID = UUID.randomUUID().toString();
-
-	public static EmpfaengerType create() {
-		val empfaengerType = new EmpfaengerType();
-		empfaengerType.setPostkorbId(POSTKORB_ID);
-		return empfaengerType;
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/FileSenderTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/FileSenderTest.java
deleted file mode 100644
index 75536d889d2d71675831d5ab35d0c116cfbce111..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/FileSenderTest.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.Mockito.*;
-
-import java.io.InputStream;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.function.BiFunction;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.Mock;
-import org.springframework.test.util.ReflectionTestUtils;
-
-import de.ozgcloud.nachrichten.postfach.bayernid.FileSender.StreamReader;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageRequest;
-import io.grpc.stub.CallStreamObserver;
-import lombok.SneakyThrows;
-
-class FileSenderTest {
-
-	private FileSender fileSender;
-
-	@Mock
-	private BiFunction<byte[], Integer, GrpcSendBayernIdMessageRequest> chunkBuilder;
-	@Mock
-	private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver;
-	@Mock
-	private GrpcSendBayernIdMessageRequest metadata;
-	@Mock
-	private InputStream inputStream;
-
-	@BeforeEach
-	void setup() {
-		fileSender = spy(new FileSender(chunkBuilder, requestObserver, metadata, inputStream));
-	}
-
-	@Nested
-	class TestSend {
-
-		@Test
-		void shouldCallSendMetadata() {
-			fileSender.send();
-
-			verify(fileSender).sendMetadata();
-		}
-
-		@Test
-		void shouldCallSendNextChunk() {
-			when(requestObserver.isReady()).thenReturn(true);
-			doAnswer(invocation -> {
-				((AtomicBoolean) ReflectionTestUtils.getField(fileSender, "done")).set(true);
-				return null;
-			}).when(fileSender).sendNextChunk();
-
-			fileSender.send();
-
-			verify(fileSender).sendNextChunk();
-		}
-
-		@Test
-		void shouldNotCallSendNextChunkWhenDone() {
-			((AtomicBoolean) ReflectionTestUtils.getField(fileSender, "done")).set(true);
-
-			fileSender.send();
-
-			verify(fileSender, never()).sendNextChunk();
-		}
-
-		@Test
-		void shouldNotCallSendNextChunkWhenNotReady() {
-			fileSender.send();
-
-			verify(fileSender, never()).sendNextChunk();
-		}
-	}
-
-	@Nested
-	class TestSendMetadata {
-
-		@Test
-		void shouldCallOnNextOnce() {
-			fileSender.sendMetadata();
-			fileSender.sendMetadata();
-
-			verify(requestObserver).onNext(metadata);
-		}
-
-	}
-
-	@Nested
-	class TestSendNextChunk {
-
-		@Test
-		void shouldCallSendChunk() {
-			var contentToSend = new byte[] { 1, 2, 3, 4, 5 };
-			setContent(contentToSend);
-
-			fileSender.sendNextChunk();
-
-			verify(fileSender).sendChunk(contentToSend, 5);
-		}
-
-		@Test
-		void shouldReturnContentLength() {
-			var contentToSend = new byte[] { 1, 2, 3, 4, 5 };
-			setContent(contentToSend);
-
-			var length = fileSender.sendNextChunk();
-
-			assertThat(length).isEqualTo(contentToSend.length);
-		}
-
-		@Test
-		void shouldCallEndTransfer() {
-			setContent(new byte[] {});
-
-			fileSender.sendNextChunk();
-
-			verify(fileSender).endTransfer();
-		}
-
-		@SneakyThrows
-		void setContent(byte[] contentToSend) {
-			var streamReader = getStreamReader();
-			ReflectionTestUtils.setField(streamReader, "buffer", contentToSend);
-			when(inputStream.read(any(), anyInt(), anyInt())).thenReturn(contentToSend.length);
-		}
-
-	}
-
-	@Nested
-	class TestEndTransfer {
-
-		@Mock
-		private StreamReader streamReader;
-
-		@BeforeEach
-		void setup() {
-			ReflectionTestUtils.setField(fileSender, "streamReader", streamReader);
-		}
-
-		@Test
-		void shouldSetDone() {
-			fileSender.endTransfer();
-
-			var done = (AtomicBoolean) ReflectionTestUtils.getField(fileSender, "done");
-			assertThat(done.get()).isTrue();
-		}
-
-		@Test
-		void shouldCloseStream() {
-			fileSender.endTransfer();
-
-			verify(streamReader).close();
-		}
-	}
-
-	@Nested
-	class TestSendChunk {
-
-		@Mock
-		private GrpcSendBayernIdMessageRequest chunkRequest;
-
-		private byte[] contentToSend = new byte[] { 1, 2, 3, 4, 5 };
-		private int length = 5;
-
-
-		@Test
-		void shouldCallChunkBuilder() {
-			fileSender.sendChunk(contentToSend, length);
-
-			verify(chunkBuilder).apply(contentToSend, length);
-		}
-
-		@Test
-		void shouldCallOnNext() {
-			when(chunkBuilder.apply(any(), anyInt())).thenReturn(chunkRequest);
-
-			fileSender.sendChunk(contentToSend, length);
-
-			verify(requestObserver).onNext(chunkRequest);
-		}
-
-	}
-
-	StreamReader getStreamReader() {
-		return (StreamReader) ReflectionTestUtils.getField(fileSender, "streamReader");
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/FreiTextTypeTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/FreiTextTypeTestFactory.java
deleted file mode 100644
index 27bcc4302706006d3805a00f3b6687a984bb1db6..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/FreiTextTypeTestFactory.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.bayernid;
-
-import de.akdb.egov.bsp.nachrichten.FreiTextType;
-import de.akdb.egov.bsp.nachrichten.SchluesseltabelleType;
-import lombok.val;
-
-public class FreiTextTypeTestFactory {
-	public static final String MESSAGE_TEXT = "Test Nachricht\n\nHallo";
-
-	public FreiTextType create() {
-		val freiText = new FreiTextType();
-		freiText.setText(MESSAGE_TEXT);
-		return freiText;
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/IdentifikationNachrichtTypeTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/IdentifikationNachrichtTypeTestFactory.java
deleted file mode 100644
index 26259ff56ce885b971b1b84c9925e810576f4d92..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/IdentifikationNachrichtTypeTestFactory.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.bayernid;
-
-import java.time.Instant;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.UUID;
-
-import javax.xml.datatype.DatatypeConfigurationException;
-import javax.xml.datatype.DatatypeFactory;
-import javax.xml.datatype.XMLGregorianCalendar;
-
-import de.akdb.egov.bsp.nachrichten.IdentifikationNachrichtType;
-import de.akdb.egov.bsp.nachrichten.SchluesseltabelleType;
-import lombok.val;
-
-class IdentifikationNachrichtTypeTestFactory {
-	public static final XMLGregorianCalendar ERSTELLUNGSZEITPUNKT = now();
-	public static final String NACHRICHTEN_ID = UUID.randomUUID().toString();
-
-	private static XMLGregorianCalendar now() {
-		try {
-			val c = new GregorianCalendar();
-			c.setTime(Date.from(Instant.now()));
-			return DatatypeFactory.newInstance().newXMLGregorianCalendar(c);
-		} catch (DatatypeConfigurationException e) {
-			throw new RuntimeException(e);
-		}
-	}
-
-	public static IdentifikationNachrichtType create() {
-		IdentifikationNachrichtType identifikationNachrichtType = new IdentifikationNachrichtType();
-		identifikationNachrichtType.setNachrichtenId(NACHRICHTEN_ID);
-		identifikationNachrichtType.setErstellungszeitpunkt(ERSTELLUNGSZEITPUNKT);
-		return identifikationNachrichtType;
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/MailSendingResponseStatusTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/MailSendingResponseStatusTest.java
deleted file mode 100644
index 6fa7835b896f46dfe1adb6b651e60924b62ca294..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/MailSendingResponseStatusTest.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.bayernid;
-
-import static org.assertj.core.api.Assertions.*;
-
-import org.junit.jupiter.api.Test;
-
-class MailSendingResponseStatusTest {
-
-	@Test
-	void shouldCreateSuccessResult() {
-		assertThat(MailSendingResponseStatus.SUCCESS.getSchluessel()).isEqualTo("0");
-	}
-
-	@Test
-	void shouldCreateFromSchluessel() {
-		assertThat(MailSendingResponseStatus.fromSchluessel("20")).isEqualTo(MailSendingResponseStatus.ERROR_IN_MESSAGE_SCHEMA);
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/MessageWithFilesSenderTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/MessageWithFilesSenderTest.java
deleted file mode 100644
index 1efd3e30ec8f02a80a7601b6920e6ce40ab2dcd8..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/MessageWithFilesSenderTest.java
+++ /dev/null
@@ -1,405 +0,0 @@
-/*
- * 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.nachrichten.postfach.bayernid;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.Mockito.*;
-
-import java.io.InputStream;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.function.BiFunction;
-import java.util.function.Function;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.springframework.test.util.ReflectionTestUtils;
-
-import de.ozgcloud.common.binaryfile.BinaryFileUploadStreamObserver;
-import de.ozgcloud.common.errorhandling.TechnicalException;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageRequest;
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageResponse;
-import io.grpc.stub.CallStreamObserver;
-import io.grpc.stub.StreamObserver;
-
-class MessageWithFilesSenderTest {
-
-	private MessageWithFilesSender messageWithFilesSender;
-
-	@Mock
-	private Function<StreamObserver<GrpcSendBayernIdMessageResponse>, CallStreamObserver<GrpcSendBayernIdMessageRequest>> reqObserverBuilder;
-	@Mock
-	private GrpcSendBayernIdMessageRequest messageMetadata;
-	@Mock
-	private List<String> attachmentIds;
-	@Mock
-	private Function<String, BayernIdAttachment> toAttachment;
-	@Mock
-	private Function<BayernIdAttachment, GrpcSendBayernIdMessageRequest> attachmentMetadataMapper;
-	@Mock
-	private BiFunction<byte[], Integer, GrpcSendBayernIdMessageRequest> chunkBuilder;
-
-	@BeforeEach
-	void setup() {
-		messageWithFilesSender = spy(
-				MessageWithFilesSender.builder().reqObserverBuilder(reqObserverBuilder).messageMetadata(messageMetadata).toAttachment(toAttachment)
-						.attachmentMetadataMapper(attachmentMetadataMapper).chunkBuilder(chunkBuilder).build());
-	}
-
-	@Nested
-	class TestSend {
-
-		@Mock
-		private BinaryFileUploadStreamObserver<GrpcSendBayernIdMessageRequest, GrpcSendBayernIdMessageResponse> responseStreamObserver;
-		@Mock
-		private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver;
-
-		@Test
-		void shouldReturnSameObject() {
-			var result = messageWithFilesSender.send();
-
-			assertThat(result).isSameAs(messageWithFilesSender);
-		}
-
-		@Test
-		void shouldCallRequestObserverBuilder() {
-			try (var createMock = Mockito.mockStatic(BinaryFileUploadStreamObserver.class)) {
-				createMock.when(() -> BinaryFileUploadStreamObserver.create(any(), any())).thenReturn(responseStreamObserver);
-
-				messageWithFilesSender.send();
-
-				verify(reqObserverBuilder).apply(responseStreamObserver);
-			}
-		}
-
-		@Test
-		void shouldSetRequestStreamObserver() {
-			when(reqObserverBuilder.apply(any())).thenReturn(requestObserver);
-
-			messageWithFilesSender.send();
-
-			assertThat(messageWithFilesSender).extracting("requestObserver").isSameAs(requestObserver);
-		}
-	}
-
-	@Nested
-	class TestSendNext {
-
-		@Mock
-		private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver;
-
-		@BeforeEach
-		void setup() {
-			ReflectionTestUtils.setField(messageWithFilesSender, "requestObserver", requestObserver);
-		}
-
-		@Test
-		void shouldCheckIfDone() {
-			doNothing().when(messageWithFilesSender).waitForObserver();
-
-			messageWithFilesSender.sendNext();
-
-			verify(messageWithFilesSender).waitForObserver();
-		}
-
-		@Test
-		void shouldRetrunIfDone() {
-			((AtomicBoolean) ReflectionTestUtils.getField(messageWithFilesSender, "done")).set(true);
-
-			messageWithFilesSender.sendNext();
-
-			verify(messageWithFilesSender, never()).waitForObserver();
-		}
-
-		@Test
-		void shouldCallSendMetadata() {
-			doNothing().when(messageWithFilesSender).waitForObserver();
-
-			messageWithFilesSender.sendNext();
-
-			verify(messageWithFilesSender).sendMetadata();
-		}
-
-		@Test
-		void shouldCallSendAttachments() {
-			doNothing().when(messageWithFilesSender).waitForObserver();
-
-			messageWithFilesSender.sendNext();
-
-			verify(messageWithFilesSender).sendAttachments();
-		}
-	}
-
-	@Nested
-	class TestSendMetadata {
-
-		@Mock
-		private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver;
-
-		@BeforeEach
-		void setup() {
-			ReflectionTestUtils.setField(messageWithFilesSender, "requestObserver", requestObserver);
-		}
-
-		@Test
-		void shouldCallOnNextOnce() {
-			messageWithFilesSender.sendMetadata();
-			messageWithFilesSender.sendMetadata();
-
-			verify(requestObserver).onNext(messageMetadata);
-		}
-
-	}
-
-	@Nested
-	class TestSendAttachments {
-
-		private String attachmentId = "id1";
-
-		@Mock
-		private FileSender fileSender;
-
-		@BeforeEach
-		void setup() {
-			ReflectionTestUtils.setField(messageWithFilesSender, "attachmentIds", List.of(attachmentId));
-			doNothing().when(messageWithFilesSender).completeRequest();
-		}
-
-		@Test
-		void shouldCallCreateFileSenders() {
-			doReturn(fileSender).when(messageWithFilesSender).buildFileSender(any());
-
-			messageWithFilesSender.sendAttachments();
-
-			verify(messageWithFilesSender).createFileSenders();
-		}
-
-		@Test
-		void shouldNotRecreateFileSenders() {
-			ReflectionTestUtils.setField(messageWithFilesSender, "fileSenders", List.of(fileSender));
-
-			messageWithFilesSender.sendAttachments();
-
-			verify(messageWithFilesSender, never()).createFileSenders();
-		}
-
-		@Test
-		void shouldCallSendOnFileSender() {
-			doReturn(fileSender).when(messageWithFilesSender).buildFileSender(any());
-
-			messageWithFilesSender.sendAttachments();
-
-			verify(fileSender).send();
-		}
-
-		@Test
-		void shouldCallCompleteRequest() {
-			doReturn(fileSender).when(messageWithFilesSender).buildFileSender(any());
-
-			messageWithFilesSender.sendAttachments();
-
-			verify(messageWithFilesSender).completeRequest();
-		}
-	}
-
-	@Nested
-	class TestCreateFileSenders {
-
-		private String attachmentId = "id1";
-
-		@Mock
-		private FileSender fileSender;
-
-		@BeforeEach
-		void setup() {
-			doReturn(fileSender).when(messageWithFilesSender).buildFileSender(any());
-			ReflectionTestUtils.setField(messageWithFilesSender, "attachmentIds", List.of(attachmentId));
-		}
-
-		@Test
-		void shouldCalToAttachment() {
-			messageWithFilesSender.createFileSenders();
-
-			verify(toAttachment).apply(attachmentId);
-		}
-
-		@Test
-		void shouldCallBuildFileSender() {
-			messageWithFilesSender.createFileSenders();
-
-			verify(messageWithFilesSender).buildFileSender(any());
-		}
-
-		@Test
-		void shouldReturnFileSenders() {
-			var result = messageWithFilesSender.createFileSenders();
-
-			assertThat(result).containsExactly(fileSender);
-		}
-	}
-
-	@Nested
-	class TestBuildFileSender {
-
-		private String attachmentId = "id1";
-
-		@Mock
-		private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver;
-		@Mock
-		private GrpcSendBayernIdMessageRequest attachmentMetadata;
-
-		@Mock
-		private BayernIdAttachment attachment;
-		@Mock
-		private InputStream inputStream;
-
-		@BeforeEach
-		void setup() {
-			ReflectionTestUtils.setField(messageWithFilesSender, "requestObserver", requestObserver);
-		}
-
-		@Test
-		void shouldSetChunkBuilder() {
-			var result = messageWithFilesSender.buildFileSender(attachment);
-
-			assertThat(result).extracting("chunkBuilder").isSameAs(chunkBuilder);
-		}
-
-		@Test
-		void shouldSetRequestObserver() {
-			var result = messageWithFilesSender.buildFileSender(attachment);
-
-			assertThat(result).extracting("requestObserver").isSameAs(requestObserver);
-		}
-
-		@Test
-		void shouldCallAttachmentMetadataMapper() {
-			ReflectionTestUtils.setField(messageWithFilesSender, "attachmentMetadataMapper", attachmentMetadataMapper);
-
-			messageWithFilesSender.buildFileSender(attachment);
-
-			verify(attachmentMetadataMapper).apply(attachment);
-		}
-
-		@Test
-		void shouldSetAttachmentMetadata() {
-			ReflectionTestUtils.setField(messageWithFilesSender, "attachmentMetadataMapper", attachmentMetadataMapper);
-			when(attachmentMetadataMapper.apply(any())).thenReturn(attachmentMetadata);
-
-			var result = messageWithFilesSender.buildFileSender(attachment);
-
-			assertThat(result).extracting("metadata").isSameAs(attachmentMetadata);
-		}
-
-		@Test
-		void shouldGetContent() {
-			messageWithFilesSender.buildFileSender(attachment);
-
-			verify(attachment).getContent();
-		}
-	}
-
-	@Nested
-	class TestCompleteRequest {
-
-		@Mock
-		private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver;
-
-		@BeforeEach
-		void setup() {
-			ReflectionTestUtils.setField(messageWithFilesSender, "requestObserver", requestObserver);
-		}
-
-		@Test
-		void shouldSetDone() {
-			messageWithFilesSender.completeRequest();
-
-			var done = (AtomicBoolean) ReflectionTestUtils.getField(messageWithFilesSender, "done");
-			assertThat(done.get()).isTrue();
-		}
-
-		@Test
-		void shouldCallOnCompleted() {
-			messageWithFilesSender.completeRequest();
-
-			verify(requestObserver).onCompleted();
-		}
-	}
-
-	@Nested
-	class TestCancelOnTimeout {
-
-		@Mock
-		private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver;
-
-		@BeforeEach
-		void setup() {
-			ReflectionTestUtils.setField(messageWithFilesSender, "requestObserver", requestObserver);
-		}
-
-		@Test
-		void shouldCallCancelOnRequestObserver() {
-			messageWithFilesSender.cancelOnTimeout();
-
-			verify(requestObserver).onError(any(TechnicalException.class));
-		}
-
-		@Test
-		void shouldCancelResultFuture() {
-			messageWithFilesSender.cancelOnTimeout();
-
-			assertThat(messageWithFilesSender.getResultFuture()).isCancelled();
-		}
-	}
-
-	@Nested
-	class TestCancelOnError {
-
-		@Mock
-		private CallStreamObserver<GrpcSendBayernIdMessageRequest> requestObserver;
-
-		@BeforeEach
-		void setup() {
-			ReflectionTestUtils.setField(messageWithFilesSender, "requestObserver", requestObserver);
-		}
-
-		@Test
-		void shouldCallCancelOnRequestObserver() {
-			var exception = new RuntimeException("test");
-			messageWithFilesSender.cancelOnError(exception);
-
-			verify(requestObserver).onError(exception);
-		}
-
-		@Test
-		void shouldCancelResultFuture() {
-			messageWithFilesSender.cancelOnError(new TechnicalException("test"));
-
-			assertThat(messageWithFilesSender.getResultFuture()).isCancelled();
-		}
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/NachrichtenInhaltTypeTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/NachrichtenInhaltTypeTestFactory.java
deleted file mode 100644
index 81b662cf485c3b63cc47a10efe6e200317ad6501..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/NachrichtenInhaltTypeTestFactory.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.bayernid;
-
-import de.akdb.egov.bsp.nachrichten.NachrichtenInhaltType;
-import lombok.val;
-
-public class NachrichtenInhaltTypeTestFactory {
-	public static final String BETREFF = "Test Nachricht";
-
-	public NachrichtenInhaltType create() {
-		val nachrichtenInhalt = new NachrichtenInhaltType();
-		nachrichtenInhalt.setBetreff(BETREFF);
-		return nachrichtenInhalt;
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/NachrichtenKopfTypeTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/NachrichtenKopfTypeTestFactory.java
deleted file mode 100644
index 9cb13186991901bd55196c58a7b014f81c027936..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/NachrichtenKopfTypeTestFactory.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.bayernid;
-
-import de.akdb.egov.bsp.nachrichten.AbsenderType;
-import de.akdb.egov.bsp.nachrichten.EmpfaengerType;
-import de.akdb.egov.bsp.nachrichten.IdentifikationNachrichtType;
-import de.akdb.egov.bsp.nachrichten.NachrichtenKopfType;
-import lombok.val;
-
-public class NachrichtenKopfTypeTestFactory {
-	public static final IdentifikationNachrichtType IDENTIFIKATION_NACHRICHT_TYPE = IdentifikationNachrichtTypeTestFactory.create();
-	public static final AbsenderType ABSENDER_TYPE = AbsenderTypeTestFactory.create();
-	public static final EmpfaengerType EMPFAENGER_TYPE = EmpfaengerTypeTestFactory.create();
-
-	public static NachrichtenKopfType create() {
-		val nachrichtenKopfType = new NachrichtenKopfType();
-		nachrichtenKopfType.setIdentifikationNachricht(IDENTIFIKATION_NACHRICHT_TYPE);
-		nachrichtenKopfType.setAbsender(ABSENDER_TYPE);
-		nachrichtenKopfType.setEmpfaenger(EMPFAENGER_TYPE);
-		return nachrichtenKopfType;
-	}
-
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/SendBspNachrichtNativeOutputTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/SendBspNachrichtNativeOutputTestFactory.java
deleted file mode 100644
index 39f1abeb800207070aa8b8c7220a4089501db60b..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/SendBspNachrichtNativeOutputTestFactory.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.bayernid;
-
-import akdb.bsp.postkorb.komm.webservice.SendBspNachrichtNativeOutput;
-import lombok.val;
-
-public class SendBspNachrichtNativeOutputTestFactory {
-
-	public static final String BSP_QUITTUNG = "quittung";
-
-	public static SendBspNachrichtNativeOutput create() {
-		val result = new SendBspNachrichtNativeOutput();
-		result.setBspQuittung(BSP_QUITTUNG);
-		return result;
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/ZuVorgangTypeTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/ZuVorgangTypeTestFactory.java
deleted file mode 100644
index 5d2c0229fd95c42a9a75df693792b50b70d35baf..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/ZuVorgangTypeTestFactory.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.bayernid;
-
-import java.util.UUID;
-
-import de.akdb.egov.bsp.nachrichten.ZuVorgangType;
-import lombok.val;
-
-public class ZuVorgangTypeTestFactory {
-	public static final String VORGANG_ID = UUID.randomUUID().toString();
-
-	public static ZuVorgangType create() {
-		val vorgang = new ZuVorgangType();
-		vorgang.setVorgangsId(VORGANG_ID);
-		return vorgang;
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentServiceTest.java
deleted file mode 100644
index dc473e132bf0dff050351527495b0c78b211ff09..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentServiceTest.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach.osi;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.sql.Date;
-import java.time.Instant;
-
-import org.bson.BsonObjectId;
-import org.bson.BsonValue;
-import org.bson.Document;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-
-import com.mongodb.client.gridfs.model.GridFSFile;
-
-import de.ozgcloud.nachrichten.postfach.BinaryFileService;
-import de.ozgcloud.nachrichten.postfach.FileId;
-
-class MessageAttachmentServiceTest {
-	private static final FileId FILE_ID = FileId.from("42");
-
-	@InjectMocks
-	private MessageAttachmentService messageAttachmentService;
-
-	@Mock
-	private BinaryFileService fileService;
-
-	private GridFSFile gridFsfile;
-
-	@Nested
-	class TestLoadingAttachment {
-		@BeforeEach
-		void init() {
-			Document metadata = new Document();
-			metadata.put("name", MessageAttachmentTestFactory.FILENAME);
-			BsonValue id = new BsonObjectId();
-			gridFsfile = new GridFSFile(id, FILE_ID.toString(), 0, 0, Date.from(Instant.now()), metadata);
-
-			when(fileService.getFile(any())).thenReturn(gridFsfile);
-			when(fileService.getUploadedFileStream(any()))
-					.thenReturn(new ByteArrayInputStream(MessageAttachmentTestFactory.DECODED_CONTENT.getBytes()));
-		}
-
-		@Test
-		void shouldHaveAttachmentWithFileName() {
-			MessageAttachment attachment = messageAttachmentService.getMessageAttachment(FILE_ID);
-
-			assertThat(attachment.getFileName()).isEqualTo(MessageAttachmentTestFactory.FILENAME);
-		}
-
-		@Test
-		void shouldHaveAttachmentContent() {
-			MessageAttachment attachment = messageAttachmentService.getMessageAttachment(FILE_ID);
-
-			assertThat(attachment.getContent()).isEqualTo(MessageAttachmentTestFactory.CONTENT);
-		}
-
-	}
-
-	@Nested
-	class TestLoadingAttachmentContent {
-		@BeforeEach
-		void init() {
-			when(fileService.getUploadedFileStream(any()))
-					.thenReturn(new ByteArrayInputStream(MessageAttachmentTestFactory.DECODED_CONTENT.getBytes()));
-		}
-
-		@Test
-		void shouldGetInputStream() {
-			InputStream input = messageAttachmentService.getAttachmentContentStream(FILE_ID);
-
-			assertThat(input).isNotNull();
-		}
-
-		@Test
-		void shouldGetContent() throws IOException {
-			String input = messageAttachmentService.getAttachmentContent(FILE_ID);
-
-			assertThat(input).isEqualTo(MessageAttachmentTestFactory.CONTENT);
-		}
-	}
-
-	@Nested
-	class TestMapAttachmentFile {
-
-		@Test
-		void shouldMapFileName() {
-			var attachmentFile = messageAttachmentService.mapAttachmentFile(MessageAttachmentTestFactory.create());
-
-			assertThat(attachmentFile.getName()).isEqualTo(MessageAttachmentTestFactory.FILENAME);
-		}
-
-		@Test
-		void shouldMapContent() {
-			var attachmentFile = messageAttachmentService.mapAttachmentFile(MessageAttachmentTestFactory.create());
-
-			assertThat(attachmentFile.getContent()).hasContent(MessageAttachmentTestFactory.CONTENT);
-		}
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentTestFactory.java
deleted file mode 100644
index 17181b240ad7645e49afd5c977cefdb925226425..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentTestFactory.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach.osi;
-
-public class MessageAttachmentTestFactory {
-
-	public final static String FILENAME = "test.txt";
-	public static final String CONTENT = "dGVzdA==";
-	public static final String DECODED_CONTENT = "test";
-	public static final long SIZE = 4L;
-
-	public static MessageAttachment create() {
-		return createBuilder().build();
-	}
-
-	public static MessageAttachment.MessageAttachmentBuilder createBuilder() {
-		return MessageAttachment.builder().fileName(FILENAME).content(CONTENT);
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageJsonReplyTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageJsonReplyTestFactory.java
deleted file mode 100644
index 43dd50e2c6728e4931e4a5a2c651f689ccad7742..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageJsonReplyTestFactory.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.osi;
-
-public class MessageJsonReplyTestFactory {
-
-	private static final String REPLY_JSON_TMPL = """
-						[{
-			  "messageId": "%s",
-			  "nameIdentifier": "%s",
-			  "body": "%s",
-			  "isHtml": false,
-			  "replyAction": %d,
-			  "subject": "%s",
-			  "sequenceNumber": "%s",
-			  "eidasLevel": 1,
-			  "isObligatory": true,
-			  "attachments": [{
-			  	"fileName": "%s",
-			  	"content": "%s"
-			  }]
-			}]""";
-
-	public static String buildReplyJson() {
-		return buildReplyJson(MessageTestFactory.create(), MessageAttachmentTestFactory.create());
-	}
-
-	public static String buildReplyJson(Message msg, MessageAttachment attachement) {
-		return String.format(REPLY_JSON_TMPL,
-				msg.getMessageId(),
-				msg.getPostfachId(),
-				msg.getMailBody(),
-				msg.getReplyOption().toValue(),
-				msg.getSubject(),
-				msg.getVorgangId(),
-				attachement.getFileName(),
-				attachement.getContent());
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageTestFactory.java
deleted file mode 100644
index a60eb1180946699746247df1c19a3b2fd6039e5e..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageTestFactory.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach.osi;
-
-import java.util.List;
-import java.util.UUID;
-
-import de.ozgcloud.nachrichten.postfach.osi.Message.EidasLevel;
-
-public class MessageTestFactory {
-
-	public static final String MESSAGE_ID = UUID.randomUUID().toString();
-	public static final String POSTFACH_ID = UUID.randomUUID().toString();
-	public static final String VORGANG_ID = UUID.randomUUID().toString();
-
-	public static final String MAIL_BODY = "Body<br>String";
-	public static final boolean IS_HTML = false;
-	public static final ReplyOption REPLY_OPTION = ReplyOption.MANDATORY;
-	public static final String SUBJECT = "Test Subject";
-
-	public static final EidasLevel EIDAS_LEVEL = EidasLevel.MEDIUM;
-	public static final boolean RECHTSVERBINDLICH = true;
-
-	public static final List<MessageAttachment> ATTACHMENTS = List.of(MessageAttachmentTestFactory.create());
-
-	public static Message create() {
-		return createBuilder().build();
-	}
-
-	public static Message.MessageBuilder createBuilder() {
-		return Message.builder() //
-				.messageId(MESSAGE_ID) //
-				.postfachId(POSTFACH_ID) //
-				.mailBody(MAIL_BODY) //
-				.isHtml(IS_HTML) //
-				.replyOption(REPLY_OPTION) //
-				.subject(SUBJECT) //
-				.vorgangId(VORGANG_ID) //
-				.eidasLevel(EIDAS_LEVEL) //
-				.rechtsverbindlich(RECHTSVERBINDLICH) //
-				.attachments(ATTACHMENTS);
-	}
-}
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapperTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapperTest.java
deleted file mode 100644
index 03296b4b114b2e57e1b4e6158f9cd09ca50cbbd3..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapperTest.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach.osi;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.Mockito.*;
-
-import java.time.ZonedDateTime;
-import java.time.temporal.ChronoUnit;
-import java.util.List;
-
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mapstruct.factory.Mappers;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-
-import de.ozgcloud.nachrichten.postfach.FileId;
-import de.ozgcloud.nachrichten.postfach.PostfachAddressTestFactory;
-import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
-import de.ozgcloud.nachrichten.postfach.PostfachNachricht.Direction;
-import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory;
-import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper;
-
-class OsiPostfachMessageMapperTest {
-
-	@InjectMocks
-	private OsiPostfachMessageMapper mapper = Mappers.getMapper(OsiPostfachMessageMapper.class);
-	@Mock
-	private MessageAttachmentService messageAttachmentService;
-	@Mock
-	private GrpcObjectMapper grpcObjectMapper;
-
-	@DisplayName("To mail")
-	@Nested
-	class TestToNachricht {
-
-		@Test
-		void shouldSetDirection() {
-			var mail = mapper.toPostfachNachricht(MessageTestFactory.create());
-
-			assertThat(mail.getDirection()).isEqualTo(Direction.IN);
-		}
-
-		@Test
-		void shouldSetCreatedAt() {
-			var mail = mapper.toPostfachNachricht(MessageTestFactory.create());
-
-			assertThat(mail.getCreatedAt()).isNotNull().isCloseTo(ZonedDateTime.now(), within(2, ChronoUnit.SECONDS));
-		}
-
-		@Test
-		void shouldIgnoreSentInformation() {
-			var mail = mapper.toPostfachNachricht(MessageTestFactory.create());
-
-			assertThat(mail.getSentAt()).isNull();
-			assertThat(mail.getSentSuccessful()).isNull();
-		}
-
-		@Test
-		void shouldPersistAttachment() {
-			mapper.toPostfachNachricht(MessageTestFactory.create());
-
-			verify(messageAttachmentService).persistAttachment(MessageTestFactory.VORGANG_ID, MessageTestFactory.ATTACHMENTS.get(0));
-		}
-
-		@Test
-		void shouldSetPostfachAddress() {
-			var expectedPostfachAddress = PostfachAddressTestFactory.createBuilder().serviceKontoType(OsiPostfachRemoteService.POSTFACH_TYPE).build();
-
-			var mail = toMail();
-
-			assertThat(mail.getPostfachAddress()).usingRecursiveComparison().isEqualTo(expectedPostfachAddress);
-		}
-
-		@Test
-		void shouldPreserveNewLineInBody() {
-			var bodyText = "line\nline";
-			var mail = mapper.toPostfachNachricht(MessageTestFactory.createBuilder().mailBody(bodyText).build());
-
-			assertThat(mail.getMailBody()).isEqualTo(bodyText);
-		}
-
-		@Test
-		void shouldRecodeAND() {
-			var mail = mapper.toPostfachNachricht(MessageTestFactory.createBuilder().mailBody("this&amp;that").build());
-
-			assertThat(mail.getMailBody()).isEqualTo("this&that");
-		}
-
-		private PostfachNachricht toMail() {
-			return mapper.toPostfachNachricht(MessageTestFactory.create());
-		}
-	}
-
-	@DisplayName("To osi message")
-	@Nested
-	class TestToOsiMessage {
-
-		@Test
-		void shouldCallAttachmentService() {
-			var fileId = FileId.from("42");
-
-			toOsiMessage(PostfachNachrichtTestFactory.createBuilder().attachments(List.of(fileId.toString())).build());
-
-			verify(messageAttachmentService).getMessageAttachment(fileId);
-		}
-
-		@Test
-		void shouldMapFields() {
-			var message = toOsiMessage(PostfachNachrichtTestFactory.create());
-
-			assertThat(message.getSubject()).isEqualTo(MessageTestFactory.SUBJECT);
-			assertThat(message.getAttachments()).hasSize(1);
-		}
-
-		@Test
-		void shouldMapMailBody() {
-			var message = toOsiMessage(PostfachNachrichtTestFactory.create());
-
-			assertThat(message.getMailBody()).isEqualTo(MessageTestFactory.MAIL_BODY);
-		}
-
-		@Test
-		void shouldReplaceNewLineToHtml() {
-			var bodyText = "line\nline&";
-			var message = toOsiMessage(PostfachNachrichtTestFactory.createBuilder().mailBody(bodyText).build());
-
-			assertThat(message.getMailBody()).isEqualTo("line<br>line&");
-		}
-
-		@DisplayName("build postfachId")
-		@Nested
-		class TestToPostfachId {
-
-			@DisplayName("by existing postfachAddress")
-			@Nested
-			class TestWithExistingPostfachAddress {
-
-				@Test
-				void shouldMapPostfachAddressToPostfachId() {
-					var message = toOsiMessage(PostfachNachrichtTestFactory.create());
-
-					assertThat(message.getPostfachId()).isEqualTo(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE);
-				}
-			}
-
-			@DisplayName("by postfachId if postfachAddress not exists")
-			@Nested
-			class TestWithoutPostfachAddress {
-
-				@Test
-				void shouldMapPostfachAddressToPostfachId() {
-					var message = toOsiMessage(PostfachNachrichtTestFactory.createBuilder().postfachAddress(null).build());
-
-					assertThat(message.getPostfachId()).isEqualTo(MessageTestFactory.POSTFACH_ID);
-				}
-			}
-		}
-
-		private Message toOsiMessage(PostfachNachricht postfachNachricht) {
-			return mapper.toOsiMessage(postfachNachricht);
-		}
-	}
-
-	@DisplayName("To HTML body")
-	@Nested
-	class TestToHTMLBody {
-
-		@Test
-		void shouldNotContainNewlines() {
-			var body = mapper.replaceNewlines(MessageTestFactory.MAIL_BODY);
-
-			assertThat(body).doesNotContain("\n");
-		}
-
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteServiceTest.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteServiceTest.java
deleted file mode 100644
index 0681df0f45b9605bd5d025636913836084c8e21f..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteServiceTest.java
+++ /dev/null
@@ -1,337 +0,0 @@
-/*
- * Copyright (C) 2022 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.nachrichten.postfach.osi;
-
-import static de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory.*;
-import static org.assertj.core.api.Assertions.*;
-import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-import static org.springframework.test.web.client.match.MockRestRequestMatchers.*;
-import static org.springframework.test.web.client.response.MockRestResponseCreators.*;
-
-import java.util.stream.Collectors;
-
-import org.assertj.core.api.InstanceOfAssertFactories;
-import org.assertj.core.util.Arrays;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Spy;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
-import org.springframework.test.util.ReflectionTestUtils;
-import org.springframework.test.web.client.ExpectedCount;
-import org.springframework.test.web.client.MockRestServiceServer;
-import org.springframework.test.web.client.ResponseActions;
-import org.springframework.web.client.RestTemplate;
-
-import de.ozgcloud.nachrichten.postfach.NotConfiguredException;
-import de.ozgcloud.nachrichten.postfach.PostfachBadRequestException;
-import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
-import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory;
-
-class OsiPostfachRemoteServiceTest {
-
-	private static final String TEST_URL = "https://testUrl.local";
-	private static final String TEST_API_KEY = "dummyApiKey";
-	private static final String TEST_API_REALM = "dummyApiRealm";
-
-	@InjectMocks
-	private OsiPostfachRemoteService service;
-
-	@Mock
-	private OsiPostfachMessageMapper mapper;
-
-	@Spy
-	private RestTemplate restTemplate;
-
-	@Spy
-	private OsiPostfachProperties properties = new OsiPostfachProperties();
-	{
-		properties.setUrl(TEST_URL);
-		properties.setRealm(TEST_API_REALM);
-		properties.setKey(TEST_API_KEY);
-	}
-
-	private MockRestServiceServer mockServer;
-
-	@BeforeEach
-	void initMockServer() {
-		mockServer = MockRestServiceServer.createServer(restTemplate);
-	}
-
-	@Nested
-	class TestGetAllMessages {
-
-		@BeforeEach
-		void init() {
-			prepareMockServer();
-		}
-
-		@Test
-		void shouldCallRestTemplateExchange() {
-			service.getAllMessages();
-
-			mockServer.verify();
-		}
-
-		@Test
-		void shouldFillMessage() {
-			when(mapper.toPostfachNachricht(any())).thenReturn(PostfachNachrichtTestFactory.create());
-
-			var messages = service.getAllMessages();
-
-			assertThat(messages).hasSize(1).first().usingRecursiveComparison().isEqualTo(PostfachNachrichtTestFactory.create());
-		}
-
-		@Test
-		void shouldThrowExceptionIfNotConfigured() {
-			properties.setUrl(null);
-
-			assertThrows(NotConfiguredException.class, () -> service.getAllMessages());
-		}
-
-		@Test
-		void shouldHaveAttachment() {
-			var messages = Arrays.array(MessageTestFactory.create());
-			doReturn(ResponseEntity.ok().body(messages)).when(restTemplate).exchange(TEST_URL, HttpMethod.GET, null, Message[].class);
-			when(mapper.toPostfachNachricht(messages[0])).thenReturn(PostfachNachrichtTestFactory.create());
-
-			var postfachNachrichten = service.getAllMessages();
-
-			assertThat(postfachNachrichten).hasSize(1).first()
-					.extracting(PostfachNachricht::getAttachments, InstanceOfAssertFactories.LIST)
-					.hasSize(1)
-					.usingRecursiveComparison().isEqualTo(PostfachNachrichtTestFactory.ATTACHMENTS);
-		}
-
-		@Test
-		void shouldCallMapper() {
-			prepareMockServer();
-
-			service.getAllMessages().collect(Collectors.toList());
-
-			verify(mapper).toPostfachNachricht(any());
-		}
-
-		private void prepareMockServer() {
-			mockServer.expect(ExpectedCount.once(), requestTo(TEST_URL))
-					.andExpect(method(HttpMethod.GET))
-					.andRespond(withSuccess(MessageJsonReplyTestFactory.buildReplyJson(), MediaType.APPLICATION_JSON));
-		}
-
-	}
-
-	@Nested
-	class TestSendMessage {
-
-		private PostfachNachricht message = PostfachNachrichtTestFactory.create();
-
-		@Test
-		void shouldCallRestTemplateExchange() {
-			prepareMockServer();
-
-			service.sendMessage(message);
-
-			mockServer.verify();
-		}
-
-		@Test
-		void shouldThrowExceptionUrlIfNotConfigured() {
-			prepareMockServer();
-
-			properties.setUrl(null);
-
-			assertThrows(NotConfiguredException.class, () -> service.sendMessage(message));
-		}
-
-		@Test
-		void shouldThrowExceptionKeyIfNotConfigured() {
-			prepareMockServer();
-
-			properties.setKey(null);
-
-			assertThrows(NotConfiguredException.class, () -> service.sendMessage(message));
-		}
-
-		@Test
-		void shouldThrowExceptionIfNoRestTemplate() {
-			ReflectionTestUtils.setField(service, "restTemplate", null);
-
-			assertThrows(NotConfiguredException.class, () -> service.sendMessage(message));
-		}
-
-		@Test
-		void shouldThrowBadRequestExceptionOnHttpClientError() {
-			prepareMockServer().andRespond(withStatus(HttpStatus.BAD_REQUEST));
-
-			assertThrows(PostfachBadRequestException.class, () -> service.sendMessage(message));
-		}
-
-		@Test
-		void shouldCallMapper() {
-			prepareMockServer();
-
-			service.sendMessage(message);
-
-			verify(mapper).toOsiMessage(any());
-		}
-
-		@Nested
-		class TestResponse {
-
-			@Test
-			void shouldThrowServerProcessExceptionOnResponseBodyFalse() {
-				prepareMockServerWithResponseBody(false);
-
-				assertThrows(OsiPostfachServerProcessException.class, () -> service.sendMessage(message));
-
-				mockServer.verify();
-			}
-
-			void prepareMockServerWithResponseBody(boolean body) {
-				mockServer.expect(ExpectedCount.once(), requestTo(TEST_URL))
-						.andExpect(method(HttpMethod.POST))
-						.andRespond(withSuccess(String.valueOf(body), MediaType.APPLICATION_JSON));
-			}
-		}
-
-		@DisplayName("rest request body")
-		@Nested
-		class TestRestRequestBody {
-
-			@Test
-			void shouldHaveVorgangIdAsSequenceNumber() {
-				var postfachNachricht = PostfachNachrichtTestFactory.create();
-				when(mapper.toOsiMessage(postfachNachricht)).thenReturn(MessageTestFactory.create());
-
-				prepareMockServer().andExpect(jsonPath("$.sequenceNumber").value(VORGANG_ID));
-
-				service.sendMessage(postfachNachricht);
-			}
-
-			@Test
-			void shouldHavePostfachIdAsNameIdentifier() {
-				var postfachNachricht = PostfachNachrichtTestFactory.create();
-				when(mapper.toOsiMessage(postfachNachricht)).thenReturn(MessageTestFactory.create());
-
-				prepareMockServer().andExpect(jsonPath("$.nameIdentifier").value(POSTFACH_ID));
-
-				service.sendMessage(postfachNachricht);
-			}
-
-			@Test
-			void shouldHaveSubject() {
-				var postfachNachricht = PostfachNachrichtTestFactory.create();
-				when(mapper.toOsiMessage(postfachNachricht)).thenReturn(MessageTestFactory.create());
-
-				prepareMockServer().andExpect(jsonPath("$.subject").value(SUBJECT));
-
-				service.sendMessage(postfachNachricht);
-			}
-
-			@Test
-			void shouldHaveMailBodyAsBody() {
-				var postfachNachricht = PostfachNachrichtTestFactory.create();
-				when(mapper.toOsiMessage(postfachNachricht)).thenReturn(MessageTestFactory.create());
-
-				prepareMockServer().andExpect(jsonPath("$.body").value(MAIL_BODY));
-
-				service.sendMessage(postfachNachricht);
-			}
-
-			@Test
-			void shouldHaveNumericReplyOptionAsReplyAction() {
-				var postfachNachricht = PostfachNachrichtTestFactory.create();
-				when(mapper.toOsiMessage(postfachNachricht)).thenReturn(MessageTestFactory.create());
-
-				prepareMockServer().andExpect(jsonPath("$.replyAction").value(REPLY_OPTION.toValue()));
-
-				service.sendMessage(postfachNachricht);
-			}
-		}
-
-		private ResponseActions prepareMockServer() {
-			var responseAction = mockServer.expect(ExpectedCount.once(), requestTo(TEST_URL))
-					.andExpect(method(HttpMethod.POST));
-
-			responseAction.andRespond(withSuccess());
-			return responseAction;
-		}
-	}
-
-	@Nested
-	class TestDeleteMessage {
-
-		private final String DELETE_URL = TEST_URL + "?messageGuid=" + MessageTestFactory.MESSAGE_ID;
-
-		@Test
-		void shouldCallRestTemplateExchange() {
-			prepareMockServer();
-
-			service.deleteMessage(MessageTestFactory.MESSAGE_ID);
-
-			mockServer.verify();
-		}
-
-		@Test
-		void shouldThrowExceptionIfNotConfigured() {
-			prepareMockServer();
-
-			properties.setUrl(null);
-
-			assertThrows(NotConfiguredException.class, () -> service.deleteMessage(MessageTestFactory.MESSAGE_ID));
-		}
-
-		private void prepareMockServer() {
-			mockServer.expect(ExpectedCount.once(), requestTo(DELETE_URL))
-					.andExpect(method(HttpMethod.DELETE))
-					.andRespond(withSuccess());
-		}
-	}
-
-	@Nested
-	class TestGetPostfach {
-
-		@Test
-		void shouldHasTyp() {
-			var postfachType = service.getPostfachType();
-
-			assertThat(postfachType).isEqualTo(OsiPostfachRemoteService.POSTFACH_TYPE);
-		}
-
-		@Test
-		void shouldAllowReplys(){
-			var isReplyAllowed = service.isReplyAllowed();
-
-			assertThat(isReplyAllowed).isTrue();
-		}
-	}
-}
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachServerProcessExceptionTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachServerProcessExceptionTestFactory.java
deleted file mode 100644
index 15e4c59df6f344321021502aeb0ff4887b86b2e8..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachServerProcessExceptionTestFactory.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package de.ozgcloud.nachrichten.postfach.osi;
-
-public class OsiPostfachServerProcessExceptionTestFactory {
-
-	public static OsiPostfachServerProcessException create() {
-		return new OsiPostfachServerProcessException();
-	}
-
-}
diff --git a/nachrichten-manager/src/test/resources/BspQuittung.xml b/nachrichten-manager/src/test/resources/BspQuittung.xml
deleted file mode 100644
index 5ef6f03ba16cb71ca6fc4ad8aac9e2c8e5847c21..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/resources/BspQuittung.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<ns2:BspQuittung
-	xmlns:ns2="http://www.akdb.de/egov/bsp/nachrichten"
-	xmlns:ns3="urn:akdb:bsp:postkorb:komm:webservice">
-	<ns2:AnnahmeErfolgreich>true</ns2:AnnahmeErfolgreich>
-</ns2:BspQuittung>
diff --git a/nachrichten-manager/src/test/resources/BspQuittungError.xml b/nachrichten-manager/src/test/resources/BspQuittungError.xml
deleted file mode 100644
index e54e673e0523cc2d18e38ff90e6778d71740ceaa..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/resources/BspQuittungError.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<ns2:BspQuittung
-	xmlns:ns2="http://www.akdb.de/egov/bsp/nachrichten"
-	xmlns:ns3="urn:akdb:bsp:postkorb:komm:webservice">
-	<ns2:AnnahmeErfolgreich>false</ns2:AnnahmeErfolgreich>
-	<ns2:ErgebnisStatus>
-		<ns2:Tabelle>9006</ns2:Tabelle>
-		<ns2:Schluessel>1</ns2:Schluessel>
-	</ns2:ErgebnisStatus>
-	<ns2:ErgaenzendeHinweise>Test error</ns2:ErgaenzendeHinweise>
-</ns2:BspQuittung>
diff --git a/nachrichten-manager/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension b/nachrichten-manager/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension
deleted file mode 100644
index 79b126e6cdb86bec1f4f08c205de8961bde1934a..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension
+++ /dev/null
@@ -1 +0,0 @@
-org.mockito.junit.jupiter.MockitoExtension
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/resources/SamlResponse.xml b/nachrichten-manager/src/test/resources/SamlResponse.xml
deleted file mode 100644
index d28738585aa627bc0bd4e6b7288ff3346ea4029e..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/resources/SamlResponse.xml
+++ /dev/null
@@ -1,128 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Copyright (c) 2024.
-  ~ 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.
-  -->
-
-<saml2p:Response xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
-                 Destination="https://deep-touching-condor.ngrok-free.app/login/saml2/sso/bayernid"
-                 ID="_d75103771f4e3869ca4bf743efb51320" InResponseTo="ARQf371368-b6eb-4708-b90d-e8a9c5fc0ffd"
-                 IssueInstant="2024-02-07T10:27:18.456Z" Version="2.0">
-    <saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">https://infra-pre-id.bayernportal.de/idp
-    </saml2:Issuer>
-    <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
-        <ds:SignedInfo>
-            <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
-            <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
-            <ds:Reference URI="#_d75103771f4e3869ca4bf743efb51320">
-                <ds:Transforms>
-                    <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
-                    <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
-                </ds:Transforms>
-                <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
-                <ds:DigestValue>y8O2/uKwgap3hb7Ym/sn+v0e3l+w0Z+wIFe11xXkSHU=</ds:DigestValue>
-            </ds:Reference>
-        </ds:SignedInfo>
-        <ds:SignatureValue>
-            G4fZCUS7Z+7PwDF7J+ZwXssM+iHBgxt34Uf4U3PWrbaYROrCZFD3hlVwCj35Z7RlQkDBi4q1m9RW6XGGVx2vpUDjT9dTkfbF7tB9PXa6l4mq3RyxuRELMwRpcbnamfe02qwtp0N7n9+gdjTVPb2xTMhp7FVG3OZ46OKwwJIm6jNLE+zVbKkNmxnv8XqGK+FgDS82CCG6Zi8nIZZkR80vHuRnSwrpStiInWSURoIYvG8nQfJ6u6IxbtMkDPtLrQHP6th9NMEyODe4RrjNwH8ERkbBl+rvtz406y3hngOW4uxNSTdQGOWj68t7LSn78S+Zc+5g/8up8gRIY6FWB5QxTl+GINIskcoWEfpyQcY932Jh9jGKFRBj2bcP0xALOeP+LTAz1O3hY0EZD0HpjILNhjp4/4Ki6SSeoVrp4UdEZGPpfFAMXdA9unjQGf5DqT3los5mH+KgkpAQoIU0725tIJuGojigXDIKgbNftB1oXjepcqcWvdnbRZlE9Kk4iU2YcVKGxHtEGi03+Qr2M37SqnooXw94Q0LxOQHU0jaOuw+nA8JbcvbpmHVbh7Qyg6OfrI/g+1pwhaQWrL6zEDDlgF3Fj6QxZGhMviCf43WJd8nPPwLIp0dFxXmbX5yBnpAPC4txJkf4idH8gze054O0Zf9G35vFH8oxELrA+d3qbPY=
-        </ds:SignatureValue>
-        <ds:KeyInfo>
-            <ds:X509Data>
-                <ds:X509Certificate>MIIFbzCCA1egAwIBAgIJAPdFXXarkBN2MA0GCSqGSIb3DQEBCwUAME4xCzAJBgNVBAYTAkRFMQ8w
-                    DQYDVQQIDAZCYXllcm4xETAPBgNVBAcMCE11ZW5jaGVuMQ0wCwYDVQQKDARBS0RCMQwwCgYDVQQL
-                    DANJRE0wHhcNMjAxMDI3MTMxODQxWhcNMjUxMDI2MTMxODQxWjBOMQswCQYDVQQGEwJERTEPMA0G
-                    A1UECAwGQmF5ZXJuMREwDwYDVQQHDAhNdWVuY2hlbjENMAsGA1UECgwEQUtEQjEMMAoGA1UECwwD
-                    SURNMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzDtWAEdC3J9FD+ti1exRhN1lzNgK
-                    WqO2gQNdJvlt7KGHA2VGGO7tqRogTuoqi/ydtiHJ8+lhp4kcWqyfv7i9HXOncvcsRRmRdZjUY2Iu
-                    i6ozJqD5LVm/vP5YfdP7vQPdbqyyfpoJhf3mbMEtdNDdGRnGIPUfDn+CFbo37f9tPwMgf3jgh4gx
-                    aujtLIhhr9gevVTEeZAFu9EvzLNd3kEtRb7MuXqIOdu1rW8HlGYFwwVLqEyBn8XG0QAIfhMmGjFM
-                    G7z+Kco2quwOmmZVzWQfeH/3AlN2KbcPt7j+pl+6Bew2AAivP7O+95YKORqQjTu3rPWMF4txPId3
-                    7MSjoytwBRyd5EACTvhQBOGrDFKQUOx6fTtRc8+7XGVz8MdQaZQWQXXh1ByU783twNdnRSrSVIyL
-                    djiy1uCbjvsSAtbzGBygPIvDo3skCNLNFXsChtHIfFFDK20KPGb0ghEDf2q3hDbFG3ZDGGynZmJc
-                    ZKuZhJqodJ/++sAXADyTJNAPVYDjKCF4ypELp2Eu/p1gaQPJEb74L/ZFZVOEJFyXIiaqB9J+fcn/
-                    biqHHOmcCi8n9aIiNt1fatr1Z4lQRWoGtKaGU0+bzUSH4Bgs2EG4u1CI2MKDWqK2aEsHrtu8tbS9
-                    LrUmDVKtaEUOeul8xWVa036vp/YUIdiJNZSxZG4iTmSOATECAwEAAaNQME4wHQYDVR0OBBYEFFYe
-                    ltslkaolOmcINXQeSe7nURwpMB8GA1UdIwQYMBaAFFYeltslkaolOmcINXQeSe7nURwpMAwGA1Ud
-                    EwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggIBAKqAlXoO41SAiycYUOrR90pfwTCysmbtHF5RWSCM
-                    jF2aCG8URJ7bXwC0lBH8E5zCetFZwdqZziQtxzRkIOfhS5uWbH0RDhwuxZG+5RTPyaHPAZI6e5xH
-                    Du8vHl/VbC3lnL/6K8l+Purr/yo8qkJqrPgThZRL9jBQyYRhDSsJUyIw5zcKKUQC/JWtMQAQcopb
-                    jekCs6xDT1HqIN90Sc/gOfYjNo0dGMNmro9mxcw82Iow18KNVdtEexfD+/6x4NPD61pzuQEe09TR
-                    +Cv3XyzBoGQ/2arijcPnGvth79ffVFtRSf3fSs7wEKV9g3mEWXFDtPBhDj6K0kKU/kJfEZixkXl9
-                    2MY+bmugrtTIrazjtfrgMglIAHu9XCYWd/gef0J+PNfHsxgbTEr3XSC+5/xoFKPQSw3PgV8lkUDq
-                    4mJUKy/q4YmA37XQxourFR5pWvF03YACdtq6zPjtVeI7Cvkte6k0YW5S3cx9RmPv6YZhlaZ5ERpW
-                    Niv6IjokLsvNeemf2PApjO7Q2EDBIoHBYH31wwJSsyRDrSVmbaqLFI15fLXeh2A4YbaBDZdGvDiL
-                    OAk+dG1wdZ2aGw/uNBzMtc8VeKqI1HPcqIluBA3uUPpyLLA+9hDPf6Pp4j0gkXxBikz+/h22bFxE
-                    1HmDiOSkEn+2NmOHuEFeA+D8jsCAL5VJ3emK
-                </ds:X509Certificate>
-            </ds:X509Data>
-        </ds:KeyInfo>
-    </ds:Signature>
-    <saml2p:Status xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol">
-        <saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
-    </saml2p:Status>
-    <saml2:EncryptedAssertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">
-        <xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" Id="_baed1174200b81b1bff3856cb4e6365c"
-                            Type="http://www.w3.org/2001/04/xmlenc#Element">
-            <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"
-                                   xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"/>
-            <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
-                <xenc:EncryptedKey Id="_5a164760d15a61d269e1f7fdd9872a10" Recipient="https://antragsraum.ozgcloud.de/"
-                                   xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
-                    <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p"
-                                           xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
-                        <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"
-                                         xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/>
-                    </xenc:EncryptionMethod>
-                    <ds:KeyInfo>
-                        <ds:X509Data>
-                            <ds:X509Certificate>
-                                MIIDsTCCApmgAwIBAgIUdw/27be5+2vj+MhGtoJjDsMsdDEwDQYJKoZIhvcNAQELBQAwaDELMAkG
-                                A1UEBhMCREUxDzANBgNVBAgMBkJheWVybjERMA8GA1UEBwwITXVlbmNoZW4xDzANBgNVBAoMBm1n
-                                bSB0cDEkMCIGCSqGSIb3DQEJARYVamVucy5yZWVzZUBtZ20tdHAuY29tMB4XDTI0MDExNjEyMjI0
-                                OVoXDTI1MDExNTEyMjI0OVowaDELMAkGA1UEBhMCREUxDzANBgNVBAgMBkJheWVybjERMA8GA1UE
-                                BwwITXVlbmNoZW4xDzANBgNVBAoMBm1nbSB0cDEkMCIGCSqGSIb3DQEJARYVamVucy5yZWVzZUBt
-                                Z20tdHAuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/HBBWBDSrEgdwXkSy15V
-                                00EaVTyLgc4vh/JcDiGIYZSqmcMwBd+B1u36xbdBf/duEtCUymMNP48OMjgFZtR6xn0meuR4NR6Y
-                                kn9mYGdU/GhldGuGv9XLAEAkVuTlo0H1QYyBS/6JwKQoSsHDkJ3YwDwKcyOt7QtpSadRZjQEN3gD
-                                vWoRYjgXTxj2I1ovllmi0zOHsFi5PBIuiPWUdJvBrHxpD/XVS9R/qzJpHPu3bjQ6UVRmhiZCUF7H
-                                5F/PQNwk+qXvjV0ooBeSWWO5hywhk4OP4QEgbYMOSo20YukYX8TJEsum1pwIcQrw7kW4GyKaAycy
-                                Rsa1fbM3tEkj+TiBKwIDAQABo1MwUTAdBgNVHQ4EFgQUfDL/6R33SJodsONCvxKy96AtU18wHwYD
-                                VR0jBBgwFoAUfDL/6R33SJodsONCvxKy96AtU18wDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B
-                                AQsFAAOCAQEA+PCnvSwKU+bArTCIg5lfrwONbzKkjvPUymDNYX3oj1wVEN75hNf0RD7Rr0//ZYT3
-                                Rt0G193gjDcH1gbGIYhMLeGGkxEous2l3O+pRIQRR+hprjr6HzF8IphaJy1RbDwyGsXyLcyOylPL
-                                4cX9IjUdhklHiLZusBq95LSyw7hsCOAL2+vn816O7yv+28EWXXbnP2XEUjW36nxcZvR6oTJUplXy
-                                HRuuJJTsOxGRNuXA3UVgNbkdm1HnoSGpnsGdUKsUFoEmEJkcSdQRwxeH21WzYGOZmKMcvx2gObaS
-                                P8tafWh5z4Jx+Z7z5WP72Jt44/lnVjaV8aGo0KHXwgqQOtYftQ==
-                            </ds:X509Certificate>
-                        </ds:X509Data>
-                    </ds:KeyInfo>
-                    <xenc:CipherData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
-                        <xenc:CipherValue>
-                            ffr9pG/yL4QGQ4o1z/t6HH5XRG8pMHHjzlVTq6uC4eRpVvaNMz8XpUXqNAFGiB0Xbpkm++qOhGsOuz5Wffq5Qo78fMBfU95L1Lk9cVH1pUFfYyz5GV1LqlhStAZrCGHUdv5d0O7JLKgbi45JxxTc7ErAwPlOMqKLs95ZJuhl8Fp9XcYrdzW9IjuwmkB/HyPyjBWV066gaCMLImeBdCzBZc0pxuvH9jq8eX7h1B1eCd5F1LIoj35YDeU3PA/P/E6tLBxdGLFws+nYqNU3B5R2FPPoW+LP9zM7Q+SR20ti1Uh6TEMha05sJjWXFJU78PpJAtEl978ifqqO/23lYXYCrA==
-                        </xenc:CipherValue>
-                    </xenc:CipherData>
-                </xenc:EncryptedKey>
-            </ds:KeyInfo>
-            <xenc:CipherData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
-                <xenc:CipherValue>
-                    YvHcO5br8vWMo/vreVcU8MQylgUmU6vxmvEoUJ07+8kSV0prHD46TtuXHXsLnsYKQMs+SM6bnTWMooNxIy8b0/BvIG4lg/l3m+SwoP56+lOMx26mTEwz9dJT+4BTFH25i3GbWQd86AbD4wT2X9juExE1t6uq1bhACqgeA1erhy/fjTS+1fKKbOTdC0DF35idejruc/YFyV/BNRMHncfj5BnFQFUmXT0b2Fg+WyUAIzflqwXmUhdzmQNl2uqZDL2Vaw4vQp1a9S0ePD3t+QCSGtCYcmqvg+FhooS1KfhqITNinzi07KaQNW6sY0uXpnq3/BGWxXrU58rmU24AQ5ozAgwPfpmOnZhyUURSikvKmvcpD8DPy8jMOxi+rd/tYlxokjPjFSV8ixh0fGZl+7mDAt/YvxBOSSln3nUEMVoKMNgUT3ax6cyUTBXOxt1EMLYuAcHRIBpF2R9MYasmaaR1RntlkKPiomaPdGqIgh1HtkmuwkS6npAH68d0ObD/SpRqu+vPuu++RxHPlbIjShbJWYUJIqPJlhtG7/p9VkC3514t/H1cgxALKstC95OXNH8S6b4m+atl1Wf4PELfHD7lT/QgYHwZk2/xhoWduKc18nauB4kc3v3FZ8nIO3iCgBkXT8qq+/1wJgOnVqAEFWs8w8AC99gHoTgm04q+JUw9XramIXEOdJ10/2Y8HW97XCt53KG+kbaJZe7DISx+2eh79ed3BxEzwgqcXlsrIVcezXWJAl2myFxUggn3c/N1ckgOWFwENOSDFXS6WAtSo/8dlXYvgZTYyKVvVO7l5oq5al2ESrFkHqB3WKu0q9LaWEKw7jMy6FnOawSOjJ2t5o43hfqs9+Wg3J7bgM8YjDuuNZIJ55SO7NIdeeFOkkgGMgcmF0svsxGKbHhdkvqa0t0BLtase7dNIgfWY5laXU7xBn+HEhrz9ZR1xnk8gK28KZwR1wO72rpcV9igsbek5cxEJ/hAk9NSHw7VXAgXZJ6VKZapJfoOqanE50FfK8z0TaoKBUbc1kfOAFnB0n9nUKpUXyyqfiu12w4n3lAs3tBB2S4w3UW5Mef1ZGdF8dqs/T0GUs819vrwYENVUM8u1usP44MnMdTw2i3eo6/VYrCOo1tsa31t46BbLEnercEdGDgpOOBjuda+C3G4NtlDEFzM8rN2FspLS5wphCvKiTB867Q9nrsXOQdDTiwXs2wOpVq1utASdV82Yam1ucVVfriDWlLlhFsFpZnUmwG4zwCPqah2t8inSwx9jramTbJnXpihRw75mFGFC5QAalnV/EAtZ58ecIz4PVTRq4zP7OKtwnN+qIOMm//8AOl6e5H/At7qWB5/dVjw8BUdIxaUF+e33NdQG6x8IEbMhlGFTGCjv5E0h27D/AbqCBU6PKrkGZowZHtKNtz7nITysa0hpyefM0rQkFHwf4NmR8uSHZ9YoT8VLStTtrF6daHSYlUT45EDXkiSA7NCAX8BIDbZNGxPGNCWR3reZxtQoJ89YPPdQngyqMn7sB1T4sP+euWpnAOOF5VDA2xyM2WtPzuKDZFD0XH5r3AqKf2jl+E1/jSBlhW1Y677WVLTLJm7+lMYYLK6YVaSsKQp10lOdhcNSoNF2iWUwmdCTfkrYIqM6Dz6FiYSrg1TTlOJb7Mg/z54eO6utHzIRFepBTL+pu9qP38Y21NtpUWu//jh0vpniXu1rzGQvuiuoNGIiqYA/dL39cpLB5JIwEVWNsnlHvzRcYQnqg2mhdkFMNZPhZwb3f+BV3GNA/dTziazHEgUN5G0esGl85PlZM7oLrPkXe1mYKh3pVRVHx9bScTQ/KR/Dll0NI1d5ul2SZa80Pmj29voelfMUa5Ml5q4zHzXK6N1E70ujMzWWJB025gLIb3e7aE9eN/5SJegL2ctob8uNQCTSouel6ko+Ykw/pstPL8IYWgsAwrckmzNJHasZi9MB9re639Zf+bDvflpigNboH6Jgzs7us5C2dozH1s5IzGP4XzgeALu8XP/T2coQxhj9xfaAJFrtqWRse9MM9gKIWCBEIzzIPeMa0+S7QAKAd7XRS/oZSDeqUFK2jRkrpbEnUxRErfX6lmHWlaY4CU8XKbSYU13LkuJcyzCm9EN/BU7f5cOwaVwSLMfOQeOx0GwJ5KRF4F30pVQIKfQmXt627TEmrutHr2mIgBLcte+S052JdumcRFMnlNLlmpl/rnOrU0bBeNDtXHQuYCWwfgiyZ47J2OZ+R68v0lA8mSdHFtJ81mbGnYQZn6PnZ/gbKz8uTu5WZE6CQ+n8IY6uvd8B0EYOjaoJK/FTQRjnYe6cBWTQFfmFzH441Ao3vcfKh6co4d5Ec1L9PXQWXidhCv4aJw1G06zgOTIcLCqvE3rbBpYOFUOmKlQbBmaIiKWqG+Xqk34jbQgzfHmcFO96sqh6B64/OzjPdjQupzCTM9hBNwSUABWoOAb9Yn0wtCUU5tRMTXf2DessFKbm5Jygvbh7KrBIQX3SGLQ1sHY+MYVbDpRTyi6/cATCCSWcekyT08mEh52KDKbrTR4CFdu2B7wsIqKxoiW4XiHOOc7DGtgVaCXgoce0nd9YXrtXbIjriMddx7wo/A5xvQbTOyaBuL/j3893Ny6eU10c18p8tZCzdBO1VOWH+R+8TkdvhkA995xzrdvjw7RoSdO7eqdyiOqkHBJGAp+OVSMWf0+/kHKRQf3LTT+CcwYN+7mx+Qz6Uw6Squ6/9JsxsEfIQ3VRsa84hUjcmmKf4QTpzy54RIteqPZc0kNQPobpKmvyWUUjldV0jgYi98XfErrdLQF3gyU/TG0kOsEPjuskIHoLEEka+nGXOjbtxj7HZe7onJ54kIluMkHeKfLWOMoZ2Qx9tqYMoGtbvLf6RrKh7METcaenirAS0waZfYWbIKS/XQQnlG0kWmK2VbUtKpKwAkjlEFEkYo8NtYRTqB1gYp7iyOhOcYT8Hdd6y+276P+sF+FuuXBAd1WJ8GWosOGcBOSMlvbxOyuaa58K10CUcBu3UNYMXfbifsNunrPPaJClyHK279gtweail/SVEc9XoyUh2uP/sL2eU3edeOBnscRj+0TXCkr+8auzW2BlMHrzDniQBXnFQelm94yDB4Ue3BfqKlkPmfC9QO+X/Jsjl6RtIQ6kqvwz9ZQ9uzFi4ZS5xd0I/IBp621GEXFkqIZhx13ohoiGa1KlhXS1AkDSRptzy7DlkW/ZDR3rh4WKGYsIF7/09WGtSPzicF8E3Mc9BS1OBksTuDuC1ayo6o0qxgEED0s3tNKE4GMQ5Kr9glfvoTbkMtgJst2R+Tq0/HozNCp5Dr4cqTcOZwOTtyPtZbdmzmdfT66mkdC4P1e8JPGugtHv+5HC8u0PSyBQGEewIo7g417mxC/5mf84Cp+1a/TLTe5mb4xqycaUexYM8+jLy4YdStpvR0NuTcx3ZzTwsi357S3NfACfLnU2BnD5WyvID9Y3uNd7Mawa4b+631WfuMdFWBOa3qQYifzdnzo98CpkpatCn5HSse87LqTxZ8Cm8ziu42g/uKcHuvGJXDzcFSD4wk0qclvpcdrSfhRZfU9H/YFK4JuW6q9aAvL24DgdD9mBDI2Gz94xFwu7u9iMivTQXEC5vgHD2lvdH9XtnpHxElqTBN4whFTujk9ZhjcEY50ntoaplQOs0N3S9XhQhLMjNz+g6CvY77jTq+3pdoGffuoecbD/hOWZqebdqaC5Oa7ytnH/YY2J6L3tCTaFloqNOetWvre3uaz5aNh4i6F4f4Z4CkTWGksHPcKdukMQDMNb0gm+JiWt9Wa2bHhQ1KmK+XQHZEIEM6GAhzIDCk0kMeKiyyE3zOwIJomqjHZVb5O4GmpJ1oONZzBSyvdBusaRYl1r8MT5BWgh0f8l34wc5pMxmvZUT11hZPDzawPfKLYCqHDAPvAEOR7JDkOBb3X8ILMRUIGslzzu17y0gP9qiOOuwadoyTcTHxvPJaEc6lQYn3j9E44C3TxDGpNOHl9rgT0EkRT4o2QNLNXXAoKPl2lFw/8goob9s73dMqtzeRwVVJdoC9kGv7TBzDJcs6yIXMM9EvExeuotANi99JdL4xLUZiRrtcv3+fJnIsJPdgczGYV/9ScODFIsa8N3fNFiIOe9b+5gPDwutGVYoSf2Fs+mzsbrxLv7/D+7vRAQxlya9WCvWtw8YjkTaBTEX+y8FUOHtHDBczu4XXEHaznZ1chnV/Pb5FkX78BiEO86ai1dB6v5+F2J/MLdEWhqEvEW8QYAPB6AYwfdEeVZX5igCF17mqbCqS/sg3z/hdW0iLSnjVeYqHXwTHbuFWM/c0MLCddnqvO49vZacWzXHk86wRyghbQTJUx3HUa/mJDGACZysvHLGzv2qjmlsKviokYLWA/Wsg2G1UV3eAmVq7VXt9s3v8nFvTRyqeWeHIkBpw45NFOR/H1sUjWAklBWOdiT/db0y6SOCvaTxVWqnk/6nL+/7vhhF3Zp9HrImt8+lk2vpeAS12YD8mHS/LJPWY+nLBWu1t0yI4aca70gJsBGJI5NvZbDGGe6f5SGfxbVHCr5NS/cBOUMOo+Oh87/IYv2XGZPwvD+7S9b84VnZVXdj9lQh0Et+v+zbaRkB4lquJMoGnF5UwcLtV0/RQybThfIpOYjNMs1LuW/6jPS6PCKlxeUGNwDvlKDCQlDhZkAQ1PPVPMlhA7QlMceaSYXnRLzI+IHJBQb6freSwWF6zBHYFI9H39CxxUUjIiR5sv5ViOi8tO5RgHtF3bsj3i8yQS43SdFTe0C4cxIuBuQMuSz7laE8/gZl3yGo7Wjgy/3RknSjla2sUt0d6PLQ2QQndxcWHKCNt19i6sYTttLqrywCHrjSyYwEBlWEC2nioEDONieaFc3iticbgSD/a5xzW9aefnQVFZWCRWkP0wVtBkf/tGtHl9PXau4+TV66rTq5X9aY3jEeU83OCnsuY5zBHFm3S5blMlvA+ebCcEWhyHDVwLfI7FAQ7fmcz3xO9cQf0waI6CK70yV+poRFAKDiCD1HELm6ij1KR/y2uWPF3LZ5P3pMGTr2W5hnC7Kvh+yqGvaID2L1athALmORgJHv1CDQzx0AzxfGMvUkgtQq8bCdjf0XvX1H4SKiPylc/2AwFM1PwS8eR429YnIMwJ6yyAQ68u5VyEGaFMdyrXX3I/vYStWcuUBrsN4oheWxIcNVKO1fFC0f6O0N5bRf8Kjyz9siRZK3z+vsU/zD1l6ShheQdoDeiXQKYgv91C7X3dJEx7fo60lRHVurySIUq1J5omLBMSl8b8F7Eqw1jTmZlVvSHcgzulhNYbv88MA1reVj6RQOfRA8LfaNID/RA89xAPYuEadd92uAjbQqExObqj5ELcNmhqOX/JrB+hn2aef3pWzSJmy98C9FdJuvF2l2XnZ5sDS25I9hnuCRAHeyHoAk4/VfjqEIjTN8BG1b0sTjSwJFBlHJCwBsKaaJviwXl5qynN1Z2f0IjoZ4gzwl9QDtcZDqYxk+qxbWDFqc9Nz/dhFLjGYTpX8VNEedNaa4/c/wTOpq7KioMEzASNlfwoIk9Ha6Xpph4PDoumFoeE6ONFEHNK3LgPDzEDfjj8HykTkq/VZIA7uN4BaaGFAi5Ah66FuVFFT7Mp9vUMvCfSH/Wdx/AYijS5WNBULlDpLJeLQ79oJfZ1ItrBOfD7oBSt5hIK7qoVM2aCMXwdOVSE6M34SJfgMPC9MCfcJudvQjDvYX31ZA42ZGGDgD4Iab75KMOXMdOR4aqlxCTb6FoLqqahzFTh6bMWtHEdqCz4uTVeHcH/FGUC/2j1BQE5FEKg3EIKl0uja5ztpSZa+3e59cmOHAPcyhlYE9ov+tU6GVzThHqBGs9Wd4zw6oNMvBt+YbbepNJotoU7YtuST1Z5mZIjpJaD+kDHqmmLyDYxlpWaHJFsPETkRsGj1Ko6lzgz1NYVMuejwOw2EwUtWQ+YKy7c3Y54dVk0hWD8oRaqOo8HNQ9YKURUjeIXXZ8OGst6WE5KtvoV/ga8VZQ8gE8SRc/XEWdXGrdDKc8tMxnVN03pSJQGIYquLQGU7QwUUftlJ6MYA8jgQFpGcW0FVBmsxl03zyxSL+FemGrtEoVwAOlfAiLaHuLV2QZ84j+dJAoWjdOFIF+uXwOzyeQNMPTwFg+ivSAkE9D23HFQJOnC34NYENFHBLCZfK+oICubzmXnFKHbLJrlNvlvbCONp+LiFK2iXMda3p8oGojI5o/92vlxF4mn5ZH4JZ8jRX6Xalj18Cw6H6j8UzO6w4cI5OV0RvFEKOwKmGvN/W7OvdHPMBMmg1oxFhAX6p8KdyULTdU+1C4JkX7mBND+Y5mjLv4/M3GIzyEcwyL6sxVTz0aqkKSCltyedUU/g9JmiuEp11d2Pk0skRo1o/gqPdJ5lbVG/fJXGcvxG6sIhAGcCOLIjHG873yWf2rJY7RRWk0W8lX5IjgvmDIWY9Tf8W8dNUWoRTbJ8IzAqL9YtYyOKDt4W8fdXKSRP+cljxQhmHmXTzyJ9mQkGpy0TWsf7VE96ki5aAhbRikjQ5mYN6xLyiLC1YKz8c/tZOb0bPH897bhFgjRHOtfzRbRm9p/Sqk4AMsStChqcVkZDM2bz3WOjNpBLI0/K8OCd+PDT+xg9ehjzBcM2WNjspKmch9rK6T58YRulEmbQbc9QT1+A2lPTnb2aXccptRrP+CwkQ2bsT/OMbUnE3NHvw0/G5Z3pSU0Qy6L10+lJ8SXzFGf4XTPoLuK+fNKj05IWFxJiHINtjo3WbwLdKZp8Kd97X+TW+z7XpP2qKqaRMfeYwzoc56y7w1NnOGzH48qicaC+DXipszT5mYmW6e1bxjwqNpo+E1JmXZQR/LeFi84XEGUYNxaaAciQfRX/6jO4b81TmdvWjyADWHwMonDXXHjO4YoSbh1M6pRKR2Psuw066/O/WvJh+WrIhlsJC6D9W2HtDK8gIU2F8SrpXOxd3hlntVFYsMo37s6kPAtFm2hu+eWN+NtX9/EO8psgAdiXvMNczCSFxV9cdEEXfDHHbQBmH/g+XilwtXYcjoZas9LqLS4xBSU4vLMnCqrtQ0qauh2g52wDFz6mAj7Z6OydXcVDwjK4QD2P2zfAYsfOqIhhg7xEzDJoumTy+eRbkGbFHraOet+LF5N8lKKplstYqiVamzJ56geEsZ6QP1NYv/KXdKk+OjtRC/KdoOZjrBXsoR8/CS8Az6JV/DyGqbTkwlo9gA5hnKaVKtRy9q7uNASl9asjj82WN/0VYIhMfLoR1CbW+vUrOSbAh/ilqbcq3HJ8c5+E2HuhKIbYRJRMQrfJrxKk7xKTRAgeSbA5dRzQACm31Ch2FSvoS5KnIpYXyqm4828lGGNApJiZ1aU0Q2mLUI/ZHAHrzMacshZtckhWG9n9MKIcDc8ld0gl7Tl5QFMOswgHvWyzuEqgTnuBxJqfhTprv6tbLJ4xcpNz2/v4fHE743YuVN5/lJG0SEfwUUq53MtXUqII9PRcjnTAN4TT3Y+cz6QWaW/l/tW0uSvniLha36gw3WlfA5qWdBuwE2uR0XMyYXE5d7WEkHUnAYzzJsRqrvhkqNwQO0V1jF14ApnUltMxqK3pbyWO3tw1o5+PIjcvKFeOFYCUucRa2lS0h4peA8FdiOcMkUabgHdtsAJuUrlxa+Vi39Y6PVg24XRyupLFIy80QmIF5H4GUY/aW5Ig687karDPyHVnr9M6PEJ3q3acV4yKwZSMBvlxqlvUFYgLm8NELucYtQvyI7CYRDl6LvSpdro+FK9IJSaOLXFghk90IlcJz4Ic74UY8a8+l+8tQKEjhVzFeYbLvrHGTv5A0OAs43fxIxAe5q/iqRFZUAXE+h0PUfky5af3xo/7zZXGhnzfz1Um8L58WUa5hTavUhbD0+zRqiajkJ7nyqIKj5b6nRTzHwG+lr7bxs5P5SPYycAoDdEqjT3TUqY3dz2tONxBh1lU7WX3BTxfO/WSqi0Zz+sEAOrvGu8io4SmIM4/Ka5RTXQscbG1I04g28x0fTm6KSXDFhAcNsNw0Mw8o2u5Lxa42szqPdapNqo6lrOP2N6RQ0pzOUJ6d/f/4Yqt1/r6XtoTqCPE70IwyZvaAWjqTX1XoLmvQ4uajXSpxDA84kZ1fFNd96Y892wh4ygX6RMg6vUd67kkRKcrmAckL8UmAklWAJryol61L8fPBt8o32hDuVCE2itZBjVn/4vEZVMARe0U7X/NOb6NDdrbP8TCM4g4+XeV7Jej+MnqvdA0c19fSUqxU1fhrSQL4cuNcdPKbdPSyPzptcmrxngxL9Yotv6/Ah2c4kL8dt1m7uQE8cdunn3qMB176itdJQu6lEF3p/gg/kuBO70VtY6gVISN1cNPnv8EiKYKzLhCf89np5f/fCDWOhciRKDwWRzULf3jZvHDJ8cd25p5JA3UppQIqy/8C9g6UrJwmYWZ8f8z0+sGCY25gGwsQs5UREaq9GQKE//vFneh09XAVdDhzDkqspkWjL6RmLDWdIpttc0N5NTdX2DdqR9JVikvEkg9OBHpYxkxYr0RQMp5bphj0ee6KsYcbZ4x06gbJFeGSgKZjuR4EpDJ8yPJXFFxldxmUtsrCMr/z9NA9olxU7+l4OD+dXd0AEAfMtpIK+g98cuLM0HNfslZ5/YgWBxFF2zmKJFunA9bb/agMyUR9AGAVr/HER9lxJEwdbwKtHQy9vwiMF8G+452JLK/t0/j0mvspENFA9z2ZJPL9jFbSRuF34ppQ3mV/E14IZeGP29NIv2uOHOxL1uzKwNydi1YbLIJRDE25zm0Zh/ulUBJWEnMqUfmzDqo1V8qy4VxfXeym4xccedSOiEyyLna/lP08giG6hUmQLxnvzrMHK2AEe+ggm3RGoS8Rown66LX+See1iohZqnbqxISRf6rNBpM45XPvxph3Q3pKcjDvoeq9eaUFSA92VfxpnVBO/tXtiQGBLYuBSZpqxTWd6G4RP/PFdrmUOhVkRsUXBufoj2MKSgNx6Ab+KMUg5qY52yrkYGKt8O6CubJt0/GJnIlCRODd3ZdcuCNaVWx2PN5+LK6Jy4jEFKtw/f+Ub+piXcpBL02TiO1SCI7qU0MznFxbs5CYrYOo5uQe/CaxWIN8Pq57WuPJ4UT+FHcRW6eiVYxa5hQTAf/ai3XsH5xP2LT/CWdWB175xA8uN8iZ6ai3yJysIENsHcRD6bpGEZ6gc+IIFu+JEhm4zMxIhu9CqjscKnyUIIzasUxdo2Ioa6hZaq4exO0dC/5gQbL4vR23nf5/PfxEzggWNQyDhM+UupTXtBIO2yqV6/wotUPibw5rOcqU+Amua0hAt+7RVXHwvfnFVfCo8E6mdD8wv8xSK2i1mElL9KiW/eVZWBRNE8gSBYQ8DpaNF193CPDyWKxPHz3Hg/aehKa5P4GPE7ugkqhjsYVMUo9Pvq7wXrjAs6U8EKDEh9zsRfFyg91RJaRSqSMNaUbuTkqKYq7KalV3WErKQRL6SxCZa3xGwJ8H5t5bYU+J3lCbtQjtDZ8O66PwKPPvyx1zuiiMjQcwv+JNGNIlFraoEgz5MlGkrBEgIRGXZDuS6ZVAa8L8lqE+/en4pHcj6HNlKtriDeosSDduttT+zi45k4bkgXWgO0a8d7gdqZ3UJR29T2KFIOSrm2Eqat9SF4S8lc33+LUUePfo82x/nQilk3+Eu+HhupyjfM5PGq1dglQ4wG/lJYazW0LlJ774pf/fwHYuPGjVC0CgsOjDzN8o2F6koQV+o90KCDPNkmqpGuAx8+43UGbtxxZGt0OpiFwi3tp8JyYExjdfni19OpI6SI48mM4pZCQXpkhvbZnbvD9hHigF+ERZJfzZZRGExPctz5QL8eQNAFI/KuL4DC23teZmSi1RNxU26PZTrfmtXwgciXXMyvm8j2ACq5n3+x4PyKdvh+SAVEvOQpc1SO7JDZf4+1L+fmB31RWMENRock5xOJ6H2UdMncn+nU9plECElvoLRnImET+mfWHT1fAfrR6iA1Yks9UXu3F2KHIc/wAeChopbz8RCkHQGxOQEVSbujBdd/Hjod1X8g4kF4MsefT+gd4n0UGoUgd30zeGmabC7h7W29PhizM8IZvfZbzVFdLPLU5X8s+wmdN65Woyld4B+BVEQ+w1GA4J4K6WVcSki7AeL4Gv6v3DXYBgdHl5aHXI1epDe0MxtdxvyPhHxoO3pHodmCkdJ1udrGu1167EDHXzknCB5r5U9cxI/UFt54Xxr5LPwrfONSxhMj3DqfGLSQQfxf2cSWWFig3jGf2mOfQ+XzH62mfn3Dv0KSS2M12rilop/c5iFK5ApaiFse2g==
-                </xenc:CipherValue>
-            </xenc:CipherData>
-        </xenc:EncryptedData>
-    </saml2:EncryptedAssertion>
-</saml2p:Response>
diff --git a/nachrichten-manager/src/test/resources/application-bayern.yaml b/nachrichten-manager/src/test/resources/application-bayern.yaml
deleted file mode 100644
index 765940c40972f684097389caf6331114bfbdf1e0..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/resources/application-bayern.yaml
+++ /dev/null
@@ -1,15 +0,0 @@
-ozgcloud:
-  antragraum:
-    url: https://dev.antragsraum.de/
-    entityId: https://antragsraum.ozgcloud.de/
-    metadataUri: "classpath:/bayernid/metadata/bayernid-idp-infra.xml"
-    decryptionPrivateKey: "classpath:/bayernid/bayernid-test-enc.key"
-    decryptionCertificate: "classpath:/bayernid/bayernid-test-enc.crt"
-  nachrichten-manager:
-    url: static://localhost:9091
-grpc:
-  client:
-    info-manager:
-      address: static://localhost:9091
-  server:
-    port: 9092
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/resources/application.yaml b/nachrichten-manager/src/test/resources/application.yaml
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/nachrichten-manager/src/test/resources/bayernid-idp-infra.xml b/nachrichten-manager/src/test/resources/bayernid-idp-infra.xml
deleted file mode 100644
index ec1ed7ca7099b8be7a8cff7448a740f0b9404c34..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/resources/bayernid-idp-infra.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><md:EntitiesDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata">
-    <md:EntityDescriptor entityID="https://infra-pre-id.bayernportal.de/idp">
-        <md:IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
-            <md:KeyDescriptor use="signing">
-                <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
-                    <ds:X509Data>
-                        <ds:X509Certificate>MIIFbzCCA1egAwIBAgIJAPdFXXarkBN2MA0GCSqGSIb3DQEBCwUAME4xCzAJBgNV
-                            BAYTAkRFMQ8wDQYDVQQIDAZCYXllcm4xETAPBgNVBAcMCE11ZW5jaGVuMQ0wCwYD
-                            VQQKDARBS0RCMQwwCgYDVQQLDANJRE0wHhcNMjAxMDI3MTMxODQxWhcNMjUxMDI2
-                            MTMxODQxWjBOMQswCQYDVQQGEwJERTEPMA0GA1UECAwGQmF5ZXJuMREwDwYDVQQH
-                            DAhNdWVuY2hlbjENMAsGA1UECgwEQUtEQjEMMAoGA1UECwwDSURNMIICIjANBgkq
-                            hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzDtWAEdC3J9FD+ti1exRhN1lzNgKWqO2
-                            gQNdJvlt7KGHA2VGGO7tqRogTuoqi/ydtiHJ8+lhp4kcWqyfv7i9HXOncvcsRRmR
-                            dZjUY2Iui6ozJqD5LVm/vP5YfdP7vQPdbqyyfpoJhf3mbMEtdNDdGRnGIPUfDn+C
-                            Fbo37f9tPwMgf3jgh4gxaujtLIhhr9gevVTEeZAFu9EvzLNd3kEtRb7MuXqIOdu1
-                            rW8HlGYFwwVLqEyBn8XG0QAIfhMmGjFMG7z+Kco2quwOmmZVzWQfeH/3AlN2KbcP
-                            t7j+pl+6Bew2AAivP7O+95YKORqQjTu3rPWMF4txPId37MSjoytwBRyd5EACTvhQ
-                            BOGrDFKQUOx6fTtRc8+7XGVz8MdQaZQWQXXh1ByU783twNdnRSrSVIyLdjiy1uCb
-                            jvsSAtbzGBygPIvDo3skCNLNFXsChtHIfFFDK20KPGb0ghEDf2q3hDbFG3ZDGGyn
-                            ZmJcZKuZhJqodJ/++sAXADyTJNAPVYDjKCF4ypELp2Eu/p1gaQPJEb74L/ZFZVOE
-                            JFyXIiaqB9J+fcn/biqHHOmcCi8n9aIiNt1fatr1Z4lQRWoGtKaGU0+bzUSH4Bgs
-                            2EG4u1CI2MKDWqK2aEsHrtu8tbS9LrUmDVKtaEUOeul8xWVa036vp/YUIdiJNZSx
-                            ZG4iTmSOATECAwEAAaNQME4wHQYDVR0OBBYEFFYeltslkaolOmcINXQeSe7nURwp
-                            MB8GA1UdIwQYMBaAFFYeltslkaolOmcINXQeSe7nURwpMAwGA1UdEwQFMAMBAf8w
-                            DQYJKoZIhvcNAQELBQADggIBAKqAlXoO41SAiycYUOrR90pfwTCysmbtHF5RWSCM
-                            jF2aCG8URJ7bXwC0lBH8E5zCetFZwdqZziQtxzRkIOfhS5uWbH0RDhwuxZG+5RTP
-                            yaHPAZI6e5xHDu8vHl/VbC3lnL/6K8l+Purr/yo8qkJqrPgThZRL9jBQyYRhDSsJ
-                            UyIw5zcKKUQC/JWtMQAQcopbjekCs6xDT1HqIN90Sc/gOfYjNo0dGMNmro9mxcw8
-                            2Iow18KNVdtEexfD+/6x4NPD61pzuQEe09TR+Cv3XyzBoGQ/2arijcPnGvth79ff
-                            VFtRSf3fSs7wEKV9g3mEWXFDtPBhDj6K0kKU/kJfEZixkXl92MY+bmugrtTIrazj
-                            tfrgMglIAHu9XCYWd/gef0J+PNfHsxgbTEr3XSC+5/xoFKPQSw3PgV8lkUDq4mJU
-                            Ky/q4YmA37XQxourFR5pWvF03YACdtq6zPjtVeI7Cvkte6k0YW5S3cx9RmPv6YZh
-                            laZ5ERpWNiv6IjokLsvNeemf2PApjO7Q2EDBIoHBYH31wwJSsyRDrSVmbaqLFI15
-                            fLXeh2A4YbaBDZdGvDiLOAk+dG1wdZ2aGw/uNBzMtc8VeKqI1HPcqIluBA3uUPpy
-                            LLA+9hDPf6Pp4j0gkXxBikz+/h22bFxE1HmDiOSkEn+2NmOHuEFeA+D8jsCAL5VJ
-                            3emK</ds:X509Certificate>
-                    </ds:X509Data>
-                </ds:KeyInfo>
-            </md:KeyDescriptor>
-            <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat>
-            <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://infra-pre-id.bayernportal.de/idp/profile/SAML2/POST/SSO"/>
-            <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://infra-pre-id.bayernportal.de/idp/profile/SAML2/Redirect/SSO"/>
-        </md:IDPSSODescriptor>
-    </md:EntityDescriptor>
-</md:EntitiesDescriptor>
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/resources/bayernid.p12 b/nachrichten-manager/src/test/resources/bayernid.p12
deleted file mode 100644
index fa82ce9007cc50831496073cdb03d8b6a92b5ee4..0000000000000000000000000000000000000000
Binary files a/nachrichten-manager/src/test/resources/bayernid.p12 and /dev/null differ
diff --git a/nachrichten-manager/src/test/resources/junit-platform.properties b/nachrichten-manager/src/test/resources/junit-platform.properties
deleted file mode 100644
index 1cebb76d5a58ac034b2627d12411d82d1e85821e..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/resources/junit-platform.properties
+++ /dev/null
@@ -1 +0,0 @@
-junit.jupiter.extensions.autodetection.enabled = true
\ No newline at end of file
diff --git a/nachrichten-manager/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/nachrichten-manager/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
deleted file mode 100644
index ca6ee9cea8ec189a088d50559325d4e84ff8ad09..0000000000000000000000000000000000000000
--- a/nachrichten-manager/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
+++ /dev/null
@@ -1 +0,0 @@
-mock-maker-inline
\ No newline at end of file
diff --git a/notification-manager/lombok.config b/notification-manager/lombok.config
deleted file mode 100644
index d07dd9b0e2b0281fbf514a968b9451cb6af62f93..0000000000000000000000000000000000000000
--- a/notification-manager/lombok.config
+++ /dev/null
@@ -1,30 +0,0 @@
-#
-# Copyright (C) 2022 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.
-#
-
-lombok.log.fieldName=LOG
-lombok.log.slf4j.flagUsage = ERROR
-lombok.log.log4j.flagUsage = ERROR
-lombok.data.flagUsage = ERROR
-lombok.nonNull.exceptionType = IllegalArgumentException
-lombok.addLombokGeneratedAnnotation = true
\ No newline at end of file
diff --git a/notification-manager/pom.xml b/notification-manager/pom.xml
deleted file mode 100644
index 1ef864cb4499d1c16cc77ef905d257937e4994a7..0000000000000000000000000000000000000000
--- a/notification-manager/pom.xml
+++ /dev/null
@@ -1,159 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (C) 2022 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.
-
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<parent>
-		<groupId>de.ozgcloud.common</groupId>
-		<artifactId>ozgcloud-common-parent</artifactId>
-		<version>4.0.1-SNAPSHOT</version>
-		<relativePath/>
-	</parent>
-
-	<groupId>de.ozgcloud.notification</groupId>
-	<artifactId>notification-manager</artifactId>
-	<version>2.6.0-SNAPSHOT</version>
-	<name>OZG-Cloud Notification Manager</name>
-
-	<properties>
-		<user-manager-interface.version>2.0.0</user-manager-interface.version>
-		<ozgcloud.license.version>1.6.0</ozgcloud.license.version>
-	</properties>
-
-	<dependencies>
-		<dependency>
-			<groupId>de.ozgcloud.vorgang</groupId>
-			<artifactId>vorgang-manager-interface</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>de.ozgcloud.vorgang</groupId>
-			<artifactId>vorgang-manager-utils</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>de.ozgcloud.command</groupId>
-			<artifactId>command-manager</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-		
-		<dependency>
-			<groupId>de.ozgcloud.user</groupId>
-			<artifactId>user-manager-interface</artifactId>
-			<version>${user-manager-interface.version}</version>
-			<exclusions>
-				<exclusion>
-					<groupId>io.grpc</groupId>
-					<artifactId>grpc-core</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>org.jboss.slf4j</groupId>
-					<artifactId>slf4j-jboss-logmanager</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-
-
-		<!-- Spring -->
-		<dependency>
-			<groupId>org.springframework</groupId>
-			<artifactId>spring-context</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>net.devh</groupId>
-			<artifactId>grpc-client-spring-boot-starter</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-devtools</artifactId>
-			<scope>runtime</scope>
-		</dependency>
-
-		<!-- tools -->
-		<dependency>
-			<groupId>org.mapstruct</groupId>
-			<artifactId>mapstruct</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>commons-beanutils</groupId>
-			<artifactId>commons-beanutils</artifactId>
-		</dependency>
-
-		<!-- Test -->
-		<dependency>
-			<groupId>de.ozgcloud.vorgang</groupId>
-			<artifactId>vorgang-manager-utils</artifactId>
-			<version>${project.version}</version>
-			<type>test-jar</type>
-			<scope>test</scope>
-		</dependency>
-	</dependencies>
-
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.jacoco</groupId>
-				<artifactId>jacoco-maven-plugin</artifactId>
-			</plugin>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-failsafe-plugin</artifactId>
-			</plugin>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-surefire-plugin</artifactId>
-			</plugin>
-
-			<plugin>
-				<groupId>com.mycila</groupId>
-				<artifactId>license-maven-plugin</artifactId>
-				<configuration>
-					<mapping>
-						<config>SCRIPT_STYLE</config>
-					</mapping>
-					<licenseSets>
-						<licenseSet>
-							<header>license/eupl_v1_2_de/header.txt</header>
-							<excludes>
-								<exclude>**/README</exclude>
-								<exclude>src/test/resources/**</exclude>
-								<exclude>src/main/resources/**</exclude>
-							</excludes>
-						</licenseSet>
-					</licenseSets>
-				</configuration>
-				<dependencies>
-					<dependency>
-						<groupId>de.ozgcloud.common</groupId>
-						<artifactId>ozgcloud-common-license</artifactId>
-						<version>${ozgcloud.license.version}</version>
-					</dependency>
-				</dependencies>
-			</plugin>
-		</plugins>
-	</build>
-</project>
diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/NotificationManagerCallContextAttachingInterceptor.java b/notification-manager/src/main/java/de/ozgcloud/notification/NotificationManagerCallContextAttachingInterceptor.java
deleted file mode 100644
index 5c95757fd8585ad442a672faaadde129545044d8..0000000000000000000000000000000000000000
--- a/notification-manager/src/main/java/de/ozgcloud/notification/NotificationManagerCallContextAttachingInterceptor.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification;
-
-import static de.ozgcloud.common.grpc.GrpcUtil.*;
-
-import java.util.UUID;
-
-import io.grpc.CallOptions;
-import io.grpc.Channel;
-import io.grpc.ClientCall;
-import io.grpc.ClientInterceptor;
-import io.grpc.ForwardingClientCall.SimpleForwardingClientCall;
-import io.grpc.Metadata;
-import io.grpc.MethodDescriptor;
-
-public class NotificationManagerCallContextAttachingInterceptor implements ClientInterceptor {
-
-	static final String KEY_USER_ID = "USER_ID-bin";
-	static final String KEY_CLIENT_NAME = "CLIENT_NAME-bin";
-	static final String KEY_REQUEST_ID = "REQUEST_ID-bin";
-
-	public static final String NOTIFICATION_MANAGER_CLIENT_NAME = "OzgCloud_NotificationManager";
-	static final String NOTIFICATION_MANAGER_SENDER_USER_ID = "system-notification_manager-new_vorgang";
-
-	// <A> = Request, <B> = Response
-	@Override
-	public <A, B> ClientCall<A, B> interceptCall(MethodDescriptor<A, B> method, CallOptions callOptions, Channel next) {
-		return new CallContextAttachingClientCall<>(next.newCall(method, callOptions));
-	}
-
-	final class CallContextAttachingClientCall<A, B> extends SimpleForwardingClientCall<A, B> {
-
-		protected CallContextAttachingClientCall(ClientCall<A, B> delegate) {
-			super(delegate);
-		}
-
-		@Override
-		public void start(Listener<B> responseListener, Metadata headers) {
-			headers.merge(buildCallContextMetadata());
-			super.start(responseListener, headers);
-		}
-
-		private Metadata buildCallContextMetadata() {
-			var metadata = new Metadata();
-
-			metadata.put(createKeyOf(KEY_USER_ID), NOTIFICATION_MANAGER_SENDER_USER_ID.getBytes());
-			metadata.put(createKeyOf(KEY_CLIENT_NAME), NOTIFICATION_MANAGER_CLIENT_NAME.getBytes());
-			metadata.put(createKeyOf(KEY_REQUEST_ID), generateRequestId().getBytes());
-
-			return metadata;
-		}
-
-		// TODO OZG-1974 requestId zentraler erzeugen
-		private String generateRequestId() {
-			return UUID.randomUUID().toString();
-		}
-
-	}
-
-}
diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/antragsteller/AntragstellerNotificationEventListener.java b/notification-manager/src/main/java/de/ozgcloud/notification/antragsteller/AntragstellerNotificationEventListener.java
deleted file mode 100644
index 49d2abcf96139ea72e26b77c2666bc612d8e38b7..0000000000000000000000000000000000000000
--- a/notification-manager/src/main/java/de/ozgcloud/notification/antragsteller/AntragstellerNotificationEventListener.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.antragsteller;
-
-import java.util.Objects;
-import java.util.Optional;
-import java.util.function.Predicate;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.event.EventListener;
-import org.springframework.stereotype.Component;
-
-import de.ozgcloud.command.VorgangCreatedEvent;
-import de.ozgcloud.notification.postfach.PostfachService;
-import de.ozgcloud.notification.vorgang.Vorgang;
-import de.ozgcloud.notification.vorgang.VorgangId;
-import de.ozgcloud.notification.vorgang.VorgangService;
-import lombok.extern.log4j.Log4j2;
-
-@Component
-@Log4j2
-public class AntragstellerNotificationEventListener {
-
-	static final String FS_FORMENGINE_NAME = "FormSolutions";
-	static final String POSTFACH_NOT_CONFIGURED_MESSAGE = "Postfach is not configured. Antragsteller notifications will not be sent.";
-	private static final Predicate<Vorgang> EXISTS_POSTFACH_ID = vorgang -> StringUtils.isNoneBlank(vorgang.getPostfachId());
-	private static final Predicate<Vorgang> EXISTS_POSTFACH_ADDRESS = vorgang -> Objects.nonNull(vorgang.getPostfachAddress());
-	private static final Predicate<Vorgang> IS_FORMSOLUTIONS_FORM_ENGINE = vorgang -> StringUtils.equals(vorgang.getFormEngineName(),
-			FS_FORMENGINE_NAME);
-	private static final Predicate<Vorgang> SHOULD_SEND_NOTIFICATION = vorgang -> //
-			(EXISTS_POSTFACH_ID.test(vorgang) || EXISTS_POSTFACH_ADDRESS.test(vorgang)) && IS_FORMSOLUTIONS_FORM_ENGINE.test(vorgang);
-
-	@Autowired
-	private AntragstellerNotificationService service;
-	@Autowired
-	private VorgangService vorgangService;
-	@Autowired
-	private PostfachService postfachService;
-
-	private Optional<Boolean> isPostfachConfigured = Optional.empty();
-
-	@EventListener
-	public void onVorgangCreated(VorgangCreatedEvent event) {
-		if (isPostfachConfigured()) {
-			sendIfRequired(vorgangService.getVorgang(VorgangId.from(event.getSource())));
-		} else {
-			LOG.debug(POSTFACH_NOT_CONFIGURED_MESSAGE);
-		}
-	}
-
-	boolean isPostfachConfigured() {
-		return isPostfachConfigured.orElseGet(this::fetchIsPostfachConfigured);
-	}
-
-	synchronized boolean fetchIsPostfachConfigured() {
-		return isPostfachConfigured.orElseGet(() -> {
-			var isConfigured = postfachService.isPostfachConfigured();
-			if (!isConfigured) {
-				LOG.warn(POSTFACH_NOT_CONFIGURED_MESSAGE);
-			}
-			isPostfachConfigured = Optional.of(isConfigured);
-			return isConfigured;
-		});
-	}
-
-	private void sendIfRequired(Vorgang vorgang) {
-		if (SHOULD_SEND_NOTIFICATION.test(vorgang)) {
-			service.sendNotification(vorgang);
-		}
-	}
-}
diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/antragsteller/AntragstellerNotificationService.java b/notification-manager/src/main/java/de/ozgcloud/notification/antragsteller/AntragstellerNotificationService.java
deleted file mode 100644
index 7c15e2129f61532d4bf53b33b545a9ec3eebb6ea..0000000000000000000000000000000000000000
--- a/notification-manager/src/main/java/de/ozgcloud/notification/antragsteller/AntragstellerNotificationService.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.antragsteller;
-
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
-import java.time.ZoneId;
-import java.time.format.DateTimeFormatter;
-import java.util.Objects;
-
-import org.apache.commons.io.IOUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import de.ozgcloud.common.errorhandling.TechnicalException;
-import de.ozgcloud.notification.command.CommandService;
-import de.ozgcloud.notification.postfach.PostfachNachricht;
-import de.ozgcloud.notification.vorgang.Vorgang;
-
-@Service
-class AntragstellerNotificationService {
-
-	private static final String TEMPLATE_FILE = "antragsteller.notificationTemplate.txt";
-	private static final String SUBJECT_TEMPLATE = "Eingangsbestätigung %s";
-
-	private static final String TIMEZONE = "Europe/Berlin";
-	private static final String DATETIME_FORMAT = "dd.MM.yyyy HH:mm:ss";
-
-	@Autowired
-	private CommandService commandService;
-
-	public void sendNotification(Vorgang vorgang) {
-		commandService.createSendPostfachNachrichtCommand(buildPostfachNachricht(vorgang));
-	}
-
-	PostfachNachricht buildPostfachNachricht(Vorgang vorgang) {
-		return PostfachNachricht.builder()
-				.vorgangId(vorgang.getId())
-				.postfachId(vorgang.getPostfachId())
-				.postfachAddress(vorgang.getPostfachAddress())
-				.mailBody(formatMessage(vorgang))
-				.subject(formatSubject(vorgang))
-				.build();
-	}
-
-	String formatMessage(Vorgang vorgang) {
-		return String.format(loadTemplate(),
-				vorgang.getCreatedAt().withZoneSameInstant(ZoneId.of(TIMEZONE)).format(DateTimeFormatter.ofPattern(DATETIME_FORMAT)),
-				vorgang.getVorgangNummer());
-	}
-
-	private String loadTemplate() {
-		var templateInStream = AntragstellerNotificationService.class.getClassLoader().getResourceAsStream(TEMPLATE_FILE);
-		if (Objects.isNull(templateInStream)) {
-			throw new TechnicalException("Cannot find template file " + TEMPLATE_FILE);
-		}
-		try {
-			return IOUtils.toString(templateInStream, StandardCharsets.UTF_8);
-		} catch (IOException e) {
-			throw new TechnicalException("Error reading template file", e);
-		}
-	}
-
-	String formatSubject(Vorgang vorgang) {
-		return String.format(SUBJECT_TEMPLATE, vorgang.getVorgangName());
-	}
-}
diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/command/Command.java b/notification-manager/src/main/java/de/ozgcloud/notification/command/Command.java
deleted file mode 100644
index 113cedcb06b34e6f26a20cbc589c6424198434bf..0000000000000000000000000000000000000000
--- a/notification-manager/src/main/java/de/ozgcloud/notification/command/Command.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.command;
-
-import java.util.Map;
-
-import de.ozgcloud.notification.vorgang.VorgangId;
-import lombok.Builder;
-import lombok.Getter;
-
-@Getter
-@Builder
-class Command {
-
-	enum CommandOrder {
-		SEND_POSTFACH_NACHRICHT
-	}
-
-	private VorgangId vorgangId;
-	private String relationId;
-	private CommandOrder order;
-
-	private Map<String, Object> body;
-}
diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/command/CommandBody.java b/notification-manager/src/main/java/de/ozgcloud/notification/command/CommandBody.java
deleted file mode 100644
index 345a447925a1e43b828a6b04093e961428943341..0000000000000000000000000000000000000000
--- a/notification-manager/src/main/java/de/ozgcloud/notification/command/CommandBody.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.command;
-
-public interface CommandBody {
-
-}
diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/command/CommandMapper.java b/notification-manager/src/main/java/de/ozgcloud/notification/command/CommandMapper.java
deleted file mode 100644
index 026e16e27d5f477976b3942ad9ddf0aa3882ee3e..0000000000000000000000000000000000000000
--- a/notification-manager/src/main/java/de/ozgcloud/notification/command/CommandMapper.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.command;
-
-import java.util.Optional;
-
-import org.mapstruct.Mapper;
-import org.mapstruct.Mapping;
-
-import de.ozgcloud.notification.vorgang.VorgangId;
-import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper;
-import de.ozgcloud.vorgang.grpc.command.GrpcCreateCommandRequest;
-
-@Mapper(uses = GrpcObjectMapper.class)
-interface CommandMapper {
-
-	@Mapping(target = "mergeFrom", ignore = true)
-	@Mapping(target = "clearField", ignore = true)
-	@Mapping(target = "clearOneof", ignore = true)
-	@Mapping(target = "mergeBodyObj", ignore = true)
-	@Mapping(target = "mergeCallContext", ignore = true)
-	@Mapping(target = "mergeRedirectRequest", ignore = true)
-	@Mapping(target = "mergeUnknownFields", ignore = true)
-	@Mapping(target = "removeBody", ignore = true)
-	@Mapping(target = "callContext", ignore = true)
-	@Mapping(target = "orderStringBytes", ignore = true)
-	@Mapping(target = "order", ignore = true)
-	@Mapping(target = "orderValue", ignore = true)
-	@Mapping(target = "redirectRequest", ignore = true)
-	@Mapping(target = "relationIdBytes", ignore = true)
-	@Mapping(target = "relationVersion", ignore = true)
-	@Mapping(target = "unknownFields", ignore = true)
-	@Mapping(target = "vorgangIdBytes", ignore = true)
-	@Mapping(target = "allFields", ignore = true)
-	@Mapping(target = "bodyBuilderList", ignore = true)
-	@Mapping(target = "bodyList", ignore = true)
-	@Mapping(target = "bodyOrBuilderList", ignore = true)
-
-	@Mapping(target = "bodyObj", source = "body")
-	@Mapping(target = "orderString", source = "order")
-	GrpcCreateCommandRequest toGrpcRequest(Command command);
-
-	default String toString(VorgangId vorgangId) {
-		return Optional.ofNullable(vorgangId)
-				.map(VorgangId::toString)
-				.orElse(null);
-	}
-}
diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/command/CommandRemoteService.java b/notification-manager/src/main/java/de/ozgcloud/notification/command/CommandRemoteService.java
deleted file mode 100644
index 21bfd4983be83641f5abd667bdf2b875dd03dceb..0000000000000000000000000000000000000000
--- a/notification-manager/src/main/java/de/ozgcloud/notification/command/CommandRemoteService.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.command;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import de.ozgcloud.vorgang.grpc.command.CommandServiceGrpc.CommandServiceBlockingStub;
-import de.ozgcloud.notification.NotificationManagerCallContextAttachingInterceptor;
-import net.devh.boot.grpc.client.inject.GrpcClient;
-
-@Service
-class CommandRemoteService {
-
-	@GrpcClient("pluto")
-	private CommandServiceBlockingStub stub;
-	@Autowired
-	private CommandMapper mapper;
-
-	public void createCommand(Command command) {
-		stub.withInterceptors(new NotificationManagerCallContextAttachingInterceptor()).createCommand(mapper.toGrpcRequest(command));
-	}
-
-}
diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/command/CommandService.java b/notification-manager/src/main/java/de/ozgcloud/notification/command/CommandService.java
deleted file mode 100644
index 953b00a7477defc78b77979b4a9ce604ac202dbc..0000000000000000000000000000000000000000
--- a/notification-manager/src/main/java/de/ozgcloud/notification/command/CommandService.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.command;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Objects;
-import java.util.function.Predicate;
-
-import org.apache.commons.beanutils.BeanMap;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import de.ozgcloud.notification.command.Command.CommandOrder;
-import de.ozgcloud.notification.postfach.PostfachAddress;
-import de.ozgcloud.notification.postfach.PostfachAddressIdentifier;
-import de.ozgcloud.notification.postfach.PostfachNachricht;
-import de.ozgcloud.notification.postfach.StringBasedIdentifier;
-
-@Service("notificationCommandService")
-public class CommandService {
-
-	private static final Predicate<Entry<Object, Object>> IS_NOT_CLASS_KEY = entry -> !StringUtils.equals(entry.getKey().toString(), "class");
-
-	@Autowired
-	private CommandRemoteService commandRemoteService;
-
-	public void createSendPostfachNachrichtCommand(PostfachNachricht nachricht) {
-		commandRemoteService.createCommand(buildCommand(nachricht));
-	}
-
-	Command buildCommand(PostfachNachricht nachricht) {
-		return Command.builder()
-				.vorgangId(nachricht.getVorgangId())
-				.relationId(nachricht.getVorgangId().toString())
-				.order(CommandOrder.SEND_POSTFACH_NACHRICHT)
-				.body(toMap(nachricht))
-				.build();
-	}
-
-	Map<String, Object> toMap(PostfachNachricht nachricht) {
-		var result = new HashMap<String, Object>();
-
-		new BeanMap(nachricht).entrySet().stream()
-				.filter(entry -> Objects.nonNull(entry.getValue()))
-				.filter(IS_NOT_CLASS_KEY)
-				.forEach(entry -> result.put(entry.getKey().toString(), getValue(entry.getValue())));
-
-		return Collections.unmodifiableMap(result);
-	}
-	
-	private Object getValue(Object value) {
-		if (value instanceof PostfachAddress postfachAddress) {
-			return buildPostfachAddressMap(postfachAddress);
-		}
-		return value;
-	}
-	
-	private Map<String, Object> buildPostfachAddressMap(PostfachAddress postfachAddress){
-		 return Map.of(PostfachAddress.TYPE_FIELD, postfachAddress.getType(),
-				 			PostfachAddress.VERSION_FIELD, postfachAddress.getVersion(), 
-				 			PostfachAddress.IDENTIFIER_FIELD, buildPostfachAddressIdentifierMap(postfachAddress.getIdentifier()));
-	}
-	
-	private Map<String, Object> buildPostfachAddressIdentifierMap(PostfachAddressIdentifier identifier){
-		 return Map.of(StringBasedIdentifier.POSTFACH_ID_FIELD, ((StringBasedIdentifier) identifier).getPostfachId());
-	}
-}
\ No newline at end of file
diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/email/EmailRecipientMapper.java b/notification-manager/src/main/java/de/ozgcloud/notification/email/EmailRecipientMapper.java
deleted file mode 100644
index a30a2d2778116564f8372947aa96f105a238c667..0000000000000000000000000000000000000000
--- a/notification-manager/src/main/java/de/ozgcloud/notification/email/EmailRecipientMapper.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.email;
-
-import de.ozgcloud.nachrichten.email.GrpcRecipient;
-import de.ozgcloud.notification.user.Recipient;
-
-import org.mapstruct.Mapper;
-
-@Mapper
-interface EmailRecipientMapper {
-
-	GrpcRecipient toGrpc(Recipient recipient);
-
-}
diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/email/EmailRemoteService.java b/notification-manager/src/main/java/de/ozgcloud/notification/email/EmailRemoteService.java
deleted file mode 100644
index 55c4423fbb7735b4f8610be71b67f0feac987020..0000000000000000000000000000000000000000
--- a/notification-manager/src/main/java/de/ozgcloud/notification/email/EmailRemoteService.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.email;
-
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import de.ozgcloud.nachrichten.email.EmailServiceGrpc.EmailServiceBlockingStub;
-import de.ozgcloud.nachrichten.email.GrpcRecipient;
-import de.ozgcloud.nachrichten.email.GrpcSendEmailRequest;
-import de.ozgcloud.notification.NotificationManagerCallContextAttachingInterceptor;
-import lombok.NonNull;
-import net.devh.boot.grpc.client.inject.GrpcClient;
-
-@Service
-public class EmailRemoteService {
-
-	@GrpcClient("email")
-	private EmailServiceBlockingStub emailServiceStub;
-
-	@Autowired
-	private EmailRecipientMapper recipientMapper;
-
-	public void sendEmail(@NonNull UserEmail email) {
-		var grpcEmailRecipients = email.recipients().stream().map(recipientMapper::toGrpc).toList();
-		emailServiceStub.withInterceptors(new NotificationManagerCallContextAttachingInterceptor())
-				.sendEmail(buildRequest(grpcEmailRecipients, email.subject(), email.body()));
-	}
-
-	private GrpcSendEmailRequest buildRequest(List<GrpcRecipient> grpcRecipients, String subject, String body) {
-		return GrpcSendEmailRequest.newBuilder().addAllRecipients(grpcRecipients).setSubject(subject).setBody(body).build();
-	}
-}
diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/email/UserEmail.java b/notification-manager/src/main/java/de/ozgcloud/notification/email/UserEmail.java
deleted file mode 100644
index 8410d7a79c8e5353e68a198d071db98bc8d07f90..0000000000000000000000000000000000000000
--- a/notification-manager/src/main/java/de/ozgcloud/notification/email/UserEmail.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.email;
-
-import de.ozgcloud.notification.user.Recipient;
-import lombok.Builder;
-import lombok.Singular;
-
-import java.util.List;
-
-@Builder
-public record UserEmail(@Singular List<Recipient> recipients, String subject, String body) {
-}
diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachAddress.java b/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachAddress.java
deleted file mode 100644
index d7fe49e360c27eb2538303a0eae6cbe85c48d456..0000000000000000000000000000000000000000
--- a/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachAddress.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package de.ozgcloud.notification.postfach;
-
-import lombok.Builder;
-import lombok.Getter;
-
-@Getter
-@Builder
-public class PostfachAddress {
-
-	public static final String VERSION_FIELD = "version";
-	public static final String TYPE_FIELD = "type";
-	public static final String IDENTIFIER_FIELD = "identifier";
-
-	private String version;
-	private int type;
-	private PostfachAddressIdentifier identifier;
-}
\ No newline at end of file
diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachAddressIdentifier.java b/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachAddressIdentifier.java
deleted file mode 100644
index 3cb1eb983ef49d4268873d924e5416fc35eb4d84..0000000000000000000000000000000000000000
--- a/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachAddressIdentifier.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package de.ozgcloud.notification.postfach;
-
-public interface PostfachAddressIdentifier {
-
-}
diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachNachricht.java b/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachNachricht.java
deleted file mode 100644
index f710e79ca547a53478711daaa00d3209d4aa3312..0000000000000000000000000000000000000000
--- a/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachNachricht.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.postfach;
-
-import de.ozgcloud.notification.command.CommandBody;
-import de.ozgcloud.notification.vorgang.VorgangId;
-import lombok.Builder;
-import lombok.Getter;
-
-@Getter
-@Builder
-public class PostfachNachricht implements CommandBody {
-
-	static final String FIELD_VORGANG_ID = "vorgangId";
-	static final String FIELD_POSTFACH_ID = "postfachId";
-	public static final String FIELD_POSTFACH_ADDRESS = "postfachAddress";
-	static final String FIELD_SUBJECT = "subject";
-	static final String FIELD_MESSAGE = "mailBody";
-
-	static final String FIELD_REPLY_OPTION = "replyOption";
-	static final String DEFAULT_REPLY_OPTION = "FORBIDDEN";
-
-	private VorgangId vorgangId;
-	private String postfachId;
-	private PostfachAddress postfachAddress;
-
-	private String subject;
-	private String mailBody;
-
-	public String getReplyOption() {
-		return DEFAULT_REPLY_OPTION;
-	}
-
-}
diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachRemoteService.java b/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachRemoteService.java
deleted file mode 100644
index dcbdca72ee0c5f07f2da1885608e7989db7240e4..0000000000000000000000000000000000000000
--- a/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachRemoteService.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * 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.notification.postfach;
-
-import org.springframework.stereotype.Service;
-
-import de.ozgcloud.nachrichten.postfach.GrpcIsPostfachConfiguredRequest;
-import de.ozgcloud.nachrichten.postfach.PostfachServiceGrpc.PostfachServiceBlockingStub;
-import de.ozgcloud.notification.NotificationManagerCallContextAttachingInterceptor;
-import net.devh.boot.grpc.client.inject.GrpcClient;
-
-@Service
-class PostfachRemoteService {
-
-	@GrpcClient("pluto")
-	private PostfachServiceBlockingStub postfachServiceBlockingStub;
-
-	public boolean isPostfachConfigured() {
-		return getPostfachServiceStub().isPostfachConfigured(buildGrpcRequest()).getIsConfigured();
-	}
-
-	GrpcIsPostfachConfiguredRequest buildGrpcRequest() {
-		return GrpcIsPostfachConfiguredRequest.newBuilder().build();
-	}
-
-	PostfachServiceBlockingStub getPostfachServiceStub() {
-		return postfachServiceBlockingStub.withInterceptors(new NotificationManagerCallContextAttachingInterceptor());
-	}
-}
diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachService.java b/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachService.java
deleted file mode 100644
index 750c96894ae3f4125d8d17fdefe35cadcf36513f..0000000000000000000000000000000000000000
--- a/notification-manager/src/main/java/de/ozgcloud/notification/postfach/PostfachService.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * 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.notification.postfach;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Service("notificationPostfachService")
-public class PostfachService {
-
-	@Autowired
-	private PostfachRemoteService postfachRemoteService;
-
-	public boolean isPostfachConfigured() {
-		return postfachRemoteService.isPostfachConfigured();
-	}
-}
diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/postfach/StringBasedIdentifier.java b/notification-manager/src/main/java/de/ozgcloud/notification/postfach/StringBasedIdentifier.java
deleted file mode 100644
index 499ad64f64e3e223543a732b73998c96116817e5..0000000000000000000000000000000000000000
--- a/notification-manager/src/main/java/de/ozgcloud/notification/postfach/StringBasedIdentifier.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package de.ozgcloud.notification.postfach;
-
-import lombok.Builder;
-import lombok.Getter;
-
-@Getter
-@Builder
-public class StringBasedIdentifier implements PostfachAddressIdentifier {
-	
-	public static final String POSTFACH_ID_FIELD = "postfachId";
-
-	private String postfachId;
-
-}
\ No newline at end of file
diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/user/Recipient.java b/notification-manager/src/main/java/de/ozgcloud/notification/user/Recipient.java
deleted file mode 100644
index b6dde90cfb54ad064efbbe78fa21caf43ea0db3a..0000000000000000000000000000000000000000
--- a/notification-manager/src/main/java/de/ozgcloud/notification/user/Recipient.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.user;
-
-import lombok.Builder;
-
-@Builder
-public record Recipient(String firstName, String lastName, String email) {
-}
\ No newline at end of file
diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/user/UserNotificationEventListener.java b/notification-manager/src/main/java/de/ozgcloud/notification/user/UserNotificationEventListener.java
deleted file mode 100644
index 822680b504116642384a95bd03621d6665b348f9..0000000000000000000000000000000000000000
--- a/notification-manager/src/main/java/de/ozgcloud/notification/user/UserNotificationEventListener.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.user;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.event.EventListener;
-import org.springframework.stereotype.Component;
-
-import de.ozgcloud.command.VorgangCreatedEvent;
-import de.ozgcloud.notification.vorgang.VorgangId;
-import de.ozgcloud.notification.vorgang.VorgangService;
-
-@Component
-public class UserNotificationEventListener {
-
-	@Autowired
-	private UserNotificationService userNotificationService;
-
-	@Autowired
-	private VorgangService vorgangService;
-
-	@EventListener
-	public void onVorgangCreated(VorgangCreatedEvent event) {
-		userNotificationService.sendNotification(vorgangService.getVorgang(VorgangId.from(event.getSource())));
-	}
-}
diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/user/UserNotificationService.java b/notification-manager/src/main/java/de/ozgcloud/notification/user/UserNotificationService.java
deleted file mode 100644
index e9f02888862d5ec80be071c362b75a15c95be9b3..0000000000000000000000000000000000000000
--- a/notification-manager/src/main/java/de/ozgcloud/notification/user/UserNotificationService.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.user;
-
-import static java.util.Objects.*;
-
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.stereotype.Service;
-
-import de.ozgcloud.notification.email.EmailRemoteService;
-import de.ozgcloud.notification.email.UserEmail;
-import de.ozgcloud.notification.vorgang.Vorgang;
-import lombok.NonNull;
-
-@Service
-public class UserNotificationService {
-
-	public static final String MAIL_SUBJECT_TEMPLATE = "Neuer Vorgang: %s";
-	public static final String MAIL_BODY = "Es ist ein neuer Vorgang im Allgemeinen Fachverfahren eingegangen.";
-
-	@Autowired
-	private EmailRemoteService emailRemoteService;
-
-	@Autowired
-	private UserRemoteService userRemoteService;
-
-	@Async
-	public void sendNotification(@NonNull Vorgang vorgang) {
-		if (nonNull(vorgang.getOrganisationseinheitenId())) {
-			var recipients = userRemoteService.getRecipients(vorgang.getOrganisationseinheitenId());
-			emailRemoteService.sendEmail(buildUserEmail(recipients, MAIL_SUBJECT_TEMPLATE.formatted(vorgang.getVorgangName())));
-		}
-	}
-
-	UserEmail buildUserEmail(List<Recipient> recipients, String subject) {
-		return UserEmail.builder().recipients(recipients).subject(subject).body(MAIL_BODY).build();
-	}
-}
\ No newline at end of file
diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/user/UserRecipientMapper.java b/notification-manager/src/main/java/de/ozgcloud/notification/user/UserRecipientMapper.java
deleted file mode 100644
index fd0bdd0dd270d4828274715442b60f4fbdfa486d..0000000000000000000000000000000000000000
--- a/notification-manager/src/main/java/de/ozgcloud/notification/user/UserRecipientMapper.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.user;
-
-import org.mapstruct.Mapper;
-
-import de.ozgcloud.user.recipient.GrpcRecipient;
-
-@Mapper
-interface UserRecipientMapper {
-
-	Recipient fromGrpc(GrpcRecipient grpcRecipient);
-}
diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/user/UserRemoteService.java b/notification-manager/src/main/java/de/ozgcloud/notification/user/UserRemoteService.java
deleted file mode 100644
index 95f934e3d6db814a66f7b0d313208e2152b59003..0000000000000000000000000000000000000000
--- a/notification-manager/src/main/java/de/ozgcloud/notification/user/UserRemoteService.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.user;
-
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import de.ozgcloud.notification.NotificationManagerCallContextAttachingInterceptor;
-import de.ozgcloud.user.grpc.recipient.GrpcFindRecipientRequest;
-import de.ozgcloud.user.grpc.recipient.RecipientServiceGrpc;
-import net.devh.boot.grpc.client.inject.GrpcClient;
-
-@Service
-public class UserRemoteService {
-
-	@GrpcClient("user-manager")
-	private RecipientServiceGrpc.RecipientServiceBlockingStub stub;
-	@Autowired
-	private UserRecipientMapper mapper;
-
-	public List<Recipient> getRecipients(String organisationseinheitId) {
-		var request = GrpcFindRecipientRequest.newBuilder().setOrganisationsEinheitId(organisationseinheitId).build();
-		return stub.withInterceptors(new NotificationManagerCallContextAttachingInterceptor())
-				.findRecipientByOrganisationsEinheitId(request).getRecipientList().stream().map(mapper::fromGrpc).toList();
-	}
-}
diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/Vorgang.java b/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/Vorgang.java
deleted file mode 100644
index 63ddbbb7d3cf84b139e36d5c5333243321b51291..0000000000000000000000000000000000000000
--- a/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/Vorgang.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.vorgang;
-
-import java.time.ZonedDateTime;
-
-import de.ozgcloud.notification.postfach.PostfachAddress;
-import lombok.Builder;
-import lombok.Getter;
-
-@Getter
-@Builder(toBuilder = true)
-public class Vorgang {
-
-	private VorgangId id;
-
-	private ZonedDateTime createdAt;
-
-	private String vorgangName;
-	private String vorgangNummer;
-
-	private String postfachId;
-	private String formEngineName;
-	private String organisationseinheitenId;
-
-	private PostfachAddress postfachAddress;
-}
diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/VorgangId.java b/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/VorgangId.java
deleted file mode 100644
index e3c50bbd606c952b3d3eefadebfef0148e0a995c..0000000000000000000000000000000000000000
--- a/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/VorgangId.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.vorgang;
-
-import de.ozgcloud.common.datatype.StringBasedValue;
-import lombok.EqualsAndHashCode;
-
-@EqualsAndHashCode(callSuper = true)
-public class VorgangId extends StringBasedValue {
-
-	VorgangId(String vorgangId) {
-		super(vorgangId);
-	}
-
-	public static VorgangId from(String vorgangId) {
-		return new VorgangId(vorgangId);
-	}
-}
diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/VorgangMapper.java b/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/VorgangMapper.java
deleted file mode 100644
index e20a60f402c5197a861a4d25d1dfe029a29da23c..0000000000000000000000000000000000000000
--- a/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/VorgangMapper.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.vorgang;
-
-import java.util.Optional;
-
-import org.mapstruct.Mapper;
-import org.mapstruct.Mapping;
-import org.mapstruct.NullValueCheckStrategy;
-import org.mapstruct.NullValuePropertyMappingStrategy;
-
-import de.ozgcloud.notification.postfach.PostfachAddress;
-import de.ozgcloud.notification.postfach.PostfachAddressIdentifier;
-import de.ozgcloud.notification.postfach.StringBasedIdentifier;
-import de.ozgcloud.vorgang.common.GrpcObject;
-import de.ozgcloud.vorgang.vorgang.GrpcPostfachAddress;
-import de.ozgcloud.vorgang.vorgang.GrpcServiceKonto;
-import de.ozgcloud.vorgang.vorgang.GrpcVorgangHead;
-import de.ozgcloud.vorgang.vorgang.GrpcVorgangWithEingang;
-
-@Mapper(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_NULL,
-		nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
-interface VorgangMapper {
-
-	@Mapping(target = "postfachId", source = "eingang.antragsteller.postfachId")
-	@Mapping(target = "vorgangName", source = "name")
-	@Mapping(target = "vorgangNummer", source = "nummer")
-	@Mapping(target = "organisationseinheitenId", source = "eingang.zustaendigeStelle.organisationseinheitenId")
-	@Mapping(target = "postfachAddress", expression = "java(fromPostfachAddress(vorgang))")
-	Vorgang fromGrpc(GrpcVorgangWithEingang vorgang);
-	
-	default PostfachAddress fromPostfachAddress(GrpcVorgangWithEingang vorgang) {
-		return Optional.ofNullable(vorgang.getHeader())
-			.map(GrpcVorgangHead::getServiceKonto)
-			.map(GrpcServiceKonto::getPostfachAddressesList)
-			.filter(list -> !list.isEmpty())
-			.map(list -> list.get(0))
-			.map(this::buildPostfachAddress)
-			.orElse(null);
-	}
-	
-	private PostfachAddress buildPostfachAddress(GrpcPostfachAddress postfachAddress) {
-		return PostfachAddress.builder()
-				.type(postfachAddress.getType())
-				.version(postfachAddress.getVersion())
-				.identifier(buildIdentifier(postfachAddress.getIdentifier()))
-				.build();
-	}
-	
-	private PostfachAddressIdentifier buildIdentifier(GrpcObject identifier) {
-		var postfachId = identifier.getProperty(0).getValue(0);
-		return StringBasedIdentifier.builder().postfachId(postfachId).build();
-	}
-
-	default VorgangId fromString(String vorgangId) {
-		return Optional.ofNullable(vorgangId).map(VorgangId::from).orElse(null);
-	}
-}
diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/VorgangRemoteService.java b/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/VorgangRemoteService.java
deleted file mode 100644
index a93e799cd58fe017bd1f462f9d0d13f594fe3e3c..0000000000000000000000000000000000000000
--- a/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/VorgangRemoteService.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.vorgang;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import de.ozgcloud.notification.NotificationManagerCallContextAttachingInterceptor;
-import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangWithEingangRequest;
-import de.ozgcloud.vorgang.vorgang.VorgangServiceGrpc.VorgangServiceBlockingStub;
-import net.devh.boot.grpc.client.inject.GrpcClient;
-
-@Service
-class VorgangRemoteService {
-
-	@GrpcClient("vorgang-manager")
-	private VorgangServiceBlockingStub stub;
-
-	@Autowired
-	private VorgangMapper mapper;
-
-	public Vorgang getVorgang(VorgangId vorgangId) {
-		return mapper.fromGrpc(stub.withInterceptors(new NotificationManagerCallContextAttachingInterceptor())
-				.findVorgangWithEingang(buildRequest(vorgangId)).getVorgangWithEingang());
-	}
-
-	private GrpcFindVorgangWithEingangRequest buildRequest(VorgangId vorgangId) {
-		return GrpcFindVorgangWithEingangRequest.newBuilder()
-				.setId(vorgangId.toString())
-				.build();
-	}
-}
diff --git a/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/VorgangService.java b/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/VorgangService.java
deleted file mode 100644
index 07e144cc36e72253ee6c123a8a7823ffb049e30a..0000000000000000000000000000000000000000
--- a/notification-manager/src/main/java/de/ozgcloud/notification/vorgang/VorgangService.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.vorgang;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Service("notificationVorgangService")
-public class VorgangService {
-
-	@Autowired
-	private VorgangRemoteService remoteService;
-
-	public Vorgang getVorgang(VorgangId id) {
-		return remoteService.getVorgang(id);
-	}
-
-}
diff --git a/notification-manager/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/notification-manager/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
deleted file mode 100644
index 08abec6c597ed602bc6a36d5de3111b9a0d66a74..0000000000000000000000000000000000000000
--- a/notification-manager/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ /dev/null
@@ -1,20 +0,0 @@
-net.devh.boot.grpc.client.autoconfigure.GrpcClientAutoConfiguration
-net.devh.boot.grpc.client.autoconfigure.GrpcClientMetricAutoConfiguration
-net.devh.boot.grpc.client.autoconfigure.GrpcClientHealthAutoConfiguration
-net.devh.boot.grpc.client.autoconfigure.GrpcClientSecurityAutoConfiguration
-net.devh.boot.grpc.client.autoconfigure.GrpcClientTraceAutoConfiguration
-net.devh.boot.grpc.client.autoconfigure.GrpcDiscoveryClientAutoConfiguration
-net.devh.boot.grpc.common.autoconfigure.GrpcCommonCodecAutoConfiguration
-net.devh.boot.grpc.common.autoconfigure.GrpcCommonTraceAutoConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcAdviceAutoConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcHealthServiceAutoConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcMetadataConsulConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcMetadataEurekaConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcMetadataNacosConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcMetadataZookeeperConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcReflectionServiceAutoConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcServerAutoConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcServerFactoryAutoConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcServerMetricAutoConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcServerSecurityAutoConfiguration
-net.devh.boot.grpc.server.autoconfigure.GrpcServerTraceAutoConfiguration
diff --git a/notification-manager/src/main/resources/antragsteller.notificationTemplate.txt b/notification-manager/src/main/resources/antragsteller.notificationTemplate.txt
deleted file mode 100644
index b0a386d8b956bf5a7e918f32aa6e8df0e23492d8..0000000000000000000000000000000000000000
--- a/notification-manager/src/main/resources/antragsteller.notificationTemplate.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-Sehr geehrte/r Antragstellende/r,
-
-Ihr Antrag ist bei uns zum Zeitpunkt %s eingegangen und wurde an die zuständige Stelle gesendet.
-Die Vorgangsnummer lautet %s.
-
-Bitte geben Sie diese Vorgangsnummer bei allen Anfragen zu Ihrem Antrag an.
-
-Mit freundlichen Grüßen, 
-Ihre Online-Behörde.
-
-Diese E-Mail wurde automatisch generiert. Bitte antworten Sie nicht auf diese E-Mail.
\ No newline at end of file
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/NotificationManagerCallContextAttachingInterceptorTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/NotificationManagerCallContextAttachingInterceptorTest.java
deleted file mode 100644
index 7c28db1270edac0fde4eca40fa61b92a672e8f53..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/NotificationManagerCallContextAttachingInterceptorTest.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification;
-
-import static de.ozgcloud.common.grpc.GrpcUtil.*;
-import static de.ozgcloud.notification.NotificationManagerCallContextAttachingInterceptor.*;
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Captor;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-
-import io.grpc.CallOptions;
-import io.grpc.Channel;
-import io.grpc.ClientCall;
-import io.grpc.Metadata;
-import io.grpc.MethodDescriptor;
-
-class NotificationManagerCallContextAttachingInterceptorTest {
-
-	@InjectMocks
-	private NotificationManagerCallContextAttachingInterceptor interceptor;
-
-	@Nested
-	class TestInterceptCall<A, B> {
-
-		@Mock
-		private MethodDescriptor<A, B> method;
-		@Mock
-		private CallOptions callOptions;
-		@Mock
-		private Channel next;
-		@Mock
-		private ClientCall<Object, Object> nextCall;
-
-		@Mock
-		private ClientCall.Listener<B> listener;
-		@Mock
-		private Metadata headers;
-		@Captor
-		private ArgumentCaptor<Metadata> metadataCaptor;
-
-		@BeforeEach
-		void initMocks() {
-			when(next.newCall(any(), any())).thenReturn(nextCall);
-		}
-
-		@Test
-		void shouldAddUserId() {
-			var addedMetadata = interceptCall();
-
-			assertThat(addedMetadata.get(createKeyOf(KEY_USER_ID))).isEqualTo(NOTIFICATION_MANAGER_SENDER_USER_ID.getBytes());
-		}
-
-		@Test
-		void shouldAddClientName() {
-			var addedMetadata = interceptCall();
-
-			assertThat(addedMetadata.get(createKeyOf(KEY_CLIENT_NAME))).isEqualTo(NOTIFICATION_MANAGER_CLIENT_NAME.getBytes());
-		}
-
-		@Test
-		void shouldAddRequestId() {
-			var addedMetadata = interceptCall();
-
-			assertThat(addedMetadata.get(createKeyOf(KEY_REQUEST_ID))).isNotNull();
-		}
-
-		private Metadata interceptCall() {
-			var call = interceptor.interceptCall(method, callOptions, next);
-
-			call.start(listener, headers);
-
-			verify(headers).merge(metadataCaptor.capture());
-			return metadataCaptor.getValue();
-		}
-	}
-
-}
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/antragsteller/AntragstellerNotificationEventListenerTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/antragsteller/AntragstellerNotificationEventListenerTest.java
deleted file mode 100644
index e404877af9ef038cac013fe70a5640fc2a45f9eb..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/antragsteller/AntragstellerNotificationEventListenerTest.java
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.antragsteller;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-
-import java.util.Optional;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.Executors;
-import java.util.stream.IntStream;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Spy;
-import org.springframework.test.util.ReflectionTestUtils;
-
-import de.ozgcloud.command.VorgangCreatedEvent;
-import de.ozgcloud.notification.postfach.PostfachService;
-import de.ozgcloud.notification.vorgang.Vorgang;
-import de.ozgcloud.notification.vorgang.VorgangService;
-import de.ozgcloud.notification.vorgang.VorgangTestFactory;
-import lombok.SneakyThrows;
-
-class AntragstellerNotificationEventListenerTest {
-
-	@Spy
-	@InjectMocks
-	private AntragstellerNotificationEventListener eventListener;
-
-	@Mock
-	private AntragstellerNotificationService service;
-	@Mock
-	private VorgangService vorgangService;
-	@Mock
-	private PostfachService postfachService;
-
-	@DisplayName("On vorgang created")
-	@Nested
-	class TestOnVorgangCreated {
-
-		private static final VorgangCreatedEvent EVENT = new VorgangCreatedEvent(VorgangTestFactory.ID.toString());
-		private static final Vorgang VORGANG = VorgangTestFactory.createBuilder()
-				.formEngineName(AntragstellerNotificationEventListener.FS_FORMENGINE_NAME).build();
-
-		@Test
-		void shouldLoadVorgang() {
-			when(postfachService.isPostfachConfigured()).thenReturn(true);
-			when(vorgangService.getVorgang(any())).thenReturn(VORGANG);
-
-			onVorgangCreated();
-
-			verify(vorgangService).getVorgang(VorgangTestFactory.ID);
-		}
-
-		@DisplayName("should not send notification when postfach is not configured")
-		@Test
-		void shouldNotSend() {
-			when(postfachService.isPostfachConfigured()).thenReturn(false);
-
-			onVorgangCreated();
-
-			verify(vorgangService, never()).getVorgang(any());
-		}
-
-		@Nested
-		class TestIsPostfachConfigured {
-
-			@Test
-			void shouldCallFetchIsPostfachService() {
-				eventListener.isPostfachConfigured();
-
-				verify(eventListener).fetchIsPostfachConfigured();
-			}
-
-			@Test
-			void shouldNotCallFetchIsPostfachService() {
-				ReflectionTestUtils.setField(eventListener, "isPostfachConfigured", Optional.of(true));
-
-				eventListener.isPostfachConfigured();
-
-				verify(eventListener, never()).fetchIsPostfachConfigured();
-			}
-
-			@Test
-			void shouldReturnValue() {
-				when(postfachService.isPostfachConfigured()).thenReturn(true);
-
-				var isConfigured = eventListener.isPostfachConfigured();
-
-				assertThat(isConfigured).isTrue();
-			}
-
-		}
-
-		@Nested
-		class TestFetchIsPostfachConfigured {
-
-			@Test
-			void shouldCallRemoteService() {
-				eventListener.fetchIsPostfachConfigured();
-
-				verify(postfachService).isPostfachConfigured();
-			}
-
-			@Test
-			void shouldReturnValue() {
-				when(postfachService.isPostfachConfigured()).thenReturn(true);
-
-				var isConfigured = eventListener.fetchIsPostfachConfigured();
-
-				assertThat(isConfigured).isTrue();
-			}
-
-			@Test
-			void shouldCallIsPostfachConfiguredOnce() {
-				fetchIsPostfachConfigured();
-
-				verify(postfachService).isPostfachConfigured();
-			}
-
-			@SneakyThrows
-			private void fetchIsPostfachConfigured() {
-				var executorService = Executors.newFixedThreadPool(5);
-				var countDownLatch = new CountDownLatch(3);
-
-				IntStream.range(0, 3).forEach(i ->
-						executorService.submit(() -> {
-							eventListener.fetchIsPostfachConfigured();
-							countDownLatch.countDown();
-						})
-				);
-
-				countDownLatch.await();
-			}
-		}
-
-		@DisplayName("send if required")
-		@Nested
-		class TestSendIfRequirest {
-
-			@DisplayName("should not call service")
-			@Nested
-			class TestNotCallService {
-
-				@BeforeEach
-				void setup() {
-					when(postfachService.isPostfachConfigured()).thenReturn(true);
-				}
-
-				@Test
-				void onMissingPostfachIdAndPostfachAddress() {
-					when(vorgangService.getVorgang(any())).thenReturn(VORGANG.toBuilder().postfachId(null).postfachAddress(null).build());
-
-					onVorgangCreated();
-
-					verify(service, never()).sendNotification(any());
-				}
-
-				@Test
-				void forOtherThanFormSolutionsEngines() {
-					when(vorgangService.getVorgang(any())).thenReturn(VorgangTestFactory.createBuilder().formEngineName("other").build());
-
-					onVorgangCreated();
-
-					verify(service, never()).sendNotification(any());
-				}
-			}
-
-			@DisplayName("should call service")
-			@Nested
-			class TestCallService {
-
-				@BeforeEach
-				void setup() {
-					when(postfachService.isPostfachConfigured()).thenReturn(true);
-				}
-
-				@Test
-				void onExistingPostfachIdAndPostfachAddress() {
-					when(vorgangService.getVorgang(any())).thenReturn(VORGANG);
-
-					onVorgangCreated();
-
-					verify(service).sendNotification(same(VORGANG));
-				}
-
-				@Test
-				void onExistingPostfachIdAndMissingPostfachAddress() {
-					when(vorgangService.getVorgang(any())).thenReturn(VORGANG.toBuilder().postfachAddress(null).build());
-
-					onVorgangCreated();
-
-					verify(service).sendNotification(any());
-				}
-
-				@Test
-				void onMissingPostfachIdAndExistingPostfachAddress() {
-					when(vorgangService.getVorgang(any())).thenReturn(VORGANG.toBuilder().postfachId(null).build());
-
-					onVorgangCreated();
-
-					verify(service).sendNotification(any());
-				}
-			}
-		}
-
-		private void onVorgangCreated() {
-			eventListener.onVorgangCreated(EVENT);
-		}
-	}
-}
\ No newline at end of file
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/antragsteller/AntragstellerNotificationServiceTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/antragsteller/AntragstellerNotificationServiceTest.java
deleted file mode 100644
index 429e4e47b0968cc2a0d05b772770c90c86bbc261..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/antragsteller/AntragstellerNotificationServiceTest.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.antragsteller;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-
-import java.time.ZonedDateTime;
-
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Captor;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Spy;
-
-import de.ozgcloud.notification.command.CommandService;
-import de.ozgcloud.notification.postfach.PostfachAddressTestFactory;
-import de.ozgcloud.notification.postfach.PostfachNachricht;
-import de.ozgcloud.notification.postfach.PostfachNachrichtTestFactory;
-import de.ozgcloud.notification.vorgang.VorgangTestFactory;
-
-class AntragstellerNotificationServiceTest {
-
-	@Spy
-	@InjectMocks
-	private AntragstellerNotificationService service;
-	@Mock
-	private CommandService commandService;
-
-	@Captor
-	private ArgumentCaptor<PostfachNachricht> nachrichtCaptor;
-
-	@DisplayName("Send notification")
-	@Nested
-	class TestSendNotification {
-
-		@Test
-		void shouldCallCommandService() {
-			service.sendNotification(VorgangTestFactory.create());
-
-			verify(commandService).createSendPostfachNachrichtCommand(nachrichtCaptor.capture());
-
-			assertThat(nachrichtCaptor.getValue())
-					.usingRecursiveComparison().ignoringFields("mailBody", "subject")
-					.isEqualTo(PostfachNachrichtTestFactory.create());
-		}
-
-		@Nested
-		class BuildPostfachNachricht {
-			@Test
-			void shouldFormatMessage() {
-				service.buildPostfachNachricht(VorgangTestFactory.create());
-
-				verify(service).formatMessage(any());
-			}
-
-			@Test
-			void shouldFormSubject() {
-				service.buildPostfachNachricht(VorgangTestFactory.create());
-
-				verify(service).formatSubject(any());
-			}
-
-			@Test
-			void shouldHaveVorgangId() {
-				var nachricht = service.buildPostfachNachricht(VorgangTestFactory.create());
-
-				assertThat(nachricht.getVorgangId()).isEqualTo(VorgangTestFactory.ID);
-			}
-
-			@Test
-			void shouldHavePostfachId() {
-				var nachricht = service.buildPostfachNachricht(VorgangTestFactory.create());
-
-				assertThat(nachricht.getPostfachId()).isEqualTo(VorgangTestFactory.POSTFACH_ID);
-			}
-			
-			@Test
-			void shouldHavePostfachAddress() {
-				var nachricht = service.buildPostfachNachricht(VorgangTestFactory.create());
-
-				assertThat(nachricht.getPostfachAddress()).usingRecursiveComparison().isEqualTo(PostfachAddressTestFactory.create());
-			}
-		}
-
-		@Nested
-		class FormatMessage {
-
-			@Test
-			void shouldContaineDateTimeInMEZ() {
-				var vorgang = VorgangTestFactory.createBuilder().createdAt(ZonedDateTime.parse("2001-01-01T05:00:00Z")).build();
-
-				var message = service.formatMessage(vorgang);
-
-				assertThat(message).contains("01.01.2001 06:00:00");
-			}
-
-			@Test
-			void shouldContaineDateTimeInMESZ() {
-				var vorgang = VorgangTestFactory.createBuilder().createdAt(ZonedDateTime.parse("2001-08-01T05:00:00Z")).build();
-
-				var message = service.formatMessage(vorgang);
-
-				assertThat(message).contains("01.08.2001 07:00:00");
-			}
-
-			@Test
-			void shouldContainVorgangNummer() {
-				var message = service.formatMessage(VorgangTestFactory.create());
-
-				assertThat(message).contains(VorgangTestFactory.VORGANG_NUMMER);
-			}
-		}
-
-	}
-
-}
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/command/CommandMapperTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/command/CommandMapperTest.java
deleted file mode 100644
index 8b1d35c279c643b577c15161e502399fb6047f2c..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/command/CommandMapperTest.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.command;
-
-import static org.assertj.core.api.Assertions.*;
-
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mapstruct.factory.Mappers;
-import org.mockito.InjectMocks;
-import org.mockito.Spy;
-
-import de.ozgcloud.notification.postfach.PostfachNachrichtTestFactory;
-import de.ozgcloud.notification.vorgang.VorgangId;
-import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper;
-
-class CommandMapperTest {
-
-	@InjectMocks
-	private CommandMapper mapper = Mappers.getMapper(CommandMapper.class);
-	@Spy
-	private GrpcObjectMapper objectMapper = Mappers.getMapper(GrpcObjectMapper.class);
-
-	@DisplayName("To grpc")
-	@Nested
-	class TestToGrpc {
-		
-		@Test
-		void shouldMapPostfachNachrichtCommand() {
-			var mapped = mapper.toGrpcRequest(CommandTestFactory.createBuilder().body(PostfachNachrichtTestFactory.createAsMap()).build());
-
-			assertThat(mapped).usingRecursiveComparison()
-					.ignoringFields("bodyObj_", "memoizedHashCode")
-					.isEqualTo(GrpcCreateCommandRequestTestFactory.create());
-		}
-		
-		@DisplayName("to string")
-		@Nested
-		class TestToString {
-			
-			@Test
-			void shouldReturnValue() {
-				var vorgangId = mapper.toString(VorgangId.from("testId"));
-				
-				assertThat(vorgangId).isEqualTo("testId");
-			}
-			
-			@Test
-			void shouldReturnNull() {
-				var vorgangId = mapper.toString(null);
-				
-				assertThat(vorgangId).isNull();				
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/command/CommandRemoteServiceTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/command/CommandRemoteServiceTest.java
deleted file mode 100644
index d71d9a6c8a8f76d672ddc4d6148ebb076a1d41bb..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/command/CommandRemoteServiceTest.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.command;
-
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Spy;
-
-import de.ozgcloud.vorgang.grpc.command.CommandServiceGrpc.CommandServiceBlockingStub;
-
-class CommandRemoteServiceTest {
-
-	@Spy
-	@InjectMocks
-	private CommandRemoteService service;
-	@Mock
-	private CommandServiceBlockingStub stub;
-	@Mock
-	private CommandMapper mapper;
-
-	@Nested
-	class TestCreateCommand {
-
-		@BeforeEach
-		void mockStub() {
-			when(stub.withInterceptors(any())).thenReturn(stub);
-		}
-
-		@Test
-		void shoudlCreateRequest() {
-			service.createCommand(CommandTestFactory.create());
-
-			verify(mapper).toGrpcRequest(notNull());
-		}
-
-		@Test
-		void shouldCallStub() {
-			when(mapper.toGrpcRequest(any())).thenReturn(GrpcCreateCommandRequestTestFactory.create());
-
-			service.createCommand(CommandTestFactory.create());
-
-			verify(stub).createCommand(notNull());
-		}
-
-	}
-
-}
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/command/CommandServiceTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/command/CommandServiceTest.java
deleted file mode 100644
index 8aa1fd217b314044265e025076d342b33638b24f..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/command/CommandServiceTest.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.command;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Spy;
-
-import de.ozgcloud.notification.postfach.PostfachNachrichtTestFactory;
-
-class CommandServiceTest {
-
-	@Spy
-	@InjectMocks
-	private CommandService service;
-	@Mock
-	private CommandRemoteService remoteService;
-
-	@DisplayName("Create send postfachNachricht command")
-	@Nested
-	class TestCreateSendPostfachNachrichtCommnad {
-		@Test
-		void shouldBuildCommand() {
-			service.createSendPostfachNachrichtCommand(PostfachNachrichtTestFactory.create());
-
-			verify(service).buildCommand(notNull());
-		}
-
-		@Test
-		void shouldCallRemoteService() {
-			var command = CommandTestFactory.create();
-			doReturn(command).when(service).buildCommand(any());
-
-			service.createSendPostfachNachrichtCommand(PostfachNachrichtTestFactory.create());
-
-			verify(remoteService).createCommand(command);
-		}
-	}
-
-	@DisplayName("To map")
-	@Nested
-	class TestToMap {
-
-		@Test
-		void shouldContainAllFields() {
-			var map = service.toMap(PostfachNachrichtTestFactory.create());
-
-			assertThat(map).isEqualTo(PostfachNachrichtTestFactory.createAsMap());
-		}
-
-		@Test
-		void shouldNOTContainClassEntry() {
-			var map = service.toMap(PostfachNachrichtTestFactory.create());
-
-			assertThat(map).doesNotContainKey("class");
-		}
-	}
-}
\ No newline at end of file
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/command/CommandTestFactory.java b/notification-manager/src/test/java/de/ozgcloud/notification/command/CommandTestFactory.java
deleted file mode 100644
index affcd173e378a8fa9df6af06dfa5916832ba3f39..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/command/CommandTestFactory.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.command;
-
-import java.util.Map;
-import java.util.UUID;
-
-import de.ozgcloud.notification.command.Command.CommandOrder;
-import de.ozgcloud.notification.vorgang.VorgangTestFactory;
-
-public class CommandTestFactory {
-
-	public static final String ID = UUID.randomUUID().toString();
-
-	public static final String RELATION_ID = UUID.randomUUID().toString();
-	public static final CommandOrder ORDER = CommandOrder.SEND_POSTFACH_NACHRICHT;
-
-	public static final String BODY_FIELD_NAME = "name";
-	public static final String BODY_FIELD_VALUE = "fritz";
-
-	public static final Command create() {
-		return createBuilder().build();
-	}
-
-	public static final Command.CommandBuilder createBuilder() {
-		return Command.builder()
-				.vorgangId(VorgangTestFactory.ID)
-				.relationId(RELATION_ID)
-				.order(ORDER)
-				.body(Map.of(BODY_FIELD_NAME, BODY_FIELD_VALUE));
-
-	}
-}
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/command/GrpcCreateCommandRequestTestFactory.java b/notification-manager/src/test/java/de/ozgcloud/notification/command/GrpcCreateCommandRequestTestFactory.java
deleted file mode 100644
index 17eb41f083b5a573c5f2b7b2b466ae0b92b7c201..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/command/GrpcCreateCommandRequestTestFactory.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.command;
-
-import de.ozgcloud.notification.vorgang.VorgangTestFactory;
-import de.ozgcloud.vorgang.common.grpc.GrpcObjectTestFactory;
-import de.ozgcloud.vorgang.grpc.command.GrpcCreateCommandRequest;
-
-public class GrpcCreateCommandRequestTestFactory {
-
-	public static final GrpcCreateCommandRequest create() {
-		return createBuilder().build();
-	}
-
-	public static final GrpcCreateCommandRequest.Builder createBuilder() {
-		return GrpcCreateCommandRequest.newBuilder()
-				.setVorgangId(VorgangTestFactory.ID.toString())
-				.setRelationId(CommandTestFactory.RELATION_ID)
-				.setOrderString(CommandTestFactory.ORDER.name())
-				.setBodyObj(GrpcObjectTestFactory.create());
-	}
-}
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/email/EmailRecipientMapperTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/email/EmailRecipientMapperTest.java
deleted file mode 100644
index 56550d12bfc12fac54f75e40fda445f7e2bf2aa7..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/email/EmailRecipientMapperTest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.email;
-
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mapstruct.factory.Mappers;
-
-import static org.assertj.core.api.Assertions.*;
-
-import de.ozgcloud.notification.user.RecipientTestFactory;
-
-class EmailRecipientMapperTest {
-
-	private EmailRecipientMapper mapper = Mappers.getMapper(EmailRecipientMapper.class);
-
-	@Nested
-	class TestToGrpc {
-
-		@Test
-		void shouldMapRecipient() {
-			var grpcEmailRecipient = mapper.toGrpc(RecipientTestFactory.create());
-
-			assertThat(grpcEmailRecipient).usingRecursiveComparison().isEqualTo(GrpcEmailRecipientTestFactory.create());
-		}
-	}
-}
\ No newline at end of file
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/email/EmailRemoteServiceTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/email/EmailRemoteServiceTest.java
deleted file mode 100644
index 239479d4f3a924dae230ded306905702898bb0ab..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/email/EmailRemoteServiceTest.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.email;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Captor;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-
-import de.ozgcloud.nachrichten.email.EmailServiceGrpc.EmailServiceBlockingStub;
-import de.ozgcloud.nachrichten.email.GrpcRecipient;
-import de.ozgcloud.nachrichten.email.GrpcSendEmailRequest;
-import de.ozgcloud.notification.NotificationManagerCallContextAttachingInterceptor;
-
-class EmailRemoteServiceTest {
-
-	@InjectMocks
-	private EmailRemoteService remoteService;
-
-	@Mock
-	private EmailServiceBlockingStub emailStub;
-
-	@Mock
-	private EmailRecipientMapper recipientMapper;
-
-	@Nested
-	class TestSendNotification {
-
-		@Captor
-		private ArgumentCaptor<GrpcSendEmailRequest> requestCaptor;
-
-		private final static GrpcRecipient GRPC_RECIPIENT = GrpcEmailRecipientTestFactory.create();
-
-		@BeforeEach
-		void initTest() {
-			when(recipientMapper.toGrpc(any())).thenReturn(GRPC_RECIPIENT);
-			when(emailStub.withInterceptors(any())).thenReturn(emailStub);
-		}
-
-		@Test
-		void shouldCallEmailServiceOnlyOnce() {
-			remoteService.sendEmail(UserEmailTestFactory.create());
-
-			verify(emailStub, times(1)).sendEmail(any());
-		}
-
-		@Test
-		void shouldNotifyAllRecipients() {
-			remoteService.sendEmail(UserEmailTestFactory.create());
-
-			verify(emailStub).sendEmail(requestCaptor.capture());
-			assertThat(requestCaptor.getValue().getRecipientsList()).hasSameSizeAs(UserEmailTestFactory.RECIPIENTS);
-		}
-
-		@Test
-		void shouldConvertCorrectly() {
-			remoteService.sendEmail(UserEmailTestFactory.create());
-
-			verify(emailStub).sendEmail(requestCaptor.capture());
-			assertThat(requestCaptor.getValue().getRecipientsList()).first().usingRecursiveComparison().isEqualTo(GRPC_RECIPIENT);
-		}
-
-		@Test
-		void shouldUseInterceptor() {
-			remoteService.sendEmail(UserEmailTestFactory.create());
-
-			verify(emailStub).withInterceptors(any(NotificationManagerCallContextAttachingInterceptor.class));
-		}
-
-	}
-}
\ No newline at end of file
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/email/GrpcEmailRecipientTestFactory.java b/notification-manager/src/test/java/de/ozgcloud/notification/email/GrpcEmailRecipientTestFactory.java
deleted file mode 100644
index ef7d5b5e338c67b54bbca7746a9ced69e7d1369c..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/email/GrpcEmailRecipientTestFactory.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.email;
-
-import de.ozgcloud.nachrichten.email.GrpcRecipient;
-
-import static de.ozgcloud.notification.user.RecipientTestFactory.*;
-
-public class GrpcEmailRecipientTestFactory {
-
-
-	public static GrpcRecipient create() {
-		return createBuilder().build();
-	}
-
-	public static GrpcRecipient.Builder createBuilder(){
-		return GrpcRecipient.newBuilder()
-				.setFirstName(FIRST_NAME)
-				.setLastName(LAST_NAME)
-				.setEmail(EMAIL);
-	}
-}
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/email/UserEmailTestFactory.java b/notification-manager/src/test/java/de/ozgcloud/notification/email/UserEmailTestFactory.java
deleted file mode 100644
index a45a726387de64c41f790995b69d54770ca0086e..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/email/UserEmailTestFactory.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.email;
-
-import java.util.List;
-
-import de.ozgcloud.notification.email.UserEmail.UserEmailBuilder;
-import de.ozgcloud.notification.user.Recipient;
-import de.ozgcloud.notification.user.RecipientTestFactory;
-import de.ozgcloud.notification.user.UserNotificationService;
-import de.ozgcloud.notification.vorgang.VorgangTestFactory;
-
-public class UserEmailTestFactory {
-
-	public static final List<Recipient> RECIPIENTS = List.of(RecipientTestFactory.create());
-
-	public static UserEmail create() {
-		return createBuilder().build();
-	}
-
-	public static UserEmailBuilder createBuilder() {
-		return UserEmail.builder()
-				.recipients(RECIPIENTS)
-				.subject(UserNotificationService.MAIL_SUBJECT_TEMPLATE.formatted(VorgangTestFactory.VORGANG_NAME))
-				.body(UserNotificationService.MAIL_BODY);
-	}
-}
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/postfach/GrpcPostfachAddressTestFactory.java b/notification-manager/src/test/java/de/ozgcloud/notification/postfach/GrpcPostfachAddressTestFactory.java
deleted file mode 100644
index eb21918f94f2bc40c27636351e944a36e71d1d99..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/postfach/GrpcPostfachAddressTestFactory.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package de.ozgcloud.notification.postfach;
-
-import de.ozgcloud.vorgang.common.GrpcObject;
-import de.ozgcloud.vorgang.common.GrpcProperty;
-import de.ozgcloud.vorgang.vorgang.GrpcPostfachAddress;
-
-public class GrpcPostfachAddressTestFactory {
-
-	public static GrpcPostfachAddress create() {
-		return createBuilder().build();
-	}
-
-	public static GrpcPostfachAddress.Builder createBuilder() {
-		return GrpcPostfachAddress.newBuilder()
-				.setType(PostfachAddressTestFactory.TYPE)
-				.setIdentifier(createIdentifier())
-				.setVersion(PostfachAddressTestFactory.VERSION);
-	}
-	public static GrpcObject createIdentifier() {
-		return GrpcObject.newBuilder()
-				.addProperty(GrpcProperty.newBuilder()
-						.setName(StringBasedIdentifier.POSTFACH_ID_FIELD)
-						.addValue(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE)
-						.build())
-				.build();
-	}
-}
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/postfach/PostfachAddressTestFactory.java b/notification-manager/src/test/java/de/ozgcloud/notification/postfach/PostfachAddressTestFactory.java
deleted file mode 100644
index 14873f7a0a2fa24b0b07cadb2979e1f39f58308d..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/postfach/PostfachAddressTestFactory.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package de.ozgcloud.notification.postfach;
-
-import java.util.UUID;
-
-public class PostfachAddressTestFactory {
-
-	public final static int TYPE = 1;
-	public static final String STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE = UUID.randomUUID().toString();
-	public final static StringBasedIdentifier IDENTIFIER = StringBasedIdentifier.builder().postfachId(STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE)
-			.build();
-	public static final String VERSION = "1.0";
-
-	public static PostfachAddress create() {
-		return createBuilder().build();
-	}
-
-	public static PostfachAddress.PostfachAddressBuilder createBuilder() {
-		return PostfachAddress.builder()
-				.type(TYPE)
-				.identifier(IDENTIFIER)
-				.version(VERSION);
-	}
-}
\ No newline at end of file
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/postfach/PostfachNachrichtTestFactory.java b/notification-manager/src/test/java/de/ozgcloud/notification/postfach/PostfachNachrichtTestFactory.java
deleted file mode 100644
index 24ad218e7e799b33c7e33b00b9b0aa40611350a6..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/postfach/PostfachNachrichtTestFactory.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.postfach;
-
-import java.util.Map;
-
-import de.ozgcloud.notification.vorgang.VorgangTestFactory;
-
-public class PostfachNachrichtTestFactory {
-
-	static final String MESSAGE = "Lorem Ipsum";
-	static final String SUBJECT = "delores est";
-
-	public static final PostfachNachricht create() {
-		return createBuilder().build();
-	}
-
-	public static final PostfachNachricht.PostfachNachrichtBuilder createBuilder() {
-		return PostfachNachricht.builder()
-				.vorgangId(VorgangTestFactory.ID)
-				.postfachId(VorgangTestFactory.POSTFACH_ID)
-				.postfachAddress(PostfachAddressTestFactory.create())
-				.mailBody(MESSAGE)
-				.subject(SUBJECT);
-	}
-
-	public static final Map<String, Object> createAsMap() {
-		return Map.of(
-				PostfachNachricht.FIELD_VORGANG_ID, VorgangTestFactory.ID,
-				PostfachNachricht.FIELD_POSTFACH_ID, VorgangTestFactory.POSTFACH_ID,
-				PostfachNachricht.FIELD_POSTFACH_ADDRESS, createPostfachAddressMap(),
-				PostfachNachricht.FIELD_SUBJECT, SUBJECT,
-				PostfachNachricht.FIELD_MESSAGE, MESSAGE,
-				PostfachNachricht.FIELD_REPLY_OPTION, PostfachNachricht.DEFAULT_REPLY_OPTION);
-	}
-	
-	public static final Map<String, Object> createPostfachAddressMap(){
-		return Map.of(PostfachAddress.TYPE_FIELD, PostfachAddressTestFactory.TYPE,
-				PostfachAddress.VERSION_FIELD, PostfachAddressTestFactory.VERSION,
-				PostfachAddress.IDENTIFIER_FIELD, createIdentifierMap());
-	}
-	
-	public static final Map<String, Object> createIdentifierMap(){
-		return Map.of(PostfachNachricht.FIELD_POSTFACH_ID, PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE);
-	}
-}
\ No newline at end of file
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/postfach/PostfachRemoteServiceTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/postfach/PostfachRemoteServiceTest.java
deleted file mode 100644
index 3ca7a8bae39a3b2f71b2cf03276b22c935aa2c3f..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/postfach/PostfachRemoteServiceTest.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * 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.notification.postfach;
-
-import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.Mockito.*;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Spy;
-
-import de.ozgcloud.nachrichten.postfach.GrpcIsPostfachConfiguredResponse;
-import de.ozgcloud.nachrichten.postfach.PostfachServiceGrpc.PostfachServiceBlockingStub;
-
-class PostfachRemoteServiceTest {
-
-	@Spy
-	@InjectMocks
-	private PostfachRemoteService postfachRemoteService;
-
-	@Mock
-	private PostfachServiceBlockingStub blockingStub;
-
-	private static final GrpcIsPostfachConfiguredResponse GRPC_POSTFACH_RESPONSE = GrpcIsPostfachConfiguredResponse.newBuilder().build();
-
-	@BeforeEach
-	void setup() {
-		when(blockingStub.withInterceptors(any())).thenReturn(blockingStub);
-		when(blockingStub.isPostfachConfigured(any())).thenReturn(GRPC_POSTFACH_RESPONSE);
-	}
-
-	@Test
-	void shouldGetPostfachServiceStub() {
-		postfachRemoteService.isPostfachConfigured();
-
-		verify(postfachRemoteService).getPostfachServiceStub();
-	}
-
-	@Test
-	void shouldCallIsPostfachConfigured() {
-		postfachRemoteService.isPostfachConfigured();
-
-		verify(blockingStub).isPostfachConfigured(any());
-	}
-
-	@Test
-	void shouldReturnIsPostfachConfigured() {
-		var postfachResponse = GrpcIsPostfachConfiguredResponse.newBuilder().setIsConfigured(true).build();
-		when(blockingStub.isPostfachConfigured(any())).thenReturn(postfachResponse);
-
-		var isPostfachConfigured = postfachRemoteService.isPostfachConfigured();
-
-		assertTrue(isPostfachConfigured);
-	}
-}
\ No newline at end of file
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/postfach/PostfachServiceTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/postfach/PostfachServiceTest.java
deleted file mode 100644
index 8451ae541dcec74de9983241a90e4e12937c6a8c..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/postfach/PostfachServiceTest.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * 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.notification.postfach;
-
-import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.Mockito.*;
-
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-
-class PostfachServiceTest {
-
-	@InjectMocks
-	private PostfachService postfachService;
-	@Mock
-	private PostfachRemoteService postfachRemoteService;
-
-	@Test
-	void shouldCallRemoteService() {
-		postfachService.isPostfachConfigured();
-
-		verify(postfachRemoteService).isPostfachConfigured();
-	}
-
-	@Test
-	void shouldReturnRemoteServiceResult() {
-		when(postfachRemoteService.isPostfachConfigured()).thenReturn(true);
-
-		var result = postfachService.isPostfachConfigured();
-
-		assertTrue(result);
-	}
-}
\ No newline at end of file
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/user/GrpcFindRecipientRequestTestFactory.java b/notification-manager/src/test/java/de/ozgcloud/notification/user/GrpcFindRecipientRequestTestFactory.java
deleted file mode 100644
index 428b5812fad8e764015c8a8cadb9db3ea97d3edf..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/user/GrpcFindRecipientRequestTestFactory.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.user;
-
-import de.ozgcloud.user.grpc.recipient.GrpcFindRecipientResponse;
-import de.ozgcloud.user.recipient.GrpcRecipient;
-
-public class GrpcFindRecipientRequestTestFactory {
-
-	public static final GrpcRecipient GRPC_RECIPIENT = GrpcUserRecipientTestFactory.create();
-
-	public static GrpcFindRecipientResponse create() {
-		return createBuilder().build();
-	}
-
-	public static GrpcFindRecipientResponse.Builder createBuilder() {
-		return GrpcFindRecipientResponse.newBuilder().addRecipient(GRPC_RECIPIENT);
-	}
-
-}
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/user/GrpcUserRecipientTestFactory.java b/notification-manager/src/test/java/de/ozgcloud/notification/user/GrpcUserRecipientTestFactory.java
deleted file mode 100644
index f2d58422b6d37d3456fb2b981185dba0a9971664..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/user/GrpcUserRecipientTestFactory.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.user;
-
-import de.ozgcloud.user.recipient.GrpcRecipient;
-
-public class GrpcUserRecipientTestFactory {
-
-	public static GrpcRecipient create() {
-		return createBuilder().build();
-	}
-
-	public static GrpcRecipient.Builder createBuilder() {
-		return GrpcRecipient.newBuilder()
-				.setFirstName(RecipientTestFactory.FIRST_NAME)
-				.setLastName(RecipientTestFactory.LAST_NAME)
-				.setEmail(RecipientTestFactory.EMAIL);
-	}
-}
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/user/RecipientTestFactory.java b/notification-manager/src/test/java/de/ozgcloud/notification/user/RecipientTestFactory.java
deleted file mode 100644
index e4da940cf2bbbacbaddc7f2f56b8341efdae897b..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/user/RecipientTestFactory.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.user;
-
-import de.ozgcloud.notification.user.Recipient.RecipientBuilder;
-
-public class RecipientTestFactory {
-
-	public static final String FIRST_NAME = "first";
-	public static final String LAST_NAME = "last";
-	public static final String EMAIL = "email@example.com";
-
-	public static Recipient create() {
-		return createBuilder().build();
-	}
-
-	public static RecipientBuilder createBuilder() {
-		return Recipient.builder()
-				.firstName(FIRST_NAME)
-				.lastName(LAST_NAME)
-				.email(EMAIL);
-	}
-}
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/user/UserNotificationEventListenerTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/user/UserNotificationEventListenerTest.java
deleted file mode 100644
index 7d8eeef30b8efc2f8e6d78862e8b454efe61865e..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/user/UserNotificationEventListenerTest.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.user;
-
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-
-import de.ozgcloud.command.VorgangCreatedEvent;
-import de.ozgcloud.notification.vorgang.VorgangId;
-import de.ozgcloud.notification.vorgang.VorgangService;
-import de.ozgcloud.notification.vorgang.VorgangTestFactory;
-
-class UserNotificationEventListenerTest {
-
-	@InjectMocks
-	private UserNotificationEventListener userNotificationEventListener;
-
-	@Mock
-	private UserNotificationService userNotificationService;
-	@Mock
-	private VorgangService vorgangService;
-
-	@DisplayName("On Vorgang created")
-	@Nested
-	class TestOnVorgangCreated {
-
-		private static final VorgangCreatedEvent EVENT = new VorgangCreatedEvent(VorgangTestFactory.ID.toString());
-
-		@DisplayName("with existing orgaId")
-		@Nested
-		class TestWithOrgaId {
-
-			@BeforeEach
-			void initMock() {
-				when(vorgangService.getVorgang(any())).thenReturn(VorgangTestFactory.create());
-			}
-
-			@Test
-			void shouldCallVorgangService() {
-				userNotificationEventListener.onVorgangCreated(EVENT);
-
-				verify(vorgangService).getVorgang(VorgangId.from(EVENT.getSource()));
-			}
-
-			@Test
-			void shouldNotifyWithOrganisationeinheitIds() {
-				var vorgang = VorgangTestFactory.create();
-				when(vorgangService.getVorgang(any())).thenReturn(vorgang);
-
-				userNotificationEventListener.onVorgangCreated(EVENT);
-
-				verify(userNotificationService).sendNotification(vorgang);
-			}
-		}
-
-	}
-}
\ No newline at end of file
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/user/UserNotificationServiceTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/user/UserNotificationServiceTest.java
deleted file mode 100644
index b4658fa62cb4f37df1a1158f8c8517195c3e6f3d..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/user/UserNotificationServiceTest.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.user;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-
-import java.util.List;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Spy;
-
-import de.ozgcloud.notification.email.EmailRemoteService;
-import de.ozgcloud.notification.email.UserEmail;
-import de.ozgcloud.notification.email.UserEmailTestFactory;
-import de.ozgcloud.notification.vorgang.Vorgang;
-import de.ozgcloud.notification.vorgang.VorgangTestFactory;
-
-class UserNotificationServiceTest {
-
-	@Spy
-	@InjectMocks
-	private UserNotificationService service;
-
-	@Mock
-	private EmailRemoteService emailRemoteService;
-	@Mock
-	private UserRemoteService userRemoteService;
-
-	@DisplayName("Send notification")
-	@Nested
-	class TestSendNotification {
-
-		@DisplayName("with valid orgaId")
-		@Nested
-		class TestWithValidOrgaId {
-
-			@BeforeEach
-			void init() {
-				when(userRemoteService.getRecipients(VorgangTestFactory.ORGANISATIONS_EINHEIT_ID)).thenReturn(List.of(RecipientTestFactory.create()));
-				doNothing().when(emailRemoteService).sendEmail(any(UserEmail.class));
-			}
-
-			@Test
-			void shouldGetRecipients() {
-				service.sendNotification(VorgangTestFactory.create());
-
-				verify(userRemoteService).getRecipients(VorgangTestFactory.ORGANISATIONS_EINHEIT_ID);
-			}
-
-			@Test
-			void shouldSendEmail() {
-				var email = UserEmailTestFactory.create();
-				doReturn(email).when(service).buildUserEmail(anyList(), anyString());
-
-				service.sendNotification(VorgangTestFactory.create());
-
-				verify(emailRemoteService).sendEmail(email);
-			}
-
-			@Test
-			void shouldSetSubject() {
-				service.sendNotification(VorgangTestFactory.create());
-
-				verify(service).buildUserEmail(anyList(), eq("Neuer Vorgang: " + VorgangTestFactory.VORGANG_NAME));
-
-			}
-		}
-
-		@DisplayName("with null as orgaId")
-		@Nested
-		class TestWithInvalidOrgaId {
-
-			private Vorgang vorgang = VorgangTestFactory.createBuilder().organisationseinheitenId(null).build();
-
-			@Test
-			void shouldNotCallUserRemoteService() {
-				service.sendNotification(vorgang);
-
-				verify(userRemoteService, never()).getRecipients(anyString());
-			}
-
-			@Test
-			void shouldNotCallEmailRemoteServie() {
-				service.sendNotification(vorgang);
-
-				verify(emailRemoteService, never()).sendEmail(any(UserEmail.class));
-			}
-		}
-
-		@Test
-		void shouldThrowExceptionWhenVorgangNull() {
-			assertThatThrownBy(() -> service.sendNotification(null))
-					.withFailMessage("organisationsEinheitId cannot be null.")
-					.isInstanceOf(IllegalArgumentException.class);
-		}
-	}
-}
\ No newline at end of file
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/user/UserRecipientMapperTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/user/UserRecipientMapperTest.java
deleted file mode 100644
index 91cc27326ca9240b66017c3e8be112803309d71b..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/user/UserRecipientMapperTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.user;
-
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mapstruct.factory.Mappers;
-
-import static org.assertj.core.api.Assertions.*;
-
-class UserRecipientMapperTest {
-
-	private UserRecipientMapper mapper = Mappers.getMapper(UserRecipientMapper.class);
-
-	@Nested
-	class TestFromGrpc {
-
-		@Test
-		void shouldMapRecipient() {
-			var recipient = mapper.fromGrpc(GrpcUserRecipientTestFactory.create());
-
-			assertThat(recipient).usingRecursiveComparison().isEqualTo(RecipientTestFactory.create());
-		}
-	}
-}
\ No newline at end of file
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/user/UserRemoteServiceTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/user/UserRemoteServiceTest.java
deleted file mode 100644
index bbd962ca745bff4ce755c0220208a049f27fddbb..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/user/UserRemoteServiceTest.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.user;
-
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-
-import de.ozgcloud.notification.NotificationManagerCallContextAttachingInterceptor;
-import de.ozgcloud.notification.vorgang.VorgangTestFactory;
-import de.ozgcloud.user.grpc.recipient.RecipientServiceGrpc.RecipientServiceBlockingStub;
-
-class UserRemoteServiceTest {
-
-	@InjectMocks
-	private UserRemoteService remoteService;
-
-	@Mock
-	private RecipientServiceBlockingStub stub;
-	@Mock
-	private UserRecipientMapper mapper;
-
-	@Nested
-	class TestRequestRecipients {
-
-		@BeforeEach
-		void initTest() {
-			when(stub.findRecipientByOrganisationsEinheitId(any())).thenReturn(GrpcFindRecipientRequestTestFactory.create());
-			when(stub.withInterceptors(any())).thenReturn(stub);
-		}
-
-		@Test
-		void shouldCallMapper() {
-			remoteService.getRecipients(VorgangTestFactory.ORGANISATIONS_EINHEIT_ID);
-
-			verify(mapper).fromGrpc(GrpcFindRecipientRequestTestFactory.GRPC_RECIPIENT);
-		}
-
-		@Test
-		void shouldUseInterceptor() {
-			remoteService.getRecipients(VorgangTestFactory.ORGANISATIONS_EINHEIT_ID);
-
-			verify(stub).withInterceptors(any(NotificationManagerCallContextAttachingInterceptor.class));
-		}
-	}
-}
\ No newline at end of file
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/GrpcServiceKontoTestFactory.java b/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/GrpcServiceKontoTestFactory.java
deleted file mode 100644
index aa80911f97481bd1fafbe0b11d30e53fc6713d61..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/GrpcServiceKontoTestFactory.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package de.ozgcloud.notification.vorgang;
-
-import de.ozgcloud.notification.postfach.GrpcPostfachAddressTestFactory;
-import de.ozgcloud.vorgang.vorgang.GrpcServiceKonto;
-
-public class GrpcServiceKontoTestFactory {
-
-	public final static String TYPE = "OSI";
-	public final static String TRUST_LEVEL = "STORK-QAA-LEVEL-1";
-
-	public static GrpcServiceKonto create() {
-		return createBuilder().build();
-	}
-
-	public static GrpcServiceKonto.Builder createBuilder() {
-		return GrpcServiceKonto.newBuilder()
-				.setType(TYPE)
-				.setTrustLevel(TRUST_LEVEL)
-				.addPostfachAddresses(GrpcPostfachAddressTestFactory.create());
-	}
-}
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/GrpcVorgangHeadTestFactory.java b/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/GrpcVorgangHeadTestFactory.java
deleted file mode 100644
index 88a62e902d7b3a33497b77ffe16a0fb1723f352f..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/GrpcVorgangHeadTestFactory.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package de.ozgcloud.notification.vorgang;
-
-import de.ozgcloud.vorgang.vorgang.GrpcVorgangHead;
-
-public class GrpcVorgangHeadTestFactory {
-
-	public static GrpcVorgangHead create() {
-		return createBuilder().build();
-	}
-
-	public static GrpcVorgangHead.Builder createBuilder() {
-		return GrpcVorgangHead.newBuilder()
-				.setServiceKonto(GrpcServiceKontoTestFactory.create());
-	}
-}
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/GrpcVorgangTestFactory.java b/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/GrpcVorgangTestFactory.java
deleted file mode 100644
index 4856525424aada9ef9209e3fa7837fcfecaf1247..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/GrpcVorgangTestFactory.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.vorgang;
-
-import de.ozgcloud.vorgang.vorgang.GrpcAntragsteller;
-import de.ozgcloud.vorgang.vorgang.GrpcEingang;
-import de.ozgcloud.vorgang.vorgang.GrpcVorgangWithEingang;
-import de.ozgcloud.vorgang.vorgang.GrpcZustaendigeStelle;
-
-public class GrpcVorgangTestFactory {
-
-	public static GrpcVorgangWithEingang create() {
-		return createBuilder().build();
-	}
-
-	public static GrpcVorgangWithEingang.Builder createBuilder() {
-		return GrpcVorgangWithEingang.newBuilder()
-				.setId(VorgangTestFactory.ID.toString())
-				.setName(VorgangTestFactory.VORGANG_NAME)
-				.setNummer(VorgangTestFactory.VORGANG_NUMMER)
-				.setCreatedAt(VorgangTestFactory.CREATED_AT_STR)
-				.setFormEngineName(VorgangTestFactory.FORM_ENGINE_NAME)
-				.setHeader(GrpcVorgangHeadTestFactory.create())
-				.setEingang(GrpcEingang.newBuilder()
-						.setAntragsteller(GrpcAntragsteller.newBuilder()
-								.setPostfachId(VorgangTestFactory.POSTFACH_ID)
-								.build())
-						.setZustaendigeStelle(
-								GrpcZustaendigeStelle.newBuilder().setOrganisationseinheitenId(VorgangTestFactory.ORGANISATIONS_EINHEIT_ID).build())
-						.build());
-
-	}
-}
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/VorgangMapperTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/VorgangMapperTest.java
deleted file mode 100644
index a3fbf1407cbb0119151a844b4c2caaa81f2003e2..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/VorgangMapperTest.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.vorgang;
-
-import static org.assertj.core.api.Assertions.*;
-
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mapstruct.factory.Mappers;
-
-import de.ozgcloud.notification.postfach.PostfachAddressTestFactory;
-
-class VorgangMapperTest {
-
-	private final VorgangMapper mapper = Mappers.getMapper(VorgangMapper.class);
-
-	@DisplayName("From grpc")
-	@Nested
-	class TestFromGrpc {
-
-		@Test
-		void shouldMapVorgang() {
-			var mapped = fromGrpc();
-
-			assertThat(mapped).usingRecursiveComparison().ignoringFields("postfachAddress").isEqualTo(VorgangTestFactory.create());
-		}
-		
-		@DisplayName("postfachAddress")
-		@Nested
-		class TestPostfachAddress {
-			
-			@Test
-			void shouldMapIfServiceKontoExists() {
-				var mapped = fromGrpc();
-
-				assertThat(mapped.getPostfachAddress()).usingRecursiveComparison().isEqualTo(PostfachAddressTestFactory.create());
-			}
-			
-			@Test
-			void shouldBeEmptyIfServiceKontoNotExists() {
-				var mapped = mapper.fromGrpc(GrpcVorgangTestFactory.createBuilder().clearHeader().build());
-
-				assertThat(mapped.getPostfachAddress()).isNull();
-			}
-		}
-
-		private Vorgang fromGrpc() {
-			return mapper.fromGrpc(GrpcVorgangTestFactory.create());
-		}
-	}
-}
\ No newline at end of file
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/VorgangRemoteServiceTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/VorgangRemoteServiceTest.java
deleted file mode 100644
index d9a8104c5ac7b45450fa690e77f25f1bb32bace1..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/VorgangRemoteServiceTest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.vorgang;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Captor;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-
-import de.ozgcloud.notification.NotificationManagerCallContextAttachingInterceptor;
-import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangWithEingangRequest;
-import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangWithEingangResponse;
-import de.ozgcloud.vorgang.vorgang.GrpcVorgangWithEingang;
-import de.ozgcloud.vorgang.vorgang.VorgangServiceGrpc.VorgangServiceBlockingStub;
-
-class VorgangRemoteServiceTest {
-
-	@InjectMocks
-	private VorgangRemoteService remoteService;
-	@Mock
-	private VorgangServiceBlockingStub stub;
-	@Mock
-	private VorgangMapper mapper;
-
-	@Nested
-	class TestFindVorgangById {
-
-		private static final GrpcVorgangWithEingang GRPC_VORGANG = GrpcVorgangTestFactory.create();
-		private static final Vorgang VORGANG = VorgangTestFactory.create();
-
-		@Captor
-		private ArgumentCaptor<GrpcFindVorgangWithEingangRequest> requestCaptor;
-
-		@BeforeEach
-		void initStubMock() {
-			var response = GrpcFindVorgangWithEingangResponse.newBuilder().setVorgangWithEingang(GRPC_VORGANG).build();
-			when(stub.findVorgangWithEingang(any())).thenReturn(response);
-
-			when(stub.withInterceptors(any())).thenReturn(stub);
-		}
-
-		@BeforeEach
-		void initMapperMock() {
-			when(mapper.fromGrpc(any())).thenReturn(VORGANG);
-		}
-
-		@Test
-		void shouldUseInterceptor() {
-			remoteService.getVorgang(VorgangTestFactory.ID);
-
-			verify(stub).withInterceptors(any(NotificationManagerCallContextAttachingInterceptor.class));
-		}
-
-		@Test
-		void shouldCallStub() {
-			remoteService.getVorgang(VorgangTestFactory.ID);
-
-			verify(stub).findVorgangWithEingang(requestCaptor.capture());
-
-			assertThat(requestCaptor.getValue().getId()).isEqualTo(VorgangTestFactory.ID.toString());
-		}
-
-		@Test
-		void shouldCallMapper() {
-			remoteService.getVorgang(VorgangTestFactory.ID);
-
-			verify(mapper).fromGrpc(same(GRPC_VORGANG));
-		}
-
-		@Test
-		void shouldReturnMappedVorgang() {
-			var result = remoteService.getVorgang(VorgangTestFactory.ID);
-
-			assertThat(result).isSameAs(VORGANG);
-		}
-
-	}
-
-}
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/VorgangServiceTest.java b/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/VorgangServiceTest.java
deleted file mode 100644
index a0e4f9efe04661c26590c0231dcd91e78816e164..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/VorgangServiceTest.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.vorgang;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-
-class VorgangServiceTest {
-
-	@InjectMocks
-	private VorgangService service;
-
-	@Mock
-	private VorgangRemoteService remoteService;
-
-	@Nested
-	class TestGetVorgang {
-		@Test
-		void shouldCallRemoteService() {
-			service.getVorgang(VorgangTestFactory.ID);
-
-			verify(remoteService).getVorgang(VorgangTestFactory.ID);
-		}
-
-		@Test
-		void shouldReturnResultFromRemoteService() {
-			var vorgang = VorgangTestFactory.create();
-			when(remoteService.getVorgang(any())).thenReturn(vorgang);
-
-			var result = service.getVorgang(VorgangTestFactory.ID);
-
-			assertThat(result).isSameAs(vorgang);
-		}
-	}
-
-}
diff --git a/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/VorgangTestFactory.java b/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/VorgangTestFactory.java
deleted file mode 100644
index 47162ac2733c355fb25902e9ad0f267b5de1eef6..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/java/de/ozgcloud/notification/vorgang/VorgangTestFactory.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2022 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.notification.vorgang;
-
-import java.time.ZonedDateTime;
-import java.util.UUID;
-
-import de.ozgcloud.notification.postfach.PostfachAddressTestFactory;
-
-public class VorgangTestFactory {
-
-	public static final VorgangId ID = VorgangId.from(UUID.randomUUID().toString());
-
-	public static final String VORGANG_NAME = "Antrag auf Toast";
-	public static final String VORGANG_NUMMER = "1234";
-	public static final String CREATED_AT_STR = "2001-04-01T10:30:00Z";
-	public static final ZonedDateTime CREATED_AT = ZonedDateTime.parse(CREATED_AT_STR);
-
-	public static final String POSTFACH_ID = UUID.randomUUID().toString();
-	public static final String FORM_ENGINE_NAME = "deluxeEngine";
-	public static final String ORGANISATIONS_EINHEIT_ID = "1234567889";
-
-	public static Vorgang create() {
-		return createBuilder().build();
-	}
-
-	public static Vorgang.VorgangBuilder createBuilder() {
-		return Vorgang.builder()
-				.id(ID)
-				.vorgangName(VORGANG_NAME)
-				.vorgangNummer(VORGANG_NUMMER)
-				.createdAt(CREATED_AT)
-				.postfachId(POSTFACH_ID)
-				.postfachAddress(PostfachAddressTestFactory.create())
-				.formEngineName(FORM_ENGINE_NAME)
-				.organisationseinheitenId(ORGANISATIONS_EINHEIT_ID);
-	}
-
-}
diff --git a/notification-manager/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension b/notification-manager/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension
deleted file mode 100644
index 79b126e6cdb86bec1f4f08c205de8961bde1934a..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension
+++ /dev/null
@@ -1 +0,0 @@
-org.mockito.junit.jupiter.MockitoExtension
\ No newline at end of file
diff --git a/notification-manager/src/test/resources/junit-platform.properties b/notification-manager/src/test/resources/junit-platform.properties
deleted file mode 100644
index 1cebb76d5a58ac034b2627d12411d82d1e85821e..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/resources/junit-platform.properties
+++ /dev/null
@@ -1 +0,0 @@
-junit.jupiter.extensions.autodetection.enabled = true
\ No newline at end of file
diff --git a/notification-manager/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/notification-manager/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
deleted file mode 100644
index ca6ee9cea8ec189a088d50559325d4e84ff8ad09..0000000000000000000000000000000000000000
--- a/notification-manager/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
+++ /dev/null
@@ -1 +0,0 @@
-mock-maker-inline
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 1dfbfb7846a15e1215968b99ebe9228d08ca28f4..bf4b4ecfcb007964954c36bad24cdd8a480f897e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,7 +29,7 @@
 	<modelVersion>4.0.0</modelVersion>
 	<groupId>de.ozgcloud.vorgang</groupId>
 	<artifactId>vorgang-manager</artifactId>
-	<version>2.6.0-SNAPSHOT</version>
+	<version>2.7.0-SNAPSHOT</version>
 
 	<name>OZG-Cloud Vorgang Manager</name>
 	<packaging>pom</packaging>
@@ -41,13 +41,10 @@
 	<modules>
 		<module>vorgang-manager-interface</module>
 		<module>vorgang-manager-server</module>
-		<module>nachrichten-manager</module>
 		<module>vorgang-manager-utils</module>
-		<module>notification-manager</module>
 		<module>vorgang-manager-command</module>
 		<module>bescheid-manager</module>
 		<module>vorgang-manager-base</module>
-		<module>nachrichten-bayernid-proxy</module>
 	</modules>
 
 	<build>
diff --git a/vorgang-manager-base/pom.xml b/vorgang-manager-base/pom.xml
index fdbefa64727d826638e6ea8fca797b2388833b8c..16aaa67122d0dbcbb8bb5a398e981fed2e1293ab 100644
--- a/vorgang-manager-base/pom.xml
+++ b/vorgang-manager-base/pom.xml
@@ -6,13 +6,13 @@
 	<parent>
 		<groupId>de.ozgcloud.common</groupId>
 		<artifactId>ozgcloud-common-parent</artifactId>
-		<version>4.0.1-SNAPSHOT</version>
+		<version>4.1.0-SNAPSHOT</version>
 		<relativePath />
 	</parent>
 
 	<groupId>de.ozgcloud.vorgang</groupId>
 	<artifactId>vorgang-manager-base</artifactId>
-	<version>2.6.0-SNAPSHOT</version>
+	<version>2.7.0-SNAPSHOT</version>
 
 	<name>OZG-Cloud Vorgang Manager Base</name>
 
diff --git a/vorgang-manager-command/pom.xml b/vorgang-manager-command/pom.xml
index e8ce77739c50501fe9e1ab862b4e1b67da34cd4f..ed489b6236cce36418c132be176d709394b0a1f8 100644
--- a/vorgang-manager-command/pom.xml
+++ b/vorgang-manager-command/pom.xml
@@ -4,13 +4,13 @@
 	<parent>
 		<groupId>de.ozgcloud.common</groupId>
 		<artifactId>ozgcloud-common-dependencies</artifactId>
-		<version>4.0.1</version>
+		<version>4.1.0-SNAPSHOT</version>
 		<relativePath/>
 	</parent>
 	
 	<groupId>de.ozgcloud.command</groupId>
 	<artifactId>command-manager</artifactId>
-	<version>2.6.0-SNAPSHOT</version>
+	<version>2.7.0-SNAPSHOT</version>
 	<name>OZG-Cloud Command Manager</name>
 
 	<properties>
diff --git a/vorgang-manager-interface/pom.xml b/vorgang-manager-interface/pom.xml
index 13bb98f348ea36b237aa56a7489e09cde81e51a4..ca299a6d8eb8f93ad3c36d8daadc1b94b267081a 100644
--- a/vorgang-manager-interface/pom.xml
+++ b/vorgang-manager-interface/pom.xml
@@ -30,13 +30,13 @@
 	<parent>
 		<groupId>de.ozgcloud.common</groupId>
 		<artifactId>ozgcloud-common-dependencies</artifactId>
-		<version>4.0.1</version>
+		<version>4.1.0-SNAPSHOT</version>
 		<relativePath/>
 	</parent>
 
 	<groupId>de.ozgcloud.vorgang</groupId>
 	<artifactId>vorgang-manager-interface</artifactId>
-	<version>2.6.0-SNAPSHOT</version>
+	<version>2.7.0-SNAPSHOT</version>
 
 	<name>OZG-Cloud Vorgang Manager gRPC Interface</name>
 	<description>Interface (gRPC) for Vorgang Manager Server</description>
diff --git a/vorgang-manager-interface/src/main/protobuf/antragraum.model.proto b/vorgang-manager-interface/src/main/protobuf/antragraum.model.proto
deleted file mode 100644
index 062c92b7c6e0d9cdc7c2f40902737f61bed20094..0000000000000000000000000000000000000000
--- a/vorgang-manager-interface/src/main/protobuf/antragraum.model.proto
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * 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.
- */
-syntax = "proto3";
-
-package de.ozgcloud.nachrichten.antragraum;
-
-import "postfach.model.proto";
-
-option java_multiple_files = true;
-option java_package = "de.ozgcloud.nachrichten.antragraum";
-option java_outer_classname = "AntragraumModelProto";
-
-message GrpcFindRueckfragenRequest {
-  string samlToken = 1;
-  string postfachId = 2;
-}
-
-message GrpcFindRueckfragenResponse {
-  repeated GrpcRueckfrage rueckfrage = 1;
-}
-
-message GrpcRueckfrage {
-  string id = 1;
-  string vorgangId = 2;
-  string vorgangName = 3;
-  string sentAt = 4;
-  string answeredAt = 5;
-  string status = 6;
-  string text = 7;
-  repeated string attachmentFileId = 8;
-  repeated GrpcRueckfrageAnswer answers = 9;
-}
-
-message GrpcSendRueckfrageAnswerRequest {
-  string samlToken = 1;
-  GrpcRueckfrageAnswer answer = 2;
-}
-
-message GrpcRueckfrageAnswer {
-  string rueckfrageId = 1;
-  string answerText = 2;
-  repeated string attachmentFileId = 3;
-}
\ No newline at end of file
diff --git a/vorgang-manager-interface/src/main/protobuf/antragraum.proto b/vorgang-manager-interface/src/main/protobuf/antragraum.proto
deleted file mode 100644
index 0fa6d67dffed44a28d58a531d8ff1ad03bf128ea..0000000000000000000000000000000000000000
--- a/vorgang-manager-interface/src/main/protobuf/antragraum.proto
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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.
- */
-syntax = "proto3";
-
-package de.ozgcloud.nachrichten.antragraum;
-
-import "antragraum.model.proto";
-import "command.model.proto";
-
-option java_multiple_files = true;
-option java_package = "de.ozgcloud.nachrichten.antragraum";
-option java_outer_classname = "AntragraumProto";
-
-service AntragraumService {
-  rpc FindRueckfragen(GrpcFindRueckfragenRequest) returns (GrpcFindRueckfragenResponse) {
-  }
-
-  rpc SendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequest) returns (de.ozgcloud.vorgang.grpc.command.GrpcCommand) {
-  }
-}
\ No newline at end of file
diff --git a/vorgang-manager-interface/src/main/protobuf/bescheid.model.proto b/vorgang-manager-interface/src/main/protobuf/bescheid.model.proto
index 992c4968e30a8439ca6c2087345140e8e26a1b09..e32cd23a96be451c775570e10de3bcb3d8413f1c 100644
--- a/vorgang-manager-interface/src/main/protobuf/bescheid.model.proto
+++ b/vorgang-manager-interface/src/main/protobuf/bescheid.model.proto
@@ -21,30 +21,51 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
- syntax = "proto3";
+syntax = "proto3";
 
- package de.ozgcloud.bescheid;
+package de.ozgcloud.bescheid;
 
- option java_multiple_files = true;
- option java_package = "de.ozgcloud.bescheid";
- option java_outer_classname = "BescheidModelProto";
+option java_multiple_files = true;
+option java_package = "de.ozgcloud.bescheid";
+option java_outer_classname = "BescheidModelProto";
 
 message GrpcGetBescheidDraftRequest {
-	string vorgangId = 1;
+  string vorgangId = 1;
 }
 
 message GrpcGetBescheidDraftResponse {
-	GrpcBescheid bescheid = 1;
+  GrpcBescheid bescheid = 1;
+}
+
+message GrpcGetAllBescheidRequest {
+  string vorgangId = 1;
+}
+
+message GrpcGetAllBescheidResponse {
+  repeated GrpcBescheid bescheid = 1;
 }
 
 message GrpcBescheid {
-	string beschiedenAm = 1;
-	bool bewilligt = 2;
-	string bescheidDocument = 3;
-	repeated string attachments = 4;
-	string sendBy = 5;
-	string nachrichtText = 6;
-	string nachrichtSubject = 7;
-	string id = 8;
-	int64 version = 9;
+  string beschiedenAm = 1;
+  bool bewilligt = 2;
+  string bescheidDocument = 3;
+  repeated string attachments = 4;
+  string sendBy = 5;
+  string nachrichtText = 6;
+  string nachrichtSubject = 7;
+  string id = 8;
+  int64 version = 9;
+  string status = 10;
+}
+
+message GrpcBescheidManagerConfigRequest {}
+
+message GrpcBescheidManagerConfigResponse {
+  string version = 1;
+  string javaVersion = 2;
+  GrpcBescheidManagerFeatures features = 3;
+}
+
+message GrpcBescheidManagerFeatures {
+  bool canCreateBescheidDocument = 1;
 }
\ No newline at end of file
diff --git a/vorgang-manager-interface/src/main/protobuf/bescheid.proto b/vorgang-manager-interface/src/main/protobuf/bescheid.proto
index 9e6bb91b36c2c0257190cc98fcede20a2b8c6393..49d355a435c9cad12c457229967db728b886053e 100644
--- a/vorgang-manager-interface/src/main/protobuf/bescheid.proto
+++ b/vorgang-manager-interface/src/main/protobuf/bescheid.proto
@@ -21,17 +21,23 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
- syntax = "proto3";
+syntax = "proto3";
 
- package de.ozgcloud.bescheid;
+package de.ozgcloud.bescheid;
 
- import "bescheid.model.proto";
+import "bescheid.model.proto";
 
- option java_multiple_files = true;
- option java_package = "de.ozgcloud.bescheid";
- option java_outer_classname = "BescheidProto";
+option java_multiple_files = true;
+option java_package = "de.ozgcloud.bescheid";
+option java_outer_classname = "BescheidProto";
 
- service BescheidService {
- 	rpc getBescheidDraft(GrpcGetBescheidDraftRequest) returns (GrpcGetBescheidDraftResponse) {
- 	}
- }
\ No newline at end of file
+service BescheidService {
+  rpc getBescheidDraft(GrpcGetBescheidDraftRequest) returns (GrpcGetBescheidDraftResponse) {
+  }
+
+  rpc getAll(GrpcGetAllBescheidRequest) returns (GrpcGetAllBescheidResponse) {
+  }
+
+  rpc getConfig(GrpcBescheidManagerConfigRequest) returns (GrpcBescheidManagerConfigResponse) {
+  }
+}
\ No newline at end of file
diff --git a/vorgang-manager-interface/src/main/protobuf/email.model.proto b/vorgang-manager-interface/src/main/protobuf/email.model.proto
deleted file mode 100644
index 25771368379bf69746f41b5688fd608fd2c77e87..0000000000000000000000000000000000000000
--- a/vorgang-manager-interface/src/main/protobuf/email.model.proto
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2022 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.
- */
-syntax = "proto3";
-
-package de.ozgcloud.nachrichten.email;
-
-option java_multiple_files = true;
-option java_package = "de.ozgcloud.nachrichten.email";
-option java_outer_classname = "EmailModelProto";
-
-message GrpcRecipient {
-  string firstName = 1;
-  string lastName = 2;
-  string email = 3;
-}
-
-message GrpcSendEmailRequest {
-  repeated GrpcRecipient recipients = 1;
-  string subject = 2;
-  string body = 3;
-}
-
-message GrpcSendEmailResponse {
-}
\ No newline at end of file
diff --git a/vorgang-manager-interface/src/main/protobuf/email.proto b/vorgang-manager-interface/src/main/protobuf/email.proto
deleted file mode 100644
index 2f6eb15bf366aeabc4fde7338a30d016d84ea352..0000000000000000000000000000000000000000
--- a/vorgang-manager-interface/src/main/protobuf/email.proto
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2022 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.
- */
-syntax = "proto3";
-
-package de.ozgcloud.nachrichten.email;
-
-import "email.model.proto";
-
-option java_multiple_files = true;
-option java_package = "de.ozgcloud.nachrichten.email";
-option java_outer_classname = "EmailProto";
-
-
-service EmailService {
-  rpc sendEmail(GrpcSendEmailRequest) returns (GrpcSendEmailResponse);
-}
\ No newline at end of file
diff --git a/vorgang-manager-interface/src/main/protobuf/postfach.model.proto b/vorgang-manager-interface/src/main/protobuf/postfach.model.proto
deleted file mode 100644
index e87eec8e340a95af400bcfa5692cfafd8b9e10c2..0000000000000000000000000000000000000000
--- a/vorgang-manager-interface/src/main/protobuf/postfach.model.proto
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright (C) 2022 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.
- */
-syntax = "proto3";
-
-package de.ozgcloud.nachrichten.postfach;
-
-import "callcontext.proto";
-import "vorgang.model.proto";
-import "common.model.proto";
-
-option java_multiple_files = true;
-option java_package = "de.ozgcloud.nachrichten.postfach";
-option java_outer_classname = "PostfachMailModelProto";
-
-message GrpcSendPostfachMailRequest {
-	de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
-	string commandId = 2;
-	GrpcPostfachMail mail = 5;
-}
-
-message GrpcSaveNachrichtDraftRequest {
-	string vorgangId = 1;
-	GrpcPostfachNachricht nachricht = 2;
-}
-
-message GrpcSaveNachrichtDraftResponse {
-}
-
-message GrpcSendPostfachMailResponse {
-}
-
-message GrpcFindPostfachMailRequest {
-	de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
-	string nachrichtId = 2;
-}
-
-message GrpcFindPostfachMailResponse {
-	GrpcPostfachMail nachricht = 1;
-}
-
-message GrpcFindPostfachMailsRequest {
-	de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
-	string vorgangId = 2;
-}
-
-message GrpcFindPostfachMailsResponse {
-	repeated GrpcPostfachMail mails = 1;
-}
-
-enum GrpcDirection {
-	UNDEFINED = 0;
-	IN = 1;
-	OUT = 2;
-}
-
-message GrpcPostfachNachricht {
-	string id = 1;
-	string createdAt = 2;
-	de.ozgcloud.vorgang.vorgang.GrpcPostfachAddress postfachAddress = 3;
-	string subject = 4;
-	string mailBody = 5;
-	string replyOption = 6;
-	repeated string attachment = 7;
-}
-
-message GrpcPostfachMail {
-	string id = 1;
-	string vorgangId = 2;
-	string postfachId = 3 [deprecated = true];
-	GrpcPostfachAddress postfachAddress = 14;
-	string createdAt = 4;
-	string createdBy = 5;
-	string sentAt = 6;
-	bool sentSuccessful = 7;
-	string messageCode = 8;
-	GrpcDirection direction = 9;
-	string subject = 10;
-	string mailBody = 11;
-	string replyOption = 12;
-	repeated string attachment = 13;
-	GrpcPostfachAddress address = 15;
-}
-
-message GrpcPostfachAddress {
-	string version = 1;
-	de.ozgcloud.vorgang.common.GrpcObject identifier = 2;
-	int32 type = 3;
-	string serviceKontoType = 4;
-}
-
-message GrpcResendPostfachMailRequest {
-	de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
-	string commandId = 2;
-	string postfachMailId = 3;
-}
-
-message GrpcResendPostfachMailResponse {
-}
-
-message GrpcIsPostfachConfiguredRequest {
-	de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
-}
-
-message GrpcIsPostfachConfiguredResponse {
-	bool isConfigured = 1;
-}
-
-message GrpcGetPostfachConfigRequest {
-}
-
-message GrpcGetPostfachConfigResponse {
-	bool configured = 1;
-	repeated GrpcPostfach postfach = 2;
-}
-
-message GrpcPostfach {
-	string type = 1;
-	bool replyAllowed = 2;
-}
\ No newline at end of file
diff --git a/vorgang-manager-interface/src/main/protobuf/postfach.proto b/vorgang-manager-interface/src/main/protobuf/postfach.proto
deleted file mode 100644
index 13cd376f935d32dba9640115894b6ba1bcf8efe2..0000000000000000000000000000000000000000
--- a/vorgang-manager-interface/src/main/protobuf/postfach.proto
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2022 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.
- */
-syntax = "proto3";
-
-package de.ozgcloud.nachrichten.postfach;
-
-import "postfach.model.proto";
-
-option java_multiple_files = true;
-option java_package = "de.ozgcloud.nachrichten.postfach";
-option java_outer_classname = "MailProto";
-
-service PostfachService {
-	rpc SaveNachrichtDraft(GrpcSaveNachrichtDraftRequest) returns (GrpcSaveNachrichtDraftResponse) {
-	}
-
-	rpc SendPostfachMail(GrpcSendPostfachMailRequest) returns (GrpcSendPostfachMailResponse) {
-	}
-	
-	rpc FindPostfachMail(GrpcFindPostfachMailRequest) returns (GrpcFindPostfachMailResponse) {
-	}
-	
-	rpc FindPostfachMails(GrpcFindPostfachMailsRequest) returns (GrpcFindPostfachMailsResponse) {
-	}
-	
-	rpc ResendPostfachMail(GrpcResendPostfachMailRequest) returns (GrpcResendPostfachMailResponse) {
-	}
-	
-	rpc IsPostfachConfigured(GrpcIsPostfachConfiguredRequest) returns (GrpcIsPostfachConfiguredResponse) {
-	}
-
-	rpc GetPostfachConfig(GrpcGetPostfachConfigRequest) returns (GrpcGetPostfachConfigResponse) {
-	}
-}
\ No newline at end of file
diff --git a/vorgang-manager-interface/src/main/protobuf/vorgang.model.proto b/vorgang-manager-interface/src/main/protobuf/vorgang.model.proto
index 7719beb188b32fd0fdec649061e9844c5b7119e6..dc8cc1c5bc16b8277a61fd4b7741fc2fe921c924 100644
--- a/vorgang-manager-interface/src/main/protobuf/vorgang.model.proto
+++ b/vorgang-manager-interface/src/main/protobuf/vorgang.model.proto
@@ -138,6 +138,7 @@ message GrpcAntragsteller {
   string postfachId = 13 [deprecated = true];
 
   GrpcFormData otherData = 30;
+  string firmaName = 31;
 }
 
 message GrpcFormData {
diff --git a/vorgang-manager-server/pom.xml b/vorgang-manager-server/pom.xml
index cdc3e660057ab9c6802a58676b672a5077e2cfef..a1cf7433e59147d9d2a9ad0bd427a77f7ffd5142 100644
--- a/vorgang-manager-server/pom.xml
+++ b/vorgang-manager-server/pom.xml
@@ -32,13 +32,13 @@
 	<parent>
 		<groupId>de.ozgcloud.common</groupId>
 		<artifactId>ozgcloud-common-parent</artifactId>
-		<version>4.0.1-SNAPSHOT</version>
+		<version>4.1.0-SNAPSHOT</version>
 		<relativePath />
 	</parent>
 
 	<groupId>de.ozgcloud.vorgang</groupId>
 	<artifactId>vorgang-manager-server</artifactId>
-	<version>2.6.0-SNAPSHOT</version>
+	<version>2.7.0-SNAPSHOT</version>
 
 	<name>OZG-Cloud Vorgang Manager Server</name>
 	<description>Server Implementierung des VorgangManagers</description>
@@ -53,9 +53,10 @@
 		<zufi-manager-interface.version>1.0.0-SNAPSHOT</zufi-manager-interface.version>
 
 		<user-manager-interface.version>2.1.0</user-manager-interface.version>
-		<bescheid-manager.version>1.10.0-SNAPSHOT</bescheid-manager.version>
-		<processor-manager.version>0.4.0-SNAPSHOT</processor-manager.version>
-		<ozgcloud-starter.version>0.7.0-SNAPSHOT</ozgcloud-starter.version>
+		<bescheid-manager.version>1.11.0-SNAPSHOT</bescheid-manager.version>
+		<processor-manager.version>0.4.0</processor-manager.version>
+		<ozgcloud-starter.version>0.7.0</ozgcloud-starter.version>
+		<nachrichten-manager.version>2.7.0-SNAPSHOT</nachrichten-manager.version>
 
 		<zip.version>2.11.1</zip.version>
 		<jsoup.version>1.15.3</jsoup.version>
@@ -66,6 +67,7 @@
 		<find-and-replace-maven-plugin.version>1.1.0</find-and-replace-maven-plugin.version>
 		<docker-java.version>3.3.3</docker-java.version>
 
+		<shedlock.version>4.25.0</shedlock.version>
 	</properties>
 
 	<dependencies>
@@ -78,8 +80,13 @@
 
 		<dependency>
 			<groupId>de.ozgcloud.nachrichten</groupId>
-			<artifactId>nachrichten-manager</artifactId>
-			<version>${project.version}</version>
+			<artifactId>nachrichten-manager-postfach-interface</artifactId>
+			<version>${nachrichten-manager.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>de.ozgcloud.nachrichten</groupId>
+			<artifactId>nachrichten-manager-interface</artifactId>
+			<version>${nachrichten-manager.version}</version>
 		</dependency>
 
 		<dependency>
@@ -150,22 +157,6 @@
 			<artifactId>spring-boot-starter-data-mongodb</artifactId>
 		</dependency>
 
-		<!--only required for NachrichtenManager -->
-		<dependency>
-			<groupId>net.devh</groupId>
-			<artifactId>grpc-client-spring-boot-starter</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-freemarker</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework</groupId>
-			<artifactId>spring-webmvc</artifactId>
-		</dependency>
-
-
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter-actuator</artifactId>
@@ -200,6 +191,16 @@
 			<groupId>org.apache.commons</groupId>
 			<artifactId>commons-collections4</artifactId>
 		</dependency>
+		<dependency>
+			<groupId>net.javacrumbs.shedlock</groupId>
+			<artifactId>shedlock-spring</artifactId>
+			<version>${shedlock.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>net.javacrumbs.shedlock</groupId>
+			<artifactId>shedlock-provider-mongo</artifactId>
+			<version>${shedlock.version}</version>
+		</dependency>
 
 		<dependency>
 			<groupId>com.thedeanda</groupId>
@@ -232,12 +233,6 @@
 		</dependency>
 
 		<!-- Dev -->
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-devtools</artifactId>
-			<scope>runtime</scope>
-			<optional>true</optional>
-		</dependency>
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-configuration-processor</artifactId>
@@ -253,7 +248,7 @@
 		<!-- Test -->
 		<dependency>
 			<groupId>de.ozgcloud.nachrichten</groupId>
-			<artifactId>nachrichten-manager</artifactId>
+			<artifactId>nachrichten-manager-postfach-interface</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
@@ -302,7 +297,11 @@
 			<artifactId>spring-ws-test</artifactId>
 			<scope>test</scope>
 		</dependency>
-
+		<!-- TODO: delete wenn PersistPostfachNachrichtByCommandService ausgebaut-->
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-mail</artifactId>
+		</dependency>
 
 		<dependency>
 			<groupId>org.junit.jupiter</groupId>
diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/attached_item/GrpcVorgangAttachedItemService.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/attached_item/GrpcVorgangAttachedItemService.java
index ba3e53ac5fcf412fa4b8b5a504cfe78651c06116..bd44ef4fce63620a80f042cb4a8e6f1c9f5eb5ea 100644
--- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/attached_item/GrpcVorgangAttachedItemService.java
+++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/attached_item/GrpcVorgangAttachedItemService.java
@@ -53,7 +53,8 @@ public class GrpcVorgangAttachedItemService extends VorgangAttachedItemServiceIm
 
 		var vorgangAttachedItems = service.find(request.getVorgangId(), Optional.of(request.getClient()), Optional.of(request.getItemName()));
 
-		responseObserver.onNext(buildFindResponse(vorgangAttachedItems));
+		var value = buildFindResponse(vorgangAttachedItems);
+		responseObserver.onNext(value);
 		responseObserver.onCompleted();
 	}
 
diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/files/GrpcBinaryFileService.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/files/GrpcBinaryFileService.java
index 0db0d205d8bb35e33c56431a3043672c02f8c02f..5f08813080ef2e7626b1994b6a77fbca97a9eb7b 100644
--- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/files/GrpcBinaryFileService.java
+++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/files/GrpcBinaryFileService.java
@@ -35,7 +35,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 
 import com.google.protobuf.ByteString;
 
-import de.ozgcloud.nachrichten.common.errorhandling.TechnicalException;
+import de.ozgcloud.common.errorhandling.TechnicalException;
 import de.ozgcloud.vorgang.common.security.PolicyService;
 import de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileServiceGrpc.BinaryFileServiceImplBase;
 import de.ozgcloud.vorgang.grpc.binaryFile.GrpcBinaryFilesRequest;
diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/Antragsteller.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/Antragsteller.java
index 6eff50278dcb00f488850aecfe848d8105ce01a5..8d0cb86fd7edaee1461791fa10ad14be4444d64a 100644
--- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/Antragsteller.java
+++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/Antragsteller.java
@@ -33,6 +33,7 @@ import lombok.Getter;
 public class Antragsteller {
 
 	private String anrede;
+	private String firmaName;
 	private String nachname;
 	private String vorname;
 	private String geburtsdatum;
diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java
index b7a2ad373088f30562bdd8876f6931a6492fda7a..198115bf224f689f5836f5737fb3dc757d42d20a 100644
--- a/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java
+++ b/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java
@@ -61,12 +61,14 @@ import de.ozgcloud.common.test.DataITCase;
 import de.ozgcloud.document.BescheidDocumentCreatedEvent;
 import de.ozgcloud.document.Document;
 import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
+import de.ozgcloud.nachrichten.postfach.PostfachRemoteService;
 import de.ozgcloud.vorgang.VorgangManagerServerApplication;
 import de.ozgcloud.vorgang.attached_item.VorgangAttachedItem;
 import de.ozgcloud.vorgang.attached_item.VorgangAttachedItemTestFactory;
 import de.ozgcloud.vorgang.command.CommandService;
 import de.ozgcloud.vorgang.command.CommandTestFactory;
 import de.ozgcloud.vorgang.command.CreateCommandRequest;
+import de.ozgcloud.vorgang.servicekonto.PostfachAddressTestFactory;
 import de.ozgcloud.vorgang.status.StatusChangedEvent;
 import de.ozgcloud.vorgang.vorgang.Vorgang;
 import de.ozgcloud.vorgang.vorgang.VorgangTestFactory;
@@ -96,6 +98,8 @@ class BescheidEventListenerITCase {
 	@Autowired
 	private GridFsTemplate gridFsTemplate;
 
+	@MockBean
+	private PostfachRemoteService postfachRemoteService;
 	@MockBean
 	private CurrentUserService currentUserService;
 	@Mock
@@ -112,6 +116,7 @@ class BescheidEventListenerITCase {
 		mongoOperations.dropCollection(Vorgang.COLLECTION_NAME);
 		when(currentUserService.getUser()).thenReturn(callContextUser);
 		when(currentUserService.getUserProfile()).thenReturn(userProfile);
+		when(postfachRemoteService.getPostfachType()).thenReturn("dummy");
 	}
 
 	@Nested
@@ -193,7 +198,7 @@ class BescheidEventListenerITCase {
 
 			await().atMost(60, TimeUnit.SECONDS).untilAsserted(() -> {
 				verify(bescheiTestEventListener).onBescheidSentEvent(bescheidSentEventCaptor.capture());
-				assertThat(loadBescheid(bescheidItem.getId()).getItem()).containsEntry(Bescheid.FIELD_STATUS, Bescheid.Status.SEND.name());
+				assertThat(loadBescheid(bescheidItem.getId()).getItem()).containsEntry(Bescheid.FIELD_STATUS, Bescheid.Status.SENT.name());
 			});
 		}
 
@@ -255,6 +260,8 @@ class BescheidEventListenerITCase {
 		private ArgumentCaptor<BescheidSentEvent> bescheidSentEventCaptor;
 		@Captor
 		private ArgumentCaptor<StatusChangedEvent> statusChangedEventCaptor;
+		@Captor
+		private ArgumentCaptor<PostfachNachricht> postfachNachrichtCaptor;
 
 		@BeforeEach
 		void init() {
@@ -283,7 +290,7 @@ class BescheidEventListenerITCase {
 
 			await().atMost(60, TimeUnit.SECONDS).untilAsserted(() -> {
 				verify(bescheiTestEventListener).onBescheidSentEvent(bescheidSentEventCaptor.capture());
-				assertThat(loadBescheid(bescheidItem.getId()).getItem()).containsEntry(Bescheid.FIELD_STATUS, Bescheid.Status.SEND.name());
+				assertThat(loadBescheid(bescheidItem.getId()).getItem()).containsEntry(Bescheid.FIELD_STATUS, Bescheid.Status.SENT.name());
 			});
 		}
 
@@ -302,18 +309,18 @@ class BescheidEventListenerITCase {
 		}
 
 		@Test
-		void shouldSaveNachrichtDraft() {
+		void shouldSendPostfachNachricht() {
 			var vorgangId = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).build()).getId();
 			var bescheidItem = mongoOperations.save(createBescheidAttachedItemWithDocument(vorgangId));
 
 			commandService.createCommand(buildCreateCommandRequest(vorgangId, bescheidItem));
 
-			await().atMost(5, TimeUnit.SECONDS).untilAsserted(() -> {
-				verify(bescheiTestEventListener).onBescheidSentEvent(bescheidSentEventCaptor.capture());
-				assertThat(loadCommand(bescheidSentEventCaptor.getValue().getSource()).getStatus()).isEqualTo(CommandStatus.FINISHED);
-				var nachrichtDraft = loadNachricht(vorgangId);
-				assertThat(nachrichtDraft.getItem()).containsEntry(PostfachNachricht.FIELD_SUBJECT, NACHRICHT_SUBJECT);
-				assertThat(nachrichtDraft.getItem()).containsEntry(PostfachNachricht.FIELD_MAIL_BODY, NACHRICHT_TEXT);
+			await().atMost(60, TimeUnit.SECONDS).untilAsserted(() -> {
+				verify(postfachRemoteService).sendMessage(postfachNachrichtCaptor.capture());
+				assertThat(postfachNachrichtCaptor.getValue().getPostfachId()).isEqualTo(
+						PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE);
+				assertThat(postfachNachrichtCaptor.getValue().getSubject()).isEqualTo(NACHRICHT_SUBJECT);
+				assertThat(postfachNachrichtCaptor.getValue().getMailBody()).isEqualTo(NACHRICHT_TEXT);
 			});
 		}
 
@@ -324,7 +331,7 @@ class BescheidEventListenerITCase {
 
 			commandService.createCommand(buildCreateCommandRequest(vorgangId, bescheidItem));
 
-			await().atMost(5, TimeUnit.SECONDS).untilAsserted(() -> {
+			await().atMost(60, TimeUnit.SECONDS).untilAsserted(() -> {
 				verify(bescheiTestEventListener).onBescheidSentEvent(bescheidSentEventCaptor.capture());
 				assertThat(loadCommand(bescheidSentEventCaptor.getValue().getSource()).getStatus()).isEqualTo(CommandStatus.FINISHED);
 				var vorgang = loadVorgang(vorgangId);
@@ -354,7 +361,7 @@ class BescheidEventListenerITCase {
 					.vorgangId(vorgangId)
 					.relationId(bescheidItem.getId())
 					.relationVersion(bescheidItem.getVersion())
-					.order(SEND_POSTFACH_MAIL_ORDER)
+					.order(SEND_BESCHEID_ORDER)
 					.bodyObject(Map.of(BESCHEID_VOM_BODYKEY, "2024-01-01",
 							GENEHMIGT_BODYKEY, true))
 					.build();
@@ -366,7 +373,7 @@ class BescheidEventListenerITCase {
 					.vorgangId(vorgangId)
 					.relationId(bescheidItem.getId())
 					.relationVersion(bescheidItem.getVersion())
-					.order(SEND_POSTFACH_MAIL_ORDER)
+					.order(SEND_BESCHEID_ORDER)
 					.bodyObject(Map.of(BESCHEID_VOM_BODYKEY, "2024-01-01",
 							GENEHMIGT_BODYKEY, true))
 					.build();
@@ -384,14 +391,5 @@ class BescheidEventListenerITCase {
 			return mongoOperations.findById(vorgangId, Vorgang.class);
 		}
 
-		private VorgangAttachedItem loadNachricht(String vorgangId) {
-			var criteria = new Criteria().andOperator(
-					Criteria.where(VorgangAttachedItem.FIELDNAME_VORGANG_ID).is(vorgangId),
-					Criteria.where(VorgangAttachedItem.FIELDNAME_ITEM_NAME).is("PostfachMail")
-			);
-			var vorgangAttachedItems = mongoOperations.find(Query.query(criteria), VorgangAttachedItem.class);
-			assertThat(vorgangAttachedItems).hasSize(1);
-			return vorgangAttachedItems.getFirst();
-		}
 	}
 }
diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceITCase.java
new file mode 100644
index 0000000000000000000000000000000000000000..4523bfa243ba39f5ef3fe4581cb2e883a39f4a36
--- /dev/null
+++ b/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceITCase.java
@@ -0,0 +1,130 @@
+/*
+ * 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.bescheid;
+
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.Mockito.*;
+
+import java.util.Map;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mock;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.data.mongodb.core.MongoOperations;
+import org.springframework.test.annotation.DirtiesContext;
+
+import de.ozgcloud.bescheid.BescheidServiceGrpc.BescheidServiceBlockingStub;
+import de.ozgcloud.bescheid.attacheditem.AttachedItemService;
+import de.ozgcloud.bescheid.common.callcontext.CallContextUser;
+import de.ozgcloud.bescheid.common.callcontext.CurrentUserService;
+import de.ozgcloud.bescheid.common.callcontext.UserProfile;
+import de.ozgcloud.common.test.DataITCase;
+import de.ozgcloud.vorgang.VorgangManagerServerApplication;
+import de.ozgcloud.vorgang.attached_item.VorgangAttachedItem;
+import de.ozgcloud.vorgang.attached_item.VorgangAttachedItemTestFactory;
+import de.ozgcloud.vorgang.vorgang.Vorgang;
+import de.ozgcloud.vorgang.vorgang.VorgangTestFactory;
+import net.devh.boot.grpc.client.inject.GrpcClient;
+
+@SpringBootTest(classes = VorgangManagerServerApplication.class, properties = {
+		"grpc.server.inProcessName=test",
+		"grpc.server.port=-1",
+		"grpc.client.inProzess.address=in-process:test",
+		"grpc.client.vorgang-manager.address=in-process:test",
+})
+@DataITCase
+@DirtiesContext
+class BescheidGrpcServiceITCase {
+
+	@GrpcClient("inProzess")
+	private BescheidServiceBlockingStub bescheidServiceBlockingStub;
+
+	@Autowired
+	private MongoOperations mongoOperations;
+
+	@MockBean
+	private CurrentUserService currentUserService;
+	@Mock
+	private CallContextUser callContextUser;
+	@Mock
+	private UserProfile userProfile;
+
+	@Nested
+	class TestFindAll {
+
+		@BeforeEach
+		void init() {
+			mongoOperations.dropCollection(VorgangAttachedItem.COLLECTION_NAME);
+			mongoOperations.dropCollection(Vorgang.COLLECTION_NAME);
+			when(currentUserService.getUser()).thenReturn(callContextUser);
+			when(currentUserService.getUserProfile()).thenReturn(userProfile);
+		}
+
+		@Test
+		void shouldReturnSortedResult() {
+			var vorgangId = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).build()).getId();
+			var bescheidItemFirstId = mongoOperations.save(createBescheidAttachedItem(vorgangId, "2022-10-01")).getId();
+			var bescheidItemLastId = mongoOperations.save(createBescheidAttachedItem(vorgangId, "2024-01-01")).getId();
+
+			var response = bescheidServiceBlockingStub.getAll(GrpcGetAllBescheidRequest.newBuilder().setVorgangId(vorgangId).build());
+
+			assertThat(response.getBescheidList()).hasSize(2);
+			assertThat(response.getBescheidList().get(0).getId()).isEqualTo(bescheidItemLastId);
+			assertThat(response.getBescheidList().get(1).getId()).isEqualTo(bescheidItemFirstId);
+		}
+
+		private VorgangAttachedItem createBescheidAttachedItem(String vorgangId, String beschiedenAm) {
+			return VorgangAttachedItemTestFactory.createBuilder()
+					.id(null)
+					.version(0L)
+					.vorgangId(vorgangId)
+					.itemName(AttachedItemService.BESCHEID_ITEM_NAME)
+					.client(BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME)
+					.item(Map.of(
+							Bescheid.FIELD_STATUS, Bescheid.Status.DRAFT.name(),
+							Bescheid.FIELD_BESCHIEDEN_AM, beschiedenAm
+					))
+					.build();
+		}
+
+	}
+
+	@Nested
+	class TestGetConfig {
+
+		@Test
+		void shouldReturnBescheidManagerConfig() {
+			var config = bescheidServiceBlockingStub.getConfig(GrpcBescheidManagerConfigRequest.newBuilder().build());
+
+			assertThat(config.getVersion()).isNotEmpty();
+			assertThat(config.getJavaVersion()).isEqualTo(System.getProperty("java.version"));
+			assertThat(config.getFeatures().getCanCreateBescheidDocument()).isFalse();
+		}
+	}
+
+}
diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/AntragstellerTestFactory.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/AntragstellerTestFactory.java
index d21e22dc459fe019b62febb4a21352e6aed6f44c..86c84e32d5547a2341f4e04e9077d4ddf51c182b 100644
--- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/AntragstellerTestFactory.java
+++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/AntragstellerTestFactory.java
@@ -32,6 +32,7 @@ public class AntragstellerTestFactory {
 
 	public static final String ANREDE = "Herr";
 	public static final String NACHNAME = LoremIpsum.getInstance().getLastName();
+	public static final String FIRMA_NAME = "Firma X";
 	public static final String VORNAME = LoremIpsum.getInstance().getFirstName();
 	public static final String GEBURTSDATUM = "1995-01-01";
 	public static final String GEBURTSORT = LoremIpsum.getInstance().getCountry();
@@ -56,6 +57,7 @@ public class AntragstellerTestFactory {
 	public static Antragsteller.AntragstellerBuilder createBuilder() {
 		return Antragsteller.builder()
 				.anrede(ANREDE)
+				.firmaName(FIRMA_NAME)
 				.nachname(NACHNAME)
 				.vorname(VORNAME)
 				.geburtsdatum(GEBURTSDATUM)
diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcAntragstellerTestFactory.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcAntragstellerTestFactory.java
index 7285adac2106b40a5168f40f2182361c0796eb05..7a077b811aa2dd403138f458f7b6bad6970dadd3 100644
--- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcAntragstellerTestFactory.java
+++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcAntragstellerTestFactory.java
@@ -52,6 +52,7 @@ public class GrpcAntragstellerTestFactory {
 	public static GrpcAntragsteller.Builder createBuilder() {
 		return GrpcAntragsteller.newBuilder()
 				.setAnrede(ANREDE)
+				.setFirmaName(AntragstellerTestFactory.FIRMA_NAME)
 				.setGeburtsdatum(GEBURTSDATUM)
 				.setNachname(NACHNAME)
 				.setVorname(VORNAME)
diff --git a/vorgang-manager-utils/pom.xml b/vorgang-manager-utils/pom.xml
index 872a39ff0092d600aed97486c2a38ffde0778865..24b78b3a4bf638fbc7ba91582fe1fed92a0a789f 100644
--- a/vorgang-manager-utils/pom.xml
+++ b/vorgang-manager-utils/pom.xml
@@ -30,14 +30,14 @@
 	<parent>
 		<groupId>de.ozgcloud.common</groupId>
 		<artifactId>ozgcloud-common-dependencies</artifactId>
-		<version>4.0.1</version>
+		<version>4.1.0-SNAPSHOT</version>
 		<relativePath/>
 	</parent>
 
 	<groupId>de.ozgcloud.vorgang</groupId>
 	<artifactId>vorgang-manager-utils</artifactId>
 	<name>OZG-Cloud Vorgang Manager Utils</name>
-	<version>2.6.0-SNAPSHOT</version>
+	<version>2.7.0-SNAPSHOT</version>
 
 	<properties>
 		<maven-compiler-plugin.version>3.10.1</maven-compiler-plugin.version>