diff --git a/goofy-client/apps/goofy-e2e/cypress-ci-einheitlicher-ansprechpartner.config.ts b/goofy-client/apps/goofy-e2e/cypress-ci-einheitlicher-ansprechpartner.config.ts
new file mode 100644
index 0000000000000000000000000000000000000000..79cb702d7e3513dc5841286bc705d3c9b105b756
--- /dev/null
+++ b/goofy-client/apps/goofy-e2e/cypress-ci-einheitlicher-ansprechpartner.config.ts
@@ -0,0 +1,310 @@
+import { nxE2EPreset } from '@nrwl/cypress/plugins/cypress-preset';
+import { defineConfig } from 'cypress';
+
+const MongoClient = require('mongodb').MongoClient;
+const Binary = require('mongodb').Binary;
+const ObjectId = require('mongodb').ObjectId;
+const Long = require('mongodb').Long;
+
+const cypressJsonConfig = require('./cypress-ci-einheitlicher-ansprechpartner.json');
+
+export default defineConfig({
+	e2e: {
+		...nxE2EPreset(__dirname),
+		...cypressJsonConfig,
+		setupNodeEvents(on, config) {
+			on('task', {
+				initCommandData({collection, data}) {
+					console.log('initCommandData');
+					insertIntoDatabase(config, collection, parseCommandData(data));
+					return 0;
+				},
+				initGridFsFileData({collection, data}) {
+					console.log('initGridFsFileData');
+					insertIntoDatabase(config, collection, parseGridFsFileData(data));
+					return 0;
+				},
+				initGridFsChunkData({collection, data}) {
+					console.log('initGridFsChunkData');
+					insertIntoDatabase(config, collection, parseGridFsChunkData(data));
+					return 0;
+				},
+				initVorgangData({collection, data}) {
+					console.log('initVorgangData');
+					insertIntoDatabase(config, collection, parseVorgangData(data));
+					return 0;
+				},
+				initVorgangAttachedItemData({collection, data}) {
+					console.log('initVorgangAttachedItemData');
+					insertIntoDatabase(config, collection, parseVorgangAttachedItemData(data));
+					return 0;
+				},
+				initUsermanagerData({collection, data}) {
+					console.log('initUsermanagerData');
+					insertIntoUserManagerDatabase(config, collection, parseUserData(data));
+					return 0;
+				},
+				dropCollections(collections) {
+					console.log('dropCollections: ', collections);
+					dropCollectionsFromDatabase(config, collections);
+					return 0;
+				},
+				dropUserManagerCollections(collections) {
+					console.log('dropUserManagerCollections: ', collections);
+					dropUserManagerCollectionsFromDatabase(config, collections);
+					return 0;
+				}
+			});
+
+			// Workaround für Angular 13 und Cypress mit Webpack 4,
+			// Siehe https://github.com/cypress-io/cypress/issues/19066#issuecomment-1012055705
+			// Entfernen, sobald Cypress Webpack 5 nutzt - https://github.com/cypress-io/cypress/issues/19555
+			// Ursache: Angular linker needed to link partial-ivy code,
+			//   see https://angular.io/guide/creating-libraries#consuming-partial-ivy-code-outside-the-angular-cli
+			// Fehlerbild:
+			//   - Anwendung läuft im Browser, aber nicht in Cypress.
+			//   - Fehlermeldung in Cypress: The injectable 'SystemDateTimeProvider' needs to be compiled using the JIT compiler, but '@angular/compiler' is not available.
+			// Lösung:
+			//   - NPM-Paket identifizieren, dass "SystemDateTimeProvider" enthält.
+			//   - NPM-Paket im "test" Attribut unten hinzufügen.
+			const webpackPreprocessor = require('@cypress/webpack-batteries-included-preprocessor');
+			const webpackOptions = webpackPreprocessor.defaultOptions.webpackOptions;
+
+			webpackOptions.module.rules.unshift({
+				test: /[/\\](@angular|@ngxp|angular-oauth2-oidc)[/\\].+\.m?js$/,
+				resolve: {
+					fullySpecified: false,
+				},
+				use: {
+					loader: 'babel-loader',
+					options: {
+						plugins: ['@angular/compiler-cli/linker/babel'],
+						compact: false,
+						cacheDirectory: true
+					}
+				}
+			});
+
+			on('file:preprocessor', webpackPreprocessor({
+				webpackOptions: webpackOptions,
+				typescript: require.resolve('typescript')
+			}));
+
+			return config;
+			// Ende - Workaround für Angular 13 und Cypress mit Webpack 4
+		}
+	},
+});
+
+function parseCommandData(commands) {
+	commands.forEach(command => parseCommand(command))
+	return commands;
+}
+
+function parseCommand(command) {
+	command.createdAt = createDate(command.createdAt);
+	if(command.finishedAt){
+		command.finishedAt = createDate(command.finishedAt);
+	}
+	command.relationVersion = createNumberLong(command.relationVersion);
+}
+
+function parseGridFsFileData(gridFsFiles) {
+	gridFsFiles.forEach(gridFsFile => parseGridFsFile(gridFsFile))
+	return gridFsFiles;
+}
+
+function parseGridFsFile(gridFsFile) {
+	gridFsFile._id = createObjectId(gridFsFile);
+	gridFsFile.length = createNumberLong(gridFsFile.length);
+	gridFsFile.uploadDate = createDate(gridFsFile.uploadDate);
+}
+
+function parseGridFsChunkData(gridFsChunks) {
+	gridFsChunks.forEach(gridFsChunk => parseGridFsChunk(gridFsChunk));
+	return gridFsChunks;
+}
+
+function parseGridFsChunk(gridFsChunk) {
+	gridFsChunk._id = createObjectId(gridFsChunk);
+	//TODO createObjectId nutzen, sobald diese umgestellt ist
+	gridFsChunk.files_id = new ObjectId(gridFsChunk.files_id.$oid);
+	gridFsChunk.data = createBinData(gridFsChunk.data);
+}
+
+function parseVorgangData(data) {
+	data.forEach(vorgang => parseVorgang(vorgang));
+	return data;
+}
+
+function parseVorgang(vorgang) {
+	vorgang._id = createObjectId(vorgang);
+	vorgang.createdAt = createDate(vorgang.createdAt);
+
+	vorgang.eingangs.forEach(eingang => parseEingang(eingang));
+
+	if (vorgang.wiedervorlages) {
+		vorgang.wiedervorlages.forEach(wiedervorlage => parseWiedervorlage(wiedervorlage));
+	}
+	if(vorgang.kommentars){
+		vorgang.kommentars.forEach(kommentar => parseKommentar(kommentar));
+	}
+}
+
+function parseEingang(eingang) {
+	eingang.header.createdAt = createDate(eingang.header.createdAt);
+
+	if (eingang.attachments) {
+		eingang.attachments.forEach(attachment => parseAttachment(attachment));
+	}
+	if (eingang.representations) {
+		eingang.representations.forEach(representation => parseRepresentations(representation));
+	}
+}
+
+function parseAttachment(attachment) {
+	attachment.files[ 0 ].content = createBinData('');
+}
+
+function createBinData(encoded64Value){
+	return Binary(Buffer.from(encoded64Value, 'base64'), 0);
+}
+
+function parseRepresentations(representation) {
+	representation.content = createBinary(representation);
+}
+
+//TODO Code entfernen und stattdessen createBinData(value) nutzen
+function createBinary(field) {
+	return Binary(field.content.$binary.base64, 'base64');
+}
+
+function parseWiedervorlage(wiedervorlage) {
+	wiedervorlage.frist = createDate(wiedervorlage.frist);
+	wiedervorlage.createdAt = createDate(wiedervorlage.createdAt);
+}
+
+function parseKommentar(kommentar) {
+	kommentar.createdAt = createDate(kommentar.createdAt);
+}
+
+function createDate(field) {
+	return new Date(field.$date);
+}
+
+function parseVorgangAttachedItemData(vorgangAttachedItems){
+	vorgangAttachedItems.forEach(vorgangAttachedItem => parseVorgangAttachedItem(vorgangAttachedItem));
+	return vorgangAttachedItems;
+}
+
+function parseVorgangAttachedItem(parseVorgangAttachedItem) {
+	parseVorgangAttachedItem._id = createObjectId(parseVorgangAttachedItem);
+	parseVorgangAttachedItem.version = createNumberLong(parseVorgangAttachedItem.version);
+}
+
+function parseUserData(data) {
+	data.forEach(user => parseUser(user));
+	return data;
+}
+
+function parseUser(user) {
+	user._id = createObjectId(user);
+	user.createdAt = createDate(user.createdAt);
+}
+
+//TOOD Beschraenkung auf _id aufheben
+function createObjectId(field) {
+	return new ObjectId(field._id.$oid);
+}
+
+function createNumberLong(numberValue){
+	return Long.fromNumber(numberValue);
+}
+
+function insertIntoDatabase(config, collection, data) {
+	insert(getDatabaseUrl(config), getDatabase(config), collection, data);
+}
+
+function insertIntoUserManagerDatabase(config, collection, data){
+	insert(getUserManagerDatabaseUrl(config), getUserManagerDatabase(config), collection, data);
+}
+
+function insert(databaseUrl, databaseName, collection, data){
+	MongoClient.connect(databaseUrl, (error, connection) => {
+		console.log(`connect to ${databaseName} database with ${databaseUrl}`);
+		if (!error) {
+			console.log('success');
+			var db = connection.db(databaseName);
+
+			db.collection(collection).drop(() => {
+				db.createCollection(collection, (error) => handleCreateCollection(db, connection, collection, data, error));
+			});
+		} else {
+			console.log('fail', error);
+		}
+	});
+}
+
+function handleCreateCollection(db, connection, collection, data, error) {
+	if (error) {
+		console.log(`Fehler beim Erstellen der Collection "${collection}": `, error);
+	} else {
+		console.log(`Collection ${collection} erfolgreich erstellt`);
+		insertManyToDatabase(db, connection, collection, data);
+	}
+}
+
+function insertManyToDatabase(db, connection, collection, data) {
+	db.collection(collection).insertMany(data, (error) => handleInsertMany(connection, error));
+}
+
+function handleInsertMany(connection, error) {
+	if (error) {
+		console.log('Fehler beim Einlesen der Daten: ', error);
+	} else {
+		console.log('Die Daten wurden erfolgreich eingelesen.');
+	}
+	connection.close();
+}
+
+function dropCollectionsFromDatabase(config, collections) {
+	dropCollections(getDatabaseUrl(config), getDatabase(config), collections);
+}
+
+function getDatabaseUrl(config){
+	return config.env.dbUrl;
+}
+
+function getDatabase(config){
+	return config.env.database
+}
+
+function dropUserManagerCollectionsFromDatabase(config, collections){
+	dropCollections(getUserManagerDatabaseUrl(config), getUserManagerDatabase(config), collections);
+}
+
+function getUserManagerDatabaseUrl(config){
+	return config.env.userManager.dbUrl;
+}
+
+function getUserManagerDatabase(config){
+	return config.env.userManager.database;
+}
+
+function dropCollections(databaseUrl, databaseName, collections){
+	MongoClient.connect(databaseUrl, (error, connection) => {
+		if (!error) {
+			const db = connection.db(databaseName);
+			collections.forEach((oneCollection, index) => {
+				console.log('drop collection', oneCollection);
+				db.collection(oneCollection).drop(() => {
+					//CHECKME Ist die Abfrage notwendig?
+					if(index == collections.length){
+						console.log('close connection');
+						connection.close();
+					}
+				});
+			});
+		}
+	});
+}
\ No newline at end of file
diff --git a/goofy-client/apps/goofy-e2e/cypress-ci-main.config.ts b/goofy-client/apps/goofy-e2e/cypress-ci-main.config.ts
new file mode 100644
index 0000000000000000000000000000000000000000..353cf7d7f7a7153bacc81d218f66ff2bed89acbd
--- /dev/null
+++ b/goofy-client/apps/goofy-e2e/cypress-ci-main.config.ts
@@ -0,0 +1,310 @@
+import { nxE2EPreset } from '@nrwl/cypress/plugins/cypress-preset';
+import { defineConfig } from 'cypress';
+
+const MongoClient = require('mongodb').MongoClient;
+const Binary = require('mongodb').Binary;
+const ObjectId = require('mongodb').ObjectId;
+const Long = require('mongodb').Long;
+
+const cypressJsonConfig = require('./cypress-ci-main-tests.json');
+
+export default defineConfig({
+	e2e: {
+		...nxE2EPreset(__dirname),
+		...cypressJsonConfig,
+		setupNodeEvents(on, config) {
+			on('task', {
+				initCommandData({collection, data}) {
+					console.log('initCommandData');
+					insertIntoDatabase(config, collection, parseCommandData(data));
+					return 0;
+				},
+				initGridFsFileData({collection, data}) {
+					console.log('initGridFsFileData');
+					insertIntoDatabase(config, collection, parseGridFsFileData(data));
+					return 0;
+				},
+				initGridFsChunkData({collection, data}) {
+					console.log('initGridFsChunkData');
+					insertIntoDatabase(config, collection, parseGridFsChunkData(data));
+					return 0;
+				},
+				initVorgangData({collection, data}) {
+					console.log('initVorgangData');
+					insertIntoDatabase(config, collection, parseVorgangData(data));
+					return 0;
+				},
+				initVorgangAttachedItemData({collection, data}) {
+					console.log('initVorgangAttachedItemData');
+					insertIntoDatabase(config, collection, parseVorgangAttachedItemData(data));
+					return 0;
+				},
+				initUsermanagerData({collection, data}) {
+					console.log('initUsermanagerData');
+					insertIntoUserManagerDatabase(config, collection, parseUserData(data));
+					return 0;
+				},
+				dropCollections(collections) {
+					console.log('dropCollections: ', collections);
+					dropCollectionsFromDatabase(config, collections);
+					return 0;
+				},
+				dropUserManagerCollections(collections) {
+					console.log('dropUserManagerCollections: ', collections);
+					dropUserManagerCollectionsFromDatabase(config, collections);
+					return 0;
+				}
+			});
+
+			// Workaround für Angular 13 und Cypress mit Webpack 4,
+			// Siehe https://github.com/cypress-io/cypress/issues/19066#issuecomment-1012055705
+			// Entfernen, sobald Cypress Webpack 5 nutzt - https://github.com/cypress-io/cypress/issues/19555
+			// Ursache: Angular linker needed to link partial-ivy code,
+			//   see https://angular.io/guide/creating-libraries#consuming-partial-ivy-code-outside-the-angular-cli
+			// Fehlerbild:
+			//   - Anwendung läuft im Browser, aber nicht in Cypress.
+			//   - Fehlermeldung in Cypress: The injectable 'SystemDateTimeProvider' needs to be compiled using the JIT compiler, but '@angular/compiler' is not available.
+			// Lösung:
+			//   - NPM-Paket identifizieren, dass "SystemDateTimeProvider" enthält.
+			//   - NPM-Paket im "test" Attribut unten hinzufügen.
+			const webpackPreprocessor = require('@cypress/webpack-batteries-included-preprocessor');
+			const webpackOptions = webpackPreprocessor.defaultOptions.webpackOptions;
+
+			webpackOptions.module.rules.unshift({
+				test: /[/\\](@angular|@ngxp|angular-oauth2-oidc)[/\\].+\.m?js$/,
+				resolve: {
+					fullySpecified: false,
+				},
+				use: {
+					loader: 'babel-loader',
+					options: {
+						plugins: ['@angular/compiler-cli/linker/babel'],
+						compact: false,
+						cacheDirectory: true
+					}
+				}
+			});
+
+			on('file:preprocessor', webpackPreprocessor({
+				webpackOptions: webpackOptions,
+				typescript: require.resolve('typescript')
+			}));
+
+			return config;
+			// Ende - Workaround für Angular 13 und Cypress mit Webpack 4
+		}
+	},
+});
+
+function parseCommandData(commands) {
+	commands.forEach(command => parseCommand(command))
+	return commands;
+}
+
+function parseCommand(command) {
+	command.createdAt = createDate(command.createdAt);
+	if(command.finishedAt){
+		command.finishedAt = createDate(command.finishedAt);
+	}
+	command.relationVersion = createNumberLong(command.relationVersion);
+}
+
+function parseGridFsFileData(gridFsFiles) {
+	gridFsFiles.forEach(gridFsFile => parseGridFsFile(gridFsFile))
+	return gridFsFiles;
+}
+
+function parseGridFsFile(gridFsFile) {
+	gridFsFile._id = createObjectId(gridFsFile);
+	gridFsFile.length = createNumberLong(gridFsFile.length);
+	gridFsFile.uploadDate = createDate(gridFsFile.uploadDate);
+}
+
+function parseGridFsChunkData(gridFsChunks) {
+	gridFsChunks.forEach(gridFsChunk => parseGridFsChunk(gridFsChunk));
+	return gridFsChunks;
+}
+
+function parseGridFsChunk(gridFsChunk) {
+	gridFsChunk._id = createObjectId(gridFsChunk);
+	//TODO createObjectId nutzen, sobald diese umgestellt ist
+	gridFsChunk.files_id = new ObjectId(gridFsChunk.files_id.$oid);
+	gridFsChunk.data = createBinData(gridFsChunk.data);
+}
+
+function parseVorgangData(data) {
+	data.forEach(vorgang => parseVorgang(vorgang));
+	return data;
+}
+
+function parseVorgang(vorgang) {
+	vorgang._id = createObjectId(vorgang);
+	vorgang.createdAt = createDate(vorgang.createdAt);
+
+	vorgang.eingangs.forEach(eingang => parseEingang(eingang));
+
+	if (vorgang.wiedervorlages) {
+		vorgang.wiedervorlages.forEach(wiedervorlage => parseWiedervorlage(wiedervorlage));
+	}
+	if(vorgang.kommentars){
+		vorgang.kommentars.forEach(kommentar => parseKommentar(kommentar));
+	}
+}
+
+function parseEingang(eingang) {
+	eingang.header.createdAt = createDate(eingang.header.createdAt);
+
+	if (eingang.attachments) {
+		eingang.attachments.forEach(attachment => parseAttachment(attachment));
+	}
+	if (eingang.representations) {
+		eingang.representations.forEach(representation => parseRepresentations(representation));
+	}
+}
+
+function parseAttachment(attachment) {
+	attachment.files[ 0 ].content = createBinData('');
+}
+
+function createBinData(encoded64Value){
+	return Binary(Buffer.from(encoded64Value, 'base64'), 0);
+}
+
+function parseRepresentations(representation) {
+	representation.content = createBinary(representation);
+}
+
+//TODO Code entfernen und stattdessen createBinData(value) nutzen
+function createBinary(field) {
+	return Binary(field.content.$binary.base64, 'base64');
+}
+
+function parseWiedervorlage(wiedervorlage) {
+	wiedervorlage.frist = createDate(wiedervorlage.frist);
+	wiedervorlage.createdAt = createDate(wiedervorlage.createdAt);
+}
+
+function parseKommentar(kommentar) {
+	kommentar.createdAt = createDate(kommentar.createdAt);
+}
+
+function createDate(field) {
+	return new Date(field.$date);
+}
+
+function parseVorgangAttachedItemData(vorgangAttachedItems){
+	vorgangAttachedItems.forEach(vorgangAttachedItem => parseVorgangAttachedItem(vorgangAttachedItem));
+	return vorgangAttachedItems;
+}
+
+function parseVorgangAttachedItem(parseVorgangAttachedItem) {
+	parseVorgangAttachedItem._id = createObjectId(parseVorgangAttachedItem);
+	parseVorgangAttachedItem.version = createNumberLong(parseVorgangAttachedItem.version);
+}
+
+function parseUserData(data) {
+	data.forEach(user => parseUser(user));
+	return data;
+}
+
+function parseUser(user) {
+	user._id = createObjectId(user);
+	user.createdAt = createDate(user.createdAt);
+}
+
+//TOOD Beschraenkung auf _id aufheben
+function createObjectId(field) {
+	return new ObjectId(field._id.$oid);
+}
+
+function createNumberLong(numberValue){
+	return Long.fromNumber(numberValue);
+}
+
+function insertIntoDatabase(config, collection, data) {
+	insert(getDatabaseUrl(config), getDatabase(config), collection, data);
+}
+
+function insertIntoUserManagerDatabase(config, collection, data){
+	insert(getUserManagerDatabaseUrl(config), getUserManagerDatabase(config), collection, data);
+}
+
+function insert(databaseUrl, databaseName, collection, data){
+	MongoClient.connect(databaseUrl, (error, connection) => {
+		console.log(`connect to ${databaseName} database with ${databaseUrl}`);
+		if (!error) {
+			console.log('success');
+			var db = connection.db(databaseName);
+
+			db.collection(collection).drop(() => {
+				db.createCollection(collection, (error) => handleCreateCollection(db, connection, collection, data, error));
+			});
+		} else {
+			console.log('fail', error);
+		}
+	});
+}
+
+function handleCreateCollection(db, connection, collection, data, error) {
+	if (error) {
+		console.log(`Fehler beim Erstellen der Collection "${collection}": `, error);
+	} else {
+		console.log(`Collection ${collection} erfolgreich erstellt`);
+		insertManyToDatabase(db, connection, collection, data);
+	}
+}
+
+function insertManyToDatabase(db, connection, collection, data) {
+	db.collection(collection).insertMany(data, (error) => handleInsertMany(connection, error));
+}
+
+function handleInsertMany(connection, error) {
+	if (error) {
+		console.log('Fehler beim Einlesen der Daten: ', error);
+	} else {
+		console.log('Die Daten wurden erfolgreich eingelesen.');
+	}
+	connection.close();
+}
+
+function dropCollectionsFromDatabase(config, collections) {
+	dropCollections(getDatabaseUrl(config), getDatabase(config), collections);
+}
+
+function getDatabaseUrl(config){
+	return config.env.dbUrl;
+}
+
+function getDatabase(config){
+	return config.env.database
+}
+
+function dropUserManagerCollectionsFromDatabase(config, collections){
+	dropCollections(getUserManagerDatabaseUrl(config), getUserManagerDatabase(config), collections);
+}
+
+function getUserManagerDatabaseUrl(config){
+	return config.env.userManager.dbUrl;
+}
+
+function getUserManagerDatabase(config){
+	return config.env.userManager.database;
+}
+
+function dropCollections(databaseUrl, databaseName, collections){
+	MongoClient.connect(databaseUrl, (error, connection) => {
+		if (!error) {
+			const db = connection.db(databaseName);
+			collections.forEach((oneCollection, index) => {
+				console.log('drop collection', oneCollection);
+				db.collection(oneCollection).drop(() => {
+					//CHECKME Ist die Abfrage notwendig?
+					if(index == collections.length){
+						console.log('close connection');
+						connection.close();
+					}
+				});
+			});
+		}
+	});
+}
\ No newline at end of file