From ecfaa7e175fbbc9b2282b283cb8f8b393843655f Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Tue, 23 Apr 2024 15:33:05 +0200
Subject: [PATCH] OZG-5402 outsource nachrichten-manager in external repository

---
 nachrichten-manager/lombok.config             |  30 -
 nachrichten-manager/pom.xml                   | 349 --------
 .../NachrichtenManagerProperties.java         |  16 -
 .../antragraum/AntragraumGrpcService.java     |  60 --
 .../antragraum/AntragraumNachrichtMapper.java |  61 --
 .../antragraum/AntragraumProperties.java      |  68 --
 .../antragraum/AntragraumService.java         | 102 ---
 .../antragraum/BayernIdSamlConfiguration.java | 242 ------
 .../antragraum/Saml2Decrypter.java            | 105 ---
 .../nachrichten/antragraum/Saml2Parser.java   |  74 --
 .../nachrichten/antragraum/Saml2Verifier.java |  90 --
 .../ClientAttributeRemoteService.java         |  72 --
 .../attributes/ClientAttributeService.java    |  49 --
 .../ClientAttributeTestFactory.java           |  30 -
 .../errorhandling/FunctionalException.java    |  33 -
 .../errorhandling/TechnicalException.java     |  38 -
 ...ichtenCallContextAttachingInterceptor.java |  82 --
 .../nachrichten/email/EMailService.java       | 158 ----
 .../nachrichten/email/EmailGrpcService.java   |  65 --
 .../nachrichten/email/MailRecipient.java      |  30 -
 .../nachrichten/email/MailSendErrorEvent.java |  47 -
 .../nachrichten/email/MailSendRequest.java    |  61 --
 .../nachrichten/email/MailSentEvent.java      |  41 -
 .../nachrichten/email/MailService.java        |  40 -
 .../info/InfoManagerRemoteService.java        |  28 -
 .../nachrichten/info/InfoManagerRequest.java  |  14 -
 .../nachrichten/info/InfoManagerService.java  |  35 -
 .../info/InfomanagerNachrichtMapper.java      |  14 -
 .../info/InfomanagerProperties.java           |  25 -
 .../nachrichten/postfach/AttachmentFile.java  |  53 --
 .../postfach/BinaryFileService.java           |  36 -
 .../ozgcloud/nachrichten/postfach/FileId.java |  48 --
 .../postfach/GrpcPostfachNachrichtMapper.java |  27 -
 .../postfach/NotConfiguredException.java      |  35 -
 .../PersistPostfachNachrichtService.java      |  64 --
 .../nachrichten/postfach/Postfach.java        |  13 -
 .../nachrichten/postfach/PostfachAddress.java |  19 -
 .../postfach/PostfachAddressIdentifier.java   |   5 -
 .../postfach/PostfachBadRequestException.java |  33 -
 .../postfach/PostfachEventListener.java       | 125 ---
 .../postfach/PostfachException.java           |  45 -
 .../postfach/PostfachGrpcService.java         | 106 ---
 .../postfach/PostfachMailSentEvent.java       |  36 -
 .../postfach/PostfachMailSentFailedEvent.java |  35 -
 .../nachrichten/postfach/PostfachMapper.java  |   9 -
 .../postfach/PostfachMessageCode.java         |  39 -
 .../postfach/PostfachNachricht.java           |  89 --
 .../postfach/PostfachNachrichtMapper.java     | 159 ----
 .../postfach/PostfachRemoteService.java       |  16 -
 .../postfach/PostfachRuntimeException.java    |  33 -
 .../postfach/PostfachScheduler.java           |  50 --
 .../nachrichten/postfach/PostfachService.java | 244 ------
 .../SendPostfachNachrichtResponse.java        |  36 -
 .../postfach/StringBasedIdentifier.java       |  11 -
 .../postfach/bayernid/Absender.java           |  23 -
 .../postfach/bayernid/BayernIdAttachment.java |  38 -
 .../bayernid/BayernIdAttachmentService.java   |  68 --
 .../BayernIdPostfachNachrichtMapper.java      |  73 --
 .../BayernIdPostfachRemoteService.java        | 132 ---
 .../BayernIdPostfachResponseHandler.java      |  21 -
 .../postfach/bayernid/BayernIdProperties.java |  26 -
 .../postfach/bayernid/BayernIdResponse.java   |  37 -
 .../bayernid/BayernIdServerException.java     |  30 -
 .../postfach/bayernid/FileSender.java         | 132 ---
 .../bayernid/MailSendingResponseStatus.java   |  43 -
 .../bayernid/MessageWithFilesSender.java      | 132 ---
 .../nachrichten/postfach/osi/Message.java     |  85 --
 .../postfach/osi/MessageAttachment.java       |  41 -
 .../osi/MessageAttachmentService.java         |  88 --
 .../osi/MockOsiPostfachConfiguration.java     |  39 -
 .../osi/MockOsiPostfachRestTemplate.java      |  39 -
 .../osi/OsiPostfachMessageMapper.java         |  84 --
 .../postfach/osi/OsiPostfachProperties.java   |  63 --
 .../osi/OsiPostfachRemoteService.java         | 147 ----
 .../OsiPostfachServerProcessException.java    |  36 -
 .../postfach/osi/PostfachConfiguration.java   |  99 ---
 .../nachrichten/postfach/osi/ReplyOption.java |  17 -
 ...ot.autoconfigure.AutoConfiguration.imports |  20 -
 .../main/resources/application-bayern.yaml    |   3 -
 .../resources/application-bayernlocal.yaml    |   7 -
 .../PostfachnachrichtenServiceBy.wsdl         | 108 ---
 .../bayernid/bspnachrichten-2.13.xsd          | 343 --------
 .../bayernid/metadata/bayernid-idp-infra.xml  |  45 -
 .../antragraum/AntragraumGrpcServiceTest.java | 128 ---
 .../AntragraumNachrichtMapperTest.java        | 125 ---
 .../antragraum/AntragraumServiceTest.java     | 119 ---
 .../BayernIdSamlConfigurationTest.java        |  87 --
 .../GrpcFindRueckfrageRequestTestFactory.java |  40 -
 .../antragraum/GrpcNachrichtTestFactory.java  |  21 -
 .../GrpcRueckfrageAnswerTestFactory.java      |  23 -
 ...endRueckfrageAnswerRequestTestFactory.java |  19 -
 .../antragraum/Saml2DecrypterTest.java        | 126 ---
 .../antragraum/Saml2ParserTest.java           |  72 --
 .../antragraum/Saml2VerifierTest.java         |  66 --
 .../ClientAttributeRemoteServiceTest.java     | 122 ---
 .../ClientAttributeServiceTest.java           |  63 --
 .../GrpcClientAttributeTestFactory.java       |  42 -
 ...cSetClientAttributeRequestTestFactory.java |  49 --
 .../nachrichten/email/EMailServiceTest.java   | 258 ------
 .../email/EmailGrpcServiceTest.java           | 104 ---
 ...GrpcNotificationRecipientsTestFactory.java |  40 -
 .../email/GrpcRecipientTestFactory.java       |  38 -
 .../email/MailRecipientTestFactory.java       |  42 -
 .../email/MailSendErrorEventTestFactory.java  |  33 -
 .../email/MailSendRequestTestFactory.java     |  69 --
 .../email/MailSentEventTestFactory.java       |  33 -
 .../info/InfoManagerRemoteServiceTest.java    |  94 --
 .../info/InfoManagerRequestTestFactory.java   |  21 -
 .../info/InfoManagerServiceTest.java          | 104 ---
 .../info/InfomanagerNachrichtMapperTest.java  |  47 -
 .../GrpcPostfachAddressTestFactory.java       |  28 -
 .../postfach/GrpcPostfachMailTestFactory.java |  52 --
 ...cResendPostfachMailRequestTestFactory.java |  46 -
 ...cSaveNachrichtDraftRequestTestFactory.java |  16 -
 ...rpcSendPostfachMailRequestTestFactory.java |  47 -
 .../postfach/PostfachAddressTestFactory.java  |  24 -
 .../postfach/PostfachEventListenerTest.java   | 215 -----
 .../postfach/PostfachGrpcServiceTest.java     | 331 -------
 .../postfach/PostfachMapperTest.java          |  25 -
 .../postfach/PostfachNachrichtMapperTest.java | 209 -----
 .../PostfachNachrichtTestFactory.java         | 109 ---
 .../postfach/PostfachSchedulerTest.java       |  51 --
 .../postfach/PostfachServiceTest.java         | 815 ------------------
 .../postfach/PostfachTestFactory.java         |  20 -
 ...dPostfachNachrichtResponseTestFactory.java |  40 -
 .../bayernid/AbsenderTestFactory.java         |  26 -
 .../bayernid/AbsenderTypeTestFactory.java     |  17 -
 .../BayernIdAttachmentServiceTest.java        | 179 ----
 .../BayernIdAttachmentTestFactory.java        |  52 --
 .../BayernIdPostfachNachrichtMapperTest.java  | 272 ------
 .../BayernIdPostfachRemoteServiceTest.java    | 455 ----------
 .../BayernIdPostfachResponseHandlerTest.java  |  43 -
 .../bayernid/BayernIdPropertiesITCase.java    |  88 --
 .../bayernid/BayernIdResponseTestFactory.java |  21 -
 .../bayernid/BspNachrichtTestFactory.java     |  16 -
 .../bayernid/EmpfaengerTypeTestFactory.java   |  16 -
 .../postfach/bayernid/FileSenderTest.java     | 214 -----
 .../bayernid/FreiTextTypeTestFactory.java     |  15 -
 ...endBayernIdMessageResponseTestFactory.java |  43 -
 ...dentifikationNachrichtTypeTestFactory.java |  36 -
 .../MailSendingResponseStatusTest.java        |  18 -
 .../bayernid/MessageWithFilesSenderTest.java  | 405 ---------
 .../NachrichtenInhaltTypeTestFactory.java     |  14 -
 .../NachrichtenKopfTypeTestFactory.java       |  22 -
 ...ndBspNachrichtNativeOutputTestFactory.java |  15 -
 .../bayernid/ZuVorgangTypeTestFactory.java    |  16 -
 .../osi/MessageAttachmentServiceTest.java     | 131 ---
 .../osi/MessageAttachmentTestFactory.java     |  40 -
 .../osi/MessageJsonReplyTestFactory.java      |  37 -
 .../postfach/osi/MessageTestFactory.java      |  64 --
 .../osi/OsiPostfachMessageMapperTest.java     | 200 -----
 .../osi/OsiPostfachRemoteServiceTest.java     | 337 --------
 ...fachServerProcessExceptionTestFactory.java |   9 -
 .../src/test/resources/BspQuittung.xml        |   6 -
 .../src/test/resources/BspQuittungError.xml   |  11 -
 .../org.junit.jupiter.api.extension.Extension |   1 -
 .../src/test/resources/SamlResponse.xml       | 128 ---
 .../test/resources/application-bayern.yaml    |  15 -
 .../src/test/resources/application.yaml       |   0
 .../src/test/resources/bayernid-idp-infra.xml |  45 -
 .../src/test/resources/bayernid.p12           | Bin 6349 -> 0 bytes
 .../test/resources/junit-platform.properties  |   1 -
 .../org.mockito.plugins.MockMaker             |   1 -
 notification-manager/pom.xml                  |  16 +-
 pom.xml                                       |   1 -
 .../src/main/protobuf/antragraum.model.proto  |  64 --
 .../src/main/protobuf/antragraum.proto        |  41 -
 .../src/main/protobuf/email.model.proto       |  45 -
 .../src/main/protobuf/email.proto             |  37 -
 .../src/main/protobuf/postfach.model.proto    | 140 ---
 .../src/main/protobuf/postfach.proto          |  55 --
 vorgang-manager-server/pom.xml                |  24 +-
 .../vorgang/files/GrpcBinaryFileService.java  |   2 +-
 173 files changed, 27 insertions(+), 12864 deletions(-)
 delete mode 100644 nachrichten-manager/lombok.config
 delete mode 100644 nachrichten-manager/pom.xml
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/NachrichtenManagerProperties.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcService.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapper.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumProperties.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumService.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/BayernIdSamlConfiguration.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Decrypter.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Parser.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/antragraum/Saml2Verifier.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeRemoteService.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeService.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/attributes/ClientAttributeTestFactory.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/errorhandling/FunctionalException.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/errorhandling/TechnicalException.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/common/grpc/NachrichtenCallContextAttachingInterceptor.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/EMailService.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/EmailGrpcService.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailRecipient.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSendErrorEvent.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSendRequest.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailSentEvent.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/email/MailService.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerRemoteService.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerRequest.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfoManagerService.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfomanagerNachrichtMapper.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/info/InfomanagerProperties.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/AttachmentFile.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/BinaryFileService.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/FileId.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachNachrichtMapper.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/NotConfiguredException.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtService.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/Postfach.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddress.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachAddressIdentifier.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachBadRequestException.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachEventListener.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachException.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachGrpcService.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMailSentEvent.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMailSentFailedEvent.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMapper.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachMessageCode.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachricht.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapper.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachRemoteService.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachRuntimeException.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachScheduler.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachService.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/SendPostfachNachrichtResponse.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/StringBasedIdentifier.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/Absender.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachment.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentService.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapper.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachRemoteService.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachResponseHandler.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdProperties.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdResponse.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdServerException.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/FileSender.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/MailSendingResponseStatus.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/MessageWithFilesSender.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/Message.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachment.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentService.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MockOsiPostfachConfiguration.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/MockOsiPostfachRestTemplate.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapper.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachProperties.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteService.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachServerProcessException.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/PostfachConfiguration.java
 delete mode 100644 nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/osi/ReplyOption.java
 delete mode 100644 nachrichten-manager/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
 delete mode 100644 nachrichten-manager/src/main/resources/application-bayern.yaml
 delete mode 100644 nachrichten-manager/src/main/resources/application-bayernlocal.yaml
 delete mode 100644 nachrichten-manager/src/main/resources/bayernid/PostfachnachrichtenServiceBy.wsdl
 delete mode 100644 nachrichten-manager/src/main/resources/bayernid/bspnachrichten-2.13.xsd
 delete mode 100644 nachrichten-manager/src/main/resources/bayernid/metadata/bayernid-idp-infra.xml
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcServiceTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapperTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumServiceTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/BayernIdSamlConfigurationTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcFindRueckfrageRequestTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcNachrichtTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcRueckfrageAnswerTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcSendRueckfrageAnswerRequestTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2DecrypterTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2ParserTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/antragraum/Saml2VerifierTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/ClientAttributeRemoteServiceTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/ClientAttributeServiceTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/GrpcClientAttributeTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/attributes/GrpcSetClientAttributeRequestTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/EMailServiceTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/EmailGrpcServiceTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/GrpcNotificationRecipientsTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/GrpcRecipientTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailRecipientTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSendErrorEventTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSendRequestTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/email/MailSentEventTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerRemoteServiceTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerRequestTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfoManagerServiceTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/info/InfomanagerNachrichtMapperTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachAddressTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcPostfachMailTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcResendPostfachMailRequestTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcSaveNachrichtDraftRequestTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/GrpcSendPostfachMailRequestTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachAddressTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachEventListenerTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachGrpcServiceTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachMapperTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapperTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachSchedulerTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachServiceTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/SendPostfachNachrichtResponseTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/AbsenderTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/AbsenderTypeTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentServiceTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapperTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachRemoteServiceTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachResponseHandlerTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPropertiesITCase.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdResponseTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BspNachrichtTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/EmpfaengerTypeTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/FileSenderTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/FreiTextTypeTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/GrpcSendBayernIdMessageResponseTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/IdentifikationNachrichtTypeTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/MailSendingResponseStatusTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/MessageWithFilesSenderTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/NachrichtenInhaltTypeTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/NachrichtenKopfTypeTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/SendBspNachrichtNativeOutputTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/ZuVorgangTypeTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentServiceTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageJsonReplyTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachMessageMapperTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachRemoteServiceTest.java
 delete mode 100644 nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/osi/OsiPostfachServerProcessExceptionTestFactory.java
 delete mode 100644 nachrichten-manager/src/test/resources/BspQuittung.xml
 delete mode 100644 nachrichten-manager/src/test/resources/BspQuittungError.xml
 delete mode 100644 nachrichten-manager/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension
 delete mode 100644 nachrichten-manager/src/test/resources/SamlResponse.xml
 delete mode 100644 nachrichten-manager/src/test/resources/application-bayern.yaml
 delete mode 100644 nachrichten-manager/src/test/resources/application.yaml
 delete mode 100644 nachrichten-manager/src/test/resources/bayernid-idp-infra.xml
 delete mode 100644 nachrichten-manager/src/test/resources/bayernid.p12
 delete mode 100644 nachrichten-manager/src/test/resources/junit-platform.properties
 delete mode 100644 nachrichten-manager/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
 delete mode 100644 vorgang-manager-interface/src/main/protobuf/antragraum.model.proto
 delete mode 100644 vorgang-manager-interface/src/main/protobuf/antragraum.proto
 delete mode 100644 vorgang-manager-interface/src/main/protobuf/email.model.proto
 delete mode 100644 vorgang-manager-interface/src/main/protobuf/email.proto
 delete mode 100644 vorgang-manager-interface/src/main/protobuf/postfach.model.proto
 delete mode 100644 vorgang-manager-interface/src/main/protobuf/postfach.proto

