diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/db/dao/CyclicReportGenerationConfigRepository.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/db/dao/CyclicReportGenerationConfigRepository.java
new file mode 100644
index 0000000..98358af
--- /dev/null
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/db/dao/CyclicReportGenerationConfigRepository.java
@@ -0,0 +1,30 @@
+/* *******************************************************************************
+ * Copyright (c) 2020 Basys GmbH
+ * 
+ * See the NOTICE file(s) distributed with this work for additional 
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ * *******************************************************************************/
+package org.eclipse.openk.sp.db.dao;
+
+import java.util.List;
+import java.util.Optional;
+
+import org.eclipse.openk.sp.db.model.ReportGenerationConfig;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+
+public interface CyclicReportGenerationConfigRepository extends JpaRepository<ReportGenerationConfig, Long> {
+
+	Optional<ReportGenerationConfig> findById(Long configId);
+
+	@Query(value = "SELECT rgc FROM ReportGenerationConfig rgc WHERE rgc.triggerWeekDay = :weekDay and rgc.triggerHour = :hour and rgc.triggerMinute >= :minuteGE and rgc.triggerMinute <= :minuteLE")
+	List<ReportGenerationConfig> findConfigs(@Param("weekDay") int weekDay, @Param("hour")int hour, @Param("minuteGE")int minuteGE, @Param("minuteLE")int minuteLE);
+
+}
\ No newline at end of file
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/db/model/ReportGenerationConfig.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/db/model/ReportGenerationConfig.java
new file mode 100644
index 0000000..e09f0a7
--- /dev/null
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/db/model/ReportGenerationConfig.java
@@ -0,0 +1,263 @@
+/* *******************************************************************************
+ * Copyright (c) 2020 Basys GmbH
+ * 
+ * See the NOTICE file(s) distributed with this work for additional 
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ * *******************************************************************************/
+package org.eclipse.openk.sp.db.model;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
+
+import org.eclipse.openk.sp.abstracts.AbstractEntity;
+
+/**
+ * The persistent class for the "REPORTGENERATIONCONFIG" database table.
+ */
+@Entity
+@Table(name = "REPORTGENERATIONCONFIG")
+public class ReportGenerationConfig extends AbstractEntity {
+
+	/**
+	 * default serial id.
+	 */
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "REPORTGENERATIONCONFIG_ID_SEQ")
+	@SequenceGenerator(name = "REPORTGENERATIONCONFIG_ID_SEQ", sequenceName = "REPORTGENERATIONCONFIG_ID_SEQ", allocationSize = 1)
+	@Column(name = "id", updatable = false)
+	private Long id;
+
+	@Column(name = "name", length = 256, nullable = false)
+	private String name;
+
+	@Column(name = "file_name_pattern", length = 128, nullable = false)
+	private String fileNamePattern;
+	
+	@Column(name = "subject", length = 128, nullable = false)
+	private String subject;
+	
+	@Column(name = "v_to", nullable = true)
+	private String to;
+
+	@Column(name = "print_format", length = 128, nullable = false)
+	private String printFormat;
+	
+	@Column(name = "report_name", length = 256, nullable = false)
+	private String reportName;
+	
+	@Column(name = "stand_by_list_id", nullable = false)
+	private Long standByListId;
+	
+	@Column(name = "status_id", nullable = false)
+	private Long statusId;
+	
+	@Column(name = "trigger_week_day", nullable = false)
+	private Integer triggerWeekDay;
+
+	@Column(name = "trigger_hour", nullable = false)
+	private Integer triggerHour;
+	
+	@Column(name = "trigger_minute", nullable = false)
+	private Integer triggerMinute;
+	
+	@Column(name = "valid_from_day_offset", nullable = false)
+	private Integer validFromDayOffset;
+	
+	@Column(name = "valid_from_hour", nullable = false)
+	private Integer validFromHour;
+	
+	@Column(name = "valid_from_minute", nullable = false)
+	private Integer validFromMinute;
+
+	@Column(name = "valid_to_day_offset", nullable = false)
+	private Integer validToDayOffset;
+	
+	@Column(name = "valid_to_hour", nullable = false)
+	private Integer validToHour;
+	
+	@Column(name = "valid_to_minute", nullable = false)
+	private Integer validToMinute;
+	
+	@Lob
+	@Column(name = "email_text", nullable = false)
+	private String emailText;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getFileNamePattern() {
+		return fileNamePattern;
+	}
+
+	public void setFileNamePattern(String fileNamePattern) {
+		this.fileNamePattern = fileNamePattern;
+	}
+
+	public String getSubject() {
+		return subject;
+	}
+
+	public void setSubject(String subject) {
+		this.subject = subject;
+	}
+
+	public List<String> getTo() {
+		if (to == null) {
+			return new ArrayList<>();
+		}
+		return Arrays.asList(to.split(","));
+	}
+
+	public void setTo(List<String> toList) {
+		this.to = String.join(",", toList);
+	}
+
+	public String getPrintFormat() {
+		return printFormat;
+	}
+
+	public void setPrintFormat(String printFormat) {
+		this.printFormat = printFormat;
+	}
+
+	public String getReportName() {
+		return reportName;
+	}
+
+	public void setReportName(String reportName) {
+		this.reportName = reportName;
+	}
+
+	public Long getStandByListId() {
+		return standByListId;
+	}
+
+	public void setStandByListId(Long standByListId) {
+		this.standByListId = standByListId;
+	}
+
+	public Long getStatusId() {
+		return statusId;
+	}
+
+	public void setStatusId(Long statusId) {
+		this.statusId = statusId;
+	}
+
+	public Integer getTriggerWeekDay() {
+		return triggerWeekDay;
+	}
+
+	public void setTriggerWeekDay(Integer triggerWeekDay) {
+		this.triggerWeekDay = triggerWeekDay;
+	}
+
+	public Integer getTriggerHour() {
+		return triggerHour;
+	}
+
+	public void setTriggerHour(Integer triggerHour) {
+		this.triggerHour = triggerHour;
+	}
+
+	public Integer getTriggerMinute() {
+		return triggerMinute;
+	}
+
+	public void setTriggerMinute(Integer triggerMinute) {
+		this.triggerMinute = triggerMinute;
+	}
+
+	public Integer getValidFromDayOffset() {
+		return validFromDayOffset;
+	}
+
+	public void setValidFromDayOffset(Integer validFromDayOffset) {
+		this.validFromDayOffset = validFromDayOffset;
+	}
+
+	public Integer getValidFromHour() {
+		return validFromHour;
+	}
+
+	public void setValidFromHour(Integer validFromHour) {
+		this.validFromHour = validFromHour;
+	}
+
+	public Integer getValidFromMinute() {
+		return validFromMinute;
+	}
+
+	public void setValidFromMinute(Integer validFromMinute) {
+		this.validFromMinute = validFromMinute;
+	}
+
+	public Integer getValidToDayOffset() {
+		return validToDayOffset;
+	}
+
+	public void setValidToDayOffset(Integer validToDayOffset) {
+		this.validToDayOffset = validToDayOffset;
+	}
+
+	public Integer getValidToHour() {
+		return validToHour;
+	}
+
+	public void setValidToHour(Integer validToHour) {
+		this.validToHour = validToHour;
+	}
+
+	public Integer getValidToMinute() {
+		return validToMinute;
+	}
+
+	public void setValidToMinute(Integer validToMinute) {
+		this.validToMinute = validToMinute;
+	}
+	
+	public String getEmailText() {
+		return emailText;
+	}
+	
+	public void setEmailText(String emailText) {
+		this.emailText = emailText;
+	}
+
+	@Override
+	public int compareTo(AbstractEntity arg0) {
+		return (getId().equals(arg0.getId())) ? 1 : 0;
+	}
+
+}
diff --git a/oKBereitschaftsplanungBackend/src/main/resources/META-INF/sql/oracle/delete/BER_delete_from.sql b/oKBereitschaftsplanungBackend/src/main/resources/META-INF/sql/oracle/delete/BER_delete_from.sql
index 159696c..50a22ab 100644
--- a/oKBereitschaftsplanungBackend/src/main/resources/META-INF/sql/oracle/delete/BER_delete_from.sql
+++ b/oKBereitschaftsplanungBackend/src/main/resources/META-INF/sql/oracle/delete/BER_delete_from.sql
@@ -27,6 +27,8 @@
 DELETE FROM {0}.branch
 DELETE FROM {0}.standby_status 
 DELETE FROM {0}.calendar 
