diff --git a/alfa-service/javac.20240524_095230.args b/alfa-service/javac.20240524_095230.args
new file mode 100644
index 0000000000000000000000000000000000000000..afb64b5f04472a1efb08d555a627210a5f51a84e
--- /dev/null
+++ b/alfa-service/javac.20240524_095230.args
@@ -0,0 +1 @@
+@/tmp/org.codehaus.plexus.compiler.javac.JavacCompiler16216354973819705899arguments
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/Bescheid.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/Bescheid.java
index 5adc0a343a849c6f72bdaab9880d691ff92631af..67cb7eb4c7f5432aa2433a65b784c788f4b9869c 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/Bescheid.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/Bescheid.java
@@ -57,4 +57,6 @@ public class Bescheid implements CommandBody {
 	private String nachrichtSubject;
 	private SendBy sendBy;
 	private BescheidStatus status;
+
+	private SentInfo sentInfo;
 }
\ No newline at end of file
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidMapper.java
index 633caec19adf941465e76e9aaf9e69e292b2f327..bf8932e3df1d5415b43aebb5e4be6df0c0f5cc2e 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidMapper.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidMapper.java
@@ -11,13 +11,18 @@ import com.google.protobuf.ProtocolStringList;
 
 import de.ozgcloud.alfa.common.binaryfile.FileId;
 import de.ozgcloud.alfa.common.binaryfile.FileIdMapper;
+import de.ozgcloud.alfa.common.user.UserIdMapper;
 import de.ozgcloud.bescheid.GrpcBescheid;
+import de.ozgcloud.bescheid.GrpcSentInfo;
 
-@Mapper(unmappedTargetPolicy = ReportingPolicy.ERROR, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, uses = FileIdMapper.class)
+@Mapper(unmappedTargetPolicy = ReportingPolicy.ERROR, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, uses = { FileIdMapper.class,
+		UserIdMapper.class })
 interface BescheidMapper {
 
 	@Mapping(target = "attachments", source = "grpcBescheid.attachmentsList")
 	Bescheid fromGrpc(GrpcBescheid grpcBescheid, String vorgangId);
 
 	List<FileId> fromProtocolStringList(ProtocolStringList value);
+
+	SentInfo fromGrpcSentInfo(GrpcSentInfo grpcSentInfo);
 }
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/SentInfo.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/SentInfo.java
new file mode 100644
index 0000000000000000000000000000000000000000..486b692cda613b6c18f6fed75e126b779234a077
--- /dev/null
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/SentInfo.java
@@ -0,0 +1,15 @@
+package de.ozgcloud.alfa.bescheid;
+
+import java.time.ZonedDateTime;
+
+import de.ozgcloud.alfa.common.user.UserId;
+import lombok.Builder;
+import lombok.Getter;
+
+@Builder
+@Getter
+public class SentInfo {
+
+	private ZonedDateTime sentAt;
+	private UserId sentBy;
+}
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidMapperTest.java
index e825c374cce0a8e55a656bdbf3656032a1f8526f..ddf307c06f9dc8460ab0d7f311b3c7f01b081bb2 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidMapperTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidMapperTest.java
@@ -4,6 +4,8 @@ import static org.assertj.core.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 
+import java.time.ZonedDateTime;
+
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.mapstruct.factory.Mappers;
@@ -11,12 +13,16 @@ import org.mockito.InjectMocks;
 import org.mockito.Mock;
 
 import de.ozgcloud.alfa.common.binaryfile.FileIdMapper;