diff --git a/nachrichten-manager/lombok.config b/nachrichten-manager/lombok.config
deleted file mode 100644
index d07dd9b0e..000000000
--- 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 263d7ed88..000000000
--- 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</version>
-		<relativePath/>
-	</parent>
-
-	<groupId>de.ozgcloud.nachrichten</groupId>
-	<artifactId>nachrichten-manager</artifactId>
-    <version>2.7.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 0592f8010..000000000
--- 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 4921595ed..000000000
--- 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 cb54984ef..000000000
--- 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 9db391f6c..000000000
--- 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 3d9ea7abd..000000000
--- 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 096115547..000000000
--- 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 9728ddba8..000000000
--- 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 fa23252ab..000000000
--- 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 e8cdf4d18..000000000
--- 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 1263c973b..000000000
--- 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 758893618..000000000
--- 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 1938b59ea..000000000
--- 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 df6be012c..000000000
--- 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 307353add..000000000
--- 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 d3fa03da9..000000000
--- 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 8f5c54e5d..000000000
--- 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 4a53a505a..000000000
--- 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 e5f76ec83..000000000
--- 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 0bb7d78e7..000000000
--- 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 8026f7cc8..000000000
--- 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 1c69e781b..000000000
--- 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 1dd1bbde8..000000000
--- 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 47e348e46..000000000
--- 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 639de00a4..000000000
--- 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 0894f2612..000000000
--- 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 655bdc3f7..000000000
--- 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 eb89410dc..000000000
--- 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 013363686..000000000
--- 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 6f7465cea..000000000
--- 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 785167921..000000000
--- 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 53a1512d6..000000000
--- 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 a677491d2..000000000
--- 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 e25434580..000000000
--- 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 4177ff1a1..000000000
--- 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 29ce7bec0..000000000
--- 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 5d60cfbd4..000000000
--- 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 6b9fdea6c..000000000
--- 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 98dc2be90..000000000
--- 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 26717bcba..000000000
--- 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 6a9cb1177..000000000
--- 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 84daf0b1b..000000000
--- 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 c139a1167..000000000
--- 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 5ef07c77b..000000000
--- 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 edcdb065c..000000000
--- 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 54c5ccf38..000000000
--- 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 d7b6ca635..000000000
--- 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 be4e1c28a..000000000
--- 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 c77551d18..000000000
--- 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 58dfa87a7..000000000
--- 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 c00faf369..000000000
--- 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 841d4b9b3..000000000
--- 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 da37d0e5d..000000000
--- 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 cdf3b85f3..000000000
--- 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 1e248904d..000000000
--- 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 0110fcc97..000000000
--- 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 3224a98ca..000000000
--- 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 33915314a..000000000
--- 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 86b970880..000000000
--- 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 a4c8d2b27..000000000
--- 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 329282c74..000000000
--- 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 76b186249..000000000
--- 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 610b3808b..000000000
--- 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 f95f2db2a..000000000
--- 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 29457e1e4..000000000
--- 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 0af5a298f..000000000
--- 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 58bfba6a0..000000000
--- 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 c6c217013..000000000
--- 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 0664694bb..000000000
--- 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 364d8bea4..000000000
--- 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 ad900a06f..000000000
--- 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 5b3b3065f..000000000
--- 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 a355f1a63..000000000
--- 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 4d2bcf43f..000000000
--- 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 669c30cfd..000000000
--- 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 92fb16805..000000000
--- 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 08abec6c5..000000000
--- 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 f8fcba293..000000000
--- 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 898a6a6d7..000000000
--- 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 a2df76060..000000000
--- 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 23b0e247d..000000000
--- 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 ec1ed7ca7..000000000
--- 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 968c13b46..000000000
--- 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 5ff78a92e..000000000
--- 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 1b8cfe1ed..000000000
--- 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 045f5caf4..000000000
--- 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 9795428ab..000000000
--- 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 1218f303b..000000000
--- 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 6c0fb28f1..000000000
--- 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 f1fa9bcfd..000000000
--- 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 1dd94cea3..000000000
--- 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 afcca2fbe..000000000
--- 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 03dbcb598..000000000
--- 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 bcd766f4b..000000000
--- 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 6a2bcc8bb..000000000
--- 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 aa74eb83c..000000000
--- 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 0558b0d93..000000000
--- 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 f749f48e4..000000000
--- 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 06d0c091a..000000000
--- 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 ec2ac285d..000000000
--- 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 6b378f814..000000000
--- 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 b2c567ea4..000000000
--- 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 b2b9757a0..000000000
--- 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 3e7fea3f2..000000000
--- 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 599956765..000000000
--- 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 1410dd83c..000000000
--- 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 0690a6581..000000000
--- 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 95e41db14..000000000
--- 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 a9d67291f..000000000
--- 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 4e173a012..000000000
--- 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 7f4399a3e..000000000
--- 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 74968834e..000000000
--- 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 0c5a79c00..000000000
--- 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 076daa2e6..000000000
--- 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 94f5df834..000000000
--- 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 3964f981a..000000000
--- 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 dec866938..000000000
--- 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 fb1d7eecd..000000000
--- 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 e0ea9bac9..000000000
--- 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 23276159b..000000000
--- 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 af624e27e..000000000
--- 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 495a14faa..000000000
--- 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 866a3700b..000000000
--- 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 4db127586..000000000
--- 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 7be527b03..000000000
--- 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 f404f056b..000000000
--- 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 5db43d534..000000000
--- 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 2fe959b6e..000000000
--- 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 f8f9dee1e..000000000
--- 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 d9386a774..000000000
--- 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 f51750b66..000000000
--- 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 273962d09..000000000
--- 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 654daa5f5..000000000
--- 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 53ebdd482..000000000
--- 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 7bb257f8a..000000000
--- 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 75536d889..000000000
--- 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 27bcc4302..000000000
--- 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/GrpcSendBayernIdMessageResponseTestFactory.java b/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/GrpcSendBayernIdMessageResponseTestFactory.java
deleted file mode 100644
index 3aa0719d3..000000000
--- a/nachrichten-manager/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/GrpcSendBayernIdMessageResponseTestFactory.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;
-
-import de.ozgcloud.nachrichten.postfach.bayernid.proxy.GrpcSendBayernIdMessageResponse;
-
-public class GrpcSendBayernIdMessageResponseTestFactory {
-
-	public static final String STATUS = "code";
-	public static final String MESSAGE_TEXT = "messageText";
-
-	public static GrpcSendBayernIdMessageResponse create() {
-		return createBuilder().build();
-	}
-
-	public static GrpcSendBayernIdMessageResponse.Builder createBuilder() {
-		return GrpcSendBayernIdMessageResponse.newBuilder()
-				.setSuccess(true)
-				.setStatus(STATUS)
-				.setMessage(MESSAGE_TEXT);
-	}
-}
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 26259ff56..000000000
--- 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 6fa7835b8..000000000
--- 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 1efd3e30e..000000000
--- 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 81b662cf4..000000000
--- 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 9cb131869..000000000
--- 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 39f1abeb8..000000000
--- 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 5d2c0229f..000000000
--- 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 dc473e132..000000000
--- 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 17181b240..000000000
--- 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 43dd50e2c..000000000
--- 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 a60eb1180..000000000
--- 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 03296b4b1..000000000
--- 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 0681df0f4..000000000
--- 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 15e4c59df..000000000
--- 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 5ef6f03ba..000000000
--- 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 e54e673e0..000000000
--- 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 79b126e6c..000000000
--- 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 d28738585..000000000
--- 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 765940c40..000000000
--- 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 e69de29bb..000000000
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 ec1ed7ca7..000000000
--- 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
GIT binary patch
literal 0
HcmV?d00001

