diff --git a/bescheid-manager/pom.xml b/bescheid-manager/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fa1466b7ef0d476c42fbef9ce64e2cf96e00ad05
--- /dev/null
+++ b/bescheid-manager/pom.xml
@@ -0,0 +1,40 @@
+<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.itvsh.kop.common</groupId>
+		<artifactId>kop-common-parent</artifactId>
+		<version>1.7.0</version>
+		<relativePath />
+	</parent>
+
+	<groupId>de.ozgcloud.bescheid</groupId>
+	<artifactId>bescheid-manager</artifactId>
+	<name>OZG-Cloud Bescheid Manager</name>
+	<version>1.0.0-SNAPSHOT</version>
+
+	<properties>
+		<pluto.version>1.12.0-SNAPSHOT</pluto.version>
+	</properties>
+
+	<dependencies>
+		<dependency>
+			<groupId>de.itvsh.ozg.pluto</groupId>
+			<artifactId>pluto-interface</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>de.itvsh.ozg.pluto</groupId>
+			<artifactId>pluto-command</artifactId>
+			<version>${pluto.version}</version>
+		</dependency>
+
+		<dependency>
+			<groupId>de.itvsh.ozg.pluto</groupId>
+			<artifactId>pluto-command</artifactId>
+			<version>${pluto.version}</version>
+			<type>test-jar</type>
+			<scope>test</scope>
+		</dependency>
+	</dependencies>
+</project>
\ No newline at end of file
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java
new file mode 100644
index 0000000000000000000000000000000000000000..9b05e714cdf1a1b1bffaeb21aa819040f7df1959
--- /dev/null
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java
@@ -0,0 +1,43 @@
+package de.ozgcloud.bescheid;
+
+import java.time.LocalDate;
+import java.util.Map;
+import java.util.Optional;
+import java.util.function.Predicate;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Component;
+
+import de.itvsh.ozg.pluto.command.Command;
+import de.itvsh.ozg.pluto.command.CommandCreatedEvent;
+
+@Component
+class BescheidEventListener {
+
+	public static final String ORDER = "CREATE_BESCHEID";
+
+	private static final String IS_CREATE_BESCHEID = "{T(de.ozgcloud.bescheid.BescheidEventListener).IS_CREATE_BESCHEID_COMMAND.test(event.getSource())}";
+
+	public static final Predicate<Command> IS_CREATE_BESCHEID_COMMAND = command -> command.getOrder().equals(ORDER);
+
+	static final String BESCHEID_VOM_BODYKEY = "bescheidVom";
+	static final String GENEHMIGT_BODYKEY = "genehmigt";
+
+	@Autowired
+	private BescheidService service;
+
+	@EventListener(condition = IS_CREATE_BESCHEID)
+	public void createBescheid(CommandCreatedEvent event) {
+		service.createBescheid(createRequest(event.getSource().getBodyObject()));
+	}
+
+	private BescheidRequest createRequest(Map<String, Object> eventBody) {
+		var builder = BescheidRequest.builder();
+
+		Optional.ofNullable(eventBody.get(BESCHEID_VOM_BODYKEY)).map(LocalDate.class::cast).ifPresent(builder::bescheidVom);
+		Optional.ofNullable(eventBody.get(GENEHMIGT_BODYKEY)).map(Boolean.class::cast).ifPresent(builder::genehmigt);
+
+		return builder.build();
+	}
+}
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidRequest.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidRequest.java
new file mode 100644
index 0000000000000000000000000000000000000000..d5aa5798e6a60d6c0cd9252ddb00805c32e699c4
--- /dev/null
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidRequest.java
@@ -0,0 +1,14 @@
+package de.ozgcloud.bescheid;
+
+import java.time.LocalDate;
+
+import lombok.Builder;
+import lombok.Getter;
+
+@Builder
+@Getter
+public class BescheidRequest {
+
+	private LocalDate bescheidVom;
+	private boolean genehmigt;
+}
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java
new file mode 100644
index 0000000000000000000000000000000000000000..ae4f6ca50ae5c77d989b05274e064f0330e265d3
--- /dev/null
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java
@@ -0,0 +1,13 @@
+package de.ozgcloud.bescheid;
+
+import org.springframework.stereotype.Service;
+
+@Service
+class BescheidService {
+
+	public void createBescheid(BescheidRequest request) {
+		// TODO Auto-generated method stub
+
+	}
+
+}
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java
new file mode 100644
index 0000000000000000000000000000000000000000..b1ce78f231cea6aa2bba69034f6ce9da00af99da
--- /dev/null
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java
@@ -0,0 +1,46 @@
+package de.ozgcloud.bescheid;
+
+import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.Mockito.*;
+
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.context.ApplicationEventPublisher;
+
+import de.itvsh.kop.common.test.ITCase;
+import de.itvsh.ozg.pluto.command.Command;
+import de.itvsh.ozg.pluto.command.CommandCreatedEventTestFactory;
+import de.itvsh.ozg.pluto.command.CommandTestFactory;
+
+@ITCase
+class BescheidEventListenerITCase {
+
+	@Autowired
+	private ApplicationEventPublisher publisher;
+
+	@MockBean
+	private BescheidService service;
+
+	@Nested
+	class TestCreateBesched {
+
+		private Command command = CommandTestFactory.createBuilder().order(BescheidEventListener.ORDER).build();
+
+		@Test
+		void shouldCallService() {
+			publisher.publishEvent(CommandCreatedEventTestFactory.withCommand(command));
+
+			verify(service).createBescheid(any());
+		}
+
+		@Test
+		void shouldNotReactOnOtherOrder() {
+			publisher.publishEvent(CommandCreatedEventTestFactory.withCommand(CommandTestFactory.createBuilder().order("OTHER").build()));
+
+			verifyNoInteractions(service);
+		}
+	}
+
+}
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..fbe026513714e7e4ff751aa441c050a797432997
--- /dev/null
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerTest.java
@@ -0,0 +1,47 @@
+package de.ozgcloud.bescheid;
+
+import static de.ozgcloud.bescheid.BescheidEventListener.*;
+import static de.ozgcloud.bescheid.BescheidRequestTestFactory.*;
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.Mockito.*;
+
+import java.util.Map;
+
+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.itvsh.ozg.pluto.command.Command;
+import de.itvsh.ozg.pluto.command.CommandCreatedEventTestFactory;
+import de.itvsh.ozg.pluto.command.CommandTestFactory;
+
+class BescheidEventListenerTest {
+
+	@InjectMocks
+	private BescheidEventListener listener;
+
+	@Mock
+	private BescheidService service;
+
+	@Nested
+	class TestCreateBescheid {
+
+		@Captor
+		private ArgumentCaptor<BescheidRequest> requestCaptor;
+		private Command command = CommandTestFactory.createBuilder()
+				.bodyObject(Map.of(BESCHEID_VOM_BODYKEY, BESCHEID_VOM, GENEHMIGT_BODYKEY, GENEHMIGT))
+				.build();
+
+		@Test
+		void shouldCallService() {
+			listener.createBescheid(CommandCreatedEventTestFactory.withCommand(command));
+
+			verify(service).createBescheid(requestCaptor.capture());
+			assertThat(requestCaptor.getValue()).usingRecursiveComparison().isEqualTo(BescheidRequestTestFactory.create());
+		}
+	}
+
+}
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidRequestTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidRequestTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..09b4686cedaf3d7713e555b9185d4af8a3056221
--- /dev/null
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidRequestTestFactory.java
@@ -0,0 +1,21 @@
+package de.ozgcloud.bescheid;
+
+import java.time.LocalDate;
+
+public class BescheidRequestTestFactory {
+
+	static final String BESCHEID_VOM_STRING = "2023-01-04";
+	static final LocalDate BESCHEID_VOM = LocalDate.parse(BESCHEID_VOM_STRING);
+	static final boolean GENEHMIGT = true;
+
+	static BescheidRequest create() {
+		return createBuilder().build();
+	}
+
+	static BescheidRequest.BescheidRequestBuilder createBuilder() {
+		return BescheidRequest.builder()
+				.bescheidVom(BESCHEID_VOM)
+				.genehmigt(GENEHMIGT);
+
+	}
+}
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidTestApplication.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidTestApplication.java
new file mode 100644
index 0000000000000000000000000000000000000000..de2313e4f7a3c241a4f314c8e7b267a7f443c72f
--- /dev/null
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidTestApplication.java
@@ -0,0 +1,10 @@
+package de.ozgcloud.bescheid;
+
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+
+@SpringBootApplication
+@ComponentScan({ "de.ozgcloud.*", "de.itvsh.*" })
+public class BescheidTestApplication {
+
+}
diff --git a/bescheid-manager/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension b/bescheid-manager/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension
new file mode 100644
index 0000000000000000000000000000000000000000..79b126e6cdb86bec1f4f08c205de8961bde1934a
--- /dev/null
+++ b/bescheid-manager/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension
@@ -0,0 +1 @@
+org.mockito.junit.jupiter.MockitoExtension
\ No newline at end of file
diff --git a/bescheid-manager/src/test/resources/junit-platform.properties b/bescheid-manager/src/test/resources/junit-platform.properties
new file mode 100644
index 0000000000000000000000000000000000000000..1cebb76d5a58ac034b2627d12411d82d1e85821e
--- /dev/null
+++ b/bescheid-manager/src/test/resources/junit-platform.properties
@@ -0,0 +1 @@
+junit.jupiter.extensions.autodetection.enabled = true
\ No newline at end of file
diff --git a/pluto-command/src/test/java/de/itvsh/ozg/pluto/command/CommandCreatedEventTestFactory.java b/pluto-command/src/test/java/de/itvsh/ozg/pluto/command/CommandCreatedEventTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..6b3a6241f9adc95a33f7ea54472e3f55dce3f49b
--- /dev/null
+++ b/pluto-command/src/test/java/de/itvsh/ozg/pluto/command/CommandCreatedEventTestFactory.java
@@ -0,0 +1,13 @@
+package de.itvsh.ozg.pluto.command;
+
+public class CommandCreatedEventTestFactory {
+
+	public static CommandCreatedEvent create() {
+		return new CommandCreatedEvent(CommandTestFactory.create());
+	}
+
+	public static CommandCreatedEvent withCommand(Command command) {
+		return new CommandCreatedEvent(command);
+	}
+
+}
diff --git a/pluto-command/src/test/java/de/itvsh/ozg/pluto/command/CommandTestFactory.java b/pluto-command/src/test/java/de/itvsh/ozg/pluto/command/CommandTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..02a27895aeba9eac5974353c8f55973dd0d45772
--- /dev/null
+++ b/pluto-command/src/test/java/de/itvsh/ozg/pluto/command/CommandTestFactory.java
@@ -0,0 +1,18 @@
+package de.itvsh.ozg.pluto.command;
+
+import java.util.Map;
+
+public class CommandTestFactory {
+
+	public static final String ORDER = "DO_TEST";
+
+	public static Command create() {
+		return createBuilder().build();
+	}
+
+	public static TestCommand.TestCommandBuilder createBuilder() {
+		return TestCommand.builder()
+				.body(Map.of())
+				.bodyObject(Map.of());
+	}
+}
diff --git a/pluto-command/src/test/java/de/itvsh/ozg/pluto/command/TestCommand.java b/pluto-command/src/test/java/de/itvsh/ozg/pluto/command/TestCommand.java
new file mode 100644
index 0000000000000000000000000000000000000000..40dbdb44adb39c130e5d454f1ed36dbf4cdcc2f1
--- /dev/null
+++ b/pluto-command/src/test/java/de/itvsh/ozg/pluto/command/TestCommand.java
@@ -0,0 +1,32 @@
+package de.itvsh.ozg.pluto.command;
+
+import java.time.ZonedDateTime;
+import java.util.Map;
+
+import lombok.Builder;
+import lombok.Getter;
+
+@Getter
+@Builder
+public class TestCommand implements Command {
+
+	private String id;
+	private String vorgangId;
+	private String relationId;
+	private long relationVersion;
+
+	private String order;
+
+	private ZonedDateTime createdAt;
+	private ZonedDateTime finishedAt;
+	private String createdBy;
+	private String createdByName;
+
+	private CommandStatus status;
+
+	private Map<String, Object> bodyObject;
+	private Map<String, String> body;
+
+	private String errorMessage;
+
+}
diff --git a/pom.xml b/pom.xml
index 4ad85b176adb8135b289fda5bdf6b4057123e162..e529cbcac1dc607547cc8a67c71a66a8f4a7fecb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,6 +45,7 @@
 		<module>pluto-utils</module>
 		<module>notification-manager</module>
 		<module>pluto-command</module>
+		<module>bescheid-manager</module>
 	</modules>
 
 	<build>