+DELETE FROM {0}.reportgenerationconfig;
+
 
 -- RESET SEQUENCES 
 DROP SEQUENCE {0}.USER_HAS_USER_FUNCTION_ID_SEQ
@@ -73,3 +75,5 @@
 CREATE SEQUENCE {0}.ARCHIVE_HEADER_ID_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE
 DROP SEQUENCE {0}.CALENDAR_ID_SEQ
 CREATE SEQUENCE {0}.CALENDAR_ID_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE
+DROP SEQUENCE {0}.REPORTGENERATIONCONFIG_ID_SEQ
+CREATE SEQUENCE {0}.REPORTGENERATIONCONFIG_ID_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE
\ No newline at end of file
diff --git a/oKBereitschaftsplanungBackend/src/main/resources/META-INF/sql/postgres/delete/BER_delete_from.sql b/oKBereitschaftsplanungBackend/src/main/resources/META-INF/sql/postgres/delete/BER_delete_from.sql
index e01551f..5fa4e0c 100644
--- a/oKBereitschaftsplanungBackend/src/main/resources/META-INF/sql/postgres/delete/BER_delete_from.sql
+++ b/oKBereitschaftsplanungBackend/src/main/resources/META-INF/sql/postgres/delete/BER_delete_from.sql
@@ -27,6 +27,7 @@
 DELETE FROM {0}.branch;
 DELETE FROM {0}.standby_status;
 DELETE FROM {0}.calendar;
+DELETE FROM {0}.reportgenerationconfig;
 
 
 -- RESET SEQUENCES 
@@ -52,4 +53,5 @@
 ALTER Sequence IF EXISTS {0}.archive_body_id_seq restart;
 ALTER Sequence IF EXISTS {0}.archive_header_id_seq restart;
 ALTER Sequence IF EXISTS {0}.calendar_id_seq restart;
+ALTER Sequence IF EXISTS {0}.reportgenerationconfig_id_seq restart;
 