literal 6349
zcmXqLk~qo4$ZXIg(Zt57)#lOmotKfFaY2(rF-wy~zCn{jwm}o?bQCGp4wfd?7K0|%
z27@Nn8a8gIE*>sMrUgwbzYUsLz8h$=alwQcnGK{_M3!p?sR<gE^S*x5W)*a{xogRa
zPoJ5X8BQ>;G_jmeShiixahKAKj)Ft)e?79=_3qXt3D&RLZ@=oaCCvRb`x(psV&U~w
zFB8wGgx_|`cD(d+-5VWa>zbX$NxpL>R@_P8mWU6%FmqF7Xw9{jyQ@=@o~EBtNnBGq
zp>L<qEl=sWbq(j<DOmC|M?Tq=m=%9TXtLs@#5=!S7;B`h9)?W5d8GJ~?D;mSw5GxZ
zDbfAuE8agn?`3=M#z%|Q*YZCaCR}D{J7MtUfJUBYGh69I+m$XWkG;26o_d?JYw<4m
zV+SvtKM=((|5WjYlKiFO=VISI-q>l1iiW-qwQc`zmA;|Q(d^8;xdr#46;8H2^GOx%
zQdOvRR=RLu{turiGqxY*P>yU>w+@K-)ArFg>aECpt%Yu>iW|6_?o4sGvva+j^_u2h
z-P+x6R+yPTnO2tneCm9Yq`Sp}t&5k&s_vTn>So%TQ`Oq(QJ?2<2`c1#n7eO7{>Ovg
zimrXTayH0(HS?c9S9#3@Hs@)AOT=9Qd~P+F_ZiG=eLpwug6fx3wXv0lR$2L#_moW3
ziR9h5aN)Po-hUV073bSkFXG$bUtsR%G2yF-y#0#6;CVNne4O5Y>!$bYuiw{k+}UFL
zP=CU)-UPm{t4ca!-%QGCE;0A0{k162Ddp>~U#6dUCyK1x6mgPg($?i2M|lgXirLz%
z5Bb|S-{w9P`~D?Yf%lbYo2S+*3)j2y3hDZDs?XmOAC#lFCiIq*?xd%c=CV^Z_;_z<
zNW04CAFRA<`}}r>%G)RH_uaLh&hhx)O`R3XB(KloQhcW*IJx_z3UhL5$*0mSC6Nbn
z_Q(B--2Zer2jjp0d0TJsu=cmrFK+x5uMjdf``c=*Q_Wr64<<9e3JhUAAXdV^^q2Dg
z>lUAORwmlNR=y|oTCbJM;kR$a?puwl>O$V19yT3de|GuIk^a&Lk9M+bd-p)7^7p)}
z+gfhk{5^f2c(47LrR^uCeSGaAlD9b`E$ZgJfGUB>fh(Cg7aQ=Gtm)E!#?nzR<^0C9
zW&c-iXL;P2#_)K~S%qZ>D_?rM6wBUmxuMlFLm>O)CynQpr<Mhmc5Vz@<$GX9Y|B-(
zf{O57S1su?WzQ}z(LN@8`N*OZw|`BoTH+*JW1#10bw{l-OY{%RC9ShrtJu`$9%)Lh
z>Zotxoam5#{pX$9#uGkQ`#paOu^ra0-muz7eT{`%?k|gtH?OXX-1@B2%RXvecIQHc
zLtmvGv>skxlTpmHCwN-y9Jy+%byhu5ahHB)X<agYpf^j(Gtq3G&!l>njETl`oO?Fp
zRymf~Jj>WE+2Ys}BlJ^-FPM9QeciUzdp;J`9NRhZ;r;Mwm6whk)^IrCdpP>EeZ%H}
zZ*ouW9bR`@V|8>`VRO){X3g)}D{X@pYM6;mifKRS!Y{S;jOH)q7x@bxhT9&GGA+BP
zHqEB&Ku?p1){niMExXsrE}bAHF_ZIV1nX3eFD55{IQr+$-u5+IE<8JZ)$~Ps>t6q1
z=$p9zxae;!%WzJ!^s4&6U7Hv8a=fkb_;l-`XhiD11YQo+4-e+8^J0n66pmW^_~pTW
zxvjJLzGNt@icxpJFf*_vzDR#ld(j&)wi(y%9XNZYTX%Zt$u0MD8;?58aJ(^LO7fI@
z)4nHuE}nA!#-)m*53T$i_V*Ol-7K(R@X?fR|DAop;M7)S_PMXNE}pTJ{rvTIvHW0L
zN%<_pJOgETQOPN4D8?d^mXZ{6)?QWkq*<0hWbmGE=3?8*4crlmL=3IuEEwDwf*1lA
ztQZs+Tp0ow92p`RbQwYzTp5BHLKqYnd>Pysd>P^y{28Jc+!^8-oEdT$@)=4QQVg1e
z&cKagXIs!DwAY|XXeSdRgF%zfCWH(lN_or%Dvwtmmd>iniA(X>VZ7vH@WB?Dqy5t0
z^0=W%sABoK+(j-&c&a)?UWLxuvOAztC!)Cg^wEa}H_ug1C@-Amx`K6$++X?KSBr)3
zDZbN<=F^c?xcm6P)vb%Zf4)}Czjvy7nb}5VsmI!kbLAfzybb9t52}{_P%PYMe{5~k
z{M;ms8@7&J+;^{klTP-zB&Dq(*8kexd)cjnlWLAQO#R0G{M6xptJj{@(3v#vdyt~X
z;{%LaTlFp-y7{Cx=n3P`gAu2Wy|38jb=g;_#N|oJO=jhYBVm*F>=a?x#kTi(;hWI#
zEFZ~$v&;1NMT<7)_bB`n;PY!`oq6_`ebR+XXSQ#;I>$NipjCo?i^TO=K5yrK+oZkQ
z)x|SZ<;SJX?Sb`C6V4{azAoR$Gu_eEY7hI1ipif2uM9kXJHvpn>|X9FX34nXLzX|y
z_}-fcxf&?fmYm%`>C0+vgFx%W!J$|4Y&?C>mYAl5)V>amkI=2#w0_Q(OLfK9dFDz@
zNo?_WA0K98%W`qUr_b@Z(-ys%Q+)o(gn~0G+m`6p@hwl={^aY*oRC*pmzJHkIW2OK
zap#Ady>W*vTI)7%`tW)F?tt}&H(XEO`t`tsC09D7dBk<JEqsjGA4JIg*s;HKms`5M
z)0Ii4K^$s3&QA@W`LOv`deWP=kSQf*EKh5icCbE^V%f%fM?7ze6?32@oAmM*sl1<l
zKl#Sk^vpYQ|Mj~0%*!TbrMHFEl-N%?`}W_7<{rkgtHLKfS9Y4_XBj3oKc-UZO1gcc
zd&HVOiwr`HID9NqBo8xHIzEY$OlrOIH(<`ZKY?3UPPO;0RSh=r+id+?-6+_2v#E-j
zNrV4}Y_FFUd23u)lAo$(uy_ZCPDwa%B)Rv@Wu5}3``P#9O|%>Ke!JY(vvb3>Rnu*J
zKkQch7p<mzq-J|lZ}LY=MP<v3#5cPRD1;p<FgyNs3+o2krYW7ATMo9q5k4Pm*teqM
zsoh@1kFn(kS{B`3!mn5RvGCgkA9o$`<~7;tJ#4IhbUi+qzu}(i!T4Oi2P`>X1w}VK
z7v8mcjb8l4cMpvk8h7*MNluL7vR^vi-@U*h^wd@t=X-pTJH#DkEuNox+V<%Su?zE*
zU)`ymA#J(-i1_!JOQu~oU3D)kooU5dEtSP)oG({o&n~vP#aSP{+vS*7$8(FRdqNJp
zd4KvBQ(L&d@T|Vzm4%k7e79~c?sPTkYdiAsW$a^*Yd*&`5*RA?+-Zw)+q(F=0q5J-
zs%-zRsI+8F{k}au<IBy@$0Vg!%vSna@H8U*)3IoYzn=x}3QuQ?+dijHU9(Z@q;J|y
z9*-~Ge-~KmYdv}B7RT%Jsd~XxkpnAEUHiG-@6U~Iz4I1ioH%#NEdGPQi=<`xE56;{
zr|?>ESx(<_jaPLywm7UP{Ov2T<9^&K_vcP;eH3PX5MI{!>!!q$Ltp<~y?P|!FW=%~
zJ=W+jowetp+b>oA;tvSSdSSZKLzpckv_UuI%8bIm%_<Fnp1ZSab03%;yDJ;w<h^12
zy+a)_rc=_m_$-@d|6a~2SMHEL|De+ISGz-76BCyQu>R-eK9w=`;G@fTe~4@OYM*Nq
zkl`q>m{#zs=T5lM|Ic#K&%Uf)W7lbXOXS?UJ#E~Z?PjlHsCa5u+7{<qYxeHu1)(J~
z-j(QnTF;#4?Xly{x(g5b3Kh9#c>cL?@tJJ=YPHRi{h#jQUtKKd!6Xp<rsTBI*QjHM
zR_19${JVYJaK_CiyL;tt8~$C)+4irwhQDXAs7asvE|qkV2Rb|UMJ!G<lQs;S_q5#D
zTvm5Vm}kzX{gb8^n1oss2B)WQUGgqq!P3<_?<N)`UVL^j^Gtz#y{Zde>(&L#cV(u$
zTDsuCkB*kAotb%tWq0lGrigP#SLLxSbGRv5K4F^K`AyP?z7|w(n_^e+-CNam>7w|6
z)dh1d@>u3*E>KQc5nnUc@iN=Q@7JDP(n{o3^fgfAest66Sm~wCNwZIh>TESBsb60D
z;=Wvn@B@Bs#gh+jO`CheFSq^Dgv!JRtXI>wK3&LtKVQ!62JfCCgM*v1Yi7IH$lEOq
z)Xw>^W8sn`doC_i{B&otc}c{ttcE|w-5xF0YiV|FQ4#OFQ+&aRGi{^Uan(Zt-(ufM
za5MO%W!6h<a^to+Z+6&9<NurxzvX5&`~M3Tf9~mM&x~;TvqVSANAe_Z_5NS)INP!=
zzcbqMJHY%;LGSJD1|c=kw#;JE36}m*ks{XnrDmV{vdv)8wtcPa9+MWG&z-x6Csyd(
ziO9acA!@u;t8e+|z6d<=x9a_Jlg@{Rn`eIiY^zor{renqKvLEAhEKJXDQu5_sEe_`
zww|)8N@YrMw<Sw&+y$%aOCleg2;Z)>@z%aro7+V-l}neoITkMqndr;@`k0%4uFO0p
zJ^lHAxa`svUOc7g-W0^UEbR&hTjVXj>5?D0i_{Jnu9mb_vM#FZy}`tL>!;2+0r$8+
z+YLYb46NDbt-OE9i$w=7p7r^?!$@!InrAt2;mjKv|0upZUuO5-$i%Xn;eXxKf{k__
zo934M%1gQT^6f?=pIxcB5`SecWNuHs9=>qfOWtP_%wu+Xrbu$<?QRfeR#=p@!pHc~
zfnPQ2kNcedbztst(_;yzPkDQNNr|%eEcmIpEK_?^&!S0x3NAj%w5xaJ-?#nQx?GFr
z0TQ$BZD18(N|wp-pJ#FA?%Uges@m6iZfdg6tWRn@V0Ghyd~5Fl<qt<M+)EcfnKoxj
zv_jBHL+;h0i`g&!R;)fB9(QW#%G{ELsc|8*KXdS;%A0*rmF0UVQa0aOGqiK(fdaO(
z+pX(m&ez6lDW0apxg?>u=XA@o%R!O4C7+okXTN6kW9{NpztT3<!OeBDUZC%ztvLew
z|FwEv?y8tHVKH~dUV(|fYyRuJR55jvk?RtVVEeL+ot5p@6~RTTw~9Rv)%wcQG&8sR
zK>NX0SN^LxNo!rMZOr($t5WvUqB;5t4@p=ptNL#4)6ce*H8jFu%`?M2>u%&UPEuJM
zeP&w63&uH&*Yf{x9C^B>!#aum#>^>Sk9tPCm@m4c)_#w-V7VU0_9>GjzPHpTnJF<W
z`@3LSW3KUMTb}YOh2^^?fBXq;kovTj^X_RiOWw3t-FH1lO}3dtPZB?MyY*ELhZDmy
z*)|Iv;mff}{TIr<b!9xX3Ve8=WrfHyiR1lDUp6-wztY~Uo2RQRx9=6tp&8m6r*Yl$
z-8<vz;_FY}S?1};JhX6D{yuHHPtx%ifk|PfXK3s@roV4WXMu6q3ZZu|Ju~ud9(@#_
z=%TATr=-#%-tMNrV~g{5Z29>9a$K1a^?Od_rQ0cy_iJC?x0ekG+4q~TaT9~YC5_!%
znS}c`F4*XpASzX8CRALO5E3kDWcun!@ZX!^$*cTt#xDJHU+cW8OYI8_y-&F_H1iD;
zeBNu^SP=Q*Q}2xHzSA{o9C+G_iZypE-0>|lzT^AbzpJ|yZp|wA%d|gDC-u;~D+W~y
zl79b7a4-L4&3EqcVW*-irA&POPi-%pySUM!Qab76lCbdo&o4`>3S4vEk}h-bLS=c<
z@{Rj9N2dlSoozWc=Xi6i>G>As-fven-|AtOGQSfc`9>ym=bXbbKQu!m3v*dgtj>OU
zmhEG6Hu4YCp}&8-H!S>PU*z$xjnA>}cJ!&8JyCUEJYyGVomu*K|BI~qag&!fs+9-r
zta8wJTbQutUisv{Blkjn%D>b;Hk);I-s;;NCps?*+%4j;usH8_tLf^cIXBpTC^D^_
ztF+3?y8fQI(rl*Bc6?dW{nvXu>C@`dI2PV<?4-z6^|-RV(|*|HTe++?4>wA?{_2_g
zhbM>bzD&AsYo6HTwKJ_I|1xa3bV$?g|I0Ii%=5QY@0==jiMve8WWnsfPX=Guw6{cu
z>$o3gTPppE!NLF0h1;?J&t!hQ-I*|<^Zf&TGw&CX%1o6rJw2tYyjTBt{qcgWXRX6p
zFQH4P|6l7|nQDGxLU;$)Y@3UQB_Ais|I@tS9eh7%^<|-IrG0-NIVN2{-?Cp`wdhS}
z?agc@Yi*%jk;_vp4$s^6@WZK#4-d>#J}B|L=jE}(mpI#1&w9l?U}f0)_yAMY*8ffG
zf2_YJdN0<xyU9T6s)p-?klzy(Y(=<)xYy6~jCr+w<CC2M-&d=vneA=rQeb&8EyE_`
z*2D>`r3$UOr4wg%PCfqBLGih__36^8Id?gqUXLs<6AGHqp?`Oh!>znizkj*xz9hP|
ztZ{~NmEpP@$8rl3-X7hPeN5NPaZSIcS^J_K$;T2ZKPGhXuf1QUy8GlVW?8+<MM}2r
z0*_bzS)Ja=SLAmmPu$t->kO^)FD=(<3#xW<99*KC`QG&UQ=RD2e{<rGa}=Knd?a!?
z+fyKg|6rlkncaeCHnDBkxc86#Wnq5p^d$$?-8X*oD3w1fr+Zvn<feyH#Wn}A&q3Et
z*1N9U{JU8&gm-;Gt^G6Cdq1u!HUx@!o+@7_ep4-`a6;gkL&fTU3JMSR2>v~@_e)a5
zp~cpFHd;7MJiPDvY;&u~NfI5c2W{VdoW1GroF4}Nywr1L{_Hk=^<+tRU=s7D*I^oY
zIoFk^`P~&@x$~eZF}TO}{>4X`oGaE^=aw&$f9lJ%X_MRGzQ1R#ZvPY@Q1JOtz2w_j
zkIqc95@F_;dnj`L{7?K#PDrcRxTl;pnUnOUT~+mMBkRe>*A5!Be2M+O(NQ(v^rzGh
zHlgebjE#28|9*6(+Rg=z0tR9UACK)?V^n{*d4jy{tLqWx=32yRT&gv=!nNYqu9c51
zSq1sGvuB<V4XwHRv#BO=*YZF0(vjXr4XgJ)W;d-3Zam8TTh;33=^xpF2g|I!-Trbb
zeEB7{ohj4#;>;puuGM6}8un0Sj!A;Z-`#9MNlGP_|0Sz9;(4X&)twK^BuqYcV#QOv
zkf}%HHMjVmec^aRg7dSPa8BvPXKIt$xqP<Ogew)O>G-ZMC@|8<JhXlJ`Ig2QK^exh
zMJvx%U4L8gIn`|P+3@)?7e5L7zj*ofia*_RxBt9ev6Zdr`x&)K&ZQ>WLg}?8TK|tN
zuQ|=~Ch5h3%Elj2ev86IcCf7#v1y;+_b}Jw_vv<3sjWVoC%<0O*n0e&^t$+YVq9F?
zJ7?@nUfHIae&~s+?{SaqI<=L4MM@ks%SsovcPCe#nJc}f_d^0>s*kw=_oU)y9||x2
zx!P_}=D9D7_3*kw>ttIa4+_s*b8zd~uQwNSf4y9mwDQL49Y<PAw&j~A-kPYo&E2_?
z$JFHB490#ImWP2ejv6f!zkH_hlZwzu`*Z0YGq3MdElSxavXC?U-{t9DtJ-hReSXW<
zJbzu}Y?DLp8eR&r{@X4vzxDc82e*5kMU!%B)C-SkoBi3pTH?*UON)gsU5N=zzjim!
z-SCJ@_8P@09=AK@#Yk|?czsMHPjIP(o9&|7+QLI^k6T{|UFmncm@846aIS88u+PQC
z*=$#gj3+OOJYewW$iaL=!!7~I5{o8{wcpihr50`wo3T6k(c8Yba0Z5lv*w)JceR0E
zS~a|V=L!F|bMba_ymp;ld|#&jtD4!S8S^gJy=3D%!tv&#wAr~mSB>vab601VV6MN+
z#Nqsy`+e`VqlOGC^=rG=mi|>_KYT%c@sALdlXg-Hm#hB<PJOrXjIoY5%hJ+vY1_R0
zVecc3sqyCpTy&W({9(tgEdJs}3$Aq3`&>NsTj%7o<aM9lTiMUr&#uIfmEE^3!JGA)
zsg1{XyY*lACLecM>$cm?p0jtZ_*{*qdalHe<xAe1nx&WCSLB-LrgmpfK`rOq?GfMP
z{8I1nPq4chp`v(asn65)1->3lOo@IryeAg$u{8aAGU<Lneg6~#K90MMHsLxC&-7hL
znm*s;X}8rWqXn9a6fV7uIxb$8JxO<}grzK_+!lc&u5T@8Ds*S8nIyr>qI7*{-`OWg
zeX^-c8PAt_>MRa=x#0Hy^&eDO8+oG~*R?sxKb3!ZrS*Epu?6?MISQP`+SZ?t(E0JF
zBk9(WH-`6wio%P6{2h*e_i;aet2rXc&CK#~%lb26D+SpWOlLARD`%X^xkP?_#P7EK
zkM<UNt@t12{O`oowK1uSr2N+2O^H_xS2#Ake{byeEnCm++Om6ot_Y*&x=pKs#cSW1
zSM5KXX8f)5;?c7CQ@9^8Pit|A*Di0buXo(CRb%qZJO5{HwLX}~7*KJP<B#c$`+-pr
zC4Zt+Cx$xp<}BQ>D|1mom!j2gRZ*KSN3Za2>HM)&-}CXOxFz~$OO{<SY7DArTCrm7
zq2QHnyUYG<7U=l&P>NqeSx%}@KXqcEpi$Rt`}ybM*q!(6wVb1{&+d#J({-c7it8u0
zaH>2go++54a4nc4I*Enh*#omU$ql;u(}nKO>74Fxo2T#F+kA$O25$Kxr(V(Xr!H}s
zrHLGK|9@lhdg~O^$!`_J(*M*QnJfBx_iD3V*$K}|%+e-n%v-f=Yh3y=iBE1k3)^Qs
z(XTz~d0vf4zroUTwvTT6%89%I=e9^$b1cobQ*!z-^)&BH?ebk#Yi>Wz{vi?An&_7z
zWMF5YXu!$Fs?EpDB*n_WBC_|=0)w=*Udx@*zi=q&e4pVM_P~!t#D|Ml<;OLVKJ|B3
Tvzv}ZT5L>J)@Nd7oWKA8<KO^t

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 1cebb76d5..000000000
--- 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 ca6ee9cea..000000000
--- 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/pom.xml b/notification-manager/pom.xml
index 2820255a9..66b146e4d 100644
--- a/notification-manager/pom.xml
+++ b/notification-manager/pom.xml
@@ -41,6 +41,7 @@
 	<properties>
 		<user-manager-interface.version>2.0.0</user-manager-interface.version>
 		<ozgcloud.license.version>1.6.0</ozgcloud.license.version>
+		<nachrichten-manager.version>2.7.0-SNAPSHOT</nachrichten-manager.version>
 	</properties>
 
 	<dependencies>
@@ -49,6 +50,11 @@
 			<artifactId>vorgang-manager-interface</artifactId>
 			<version>${project.version}</version>
 		</dependency>
+		<dependency>
+			<groupId>de.ozgcloud.nachrichten</groupId>
+			<artifactId>nachrichten-manager-interface</artifactId>
+			<version>${nachrichten-manager.version}</version>
+		</dependency>
 		<dependency>
 			<groupId>de.ozgcloud.vorgang</groupId>
 			<artifactId>vorgang-manager-utils</artifactId>
@@ -87,11 +93,11 @@
 			<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>
+		<!--		<dependency>-->
+		<!--			<groupId>org.springframework.boot</groupId>-->
+		<!--			<artifactId>spring-boot-devtools</artifactId>-->
+		<!--			<scope>runtime</scope>-->
+		<!--		</dependency>-->
 
 		<!-- tools -->
 		<dependency>
diff --git a/pom.xml b/pom.xml
index a1a8be566..4283b4128 100644
--- a/pom.xml
+++ b/pom.xml
@@ -41,7 +41,6 @@
 	<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>
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 062c92b7c..000000000
--- 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 0fa6d67df..000000000
--- 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/email.model.proto b/vorgang-manager-interface/src/main/protobuf/email.model.proto
deleted file mode 100644
index 257713683..000000000
--- 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 2f6eb15bf..000000000
--- 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 e87eec8e3..000000000
--- 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 13cd376f9..000000000
--- 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-server/pom.xml b/vorgang-manager-server/pom.xml
index b4e570b95..dc51b60f3 100644
--- a/vorgang-manager-server/pom.xml
+++ b/vorgang-manager-server/pom.xml
@@ -56,6 +56,7 @@
 		<bescheid-manager.version>1.10.0</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>
@@ -78,8 +79,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-postfach-interface</artifactId>
+			<version>${nachrichten-manager.version}</version>
 		</dependency>
 
 		<dependency>
@@ -232,12 +238,12 @@
 		</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-devtools</artifactId>-->
+		<!--			<scope>runtime</scope>-->
+		<!--			<optional>true</optional>-->
+		<!--		</dependency>-->
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-configuration-processor</artifactId>
@@ -253,7 +259,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>
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 0db0d205d..5f0881308 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;
-- 
GitLab