+import de.ozgcloud.alfa.common.user.UserId;
+import de.ozgcloud.alfa.common.user.UserIdMapper;
 import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory;
 
 class BescheidMapperTest {
 
 	@Mock
 	private FileIdMapper fileIdMapper;
+	@Mock
+	private UserIdMapper userIdMapper;
 	@InjectMocks
 	private final BescheidMapper mapper = Mappers.getMapper(BescheidMapper.class);
 
@@ -88,6 +94,30 @@ class BescheidMapperTest {
 			assertThat(bescheid.getStatus()).isEqualTo(BescheidTestFactory.STATUS);
 		}
 
+		@Nested
+		class TestMapSentInfo {
+			private final SentInfo expectedSentInfo = SentInfoTestFactory.createBuilder()
+					.sentAt(ZonedDateTime.parse(GrpcSentInfoTestFactory.SENT_AT))
+					.sentBy(UserId.from(GrpcSentInfoTestFactory.SENT_BY))
+					.build();
+
+			@Test
+			void shouldMapSentBy() {
+				when(userIdMapper.fromString(GrpcSentInfoTestFactory.SENT_BY)).thenCallRealMethod();
+
+				var bescheid = map();
+
+				assertThat(bescheid.getSentInfo().getSentBy()).isEqualTo(expectedSentInfo.getSentBy());
+			}
+
+			@Test
+			void shouldMapSentAt() {
+				var bescheid = map();
+
+				assertThat(bescheid.getSentInfo().getSentAt()).isEqualTo(expectedSentInfo.getSentAt());
+			}
+		}
+
 		private Bescheid map() {
 			return mapper.fromGrpc(GrpcBescheidTestFactory.create(), VorgangHeaderTestFactory.ID);
 		}
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidTestFactory.java
index 557f2a7b3eb170feae123c4afe34d7c030b47db3..55c6be1a2e8a53828688b492fd815d6c92bbcd3b 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidTestFactory.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidTestFactory.java
@@ -23,6 +23,7 @@ public class BescheidTestFactory {
 	public static final String NACHRICHT_TEXT = LoremIpsum.getInstance().getWords(10);
 	public static final String NACHRICHT_SUBJECT = LoremIpsum.getInstance().getWords(3);
 	public static final SendBy SEND_BY = SendBy.MANUAL;
+	public static final SentInfo SENT_INFO = SentInfoTestFactory.create();
 
 	public static Bescheid.BescheidBuilder createBuilder() {
 		return Bescheid.builder()
@@ -36,7 +37,8 @@ public class BescheidTestFactory {
 				.attachments(ATTACHMENTS)
 				.nachrichtText(NACHRICHT_TEXT)
 				.nachrichtSubject(NACHRICHT_SUBJECT)
-				.sendBy(SEND_BY);
+				.sendBy(SEND_BY)
+				.sentInfo(SENT_INFO);
 	}
 
 	public static Bescheid create() {
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidTestFactory.java
index 4ee81e36e98a17bea65d0f9472ae31b693ac5f73..fe0b433c030563f152f66ea4f12d94a8c0c3964c 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidTestFactory.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidTestFactory.java
@@ -3,6 +3,7 @@ package de.ozgcloud.alfa.bescheid;
 import java.util.List;
 
 import de.ozgcloud.bescheid.GrpcBescheid;
+import de.ozgcloud.bescheid.GrpcSentInfo;
 import de.ozgcloud.common.datatype.StringBasedValue;
 
 public class GrpcBescheidTestFactory {
@@ -14,6 +15,7 @@ public class GrpcBescheidTestFactory {
 	public static final List<String> ATTACHMENTS = BescheidTestFactory.ATTACHMENTS.stream().map(StringBasedValue::toString).toList();
 	public static final String NACHRICHT_TEXT = BescheidTestFactory.NACHRICHT_TEXT;
 	public static final String NACHRICHT_SUBJECT = BescheidTestFactory.NACHRICHT_SUBJECT;
+	public static final GrpcSentInfo SENT_INFO = GrpcSentInfoTestFactory.create();
 
 	public static GrpcBescheid create() {
 		return createBuilder().build();
@@ -29,6 +31,7 @@ public class GrpcBescheidTestFactory {
 				.addAllAttachments(ATTACHMENTS)
 				.setNachrichtText(NACHRICHT_TEXT)
 				.setNachrichtSubject(NACHRICHT_SUBJECT)
-				.setSendBy(BescheidTestFactory.SEND_BY.toString());
+				.setSendBy(BescheidTestFactory.SEND_BY.toString())
+				.setSentInfo(SENT_INFO);
 	}
 }
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcSentInfoTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcSentInfoTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..cf0dc48600671fa22a54fb1b33d9093632eb7cfb
--- /dev/null
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcSentInfoTestFactory.java
@@ -0,0 +1,22 @@
+package de.ozgcloud.alfa.bescheid;
+
+import java.time.ZonedDateTime;
+
+import de.ozgcloud.alfa.common.user.GrpcUserTestFactory;
+import de.ozgcloud.bescheid.GrpcSentInfo;
+
+public class GrpcSentInfoTestFactory {
+
+	public static final String SENT_AT = ZonedDateTime.now().toString();
+	public static final String SENT_BY = GrpcUserTestFactory.ID;
+
+	public static GrpcSentInfo create() {
+		return createBuilder().build();
+	}
+
+	public static GrpcSentInfo.Builder createBuilder() {
+		return GrpcSentInfo.newBuilder()
+				.setSentAt(SENT_AT)
+				.setSentBy(SENT_BY);
+	}
+}
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/SentInfoTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/SentInfoTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..e7d5f826f2518ca17801dcabae6bc0d1695e5347
--- /dev/null
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/SentInfoTestFactory.java
@@ -0,0 +1,22 @@
+package de.ozgcloud.alfa.bescheid;
+
+import java.time.ZonedDateTime;
+
+import de.ozgcloud.alfa.common.user.UserId;
+import de.ozgcloud.alfa.common.user.UserProfileTestFactory;
+
+public class SentInfoTestFactory {
+
+	public static final ZonedDateTime SENT_AT = ZonedDateTime.now();
+	public static final UserId SENT_BY = UserProfileTestFactory.ID;
+
+	public static SentInfo create() {
+		return createBuilder().build();
+	}
+
+	public static SentInfo.SentInfoBuilder createBuilder() {
+		return SentInfo.builder()
+				.sentAt(SENT_AT)
+				.sentBy(SENT_BY);
+	}
+}
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/bescheid/BescheidExportData.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/bescheid/BescheidExportData.java
new file mode 100644
index 0000000000000000000000000000000000000000..ece5ee2c105749cdd5dbf2059d6ae969e8abfb35
--- /dev/null
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/bescheid/BescheidExportData.java
@@ -0,0 +1,19 @@
+package de.ozgcloud.alfa.bescheid;
+
+import java.util.List;
+
+import de.ozgcloud.alfa.common.file.OzgFile;
+import de.xoev.xdomea.DokumentType;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.Singular;
+
+@Builder
+@Getter
+public class BescheidExportData {
+
+	@Singular
+	private List<DokumentType> dokumentTypes;
+	@Singular
+	private List<OzgFile> files;
+}
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/bescheid/BescheidExportInput.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/bescheid/BescheidExportInput.java
new file mode 100644
index 0000000000000000000000000000000000000000..2eaa029e52aa5080b6aabcc85a611af051072b00
--- /dev/null
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/bescheid/BescheidExportInput.java
@@ -0,0 +1,8 @@
+package de.ozgcloud.alfa.bescheid;
+
+import java.util.List;
+
+import de.ozgcloud.alfa.common.file.OzgFile;
+
+record BescheidExportInput(Bescheid bescheid, String organisationseinheitenId, List<OzgFile> files) {
+}
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/bescheid/DokumentTypeBuilder.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/bescheid/DokumentTypeBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..4a049e49cd45a920d3f64a456ace9351348bc4a3
--- /dev/null
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/bescheid/DokumentTypeBuilder.java
@@ -0,0 +1,83 @@
+package de.ozgcloud.alfa.bescheid;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+import org.apache.commons.lang3.StringUtils;
+
+import de.ozgcloud.alfa.common.AnlageDokumentTypeBuilder;
+import de.ozgcloud.alfa.common.DateConverter;
+import de.ozgcloud.alfa.common.IdentifikationObjektTypeBuilder;
+import de.ozgcloud.alfa.common.file.OzgFile;
+import de.xoev.xdomea.AllgemeineMetadatenType;
+import de.xoev.xdomea.AnlageDokumentType;
+import de.xoev.xdomea.DokumentType;
+import de.xoev.xdomea.HistorienProtokollInformationType;
+
+class DokumentTypeBuilder {
+	private static final String TYP = "Bescheid";
+	private static final Map<Boolean, String> BEMERKUNG = Map.of(true, "Bescheid wurde genehmigt.", false, "Bescheid wurde abgelehnt.");
+	private static final Map<SendBy, String> AKTION = Map.of(SendBy.MANUAL, "Bescheid gespeichert", SendBy.NACHRICHT,
+			"Bescheid an Antragsteller gesendet");
+
+	private Bescheid bescheid;
+	private String organisationsEinheitenId;
+	private String fullName;
+	private List<OzgFile> files;
+
+	public static DokumentTypeBuilder builder() {
+		return new DokumentTypeBuilder();
+	}
+
+	public DokumentTypeBuilder withBescheid(Bescheid bescheid) {
+		this.bescheid = bescheid;
+		return this;
+	}
+
+	public DokumentTypeBuilder withOrganisationseinheitenId(String organisationsEinheitenId) {
+		this.organisationsEinheitenId = organisationsEinheitenId;
+		return this;
+	}
+
+	public DokumentTypeBuilder withFullName(String fullName) {
+		this.fullName = fullName;
+		return this;
+	}
+
+	public DokumentTypeBuilder withFiles(List<OzgFile> files) {
+		this.files = files;
+		return this;
+	}
+
+	public DokumentType build() {
+		var dokumentType = new DokumentType();
+		dokumentType.setIdentifikation(IdentifikationObjektTypeBuilder.builder().withObjectID(bescheid.getId()).build());
+		dokumentType.setTyp(TYP);
+		dokumentType.setBezug(StringUtils.defaultString(bescheid.getNachrichtSubject()));
+		dokumentType.setAllgemeineMetadaten(createAllgemeineMetadaten());
+		dokumentType.getHistorienProtokollInformation().add(createHistorienProtokollInformation());
+		Optional.ofNullable(files).orElseGet(Collections::emptyList).stream().map(this::createAnlage).forEach(dokumentType.getAnlage()::add);
+		return dokumentType;
+	}
+
+	AllgemeineMetadatenType createAllgemeineMetadaten() {
+		var metadaten = new AllgemeineMetadatenType();
+		metadaten.setBemerkung(BEMERKUNG.get(bescheid.getBewilligt()));
+		return metadaten;
+	}
+
+	HistorienProtokollInformationType createHistorienProtokollInformation() {
+		var protokollInfo = new HistorienProtokollInformationType();
+		protokollInfo.setMetadatumName(StringUtils.defaultString(bescheid.getNachrichtText()));
+		protokollInfo.setAkteur(fullName + "; " + organisationsEinheitenId);
+		protokollInfo.setDatumUhrzeit(DateConverter.toXmlGregorianCalendar(bescheid.getSentInfo().getSentAt()));
+		protokollInfo.setAktion(AKTION.get(bescheid.getSendBy()));
+		return protokollInfo;
+	}
+
+	AnlageDokumentType createAnlage(OzgFile ozgFile) {
+		return AnlageDokumentTypeBuilder.builder().withOzgFile(ozgFile).build();
+	}
+}
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/bescheid/ExportBescheidService.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/bescheid/ExportBescheidService.java
new file mode 100644
index 0000000000000000000000000000000000000000..1d66ad45f4a52597ed08fa0aa41aa6a93489e45c
--- /dev/null
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/bescheid/ExportBescheidService.java
@@ -0,0 +1,66 @@
+package de.ozgcloud.alfa.bescheid;
+
+import java.util.List;
+import java.util.stream.Stream;
+
+import org.springframework.stereotype.Service;
+
+import de.ozgcloud.alfa.common.binaryfile.BinaryFileService;
+import de.ozgcloud.alfa.common.file.OzgFile;
+import de.ozgcloud.alfa.common.user.UserService;
+import de.ozgcloud.alfa.vorgang.VorgangWithEingang;
+import de.xoev.xdomea.DokumentType;
+import lombok.RequiredArgsConstructor;
+
+@Service
+@RequiredArgsConstructor
+public class ExportBescheidService {
+	private final BescheidService bescheidService;
+	private final BinaryFileService binaryFileService;
+	private final DocumentService documentService;
+	private final UserService userService;
+
+	public BescheidExportData createExportData(VorgangWithEingang vorgang) {
+		var builder = BescheidExportData.builder();
+		getBescheids(vorgang.getId())
+				.forEach(bescheid -> addBescheidExportData(createBescheidExportInput(bescheid, vorgang), builder));
+		return builder.build();
+	}
+
+	Stream<Bescheid> getBescheids(String vorgangId) {
+		return bescheidService.findByVorgangId(vorgangId).filter(bescheid -> BescheidStatus.SENT == bescheid.getStatus());
+	}
+
+	BescheidExportInput createBescheidExportInput(Bescheid bescheid, VorgangWithEingang vorgang) {
+		return new BescheidExportInput(bescheid, vorgang.getOrganisationseinheitenID(), getAttachments(bescheid));
+	}
+
+	List<OzgFile> getAttachments(Bescheid bescheid) {
+		return binaryFileService.getFiles(bescheid.getAttachments()).toList();
+	}
+
+	void addBescheidExportData(BescheidExportInput input, BescheidExportData.BescheidExportDataBuilder builder) {
+		builder.dokumentType(buildDokumentType(input))
+				.file(getDocument(input.bescheid()))
+				.files(input.files());
+	}
+
+	OzgFile getDocument(Bescheid bescheid) {
+		var document = documentService.getDocument(bescheid.getBescheidDocument());
+		return binaryFileService.getFile(document.getFileId());
+	}
+
+	DokumentType buildDokumentType(BescheidExportInput input) {
+		var builder = DokumentTypeBuilder.builder();
+		builder.withBescheid(input.bescheid())
+				.withFiles(input.files())
+				.withFullName(getFullName(input.bescheid()))
+				.withOrganisationseinheitenId(input.organisationseinheitenId());
+		return builder.build();
+	}
+
+	String getFullName(Bescheid bescheid) {
+		return userService.getById(bescheid.getSentInfo().getSentBy()).getFullName();
+	}
+
+}
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportService.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportService.java
index 1901488403a73ecd3e03efdd0bfd5271dd289aee..dea71b8ecffd2e0a22f6d3f69107ffa6ce0e6b39 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportService.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportService.java
@@ -15,6 +15,7 @@ import java.util.zip.ZipOutputStream;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
+import de.ozgcloud.alfa.bescheid.ExportBescheidService;
 import de.ozgcloud.alfa.common.ExportFilenameGenerator;
 import de.ozgcloud.alfa.common.file.OzgFile;
 import de.ozgcloud.alfa.file.ExportFileService;
@@ -44,6 +45,7 @@ class ExportService {
 	private final ExportHistorieService exportHistorieService;
 	private final ExportKommentarService exportKommentarService;
 	private final ExportNachrichtService exportNachrichtService;
+	private final ExportBescheidService exportBescheidService;
 
 	public void writeExport(String vorgangId, String filenameId, OutputStream out) {
 		var exportData = collectExportData(vorgangId, filenameId);
@@ -55,6 +57,7 @@ class ExportService {
 		var vorgang = exportVorgangService.getVorgang(vorgangId);
 		var kommentarsData = exportKommentarService.createExportData(vorgang);
 		var postfachMailData = exportNachrichtService.createExportData(vorgang);
+		var bescheidData = exportBescheidService.createExportData(vorgang);
 		var representations = exportFileService.getRepresentations(vorgang).toList();
 		var attachments = exportFileService.getAttachments(vorgang).toList();
 		var formEngineName = getFormEngineName(vorgang);
@@ -67,6 +70,7 @@ class ExportService {
 				.withHistorie(exportHistorieService.createHistorienProtokollInformationTypes(vorgang).toList())
 				.withKommentare(kommentarsData.getDokumentTypes())
 				.withPostfachMails(postfachMailData.getDokumentTypes())
+				.withBescheids(bescheidData.getDokumentTypes())
 				.build();
 		var exportFiles = Stream
 				.of(representations.stream(), attachments.stream(),
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilder.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilder.java
index ae734f35808d7cff6c55d85f30070b136539630f..644265c961a0a0d943d721d12d5f1c5c9d33d067 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilder.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilder.java
@@ -23,6 +23,7 @@ class XdomeaNachrichtBuilder {
 	private List<DokumentType> attachments = Collections.emptyList();
 	private List<DokumentType> kommentare = Collections.emptyList();
 	private List<DokumentType> postfachMails = Collections.emptyList();
+	private List<DokumentType> bescheids = Collections.emptyList();
 	private List<HistorienProtokollInformationType> historie = Collections.emptyList();
 
 	public static XdomeaNachrichtBuilder builder() {
@@ -69,6 +70,11 @@ class XdomeaNachrichtBuilder {
 		return this;
 	}
 
+	public XdomeaNachrichtBuilder withBescheids(List<DokumentType> bescheids) {
+		this.bescheids = bescheids;
+		return this;
+	}
+
 	public AbgabeAbgabe0401 build() {
 		addVorgangDokumente();
 		addVorgangChangeHistory();
@@ -80,6 +86,7 @@ class XdomeaNachrichtBuilder {
 		attachments.forEach(vorgang.getDokument()::add);
 		kommentare.forEach(vorgang.getDokument()::add);
 		postfachMails.forEach(vorgang.getDokument()::add);
+		bescheids.forEach(vorgang.getDokument()::add);
 	}
 
 	void addVorgangChangeHistory() {
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/postfach/DokumentTypeBuilder.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/postfach/DokumentTypeBuilder.java
index 89520bf24ce8e36c574b7402b77696ea56384b60..1a82477373682b64b4581952fb28345ac655937c 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/postfach/DokumentTypeBuilder.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/postfach/DokumentTypeBuilder.java
@@ -1,6 +1,7 @@
 package de.ozgcloud.alfa.postfach;
 
 import java.time.ZonedDateTime;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
@@ -61,7 +62,8 @@ class DokumentTypeBuilder {
 				.build());
 		dokumentType.setTyp(TYP);
 		dokumentType.getHistorienProtokollInformation().add(createHistorienProtokollInformation());
-		ozgFileAttachments.stream().map(this::createAnlage).forEach(dokumentType.getAnlage()::add);
+		Optional.ofNullable(ozgFileAttachments).orElseGet(Collections::emptyList).stream().map(this::createAnlage)
+				.forEach(dokumentType.getAnlage()::add);
 		return dokumentType;
 	}
 
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/bescheid/BescheidExportDataTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/bescheid/BescheidExportDataTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..a8750928c920bc87ecdc49b5fe79aeae537cc26b
--- /dev/null
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/bescheid/BescheidExportDataTestFactory.java
@@ -0,0 +1,22 @@
+package de.ozgcloud.alfa.bescheid;
+
+import de.ozgcloud.alfa.common.file.OzgFile;
+import de.ozgcloud.alfa.common.file.OzgFileTestFactory;
+import de.ozgcloud.alfa.export.DokumentTypeTestFactory;
+import de.xoev.xdomea.DokumentType;
+
+public class BescheidExportDataTestFactory {
+
+	public static final DokumentType DOKUMENT_TYPE = DokumentTypeTestFactory.create();
+	public static final OzgFile OZG_FILE = OzgFileTestFactory.createWithUniqueId();
+
+	public static BescheidExportData create() {
+		return createBuilder().build();
+	}
+
+	public static BescheidExportData.BescheidExportDataBuilder createBuilder() {
+		return BescheidExportData.builder()
+				.dokumentType(DOKUMENT_TYPE)
+				.file(OZG_FILE);
+	}
+}
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/bescheid/BescheidExportInputTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/bescheid/BescheidExportInputTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..0051086930bbbe289f68949dc244733f7e5ab218
--- /dev/null
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/bescheid/BescheidExportInputTestFactory.java
@@ -0,0 +1,19 @@
+package de.ozgcloud.alfa.bescheid;
+
+import java.util.List;
+
+import de.ozgcloud.alfa.common.file.OzgFile;
+import de.ozgcloud.alfa.common.file.OzgFileTestFactory;
+import de.ozgcloud.alfa.vorgang.ZustaendigeStelleTestFactory;
+
+public class BescheidExportInputTestFactory {
+
+	public final static Bescheid BESCHEID = BescheidTestFactory.create();
+	public final static String ORGANISATIONSEINHEITEN_ID = ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID;
+	public final static List<OzgFile> ATTACHMENTS = List.of(OzgFileTestFactory.createWithUniqueId());
+
+	public static BescheidExportInput create() {
+		return new BescheidExportInput(BESCHEID, ORGANISATIONSEINHEITEN_ID, ATTACHMENTS);
+	}
+
+}
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/bescheid/DokumentTypeBuilderTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/bescheid/DokumentTypeBuilderTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..9c4bfd7a1291e1a06ea16cc902d2ee60019f4a41
--- /dev/null
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/bescheid/DokumentTypeBuilderTest.java
@@ -0,0 +1,293 @@
+package de.ozgcloud.alfa.bescheid;
+
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.Mockito.*;
+
+import java.util.List;
+
+import org.junit.jupiter.api.AfterEach;
+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.MockedStatic;
+import org.mockito.Spy;
+
+import com.thedeanda.lorem.LoremIpsum;
+
+import de.ozgcloud.alfa.common.AnlageDokumentTypeBuilder;
+import de.ozgcloud.alfa.common.AnlageDokumentTypeTestFactory;
+import de.ozgcloud.alfa.common.DateConverter;
+import de.ozgcloud.alfa.common.HistorienProtokollInformationTypeTestFactory;
+import de.ozgcloud.alfa.common.IdentifikationObjektTypeBuilder;
+import de.ozgcloud.alfa.common.file.OzgFile;
+import de.ozgcloud.alfa.common.file.OzgFileTestFactory;
+import de.ozgcloud.alfa.common.user.UserProfileTestFactory;
+import de.ozgcloud.alfa.export.AllgemeineMetadatenTypeTestFactory;
+import de.ozgcloud.alfa.export.IdentifikationObjektTypeTestFactory;
+import de.ozgcloud.alfa.vorgang.ZustaendigeStelleTestFactory;
+import de.xoev.xdomea.AllgemeineMetadatenType;
+import de.xoev.xdomea.AnlageDokumentType;
+import de.xoev.xdomea.HistorienProtokollInformationType;
+import de.xoev.xdomea.IdentifikationObjektType;
+
+class DokumentTypeBuilderTest {
+	private final String fullName = UserProfileTestFactory.FULLNAME;
+	private final Bescheid bescheid = BescheidTestFactory.create();
+	private final OzgFile document = OzgFileTestFactory.create();
+
+	@Spy
+	private final DokumentTypeBuilder builder = DokumentTypeBuilder.builder()
+			.withBescheid(bescheid)
+			.withOrganisationseinheitenId(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID)
+			.withFullName(fullName)
+			.withFiles(List.of(document));
+
+	@Nested
+	class TestBuild {
+		private static final String TYP = "Bescheid";
+
+		private MockedStatic<IdentifikationObjektTypeBuilder> identifikationObjektTypeBuilderMockedStatic;
+		@Mock
+		private IdentifikationObjektTypeBuilder identifikationObjektTypeBuilder;
+		private final IdentifikationObjektType identifikationObjektType = IdentifikationObjektTypeTestFactory.create();
+
+		private final HistorienProtokollInformationType historienProtokollInformation = HistorienProtokollInformationTypeTestFactory.create();
+		private final AllgemeineMetadatenType metadatenType = AllgemeineMetadatenTypeTestFactory.create();
+		private final AnlageDokumentType anlageDokumentDocument = AnlageDokumentTypeTestFactory.create();
+
+		@BeforeEach
+		void setUp() {
+			identifikationObjektTypeBuilderMockedStatic = mockStatic(IdentifikationObjektTypeBuilder.class);
+			identifikationObjektTypeBuilderMockedStatic.when(IdentifikationObjektTypeBuilder::builder).thenReturn(identifikationObjektTypeBuilder);
+			when(identifikationObjektTypeBuilder.withObjectID(BescheidTestFactory.ID)).thenReturn(identifikationObjektTypeBuilder);
+			when(identifikationObjektTypeBuilder.build()).thenReturn(identifikationObjektType);
+			doReturn(anlageDokumentDocument).when(builder).createAnlage(document);
+		}
+
+		@AfterEach
+		void tearDown() {
+			identifikationObjektTypeBuilderMockedStatic.close();
+		}
+
+		@Test
+		void shouldSetObjectId() {
+			builder.build();
+
+			verify(identifikationObjektTypeBuilder).withObjectID(bescheid.getId());
+		}
+
+		@Test
+		void shouldBuildIdentifikationObjectType() {
+			builder.build();
+
+			verify(identifikationObjektTypeBuilder).build();
+		}
+
+		@Test
+		void shouldHaveIdentifikation() {
+			var dokument = builder.build();
+
+			assertThat(dokument.getIdentifikation()).isEqualTo(identifikationObjektType);
+		}
+
+		@Test
+		void shouldHaveTyp() {
+			var dokument = builder.build();
+
+			assertThat(dokument.getTyp()).isEqualTo(TYP);
+		}
+
+		@Test
+		void shouldHaveBezugWithBetreff() {
+			var subject = LoremIpsum.getInstance().getWords(5);
+			builder.withBescheid(BescheidTestFactory.createBuilder().nachrichtSubject(subject).build());
+
+			var dokument = builder.build();
+
+			assertThat(dokument.getBezug()).isEqualTo(subject);
+		}
+
+		@Test
+		void shouldHaveEmptyBezug() {
+			builder.withBescheid(BescheidTestFactory.createBuilder().nachrichtSubject(null).build());
+
+			var dokument = builder.build();
+
+			assertThat(dokument.getBezug()).isEmpty();
+		}
+
+		@Test
+		void shouldHaveMetadaten() {
+			doReturn(metadatenType).when(builder).createAllgemeineMetadaten();
+
+			var dokument = builder.build();
+
+			assertThat(dokument.getAllgemeineMetadaten()).isEqualTo(metadatenType);
+		}
+
+		@Test
+		void shouldHaveHistorienProtokollInformation() {
+			doReturn(historienProtokollInformation).when(builder).createHistorienProtokollInformation();
+
+			var dokument = builder.build();
+
+			assertThat(dokument.getHistorienProtokollInformation()).containsExactly(historienProtokollInformation);
+		}
+
+		@Nested
+		class TestWithoutAnlage {
+			@Test
+			void shouldHaveNoAnlage() {
+				var dokument = builder.build();
+
+				assertThat(dokument.getAnlage()).containsExactly(anlageDokumentDocument);
+			}
+
+		}
+
+		@Nested
+		class TestWithOneAnlage {
+			private final AnlageDokumentType anlageDokumentAttachment = AnlageDokumentTypeTestFactory.create();
+			private final OzgFile attachment = OzgFileTestFactory.create();
+
+			@Test
+			void shouldHaveOneAnlage() {
+				builder.withFiles(List.of(document, attachment));
+				doReturn(anlageDokumentAttachment).when(builder).createAnlage(attachment);
+
+				var dokument = builder.build();
+
+				assertThat(dokument.getAnlage()).containsExactly(anlageDokumentDocument, anlageDokumentAttachment);
+			}
+		}
+	}
+
+	@Nested
+	class TestCreateAllgemeineMetadaten {
+		private final static String GENEHMIGT = "Bescheid wurde genehmigt.";
+		private final static String ABGELEHNT = "Bescheid wurde abgelehnt.";
+
+		@Test
+		void shouldHaveBemerkungGenehmigt() {
+			builder.withBescheid(BescheidTestFactory.createBuilder().bewilligt(true).build());
+
+			var metadaten = builder.createAllgemeineMetadaten();
+
+			assertThat(metadaten.getBemerkung()).isEqualTo(GENEHMIGT);
+		}
+
+		@Test
+		void shouldHaveBemerkungAbgelehnt() {
+			builder.withBescheid(BescheidTestFactory.createBuilder().bewilligt(false).build());
+
+			var metadaten = builder.createAllgemeineMetadaten();
+
+			assertThat(metadaten.getBemerkung()).isEqualTo(ABGELEHNT);
+		}
+	}
+
+	@Nested
+	class TestCreateHistorienProtokollInformation {
+		private final static String GESPEICHERT = "Bescheid gespeichert";
+		private final static String GESENDET = "Bescheid an Antragsteller gesendet";
+
+		@Test
+		void shouldHaveMetadatumName() {
+			var text = LoremIpsum.getInstance().getHtmlParagraphs(1, 1);
+			builder.withBescheid(BescheidTestFactory.createBuilder().nachrichtText(text).build());
+
+			var protokollInfo = builder.createHistorienProtokollInformation();
+
+			assertThat(protokollInfo.getMetadatumName()).isEqualTo(text);
+		}
+
+		@Test
+		void shouldHaveEmptyMetadatumName() {
+			builder.withBescheid(BescheidTestFactory.createBuilder().nachrichtText(null).build());
+
+			var protokollInfo = builder.createHistorienProtokollInformation();
+
+			assertThat(protokollInfo.getMetadatumName()).isEmpty();
+		}
+
+		@Test
+		void shouldHaveAkteur() {
+			var protokollInfo = builder.createHistorienProtokollInformation();
+
+			assertThat(protokollInfo.getAkteur()).isEqualTo(fullName + "; " + ZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID);
+		}
+
+		@Test
+		void shouldHaveDatumUhrzeit() {
+			var protokollInfo = builder.createHistorienProtokollInformation();
+
+			assertThat(protokollInfo.getDatumUhrzeit()).isEqualTo(DateConverter.toXmlGregorianCalendar(SentInfoTestFactory.SENT_AT));
+		}
+
+		@Test
+		void shouldHaveGespeichertInAktion() {
+			builder.withBescheid(BescheidTestFactory.createBuilder().sendBy(SendBy.MANUAL).build());
+
+			var protokollInfo = builder.createHistorienProtokollInformation();
+
+			assertThat(protokollInfo.getAktion()).isEqualTo(GESPEICHERT);
+		}
+
+		@Test
+		void shouldHaveGesendetInAktion() {
+			builder.withBescheid(BescheidTestFactory.createBuilder().sendBy(SendBy.NACHRICHT).build());
+
+			var protokollInfo = builder.createHistorienProtokollInformation();
+
+			assertThat(protokollInfo.getAktion()).isEqualTo(GESENDET);
+		}
+	}
+
+	@Nested
+	class TestCreateAnlage {
+		private MockedStatic<AnlageDokumentTypeBuilder> anlageDokumentTypeBuilderMockedStatic;
+		@Mock
+		private AnlageDokumentTypeBuilder anlageDokumentTypeBuilder;
+		private final AnlageDokumentType expectedAnlage = AnlageDokumentTypeTestFactory.create();
+		private final OzgFile attachment = OzgFileTestFactory.create();
+
+		@BeforeEach
+		void setUp() {
+			anlageDokumentTypeBuilderMockedStatic = mockStatic(AnlageDokumentTypeBuilder.class);
+			anlageDokumentTypeBuilderMockedStatic.when(AnlageDokumentTypeBuilder::builder).thenReturn(anlageDokumentTypeBuilder);
+			when(anlageDokumentTypeBuilder.withOzgFile(attachment)).thenReturn(anlageDokumentTypeBuilder);
+			when(anlageDokumentTypeBuilder.build()).thenReturn(expectedAnlage);
+		}
+
+		@AfterEach
+		void tearDown() {
+			anlageDokumentTypeBuilderMockedStatic.close();
+		}
+
+		@Test
+		void shouldSetOzgFile() {
+			callCreateAnlage();
+
+			verify(anlageDokumentTypeBuilder).withOzgFile(attachment);
+		}
+
+		@Test
+		void shouldBuildAnlageDokumentType() {
+			callCreateAnlage();
+
+			verify(anlageDokumentTypeBuilder).build();
+		}
+
+		@Test
+		void shouldReturnBuiltAnlage() {
+			var resultAnlage = callCreateAnlage();
+
+			assertThat(resultAnlage).isEqualTo(expectedAnlage);
+		}
+
+		private AnlageDokumentType callCreateAnlage() {
+			return builder.createAnlage(attachment);
+		}
+	}
+}
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/bescheid/ExportBescheidServiceTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/bescheid/ExportBescheidServiceTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..126aab998d2b46b39b5b8e5c2340f6200fe2adee
--- /dev/null
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/bescheid/ExportBescheidServiceTest.java
@@ -0,0 +1,425 @@
+package de.ozgcloud.alfa.bescheid;
+
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.Mockito.*;
+
+import java.util.List;
+import java.util.stream.Stream;
+
+import org.junit.jupiter.api.AfterEach;
+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.MockedStatic;
+import org.mockito.Spy;
+
+import de.ozgcloud.alfa.bescheid.BescheidExportData.BescheidExportDataBuilder;
+import de.ozgcloud.alfa.common.binaryfile.BinaryFileService;
+import de.ozgcloud.alfa.common.binaryfile.FileId;
+import de.ozgcloud.alfa.common.file.OzgFile;
+import de.ozgcloud.alfa.common.file.OzgFileTestFactory;
+import de.ozgcloud.alfa.common.user.UserProfile;
+import de.ozgcloud.alfa.common.user.UserProfileTestFactory;
+import de.ozgcloud.alfa.common.user.UserService;
+import de.ozgcloud.alfa.export.DokumentTypeTestFactory;
+import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory;
+import de.ozgcloud.alfa.vorgang.VorgangWithEingang;
+import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory;
+import de.xoev.xdomea.DokumentType;
+
+class ExportBescheidServiceTest {
+
+	@InjectMocks
+	@Spy
+	private ExportBescheidService service;
+
+	@Mock
+	private BescheidService bescheidService;
+
+	@Mock
+	private BinaryFileService binaryFileService;
+
+	@Mock
+	private DocumentService documentService;
+
+	@Mock
+	private UserService userService;
+
+	@Nested
+	class TestCreateExportData {
+		private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create();
+		private final Bescheid bescheid = BescheidTestFactory.create();
+		private final BescheidExportData exportData = BescheidExportDataTestFactory.create();
+		private final BescheidExportInput input = BescheidExportInputTestFactory.create();
+
+		private MockedStatic<BescheidExportData> bescheidExportDataMockedStatic;
+		@Mock
+		private BescheidExportDataBuilder exportDataBuilder;
+
+		@BeforeEach
+		void setUpMocks() {
+			bescheidExportDataMockedStatic = mockStatic(BescheidExportData.class);
+			bescheidExportDataMockedStatic.when(BescheidExportData::builder).thenReturn(exportDataBuilder);
+
+			doReturn(Stream.of(bescheid)).when(service).getBescheids(vorgang.getId());
+			when(exportDataBuilder.build()).thenReturn(exportData);
+			doReturn(input).when(service).createBescheidExportInput(bescheid, vorgang);
+			doNothing().when(service).addBescheidExportData(input, exportDataBuilder);
+		}
+
+		@AfterEach
+		void tearDown() {
+			bescheidExportDataMockedStatic.close();
+		}
+
+		@Test
+		void shouldGetBescheids() {
+			callService();
+
+			verify(service).getBescheids(vorgang.getId());
+		}
+
+		@Test
+		void shouldCreateInputData() {
+			callService();
+
+			verify(service).createBescheidExportInput(bescheid, vorgang);
+		}
+
+		@Test
+		void shouldAddInputToBuilder() {
+			callService();
+
+			verify(service).addBescheidExportData(input, exportDataBuilder);
+		}
+
+		@Test
+		void shouldBuildExportData() {
+			callService();
+
+			verify(exportDataBuilder).build();
+		}
+
+		@Test
+		void shouldReturnBuiltExportData() {
+			var result = callService();
+
+			assertThat(result).isEqualTo(exportData);
+		}
+
+		private BescheidExportData callService() {
+			return service.createExportData(vorgang);
+		}
+	}
+
+	@Nested
+	class TestGetBescheids {
+		private final String vorgangId = VorgangHeaderTestFactory.ID;
+		private final Bescheid bescheid = BescheidTestFactory.createBuilder().status(BescheidStatus.SENT).build();
+		private final Bescheid bescheidDraft = BescheidTestFactory.createBuilder().status(BescheidStatus.DRAFT).build();
+
+		@Test
+		void shouldCallBescheidService() {
+			callService();
+
+			verify(bescheidService).findByVorgangId(vorgangId);
+		}
+
+		@Test
+		void shouldReturnBescheids() {
+			when(bescheidService.findByVorgangId(vorgangId)).thenReturn(Stream.of(bescheid));
+
+			var resultBescheids = callService();
+
+			assertThat(resultBescheids).containsExactly(bescheid);
+		}
+
+		@Test
+		void shouldNotReturnDrafts() {
+			when(bescheidService.findByVorgangId(vorgangId)).thenReturn(Stream.of(bescheid, bescheidDraft));
+
+			var resultBescheids = callService();
+
+			assertThat(resultBescheids).containsExactly(bescheid);
+		}
+
+		private Stream<Bescheid> callService() {
+			return service.getBescheids(vorgangId);
+		}
+	}
+
+	@Nested
+	class TestCreateBescheidExportInput {
+		private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create();
+		private final Bescheid bescheid = BescheidTestFactory.create();
+
+		@BeforeEach
+		void setUpMocks() {
+			doReturn(BescheidExportInputTestFactory.ATTACHMENTS).when(service).getAttachments(bescheid);
+		}
+
+		@Test
+		void shouldCallGetAttachents() {
+			callService();
+
+			verify(service).getAttachments(bescheid);
+		}
+
+		@Test
+		void shouldReturnInputData() {
+			var resultInput = callService();
+
+			assertThat(resultInput).usingRecursiveComparison().isEqualTo(BescheidExportInputTestFactory.create());
+		}
+
+		private BescheidExportInput callService() {
+			return service.createBescheidExportInput(bescheid, vorgang);
+		}
+	}
+
+	@Nested
+	class TestGetDocument {
+		private final Bescheid bescheid = BescheidTestFactory.create();
+		private final Document document = DocumentTestFactory.create();
+		private final OzgFile ozgDocument = OzgFileTestFactory.create();
+
+		@BeforeEach
+		void setUpMock() {
+			when(documentService.getDocument(bescheid.getBescheidDocument())).thenReturn(document);
+		}
+
+		@Test
+		void shouldCallDocumentService() {
+			callService();
+
+			verify(documentService).getDocument(bescheid.getBescheidDocument());
+		}
+
+		@Test
+		void shouldCallBinaryFileService() {
+			callService();
+
+			verify(binaryFileService).getFile(DocumentTestFactory.FILE_ID);
+		}
+
+		@Test
+		void shouldReturnOzgFile() {
+			when(binaryFileService.getFile(DocumentTestFactory.FILE_ID)).thenReturn(ozgDocument);
+
+			var resultDocument = callService();
+
+			assertThat(resultDocument).isEqualTo(ozgDocument);
+		}
+
+		private OzgFile callService() {
+			return service.getDocument(bescheid);
+		}
+	}
+
+	@Nested
+	class TestGetAttachments {
+		private final Bescheid bescheid = BescheidTestFactory.create();
+		private final List<FileId> fileIds = BescheidTestFactory.ATTACHMENTS;
+
+		@Test
+		void shouldCallBinaryFileServiceGetFile() {
+			service.getAttachments(bescheid);
+
+			verify(binaryFileService).getFiles(fileIds);
+		}
+
+		@Test
+		void shouldReturnGottenOzgFiles() {
+			var expectedOzgFile = OzgFileTestFactory.create();
+			when(binaryFileService.getFiles(fileIds)).thenReturn(Stream.of(expectedOzgFile));
+
+			var resultOzgFiles = service.getAttachments(bescheid);
+
+			assertThat(resultOzgFiles).containsExactly(expectedOzgFile);
+		}
+	}
+
+	@Nested
+	class TestAddBescheidExportData {
+		private final List<OzgFile> attachments = BescheidExportInputTestFactory.ATTACHMENTS;
+		private final OzgFile document = OzgFileTestFactory.create();
+		private final DokumentType dokumentType = DokumentTypeTestFactory.create();
+		private final BescheidExportInput exportInput = BescheidExportInputTestFactory.create();
+
+		@Mock
+		private BescheidExportDataBuilder exportDataBuilder;
+
+		@BeforeEach
+		void setUpMocks() {
+			doReturn(dokumentType).when(service).buildDokumentType(exportInput);
+			doReturn(document).when(service).getDocument(exportInput.bescheid());
+			when(exportDataBuilder.dokumentType(dokumentType)).thenReturn(exportDataBuilder);
+			when(exportDataBuilder.file(document)).thenReturn(exportDataBuilder);
+		}
+
+		@Test
+		void shouldGetDocument() {
+			callService();
+
+			verify(service).getDocument(exportInput.bescheid());
+		}
+
+		@Test
+		void shouldAddDocumentToBuilder() {
+			callService();
+
+			verify(exportDataBuilder).file(document);
+		}
+
+		@Test
+		void shouldAddAttachmentsToBuilder() {
+			callService();
+
+			verify(exportDataBuilder).files(attachments);
+		}
+
+		@Test
+		void shouldBuildDokumentType() {
+			callService();
+
+			verify(service).buildDokumentType(exportInput);
+		}
+
+		@Test
+		void shouldAddDokumentTypeToBuilder() {
+			callService();
+
+			verify(exportDataBuilder).dokumentType(dokumentType);
+		}
+
+		private void callService() {
+			service.addBescheidExportData(exportInput, exportDataBuilder);
+		}
+	}
+
+	@Nested
+	class TestBuildDokumentType {
+		private final BescheidExportInput exportInput = BescheidExportInputTestFactory.create();
+		private final Bescheid bescheid = BescheidExportInputTestFactory.BESCHEID;
+		private final List<OzgFile> attachments = BescheidExportInputTestFactory.ATTACHMENTS;
+		private final String fullName = UserProfileTestFactory.FULLNAME;
+
+		private MockedStatic<DokumentTypeBuilder> dokumentTypeBuilderMockedStatic;
+		@Mock
+		private DokumentTypeBuilder dokumentTypeBuilder;
+
+		@BeforeEach
+		void setUp() {
+			dokumentTypeBuilderMockedStatic = mockStatic(DokumentTypeBuilder.class);
+			dokumentTypeBuilderMockedStatic.when(DokumentTypeBuilder::builder).thenReturn(dokumentTypeBuilder);
+
+			when(dokumentTypeBuilder.withBescheid(bescheid)).thenReturn(dokumentTypeBuilder);
+			when(dokumentTypeBuilder.withFiles(attachments)).thenReturn(dokumentTypeBuilder);
+			when(dokumentTypeBuilder.withFullName(fullName)).thenReturn(dokumentTypeBuilder);
+			when(dokumentTypeBuilder.withOrganisationseinheitenId(BescheidExportInputTestFactory.ORGANISATIONSEINHEITEN_ID))
+					.thenReturn(dokumentTypeBuilder);
+
+			doReturn(fullName).when(service).getFullName(bescheid);
+		}
+
+		@AfterEach
+		void tearDown() {
+			dokumentTypeBuilderMockedStatic.close();
+		}
+
+		@Test
+		void shouldCallBuilder() {
+			callService();
+
+			dokumentTypeBuilderMockedStatic.verify(DokumentTypeBuilder::builder);
+		}
+
+		@Test
+		void shouldBuildWithBescheid() {
+			callService();
+
+			verify(dokumentTypeBuilder).withBescheid(bescheid);
+		}
+
+		@Test
+		void shouldBuildWithOzgFiles() {
+			callService();
+
+			verify(dokumentTypeBuilder).withFiles(attachments);
+		}
+
+		@Test
+		void shouldGetFullName() {
+			callService();
+
+			verify(service).getFullName(bescheid);
+		}
+
+		@Test
+		void shouldBuildWithFullName() {
+			callService();
+
+			verify(dokumentTypeBuilder).withFullName(fullName);
+		}
+
+		@Test
+		void shouldBuildWithOrganisationseinheitenId() {
+			callService();
+
+			verify(dokumentTypeBuilder).withOrganisationseinheitenId(BescheidExportInputTestFactory.ORGANISATIONSEINHEITEN_ID);
+		}
+
+		@Test
+		void shouldBuild() {
+			callService();
+
+			verify(dokumentTypeBuilder).build();
+		}
+
+		@Test
+		void shouldReturnBuiltDokumentType() {
+			var expectedDokumentType = DokumentTypeTestFactory.create();
+			when(dokumentTypeBuilder.build()).thenReturn(expectedDokumentType);
+
+			var resultDokumentType = callService();
+
+			assertThat(resultDokumentType).isEqualTo(expectedDokumentType);
+		}
+
+		private DokumentType callService() {
+			return service.buildDokumentType(exportInput);
+		}
+	}
+
+	@Nested
+	class TestGetFullName {
+		private final Bescheid bescheid = BescheidTestFactory.create();
+		private final UserProfile userProfile = UserProfileTestFactory.create();
+		private final String expectedFullName = UserProfileTestFactory.FULLNAME;
+
+		@BeforeEach
+		void mockUserService() {
+			when(userService.getById(SentInfoTestFactory.SENT_BY)).thenReturn(userProfile);
+		}
+
+		@Test
+		void shouldCallUserServiceGetbyId() {
+			callService();
+
+			verify(userService).getById(SentInfoTestFactory.SENT_BY);
+		}
+
+		@Test
+		void shouldReturnOptionalOfUserProfile() {
+			var fullName = callService();
+
+			assertThat(fullName).isEqualTo(expectedFullName);
+		}
+
+		private String callService() {
+			return service.getFullName(bescheid);
+		}
+	}
+}
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceITCase.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceITCase.java
index 1ce3deed159608cf3f609716ee204f03b701520c..4cf6d583e155be78b4d3d0020b700cf9723c6232 100644
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceITCase.java
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceITCase.java
@@ -16,6 +16,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.boot.test.mock.mockito.SpyBean;
 
+import de.ozgcloud.alfa.bescheid.BescheidExportDataTestFactory;
+import de.ozgcloud.alfa.bescheid.ExportBescheidService;
 import de.ozgcloud.alfa.common.binaryfile.BinaryFileService;
 import de.ozgcloud.alfa.common.file.OzgFileTestFactory;
 import de.ozgcloud.alfa.common.user.UserProfileTestFactory;
@@ -50,6 +52,8 @@ class ExportServiceITCase {
 	@MockBean
 	private ExportNachrichtService exportNachrichtService;
 	@MockBean
+	private ExportBescheidService exportBescheidService;
+	@MockBean
 	private UserService userService;
 	@Autowired
 	private ExportService exportService;
@@ -71,6 +75,7 @@ class ExportServiceITCase {
 			when(exportHistorieService.createHistorienProtokollInformationTypes(vorgang)).thenReturn(Stream.empty());
 			when(exportKommentarService.createExportData(vorgang)).thenReturn(KommentarsExportDataTestFactory.create());
 			when(exportNachrichtService.createExportData(vorgang)).thenReturn(PostfachMailExportDataTestFactory.create());
+			when(exportBescheidService.createExportData(vorgang)).thenReturn(BescheidExportDataTestFactory.create());
 		}
 
 		@Test
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceTest.java
index 60f57250052a7d1f28655002f3fff6324fbe9f93..4cb6ebb420df44f1ea730e236351db5b1e781a13 100644
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceTest.java
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceTest.java
@@ -26,6 +26,9 @@ import org.mockito.Mock;
 import org.mockito.MockedStatic;
 import org.mockito.Spy;
 
+import de.ozgcloud.alfa.bescheid.BescheidExportData;
+import de.ozgcloud.alfa.bescheid.BescheidExportDataTestFactory;
+import de.ozgcloud.alfa.bescheid.ExportBescheidService;
 import de.ozgcloud.alfa.common.ExportFilenameGenerator;
 import de.ozgcloud.alfa.common.HistorienProtokollInformationTypeTestFactory;
 import de.ozgcloud.alfa.common.TestUtils;
@@ -74,6 +77,8 @@ class ExportServiceTest {
 	private ExportKommentarService exportKommentarService;
 	@Mock
 	private ExportNachrichtService exportNachrichtService;
+	@Mock
+	private ExportBescheidService exportBescheidService;
 
 	@DisplayName("Write exportToXdomea")
 	@Nested
@@ -139,6 +144,7 @@ class ExportServiceTest {
 				HistorienProtokollInformationTypeTestFactory.create());
 		private final KommentarsExportData kommentarsExportData = KommentarsExportDataTestFactory.create();
 		private final PostfachMailExportData postfachMailExportData = PostfachMailExportDataTestFactory.create();
+		private final BescheidExportData bescheidExportData = BescheidExportDataTestFactory.create();
 
 		@Mock
 		private XdomeaNachrichtBuilder xdomeaNachrichtBuilder;
@@ -151,6 +157,7 @@ class ExportServiceTest {
 			setUpExportHistorieService();
 			setUpExportKommentarService();
 			setUpExportNachrichtService();
+			setUpExportBescheidService();
 
 			doReturn(FILE_NAME).when(service).buildXmlFilename(FILENAME_ID);
 			doReturn(EingangHeaderTestFactory.FORM_ENGINE_NAME).when(service).getFormEngineName(vorgang);
@@ -174,6 +181,7 @@ class ExportServiceTest {
 			when(xdomeaNachrichtBuilder.withHistorie(historienProtokollInformationTypes)).thenReturn(xdomeaNachrichtBuilder);
 			when(xdomeaNachrichtBuilder.withKommentare(kommentarsExportData.getDokumentTypes())).thenReturn(xdomeaNachrichtBuilder);
 			when(xdomeaNachrichtBuilder.withPostfachMails(postfachMailExportData.getDokumentTypes())).thenReturn(xdomeaNachrichtBuilder);
+			when(xdomeaNachrichtBuilder.withBescheids(bescheidExportData.getDokumentTypes())).thenReturn(xdomeaNachrichtBuilder);
 			xdomeaNachrichtBuilderMockedStatic.when(XdomeaNachrichtBuilder::builder).thenReturn(xdomeaNachrichtBuilder);
 			when(xdomeaNachrichtBuilder.build()).thenReturn(abgabe);
 		}
@@ -201,6 +209,10 @@ class ExportServiceTest {
 			when(exportNachrichtService.createExportData(vorgang)).thenReturn(postfachMailExportData);
 		}
 
+		private void setUpExportBescheidService() {
+			when(exportBescheidService.createExportData(vorgang)).thenReturn(bescheidExportData);
+		}
+
 		@AfterEach
 		void tearDown() {
 			xdomeaNachrichtBuilderMockedStatic.close();
@@ -311,6 +323,13 @@ class ExportServiceTest {
 			verify(xdomeaNachrichtBuilder).withPostfachMails(postfachMailExportData.getDokumentTypes());
 		}
 
+		@Test
+		void shouldSetBescheids() {
+			callService();
+
+			verify(xdomeaNachrichtBuilder).withBescheids(bescheidExportData.getDokumentTypes());
+		}
+
 		@Test
 		void shouldSetAktenzeichen() {
 			callService();
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilderTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilderTest.java
index 5e7b4ea241d987d8713cab382e833fde766882cb..c524f4f7c82761a842f02be8f42dde2b2159af53 100644
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilderTest.java
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilderTest.java
@@ -104,6 +104,7 @@ class XdomeaNachrichtBuilderTest {
 		private final List<DokumentType> attachments = List.of(DokumentTypeTestFactory.create(), DokumentTypeTestFactory.create());
 		private final List<DokumentType> kommentare = List.of(DokumentTypeTestFactory.create(), DokumentTypeTestFactory.create());
 		private final List<DokumentType> postfachMails = List.of(DokumentTypeTestFactory.create(), DokumentTypeTestFactory.create());
+		private final List<DokumentType> bescheids = List.of(DokumentTypeTestFactory.create(), DokumentTypeTestFactory.create());
 
 		@Test
 		void shouldAddRepresentations() {
@@ -133,6 +134,13 @@ class XdomeaNachrichtBuilderTest {
 			assertThat(vorgangType.getDokument()).isEqualTo(postfachMails);
 		}
 
+		@Test
+		void shouldAddBescheids() {
+			builder.withBescheids(bescheids).addVorgangDokumente();
+
+			assertThat(vorgangType.getDokument()).isEqualTo(bescheids);
+		}
+
 	}
 
 	@Nested
diff --git a/pom.xml b/pom.xml
index aa707651cdc6c5f822f0dcb2ba123c0ce4e2aa2e..4be17f3b766715348c9d8a217b700df8b37e4b59 100644
--- a/pom.xml
+++ b/pom.xml
@@ -50,7 +50,7 @@
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 
-		<vorgang-manager.version>2.7.0</vorgang-manager.version>
+		<vorgang-manager.version>2.8.0-SNAPSHOT</vorgang-manager.version>
 		<nachrichten-manager.version>2.7.0</nachrichten-manager.version>
 		<ozgcloud-common-pdf.version>3.0.1</ozgcloud-common-pdf.version>
 		<user-manager.version>2.2.0</user-manager.version>