diff --git a/alfa-client/Jenkinsfile.e2e b/alfa-client/Jenkinsfile.e2e
index 84f66d922dc356516bac3e52bdab656e2776e452..da6f80f30f5cb7e07babc7fd53e3195f86d3afc4 100644
--- a/alfa-client/Jenkinsfile.e2e
+++ b/alfa-client/Jenkinsfile.e2e
@@ -456,12 +456,6 @@ String getHelmRepoUrl() {
   return "https://nexus.ozg-sh.de/repository/ozg-base-apps-snapshot"
 }
 
-String getRootPomVersion() {
-  def rootPom = readMavenPom file: 'pom.xml'
-
-  return rootPom.version
-}
-
 Void initEnvAdminDefaultVersions() {
   def values = getApplicationValues('administration')
   env.ADMINISTRATION_IMAGE_TAG = getImageTag(values)
diff --git a/alfa-client/apps/alfa-e2e/src/components/attachment/attachment.e2e.component.ts b/alfa-client/apps/alfa-e2e/src/components/attachment/attachment.e2e.component.ts
index 7e7207e39038dfd923b4b1560bdda6864496a0f2..dbcb98b4dc2a1a77eb110910dd711bf5b9e40dff 100644
--- a/alfa-client/apps/alfa-e2e/src/components/attachment/attachment.e2e.component.ts
+++ b/alfa-client/apps/alfa-e2e/src/components/attachment/attachment.e2e.component.ts
@@ -24,46 +24,45 @@
 import { convertToDataTestId } from '../../support/tech.util';
 
 export class AttachmentContainerE2EComponent {
-  private readonly locatorFileUploadInput: string = '-file-upload-input';
+  private readonly multiUploadInput: string = 'multi-file-upload-button';
+
   private readonly attachmentList: AttachmentListE2EComponent = new AttachmentListE2EComponent();
 
   public getList(): AttachmentListE2EComponent {
     return this.attachmentList;
   }
 
-  public getUploadInput() {
-    return cy.getTestElementContaining(this.locatorFileUploadInput);
+  //TODO Rename getMultiUploadButton
+  public getUploadInput(): Cypress.Chainable<HTMLElement> {
+    return cy.getTestElement(this.multiUploadInput);
   }
 }
 
 export class AttachmentListE2EComponent {
   private readonly locatorRoot: string = 'file-list';
-  private readonly downloadAttachmentsButton: string = 'download-archive-file-button';
 
-  public getRoot() {
-    return cy.getTestElement(this.locatorRoot);
-  }
+  private readonly downloadArchiveButton: string = 'download-archive-file-button';
 
-  public getItem(fileName: string): AttachmentE2EItem {
-    return new AttachmentE2EItem(fileName);
+  public getRoot(): Cypress.Chainable<HTMLElement> {
+    return cy.getTestElement(this.locatorRoot);
   }
 
-  public getLoadingOrErrorItem(fileName: string): LoadingErrorAttachmentE2EItem {
-    return new LoadingErrorAttachmentE2EItem(fileName);
+  public getItem(fileName: string): AttachmentListItemE2EComponent {
+    return new AttachmentListItemE2EComponent(fileName);
   }
 
-  public getDownloadAttachmentsButton(): Cypress.Chainable<JQuery<HTMLElement>> {
-    return this.getRoot().findTestElementWithClass(this.downloadAttachmentsButton);
+  public getLoadingOrErrorItem(fileName: string): LoadingErrorAttachmentListeItemE2EComponent {
+    return new LoadingErrorAttachmentListeItemE2EComponent(fileName);
   }
 
-  public downloadAttachments(): Cypress.Chainable<any> {
-    return this.getDownloadAttachmentsButton().click();
+  public getDownloadArchiveButton(): Cypress.Chainable<HTMLElement> {
+    return this.getRoot().getTestElement(this.downloadArchiveButton);
   }
 }
 
-class AttachmentE2EItem {
-  private readonly locatorDeleteButton: string = 'delete-file-button';
-  private readonly locatorDownloadButton: string = 'download-file-button';
+export class AttachmentListItemE2EComponent {
+  private readonly deleteButton: string = 'delete-file-button';
+  private readonly downloadButton: string = 'download-file-button';
 
   private locatorRoot: string;
 
@@ -71,20 +70,20 @@ class AttachmentE2EItem {
     this.locatorRoot = convertToDataTestId(this.fileName) + '-file-item';
   }
 
-  public getRoot() {
+  public getRoot(): Cypress.Chainable<HTMLElement> {
     return cy.getTestElement(this.locatorRoot);
   }
 
-  public getDeleteButton() {
-    return this.getRoot().findTestElementWithClass(this.locatorDeleteButton);
+  public getDeleteButton(): Cypress.Chainable<HTMLElement> {
+    return this.getRoot().findTestElementWithClass(this.deleteButton);
   }
 
-  public getDownloadButton() {
-    return this.getRoot().findTestElementWithClass(this.locatorDownloadButton);
+  public getDownloadButton(): Cypress.Chainable<HTMLElement> {
+    return this.getRoot().findTestElementWithClass(this.downloadButton);
   }
 }
 
-class LoadingErrorAttachmentE2EItem {
+export class LoadingErrorAttachmentListeItemE2EComponent {
   private readonly root: string;
   private readonly attachmentSuffix: string = '-file-upload-list-item-attachment-upload';
 
@@ -92,7 +91,7 @@ class LoadingErrorAttachmentE2EItem {
     this.root = convertToDataTestId(this.fileName) + this.attachmentSuffix;
   }
 
-  public getRoot() {
+  public getRoot(): Cypress.Chainable<HTMLElement> {
     return cy.getTestElement(this.root);
   }
 }
diff --git a/alfa-client/apps/alfa-e2e/src/components/kommentar/kommentar-list.e2e.component.ts b/alfa-client/apps/alfa-e2e/src/components/kommentar/kommentar-list.e2e.component.ts
index 42e791b9899b0348637184324cfcf91f0ef5d60b..09cebe8b80f722d1869036d55767e47104031728 100644
--- a/alfa-client/apps/alfa-e2e/src/components/kommentar/kommentar-list.e2e.component.ts
+++ b/alfa-client/apps/alfa-e2e/src/components/kommentar/kommentar-list.e2e.component.ts
@@ -25,54 +25,60 @@ import { convertToDataTestId } from '../../support/tech.util';
 import { AttachmentContainerE2EComponent } from '../attachment/attachment.e2e.component';
 import { UserProfileE2EComponent } from '../user-profile/user-profile.component.e2e';
 
-export class KommentareInVorgangE2EComponent {
-  readonly locatorHinzufuegenButton: string = 'create-kommentar';
-  readonly locatorFormular: string = 'kommentar-formular';
-  readonly locatorFormularSpeichernButton: string = 'add-button';
-  readonly locatorFormularAbbrechenButton: string = 'cancel-button';
-  readonly locatorKommentarList: string = 'kommentar-list-in-vorgang';
-  readonly locatorTextInput: string = 'Kommentar-textarea-input';
-  readonly locatorTextError: string = 'Kommentar-textarea-error';
-
-  private readonly attachmentContainer: AttachmentContainerE2EComponent =
-    new AttachmentContainerE2EComponent();
-
-  readonly locatorRoot: string = 'kommentar-container-in-vorgang';
-
-  public getRoot() {
-    return cy.getTestElement(this.locatorRoot);
+export class KommentarListInVorgangE2EComponent {
+  readonly hinzufuegenButton: string = 'create-kommentar';
+
+  readonly root: string = 'kommentar-container-in-vorgang';
+
+  readonly kommentarList: string = 'kommentar-list-in-vorgang';
+
+  readonly formular: string = 'kommentar-formular';
+  readonly formularItem: string = 'kommentar-list-item-form';
+  readonly formularSpeichernButton: string = 'add-button';
+  readonly formularAbbrechenButton: string = 'cancel-button';
+  readonly textInput: string = 'Kommentar-textarea-input';
+  readonly textError: string = 'Kommentar-textarea-error';
+
+  private readonly attachmentContainer: AttachmentContainerE2EComponent = new AttachmentContainerE2EComponent();
+
+  public getRoot(): Cypress.Chainable<Element> {
+    return cy.getTestElement(this.root);
+  }
+
+  public getFormular(): Cypress.Chainable<Element> {
+    return cy.getTestElement(this.formular);
   }
 
-  public getFormular() {
-    return cy.getTestElement(this.locatorFormular);
+  public getFormulare(): Cypress.Chainable<Element[]> {
+    return cy.getTestElement(this.formularItem);
   }
 
-  public getHinzufuegenButton() {
-    return cy.getTestElement(this.locatorHinzufuegenButton);
+  public getHinzufuegenButton(): Cypress.Chainable<Element> {
+    return cy.getTestElement(this.hinzufuegenButton);
   }
 
-  public getFormularSpeichernButton() {
-    return cy.getTestElement(this.locatorFormularSpeichernButton);
+  public getFormularSpeichernButton(): Cypress.Chainable<Element> {
+    return cy.getTestElement(this.formularSpeichernButton);
   }
 
-  public getFormularAbbrechenButton() {
-    return cy.getTestElement(this.locatorFormularAbbrechenButton);
+  public getFormularAbbrechenButton(): Cypress.Chainable<Element> {
+    return cy.getTestElement(this.formularAbbrechenButton);
   }
 
-  public getKommentarList() {
-    return cy.getTestElement(this.locatorKommentarList);
+  public getKommentarList(): Cypress.Chainable<Element> {
+    return cy.getTestElement(this.kommentarList);
   }
 
-  public getTextInput() {
-    return cy.getTestElement(this.locatorTextInput);
+  public getTextInput(): Cypress.Chainable<Element> {
+    return cy.getTestElement(this.textInput);
   }
 
-  public getTextError() {
-    return cy.getTestElement(this.locatorTextError);
+  public getTextError(): Cypress.Chainable<Element> {
+    return cy.getTestElement(this.textError);
   }
 
-  public getKommentar(text: string): KommentarInVorgangE2E {
-    return new KommentarInVorgangE2E(text);
+  public getKommentar(text: string): KommentarInVorgangE2EComponent {
+    return new KommentarInVorgangE2EComponent(text);
   }
 
   public getAttachmentContainer(): AttachmentContainerE2EComponent {
@@ -80,26 +86,24 @@ export class KommentareInVorgangE2EComponent {
   }
 }
 
-export class KommentarInVorgangE2E {
-  //TODO: Rename to KommentarInVorgangE2EComponent
-
-  private readonly locatorCreatedAt: string = 'kommentar-created-at';
+export class KommentarInVorgangE2EComponent {
+  private readonly root: string;
 
-  private readonly locatorRoot: string;
+  private readonly createdAtInput: string = 'kommentar-created-at';
 
   constructor(private text: string) {
-    this.locatorRoot = 'kommentar-item-' + convertToDataTestId(this.text);
+    this.root = 'kommentar-item-' + convertToDataTestId(this.text);
   }
 
-  public getRoot() {
-    return cy.getTestElement(this.locatorRoot);
+  public getRoot(): Cypress.Chainable<Element> {
+    return cy.getTestElement(this.root);
   }
 
   public getUserProfile(): UserProfileE2EComponent {
-    return new UserProfileE2EComponent(this.locatorRoot);
+    return new UserProfileE2EComponent(this.root);
   }
 
-  public getCreatedAt() {
-    return cy.getTestElement(this.locatorCreatedAt);
+  public getCreatedAt(): Cypress.Chainable<Element> {
+    return this.getRoot().findTestElementWithClass(this.createdAtInput);
   }
 }
diff --git a/alfa-client/apps/alfa-e2e/src/components/postfach/postfach-mail-formular.e2e.component.ts b/alfa-client/apps/alfa-e2e/src/components/postfach/postfach-mail-formular.e2e.component.ts
index fc4edd22fe768eb8be089b6142314fc6d0227e1c..c1348e724905b5cb8bc0daa0b8a02521cd9b23d9 100644
--- a/alfa-client/apps/alfa-e2e/src/components/postfach/postfach-mail-formular.e2e.component.ts
+++ b/alfa-client/apps/alfa-e2e/src/components/postfach/postfach-mail-formular.e2e.component.ts
@@ -25,43 +25,42 @@ import { getTestElement } from '../../support/cypress-helper';
 import { AttachmentContainerE2EComponent } from '../attachment/attachment.e2e.component';
 
 export class PostfachMailFormularE2EComponent {
-  private readonly locatorEmpfaenger: string = 'postfach-empfaenger';
-  private readonly locatorBetreff: string = 'Betreff-text-input';
-  private readonly locatorBetreffError: string = 'Betreff-text-error';
-  private readonly locatorText: string = 'Text-textarea-input';
-  private readonly locatorTextError: string = 'Text-textarea-error';
-  private readonly locatorSendButton: string = 'postfach-send-button';
+  private readonly empfaenger: string = 'postfach-empfaenger';
+  private readonly betreffInput: string = 'Betreff-text-input';
+  private readonly betreffError: string = 'Betreff-text-error';
+  private readonly textInput: string = 'Text-textarea-input';
+  private readonly textError: string = 'Text-textarea-error';
+  private readonly replyOptionCheckbox: string = 'postfach-reply-option';
+  private readonly sendButton: string = 'postfach-send-button';
 
-  private readonly replyOption: string = 'postfach-reply-option';
-  private readonly attachmentContainer: AttachmentContainerE2EComponent =
-    new AttachmentContainerE2EComponent();
+  private readonly attachmentContainer: AttachmentContainerE2EComponent = new AttachmentContainerE2EComponent();
 
-  public getEmpfaenger() {
-    return cy.getTestElement(this.locatorEmpfaenger);
+  public getEmpfaenger(): Cypress.Chainable<HTMLElement> {
+    return cy.getTestElement(this.empfaenger);
   }
 
-  public getBetreff() {
-    return cy.getTestElement(this.locatorBetreff);
+  public getBetreff(): Cypress.Chainable<HTMLElement> {
+    return cy.getTestElement(this.betreffInput);
   }
 
-  public getBetreffError() {
-    return cy.getTestElement(this.locatorBetreffError);
+  public getBetreffError(): Cypress.Chainable<HTMLElement> {
+    return cy.getTestElement(this.betreffError);
   }
 
-  public getText() {
-    return cy.getTestElement(this.locatorText);
+  public getText(): Cypress.Chainable<HTMLElement> {
+    return cy.getTestElement(this.textInput);
   }
 
-  public getTextError() {
-    return cy.getTestElement(this.locatorTextError);
+  public getTextError(): Cypress.Chainable<HTMLElement> {
+    return cy.getTestElement(this.textError);
   }
 
-  public getSendButton() {
-    return cy.getTestElement(this.locatorSendButton);
+  public getSendButton(): Cypress.Chainable<HTMLElement> {
+    return cy.getTestElement(this.sendButton);
   }
 
-  public getReplyOption() {
-    return getTestElement(this.replyOption).find('.mdc-checkbox__native-control');
+  public getReplyOption(): Cypress.Chainable<HTMLElement> {
+    return getTestElement(this.replyOptionCheckbox).find('.mdc-checkbox__native-control');
   }
 
   public getAttachmentContainer(): AttachmentContainerE2EComponent {
diff --git a/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-bescheid-wizard.e2e.component.ts b/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-bescheid-wizard.e2e.component.ts
index 057b39b29c7de8819c69e745af44cda24e300859..4b1e36d8940baf9c31b74c0db1496400ff3f3a16 100644
--- a/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-bescheid-wizard.e2e.component.ts
+++ b/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-bescheid-wizard.e2e.component.ts
@@ -49,7 +49,6 @@ export class VorgangBescheidWizardE2EComponent {
   private readonly uploadBescheidFileButton: string = '-single-file-upload-button';
   private readonly uploadAttachmentButton: string = 'Anhang_hochladen-file-upload-button';
   private readonly uploadAutomaticBescheid: string = 'create-bescheid-document-button';
-  private readonly mailTextArea: string = 'Text-textarea-editor';
   private readonly saveBescheid: string = 'save-button';
   private readonly sendBescheid: string = 'send-button';
   private readonly confirmAndSaveButton: string = 'confirm-and-save-button';
@@ -63,10 +62,6 @@ export class VorgangBescheidWizardE2EComponent {
 
   private readonly bescheidDocument: string = 'bescheid-document';
   private readonly attachmentDocument: string = 'bescheid-attachments';
-  private readonly bescheidUploadSpinner: string = '[data-test-id="bescheid-document"] ods-spinner-icon';
-  private readonly attachmentUploadSpinner: string = '[data-test-id="bescheid-attachments"] ods-spinner-icon';
-  private readonly bescheidSaveSpinner: string = '[data-test-id="confirm-and-save-button"] ods-spinner-icon';
-  private readonly sendenSpinner: string = '[data-test-id="send-button"] ods-spinner-icon';
   private readonly missingBescheidDocumentMessage: string = 'missing-bescheid-document-error-message';
 
   private locatorRoot: string = 'bescheid-wizard';
@@ -142,35 +137,35 @@ export class VorgangBescheidWizardE2EComponent {
     return cy.getTestElement(this.closeDialog);
   }
 
-  public getCloseVerwerfenButton(): Cypress.Chainable<JQuery<HTMLElement>> {
+  public getCloseVerwerfenButton(): Cypress.Chainable<HTMLElement> {
     return cy.getTestElement(this.bescheidVerwerfenButton);
   }
 
-  public getCloseSpeichernButton(): Cypress.Chainable<JQuery<HTMLElement>> {
+  public getCloseSpeichernButton(): Cypress.Chainable<HTMLElement> {
     return cy.getTestElement(this.bescheidSpeichernButton);
   }
 
-  public getUploadBescheidButton(): Cypress.Chainable<JQuery<HTMLElement>> {
+  public getUploadBescheidButton(): Cypress.Chainable<HTMLElement> {
     return cy.getTestElement(this.uploadBescheidFileButton);
   }
 
-  public getUploadAttachmentButton(): Cypress.Chainable<JQuery<HTMLElement>> {
+  public getUploadAttachmentButton(): Cypress.Chainable<HTMLElement> {
     return cy.getTestElement(this.uploadAttachmentButton);
   }
 
-  public getFileBescheidValidInWizard(): Cypress.Chainable<JQuery<HTMLElement>> {
+  public getFileBescheidValidInWizard(): Cypress.Chainable<HTMLElement> {
     return cy.getTestElement(this.locatorRoot).find(`[data-test-id=${this.fileBescheidValid}]`);
   }
 
-  public getFileAnhangValidInWizard(): Cypress.Chainable<JQuery<HTMLElement>> {
+  public getFileAnhangValidInWizard(): Cypress.Chainable<HTMLElement> {
     return cy.getTestElement(this.locatorRoot).find(`[data-test-id=${this.fileAnhangValid}]`);
   }
 
-  public getAutomaticBescheidFileInWizard() {
+  public getAutomaticBescheidFileInWizard(): Cypress.Chainable<HTMLElement> {
     return cy.getTestElement(this.locatorRoot).find(`[data-test-id=${this.fileAutomaticBescheid}]`);
   }
 
-  public getDeleteButtonOfElement(element: string): Cypress.Chainable<JQuery<HTMLElement>> {
+  public getDeleteButtonOfElement(element: string): Cypress.Chainable<HTMLElement> {
     return cy.getTestElement(element).find('[title="Anhang löschen"]');
   }
 
@@ -178,30 +173,14 @@ export class VorgangBescheidWizardE2EComponent {
     return filename.replace(/\./g, '') + '-file-item';
   }
 
-  public getBescheidDocument(): Cypress.Chainable<JQuery<HTMLElement>> {
+  public getBescheidDocument(): Cypress.Chainable<HTMLElement> {
     return cy.getTestElement(this.bescheidDocument);
   }
 
-  public getAttachmentDocument(): Cypress.Chainable<JQuery<HTMLElement>> {
+  public getAttachmentDocument(): Cypress.Chainable<HTMLElement> {
     return cy.getTestElement(this.attachmentDocument);
   }
 
-  public getBescheidUploadSpinner(): Cypress.Chainable<JQuery<HTMLElement>> {
-    return cy.get(this.bescheidUploadSpinner);
-  }
-
-  public getAttachmentUploadSpinner(): Cypress.Chainable<JQuery<HTMLElement>> {
-    return cy.get(this.attachmentUploadSpinner);
-  }
-
-  public getBescheidSaveSpinner(): Cypress.Chainable<JQuery<HTMLElement>> {
-    return cy.get(this.bescheidSaveSpinner);
-  }
-
-  public getSendenSpinner(): Cypress.Chainable<JQuery<HTMLElement>> {
-    return cy.get(this.sendenSpinner);
-  }
-
   public getMailText(): Cypress.Chainable<JQuery<HTMLElement>> {
     return cy.getTestElement(this.nachrichtText);
   }
@@ -274,14 +253,6 @@ export class VorgangBescheidWizardE2EComponent {
     uploadFile(this.getUploadAttachmentButton(), fileName);
   }
 
-  public bescheidUploadSpinnerIsClosed(): void {
-    this.getBescheidUploadSpinner().should('not.exist');
-  }
-
-  public attachmentSpinnerIsClosed(): void {
-    this.getAttachmentUploadSpinner().should('not.exist');
-  }
-
   public enterDate(difference: number): void {
     this.getDateInput().should('exist');
     enterWith(this.getDateInput(), getAdjustedDateGerman(difference));
diff --git a/alfa-client/apps/alfa-e2e/src/components/wiedervorlage/wiedervorlage-in-vorgang.e2e.component.ts b/alfa-client/apps/alfa-e2e/src/components/wiedervorlage/wiedervorlage-in-vorgang.e2e.component.ts
index 36b36d076f83254d26bdaa6babef3975300ebedd..753fe1f790e2f4cdcfc140f93ae23681764b3736 100644
--- a/alfa-client/apps/alfa-e2e/src/components/wiedervorlage/wiedervorlage-in-vorgang.e2e.component.ts
+++ b/alfa-client/apps/alfa-e2e/src/components/wiedervorlage/wiedervorlage-in-vorgang.e2e.component.ts
@@ -26,38 +26,37 @@ import { AttachmentContainerE2EComponent } from '../attachment/attachment.e2e.co
 import { StatusE2EComponent } from './wiedervorlage-status.e2e.component';
 
 export class WiedervorlageInVorgangE2EComponent {
-  private readonly locatorFrist: string = 'frist';
-  private readonly locatorBetreff: string = 'betreff';
-  private readonly locatorLink: string = 'link';
-  private readonly locatorExpandButon: string = 'expand-button';
-  private readonly locatorExpandable: string = 'expandable';
-  private readonly attachmentContainer: AttachmentContainerE2EComponent =
-    new AttachmentContainerE2EComponent();
+  private readonly frist: string = 'frist';
+  private readonly betreff: string = 'betreff';
+  private readonly link: string = 'link';
+  private readonly expandButton: string = 'expand-button';
+  private readonly expandable: string = 'expandable';
+  private readonly attachmentContainer: AttachmentContainerE2EComponent = new AttachmentContainerE2EComponent();
 
   private locatorRoot: string;
 
-  constructor(private betreff: string) {
-    this.locatorRoot = replaceAllWhitespaces(this.betreff, '_');
+  constructor(private betreffIdentificator: string) {
+    this.locatorRoot = replaceAllWhitespaces(this.betreffIdentificator, '_');
   }
 
-  public getRoot() {
+  public getRoot(): Cypress.Chainable<Element> {
     return cy.getTestElement(this.locatorRoot);
   }
 
-  public getLink() {
-    return this.getRoot().findTestElementWithClass(this.locatorLink);
+  public getLink(): Cypress.Chainable<Element> {
+    return this.getRoot().findTestElementWithClass(this.link);
   }
 
-  public getFrist() {
-    return this.getRoot().findTestElementWithClass(this.locatorFrist);
+  public getFrist(): Cypress.Chainable<Element> {
+    return this.getRoot().findTestElementWithClass(this.frist);
   }
 
-  public getBetreff() {
-    return this.getRoot().findTestElementWithClass(this.locatorBetreff);
+  public getBetreff(): Cypress.Chainable<Element> {
+    return this.getRoot().findTestElementWithClass(this.betreff);
   }
 
-  public getExpandButton() {
-    return this.getRoot().findTestElementWithClass(this.locatorExpandButon);
+  public getExpandButton(): Cypress.Chainable<Element> {
+    return this.getRoot().findTestElementWithClass(this.expandButton);
   }
 
   public getStatus(): StatusE2EComponent {
@@ -68,8 +67,8 @@ export class WiedervorlageInVorgangE2EComponent {
     this.getExpandButton().click();
   }
 
-  public getExpandable() {
-    return this.getRoot().findTestElementWithClass(this.locatorExpandable);
+  public getExpandable(): Cypress.Chainable<Element> {
+    return this.getRoot().findTestElementWithClass(this.expandable);
   }
 
   public getAttachmentContainer(): AttachmentContainerE2EComponent {
diff --git a/alfa-client/apps/alfa-e2e/src/components/wiedervorlage/wiedervorlage-page.e2e.component.ts b/alfa-client/apps/alfa-e2e/src/components/wiedervorlage/wiedervorlage-page.e2e.component.ts
index e17043afdfaa7c7de564ec7b244ff85b1761985a..a647445a85ed68f65dccd37e8f1416dd0c03c396 100644
--- a/alfa-client/apps/alfa-e2e/src/components/wiedervorlage/wiedervorlage-page.e2e.component.ts
+++ b/alfa-client/apps/alfa-e2e/src/components/wiedervorlage/wiedervorlage-page.e2e.component.ts
@@ -34,31 +34,31 @@ export class WiedervorlageE2EComponent {
 
   private readonly attachmentContainer: AttachmentContainerE2EComponent = new AttachmentContainerE2EComponent();
 
-  public getBetreff() {
+  public getBetreff(): Cypress.Chainable<Element> {
     return cy.getTestElement(this.locatorBetreffInput);
   }
 
-  public getBetreffError() {
+  public getBetreffError(): Cypress.Chainable<Element> {
     return cy.getTestElement(this.locatorBetreffError);
   }
 
-  public getBeschreibung() {
+  public getBeschreibung(): Cypress.Chainable<Element> {
     return cy.getTestElement(this.locatorBeschreibungInput);
   }
 
-  public getFrist() {
+  public getFrist(): Cypress.Chainable<Element> {
     return cy.getTestElement(this.locatorFristInput);
   }
 
-  public getDatumError() {
+  public getDatumError(): Cypress.Chainable<Element> {
     return cy.getTestElement(this.locatorDatumError);
   }
 
-  public getStatusDot() {
+  public getStatusDot(): Cypress.Chainable<Element> {
     return cy.getTestElementWithClass(this.locatorStatusDot);
   }
 
-  public getSpeichernButton() {
+  public getSpeichernButton(): Cypress.Chainable<Element> {
     return cy.getTestElement(this.locatorSpeichernButton);
   }
 
diff --git a/alfa-client/apps/alfa-e2e/src/components/wiedervorlage/wiedervorlagen-in-vorgang.e2e.component.ts b/alfa-client/apps/alfa-e2e/src/components/wiedervorlage/wiedervorlagen-in-vorgang.e2e.component.ts
index 91718623842de6e64bb8c0a863ba2146606d68c4..0f5d46f7ab8f257fc75e3f6a1bcd9d3cfd80da56 100644
--- a/alfa-client/apps/alfa-e2e/src/components/wiedervorlage/wiedervorlagen-in-vorgang.e2e.component.ts
+++ b/alfa-client/apps/alfa-e2e/src/components/wiedervorlage/wiedervorlagen-in-vorgang.e2e.component.ts
@@ -24,18 +24,18 @@
 import { WiedervorlageInVorgangE2EComponent } from './wiedervorlage-in-vorgang.e2e.component';
 
 export class WiedervorlagenInVorgangE2EComponent {
-  private readonly locatorCreateWiedervorlageButton: string = 'create-wiedervorlage';
-  private readonly locatorRoot: string = 'wiedervorlagen-in-vorgang';
+  private readonly createWiedervorlageButton: string = 'create-wiedervorlage';
+  private readonly root: string = 'wiedervorlagen-in-vorgang';
 
-  public getRoot() {
-    return cy.getTestElement(this.locatorRoot);
+  public getRoot(): Cypress.Chainable<Element> {
+    return cy.getTestElement(this.root);
   }
 
   public getWiedervorlage(betreff: string): WiedervorlageInVorgangE2EComponent {
     return new WiedervorlageInVorgangE2EComponent(betreff);
   }
 
-  public getCreateWiedervorlageButton() {
-    return cy.getTestElement(this.locatorCreateWiedervorlageButton);
+  public getCreateWiedervorlageButton(): Cypress.Chainable<Element> {
+    return cy.getTestElement(this.createWiedervorlageButton);
   }
 }
diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/kommentar-attachment/kommentar-attachment.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/kommentar-attachment/kommentar-attachment.cy.ts
index e3d96d18276ee39862dd14f25d9a0ed02169b812..8cddad300e40d3cb4c4cca590d69f30845a5314f 100644
--- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/kommentar-attachment/kommentar-attachment.cy.ts
+++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/kommentar-attachment/kommentar-attachment.cy.ts
@@ -22,18 +22,20 @@
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
 import { sleep } from '@alfa-client/tech-shared';
-import { AttachmentContainerE2EComponent, AttachmentListE2EComponent, } from '../../../components/attachment/attachment.e2e.component';
-import { KommentareInVorgangE2EComponent } from '../../../components/kommentar/kommentar-list.e2e.component';
+import {
+  AttachmentContainerE2EComponent,
+  AttachmentListE2EComponent,
+} from '../../../components/attachment/attachment.e2e.component';
+import { KommentarListInVorgangE2EComponent } from '../../../components/kommentar/kommentar-list.e2e.component';
 import { VorgangListE2EComponent } from '../../../components/vorgang/vorgang-list.e2e.component';
-import { UserE2E } from '../../../model/user';
 import { VorgangE2E } from '../../../model/vorgang';
 import { MainPage, waitForSpinnerToDisappear } from '../../../page-objects/main.po';
 import { VorgangPage } from '../../../page-objects/vorgang.po';
 import { dropCollections, readFileFromDownloads } from '../../../support/cypress-helper';
 import { exist, notExist } from '../../../support/cypress.util';
 import { TEST_FILE_WITH_CONTENT, TEST_FILE_WITHOUT_CONTENT } from '../../../support/data.util';
-import { uploadFile } from '../../../support/file-upload';
-import { getUserSabine, loginAsSabine } from '../../../support/user-util';
+import { uploadFile, uploadFiles } from '../../../support/file-upload';
+import { loginAsSabine } from '../../../support/user-util';
 import { createVorgang, initVorgang } from '../../../support/vorgang-util';
 
 describe('Kommentar attachments', () => {
@@ -41,7 +43,7 @@ describe('Kommentar attachments', () => {
   const vorgangList: VorgangListE2EComponent = mainPage.getVorgangList();
 
   const vorgangPage: VorgangPage = new VorgangPage();
-  const kommentarContainer: KommentareInVorgangE2EComponent = vorgangPage.getKommentarContainer();
+  const kommentarContainer: KommentarListInVorgangE2EComponent = vorgangPage.getKommentarContainer();
 
   const attachmentContainer: AttachmentContainerE2EComponent = kommentarContainer.getAttachmentContainer();
   const attachmentList: AttachmentListE2EComponent = attachmentContainer.getList();
@@ -49,7 +51,6 @@ describe('Kommentar attachments', () => {
   const kommentarText: string = 'Test text to test the test text test';
 
   const vorgang: VorgangE2E = createVorgang();
-  const userSabine: UserE2E = getUserSabine();
 
   before(() => {
     initVorgang(vorgang);
@@ -124,20 +125,22 @@ describe('Kommentar attachments', () => {
     });
   });
 
-  describe('Download Kommentar attachments', () => {
-    it('should upload attachment', () => {
+  describe('upload multiple attachments', () => {
+    it('should show files after upload is done', () => {
       kommentarContainer.getKommentar(kommentarText).getRoot().click();
       waitForSpinnerToDisappear();
 
-      uploadFile(attachmentContainer.getUploadInput(), TEST_FILE_WITH_CONTENT);
+      uploadFiles(attachmentContainer.getUploadInput(), [TEST_FILE_WITH_CONTENT, TEST_FILE_WITHOUT_CONTENT]);
       waitForSpinnerToDisappear();
-
       kommentarContainer.getFormularSpeichernButton().click();
       waitForSpinnerToDisappear();
 
       exist(attachmentList.getItem(TEST_FILE_WITH_CONTENT).getRoot());
+      exist(attachmentList.getItem(TEST_FILE_WITHOUT_CONTENT).getRoot());
     });
+  });
 
+  describe('Download Kommentar attachments', () => {
     it('should download uploaded attachment', () => {
       sleep(1000);
 
diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/kommentar/kommentar.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/kommentar/kommentar.cy.ts
index 23754b15795ba5f5ed020b7dd450dad2a2d14fe3..002476fc9fbca92bc87ef43cf52f794266c3c45c 100644
--- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/kommentar/kommentar.cy.ts
+++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/kommentar/kommentar.cy.ts
@@ -21,13 +21,13 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { KommentareInVorgangE2EComponent } from '../../../components/kommentar/kommentar-list.e2e.component';
+import { KommentarListInVorgangE2EComponent } from '../../../components/kommentar/kommentar-list.e2e.component';
 import { UserE2E } from '../../../model/user';
 import { VorgangE2E } from '../../../model/vorgang';
 import { MainPage, waitForSpinnerToDisappear } from '../../../page-objects/main.po';
 import { VorgangPage } from '../../../page-objects/vorgang.po';
 import { dropCollections } from '../../../support/cypress-helper';
-import { contains, exist, haveText, notExist } from '../../../support/cypress.util';
+import { contains, exist, haveLength, haveText, notExist } from '../../../support/cypress.util';
 import { getUserSabine, initUsermanagerUsers, loginAsSabine } from '../../../support/user-util';
 import { createVorgang, initVorgang } from '../../../support/vorgang-util';
 
@@ -35,7 +35,7 @@ describe('Kommentar', () => {
   const mainPage: MainPage = new MainPage();
 
   const vorgangPage: VorgangPage = new VorgangPage();
-  const kommentarContainer: KommentareInVorgangE2EComponent = vorgangPage.getKommentarContainer();
+  const kommentarContainer: KommentarListInVorgangE2EComponent = vorgangPage.getKommentarContainer();
 
   const kommentarText: string = 'Test text to test the test text test';
 
@@ -90,7 +90,7 @@ describe('Kommentar', () => {
     });
 
     describe('click on hinzufuegen button in formular', () => {
-      it('should show error on invalid input', () => {
+      it('should show error on empty text', () => {
         kommentarContainer.getFormularSpeichernButton().click();
         waitForSpinnerToDisappear();
 
@@ -101,53 +101,22 @@ describe('Kommentar', () => {
         kommentarContainer.getTextInput().clear().type(kommentarText);
 
         kommentarContainer.getFormularSpeichernButton().click();
-        exist(vorgangPage.getSpinner());
-        notExist(
-          kommentarContainer
-            .getKommentar(kommentarText)
-            .getUserProfile()
-            .getIconContainer()
-            .getAssignedIcon(),
-        );
-        exist(vorgangPage.getSpinner());
         waitForSpinnerToDisappear();
-        exist(
-          kommentarContainer
-            .getKommentar(kommentarText)
-            .getUserProfile()
-            .getIconContainer()
-            .getAssignedIcon(),
-        );
 
+        exist(kommentarContainer.getKommentar(kommentarText).getUserProfile().getIconContainer().getAssignedIcon());
         notExist(kommentarContainer.getTextError());
         notExist(kommentarContainer.getFormular());
         exist(kommentarContainer.getHinzufuegenButton());
-      });
-
-      it('should show entry in list', () => {
         exist(kommentarContainer.getKommentar(kommentarText).getRoot());
       });
 
       it('should show user profile at kommentar', () => {
-        exist(
-          kommentarContainer
-            .getKommentar(kommentarText)
-            .getUserProfile()
-            .getIconContainer()
-            .getAssignedIcon(),
-        );
+        exist(kommentarContainer.getKommentar(kommentarText).getUserProfile().getIconContainer().getAssignedIcon());
         haveText(
-          kommentarContainer
-            .getKommentar(kommentarText)
-            .getUserProfile()
-            .getIconContainer()
-            .getAssignedIcon(),
+          kommentarContainer.getKommentar(kommentarText).getUserProfile().getIconContainer().getAssignedIcon(),
           userSabine.initials,
         );
-        contains(
-          kommentarContainer.getKommentar(kommentarText).getUserProfile().getName(),
-          userSabine.fullName,
-        );
+        contains(kommentarContainer.getKommentar(kommentarText).getUserProfile().getName(), userSabine.fullName);
         exist(kommentarContainer.getKommentar(kommentarText).getCreatedAt());
       });
     });
@@ -212,5 +181,27 @@ describe('Kommentar', () => {
         exist(kommentarContainer.getHinzufuegenButton());
       });
     });
+
+    describe('other kommentar', () => {
+      const otherKommentar: string = 'otherKommentar';
+
+      it('should be created', () => {
+        kommentarContainer.getHinzufuegenButton().click();
+        kommentarContainer.getTextInput().clear().type(otherKommentar);
+        kommentarContainer.getFormularSpeichernButton().click();
+        waitForSpinnerToDisappear();
+
+        haveLength(kommentarContainer.getFormulare(), 0);
+        exist(kommentarContainer.getKommentar(otherKommentar).getRoot());
+      });
+
+      it('should hide previous opened kommentar on edit other kommentar', () => {
+        kommentarContainer.getKommentar(kommentarText).getRoot().click();
+        haveLength(kommentarContainer.getFormulare(), 1);
+
+        kommentarContainer.getKommentar(otherKommentar).getRoot().click();
+        haveLength(kommentarContainer.getFormulare(), 1);
+      });
+    });
   });
 });
diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/postfach-mail/postfach-mail.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/postfach-mail/postfach-mail.cy.ts
index 044306b1063a79e993a306928e4a1bf7d9cbf827..70ef41af32be8a87839358860fa5eb7c7243be28 100644
--- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/postfach-mail/postfach-mail.cy.ts
+++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/postfach-mail/postfach-mail.cy.ts
@@ -22,7 +22,12 @@
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
 import { faker } from '@faker-js/faker';
-import { AttachmentContainerE2EComponent, AttachmentListE2EComponent, } from 'apps/alfa-e2e/src/components/attachment/attachment.e2e.component';
+import {
+  AttachmentContainerE2EComponent,
+  AttachmentListE2EComponent,
+} from 'apps/alfa-e2e/src/components/attachment/attachment.e2e.component';
+import { E2EAttachmentHelper } from 'apps/alfa-e2e/src/helper/attachment/attachment.helper';
+import { E2EAttachmentVerifier } from 'apps/alfa-e2e/src/helper/attachment/attachment.verifier';
 import { BinaryFileSnackbarMessageE2E } from 'apps/alfa-e2e/src/model/binary-file';
 import { PostfachMailFormularE2EComponent } from '../../../components/postfach/postfach-mail-formular.e2e.component';
 import { PostfachMailE2EComponent, PostfachMailListItem } from '../../../components/postfach/postfach-mail.e2e.component';
@@ -31,7 +36,12 @@ import { SnackBarE2EComponent } from '../../../components/ui/snackbar.e2e.compon
 import { VorgangListE2EComponent } from '../../../components/vorgang/vorgang-list.e2e.component';
 import { VorgangSubnavigationE2EComponent } from '../../../components/vorgang/vorgang-subnavigation';
 import { ClientAttributeNameE2E, ClientAttributesE2E, VorgangE2E } from '../../../model/vorgang';
-import { PostfachMailItemE2E, PostfachNachrichtSnackbarMessageE2E, VorgangAttachedItemClientE2E, VorgangAttachedItemE2E, } from '../../../model/vorgang-attached-item';
+import {
+  PostfachMailItemE2E,
+  PostfachNachrichtSnackbarMessageE2E,
+  VorgangAttachedItemClientE2E,
+  VorgangAttachedItemE2E,
+} from '../../../model/vorgang-attached-item';
 import { MainPage, waitForSpinnerToDisappear } from '../../../page-objects/main.po';
 import { PostfachMailPage } from '../../../page-objects/postfach-mail.component.po';
 import { VorgangPage } from '../../../page-objects/vorgang.po';
@@ -39,10 +49,20 @@ import { expectIconWithBadge, expectIconWithoutBadge } from '../../../support/an
 import { dropCollections, readFileFromDownloads } from '../../../support/cypress-helper';
 import { beChecked, contains, exist, notBeChecked, notBeVisible, notExist, visible } from '../../../support/cypress.util';
 import { TEST_FILE_WITH_CONTENT, TEST_FILE_WITH_CONTENT_4_MB, TEST_FILE_WITHOUT_CONTENT } from '../../../support/data.util';
-import { uploadEmptyFile, uploadFile } from '../../../support/file-upload';
 import { initUsermanagerUsers, loginAsSabine } from '../../../support/user-util';
-import { createPostfachNachrichtAttachedItem, createPostfachNachrichtReplyItem, initVorgangAttachedItem, } from '../../../support/vorgang-attached-item-util';
-import { buildVorgang, createHasNewPostfachNachrichtClientAttribute, createHasPostfachNachrichtClientAttribute, createVorgang, initVorgaenge, objectIds, } from '../../../support/vorgang-util';
+import {
+  createPostfachNachrichtAttachedItem,
+  createPostfachNachrichtReplyItem,
+  initVorgangAttachedItem,
+} from '../../../support/vorgang-attached-item-util';
+import {
+  buildVorgang,
+  createHasNewPostfachNachrichtClientAttribute,
+  createHasPostfachNachrichtClientAttribute,
+  createVorgang,
+  initVorgaenge,
+  objectIds,
+} from '../../../support/vorgang-util';
 
 describe('PostfachMail', () => {
   const mainPage: MainPage = new MainPage();
@@ -57,6 +77,9 @@ describe('PostfachMail', () => {
   const attachmentContainer: AttachmentContainerE2EComponent = postfachMailFormular.getAttachmentContainer();
   const attachmentList: AttachmentListE2EComponent = attachmentContainer.getList();
 
+  const attachmentHelper: E2EAttachmentHelper = new E2EAttachmentHelper();
+  const attachmentVerifier: E2EAttachmentVerifier = new E2EAttachmentVerifier();
+
   const postfachMailPage: PostfachMailPage = new PostfachMailPage();
 
   const clientAttributes: ClientAttributesE2E = {
@@ -226,45 +249,47 @@ describe('PostfachMail', () => {
 
     describe('attach files', () => {
       it('should show empty attachment after uploading it', () => {
-        uploadEmptyFile(attachmentContainer.getUploadInput(), TEST_FILE_WITHOUT_CONTENT);
-        waitForSpinnerToDisappear();
+        attachmentHelper.uploadEmptyAttachment();
 
-        exist(attachmentList.getItem(TEST_FILE_WITHOUT_CONTENT).getRoot());
+        attachmentVerifier.verifyAttachmentInList(TEST_FILE_WITHOUT_CONTENT);
       });
 
       it('should show attachment with content after uploading it', () => {
-        uploadFile(postfachMailFormular.getAttachmentContainer().getUploadInput(), TEST_FILE_WITH_CONTENT);
-        waitForSpinnerToDisappear();
+        attachmentHelper.uploadAttachment();
 
-        exist(attachmentList.getItem(TEST_FILE_WITH_CONTENT).getRoot());
+        attachmentVerifier.verifyAttachmentInList(TEST_FILE_WITH_CONTENT);
       });
 
       it('should download empty attachment on click', () => {
-        attachmentList.getItem(TEST_FILE_WITHOUT_CONTENT).getDownloadButton().click();
-        waitForSpinnerToDisappear();
+        attachmentHelper.downloadAttachment(TEST_FILE_WITHOUT_CONTENT);
 
-        exist(readFileFromDownloads(TEST_FILE_WITHOUT_CONTENT));
+        attachmentVerifier.verifyAttachmentDownload(TEST_FILE_WITHOUT_CONTENT);
       });
 
       it('should download attachment with content on click', () => {
-        attachmentList.getItem(TEST_FILE_WITH_CONTENT).getDownloadButton().click();
-        waitForSpinnerToDisappear();
+        attachmentHelper.downloadAttachment(TEST_FILE_WITH_CONTENT);
 
-        exist(readFileFromDownloads(TEST_FILE_WITH_CONTENT));
+        attachmentVerifier.verifyAttachmentDownload(TEST_FILE_WITH_CONTENT);
       });
 
       it('should not show empty attachment after deleting it', () => {
-        attachmentList.getItem(TEST_FILE_WITHOUT_CONTENT).getDeleteButton().click();
-        waitForSpinnerToDisappear();
+        attachmentHelper.deleteAttachment(TEST_FILE_WITHOUT_CONTENT);
+
+        attachmentVerifier.verifyAttachmentNotInList(TEST_FILE_WITHOUT_CONTENT);
+      });
 
-        notExist(attachmentList.getItem(TEST_FILE_WITHOUT_CONTENT).getRoot());
+      it('should delete and multi upload all', () => {
+        attachmentHelper.deleteAttachments([TEST_FILE_WITH_CONTENT]);
+
+        attachmentHelper.uploadAttachments([TEST_FILE_WITH_CONTENT, TEST_FILE_WITHOUT_CONTENT]);
+
+        attachmentVerifier.verifyAttachmentsInList([TEST_FILE_WITH_CONTENT, TEST_FILE_WITHOUT_CONTENT]);
       });
     });
 
     describe('attach file > 3 MB', () => {
-      it('should show failed upload', () => {
-        uploadFile(postfachMailFormular.getAttachmentContainer().getUploadInput(), TEST_FILE_WITH_CONTENT_4_MB);
-        waitForSpinnerToDisappear();
+      it('should show failed upload', { defaultCommandTimeout: 90000 }, () => {
+        attachmentHelper.uploadAttachment(TEST_FILE_WITH_CONTENT_4_MB);
 
         exist(attachmentList.getLoadingOrErrorItem(TEST_FILE_WITH_CONTENT_4_MB).getRoot());
         contains(
diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-anhang/vorgang-anhang-herunterladen.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-anhang/vorgang-anhang-herunterladen.cy.ts
index 66ed9474b72739851ea9c6f0eb4845b761d91377..122141ad34b4cb0fbf1b594b071ffaa932e9166f 100644
--- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-anhang/vorgang-anhang-herunterladen.cy.ts
+++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-anhang/vorgang-anhang-herunterladen.cy.ts
@@ -132,7 +132,7 @@ describe('Vorgang Anhänge', () => {
     });
 
     it('should download attachment zip file', () => {
-      attachmentList.downloadAttachments();
+      attachmentList.getDownloadArchiveButton().click();
 
       waitForSpinnerToDisappear();
 
diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-abbrechen.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-abbrechen.cy.ts
index 7292aa333e4233b18c846485f02d316a080b6dc4..d7f9e7a5a73f9fa0eb942be9e5b64b25e4f53169 100644
--- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-abbrechen.cy.ts
+++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-abbrechen.cy.ts
@@ -88,9 +88,9 @@ describe('Vorgang - Bescheid abbrechen', () => {
 
     it('should upload files and continue to step 3', () => {
       bescheidWizard.uploadBescheid(TEST_FILE_BESCHEID_VALID);
-      bescheidWizard.bescheidUploadSpinnerIsClosed();
+      waitForSpinnerToDisappear();
       bescheidWizard.uploadAttachment(TEST_FILE_BESCHEID_ANHANG_VALID);
-      bescheidWizard.attachmentSpinnerIsClosed();
+      waitForSpinnerToDisappear();
       bescheidWizard.weiter();
 
       bescheidWizard.isBescheidVersendenStep();
@@ -140,9 +140,10 @@ describe('Vorgang - Bescheid abbrechen', () => {
 
     it('should upload Bescheid and attachment', () => {
       uploadFile(bescheidWizard.getUploadBescheidButton(), TEST_FILE_BESCHEID_VALID);
-      notExist(bescheidWizard.getBescheidUploadSpinner());
+      waitForSpinnerToDisappear();
+
       uploadFile(bescheidWizard.getUploadAttachmentButton(), TEST_FILE_BESCHEID_ANHANG_VALID);
-      notExist(bescheidWizard.getAttachmentUploadSpinner());
+      waitForSpinnerToDisappear();
     });
     it('should open dialog after click on X', () => {
       bescheidWizard.close();
diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-automatisch-erstellen.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-automatisch-erstellen.cy.ts
index 7cd0331269d087f962a1602f91a87b27ddf14128..1a8e2f654385e9d00a147f3d87277d3d4c175686 100644
--- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-automatisch-erstellen.cy.ts
+++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-automatisch-erstellen.cy.ts
@@ -28,12 +28,7 @@ import { VorgangBescheidWizardE2EComponent } from 'apps/alfa-e2e/src/components/
 import { VorgangFormularButtonsE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-formular-buttons.e2e.components';
 import { VorgangSubnavigationE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-subnavigation';
 import { SmockerMocks } from 'apps/alfa-e2e/src/model/smocker';
-import {
-  EingangE2E,
-  EingangHeaderE2E,
-  VorgangE2E,
-  VorgangStatusE2E,
-} from 'apps/alfa-e2e/src/model/vorgang';
+import { EingangE2E, EingangHeaderE2E, VorgangE2E, VorgangStatusE2E } from 'apps/alfa-e2e/src/model/vorgang';
 import 'cypress-real-events/support';
 import { VorgangListE2EComponent } from '../../../components/vorgang/vorgang-list.e2e.component';
 import { MainPage, waitForSpinnerToDisappear } from '../../../page-objects/main.po';
@@ -41,12 +36,7 @@ import { VorgangPage } from '../../../page-objects/vorgang.po';
 import { addSmockerMock, dropCollections } from '../../../support/cypress-helper';
 import { exist, haveText, notExist } from '../../../support/cypress.util';
 import { initUsermanagerUsers, loginAsSabine } from '../../../support/user-util';
-import {
-  buildVorgang,
-  createVorgang,
-  initVorgaenge,
-  objectIds,
-} from '../../../support/vorgang-util';
+import { buildVorgang, createVorgang, initVorgaenge, objectIds } from '../../../support/vorgang-util';
 
 registerLocaleData(localeDe, 'de', localeDeExtra);
 
@@ -79,8 +69,7 @@ describe('Upload automatic Bescheid', () => {
     status: VorgangStatusE2E.IN_BEARBEITUNG,
   };
 
-  const vorgangFormularButtons: VorgangFormularButtonsE2EComponent =
-    vorgangPage.getFormularButtons();
+  const vorgangFormularButtons: VorgangFormularButtonsE2EComponent = vorgangPage.getFormularButtons();
 
   const vorgangSubnavigation: VorgangSubnavigationE2EComponent = vorgangPage.getSubnavigation();
 
@@ -114,8 +103,7 @@ describe('Upload automatic Bescheid', () => {
       waitForSpinnerToDisappear();
       bescheidWizard.getUploadAutomaticBescheidButton().click();
 
-      exist(bescheidWizard.getBescheidUploadSpinner());
-      notExist(bescheidWizard.getBescheidUploadSpinner());
+      waitForSpinnerToDisappear();
       exist(bescheidWizard.getAutomaticBescheidFileInWizard());
     });
 
diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-dokumente-hochladen.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-dokumente-hochladen.cy.ts
index 2f0235885f20f005854b6a72df819534cbd15c6c..71531d122d7f3fdc14570feb7d498dd7f449b467 100644
--- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-dokumente-hochladen.cy.ts
+++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-dokumente-hochladen.cy.ts
@@ -26,15 +26,25 @@ import localeDe from '@angular/common/locales/de';
 import localeDeExtra from '@angular/common/locales/extra/de';
 import { VorgangBescheidWizardE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-bescheid-wizard.e2e.component';
 import { VorgangFormularButtonsE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-formular-buttons.e2e.components';
+import { E2EAttachmentHelper } from 'apps/alfa-e2e/src/helper/attachment/attachment.helper';
+import { E2EAttachmentVerifier } from 'apps/alfa-e2e/src/helper/attachment/attachment.verifier';
 import { VorgangE2E, VorgangStatusE2E } from 'apps/alfa-e2e/src/model/vorgang';
 import { uploadFile } from 'apps/alfa-e2e/src/support/file-upload';
 import 'cypress-real-events/support';
 import { VorgangListE2EComponent } from '../../../components/vorgang/vorgang-list.e2e.component';
 import { MainPage, waitForSpinnerToDisappear } from '../../../page-objects/main.po';
 import { VorgangPage } from '../../../page-objects/vorgang.po';
-import { dropCollections, getTestElement } from '../../../support/cypress-helper';
+import { dropCollections } from '../../../support/cypress-helper';
 import { contains, exist, haveText, haveValue, notContains, notExist } from '../../../support/cypress.util';
-import { TEST_FILE_BESCHEID_ANHANG_BIG, TEST_FILE_BESCHEID_ANHANG_VALID, TEST_FILE_BESCHEID_VALID, TEST_FILE_JPEG, TEST_FILE_JPG, TEST_FILE_PNG, TEST_FILE_WITH_CONTENT, } from '../../../support/data.util';
+import {
+  TEST_FILE_BESCHEID_ANHANG_BIG,
+  TEST_FILE_BESCHEID_ANHANG_VALID,
+  TEST_FILE_BESCHEID_VALID,
+  TEST_FILE_JPEG,
+  TEST_FILE_JPG,
+  TEST_FILE_PNG,
+  TEST_FILE_WITH_CONTENT,
+} from '../../../support/data.util';
 import { initUsermanagerUsers, loginAsSabine } from '../../../support/user-util';
 import { buildVorgang, initVorgaenge, objectIds } from '../../../support/vorgang-util';
 
@@ -54,6 +64,9 @@ describe('Bescheid Dokumente hochladen', () => {
 
   const vorgangFormularButtons: VorgangFormularButtonsE2EComponent = vorgangPage.getFormularButtons();
 
+  const attachmentHelper: E2EAttachmentHelper = new E2EAttachmentHelper();
+  const attachmentVerifier: E2EAttachmentVerifier = new E2EAttachmentVerifier();
+
   const documentError: string = 'Erlaubte Dateiendungen';
   const sizeError: string = 'Anhänge größer';
   const missingBescheidError: string = 'Bitte fügen Sie ein Bescheiddokument hinzu.';
@@ -90,13 +103,15 @@ describe('Bescheid Dokumente hochladen', () => {
 
     it('should upload manual Bescheid file', () => {
       uploadFile(bescheidWizard.getUploadBescheidButton(), TEST_FILE_BESCHEID_VALID);
-      notExist(bescheidWizard.getBescheidUploadSpinner());
+      waitForSpinnerToDisappear();
+
       exist(bescheidWizard.getFileBescheidValidInWizard());
     });
 
     it('should upload attachment file', () => {
-      uploadFile(bescheidWizard.getUploadAttachmentButton(), TEST_FILE_BESCHEID_ANHANG_VALID);
-      exist(bescheidWizard.getFileAnhangValidInWizard());
+      attachmentHelper.uploadAttachment(TEST_FILE_BESCHEID_ANHANG_VALID);
+
+      attachmentVerifier.verifyAttachmentInList(TEST_FILE_BESCHEID_ANHANG_VALID);
     });
 
     it('should still show files after clicking Weiter and step 2', () => {
@@ -127,15 +142,9 @@ describe('Bescheid Dokumente hochladen', () => {
     });
 
     it('should be able to attach all valid types of files', () => {
-      uploadFile(bescheidWizard.getUploadAttachmentButton(), TEST_FILE_JPG);
-      notExist(bescheidWizard.getAttachmentUploadSpinner());
-      uploadFile(bescheidWizard.getUploadAttachmentButton(), TEST_FILE_JPEG);
-      notExist(bescheidWizard.getAttachmentUploadSpinner());
-      uploadFile(bescheidWizard.getUploadAttachmentButton(), TEST_FILE_PNG);
-      notExist(bescheidWizard.getAttachmentUploadSpinner());
-      exist(getTestElement(bescheidWizard.getElementFromFileName(TEST_FILE_JPG)));
-      exist(getTestElement(bescheidWizard.getElementFromFileName(TEST_FILE_JPEG)));
-      exist(getTestElement(bescheidWizard.getElementFromFileName(TEST_FILE_PNG)));
+      attachmentHelper.uploadAttachments([TEST_FILE_JPG, TEST_FILE_JPEG, TEST_FILE_PNG]);
+
+      attachmentVerifier.verifyAttachmentsInList([TEST_FILE_JPG, TEST_FILE_JPEG, TEST_FILE_PNG]);
     });
   });
 
@@ -145,8 +154,9 @@ describe('Bescheid Dokumente hochladen', () => {
       contains(bescheidWizard.getBescheidDocument(), documentError);
     });
 
-    it('should show error if file is too big', () => {
+    it('should show error if file is too big', { defaultCommandTimeout: 90000 }, () => {
       uploadFile(bescheidWizard.getUploadAttachmentButton(), TEST_FILE_BESCHEID_ANHANG_BIG);
+
       contains(bescheidWizard.getAttachmentDocument(), sizeError);
     });
   });
@@ -162,7 +172,7 @@ describe('Bescheid Dokumente hochladen', () => {
   describe('check contents of step 3', () => {
     it('should show Max Testermann as Antragsteller, the default message text', () => {
       uploadFile(bescheidWizard.getUploadBescheidButton(), TEST_FILE_BESCHEID_VALID);
-      notExist(bescheidWizard.getBescheidUploadSpinner());
+      waitForSpinnerToDisappear();
 
       bescheidWizard.getWeiterButton().click();
 
diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-historie.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-historie.cy.ts
index 36320a61d712fa2189a6e23b43971de8fe1ffbf6..55c6b8b418ee3224b35210e6b963dbf78e03d268 100644
--- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-historie.cy.ts
+++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-historie.cy.ts
@@ -29,7 +29,10 @@ import { VorgangBescheideE2EComponent } from 'apps/alfa-e2e/src/components/vorga
 import { VorgangFormularButtonsE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-formular-buttons.e2e.components';
 import { VorgangFormularDatenE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-formular.e2e.component';
 import { VorgangSubnavigationE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-subnavigation';
-import { BescheidHistorieItemE2EComponent, VorgangFormularDatenHistorieItemE2EComponent, } from 'apps/alfa-e2e/src/components/vorgang/vorgang.formular-daten.historie.e2e.component';
+import {
+  BescheidHistorieItemE2EComponent,
+  VorgangFormularDatenHistorieItemE2EComponent,
+} from 'apps/alfa-e2e/src/components/vorgang/vorgang.formular-daten.historie.e2e.component';
 import { HistorieHeadlineE2E } from 'apps/alfa-e2e/src/model/historie';
 import { VorgangE2E, VorgangStatusE2E } from 'apps/alfa-e2e/src/model/vorgang';
 import { TEST_FILE_BESCHEID_ANHANG_VALID, TEST_FILE_BESCHEID_VALID } from 'apps/alfa-e2e/src/support/data.util';
@@ -110,9 +113,9 @@ describe('Bescheid History', () => {
         waitForSpinnerToDisappear();
 
         uploadFile(bescheidWizard.getUploadBescheidButton(), TEST_FILE_BESCHEID_VALID);
-        notExist(bescheidWizard.getBescheidUploadSpinner());
+        waitForSpinnerToDisappear();
         uploadFile(bescheidWizard.getUploadAttachmentButton(), TEST_FILE_BESCHEID_ANHANG_VALID);
-        notExist(bescheidWizard.getAttachmentUploadSpinner());
+        waitForSpinnerToDisappear();
         bescheidWizard.getWeiterButton().click();
         waitForSpinnerToDisappear();
         wait(waitForFormPatchMillis, 'Wait for patch form values to be completed.');
@@ -151,7 +154,7 @@ describe('Bescheid History', () => {
         waitForSpinnerToDisappear();
 
         uploadFile(bescheidWizard.getUploadBescheidButton(), TEST_FILE_BESCHEID_VALID);
-        notExist(bescheidWizard.getBescheidUploadSpinner());
+        waitForSpinnerToDisappear();
         bescheidWizard.getWeiterButton().click();
         waitForSpinnerToDisappear();
         wait(waitForFormPatchMillis, 'Wait for patch form values to be completed.');
@@ -186,17 +189,16 @@ describe('Bescheid History', () => {
         waitForSpinnerToDisappear();
 
         uploadFile(bescheidWizard.getUploadBescheidButton(), TEST_FILE_BESCHEID_VALID);
-        notExist(bescheidWizard.getBescheidUploadSpinner());
+        waitForSpinnerToDisappear();
         uploadFile(bescheidWizard.getUploadAttachmentButton(), TEST_FILE_BESCHEID_ANHANG_VALID);
-        notExist(bescheidWizard.getAttachmentUploadSpinner());
+        waitForSpinnerToDisappear();
         uploadFile(bescheidWizard.getUploadAttachmentButton(), TEST_FILE_BESCHEID_ANHANG_VALID);
-        notExist(bescheidWizard.getAttachmentUploadSpinner());
+        waitForSpinnerToDisappear();
         bescheidWizard.getWeiterButton().click();
         waitForSpinnerToDisappear();
 
         bescheidWizard.getSendButton().click();
-        exist(bescheidWizard.getSendenSpinner());
-        notExist(bescheidWizard.getSendenSpinner());
+        waitForSpinnerToDisappear();
 
         vorgangDatenFormular.getHistorieTab().click();
         const historieItemExpand: VorgangFormularDatenHistorieItemE2EComponent = vorgangDatenFormular.getHistorieItemByIndex(0);
diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-info-anzeigen.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-info-anzeigen.cy.ts
index a6d7e8cc4795a1794745211f20c99a6f4a7e213e..d0e5d9939d952ad91aad4b1539b7989decf1f00b 100644
--- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-info-anzeigen.cy.ts
+++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-info-anzeigen.cy.ts
@@ -132,9 +132,9 @@ describe('Bescheid Info anzeigen', () => {
 
     it('should upload files and continue to step 3', () => {
       bescheidWizard.uploadBescheid(TEST_FILE_BESCHEID_VALID);
-      bescheidWizard.bescheidUploadSpinnerIsClosed();
+      waitForSpinnerToDisappear();
       bescheidWizard.uploadAttachment(TEST_FILE_BESCHEID_ANHANG_VALID);
-      bescheidWizard.attachmentSpinnerIsClosed();
+      waitForSpinnerToDisappear();
       bescheidWizard.weiter();
 
       bescheidWizard.isBescheidVersendenStep();
@@ -193,7 +193,7 @@ describe('Bescheid Info anzeigen', () => {
 
     it('should upload Bescheid and continue to step 3', () => {
       bescheidWizard.uploadBescheid(TEST_FILE_BESCHEID_VALID);
-      bescheidWizard.bescheidUploadSpinnerIsClosed();
+      waitForSpinnerToDisappear();
       bescheidWizard.weiter();
       bescheidWizard.isBescheidVersendenStep();
     });
@@ -201,9 +201,7 @@ describe('Bescheid Info anzeigen', () => {
     it('should show 2 Bescheid containers after saving', () => {
       bescheidWizard.getSaveButton().click();
       bescheidWizard.getConfirmAndSaveButton().click();
-      exist(bescheidWizard.getBescheidSaveSpinner());
-      notExist(bescheidWizard.getBescheidSaveSpinner());
-
+      waitForSpinnerToDisappear();
       haveLength(bescheide.getBescheidContainer(), 2);
     });
 
diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-nur-speichern.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-nur-speichern.cy.ts
index f7c01770b981f35ce9753d9898b89648dfcfb685..54c4965b9fb8e41f6cced9749f375e472bc5a262 100644
--- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-nur-speichern.cy.ts
+++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-nur-speichern.cy.ts
@@ -83,9 +83,9 @@ describe('Bescheid speichern', () => {
       enterWith(bescheidWizard.getDateInput(), getAdjustedDateGerman(-1));
       bescheidWizard.getWeiterButton().click();
       uploadFile(bescheidWizard.getUploadBescheidButton(), TEST_FILE_BESCHEID_VALID);
-      notExist(bescheidWizard.getBescheidUploadSpinner());
+      waitForSpinnerToDisappear();
       uploadFile(bescheidWizard.getUploadAttachmentButton(), TEST_FILE_BESCHEID_ANHANG_VALID);
-      notExist(bescheidWizard.getAttachmentUploadSpinner());
+      waitForSpinnerToDisappear();
       bescheidWizard.getWeiterButton().click();
       waitForSpinnerToDisappear();
       wait(waitForFormPatchMillis, 'Wait for patch form values to be completed.');
diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-senden.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-senden.cy.ts
index 7d5ccdabee70ce2b9e5307e61cf20b79d18919f5..43e23febb7f15a82dd1431890c52590438388cfd 100644
--- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-senden.cy.ts
+++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-senden.cy.ts
@@ -32,10 +32,7 @@ import { VorgangBescheidWizardE2EComponent } from 'apps/alfa-e2e/src/components/
 import { VorgangFormularButtonsE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-formular-buttons.e2e.components';
 import { VorgangE2E, VorgangStatusE2E } from 'apps/alfa-e2e/src/model/vorgang';
 import { PostfachMailPage } from 'apps/alfa-e2e/src/page-objects/postfach-mail.component.po';
-import {
-  TEST_FILE_BESCHEID_ANHANG_VALID,
-  TEST_FILE_BESCHEID_VALID,
-} from 'apps/alfa-e2e/src/support/data.util';
+import { TEST_FILE_BESCHEID_ANHANG_VALID, TEST_FILE_BESCHEID_VALID } from 'apps/alfa-e2e/src/support/data.util';
 import { uploadFile } from 'apps/alfa-e2e/src/support/file-upload';
 import { getAdjustedDateGerman } from 'apps/alfa-e2e/src/support/tech.util';
 import 'cypress-real-events/support';
@@ -43,7 +40,7 @@ import { VorgangListE2EComponent } from '../../../components/vorgang/vorgang-lis
 import { MainPage, waitForSpinnerToDisappear } from '../../../page-objects/main.po';
 import { VorgangPage } from '../../../page-objects/vorgang.po';
 import { dropCollections } from '../../../support/cypress-helper';
-import { contains, enterWith, exist, notExist } from '../../../support/cypress.util';
+import { contains, enterWith, exist } from '../../../support/cypress.util';
 import { initUsermanagerUsers, loginAsSabine } from '../../../support/user-util';
 import { buildVorgang, initVorgaenge, objectIds } from '../../../support/vorgang-util';
 
@@ -66,8 +63,7 @@ describe('Bescheid senden', () => {
     status: VorgangStatusE2E.IN_BEARBEITUNG,
   };
 
-  const vorgangFormularButtons: VorgangFormularButtonsE2EComponent =
-    vorgangPage.getFormularButtons();
+  const vorgangFormularButtons: VorgangFormularButtonsE2EComponent = vorgangPage.getFormularButtons();
 
   before(() => {
     initVorgaenge([bescheidSendenVorgang]);
@@ -93,9 +89,9 @@ describe('Bescheid senden', () => {
         enterWith(bescheidWizard.getDateInput(), getAdjustedDateGerman(1));
         bescheidWizard.getWeiterButton().click();
         uploadFile(bescheidWizard.getUploadBescheidButton(), TEST_FILE_BESCHEID_VALID);
-        notExist(bescheidWizard.getBescheidUploadSpinner());
+        waitForSpinnerToDisappear();
         uploadFile(bescheidWizard.getUploadAttachmentButton(), TEST_FILE_BESCHEID_ANHANG_VALID);
-        notExist(bescheidWizard.getAttachmentUploadSpinner());
+        waitForSpinnerToDisappear();
         bescheidWizard.getWeiterButton().click();
 
         bescheidWizard.getSendButton().click();
@@ -114,21 +110,9 @@ describe('Bescheid senden', () => {
         const postfachListItem: PostfachMailListItem = postfachMailPage.getListItem(mailText);
         contains(postfachMailPage.getMailText(), anredeText);
 
-        exist(
-          postfachListItem
-            .getAttachmentContainer()
-            .getList()
-            .getItem(TEST_FILE_BESCHEID_VALID)
-            .getRoot(),
-        );
-
-        exist(
-          postfachListItem
-            .getAttachmentContainer()
-            .getList()
-            .getItem(TEST_FILE_BESCHEID_ANHANG_VALID)
-            .getRoot(),
-        );
+        exist(postfachListItem.getAttachmentContainer().getList().getItem(TEST_FILE_BESCHEID_VALID).getRoot());
+
+        exist(postfachListItem.getAttachmentContainer().getList().getItem(TEST_FILE_BESCHEID_ANHANG_VALID).getRoot());
       });
     });
   });
diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-wizard.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-wizard.cy.ts
index d02307f1af90ab1e2a3fdaa354534dd8861cba7c..06378019b3ceaf1a1d74e8143846923091b7c2a0 100644
--- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-wizard.cy.ts
+++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-wizard.cy.ts
@@ -118,7 +118,7 @@ describe('Bescheid Wizard', () => {
       bescheidWizard.getRoot().should('not.contain', stepCaption3);
 
       uploadFile(bescheidWizard.getUploadBescheidButton(), TEST_FILE_BESCHEID_VALID);
-      notExist(bescheidWizard.getBescheidUploadSpinner());
+      waitForSpinnerToDisappear();
       bescheidWizard.getWeiterButton().click();
       waitForSpinnerToDisappear();
       bescheidWizard.getRoot().contains(stepCaption1);
diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-dateien-tab.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-dateien-tab.cy.ts
index c93d89d9e08a0433aa15dc52a59e02b8a848f3c1..c1b5866cb7d4483cae346c7a3b036ae99654975c 100644
--- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-dateien-tab.cy.ts
+++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-detailansicht/vorgang-dateien-tab.cy.ts
@@ -140,7 +140,7 @@ describe('Dateien Tab', () => {
     it('should show attachments and download button', () => {
       exist(vorgangDatenFormular.getFileElementByName(jpgFileName));
       exist(vorgangDatenFormular.getFileElementByName(pdfFileName));
-      exist(attachmentList.getDownloadAttachmentsButton(vorgangDatenFormular.getRoot()));
+      exist(attachmentList.getDownloadArchiveButton());
     });
   });
 });
diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-xdomea/vorgang-xdomea-inhalte.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-xdomea/vorgang-xdomea-inhalte.cy.ts
index 1ed205ce1acecae3028a6682411de030b49c17cb..ff177ddcffc8fae0d04a2294b6c3176c07062abd 100644
--- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-xdomea/vorgang-xdomea-inhalte.cy.ts
+++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-xdomea/vorgang-xdomea-inhalte.cy.ts
@@ -36,10 +36,7 @@ import { VorgangAttachedItemE2E } from 'apps/alfa-e2e/src/model/vorgang-attached
 import { buildCommand, initCommands } from 'apps/alfa-e2e/src/support/command-util';
 import { TEST_FILE_BESCHEID_VALID } from 'apps/alfa-e2e/src/support/data.util';
 import { uploadFile } from 'apps/alfa-e2e/src/support/file-upload';
-import {
-  createKommentar,
-  createKommentarAttachedItem,
-} from 'apps/alfa-e2e/src/support/kommentar.util';
+import { createKommentar, createKommentarAttachedItem } from 'apps/alfa-e2e/src/support/kommentar.util';
 import { initVorgangAttachedItem } from 'apps/alfa-e2e/src/support/vorgang-attached-item-util';
 import { objectIds } from 'apps/alfa-e2e/src/support/vorgang-util';
 import { VorgangListE2EComponent } from '../../../components/vorgang/vorgang-list.e2e.component';
@@ -53,7 +50,7 @@ import {
   getDownloadFiles,
   unzipDownloadFile,
 } from '../../../support/cypress-helper';
-import { exist, notExist } from '../../../support/cypress.util';
+import { exist } from '../../../support/cypress.util';
 import { parseXml } from '../../../support/tech.util';
 import { getUserDorotheaId, initUsermanagerUsers, loginAsSabine } from '../../../support/user-util';
 import { createVorgang, initVorgang } from '../../../support/vorgang-util';
@@ -81,11 +78,7 @@ describe('check xDomea contents', () => {
   };
 
   const assignUserCommand: CommandE2E = {
-    ...buildCommand(
-      CommandOrderE2E.ASSIGN_USER,
-      vorgangExportieren._id.$oid,
-      vorgangExportieren._id.$oid,
-    ),
+    ...buildCommand(CommandOrderE2E.ASSIGN_USER, vorgangExportieren._id.$oid, vorgangExportieren._id.$oid),
     bodyObject: { assignedTo: getUserDorotheaId() },
     finishedAt: { $date: '2024-06-20T07:25:30.000Z' },
   };
@@ -102,11 +95,7 @@ describe('check xDomea contents', () => {
   };
 
   const setAktenzeichenCommand: CommandE2E = {
-    ...buildCommand(
-      CommandOrderE2E.SET_AKTENZEICHEN,
-      vorgangExportieren._id.$oid,
-      vorgangExportieren._id.$oid,
-    ),
+    ...buildCommand(CommandOrderE2E.SET_AKTENZEICHEN, vorgangExportieren._id.$oid, vorgangExportieren._id.$oid),
     order: CommandOrderE2E.SET_AKTENZEICHEN,
     bodyObject: { aktenzeichen: 'AKT_ENZ_EIC_HEN1' },
     finishedAt: { $date: '2024-06-19T07:25:30.000Z' },
@@ -121,8 +110,7 @@ describe('check xDomea contents', () => {
     item: kommentar,
   };
 
-  const vorgangFormularButtons: VorgangFormularButtonsE2EComponent =
-    vorgangPage.getFormularButtons();
+  const vorgangFormularButtons: VorgangFormularButtonsE2EComponent = vorgangPage.getFormularButtons();
 
   const bescheidWizard: VorgangBescheidWizardE2EComponent = vorgangPage.getBescheidWizard();
 
@@ -148,7 +136,7 @@ describe('check xDomea contents', () => {
       vorgangFormularButtons.getBescheidenButton().click();
       bescheidWizard.weiter();
       uploadFile(bescheidWizard.getUploadBescheidButton(), TEST_FILE_BESCHEID_VALID);
-      notExist(bescheidWizard.getBescheidUploadSpinner());
+      waitForSpinnerToDisappear();
       bescheidWizard.weiter();
       bescheidWizard.getSendButton().click();
       waitForSpinnerToDisappear();
@@ -237,12 +225,7 @@ describe('check xDomea contents', () => {
     return getXMLFromTagAtPosition(xdomeaNamespace, content, tagName, position);
   }
 
-  function getXMLFromTagAtPosition(
-    namespaceURI: string,
-    content: string,
-    tagName: string,
-    position: number,
-  ) {
+  function getXMLFromTagAtPosition(namespaceURI: string, content: string, tagName: string, position: number) {
     const xmlDoc = parseXml(content);
     return xmlDoc.getElementsByTagNameNS(namespaceURI, tagName)[position].textContent;
   }
@@ -273,9 +256,7 @@ describe('check xDomea contents', () => {
 
   function compareXmlEntry(xDomeaFile: string, xmlMap: Map<XmlTypePosition, string>) {
     xmlMap.forEach((expectedValue, xmlTypePosition) => {
-      expect(
-        getXdomeaNamespace(xDomeaFile, xmlTypePosition.type, xmlTypePosition.position),
-      ).to.equal(expectedValue);
+      expect(getXdomeaNamespace(xDomeaFile, xmlTypePosition.type, xmlTypePosition.position)).to.equal(expectedValue);
     });
   }
 
diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/wiedervorlage-attachment/wiedervorlage-attachment.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/wiedervorlage-attachment/wiedervorlage-attachment.cy.ts
index a32737f51ba4be5eb46a092f211db36236f239cf..fa176831377d0b9775f4991bdaa1ccd2454df68a 100644
--- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/wiedervorlage-attachment/wiedervorlage-attachment.cy.ts
+++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/wiedervorlage-attachment/wiedervorlage-attachment.cy.ts
@@ -21,10 +21,15 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { AttachmentContainerE2EComponent, AttachmentListE2EComponent, } from 'apps/alfa-e2e/src/components/attachment/attachment.e2e.component';
+import {
+  AttachmentContainerE2EComponent,
+  AttachmentListE2EComponent,
+} from 'apps/alfa-e2e/src/components/attachment/attachment.e2e.component';
 import { WiedervorlageSubnavigationE2EComponent } from 'apps/alfa-e2e/src/components/wiedervorlage/wiedervorlage-subnavigation';
+import { E2EAttachmentHelper } from 'apps/alfa-e2e/src/helper/attachment/attachment.helper';
+import { E2EWiedervorlageHelper } from 'apps/alfa-e2e/src/helper/wiedervorlage/wiedervorlage.helper';
 import { WiedervorlageE2E } from 'apps/alfa-e2e/src/model/wiedervorlage';
-import { dropCollections, readFileFromDownloads, wait } from 'apps/alfa-e2e/src/support/cypress-helper';
+import { dropCollections, readFileFromDownloads } from 'apps/alfa-e2e/src/support/cypress-helper';
 import { initVorgangAttachedItem } from 'apps/alfa-e2e/src/support/vorgang-attached-item-util';
 import { SnackBarE2EComponent } from '../../../components/ui/snackbar.e2e.component';
 import { VorgangListE2EComponent } from '../../../components/vorgang/vorgang-list.e2e.component';
@@ -37,7 +42,6 @@ import { VorgangPage } from '../../../page-objects/vorgang.po';
 import { WiedervorlagePage } from '../../../page-objects/wiedervorlage.po';
 import { containClass, contains, exist, haveLength, notContainClass, notExist } from '../../../support/cypress.util';
 import { TEST_FILE_WITH_CONTENT, TEST_FILE_WITH_CONTENT_46MB, TEST_FILE_WITHOUT_CONTENT } from '../../../support/data.util';
-import { uploadEmptyFile, uploadFile } from '../../../support/file-upload';
 import { loginAsSabine } from '../../../support/user-util';
 import { createVorgang, initVorgang, objectIds } from '../../../support/vorgang-util';
 import { createWiedervorlageAttachedItem, createWiedervorlageItem } from '../../../support/wiedervorlage-util';
@@ -60,6 +64,9 @@ describe('Wiedervorlage attachments', () => {
 
   const snackbar: SnackBarE2EComponent = mainPage.getSnackBar();
 
+  const wiedervorlageHelper: E2EWiedervorlageHelper = new E2EWiedervorlageHelper();
+  const attachmentHelper: E2EAttachmentHelper = new E2EAttachmentHelper();
+
   const WIEDERVORLAGE_WITH_ATTACHMENTS_BETREFF: string = 'WiedervorlageWithAttachments';
 
   const vorgang: VorgangE2E = createVorgang();
@@ -89,36 +96,31 @@ describe('Wiedervorlage attachments', () => {
     });
 
     it('should show wiedervorlage page on click on create wiedervorlage button', () => {
-      wiedervorlageContainerInVorgang.getCreateWiedervorlageButton().click();
-      waitForSpinnerToDisappear();
+      wiedervorlageHelper.openNewWiedervorlage();
 
       exist(wiedervorlagePage.getRoot());
     });
 
     it('should show empty attachment after upload', () => {
-      uploadEmptyFile(attachmentContainer.getUploadInput(), TEST_FILE_WITHOUT_CONTENT);
-      waitForSpinnerToDisappear();
+      attachmentHelper.uploadEmptyAttachment();
 
       exist(attachmentList.getItem(TEST_FILE_WITHOUT_CONTENT).getRoot());
     });
 
     it('should download empty attachment on click', () => {
-      attachmentList.getItem(TEST_FILE_WITHOUT_CONTENT).getDownloadButton().click();
-      waitForSpinnerToDisappear();
+      attachmentHelper.downloadAttachment(TEST_FILE_WITHOUT_CONTENT);
 
       exist(readFileFromDownloads(TEST_FILE_WITHOUT_CONTENT));
     });
 
     it('should show attachment with content after download', () => {
-      uploadFile(attachmentContainer.getUploadInput(), TEST_FILE_WITH_CONTENT);
-      waitForSpinnerToDisappear();
+      attachmentHelper.uploadAttachment(TEST_FILE_WITH_CONTENT);
 
       exist(attachmentList.getItem(TEST_FILE_WITH_CONTENT).getRoot());
     });
 
-    it('should show failed upload', { defaultCommandTimeout: 30000 }, () => {
-      uploadFile(attachmentContainer.getUploadInput(), TEST_FILE_WITH_CONTENT_46MB);
-      waitForSpinnerToDisappear();
+    it('should show failed upload on bigger size than allowed', { defaultCommandTimeout: 300000 }, () => {
+      attachmentHelper.uploadAttachment(TEST_FILE_WITH_CONTENT_46MB);
 
       exist(attachmentList.getLoadingOrErrorItem(TEST_FILE_WITH_CONTENT_46MB).getRoot());
       contains(
@@ -128,8 +130,7 @@ describe('Wiedervorlage attachments', () => {
     });
 
     it('should download attachment on click', () => {
-      attachmentList.getItem(TEST_FILE_WITH_CONTENT).getDownloadButton().click();
-      waitForSpinnerToDisappear();
+      attachmentHelper.downloadAttachment(TEST_FILE_WITH_CONTENT);
 
       exist(readFileFromDownloads(TEST_FILE_WITH_CONTENT));
     });
@@ -205,22 +206,63 @@ describe('Wiedervorlage attachments', () => {
     });
   });
 
-  describe('Delete attachment', () => {
+  describe('Upload multiple attachments', () => {
     const wiedervorlageComp: WiedervorlageInVorgangE2EComponent = wiedervorlageContainerInVorgang.getWiedervorlage(
       WIEDERVORLAGE_WITH_ATTACHMENTS_BETREFF,
     );
 
     it('should open wiedervorlage page', () => {
-      wiedervorlageComp.getLink().click();
+      wiedervorlageHelper.openWiedervorlage(WIEDERVORLAGE_WITH_ATTACHMENTS_BETREFF);
+
+      exist(attachmentList.getItem(TEST_FILE_WITHOUT_CONTENT).getRoot());
+      exist(attachmentList.getItem(TEST_FILE_WITH_CONTENT).getRoot());
+    });
+
+    it('should delete all', () => {
+      attachmentHelper.deleteAttachment(TEST_FILE_WITH_CONTENT);
+      attachmentHelper.deleteAttachment(TEST_FILE_WITHOUT_CONTENT);
+
+      notExist(attachmentList.getItem(TEST_FILE_WITH_CONTENT).getRoot());
+      notExist(attachmentList.getItem(TEST_FILE_WITHOUT_CONTENT).getRoot());
+    });
+
+    it('should do upload', () => {
+      attachmentHelper.uploadAttachments([TEST_FILE_WITHOUT_CONTENT, TEST_FILE_WITH_CONTENT]);
+
+      exist(attachmentList.getItem(TEST_FILE_WITHOUT_CONTENT).getRoot());
+      exist(attachmentList.getItem(TEST_FILE_WITH_CONTENT).getRoot());
+
+      wiedervorlageContainer.getSpeichernButton().click();
+      exist(snackbar.getMessage());
+      contains(snackbar.getMessage(), `Die Wiedervorlage "${WIEDERVORLAGE_WITH_ATTACHMENTS_BETREFF}" wurde gespeichert`);
+      snackbar.getCloseButton().click();
+    });
+
+    it('check attachments in wiedervorlage list', () => {
       waitForSpinnerToDisappear();
 
+      wiedervorlageComp.getExpandButton();
+      wiedervorlageComp.expandItem();
+
+      exist(wiedervorlageComp.getAttachmentContainer().getList().getItem(TEST_FILE_WITHOUT_CONTENT).getRoot());
+      exist(wiedervorlageComp.getAttachmentContainer().getList().getItem(TEST_FILE_WITH_CONTENT).getRoot());
+    });
+  });
+
+  describe('Delete attachment', () => {
+    const wiedervorlageComp: WiedervorlageInVorgangE2EComponent = wiedervorlageContainerInVorgang.getWiedervorlage(
+      WIEDERVORLAGE_WITH_ATTACHMENTS_BETREFF,
+    );
+
+    it('should open wiedervorlage page', () => {
+      wiedervorlageHelper.openWiedervorlage(WIEDERVORLAGE_WITH_ATTACHMENTS_BETREFF);
+
       exist(attachmentList.getItem(TEST_FILE_WITHOUT_CONTENT).getRoot());
       exist(attachmentList.getItem(TEST_FILE_WITH_CONTENT).getRoot());
     });
 
     it('delete', () => {
-      attachmentList.getItem(TEST_FILE_WITHOUT_CONTENT).getDeleteButton().click();
-      waitForSpinnerToDisappear();
+      attachmentHelper.deleteAttachment(TEST_FILE_WITHOUT_CONTENT);
 
       notExist(attachmentList.getItem(TEST_FILE_WITHOUT_CONTENT).getRoot());
       exist(attachmentList.getItem(TEST_FILE_WITH_CONTENT).getRoot());
@@ -239,6 +281,7 @@ describe('Wiedervorlage attachments', () => {
 
       wiedervorlageComp.getExpandButton();
       wiedervorlageComp.expandItem();
+      waitForSpinnerToDisappear();
 
       notExist(wiedervorlageComp.getAttachmentContainer().getList().getItem(TEST_FILE_WITHOUT_CONTENT).getRoot());
       exist(wiedervorlageComp.getAttachmentContainer().getList().getItem(TEST_FILE_WITH_CONTENT).getRoot());
@@ -251,28 +294,22 @@ describe('Wiedervorlage attachments', () => {
     );
 
     it('should not show any attachments', () => {
-      wiedervorlageComp.getLink().click();
-      waitForSpinnerToDisappear();
+      wiedervorlageHelper.openWiedervorlage(wiedervorlage.betreff);
 
       notExist(wiedervorlageComp.getAttachmentContainer().getList().getItem(TEST_FILE_WITHOUT_CONTENT).getRoot());
       notExist(wiedervorlageComp.getAttachmentContainer().getList().getItem(TEST_FILE_WITH_CONTENT).getRoot());
 
       wiedervorlagePage.getSubnavigation().navigateBack();
+      waitForSpinnerToDisappear();
     });
   });
 
   describe('Same number of attachments after status change', () => {
-    const wiedervorlageComp: WiedervorlageInVorgangE2EComponent = wiedervorlageContainerInVorgang.getWiedervorlage(
-      WIEDERVORLAGE_WITH_ATTACHMENTS_BETREFF,
-    );
-
     it('should open wiedervorlage page', () => {
-      wait(500);
-      wiedervorlageComp.getLink().click();
-
-      waitForSpinnerToDisappear();
+      wiedervorlageHelper.openWiedervorlage(WIEDERVORLAGE_WITH_ATTACHMENTS_BETREFF);
 
       exist(attachmentList.getItem(TEST_FILE_WITH_CONTENT).getRoot());
+      notExist(attachmentList.getItem(TEST_FILE_WITHOUT_CONTENT).getRoot());
     });
 
     it('should mark as erledigt', () => {
@@ -317,8 +354,7 @@ describe('Wiedervorlage attachments', () => {
 
   describe('delete last attachment', () => {
     it('should remove on delete', () => {
-      attachmentList.getItem(TEST_FILE_WITH_CONTENT).getDeleteButton().click();
-      waitForSpinnerToDisappear();
+      attachmentHelper.deleteAttachment(TEST_FILE_WITH_CONTENT);
 
       notExist(attachmentList.getItem(TEST_FILE_WITH_CONTENT).getRoot());
     });
@@ -337,7 +373,7 @@ describe('Wiedervorlage attachments', () => {
       notExist(snackBar.getMessage());
     });
 
-    it('(Skip reason in OZG-4658) should have no attachments after save', () => {
+    it('should have no attachments after save', () => {
       const wiedervorlageComp: WiedervorlageInVorgangE2EComponent = wiedervorlageContainerInVorgang.getWiedervorlage(
         WIEDERVORLAGE_WITH_ATTACHMENTS_BETREFF,
       );
diff --git a/alfa-client/apps/alfa-e2e/src/helper/attachment/attachment.executor.ts b/alfa-client/apps/alfa-e2e/src/helper/attachment/attachment.executor.ts
new file mode 100644
index 0000000000000000000000000000000000000000..25b0dce789373955a60b97632848ac2c8c218dde
--- /dev/null
+++ b/alfa-client/apps/alfa-e2e/src/helper/attachment/attachment.executor.ts
@@ -0,0 +1,44 @@
+import { AttachmentContainerE2EComponent, AttachmentE2EItem } from '../../components/attachment/attachment.e2e.component';
+import { waitForSpinnerToDisappear } from '../../page-objects/main.po';
+import { exist, notExist } from '../../support/cypress.util';
+import { uploadEmptyFile, uploadFiles } from '../../support/file-upload';
+
+export class E2EAttachmentExecutor {
+  private readonly attachmentContainer: AttachmentContainerE2EComponent = new AttachmentContainerE2EComponent();
+
+  public uploadAttachment(fileNames: string[]): void {
+    uploadFiles(this.getUploadInput(), fileNames);
+    waitForSpinnerToDisappear();
+  }
+
+  public uploadEmptyAttachment(fileName: string): void {
+    uploadEmptyFile(this.getUploadInput(), fileName);
+    waitForSpinnerToDisappear();
+  }
+
+  private getUploadInput(): Cypress.Chainable<HTMLElement> {
+    return this.attachmentContainer.getUploadInput();
+  }
+
+  public deleteAttachments(fileNames: string[]): void {
+    fileNames.forEach((fileName: string) => this.deleteAttachment(fileName));
+  }
+
+  private deleteAttachment(fileName: string): void {
+    const attachment: AttachmentE2EItem = this.getAttachment(fileName);
+    exist(attachment.getRoot());
+    attachment.getDeleteButton().click();
+    notExist(attachment.getRoot());
+  }
+
+  public downloadAttachment(fileName: string): void {
+    const attachment: AttachmentE2EItem = this.getAttachment(fileName);
+    exist(attachment.getRoot());
+    attachment.getDownloadButton().click();
+    waitForSpinnerToDisappear();
+  }
+
+  private getAttachment(fileName: string): AttachmentE2EItem {
+    return this.attachmentContainer.getList().getItem(fileName);
+  }
+}
diff --git a/alfa-client/apps/alfa-e2e/src/helper/attachment/attachment.helper.ts b/alfa-client/apps/alfa-e2e/src/helper/attachment/attachment.helper.ts
new file mode 100644
index 0000000000000000000000000000000000000000..dd9743081a8eae3596b692daf53ff5b2479ce74b
--- /dev/null
+++ b/alfa-client/apps/alfa-e2e/src/helper/attachment/attachment.helper.ts
@@ -0,0 +1,30 @@
+import { TEST_FILE_WITH_CONTENT, TEST_FILE_WITHOUT_CONTENT } from '../../support/data.util';
+import { E2EAttachmentExecutor } from './attachment.executor';
+
+export class E2EAttachmentHelper {
+  private readonly executor: E2EAttachmentExecutor = new E2EAttachmentExecutor();
+
+  public deleteAttachment(fileName: string): void {
+    this.deleteAttachments([fileName]);
+  }
+
+  public deleteAttachments(fileNames: string[]): void {
+    this.executor.deleteAttachments(fileNames);
+  }
+
+  public uploadAttachment(fileName: string = TEST_FILE_WITH_CONTENT): void {
+    this.uploadAttachments([fileName]);
+  }
+
+  public uploadAttachments(fileNames: string[]): void {
+    this.executor.uploadAttachment(fileNames);
+  }
+
+  public uploadEmptyAttachment(fileName: string = TEST_FILE_WITHOUT_CONTENT): void {
+    this.executor.uploadEmptyAttachment(fileName);
+  }
+
+  public downloadAttachment(fileName: string): void {
+    this.executor.downloadAttachment(fileName);
+  }
+}
diff --git a/alfa-client/apps/alfa-e2e/src/helper/attachment/attachment.verifier.ts b/alfa-client/apps/alfa-e2e/src/helper/attachment/attachment.verifier.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2c68292a0e10bdfac3e20d83377120a258d08b25
--- /dev/null
+++ b/alfa-client/apps/alfa-e2e/src/helper/attachment/attachment.verifier.ts
@@ -0,0 +1,23 @@
+import { AttachmentContainerE2EComponent } from '../../components/attachment/attachment.e2e.component';
+import { readFileFromDownloads } from '../../support/cypress-helper';
+import { exist, notExist } from '../../support/cypress.util';
+
+export class E2EAttachmentVerifier {
+  private readonly attachmentContainer: AttachmentContainerE2EComponent = new AttachmentContainerE2EComponent();
+
+  public verifyAttachmentsInList(filesNames: string[]): void {
+    filesNames.forEach((filesName: string) => this.verifyAttachmentInList(filesName));
+  }
+
+  public verifyAttachmentInList(filesName: string): void {
+    exist(this.attachmentContainer.getList().getItem(filesName).getRoot());
+  }
+
+  public verifyAttachmentNotInList(filesName: string): void {
+    notExist(this.attachmentContainer.getList().getItem(filesName).getRoot());
+  }
+
+  public verifyAttachmentDownload(fileName: string): void {
+    exist(readFileFromDownloads(fileName));
+  }
+}
diff --git a/alfa-client/apps/alfa-e2e/src/helper/kommentar/kommentar.executor.ts b/alfa-client/apps/alfa-e2e/src/helper/kommentar/kommentar.executor.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/alfa-client/apps/alfa-e2e/src/helper/wiedervorlage/wiedervorlage.helper.ts b/alfa-client/apps/alfa-e2e/src/helper/wiedervorlage/wiedervorlage.helper.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2c6c96e50c79a44ee3d6a771d16e5a74fb3bd1a5
--- /dev/null
+++ b/alfa-client/apps/alfa-e2e/src/helper/wiedervorlage/wiedervorlage.helper.ts
@@ -0,0 +1,13 @@
+import { E2EWiedervorlageNavigator } from './wiedervorlage.navigator';
+
+export class E2EWiedervorlageHelper {
+  private navigator: E2EWiedervorlageNavigator = new E2EWiedervorlageNavigator();
+
+  public openWiedervorlage(betreff: string): void {
+    this.navigator.openWiedervorlage(betreff);
+  }
+
+  public openNewWiedervorlage(): void {
+    this.navigator.openNewWiedervorlage();
+  }
+}
diff --git a/alfa-client/apps/alfa-e2e/src/helper/wiedervorlage/wiedervorlage.navigator.ts b/alfa-client/apps/alfa-e2e/src/helper/wiedervorlage/wiedervorlage.navigator.ts
new file mode 100644
index 0000000000000000000000000000000000000000..42fe2c26a02ce0b3518c7bcd0f39aabaf9a25edd
--- /dev/null
+++ b/alfa-client/apps/alfa-e2e/src/helper/wiedervorlage/wiedervorlage.navigator.ts
@@ -0,0 +1,26 @@
+import { WiedervorlageInVorgangE2EComponent } from '../../components/wiedervorlage/wiedervorlage-in-vorgang.e2e.component';
+import { WiedervorlagenInVorgangE2EComponent } from '../../components/wiedervorlage/wiedervorlagen-in-vorgang.e2e.component';
+import { VorgangPage } from '../../page-objects/vorgang.po';
+import { WiedervorlagePage } from '../../page-objects/wiedervorlage.po';
+import { exist } from '../../support/cypress.util';
+
+export class E2EWiedervorlageNavigator {
+  private vorgangPage: VorgangPage = new VorgangPage();
+  private wiedervorlagenInVorgang: WiedervorlagenInVorgangE2EComponent = this.vorgangPage.getWiedervorlagenContainer();
+
+  private wiedervorlagePage: WiedervorlagePage = new WiedervorlagePage();
+
+  public openWiedervorlage(betreff: string): void {
+    const wiedervorlageInVorgang: WiedervorlageInVorgangE2EComponent = this.wiedervorlagenInVorgang.getWiedervorlage(betreff);
+    exist(wiedervorlageInVorgang.getRoot());
+    exist(wiedervorlageInVorgang.getLink());
+    wiedervorlageInVorgang.getLink().click();
+    exist(this.wiedervorlagePage.getHeadline());
+  }
+
+  public openNewWiedervorlage(): void {
+    exist(this.wiedervorlagenInVorgang.getCreateWiedervorlageButton());
+    this.wiedervorlagenInVorgang.getCreateWiedervorlageButton().click();
+    exist(this.wiedervorlagePage.getHeadline());
+  }
+}
diff --git a/alfa-client/apps/alfa-e2e/src/page-objects/vorgang.po.ts b/alfa-client/apps/alfa-e2e/src/page-objects/vorgang.po.ts
index caa0e2872c6ffb9820602075dd194c072b8b6008..6a1d1b397b3e0a9eb91362cd0220230b67a5db14 100644
--- a/alfa-client/apps/alfa-e2e/src/page-objects/vorgang.po.ts
+++ b/alfa-client/apps/alfa-e2e/src/page-objects/vorgang.po.ts
@@ -22,7 +22,7 @@
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
 import { AttachmentContainerE2EComponent } from '../components/attachment/attachment.e2e.component';
-import { KommentareInVorgangE2EComponent } from '../components/kommentar/kommentar-list.e2e.component';
+import { KommentarListInVorgangE2EComponent } from '../components/kommentar/kommentar-list.e2e.component';
 import { PostfachMailFormularE2EComponent } from '../components/postfach/postfach-mail-formular.e2e.component';
 import { PostfachMailE2EComponent } from '../components/postfach/postfach-mail.e2e.component';
 import { FixedDialogE2EComponent } from '../components/ui/fixed-dialog.e2e.component';
@@ -40,42 +40,29 @@ import { VorgangZusammenarbeitE2EComponent } from '../components/vorgang/vorgang
 import { WiedervorlagenInVorgangE2EComponent } from '../components/wiedervorlage/wiedervorlagen-in-vorgang.e2e.component';
 
 export class VorgangPage {
-  private readonly subnavigation: VorgangSubnavigationE2EComponent =
-    new VorgangSubnavigationE2EComponent();
-  private readonly vorgangDetailHeader: VorgangDetailHeaderE2EComponent =
-    new VorgangDetailHeaderE2EComponent();
-  private readonly formularDatenContainer: VorgangFormularDatenE2EComponent =
-    new VorgangFormularDatenE2EComponent();
-  private readonly formularButtons: VorgangFormularButtonsE2EComponent =
-    new VorgangFormularButtonsE2EComponent();
+  private readonly subnavigation: VorgangSubnavigationE2EComponent = new VorgangSubnavigationE2EComponent();
+  private readonly vorgangDetailHeader: VorgangDetailHeaderE2EComponent = new VorgangDetailHeaderE2EComponent();
+  private readonly formularDatenContainer: VorgangFormularDatenE2EComponent = new VorgangFormularDatenE2EComponent();
+  private readonly formularButtons: VorgangFormularButtonsE2EComponent = new VorgangFormularButtonsE2EComponent();
   private readonly moreMenu: VorgangMoreMenuE2EComponent = new VorgangMoreMenuE2EComponent();
-  private readonly aktenzeichenEditor: VorgangAktenzeichenEditE2EComponent =
-    new VorgangAktenzeichenEditE2EComponent();
-  private readonly bescheidWizard: VorgangBescheidWizardE2EComponent =
-    new VorgangBescheidWizardE2EComponent();
+  private readonly aktenzeichenEditor: VorgangAktenzeichenEditE2EComponent = new VorgangAktenzeichenEditE2EComponent();
+  private readonly bescheidWizard: VorgangBescheidWizardE2EComponent = new VorgangBescheidWizardE2EComponent();
   private readonly bescheide: VorgangBescheideE2EComponent = new VorgangBescheideE2EComponent();
-  private readonly wiedervorlagen: WiedervorlagenInVorgangE2EComponent =
-    new WiedervorlagenInVorgangE2EComponent();
-  private readonly forwardingContainer: VorgangForwardingE2EComponent =
-    new VorgangForwardingE2EComponent();
-  private readonly attachmentContainer: AttachmentContainerE2EComponent =
-    new AttachmentContainerE2EComponent();
-  private readonly kommentarContainer: KommentareInVorgangE2EComponent =
-    new KommentareInVorgangE2EComponent();
+  private readonly wiedervorlagen: WiedervorlagenInVorgangE2EComponent = new WiedervorlagenInVorgangE2EComponent();
+  private readonly forwardingContainer: VorgangForwardingE2EComponent = new VorgangForwardingE2EComponent();
+  private readonly attachmentContainer: AttachmentContainerE2EComponent = new AttachmentContainerE2EComponent();
+  private readonly kommentarContainer: KommentarListInVorgangE2EComponent = new KommentarListInVorgangE2EComponent();
   private readonly postfachMailContainer: PostfachMailE2EComponent = new PostfachMailE2EComponent();
-  private readonly antragstellerContainer: AntragstellerE2EComponent =
-    new AntragstellerE2EComponent();
-  private readonly zusammenArbeitContainer: VorgangZusammenarbeitE2EComponent =
-    new VorgangZusammenarbeitE2EComponent();
+  private readonly antragstellerContainer: AntragstellerE2EComponent = new AntragstellerE2EComponent();
+  private readonly zusammenArbeitContainer: VorgangZusammenarbeitE2EComponent = new VorgangZusammenarbeitE2EComponent();
 
   private readonly fixedDialog: FixedDialogE2EComponent = new FixedDialogE2EComponent();
-  private readonly postfachMailFormular: PostfachMailFormularE2EComponent =
-    new PostfachMailFormularE2EComponent();
+  private readonly postfachMailFormular: PostfachMailFormularE2EComponent = new PostfachMailFormularE2EComponent();
 
   private readonly locatorSpinner: string = 'spinner';
   private readonly locatorProgressBar: string = 'progress-bar';
 
-  public getKommentarContainer(): KommentareInVorgangE2EComponent {
+  public getKommentarContainer(): KommentarListInVorgangE2EComponent {
     return this.kommentarContainer;
   }
 
diff --git a/alfa-client/apps/alfa-e2e/src/page-objects/wiedervorlage.po.ts b/alfa-client/apps/alfa-e2e/src/page-objects/wiedervorlage.po.ts
index ce5c00e85ce61eb22109881bf26ab4bf3f121b02..cf253b1d3e54ade65ed5711a9b689e88b2640baf 100644
--- a/alfa-client/apps/alfa-e2e/src/page-objects/wiedervorlage.po.ts
+++ b/alfa-client/apps/alfa-e2e/src/page-objects/wiedervorlage.po.ts
@@ -25,20 +25,24 @@ import { WiedervorlageE2EComponent } from '../components/wiedervorlage/wiedervor
 import { WiedervorlageSubnavigationE2EComponent } from '../components/wiedervorlage/wiedervorlage-subnavigation';
 
 export class WiedervorlagePage {
-  private readonly subnavigation: WiedervorlageSubnavigationE2EComponent =
-    new WiedervorlageSubnavigationE2EComponent();
-  private readonly wiedervorlageContainer: WiedervorlageE2EComponent =
-    new WiedervorlageE2EComponent();
-  private readonly locatorWiedervorlagePage: string = 'wiedervorlage-page';
+  private readonly root: string = 'wiedervorlage-page';
 
-  public getRoot() {
-    return cy.getTestElement(this.locatorWiedervorlagePage);
+  private readonly subnavigation: WiedervorlageSubnavigationE2EComponent = new WiedervorlageSubnavigationE2EComponent();
+  private readonly headline: string = 'wiedervorlage-headline';
+  private readonly wiedervorlageContainer: WiedervorlageE2EComponent = new WiedervorlageE2EComponent();
+
+  public getRoot(): Cypress.Chainable<Element> {
+    return cy.getTestElement(this.root);
   }
 
   public getSubnavigation(): WiedervorlageSubnavigationE2EComponent {
     return this.subnavigation;
   }
 
+  public getHeadline(): Cypress.Chainable<Element> {
+    return cy.getTestElement(this.headline);
+  }
+
   public getWiedervorlageContainer(): WiedervorlageE2EComponent {
     return this.wiedervorlageContainer;
   }
diff --git a/alfa-client/apps/alfa-e2e/src/support/cypress-helper.ts b/alfa-client/apps/alfa-e2e/src/support/cypress-helper.ts
index 9c2bd2f7944d04ee78e668cf89f1cbe9c396689f..b4f477e2422f3bd0ea391d7d3259c29bd4b2a8a6 100644
--- a/alfa-client/apps/alfa-e2e/src/support/cypress-helper.ts
+++ b/alfa-client/apps/alfa-e2e/src/support/cypress-helper.ts
@@ -134,11 +134,12 @@ export function initUsermanagerData(data: UsermanagerUserE2E[]): void {
   cy.task(CypressTasks.INIT_USERMANAGER_DATA, { collection: MongoCollections.USER, data });
 }
 
-export function dropCollections() {
+export function dropCollections(): void {
   cy.task(CypressTasks.DROP_COLLECTIONS, [
     MongoCollections.COMMAND,
     MongoCollections.VORGANG,
     MongoCollections.VORGANG_ATTACHED_ITEM,
+    MongoCollections.OZG_CLOUD_FILE,
     MongoCollections.FS_FILES,
     MongoCollections.FS_CHUNKS,
   ]);
diff --git a/alfa-client/apps/alfa-e2e/src/support/data.util.ts b/alfa-client/apps/alfa-e2e/src/support/data.util.ts
index 47f84cd7927ba964684b1de514a846d866d188af..46c335ab573be9cd33c24970ebd37cce56f1da15 100644
--- a/alfa-client/apps/alfa-e2e/src/support/data.util.ts
+++ b/alfa-client/apps/alfa-e2e/src/support/data.util.ts
@@ -36,10 +36,13 @@ export const ORGANISATIONSEINHEITEN_ID_FOR_ADELHEIT = '10363455';
 export const ORGANISATIONSEINHEITEN_ID_FOR_SABINE = '9030229';
 export const ORGANISATIONSEINHEITEN_ID_FOR_BEATE = '12345678';
 
+//TODO Rename = nicht fachlich bezogen bspw. TEST_FILE_WITH_CONTENT_5_MB anstelle von "invalid" oder "big"
 export const TEST_FILE_BESCHEID_VALID: string = 'Bescheid_valid.pdf';
 export const TEST_FILE_BESCHEID_BIG: string = 'Bescheid_5mb.pdf';
 export const TEST_FILE_BESCHEID_ANHANG_VALID: string = 'Anhang_valid.pdf';
 export const TEST_FILE_BESCHEID_ANHANG_BIG: string = 'Anhang_5mb.pdf';
+//
+
 export const TEST_FILE_JPG: string = 'small_jpg.jpg';
 export const TEST_FILE_JPEG: string = 'small_jpeg.jpeg';
 export const TEST_FILE_PNG: string = 'small_png.png';
diff --git a/alfa-client/apps/alfa-e2e/src/support/file-upload.ts b/alfa-client/apps/alfa-e2e/src/support/file-upload.ts
index eb8b69908acb11159d4c8b35d1ee8471bc4b9637..d01cc9a98299f7766f316a5b84bda890e4c7e3ba 100644
--- a/alfa-client/apps/alfa-e2e/src/support/file-upload.ts
+++ b/alfa-client/apps/alfa-e2e/src/support/file-upload.ts
@@ -23,10 +23,14 @@
  */
 import 'cypress-file-upload';
 
-export function uploadFile(inputElement: any, fileName: string): void {
-  inputElement.attachFile(fileName);
+export function uploadFile(inputElement: Cypress.Chainable<HTMLElement>, fileName: string): void {
+  uploadFiles(inputElement, [fileName]);
 }
 
-export function uploadEmptyFile(inputElement: any, fileName: string): void {
+export function uploadFiles(inputElement: Cypress.Chainable<HTMLElement>, fileNames: string[]): void {
+  inputElement.attachFile(fileNames);
+}
+
+export function uploadEmptyFile(inputElement: Cypress.Chainable<HTMLElement>, fileName: string): void {
   inputElement.attachFile(fileName, { allowEmpty: true });
 }
diff --git a/alfa-client/apps/demo/src/app/app.component.html b/alfa-client/apps/demo/src/app/app.component.html
index 226972864701eedbc6a7b16461f51f85130a88aa..22a2f09c8bd01b957ed678fd264ac675685cf402 100644
--- a/alfa-client/apps/demo/src/app/app.component.html
+++ b/alfa-client/apps/demo/src/app/app.component.html
@@ -56,6 +56,70 @@
         <ods-button destructive="true" variant="ghost" text="Organisationseinheit hinzufügen" />
       </div>
 
+      <div class="my-12">
+        <h1 class="mb-6 text-2xl font-semibold text-text">Auswertungen</h1>
+        <ods-button text="Auswertung hinzufügen" />
+        <ul class="mt-6 divide-y divide-gray-300 rounded-md bg-background-50 text-text shadow-sm ring-1 ring-gray-300">
+          <li>
+            <a
+              href="#"
+              class="flex flex-col items-start justify-between gap-2 rounded-t-md border-primary-600/50 px-6 py-4 hover:bg-background-150 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus lg:flex-row lg:gap-6"
+            >
+              <div class="flex-1">
+                <div class="flex flex-wrap items-center gap-x-3">
+                  <h3 class="text-md font-semibold">Titel der Auswertung</h3>
+                </div>
+              </div>
+
+              <dl class="flex-1">
+                <dt class="sr-only">Formengine:</dt>
+                <dd>Formsolutions</dd>
+                <dt class="sr-only">FormID:</dt>
+                <dd>waffen/kleinerWaffenscheinKOPutopia</dd>
+              </dl>
+            </a>
+          </li>
+          <li>
+            <a
+              href="#"
+              class="flex flex-col items-start justify-between gap-2 rounded-t-md border-primary-600/50 px-6 py-4 hover:bg-background-150 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus lg:flex-row lg:gap-6"
+            >
+              <div class="flex-1">
+                <div class="flex flex-wrap items-center gap-x-3">
+                  <h3 class="text-md font-semibold">Auswertungstitel 2</h3>
+                </div>
+              </div>
+
+              <dl class="flex-1">
+                <dt class="sr-only">Formengine:</dt>
+                <dd>AFM / cit/Intelliform</dd>
+                <dt class="sr-only">FormID:</dt>
+                <dd>eGewerbe/eGewerbeAnmeldung</dd>
+              </dl>
+            </a>
+          </li>
+          <li>
+            <a
+              href="#"
+              class="flex flex-col items-start justify-between gap-2 rounded-t-md border-primary-600/50 px-6 py-4 hover:bg-background-150 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus lg:flex-row lg:gap-6"
+            >
+              <div class="flex-1">
+                <div class="flex flex-wrap items-center gap-x-3">
+                  <h3 class="text-md font-semibold">Titel 3</h3>
+                </div>
+              </div>
+
+              <dl class="flex-1">
+                <dt class="sr-only">Formengine:</dt>
+                <dd>dFördermittelantrag</dd>
+                <dt class="sr-only">FormID:</dt>
+                <dd>waffen/kleinerWaffenschein</dd>
+              </dl>
+            </a>
+          </li>
+        </ul>
+      </div>
+
       <div class="my-12">
         <h1 class="mb-6 text-2xl font-semibold text-text">Organisationseinheiten</h1>
         <ods-button text="Organisationseinheit hinzufügen" />
diff --git a/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.spec.ts b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.spec.ts
index 2f207e5573f8398234d5d01e201430a4c4e34303..18827db0127eebb847a3082817bc397fdc6394e0 100644
--- a/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.spec.ts
+++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.spec.ts
@@ -23,16 +23,18 @@
  */
 import { OrganisationsEinheitContainerComponent } from '@admin-client/organisations-einheit';
 import { AdminOrganisationsEinheit, AdminOrganisationsEinheitService } from '@admin-client/organisations-einheit-shared';
-import { createStateResource, StateResource, ToEmbeddedResourcesPipe } from '@alfa-client/tech-shared';
+import { createStateResource, StateResource } from '@alfa-client/tech-shared';
 import { existsAsHtmlElement, getMockComponent, Mock, mock } from '@alfa-client/test-utils';
-import { OzgcloudDialogService } from '@alfa-client/ui';
-import { OrganisationsEinheitResource } from '@alfa-client/zustaendige-stelle-shared';
+import { OzgcloudDialogService, SpinnerComponent } from '@alfa-client/ui';
+import { ZustaendigeStelleModule } from '@alfa-client/zustaendige-stelle';
+import { OrganisationsEinheitResource, ZustaendigeStelleSharedModule } from '@alfa-client/zustaendige-stelle-shared';
 import { CommonModule } from '@angular/common';
 import { ViewContainerRef } from '@angular/core';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { ButtonComponent } from '@ods/system';
 import { createAdminOrganisationsEinheit } from 'libs/admin/organisations-einheit-shared/src/test/organisations-einheit';
 import { getDataTestIdOf } from 'libs/tech-shared/test/data-test';
-import { MockComponent } from 'ng-mocks';
+import { MockComponent, MockModule } from 'ng-mocks';
 import { of } from 'rxjs';
 import { createOrganisationsEinheitResource } from '../../../../../zustaendige-stelle-shared/test/organisations-einheit';
 import { OrganisationsEinheitListComponent } from './organisations-einheit-list/organisations-einheit-list.component';
@@ -43,7 +45,8 @@ describe('OrganisationsEinheitContainerComponent', () => {
 
   let organisationsEinheitService: Mock<AdminOrganisationsEinheitService>;
   let dialogService: Mock<OzgcloudDialogService>;
-  let vieContainerRef: Mock<ViewContainerRef>;
+
+  const viewContainerRef = <any>{};
 
   const organisationsEinheit: AdminOrganisationsEinheit = createAdminOrganisationsEinheit();
   const organisationsEinheitListStateResource: StateResource<AdminOrganisationsEinheit[]> = createStateResource([
@@ -60,17 +63,24 @@ describe('OrganisationsEinheitContainerComponent', () => {
       refresh: jest.fn(),
     };
     dialogService = mock(OzgcloudDialogService);
-    vieContainerRef = mock(ViewContainerRef as any);
   });
 
   beforeEach(async () => {
     await TestBed.configureTestingModule({
-      declarations: [ToEmbeddedResourcesPipe],
-      imports: [CommonModule, OrganisationsEinheitContainerComponent, MockComponent(OrganisationsEinheitListComponent)],
+      declarations: [],
+      imports: [
+        OrganisationsEinheitContainerComponent,
+        MockModule(CommonModule),
+        MockModule(ZustaendigeStelleModule),
+        MockModule(ZustaendigeStelleSharedModule),
+        MockComponent(OrganisationsEinheitListComponent),
+        MockComponent(ButtonComponent),
+        MockComponent(SpinnerComponent),
+      ],
       providers: [
         { provide: AdminOrganisationsEinheitService, useValue: organisationsEinheitService },
         { provide: OzgcloudDialogService, useValue: dialogService },
-        { provide: ViewContainerRef, useValue: vieContainerRef },
+        { provide: ViewContainerRef, useValue: viewContainerRef },
       ],
     }).compileComponents();
 
diff --git a/alfa-client/libs/bescheid-shared/src/index.ts b/alfa-client/libs/bescheid-shared/src/index.ts
index 51f69102aff5c73708f9145fed53b74a98f91ce2..e847b8792390c501ad6da3f257442992ff9e5806 100644
--- a/alfa-client/libs/bescheid-shared/src/index.ts
+++ b/alfa-client/libs/bescheid-shared/src/index.ts
@@ -21,6 +21,8 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
+export * from './lib/bescheid-list-resource-service';
+export * from './lib/bescheid-resource-service';
 export * from './lib/bescheid-shared.module';
 export * from './lib/bescheid.linkrel';
 export * from './lib/bescheid.model';
diff --git a/alfa-client/libs/bescheid-shared/src/lib/bescheid-list-resource-service.ts b/alfa-client/libs/bescheid-shared/src/lib/bescheid-list-resource-service.ts
new file mode 100644
index 0000000000000000000000000000000000000000..43b427dd4e8975e8ac0d3d6211a2957c14b99671
--- /dev/null
+++ b/alfa-client/libs/bescheid-shared/src/lib/bescheid-list-resource-service.ts
@@ -0,0 +1,25 @@
+import { ListResourceServiceConfig, ResourceListService, ResourceRepository } from '@alfa-client/tech-shared';
+import { VorgangService, VorgangWithEingangLinkRel, VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
+import { BescheidListLinkRel } from './bescheid.linkrel';
+import { BescheidListResource, BescheidResource } from './bescheid.model';
+
+export class BescheidListResourceService extends ResourceListService<
+  VorgangWithEingangResource,
+  BescheidListResource,
+  BescheidResource
+> {}
+
+export function createBescheidListResourceService(
+  repository: ResourceRepository<BescheidResource>,
+  vorgangService: VorgangService,
+): ResourceListService<VorgangWithEingangResource, BescheidListResource, BescheidResource> {
+  return new BescheidListResourceService(buildBescheidListServiceConfig(vorgangService), repository);
+}
+
+function buildBescheidListServiceConfig(vorgangService: VorgangService): ListResourceServiceConfig<VorgangWithEingangResource> {
+  return {
+    baseResource: vorgangService.getVorgangWithEingang(),
+    listLinkRel: VorgangWithEingangLinkRel.BESCHEIDE,
+    listResourceListLinkRel: BescheidListLinkRel.BESCHEID_LIST,
+  };
+}
diff --git a/alfa-client/libs/bescheid-shared/src/lib/bescheid-resource-service.ts b/alfa-client/libs/bescheid-shared/src/lib/bescheid-resource-service.ts
index ab266d7734797b1e6fdf8b845ba8793696893a8e..6e340eacbd02353e238af59665d9aecbd23f4a27 100644
--- a/alfa-client/libs/bescheid-shared/src/lib/bescheid-resource-service.ts
+++ b/alfa-client/libs/bescheid-shared/src/lib/bescheid-resource-service.ts
@@ -11,7 +11,6 @@ export function createBescheidResourceService(
   commandService: CommandService,
   vorgangService: VorgangService,
 ): CommandResourceService<VorgangWithEingangResource, BescheidResource> {
-  console.info('Create Bescheid Resource Service');
   return new CommandResourceService(buildConfig(vorgangService), repository, commandService);
 }
 
diff --git a/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.spec.ts b/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.spec.ts
index ddb4bc98ad09c5415e2e3ca6c4853002c17c32d7..d22faf648e3d30b95e5d957b99673a29579e619b 100644
--- a/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.spec.ts
+++ b/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.spec.ts
@@ -21,82 +21,67 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { BinaryFileListResource, BinaryFileResource, BinaryFileService } from '@alfa-client/binary-file-shared';
-import { CommandOrder, CommandResource, CommandService, CreateCommandProps } from '@alfa-client/command-shared';
+import { BinaryFileListLinkRel, BinaryFileListResource, BinaryFileResource, BinaryFileService, } from '@alfa-client/binary-file-shared';
+import { CommandOrder, CommandResource, CommandResourceService, CommandService, CreateCommandProps, getEffectedResourceUrl, } from '@alfa-client/command-shared';
 import { PostfachService } from '@alfa-client/postfach-shared';
-import {
-  ApiError,
-  EMPTY_STRING,
-  HttpError,
-  StateResource,
-  createEmptyStateResource,
-  createErrorStateResource,
-  createStateResource,
-} from '@alfa-client/tech-shared';
-import { Mock, mock, useFromMock } from '@alfa-client/test-utils';
-import {
-  VorgangCommandService,
-  VorgangService,
-  VorgangWithEingangLinkRel,
-  VorgangWithEingangResource,
-} from '@alfa-client/vorgang-shared';
-import { fakeAsync, tick } from '@angular/core/testing';
+import { createEmptyStateResource, createErrorStateResource, createStateResource, EMPTY_STRING, getEmbeddedResources, ResourceListService, ResourceRepository, StateResource, } from '@alfa-client/tech-shared';
+import { Mock, mock } from '@alfa-client/test-utils';
+import { VorgangCommandService, VorgangService, VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
+import { TestBed } from '@angular/core/testing';
 import { faker } from '@faker-js/faker';
-import { ResourceUri, getUrl } from '@ngxp/rest';
-import { cold } from 'jest-marbles';
+import { getUrl, LinkRel, ResourceUri } from '@ngxp/rest';
 import { CommandLinkRel } from 'libs/command-shared/src/lib/command.linkrel';
-import { createApiError } from 'libs/tech-shared/test/error';
+import { createProblemDetail } from 'libs/tech-shared/test/error';
 import { createVorgangWithEingangResource } from 'libs/vorgang-shared/test/vorgang';
-import { Observable, of } from 'rxjs';
+import { EMPTY, Observable, of } from 'rxjs';
 import { createBinaryFileListResource, createBinaryFileResource } from '../../../binary-file-shared/test/binary-file';
-import {
-  createCommandErrorResource,
-  createCommandResource,
-  createCommandStateResource,
-  createCreateCommandProps,
-} from '../../../command-shared/test/command';
-import { ResourceRepository } from '../../../tech-shared/src/lib/resource/resource.repository';
+import { createCommandErrorStateResource, createCommandResource, createCommandStateResource, createCreateCommandProps, createSuccessfullyDoneCommandStateResource, } from '../../../command-shared/test/command';
 import { createFile } from '../../../tech-shared/test/file';
 import { singleCold, singleColdCompleted } from '../../../tech-shared/test/marbles';
-import {
-  createBescheid,
-  createBescheidListResource,
-  createBescheidResource,
-  createBescheidStateResource,
-  createUploadFileInProgress,
-} from '../test/bescheid';
+import { createBescheid, createBescheidDocument, createBescheidListResource, createBescheidResource } from '../test/bescheid';
 import { createDocumentResource } from '../test/document';
 import { BescheidFacade } from './+state/bescheid.facade';
 import { BescheidLinkRel } from './bescheid.linkrel';
-import {
-  Bescheid,
-  BescheidListResource,
-  BescheidResource,
-  BescheidStatus,
-  BescheidWizardStep,
-  UploadFileInProgress,
-} from './bescheid.model';
+import { Bescheid, BESCHEID_UPLOADED_ATTACHMENTS, BescheidDocument, BescheidListResource, BescheidResource, BescheidStatus, BescheidWizardStep, createEmptyBescheidDocument, createEmptyUploadInProgress, createInitialWizard, } from './bescheid.model';
 import { BescheidService } from './bescheid.service';
 import { DocumentLinkRel } from './document.linkrel';
 import { DocumentResource } from './document.model';
 
+import { BescheidListResourceService, BescheidResourceService, buildCreateBescheidDocumentFromFileProps, buildUpdateBescheidCommandProps, createBescheidListResourceService, createBescheidResourceService, } from '@alfa-client/bescheid-shared';
+import { expect } from '@jest/globals';
+import { cold } from 'jest-marbles';
 import * as DateUtil from '../../../tech-shared/src/lib/date.util';
-import * as BescheidUtil from './bescheid.util';
+
+jest.mock('@alfa-client/bescheid-shared', () => {
+  const originalModule = jest.requireActual('@alfa-client/bescheid-shared');
+
+  return {
+    __esModule: true,
+    ...originalModule,
+    createBescheidResourceService: jest.fn(),
+    createBescheidListResourceService: jest.fn(),
+    buildUpdateBescheidCommandProps: jest.fn(),
+    buildCreateBescheidDocumentFromFileProps: jest.fn(),
+  };
+});
 
 describe('BescheidService', () => {
   let service: BescheidService;
-
   let facade: Mock<BescheidFacade>;
   let vorgangService: Mock<VorgangService>;
-  let resourceRepository: Mock<ResourceRepository<BescheidResource>>;
+  let resourceRepository: Mock<ResourceRepository>;
   let commandService: Mock<CommandService>;
   let vorgangCommandService: Mock<VorgangCommandService>;
   let binaryFileService: Mock<BinaryFileService>;
   let postfachService: Mock<PostfachService>;
+  let bescheidResourceService: Mock<BescheidResourceService>;
+  let bescheidListResourceService: Mock<BescheidListResourceService>;
 
-  const vorgangWithEingangStateResource: StateResource<VorgangWithEingangResource> = createStateResource(
-    createVorgangWithEingangResource(),
-  );
+  const vorgangWithEingangResource: VorgangWithEingangResource = createVorgangWithEingangResource();
+  const vorgangWithEingangStateResource: StateResource<VorgangWithEingangResource> =
+    createStateResource(vorgangWithEingangResource);
+  const bescheidResource: BescheidResource = createBescheidResource();
+  const commandStateResource: StateResource<CommandResource> = createCommandStateResource();
 
   beforeEach(() => {
     facade = mock(BescheidFacade);
@@ -107,642 +92,456 @@ describe('BescheidService', () => {
     vorgangService.getVorgangWithEingang.mockReturnValue(of(vorgangWithEingangStateResource));
     binaryFileService = mock(BinaryFileService);
     postfachService = mock(PostfachService);
+    bescheidResourceService = mock(CommandResourceService);
+    bescheidListResourceService = mock(ResourceListService);
+    (createBescheidResourceService as jest.Mock).mockReturnValue(bescheidResourceService);
+    (createBescheidListResourceService as jest.Mock).mockReturnValue(bescheidListResourceService);
+
+    TestBed.configureTestingModule({
+      providers: [
+        { provide: BescheidFacade, useValue: facade },
+        { provide: VorgangService, useValue: vorgangService },
+        { provide: ResourceRepository, useValue: resourceRepository },
+        { provide: CommandService, useValue: commandService },
+        { provide: VorgangCommandService, useValue: vorgangCommandService },
+        { provide: BinaryFileService, useValue: binaryFileService },
+        {
+          provide: PostfachService,
+          useValue: postfachService,
+        },
+        BescheidService,
+      ],
+    });
 
-    service = new BescheidService(
-      useFromMock(facade),
-      useFromMock(vorgangService),
-      useFromMock(commandService),
-      useFromMock(vorgangCommandService),
-      useFromMock(binaryFileService),
-      useFromMock(resourceRepository),
-      useFromMock(postfachService),
-    );
+    service = TestBed.inject(BescheidService);
   });
 
   it('should be created', () => {
     expect(service).toBeTruthy();
   });
 
-  describe('getActiveStep', () => {
-    it('should emit initial value', () => {
-      const activeStep$: Observable<number> = service.getActiveStep();
-
-      expect(activeStep$).toBeObservable(singleCold(BescheidWizardStep.AntragBescheiden));
-    });
-  });
-
-  describe('setActiveStep', () => {
-    it('should emit changed active step', () => {
-      service.setActiveStep(BescheidWizardStep.DokumenteHochladen);
-
-      expect(service.activeStep$).toBeObservable(singleCold(BescheidWizardStep.DokumenteHochladen));
-    });
-  });
-
-  describe('get bescheid draft', () => {
-    const bescheidDraft: BescheidResource = createBescheidResource();
-    const bescheidDraftStateResource: StateResource<BescheidResource> = createStateResource(bescheidDraft);
-
-    it('should call resource service', () => {
-      service.bescheidResourceService.get = jest.fn();
-
-      service.getBescheidDraft();
-
-      expect(service.bescheidResourceService.get).toHaveBeenCalled();
-    });
-
-    it('should return value', () => {
-      service.bescheidResourceService.get = jest.fn().mockReturnValue(singleCold(bescheidDraftStateResource));
+  describe('init', () => {
+    it('should init state', () => {
+      service.setActiveStep(2);
 
-      const bescheidStateResource$: Observable<StateResource<BescheidResource>> = service.getBescheidDraft();
+      service.init();
 
-      expect(bescheidStateResource$).toBeObservable(singleCold(bescheidDraftStateResource));
+      expect(service.getWizard()).toBeObservable(singleCold(createInitialWizard()));
+      expect(service.getActiveStep()).toBeObservable(singleCold(BescheidWizardStep.AntragBescheiden));
+      expect(service.getBescheidCreated()).toBeObservable(singleCold(false));
+      expect(service.getBescheidDocument()).toBeObservable(singleCold(createEmptyBescheidDocument()));
     });
   });
 
-  describe('getBescheidCommand', () => {
-    it('should call facade', () => {
-      service.getBescheidCommand();
-
-      expect(facade.getBescheidCommand).toHaveBeenCalled();
+  describe('exit', () => {
+    beforeEach(() => {
+      service._clearUploadedFiles = jest.fn();
     });
-  });
 
-  describe('createBescheid', () => {
-    const vorgangWithEingang: VorgangWithEingangResource = createVorgangWithEingangResource();
-    const command: CommandResource = createCommandResource([CommandLinkRel.EFFECTED_RESOURCE]);
-    const commandStateResource: StateResource<CommandResource> = createStateResource(command);
+    it('should reload bescheid list', () => {
+      service.exit();
 
-    beforeEach(() => {
-      facade.getBescheidCommand.mockReturnValue(of(commandStateResource));
-      service.bescheidResourceService.loadByResourceUri = jest.fn();
+      expect(bescheidListResourceService.refresh).toHaveBeenCalled();
     });
 
-    it('should call facade', () => {
-      service.createBescheid(vorgangWithEingang).subscribe();
+    it('should reload postfach list', () => {
+      service.exit();
 
-      expect(facade.createBescheidDraft).toHaveBeenCalledWith(vorgangWithEingang, {
-        order: CommandOrder.CREATE_BESCHEID,
-        body: null,
-      });
+      expect(postfachService.setPostfachMailOnReload).toHaveBeenCalled();
     });
 
-    it('should set resource by uri', () => {
-      service.createBescheid(vorgangWithEingang).subscribe();
+    it('should clear uploaded files', () => {
+      service.exit();
 
-      expect(service.bescheidResourceService.loadByResourceUri).toHaveBeenCalledWith(
-        getUrl(command, CommandLinkRel.EFFECTED_RESOURCE),
-      );
+      expect(service._clearUploadedFiles).toHaveBeenCalled();
     });
   });
 
-  describe('bescheidErstellungUeberspringen', () => {
-    describe('Bescheid Draft exists', () => {
-      const vorgangWithEingangResource: VorgangWithEingangResource = createVorgangWithEingangResource();
-
-      const bescheidResource: BescheidResource = createBescheidResource();
-      const bescheidStateResource: StateResource<BescheidResource> = createStateResource(bescheidResource);
-
-      const commandStateResource: StateResource<CommandResource> = createCommandStateResource();
-
-      beforeEach(() => {
-        service.existsBescheidDraft = jest.fn().mockReturnValue(true);
-        service.getBescheidDraft = jest.fn().mockReturnValue(of(bescheidStateResource));
-        service.bescheidLoeschenUndErstellungUeberspringen = jest.fn().mockReturnValue(of(commandStateResource));
-      });
-
-      it('should get bescheid draft', (done) => {
-        const command$: Observable<StateResource<CommandResource>> =
-          service.bescheidErstellungUeberspringen(vorgangWithEingangResource);
-
-        command$.subscribe(() => {
-          expect(service.getBescheidDraft).toHaveBeenCalled();
-          done();
-        });
-      });
-
-      it('should Bescheid löschen und Erstellung überspringen', (done) => {
-        const command$: Observable<StateResource<CommandResource>> =
-          service.bescheidErstellungUeberspringen(vorgangWithEingangResource);
-
-        command$.subscribe(() => {
-          expect(service.bescheidLoeschenUndErstellungUeberspringen).toHaveBeenCalledWith(
-            vorgangWithEingangResource,
-            bescheidResource,
-          );
-          done();
-        });
-      });
-
-      it('should return command', () => {
-        const command$: Observable<StateResource<CommandResource>> =
-          service.bescheidErstellungUeberspringen(vorgangWithEingangResource);
-
-        expect(command$).toBeObservable(cold('(a|)', { a: commandStateResource }));
-      });
+  describe('skipBescheidCreation', () => {
+    beforeEach(() => {
+      service.deleteBescheidAndCompleteVorgang = jest.fn().mockReturnValue(of(commandStateResource));
     });
 
-    describe('Bescheid Draft not exists', () => {
-      const vorgangWithEingangResource: VorgangWithEingangResource = createVorgangWithEingangResource();
-      const commandStateResource: StateResource<CommandResource> = createCommandStateResource();
+    it('should complete vorgang', () => {
+      service.skipBescheidCreation(vorgangWithEingangResource, null);
 
-      beforeEach(() => {
-        service.existsBescheidDraft = jest.fn().mockReturnValue(false);
-        service.vorgangAbschliesen = jest.fn().mockReturnValue(of(commandStateResource));
-      });
-
-      it('should call vorgang abschliessen', (done) => {
-        const command$: Observable<StateResource<CommandResource>> =
-          service.bescheidErstellungUeberspringen(vorgangWithEingangResource);
-
-        command$.subscribe(() => {
-          expect(service.vorgangAbschliesen).toHaveBeenCalledWith(vorgangWithEingangResource);
-          done();
-        });
-      });
-
-      it('should return command', () => {
-        const command$: Observable<StateResource<CommandResource>> =
-          service.bescheidErstellungUeberspringen(vorgangWithEingangResource);
-
-        expect(command$).toBeObservable(cold('(a|)', { a: commandStateResource }));
-      });
+      expect(vorgangCommandService.abschliessen).toHaveBeenCalledWith(vorgangWithEingangResource);
     });
-  });
 
-  describe('getBescheidDraftIfExists', () => {
-    let vorgangStateResource: StateResource<VorgangWithEingangResource>;
-    let bescheidStateResource: StateResource<BescheidResource>;
+    it('should NOT complete vorgang', () => {
+      service.skipBescheidCreation(vorgangWithEingangResource, bescheidResource);
 
-    beforeEach(() => {
-      vorgangStateResource = createStateResource(createVorgangWithEingangResource([VorgangWithEingangLinkRel.BESCHEID_DRAFT]));
-      bescheidStateResource = createBescheidStateResource();
-      vorgangService.getVorgangWithEingang.mockReturnValue(of(vorgangStateResource));
-      service.getBescheidDraft = jest.fn().mockReturnValue(of(bescheidStateResource));
+      expect(vorgangCommandService.abschliessen).not.toHaveBeenCalled();
     });
 
-    it('should get vorgang with eingang', () => {
-      service.getBescheidDraftIfExists();
+    it('should delete bescheid and complete vorgang', () => {
+      service.skipBescheidCreation(vorgangWithEingangResource, bescheidResource).subscribe();
 
-      expect(vorgangService.getVorgangWithEingang).toHaveBeenCalled();
+      expect(service.deleteBescheidAndCompleteVorgang).toHaveBeenCalledWith(vorgangWithEingangResource);
     });
 
-    it('should emit state resources', () => {
-      const bescheid$: Observable<StateResource<BescheidResource>> = service.getBescheidDraftIfExists();
+    it('should return command', () => {
+      const command$: Observable<StateResource<CommandResource>> = service.skipBescheidCreation(
+        vorgangWithEingangResource,
+        bescheidResource,
+      );
 
-      expect(bescheid$).toBeObservable(cold('(ab|)', { a: createEmptyStateResource(), b: bescheidStateResource }));
+      expect(command$).toBeObservable(singleColdCompleted(commandStateResource));
     });
   });
 
-  describe('bescheidLoeschenUndErstellungUeberspringen', () => {
-    const vorgangWithEingangResource: VorgangWithEingangResource = createVorgangWithEingangResource();
-    const bescheidResource: BescheidResource = createBescheidResource();
-    const vorgangAbschliessenCommandStateResource: StateResource<CommandResource> = createCommandStateResource();
-
+  describe('deleteBescheidAndCompleteVorgang', () => {
     beforeEach(() => {
-      service.vorgangAbschliesen = jest.fn().mockReturnValue(of(vorgangAbschliessenCommandStateResource));
       service.deleteBescheid = jest.fn().mockReturnValue(of(createCommandStateResource));
+      vorgangCommandService.abschliessen.mockReturnValue(EMPTY);
     });
 
-    it('should Bescheiderstellung überspringen', (done) => {
-      const command$: Observable<StateResource<CommandResource>> = service.bescheidLoeschenUndErstellungUeberspringen(
-        vorgangWithEingangResource,
-        bescheidResource,
-      );
+    it('should complete vorgang', () => {
+      service.deleteBescheidAndCompleteVorgang(vorgangWithEingangResource).subscribe();
 
-      command$.subscribe(() => {
-        expect(service.vorgangAbschliesen).toHaveBeenCalledWith(vorgangWithEingangResource);
-        done();
-      });
+      expect(vorgangCommandService.abschliessen).toHaveBeenCalledWith(vorgangWithEingangResource);
     });
 
-    it('should Bescheid löschen', (done) => {
-      service.vorgangAbschliesen = jest.fn().mockReturnValue(of(createCommandStateResource([CommandLinkRel.EFFECTED_RESOURCE])));
+    it('should delete bescheid', () => {
+      vorgangCommandService.abschliessen.mockReturnValue(of(createSuccessfullyDoneCommandStateResource()));
 
-      const command$: Observable<StateResource<CommandResource>> = service.bescheidLoeschenUndErstellungUeberspringen(
-        vorgangWithEingangResource,
-        bescheidResource,
-      );
+      service.deleteBescheidAndCompleteVorgang(vorgangWithEingangResource).subscribe();
 
-      command$.subscribe(() => {
-        expect(service.deleteBescheid).toHaveBeenCalledWith(bescheidResource);
-        done();
-      });
+      expect(service.deleteBescheid).toHaveBeenCalled();
     });
 
-    it('should not Bescheid löschen', (done) => {
-      service.vorgangAbschliesen = jest.fn().mockReturnValue(of(createCommandStateResource()));
+    it('should NOT delete bescheid on loading', () => {
+      vorgangCommandService.abschliessen.mockReturnValue(of(createEmptyStateResource(true)));
 
-      const command$: Observable<StateResource<CommandResource>> = service.bescheidLoeschenUndErstellungUeberspringen(
-        vorgangWithEingangResource,
-        bescheidResource,
-      );
+      service.deleteBescheidAndCompleteVorgang(vorgangWithEingangResource).subscribe();
 
-      command$.subscribe(() => {
-        expect(service.deleteBescheid).not.toHaveBeenCalledWith(bescheidResource);
-        done();
-      });
+      expect(service.deleteBescheid).not.toHaveBeenCalled();
     });
 
-    it('should emit vorgang abschliessen command', () => {
-      const command$: Observable<StateResource<CommandResource>> = service.bescheidLoeschenUndErstellungUeberspringen(
-        vorgangWithEingangResource,
-        bescheidResource,
-      );
-
-      expect(command$).toBeObservable(cold('(a|)', { a: vorgangAbschliessenCommandStateResource }));
-    });
-  });
+    it('should NOT delete bescheid on error', () => {
+      vorgangCommandService.abschliessen.mockReturnValue(of(createErrorStateResource(createProblemDetail())));
 
-  describe('vorgang abschliessen', () => {
-    const vorgangWithEingangResource: VorgangWithEingangResource = createVorgangWithEingangResource();
-    const commandStateResource: StateResource<CommandResource> = createCommandStateResource();
+      service.deleteBescheidAndCompleteVorgang(vorgangWithEingangResource).subscribe();
 
-    beforeEach(() => {
-      vorgangCommandService.abschliessen.mockReturnValue(of(commandStateResource));
+      expect(service.deleteBescheid).not.toHaveBeenCalled();
     });
 
-    it('should call vorgang command service', (done) => {
-      const command$: Observable<StateResource<CommandResource>> = service.vorgangAbschliesen(vorgangWithEingangResource);
-
-      command$.subscribe(() => {
-        expect(vorgangCommandService.abschliessen).toHaveBeenCalledWith(vorgangWithEingangResource);
-        done();
-      });
-    });
+    it('should return vorgang abschliessen command', () => {
+      const command: StateResource<CommandResource> = createSuccessfullyDoneCommandStateResource();
+      vorgangCommandService.abschliessen.mockReturnValue(of(command));
 
-    it('should return command', () => {
-      const command$: Observable<StateResource<CommandResource>> = service.vorgangAbschliesen(vorgangWithEingangResource);
+      const command$: Observable<StateResource<CommandResource>> =
+        service.deleteBescheidAndCompleteVorgang(vorgangWithEingangResource);
 
-      expect(command$).toBeObservable(cold('(a|)', { a: commandStateResource }));
+      expect(command$).toBeObservable(singleColdCompleted(command));
     });
   });
 
   describe('delete bescheid', () => {
-    const bescheidResource: BescheidResource = createBescheidResource();
-
     it('should create command', () => {
-      service.deleteBescheid(bescheidResource);
+      service.deleteBescheid();
 
-      const expectedProps: CreateCommandProps = {
-        resource: bescheidResource,
-        linkRel: BescheidLinkRel.DELETE,
-        command: {
-          order: CommandOrder.DELETE_BESCHEID,
-          body: null,
-        },
-        snackBarMessage: EMPTY_STRING,
-      };
-      expect(commandService.createCommandByProps).toHaveBeenCalledWith(expectedProps);
+      expect(bescheidResourceService.delete).toHaveBeenCalled();
     });
 
     it('should return command', () => {
-      const commandStateResource: StateResource<CommandResource> = createEmptyStateResource();
-      commandService.createCommandByProps.mockReturnValue(commandStateResource);
+      const commandStateResource: StateResource<CommandResource> = createSuccessfullyDoneCommandStateResource();
+      bescheidResourceService.delete.mockReturnValue(of(commandStateResource));
 
-      const createdCommand: Observable<StateResource<CommandResource>> = service.deleteBescheid(bescheidResource);
+      const createdCommand$: Observable<StateResource<CommandResource>> = service.deleteBescheid();
 
-      expect(createdCommand).toEqual(commandStateResource);
+      expect(createdCommand$).toBeObservable(singleColdCompleted(commandStateResource));
     });
   });
 
-  describe('update bescheid', () => {
-    const bescheid: Bescheid = createBescheid();
-    const commandResource: CommandResource = createCommandResource([CommandLinkRel.EFFECTED_RESOURCE]);
-    const commandStateResource: StateResource<CommandResource> = createStateResource(commandResource);
-    const createCommandProps: CreateCommandProps = createCreateCommandProps();
-    let buildUpdateBescheidCommandPropsSpy: jest.SpyInstance;
-
+  describe('loadFiles', () => {
     beforeEach(() => {
-      buildUpdateBescheidCommandPropsSpy = jest
-        .spyOn(BescheidUtil, 'buildUpdateBescheidCommandProps')
-        .mockReturnValue(createCommandProps);
-      commandService.createCommandByProps.mockReturnValue(of(commandStateResource));
-      service.bescheidResourceService.loadByResourceUri = jest.fn();
-      service.getResource = jest.fn().mockReturnValue(createBescheidResource());
-    });
-
-    it('should build update bescheid command props', () => {
-      service.updateBescheid(bescheid);
-
-      expect(buildUpdateBescheidCommandPropsSpy).toHaveBeenCalledWith(service.getResource(), bescheid);
+      service.loadBescheidDocument = jest.fn();
+      service.loadAttachments = jest.fn();
     });
 
-    it('should create command', () => {
-      service.updateBescheid(bescheid);
+    it('should bescheid document', () => {
+      service.loadFiles(bescheidResource);
 
-      expect(commandService.createCommandByProps).toHaveBeenCalledWith(createCommandProps);
+      expect(service.loadBescheidDocument).toHaveBeenCalledWith(bescheidResource);
     });
 
-    it('should return command', () => {
-      const updateBescheid$: Observable<StateResource<CommandResource>> = service.updateBescheid(bescheid);
-
-      expect(updateBescheid$).toBeObservable(cold('(a|)', { a: commandStateResource }));
-    });
+    it('should load attachments', () => {
+      service.loadFiles(bescheidResource);
 
-    it('should set resource by uri', (done) => {
-      service.updateBescheid(bescheid).subscribe((commandStateResource: StateResource<CommandResource>) => {
-        expect(service.bescheidResourceService.loadByResourceUri).toHaveBeenCalledWith(
-          getUrl(commandStateResource.resource, CommandLinkRel.EFFECTED_RESOURCE),
-        );
-        done();
-      });
+      expect(service.loadAttachments).toHaveBeenCalledWith(bescheidResource);
     });
+  });
 
-    it('should clear create bescheid document in progress', (done) => {
-      service.createBescheidDocumentInProgress$.next(createCommandStateResource());
-
-      service.updateBescheid(bescheid).subscribe(() => {
-        expect(service.createBescheidDocumentInProgress$.value).toEqual(createEmptyStateResource());
-        done();
-      });
+  describe('create bescheid document', () => {
+    beforeEach(() => {
+      service.doCreateBescheidDocument = jest.fn().mockReturnValue(EMPTY);
+      service.handleCreateBescheidDocumentResponse = jest.fn();
     });
 
-    it('should clear upload bescheid document in progress', (done) => {
-      service.uploadBescheidDocumentInProgress$.next(createUploadFileInProgress());
+    it('should emit bescheid document', () => {
+      service.createBescheidDocument(bescheidResource);
 
-      service.updateBescheid(bescheid).subscribe(() => {
-        expect(service.uploadBescheidDocumentInProgress$.value).toEqual({ loading: false });
-        done();
-      });
+      expect(service.getBescheidDocument()).toBeObservable(
+        singleCold({ ...createEmptyBescheidDocument(), create: createEmptyStateResource(true) }),
+      );
     });
 
-    it('should clear attachment upload', (done) => {
-      service.uploadedAttachment$.next(createStateResource(createBinaryFileResource()));
+    it('should do create bescheid document', () => {
+      service.createBescheidDocument(bescheidResource);
 
-      service.updateBescheid(bescheid).subscribe(() => {
-        expect(service.uploadedAttachment$.value).toEqual(createEmptyStateResource());
-        done();
-      });
+      expect(service.doCreateBescheidDocument).toHaveBeenCalledWith(bescheidResource);
     });
-  });
 
-  describe('send bescheid', () => {
-    const bescheidResource: BescheidResource = createBescheidResource();
-    const createCommandProps: CreateCommandProps = createCreateCommandProps();
-    const commandStateResource: StateResource<CommandResource> = createCommandStateResource();
-    const linkRel: string = 'link_rel';
+    it('should handle create response on loaded', () => {
+      service.doCreateBescheidDocument = jest.fn().mockReturnValue(of(commandStateResource));
 
-    let buildSendBescheidCommandPropsSpy: jest.SpyInstance;
+      service.createBescheidDocument(bescheidResource);
 
-    beforeEach(() => {
-      service.bescheidResourceService.get = jest.fn().mockReturnValue(of(createStateResource(bescheidResource)));
-      buildSendBescheidCommandPropsSpy = jest
-        .spyOn(BescheidUtil, 'buildSendBescheidCommandProps')
-        .mockReturnValue(createCommandProps);
-      commandService.createCommandByProps.mockReturnValue(of(commandStateResource));
+      expect(service.handleCreateBescheidDocumentResponse).toHaveBeenCalledWith(commandStateResource);
     });
 
-    it('should get resource', () => {
-      service.sendBescheid(bescheidResource, linkRel);
-
-      expect(service.bescheidResourceService.get).toHaveBeenCalled();
-    });
+    it('should handle create response on error', () => {
+      const commandError: StateResource<CommandResource> = createCommandErrorStateResource();
+      service.doCreateBescheidDocument = jest.fn().mockReturnValue(of(commandError));
 
-    it('should call command service', (done) => {
-      service.sendBescheid(bescheidResource, linkRel).subscribe(() => {
-        expect(commandService.createCommandByProps).toHaveBeenCalledWith(createCommandProps);
-        done();
-      });
-    });
+      service.createBescheidDocument(bescheidResource);
 
-    it('should build send bescheid command props', (done) => {
-      service.sendBescheid(bescheidResource, linkRel).subscribe(() => {
-        expect(buildSendBescheidCommandPropsSpy).toHaveBeenCalledWith(bescheidResource, linkRel);
-        done();
-      });
+      expect(service.handleCreateBescheidDocumentResponse).toHaveBeenCalledWith(commandError);
     });
+  });
 
-    it('should return command', () => {
-      const command$: Observable<StateResource<CommandResource>> = service.sendBescheid(bescheidResource, linkRel);
+  describe('doCreateBescheidDocument', () => {
+    it('should create command by props', () => {
+      service.doCreateBescheidDocument(bescheidResource);
 
-      expect(command$).toBeObservable(cold('(a|)', { a: commandStateResource }));
+      expect(commandService.createCommandByProps).toHaveBeenCalledWith({
+        resource: bescheidResource,
+        linkRel: BescheidLinkRel.CREATE_DOCUMENT,
+        command: {
+          order: CommandOrder.CREATE_BESCHEID_DOCUMENT,
+          body: null,
+        },
+        snackBarMessage: EMPTY_STRING,
+      });
     });
   });
 
-  describe('sendBescheidManually', () => {
-    const bescheidResource: BescheidResource = createBescheidResource();
-    const sendBescheidCommand: StateResource<CommandResource> = createCommandStateResource();
+  describe('handleCreateBescheidDocumentResponse', () => {
+    const commandStateResource: StateResource<CommandResource> = createStateResource(
+      createCommandResource([CommandLinkRel.EFFECTED_RESOURCE]),
+    );
 
     beforeEach(() => {
-      service.sendBescheid = jest.fn().mockReturnValue(of(sendBescheidCommand));
+      service.loadBescheidDocumentByUri = jest.fn();
+      service.emitBescheidDocumentError = jest.fn();
     });
 
-    it('should call sendBescheid', () => {
-      service.sendBescheidManually(bescheidResource);
-
-      expect(service.sendBescheid).toHaveBeenCalledWith(bescheidResource, BescheidLinkRel.BESCHEIDEN);
-    });
+    it('should emit error', () => {
+      const commandErrorStateResource: StateResource<CommandResource> = createCommandErrorStateResource();
 
-    it('should return command', () => {
-      const command$: Observable<StateResource<CommandResource>> = service.sendBescheidManually(bescheidResource);
+      service.handleCreateBescheidDocumentResponse(commandErrorStateResource);
 
-      expect(command$).toBeObservable(singleColdCompleted(sendBescheidCommand));
+      expect(service.getBescheidDocument()).toBeObservable(
+        singleCold({ ...createEmptyBescheidDocument(), create: commandErrorStateResource } as BescheidDocument),
+      );
     });
-  });
 
-  describe('sendBescheidToAntragsteller', () => {
-    const bescheidResource: BescheidResource = createBescheidResource();
-    const sendBescheidCommand: StateResource<CommandResource> = createCommandStateResource();
+    it('should emit bescheid document state', () => {
+      service.handleCreateBescheidDocumentResponse(commandStateResource);
 
-    beforeEach(() => {
-      service.sendBescheid = jest.fn().mockReturnValue(of(sendBescheidCommand));
+      expect(service.getBescheidDocument()).toBeObservable(
+        singleCold({
+          ...createEmptyBescheidDocument(),
+          documentUri: getEffectedResourceUrl(commandStateResource.resource),
+        }),
+      );
     });
 
-    it('should call sendBescheid', () => {
-      service.sendBescheidToAntragsteller(bescheidResource);
+    it('should load document by uri', () => {
+      service.handleCreateBescheidDocumentResponse(commandStateResource);
 
-      expect(service.sendBescheid).toHaveBeenCalledWith(bescheidResource, BescheidLinkRel.BESCHEIDEN_UND_SENDEN);
+      expect(service.loadBescheidDocumentByUri).toHaveBeenCalledWith(getEffectedResourceUrl(commandStateResource.resource));
     });
+  });
 
-    it('should return command', () => {
-      const command$: Observable<StateResource<CommandResource>> = service.sendBescheidToAntragsteller(bescheidResource);
+  describe('emitBescheidDocumentError', () => {
+    it('should emit', () => {
+      const commandError: StateResource<CommandResource> = createCommandErrorStateResource();
 
-      expect(command$).toBeObservable(singleColdCompleted(sendBescheidCommand));
+      service.emitBescheidDocumentError(commandError);
+
+      expect(service.getBescheidDocument()).toBeObservable(
+        singleCold({
+          ...createEmptyBescheidDocument(),
+          upload: { ...createEmptyUploadInProgress(), loading: false, error: commandError.error },
+        }),
+      );
     });
   });
 
-  describe('do update bescheid', () => {
-    const bescheid: Bescheid = createBescheid();
-    const bescheidResource: BescheidResource = createBescheidResource();
-
-    const createCommandProps: CreateCommandProps = createCreateCommandProps();
-    let buildUpdateBescheidCommandPropsSpy: jest.SpyInstance;
-
+  describe('loadBescheidDocument', () => {
     beforeEach(() => {
-      buildUpdateBescheidCommandPropsSpy = jest
-        .spyOn(BescheidUtil, 'buildUpdateBescheidCommandProps')
-        .mockReturnValue(createCommandProps);
-      commandService.createCommandByProps.mockClear();
-      commandService.createCommandByProps.mockReturnValue(of(createCommandStateResource()));
+      service.loadBescheidDocumentByUri = jest.fn();
     });
 
-    it('should build update bescheid command props', () => {
-      service.doUpdateBescheid(bescheidResource, bescheid);
+    it('should load by uri', () => {
+      const bescheidResource: BescheidResource = createBescheidResource([BescheidLinkRel.BESCHEID_DOCUMENT]);
 
-      expect(buildUpdateBescheidCommandPropsSpy).toHaveBeenCalledWith(bescheidResource, bescheid);
+      service.loadBescheidDocument(bescheidResource);
+
+      expect(service.loadBescheidDocumentByUri).toHaveBeenCalledWith(getUrl(bescheidResource, BescheidLinkRel.BESCHEID_DOCUMENT));
     });
 
-    it('should call command service', () => {
-      service.doUpdateBescheid(bescheidResource, bescheid).subscribe();
+    it('should NOT load by uri', () => {
+      service.loadBescheidDocument(bescheidResource);
 
-      expect(commandService.createCommandByProps).toHaveBeenCalledWith(createCommandProps);
+      expect(service.loadBescheidDocumentByUri).not.toHaveBeenCalled();
     });
   });
 
-  describe('getAttachments', () => {
-    let bescheidResource: BescheidResource;
-    let binaryFileListResource: BinaryFileListResource;
-    let binaryFileResource: BinaryFileResource;
+  describe('loadBescheidDocumentByUri', () => {
+    const resourceUri: ResourceUri = faker.internet.url();
 
     beforeEach(() => {
-      bescheidResource = createBescheidResource([BescheidLinkRel.ATTACHMENTS]);
-      service.getBescheidDraft = jest.fn().mockReturnValue(of(createStateResource(bescheidResource)));
+      resourceRepository.getResource.mockReturnValue(EMPTY);
+      service.loadBescheidDocumentFile = jest.fn();
+    });
 
-      binaryFileResource = createBinaryFileResource();
+    it('should get resource', () => {
+      service.loadBescheidDocumentByUri(resourceUri);
 
-      binaryFileListResource = createBinaryFileListResource([binaryFileResource]);
-      binaryFileService.getFiles.mockReturnValue(of(createStateResource(binaryFileListResource)));
+      expect(resourceRepository.getResource).toHaveBeenCalledWith(resourceUri);
     });
 
-    it('should get files', (done) => {
-      service.getAttachments().subscribe(() => {
-        expect(binaryFileService.getFiles).toHaveBeenCalledWith(bescheidResource, BescheidLinkRel.ATTACHMENTS);
-        done();
-      });
-    });
+    it('should load bescheid document file', () => {
+      const documentResource: DocumentResource = createDocumentResource();
+      resourceRepository.getResource.mockReturnValue(of(documentResource));
 
-    it('should return embedded resources', () => {
-      const attachments$: Observable<BinaryFileResource[]> = service.getAttachments();
+      service.loadBescheidDocumentByUri(resourceUri);
 
-      expect(attachments$).toBeObservable(singleColdCompleted([binaryFileResource]));
+      expect(service.loadBescheidDocumentFile).toHaveBeenCalledWith(documentResource);
     });
   });
 
-  describe('get document uri', () => {
-    const documentUri: ResourceUri = faker.internet.url();
+  describe('load bescheid document file', () => {
+    const document: DocumentResource = createDocumentResource([DocumentLinkRel.FILE]);
+    const binaryFileStateResource: StateResource<BinaryFileResource> = createStateResource(createBinaryFileResource());
 
     beforeEach(() => {
-      service.bescheidDocumentUri$.next(documentUri);
+      binaryFileService.getFile.mockReturnValue(of(binaryFileStateResource));
     });
 
-    it('should return value', (done) => {
-      service.getDocumentUri().subscribe((uri) => {
-        expect(uri).toBe(documentUri);
-        done();
-      });
+    it('should call binary file service', () => {
+      service.loadBescheidDocumentFile(document);
+
+      expect(binaryFileService.getFile).toHaveBeenCalledWith(getUrl(document, DocumentLinkRel.FILE));
     });
-  });
 
-  describe('get bescheid document file', () => {
-    it('should return value', (done) => {
-      const binaryFile: BinaryFileResource = createBinaryFileResource();
-      const binaryFileStateResource: StateResource<BinaryFileResource> = createStateResource(binaryFile);
-      service.bescheidDocumentFile$.next(binaryFileStateResource);
+    it('should emit bescheid document state', () => {
+      service.loadBescheidDocumentFile(document);
 
-      service.getBescheidDocumentFile().subscribe((result: StateResource<BinaryFileResource>) => {
-        expect(result).toBe(binaryFileStateResource);
-        done();
-      });
+      expect(service.getBescheidDocument()).toBeObservable(
+        singleCold({
+          upload: createEmptyUploadInProgress(),
+          create: createEmptyStateResource(),
+          resource: binaryFileStateResource.resource,
+          documentUri: getUrl(document, LinkRel.Self),
+        }),
+      );
     });
   });
 
-  describe('upload bescheid document', () => {
-    const bescheid: BescheidResource = createBescheidResource();
-    const file: File = createFile();
+  describe('loadAttachments', () => {
+    const bescheidResourceWithAttachments: BescheidResource = createBescheidResource([BescheidLinkRel.ATTACHMENTS]);
 
     beforeEach(() => {
-      service.doUploadBescheidDocument = jest.fn();
+      binaryFileService.getFiles.mockReturnValue(EMPTY);
     });
 
-    it('should call init upload bescheid document in progress', () => {
-      service.uploadBescheidDocument(bescheid, file);
+    it('should call binary file service', () => {
+      service.loadAttachments(bescheidResourceWithAttachments);
 
-      expect(service.uploadBescheidDocumentInProgress$.value).toEqual({
-        loading: true,
-        fileName: file.name,
-      });
+      expect(binaryFileService.getFiles).toHaveBeenCalledWith(bescheidResourceWithAttachments, BescheidLinkRel.ATTACHMENTS);
     });
 
-    it('should clear create bescheid document', () => {
-      service.createBescheidDocumentInProgress$.next(createCommandStateResource());
-      service.uploadBescheidDocument(bescheid, file);
+    it('should NOT call binary file service', () => {
+      service.loadAttachments(bescheidResource);
 
-      expect(service.createBescheidDocumentInProgress$.value).toEqual(createEmptyStateResource());
+      expect(binaryFileService.getFiles).not.toHaveBeenCalled();
     });
 
-    it('should call do upload bescheid document', () => {
-      service.uploadBescheidDocument(bescheid, file);
+    it('should add files', () => {
+      const binaryFileListStateResource: StateResource<BinaryFileListResource> =
+        createStateResource(createBinaryFileListResource());
+      binaryFileService.getFiles.mockReturnValue(of(binaryFileListStateResource));
 
-      expect(service.doUploadBescheidDocument).toHaveBeenCalledWith(bescheid, file);
-    });
+      service.loadAttachments(bescheidResourceWithAttachments);
 
-    it('should return bescheid document file', (done) => {
-      service.uploadBescheidDocument(bescheid, file).subscribe((uploadFileInProgress: UploadFileInProgress) => {
-        expect(uploadFileInProgress.fileName).toBe(file.name);
-        expect(uploadFileInProgress.loading).toBeTruthy();
-        done();
-      });
+      expect(binaryFileService.addFiles).toHaveBeenCalledWith(
+        BESCHEID_UPLOADED_ATTACHMENTS,
+        getEmbeddedResources(binaryFileListStateResource, BinaryFileListLinkRel.FILE_LIST),
+      );
     });
   });
 
-  describe('do upload bescheid document', () => {
-    const bescheid: BescheidResource = createBescheidResource();
-    const file: File = createFile();
-
-    const binaryFileStateResource: StateResource<BinaryFileResource> = createStateResource(createBinaryFileResource());
+  describe('upload bescheid document', () => {
+    const documentFile: File = createFile();
 
     beforeEach(() => {
-      binaryFileService.uploadFile.mockReturnValue(of(binaryFileStateResource));
+      binaryFileService.uploadFile.mockReturnValue(EMPTY);
+      service.handleUploadBescheidDocumentResponse = jest.fn();
+    });
+
+    it('should emit bescheid document state', () => {
+      service.uploadBescheidDocument(documentFile, bescheidResource);
+
+      expect(service.getBescheidDocument()).toBeObservable(
+        singleCold({ ...createEmptyBescheidDocument(), upload: { fileName: documentFile.name, loading: true } }),
+      );
     });
 
     it('should call binary file service', () => {
-      service.doUploadBescheidDocument(bescheid, file);
+      service.uploadBescheidDocument(documentFile, bescheidResource);
 
-      expect(binaryFileService.uploadFile).toHaveBeenCalledWith(bescheid, BescheidLinkRel.UPLOAD_BESCHEID_FILE, file, false);
+      expect(binaryFileService.uploadFile).toHaveBeenCalledWith(
+        bescheidResource,
+        BescheidLinkRel.UPLOAD_BESCHEID_FILE,
+        documentFile,
+        false,
+      );
     });
 
-    it('should call handle upload becheid document response', () => {
-      service.handleUploadBescheidDocumentResponse = jest.fn();
+    it('should handle upload response', () => {
+      const binaryFileStateResource: StateResource<BinaryFileResource> = createStateResource(createBinaryFileResource());
+      binaryFileService.uploadFile.mockReturnValue(of(binaryFileStateResource));
 
-      service.doUploadBescheidDocument(bescheid, file);
+      service.uploadBescheidDocument(documentFile, bescheidResource);
 
-      expect(service.handleUploadBescheidDocumentResponse).toHaveBeenCalledWith(bescheid, binaryFileStateResource);
+      expect(service.handleUploadBescheidDocumentResponse).toHaveBeenCalledWith(bescheidResource, binaryFileStateResource);
     });
   });
 
-  describe('handle upload bescheid document response', () => {
-    const bescheid: BescheidResource = createBescheidResource();
-
-    const binaryFile: BinaryFileResource = createBinaryFileResource();
-    const apiError: ApiError = createApiError();
-    const binaryFileErrorStateResource: StateResource<BinaryFileResource> = createErrorStateResource(apiError);
-    const binaryFileStateResource: StateResource<BinaryFileResource> = createStateResource(binaryFile);
-
-    it('should call create bescheid document from file on success', () => {
+  describe('handleUploadBescheidDocumentResponse', () => {
+    beforeEach(() => {
+      service.emitBescheidDocumentError = jest.fn();
       service.createBescheidDocumentFromFile = jest.fn();
-
-      service.handleUploadBescheidDocumentResponse(bescheid, binaryFileStateResource);
-
-      expect(service.createBescheidDocumentFromFile).toHaveBeenCalledWith(bescheid, binaryFile);
     });
 
-    describe('on no error', () => {
-      it('should set error', () => {
-        service.uploadBescheidDocumentInProgress$.next({ loading: false });
+    it('should emit error', () => {
+      const errorStateResource: StateResource<BinaryFileResource> = createErrorStateResource(createProblemDetail());
 
-        service.handleUploadBescheidDocumentResponse(bescheid, binaryFileErrorStateResource);
+      service.handleUploadBescheidDocumentResponse(bescheidResource, errorStateResource);
 
-        expect(service.uploadBescheidDocumentInProgress$.value.error).toBe(apiError);
-      });
+      expect(service.emitBescheidDocumentError).toHaveBeenCalledWith(errorStateResource);
+    });
 
-      it('should set loading to false', () => {
-        service.uploadBescheidDocumentInProgress$.next({ loading: true });
+    it('should create bescheid document from file', () => {
+      const binaryFileStateResource: StateResource<BinaryFileResource> = createStateResource(createBinaryFileResource());
 
-        service.handleUploadBescheidDocumentResponse(bescheid, binaryFileErrorStateResource);
+      service.handleUploadBescheidDocumentResponse(bescheidResource, binaryFileStateResource);
 
-        expect(service.uploadBescheidDocumentInProgress$.value.loading).toBeFalsy();
-      });
+      expect(service.createBescheidDocumentFromFile).toHaveBeenCalledWith(bescheidResource, binaryFileStateResource.resource);
     });
   });
 
@@ -751,14 +550,12 @@ describe('BescheidService', () => {
     const binaryFile: BinaryFileResource = createBinaryFileResource();
 
     const createCommandProps: CreateCommandProps = createCreateCommandProps();
-    let buildCreateBescheidDocumentFromFilePropsSpy;
+    let buildCreateBescheidDocumentFromFilePropsMock = buildCreateBescheidDocumentFromFileProps as jest.Mock;
 
     const commandStateResource: StateResource<CommandResource> = createCommandStateResource();
 
     beforeEach(() => {
-      buildCreateBescheidDocumentFromFilePropsSpy = jest
-        .spyOn(BescheidUtil, 'buildCreateBescheidDocumentFromFileProps')
-        .mockReturnValue(createCommandProps);
+      buildCreateBescheidDocumentFromFilePropsMock.mockReturnValue(createCommandProps);
       commandService.createCommandByProps.mockReturnValue(of(commandStateResource));
     });
 
@@ -771,7 +568,7 @@ describe('BescheidService', () => {
     it('should build create command document from file props', () => {
       service.createBescheidDocumentFromFile(bescheid, binaryFile);
 
-      expect(buildCreateBescheidDocumentFromFilePropsSpy).toHaveBeenCalledWith(bescheid, binaryFile);
+      expect(buildCreateBescheidDocumentFromFilePropsMock).toHaveBeenCalledWith(bescheid, binaryFile);
     });
 
     it('should call handle create bescheid document from file response', () => {
@@ -783,374 +580,340 @@ describe('BescheidService', () => {
     });
   });
 
-  describe('handle create bescheid document response from file', () => {
-    const binaryFile: BinaryFileResource = createBinaryFileResource();
-    const command: CommandResource = createCommandResource([CommandLinkRel.EFFECTED_RESOURCE]);
-    const commandStateResource: StateResource<CommandResource> = createStateResource(command);
+  describe('handleCreateBescheidDocumentFromFileResponse', () => {
+    const commandStateResource: StateResource<CommandResource> = createStateResource(
+      createCommandResource([CommandLinkRel.EFFECTED_RESOURCE]),
+    );
 
     beforeEach(() => {
-      service.bescheidDocumentFile$.next(createEmptyStateResource());
+      service.emitBescheidDocumentError = jest.fn();
     });
 
-    it('should set upload bescheid document in progress done', () => {
-      service.handleCreateBescheidDocumentFromFileResponse(commandStateResource, binaryFile);
+    it('should emit error', () => {
+      const errorStateResource: StateResource<CommandResource> = createErrorStateResource(createProblemDetail());
+
+      service.handleCreateBescheidDocumentFromFileResponse(errorStateResource, createBinaryFileResource());
 
-      expect(service.bescheidDocumentFile$.value).toEqual(createStateResource(binaryFile));
+      expect(service.emitBescheidDocumentError).toHaveBeenCalledWith(errorStateResource);
     });
 
-    describe('on error', () => {
-      it('should set upload bescheid in progress error', () => {
-        const httpError: HttpError = createApiError();
-        const errorStateResource: StateResource<CommandResource> = createErrorStateResource(httpError);
+    it('should NOT emit error', () => {
+      const binaryFileResource: BinaryFileResource = createBinaryFileResource();
 
-        service.handleCreateBescheidDocumentFromFileResponse(errorStateResource, binaryFile);
+      service.handleCreateBescheidDocumentFromFileResponse(commandStateResource, binaryFileResource);
 
-        expect(service.uploadBescheidDocumentInProgress$.value.error).toBe(httpError);
-      });
+      expect(service.emitBescheidDocumentError).not.toHaveBeenCalled();
+    });
 
-      it('should set upload bescheid in progress loading false', () => {
-        const httpError: HttpError = createApiError();
-        const errorStateResource: StateResource<CommandResource> = createErrorStateResource(httpError);
+    it('should emit bescheid document state', () => {
+      const binaryFileResource: BinaryFileResource = createBinaryFileResource();
 
-        service.handleCreateBescheidDocumentFromFileResponse(errorStateResource, binaryFile);
+      service.handleCreateBescheidDocumentFromFileResponse(commandStateResource, binaryFileResource);
 
-        expect(service.uploadBescheidDocumentInProgress$.value.loading).toBeFalsy();
-      });
+      expect(service.getBescheidDocument()).toBeObservable(
+        singleCold({
+          ...createEmptyBescheidDocument(),
+          documentUri: getEffectedResourceUrl(commandStateResource.resource),
+          upload: createEmptyUploadInProgress(),
+          resource: binaryFileResource,
+        }),
+      );
     });
 
-    describe('on success', () => {
-      it('should set documentFile', () => {
-        service.handleCreateBescheidDocumentFromFileResponse(commandStateResource, binaryFile);
-
-        expect(service.bescheidDocumentFile$.value).toEqual(createStateResource(binaryFile));
-      });
+    it('should NOT emit bescheid document state', () => {
+      const errorStateResource: StateResource<CommandResource> = createErrorStateResource(createProblemDetail());
 
-      it('should set document uri', () => {
-        service.handleCreateBescheidDocumentFromFileResponse(commandStateResource, binaryFile);
+      service.handleCreateBescheidDocumentFromFileResponse(errorStateResource, createBinaryFileResource());
 
-        expect(service.bescheidDocumentUri$.value).toEqual(getUrl(command, CommandLinkRel.EFFECTED_RESOURCE));
-      });
+      expect(service.getBescheidDocument()).toBeObservable(singleCold(createEmptyBescheidDocument()));
     });
   });
 
-  describe('delete bescheid document', () => {
-    it('should clear document uri', () => {
-      service.bescheidDocumentUri$.next(faker.internet.url());
-
-      service.deleteBescheidDocument();
+  describe('createBescheid', () => {
+    const vorgangWithEingang: VorgangWithEingangResource = createVorgangWithEingangResource();
+    const command: CommandResource = createCommandResource([CommandLinkRel.EFFECTED_RESOURCE]);
+    const commandStateResource: StateResource<CommandResource> = createStateResource(command);
 
-      expect(service.bescheidDocumentUri$.value).toBeNull();
+    beforeEach(() => {
+      service.updateBescheidDraft = jest.fn();
     });
 
-    it('should clear document file', () => {
-      service.bescheidDocumentFile$.next(createStateResource(createBinaryFileResource()));
+    beforeEach(() => {
+      facade.getBescheidCommand.mockReturnValue(of(commandStateResource));
+      (service as any).bescheidResourceService.loadByResourceUri = jest.fn();
+    });
 
-      service.deleteBescheidDocument();
+    it('should call facade', () => {
+      service.createBescheid(vorgangWithEingang).subscribe();
 
-      expect(service.bescheidDocumentFile$.value).toEqual(createEmptyStateResource());
+      expect(facade.createBescheidDraft).toHaveBeenCalledWith(vorgangWithEingang, {
+        order: CommandOrder.CREATE_BESCHEID,
+        body: null,
+      });
     });
 
-    it('should clear document', () => {
-      service.bescheidDocument$.next(createStateResource(createDocumentResource()));
-
-      service.deleteBescheidDocument();
+    it('should update bescheid draft', () => {
+      service.createBescheid(vorgangWithEingang).subscribe();
 
-      expect(service.bescheidDocument$.value).toEqual(createEmptyStateResource());
+      expect(service.updateBescheidDraft).toHaveBeenCalledWith(commandStateResource.resource);
     });
   });
 
-  describe('init', () => {
-    it('should emit null bescheid document uri', () => {
-      service.init();
+  describe('updateBescheidDraft', () => {
+    const command: CommandResource = createCommandResource([CommandLinkRel.EFFECTED_RESOURCE]);
 
-      expect(service.getDocumentUri()).toBeObservable(singleCold(null));
+    beforeEach(() => {
+      (service as any).bescheidResourceService.loadByResourceUri = jest.fn();
     });
 
-    it('should emit empty state resource document file', () => {
-      service.init();
+    it('should load resource by uri', () => {
+      service.updateBescheidDraft(command);
 
-      expect(service.getBescheidDocumentFile()).toBeObservable(singleCold(createEmptyStateResource()));
+      expect((service as any).bescheidResourceService.loadByResourceUri).toHaveBeenCalledWith(
+        getUrl(command, CommandLinkRel.EFFECTED_RESOURCE),
+      );
     });
 
-    it('should emit empty state resource uploaded attachment', () => {
-      service.init();
+    it('should emit bescheid created', () => {
+      service.updateBescheidDraft({ ...command, order: CommandOrder.CREATE_BESCHEID });
 
-      expect(service.getUploadedAttachment()).toBeObservable(singleCold(createEmptyStateResource()));
+      expect(service.getBescheidCreated()).toBeObservable(singleCold(true));
     });
+  });
 
-    it('should emit empty upload in progress for upload bescheid document in progress', () => {
-      service.init();
+  describe('updateBescheid', () => {
+    const bescheid: Bescheid = createBescheid();
+    const commandResource: CommandResource = createCommandResource([CommandLinkRel.EFFECTED_RESOURCE]);
+    const commandStateResource: StateResource<CommandResource> = createStateResource(commandResource);
 
-      expect(service.getUploadBescheidDocumentInProgress()).toBeObservable(singleCold({ loading: false }));
+    beforeEach(() => {
+      service.doUpdateBescheid = jest.fn().mockReturnValue(EMPTY);
+      service.updateBescheidDraft = jest.fn().mockReturnValue(EMPTY);
     });
 
-    it('should emit empty upload in progress for upload attachmentdocument in progress', () => {
-      service.init();
+    it('should do update bescheid', () => {
+      service.updateBescheid(bescheidResource, bescheid);
 
-      expect(service.getUploadAttachmentInProgress()).toBeObservable(singleCold({ loading: false }));
+      expect(service.doUpdateBescheid).toHaveBeenCalledWith(bescheidResource, bescheid);
     });
 
-    it('should init active step', () => {
-      service.setActiveStep(2);
+    it('should update bescheid draft', () => {
+      service.doUpdateBescheid = jest.fn().mockReturnValue(of(commandStateResource));
 
-      service.init();
+      service.updateBescheid(bescheidResource, bescheid).subscribe();
 
-      expect(service.activeStep$).toBeObservable(singleCold(1));
+      expect(service.updateBescheidDraft).toHaveBeenCalledWith(commandResource);
     });
   });
 
-  describe('create bescheid document', () => {
-    const commandResource: CommandResource = createCommandResource([CommandLinkRel.EFFECTED_RESOURCE]);
-    const commandStateResource: StateResource<CommandResource> = createStateResource(commandResource);
-
+  describe('do update bescheid', () => {
+    const bescheid: Bescheid = createBescheid();
     const bescheidResource: BescheidResource = createBescheidResource();
-    const createCommandProps: CreateCommandProps = createCreateCommandProps();
 
-    let buildCreateBescheidDocumentCommandPropsSpy: jest.SpyInstance;
+    const createCommandProps: CreateCommandProps = createCreateCommandProps();
+    let buildUpdateBescheidCommandPropsMock: jest.Mock = buildUpdateBescheidCommandProps as jest.Mock;
 
     beforeEach(() => {
-      commandService.createCommandByProps.mockReturnValue(of(commandStateResource));
-      service.getResource = jest.fn().mockReturnValue(bescheidResource);
-      buildCreateBescheidDocumentCommandPropsSpy = jest
-        .spyOn(BescheidUtil, 'buildCreateBescheidDocumentCommandProps')
-        .mockReturnValue(createCommandProps);
+      buildUpdateBescheidCommandPropsMock.mockReturnValue(createCommandProps);
+      commandService.createCommandByProps.mockClear();
+      commandService.createCommandByProps.mockReturnValue(of(createCommandStateResource()));
     });
 
-    it('should call command service', () => {
-      service.createBescheidDocument();
+    it('should build update bescheid command props', () => {
+      service.doUpdateBescheid(bescheidResource, bescheid);
 
-      expect(commandService.createCommandByProps).toHaveBeenCalledWith(createCommandProps);
+      expect(buildUpdateBescheidCommandPropsMock).toHaveBeenCalledWith(bescheidResource, bescheid);
     });
 
-    it('should build create command props', () => {
-      service.createBescheidDocument();
+    it('should call command service', () => {
+      service.doUpdateBescheid(bescheidResource, bescheid).subscribe();
 
-      expect(buildCreateBescheidDocumentCommandPropsSpy).toHaveBeenCalledWith(bescheidResource);
+      expect(commandService.createCommandByProps).toHaveBeenCalledWith(createCommandProps);
     });
+  });
 
-    it('should set create beschied document in progress', () => {
-      service.createBescheidDocument();
-
-      expect(service.createBescheidDocumentInProgress$.value).toEqual(commandStateResource);
+  describe('sendBescheidManually', () => {
+    beforeEach(() => {
+      service.sendBescheid = jest.fn().mockReturnValue(EMPTY);
     });
 
-    it('should set upload beschied document in progress loading false', () => {
-      service.uploadBescheidDocumentInProgress$.next({
-        loading: true,
-        error: createApiError(),
-        fileName: 'Dummy',
-      });
-
-      service.createBescheidDocument();
+    it('should send bescheid', () => {
+      service.sendBescheidManually().subscribe();
 
-      expect(service.uploadBescheidDocumentInProgress$.value).toEqual({ loading: false });
+      expect(service.sendBescheid).toHaveBeenCalledWith(BescheidLinkRel.BESCHEIDEN);
     });
 
-    describe('on successfully done command', () => {
-      it('should load bescheid document', fakeAsync(() => {
-        service.loadBescheidDocumentByUri = jest.fn();
-
-        service.createBescheidDocument();
-        tick();
-
-        expect(service.loadBescheidDocumentByUri).toHaveBeenCalledWith(getUrl(commandResource, CommandLinkRel.EFFECTED_RESOURCE));
-      }));
+    it('should return send bescheid command', () => {
+      const commandStateResource: StateResource<CommandResource> = createSuccessfullyDoneCommandStateResource();
+      service.sendBescheid = jest.fn().mockReturnValue(of(commandStateResource));
 
-      it('should update bescheid document Url', fakeAsync(() => {
-        service.loadBescheidDocumentByUri = jest.fn();
+      const sendCommandStateResource$: Observable<StateResource<CommandResource>> = service.sendBescheidManually();
 
-        service.createBescheidDocument();
-        tick();
+      expect(sendCommandStateResource$).toBeObservable(singleColdCompleted(commandStateResource));
+    });
+  });
 
-        expect(service.bescheidDocumentUri$.value).toBe(getUrl(commandResource, CommandLinkRel.EFFECTED_RESOURCE));
-      }));
+  describe('sendBescheid', () => {
+    beforeEach(() => {
+      service.getBescheidDraft = jest.fn().mockReturnValue(of(createStateResource(bescheidResource)));
+      commandService.createCommandByProps.mockReturnValue(EMPTY);
     });
 
-    describe('on error', () => {
-      const commandErrorStateResource: StateResource<CommandResource> = createStateResource(createCommandErrorResource());
+    it('should get bescheid draft', () => {
+      service.sendBescheidManually().subscribe();
 
-      it('should emit command state resource', () => {
-        commandService.createCommandByProps.mockReturnValue(of(commandErrorStateResource));
+      expect(service.getBescheidDraft).toHaveBeenCalled();
+    });
 
-        service.createBescheidDocument();
+    it('should create command', () => {
+      service.sendBescheid(BescheidLinkRel.BESCHEIDEN).subscribe();
 
-        expect(service.createBescheidDocumentInProgress$.value).toBe(commandErrorStateResource);
-      });
+      expect(commandService.createCommandByProps).toHaveBeenCalledWith({
+        resource: bescheidResource,
+        linkRel: BescheidLinkRel.BESCHEIDEN,
+        command: {
+          order: CommandOrder.SEND_BESCHEID,
+          body: null,
+        },
+        snackBarMessage: EMPTY_STRING,
+      } as CreateCommandProps);
+    });
 
-      it('should set create bescheid document in progress loading false', () => {
-        service.createBescheidDocumentInProgress$.next(createEmptyStateResource(true));
-        commandService.createCommandByProps.mockReturnValue(of(commandErrorStateResource));
+    it('should return send bescheid command', () => {
+      const commandStateResource: StateResource<CommandResource> = createSuccessfullyDoneCommandStateResource();
+      commandService.createCommandByProps = jest.fn().mockReturnValue(of(commandStateResource));
 
-        service.createBescheidDocument();
+      const sendCommandStateResource$: Observable<StateResource<CommandResource>> = service.sendBescheid(
+        BescheidLinkRel.BESCHEIDEN,
+      );
 
-        expect(service.createBescheidDocumentInProgress$.value.loading).toBeFalsy();
-      });
+      expect(sendCommandStateResource$).toBeObservable(singleColdCompleted(commandStateResource));
     });
   });
 
-  describe('exists bescheid document file', () => {
-    it('should return true if resource exists', (done) => {
-      service.bescheidDocumentFile$.next(createStateResource(createBinaryFileResource()));
-
-      service.existBescheidDocumentFile().subscribe((result) => {
-        expect(result).toBeTruthy();
-        done();
-      });
+  describe('sendBescheidMessage', () => {
+    beforeEach(() => {
+      service.getBescheidDraft = jest.fn().mockReturnValue(createStateResource(bescheidResource));
+      service.sendBescheid = jest.fn().mockReturnValue(EMPTY);
     });
 
-    it('should return false if resource is null', (done) => {
-      service.bescheidDocumentFile$.next(createEmptyStateResource());
+    it('should send bescheid', () => {
+      service.sendBescheidMessage().subscribe();
 
-      service.existBescheidDocumentFile().subscribe((result) => {
-        expect(result).toBeFalsy();
-        done();
-      });
+      expect(service.sendBescheid).toHaveBeenCalledWith(BescheidLinkRel.BESCHEIDEN_UND_SENDEN);
     });
-  });
 
-  describe('get bescheid document command', () => {
-    const commandResource: CommandResource = createCommandResource();
-    const commandStateResource: StateResource<CommandResource> = createStateResource(commandResource);
+    it('should return send bescheid command', () => {
+      const commandStateResource: StateResource<CommandResource> = createSuccessfullyDoneCommandStateResource();
+      service.sendBescheid = jest.fn().mockReturnValue(of(commandStateResource));
 
-    beforeEach(() => {
-      commandService.getCommandByOrder.mockReturnValue(of(commandStateResource));
-    });
-
-    it('should call command service', (done) => {
-      service.getBescheidDocumentCommand().subscribe(() => {
-        expect(commandService.getCommandByOrder).toHaveBeenCalledWith(CommandOrder.CREATE_BESCHEID_DOCUMENT);
-        done();
-      });
-    });
+      const sendCommandStateResource$: Observable<StateResource<CommandResource>> = service.sendBescheidMessage();
 
-    it('should return command stateResource', (done) => {
-      service.getBescheidDocumentCommand().subscribe((result) => {
-        expect(result).toBe(commandStateResource);
-        done();
-      });
+      expect(sendCommandStateResource$).toBeObservable(singleColdCompleted(commandStateResource));
     });
   });
 
-  describe('exists bescheid draft', () => {
+  describe('setActiveStep', () => {
     beforeEach(() => {
-      service.bescheidResourceService.existResource = jest.fn().mockReturnValue(of(true));
-    });
-
-    it('should call bescheid resource service', () => {
-      service.existsBescheidDraft();
-
-      expect(service.bescheidResourceService.existResource).toHaveBeenCalled();
+      service._clearUploadedFiles = jest.fn();
     });
 
-    it('should return false on missing resource', () => {
-      service.bescheidResourceService.existResource = jest.fn().mockReturnValue(of(false));
-
-      const exists: boolean = service.existsBescheidDraft();
+    it('should emit changed active step', () => {
+      service.setActiveStep(BescheidWizardStep.DokumenteHochladen);
 
-      expect(exists).toBeFalsy();
+      expect(service.getActiveStep()).toBeObservable(singleCold(BescheidWizardStep.DokumenteHochladen));
     });
 
-    it('should return true on existing resource', () => {
-      const exists: boolean = service.existsBescheidDraft();
+    it('should clear uploaded files', () => {
+      service.setActiveStep(BescheidWizardStep.DokumenteHochladen);
 
-      expect(exists).toBeTruthy();
+      expect(service._clearUploadedFiles).toHaveBeenCalled();
     });
   });
 
-  describe('bescheidVerwerfen', () => {
-    const command: CommandResource = createCommandResource();
-    const commandStateResource: StateResource<CommandResource> = createStateResource(command);
-
-    beforeEach(() => {
-      service.deleteBescheid = jest.fn().mockReturnValue(of(commandStateResource));
-      service.deleteBescheidDocument = jest.fn();
-
-      service.getResource = jest.fn().mockReturnValue(createBescheidResource());
-    });
+  describe('getBescheidDraft', () => {
+    const bescheidDraft: BescheidResource = createBescheidResource();
+    const bescheidDraftStateResource: StateResource<BescheidResource> = createStateResource(bescheidDraft);
 
-    it('should get resource', () => {
-      service.bescheidVerwerfen().subscribe();
+    it('should call resource service', () => {
+      bescheidResourceService.get = jest.fn();
 
-      expect(service.getResource).toHaveBeenCalled();
-    });
+      service.getBescheidDraft();
 
-    it('should delete bescheid', (done) => {
-      service.bescheidVerwerfen().subscribe(() => {
-        expect(service.deleteBescheid).toHaveBeenCalled();
-        done();
-      });
+      expect(bescheidResourceService.get).toHaveBeenCalled();
     });
 
-    it('should return command', () => {
-      const command: StateResource<CommandResource> = createCommandStateResource();
-      service.deleteBescheid = jest.fn().mockReturnValue(singleCold(command));
+    it('should return value', () => {
+      bescheidResourceService.get = jest.fn().mockReturnValue(singleCold(bescheidDraftStateResource));
 
-      const command$: Observable<StateResource<CommandResource>> = service.bescheidVerwerfen();
+      const bescheidStateResource$: Observable<StateResource<BescheidResource>> = service.getBescheidDraft();
 
-      expect(command$).toBeObservable(singleCold(command));
+      expect(bescheidStateResource$).toBeObservable(singleCold(bescheidDraftStateResource));
     });
+  });
 
-    it('should delete bescheid document', (done) => {
-      service.deleteBescheid = jest.fn().mockReturnValue(of(createCommandStateResource()));
-
-      service.bescheidVerwerfen().subscribe(() => {
-        done();
-        expect(service.deleteBescheidDocument).toHaveBeenCalled();
-      });
-    });
+  describe('setNachrichtEmpfaenger', () => {
+    it('should change wizard state', () => {
+      const empfaenger: string = faker.person.fullName();
 
-    it('should reload vorgang', (done) => {
-      service.deleteBescheid = jest.fn().mockReturnValue(of(createCommandStateResource()));
+      service.setNachrichtEmpfaenger(empfaenger);
 
-      service.bescheidVerwerfen().subscribe(() => {
-        done();
-        expect(vorgangService.reloadCurrentVorgang).toHaveBeenCalled();
-      });
+      expect(service.getWizard()).toBeObservable(singleCold({ ...createInitialWizard(), empfaenger }));
     });
   });
 
-  describe('load bescheid document file', () => {
-    const document: DocumentResource = createDocumentResource([DocumentLinkRel.FILE]);
-    const binaryFileStateResource: StateResource<BinaryFileResource> = createStateResource(createBinaryFileResource());
+  describe('lockBescheidSending', () => {
+    it('should change wizard state', () => {
+      service.lockBescheidSending();
 
-    beforeEach(() => {
-      binaryFileService.getFile.mockReturnValue(of(binaryFileStateResource));
+      expect(service.getWizard()).toBeObservable(singleCold({ ...createInitialWizard(), canBeSend: false }));
     });
+  });
 
-    it('should call bianry file service', () => {
-      service.loadBescheidDocumentFile(document);
+  describe('unlockBescheidSending', () => {
+    it('should change wizard state', () => {
+      service.unlockBescheidSending();
 
-      expect(binaryFileService.getFile).toHaveBeenCalledWith(getUrl(document, DocumentLinkRel.FILE));
+      expect(service.getWizard()).toBeObservable(singleCold({ ...createInitialWizard(), canBeSend: true }));
     });
+  });
 
-    it('should set bescheidDocument file', () => {
-      service.loadBescheidDocumentFile(document);
+  describe('finishAddingBescheidDocument', () => {
+    it('should update state', () => {
+      const bescheidDocument: BescheidDocument = createBescheidDocument();
+      service._bescheidDocument$.next(bescheidDocument);
 
-      expect(service.bescheidDocumentFile$.value).toBe(binaryFileStateResource);
-    });
+      service.finishAddingBescheidDocument();
 
-    it('should set create bescheid document in progress loading false', () => {
-      service.createBescheidDocumentInProgress$.next(createEmptyStateResource(true));
+      expect(service.getBescheidDocument()).toBeObservable(
+        singleCold({
+          ...bescheidDocument,
+          create: createEmptyStateResource(),
+          upload: createEmptyUploadInProgress(),
+        } as BescheidDocument),
+      );
+    });
+  });
 
-      service.loadBescheidDocumentFile(document);
+  describe('clear uploaded files', () => {
+    it('should call binary files service', () => {
+      service._clearUploadedFiles();
 
-      expect(service.createBescheidDocumentInProgress$.value.loading).toBeFalsy();
+      expect(binaryFileService.clearUploadedFiles).toHaveBeenCalledWith(BESCHEID_UPLOADED_ATTACHMENTS);
     });
   });
 
   describe('get bescheid list', () => {
     it('should call bescheid list resource service', () => {
-      service.bescheidListResourceService.getList = jest.fn();
-
       service.getBescheidList();
 
-      expect(service.bescheidListResourceService.getList).toHaveBeenCalled();
+      expect(bescheidListResourceService.getList).toHaveBeenCalled();
     });
 
     it('should return value', () => {
       const bescheidList: BescheidListResource = createBescheidListResource();
       const bescheidListStateResource: StateResource<BescheidListResource> = createStateResource(bescheidList);
-      service.bescheidListResourceService.getList = jest.fn().mockReturnValue(singleCold(bescheidListStateResource));
+      bescheidListResourceService.getList = jest.fn().mockReturnValue(singleCold(bescheidListStateResource));
 
       const command$: Observable<StateResource<BescheidListResource>> = service.getBescheidList();
 
@@ -1158,7 +921,7 @@ describe('BescheidService', () => {
     });
   });
 
-  describe('load bescheid document', () => {
+  describe('get bescheid document by uri', () => {
     const resourceUri: ResourceUri = faker.internet.url();
     const document: DocumentResource = createDocumentResource();
 
@@ -1167,13 +930,13 @@ describe('BescheidService', () => {
     });
 
     it('should call repository', () => {
-      service.loadBescheidDocument(resourceUri);
+      service.getBescheidDocumentByUri(resourceUri);
 
       expect(resourceRepository.getResource).toHaveBeenCalledWith(resourceUri);
     });
 
     it('should return value', () => {
-      const documentStateResource$: Observable<StateResource<DocumentResource>> = service.loadBescheidDocument(resourceUri);
+      const documentStateResource$: Observable<StateResource<DocumentResource>> = service.getBescheidDocumentByUri(resourceUri);
 
       expect(documentStateResource$).toBeObservable(
         cold('(ab|)', { a: createEmptyStateResource(true), b: createStateResource(document) }),
@@ -1181,44 +944,6 @@ describe('BescheidService', () => {
     });
   });
 
-  describe('get resource', () => {
-    const bescheidResource: BescheidResource = createBescheidResource();
-    const bescheidStateResource: StateResource<BescheidResource> = createStateResource(bescheidResource);
-
-    it('should call bescheid resource service select resource', () => {
-      service.bescheidResourceService.selectResource = jest.fn().mockReturnValue(of(bescheidStateResource));
-
-      service.getResource();
-
-      expect(service.bescheidResourceService.selectResource).toHaveBeenCalled();
-    });
-
-    it('should return value', () => {
-      service.bescheidResourceService.selectResource = jest.fn().mockReturnValue(of(bescheidStateResource));
-
-      const bescheidDraft: BescheidResource = service.getResource();
-
-      expect(bescheidDraft).toBe(bescheidResource);
-    });
-  });
-
-  describe('getEmpfaenger', () => {
-    it('should return Empfänger', () => {
-      const vorgangWithEingangResource: VorgangWithEingangResource = createVorgangWithEingangResource();
-      const vorgangWithEingangStateResource: StateResource<VorgangWithEingangResource> =
-        createStateResource(vorgangWithEingangResource);
-      vorgangService.getVorgangWithEingang.mockReturnValue(of(vorgangWithEingangStateResource));
-
-      const empfaenger$: Observable<string> = service.getEmpfaenger();
-
-      expect(empfaenger$).toBeObservable(
-        singleColdCompleted(
-          `${vorgangWithEingangResource.eingang.antragsteller.vorname} ${vorgangWithEingangResource.eingang.antragsteller.nachname}`,
-        ),
-      );
-    });
-  });
-
   describe('get last bescheid', () => {
     const bescheid: BescheidResource = createBescheidResource();
     const bescheide: BescheidResource[] = [bescheid];
@@ -1229,7 +954,7 @@ describe('BescheidService', () => {
     beforeEach(() => {
       service.filterBySentStatus = jest.fn().mockReturnValue(bescheide);
       sortByGermanDateStrSpy = jest.spyOn(DateUtil, 'sortByGermanDateStr').mockReturnValue(bescheide);
-      getItemsSpy = service.bescheidListResourceService.getItems = jest.fn().mockReturnValue(of(bescheide));
+      getItemsSpy = bescheidListResourceService.getItems = jest.fn().mockReturnValue(of(bescheide));
     });
 
     it('should get items', () => {
@@ -1257,47 +982,6 @@ describe('BescheidService', () => {
     });
   });
 
-  describe('exist bescheid', () => {
-    const bescheid: BescheidResource = createBescheidResource();
-    const bescheide: BescheidResource[] = [bescheid];
-    const bescheidListStateResource: StateResource<BescheidListResource> = createStateResource(
-      createBescheidListResource(bescheide),
-    );
-    let getItemsSpy: jest.SpyInstance;
-
-    beforeEach(() => {
-      service.getBescheidList = jest.fn().mockReturnValue(of(bescheidListStateResource));
-      service.filterBySentStatus = jest.fn().mockReturnValue(bescheide);
-      getItemsSpy = service.bescheidListResourceService.getItems = jest.fn().mockReturnValue(of(bescheide));
-    });
-
-    it('should get items', () => {
-      service.existBescheid().subscribe();
-
-      expect(getItemsSpy).toHaveBeenCalled();
-    });
-
-    it('should filter by sent status', () => {
-      service.existBescheid().subscribe();
-
-      expect(service.filterBySentStatus).toHaveBeenCalledWith(bescheide);
-    });
-
-    it('should return true if at least one bescheid exists', () => {
-      const existBescheid$: Observable<boolean> = service.existBescheid();
-
-      expect(existBescheid$).toBeObservable(singleColdCompleted(true));
-    });
-
-    it('should return false if no bescheide exists', () => {
-      service.filterBySentStatus = jest.fn().mockReturnValue([]);
-
-      const existBescheid$: Observable<boolean> = service.existBescheid();
-
-      expect(existBescheid$).toBeObservable(singleColdCompleted(false));
-    });
-  });
-
   describe('filter by sent status', () => {
     it('should keep entry with sent status', () => {
       const bescheidWithSentStatus: BescheidResource = {
@@ -1328,130 +1012,44 @@ describe('BescheidService', () => {
     });
   });
 
-  describe('refresh list', () => {
-    it('should call refresh on list resource service', () => {
-      service.bescheidListResourceService.refresh = jest.fn();
-
-      service.refreshList();
-
-      expect(service.bescheidListResourceService.refresh).toHaveBeenCalled();
-    });
-  });
-
-  describe('uploadAttachment', () => {
-    const bescheidResource: BescheidResource = createBescheidResource([BescheidLinkRel.UPLOAD_ATTACHMENT]);
-    const file: File = createFile();
-    const binaryFileStateResource: StateResource<BinaryFileResource> = createStateResource(createBinaryFileResource());
+  describe('exist bescheid', () => {
+    const bescheid: BescheidResource = createBescheidResource();
+    const bescheide: BescheidResource[] = [bescheid];
+    const bescheidListStateResource: StateResource<BescheidListResource> = createStateResource(
+      createBescheidListResource(bescheide),
+    );
+    let getItemsSpy: jest.SpyInstance;
 
     beforeEach(() => {
-      binaryFileService.uploadFile.mockReturnValue(of(binaryFileStateResource));
-      service.handleAttachmentUpload = jest.fn();
-    });
-
-    it('should emit upload in progress', () => {
-      service.uploadAttachment(bescheidResource, file).subscribe();
-
-      expect(service.getUploadAttachmentInProgress()).toBeObservable(
-        singleCold({ fileName: file.name, loading: true } as UploadFileInProgress),
-      );
-    });
-
-    it('should upload file', (done) => {
-      service.uploadAttachment(bescheidResource, file).subscribe(() => {
-        expect(binaryFileService.uploadFile).toHaveBeenCalledWith(
-          bescheidResource,
-          BescheidLinkRel.UPLOAD_ATTACHMENT,
-          file,
-          false,
-        );
-        done();
-      });
-    });
-
-    it('should handle attachment upload', (done) => {
-      service.uploadAttachment(bescheidResource, file).subscribe(() => {
-        expect(service.handleAttachmentUpload).toHaveBeenCalledWith(binaryFileStateResource);
-        done();
-      });
-    });
-
-    it('should emit uploaded binary file', () => {
-      expect(service.uploadAttachment(bescheidResource, file)).toBeObservable(singleColdCompleted(binaryFileStateResource));
-    });
-  });
-
-  describe('handleAttachmentUpload', () => {
-    describe('on error', () => {
-      const binaryFileStateResource: StateResource<BinaryFileResource> = createErrorStateResource(createApiError());
-
-      it('should emit upload in progress', () => {
-        service.handleAttachmentUpload(binaryFileStateResource);
-
-        expect(service.getUploadAttachmentInProgress()).toBeObservable(
-          singleCold({
-            loading: false,
-            error: binaryFileStateResource.error,
-          } as UploadFileInProgress),
-        );
-      });
-
-      it('should emit binary file', () => {
-        service.handleAttachmentUpload(binaryFileStateResource);
-
-        expect(service.getUploadedAttachment()).toBeObservable(singleCold(binaryFileStateResource));
-      });
+      service.getBescheidList = jest.fn().mockReturnValue(of(bescheidListStateResource));
+      service.filterBySentStatus = jest.fn().mockReturnValue(bescheide);
+      getItemsSpy = bescheidListResourceService.getItems = jest.fn().mockReturnValue(of(bescheide));
     });
 
-    describe('on success', () => {
-      const binaryFileStateResource: StateResource<BinaryFileResource> = createStateResource(createBinaryFileResource());
-
-      it('should emit upload in progress', () => {
-        service.handleAttachmentUpload(binaryFileStateResource);
-
-        expect(service.getUploadAttachmentInProgress()).toBeObservable(
-          singleCold({
-            loading: false,
-          } as UploadFileInProgress),
-        );
-      });
-
-      it('should emit binary file', () => {
-        service.handleAttachmentUpload(binaryFileStateResource);
+    it('should get items', () => {
+      service.existBescheid().subscribe();
 
-        expect(service.getUploadedAttachment()).toBeObservable(singleCold(binaryFileStateResource));
-      });
+      expect(getItemsSpy).toHaveBeenCalled();
     });
-  });
-
-  describe('clear attachment upload', () => {
-    it('should clear stateresource', () => {
-      service.uploadAttachmentInProgress$.next(createStateResource(createUploadFileInProgress()));
 
-      service.clearAttachmentUpload();
+    it('should filter by sent status', () => {
+      service.existBescheid().subscribe();
 
-      expect(service.uploadAttachmentInProgress$.value).toEqual(createEmptyStateResource());
+      expect(service.filterBySentStatus).toHaveBeenCalledWith(bescheide);
     });
-  });
 
-  describe('exit', () => {
-    it('should refresh bescheid list', () => {
-      service.bescheidListResourceService.refresh = jest.fn();
-
-      service.exit();
+    it('should return true if at least one bescheid exists', () => {
+      const existBescheid$: Observable<boolean> = service.existBescheid();
 
-      expect(service.bescheidListResourceService.refresh).toHaveBeenCalled();
+      expect(existBescheid$).toBeObservable(singleColdCompleted(true));
     });
 
-    it('should reload current vorgang', () => {
-      service.exit();
-
-      expect(vorgangService.reloadCurrentVorgang).toHaveBeenCalled();
-    });
+    it('should return false if no bescheide exists', () => {
+      service.filterBySentStatus = jest.fn().mockReturnValue([]);
 
-    it('should reload postfach list', () => {
-      service.exit();
+      const existBescheid$: Observable<boolean> = service.existBescheid();
 
-      expect(postfachService.setPostfachMailOnReload).toHaveBeenCalled();
+      expect(existBescheid$).toBeObservable(singleColdCompleted(false));
     });
   });
 });
diff --git a/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.ts b/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.ts
index f2df99ebc8b9b47adb3244134990a129aedfe731..f7b1e2f64bac1adb6a924aa1e6719cdbc1028ec5 100644
--- a/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.ts
+++ b/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.ts
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den
+ * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den
  * Ministerpräsidenten des Landes Schleswig-Holstein
  * Staatskanzlei
  * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
@@ -21,330 +21,178 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { BinaryFileListLinkRel, BinaryFileResource, BinaryFileService } from '@alfa-client/binary-file-shared';
-import {
-  CommandOrder,
-  CommandResource,
-  CommandResourceService,
-  CommandService,
-  getEffectedResourceUrl,
-  notHasCommandError,
-  tapOnCommandSuccessfullyDone,
-} from '@alfa-client/command-shared';
-import { PostfachService } from '@alfa-client/postfach-shared';
-import {
-  HttpError,
-  ResourceListService,
-  StateResource,
-  createEmptyStateResource,
-  createStateResource,
-  filterIsLoadedOrHasError,
-  getEmbeddedResources,
-  hasStateResourceError,
-  isLoaded,
-  isNotEmpty,
-  isNotNil,
-  sortByGermanDateStr,
-} from '@alfa-client/tech-shared';
-import {
-  VorgangCommandService,
-  VorgangService,
-  VorgangWithEingangLinkRel,
-  VorgangWithEingangResource,
-} from '@alfa-client/vorgang-shared';
-import { getEmpfaenger } from '@alfa-client/vorgang-shared-ui';
-import { Injectable } from '@angular/core';
-import { ResourceUri, getUrl, hasLink } from '@ngxp/rest';
-import { BehaviorSubject, Observable, Subscription, filter, first, map, startWith, switchMap, take, tap } from 'rxjs';
-import { ListResourceServiceConfig, ResourceServiceConfig } from '../../../tech-shared/src/lib/resource/resource.model';
-import { ResourceRepository } from '../../../tech-shared/src/lib/resource/resource.repository';
-import { ResourceService } from '../../../tech-shared/src/lib/resource/resource.service';
-import { BescheidFacade } from './+state/bescheid.facade';
-import { BescheidLinkRel, BescheidListLinkRel } from './bescheid.linkrel';
 import {
   Bescheid,
+  BESCHEID_UPLOADED_ATTACHMENTS,
+  BescheidDocument,
+  BescheidLinkRel,
   BescheidListResource,
   BescheidResource,
+  BescheidSendBy,
   BescheidStatus,
   BescheidWizardStep,
-  UploadFileInProgress,
-} from './bescheid.model';
-import {
   buildCreateBescheidCommand,
   buildCreateBescheidDocumentCommandProps,
   buildCreateBescheidDocumentFromFileProps,
-  buildDeleteBescheidCommandProps,
   buildSendBescheidCommandProps,
   buildUpdateBescheidCommandProps,
-} from './bescheid.util';
+  createBescheidListResourceService,
+  createBescheidResourceService,
+  createEmptyBescheidDocument,
+  createEmptyUploadInProgress,
+  createInitialWizard,
+  DocumentResource,
+  Wizard,
+} from '@alfa-client/bescheid-shared';
+import { BinaryFileListLinkRel, BinaryFileListResource, BinaryFileResource, BinaryFileService, } from '@alfa-client/binary-file-shared';
+import { CommandOrder, CommandResource, CommandService, getEffectedResourceUrl, notHasCommandError, tapOnCommandSuccessfullyDone, } from '@alfa-client/command-shared';
+import { PostfachService } from '@alfa-client/postfach-shared';
+import { createEmptyStateResource, createStateResource, filterIsLoadedOrHasError, getEmbeddedResources, hasStateResourceError, isLoaded, isNotEmpty, isNotNil, ResourceRepository, sortByGermanDateStr, StateResource, } from '@alfa-client/tech-shared';
+import { VorgangCommandService, VorgangService, VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
+import { inject, Injectable } from '@angular/core';
+import { getUrl, hasLink, LinkRel, Resource, ResourceUri } from '@ngxp/rest';
+import { isNil } from 'lodash-es';
+import { BehaviorSubject, filter, first, map, Observable, startWith, switchMap } from 'rxjs';
+import { BescheidFacade } from './+state/bescheid.facade';
 import { DocumentLinkRel } from './document.linkrel';
-import { DocumentResource } from './document.model';
 
 @Injectable({ providedIn: 'root' })
 export class BescheidService {
-  readonly activeStep$: BehaviorSubject<BescheidWizardStep> = new BehaviorSubject(BescheidWizardStep.AntragBescheiden);
-
-  bescheidResourceService: ResourceService<VorgangWithEingangResource, BescheidResource>;
-  bescheidListResourceService: ResourceListService<VorgangWithEingangResource, BescheidListResource, BescheidResource>;
-
-  readonly bescheidDocumentFile$: BehaviorSubject<StateResource<BinaryFileResource>> = new BehaviorSubject<
-    StateResource<BinaryFileResource>
-  >(createEmptyStateResource());
-
-  readonly bescheidDocumentUri$: BehaviorSubject<ResourceUri> = new BehaviorSubject<ResourceUri>(null);
-
-  readonly bescheidDocument$: BehaviorSubject<StateResource<DocumentResource>> = new BehaviorSubject<
-    StateResource<DocumentResource>
-  >(createEmptyStateResource());
-
-  readonly bescheidList$: BehaviorSubject<StateResource<BescheidListResource>> = new BehaviorSubject(
-    createEmptyStateResource<BescheidListResource>(),
+  private readonly bescheidFacade = inject(BescheidFacade);
+  private readonly commandService = inject(CommandService);
+  private readonly vorgangCommandService = inject(VorgangCommandService);
+  private readonly binaryFileService = inject(BinaryFileService);
+  private readonly resourceRepository = inject(ResourceRepository);
+  private readonly postfachService = inject(PostfachService);
+  private readonly vorgangService = inject(VorgangService);
+  // The injection of this service and the one below is problematic.
+  // It must be analysed how to inject BescheidService via providers in BescheidSharedModule.
+  private readonly bescheidResourceService = createBescheidResourceService(
+    this.resourceRepository,
+    this.commandService,
+    this.vorgangService,
   );
+  private readonly bescheidListResourceService = createBescheidListResourceService(this.resourceRepository, this.vorgangService);
 
-  readonly createBescheidDocumentInProgress$: BehaviorSubject<StateResource<CommandResource>> = new BehaviorSubject<
-    StateResource<CommandResource>
-  >(createEmptyStateResource());
-
-  readonly uploadBescheidDocumentInProgress$: BehaviorSubject<UploadFileInProgress> = new BehaviorSubject<UploadFileInProgress>({
-    loading: false,
-  });
-
-  readonly uploadAttachmentInProgress$: BehaviorSubject<UploadFileInProgress> = new BehaviorSubject({ loading: false });
-
-  readonly uploadedAttachment$: BehaviorSubject<StateResource<BinaryFileResource>> = new BehaviorSubject(
-    createEmptyStateResource(),
-  );
-
-  loadBescheidDocumentSubscription: Subscription;
-
-  constructor(
-    private readonly facade: BescheidFacade,
-    private readonly vorgangService: VorgangService,
-    private readonly commandService: CommandService,
-    private readonly vorgangCommandService: VorgangCommandService,
-    private readonly binaryFileService: BinaryFileService,
-    private readonly repository: ResourceRepository<BescheidResource>,
-    private readonly postfachService: PostfachService,
-  ) {
-    this.bescheidResourceService = new CommandResourceService(
-      this.buildBescheidDraftServiceConfig(),
-      repository,
-      this.commandService,
-    );
-    this.bescheidListResourceService = new ResourceListService<
-      VorgangWithEingangResource,
-      BescheidListResource,
-      BescheidResource
-    >(this.buildBescheidListServiceConfig(), repository);
-  }
-
-  public getActiveStep(): Observable<BescheidWizardStep> {
-    return this.activeStep$.asObservable();
-  }
-
-  public setActiveStep(step: BescheidWizardStep): void {
-    this.activeStep$.next(step);
-  }
-
-  buildBescheidDraftServiceConfig(): ResourceServiceConfig<VorgangWithEingangResource> {
-    return {
-      resource: this.vorgangService.getVorgangWithEingang(),
-      getLinkRel: VorgangWithEingangLinkRel.BESCHEID_DRAFT,
-      delete: { linkRel: BescheidLinkRel.DELETE, order: CommandOrder.DELETE_BESCHEID },
-      edit: { linkRel: BescheidLinkRel.UPDATE, order: CommandOrder.UPDATE_BESCHEID },
-    };
-  }
-
-  buildBescheidListServiceConfig(): ListResourceServiceConfig<VorgangWithEingangResource> {
-    return {
-      baseResource: this.vorgangService.getVorgangWithEingang(),
-      listLinkRel: VorgangWithEingangLinkRel.BESCHEIDE,
-      listResourceListLinkRel: BescheidListLinkRel.BESCHEID_LIST,
-    };
-  }
+  readonly _bescheidDocument$: BehaviorSubject<BescheidDocument> = new BehaviorSubject(createEmptyBescheidDocument());
+  readonly _wizard$: BehaviorSubject<Wizard> = new BehaviorSubject(createInitialWizard());
 
   public init(): void {
-    this.bescheidResourceService = new CommandResourceService(
-      this.buildBescheidDraftServiceConfig(),
-      this.repository,
-      this.commandService,
-    );
-    this.bescheidDocumentFile$.next(createEmptyStateResource());
-    this.bescheidDocumentUri$.next(null);
-    this.uploadBescheidDocumentInProgress$.next({ loading: false });
-    this.clearUploadAttachment();
-    this.uploadAttachmentInProgress$.next({ loading: false });
-    this.activeStep$.next(BescheidWizardStep.AntragBescheiden);
+    this._wizard$.next(createInitialWizard());
+    this._bescheidDocument$.next(createEmptyBescheidDocument());
   }
 
-  public getBescheidDraft(): Observable<StateResource<BescheidResource>> {
-    return this.bescheidResourceService.get();
-  }
-
-  public getBescheidCommand(): Observable<StateResource<CommandResource>> {
-    return this.facade.getBescheidCommand();
-  }
-
-  public createBescheid(
-    vorgangWithEingang: VorgangWithEingangResource,
-    bescheid?: Bescheid,
-  ): Observable<StateResource<CommandResource>> {
-    this.facade.createBescheidDraft(vorgangWithEingang, buildCreateBescheidCommand(bescheid));
-    return this.getBescheidCommand().pipe(
-      tapOnCommandSuccessfullyDone((commandStateResource: StateResource<CommandResource>) =>
-        this.updateBescheidDraft(commandStateResource.resource),
-      ),
-    );
+  public exit(): void {
+    this.bescheidListResourceService.refresh();
+    this.postfachService.setPostfachMailOnReload();
+    this._clearUploadedFiles();
   }
 
-  public bescheidErstellungUeberspringen(
+  public skipBescheidCreation(
     vorgangWithEingangResource: VorgangWithEingangResource,
+    bescheidResource: BescheidResource,
   ): Observable<StateResource<CommandResource>> {
-    if (!this.existsBescheidDraft()) {
-      return this.vorgangAbschliesen(vorgangWithEingangResource);
+    if (isNil(bescheidResource)) {
+      return this.vorgangCommandService.abschliessen(vorgangWithEingangResource);
     }
-    return this.getBescheidDraft().pipe(
-      filter(isLoaded),
-      first(),
-      switchMap((bescheidStateResource: StateResource<BescheidResource>) =>
-        this.bescheidLoeschenUndErstellungUeberspringen(vorgangWithEingangResource, bescheidStateResource.resource),
-      ),
-    );
-  }
-
-  public getBescheidDraftIfExists(): Observable<StateResource<BescheidResource>> {
-    return this.vorgangService.getVorgangWithEingang().pipe(
-      filter(
-        (stateResource: StateResource<VorgangWithEingangResource>) =>
-          isLoaded(stateResource) && hasLink(stateResource.resource, VorgangWithEingangLinkRel.BESCHEID_DRAFT),
-      ),
-      switchMap(() => this.getBescheidDraft()),
-      startWith(createEmptyStateResource<BescheidResource>()),
-    );
+    return this.deleteBescheidAndCompleteVorgang(vorgangWithEingangResource);
   }
 
-  bescheidLoeschenUndErstellungUeberspringen(
+  deleteBescheidAndCompleteVorgang(
     vorgangWithEingangResource: VorgangWithEingangResource,
-    bescheidResource: BescheidResource,
   ): Observable<StateResource<CommandResource>> {
-    return this.vorgangAbschliesen(vorgangWithEingangResource).pipe(
-      tapOnCommandSuccessfullyDone(() => this.deleteBescheid(bescheidResource)),
-    );
-  }
-
-  vorgangAbschliesen(vorgangWithEingangResource: VorgangWithEingangResource): Observable<StateResource<CommandResource>> {
-    return this.vorgangCommandService.abschliessen(vorgangWithEingangResource);
-  }
-
-  public updateBescheid(bescheid: Bescheid): Observable<StateResource<CommandResource>> {
-    return this.doUpdateBescheid(this.getResource(), bescheid).pipe(
-      tapOnCommandSuccessfullyDone((commandStateResource: StateResource<CommandResource>) => {
-        this.updateBescheidDraft(commandStateResource.resource);
-        this.clearCreateBescheidDocumentInProgress();
-        this.clearUploadBescheidDocumentInProgress();
-        this.clearUploadAttachment();
-      }),
-    );
-  }
-
-  private clearUploadAttachment() {
-    this.uploadedAttachment$.next(createEmptyStateResource());
+    return this.vorgangCommandService
+      .abschliessen(vorgangWithEingangResource)
+      .pipe(tapOnCommandSuccessfullyDone(() => this.deleteBescheid()));
   }
 
-  public sendBescheidToAntragsteller(bescheidResource: BescheidResource): Observable<StateResource<CommandResource>> {
-    return this.sendBescheid(bescheidResource, BescheidLinkRel.BESCHEIDEN_UND_SENDEN);
+  public deleteBescheid(): Observable<StateResource<CommandResource>> {
+    return this.bescheidResourceService.delete();
   }
 
-  public sendBescheidManually(bescheidResource: BescheidResource): Observable<StateResource<CommandResource>> {
-    return this.sendBescheid(bescheidResource, BescheidLinkRel.BESCHEIDEN);
+  public loadFiles(bescheidResource: BescheidResource): void {
+    this.loadBescheidDocument(bescheidResource);
+    this.loadAttachments(bescheidResource);
   }
 
-  sendBescheid(bescheidResource: BescheidResource, linkRel: string): Observable<StateResource<CommandResource>> {
-    return this.bescheidResourceService.get().pipe(
-      filterIsLoadedOrHasError(),
-      switchMap((stateResource: StateResource<BescheidResource>) =>
-        this.commandService.createCommandByProps(buildSendBescheidCommandProps(stateResource.resource, linkRel)),
-      ),
-    );
-  }
-
-  doUpdateBescheid(bescheidResource: BescheidResource, bescheid: Bescheid): Observable<StateResource<CommandResource>> {
-    return this.commandService.createCommandByProps(buildUpdateBescheidCommandProps(bescheidResource, bescheid));
-  }
-
-  private updateBescheidDraft(command: CommandResource): void {
-    this.bescheidResourceService.loadByResourceUri(getEffectedResourceUrl(command));
-  }
-
-  public getAttachments(): Observable<BinaryFileResource[]> {
-    return this.getBescheidDraft().pipe(
-      filter(isLoaded),
-      map((stateResource: StateResource<BescheidResource>) => stateResource.resource),
-      filter((resource: BescheidResource) => hasLink(resource, BescheidLinkRel.ATTACHMENTS)),
-      switchMap((resource: BescheidResource) => this.binaryFileService.getFiles(resource, BescheidLinkRel.ATTACHMENTS)),
-      filter(isLoaded),
-      map((stateResource) => getEmbeddedResources<BinaryFileResource>(stateResource, BinaryFileListLinkRel.FILE_LIST)),
-    );
-  }
-
-  public getDocumentUri(): Observable<ResourceUri> {
-    return this.bescheidDocumentUri$.asObservable();
+  public createBescheidDocument(bescheidResource: BescheidResource): void {
+    this._bescheidDocument$.next({ ...createEmptyBescheidDocument(), create: createEmptyStateResource(true) });
+    this.doCreateBescheidDocument(bescheidResource)
+      .pipe(filterIsLoadedOrHasError(), first())
+      .subscribe((commandStateResource: StateResource<CommandResource>) =>
+        this.handleCreateBescheidDocumentResponse(commandStateResource),
+      );
   }
 
-  public setDocumentUri(uri: ResourceUri): void {
-    this.bescheidDocumentUri$.next(uri);
+  doCreateBescheidDocument(bescheidResource: BescheidResource): Observable<StateResource<CommandResource>> {
+    return this.commandService.createCommandByProps(buildCreateBescheidDocumentCommandProps(bescheidResource));
   }
 
-  public existBescheidDocumentFile(): Observable<boolean> {
-    return this.bescheidDocumentFile$.asObservable().pipe(map(isLoaded));
+  handleCreateBescheidDocumentResponse(commandStateResource: StateResource<CommandResource>): void {
+    if (notHasCommandError(commandStateResource.resource)) {
+      const documentUri: ResourceUri = getEffectedResourceUrl(commandStateResource.resource);
+      this._bescheidDocument$.next({ ...this._bescheidDocument$.value, documentUri });
+      this.loadBescheidDocumentByUri(documentUri);
+    } else {
+      this._bescheidDocument$.next({ ...this._bescheidDocument$.value, create: commandStateResource });
+    }
   }
 
-  public getBescheidDocumentFile(): Observable<StateResource<BinaryFileResource>> {
-    return this.bescheidDocumentFile$.asObservable();
+  emitBescheidDocumentError(stateResource: StateResource<Resource>): void {
+    const value: BescheidDocument = this._bescheidDocument$.value;
+    this._bescheidDocument$.next({
+      ...value,
+      upload: { ...value.upload, loading: false, error: stateResource.error },
+    });
   }
 
-  public getBescheidDocument(): Observable<StateResource<DocumentResource>> {
-    return this.bescheidDocument$.asObservable();
+  loadBescheidDocument(bescheidResource: BescheidResource): void {
+    if (hasLink(bescheidResource, BescheidLinkRel.BESCHEID_DOCUMENT)) {
+      this.loadBescheidDocumentByUri(getUrl(bescheidResource, BescheidLinkRel.BESCHEID_DOCUMENT));
+    }
   }
 
   public loadBescheidDocumentByUri(resourceUri: ResourceUri): void {
-    this.setBescheidDocumentFileLoading();
-    this.loadBescheidDocumentSubscription = this.repository
+    this.resourceRepository
       .getResource(resourceUri)
-      .pipe()
-      .subscribe((document: DocumentResource) => {
-        this.bescheidDocument$.next(createStateResource(document));
-        this.loadBescheidDocumentFile(document);
-        this.loadBescheidDocumentSubscription.unsubscribe();
-      });
-  }
-
-  setBescheidDocumentFileLoading(): void {
-    this.bescheidDocumentFile$.next({ ...this.bescheidDocumentFile$.value, loading: true });
-  }
-
-  public uploadBescheidDocument(bescheid: BescheidResource, file: File): Observable<UploadFileInProgress> {
-    this.clearCreateBescheidDocumentInProgress();
-    this.initUploadBescheidDocumentInProgress(file.name);
-    this.doUploadBescheidDocument(bescheid, file);
-    return this.getUploadBescheidDocumentInProgress();
+      .pipe(first())
+      .subscribe((document: DocumentResource) => this.loadBescheidDocumentFile(document));
   }
 
-  private clearCreateBescheidDocumentInProgress(): void {
-    this.createBescheidDocumentInProgress$.next(createEmptyStateResource());
-  }
-
-  private initUploadBescheidDocumentInProgress(fileName: string): void {
-    this.uploadBescheidDocumentInProgress$.next({ fileName, loading: true });
+  loadBescheidDocumentFile(document: DocumentResource): void {
+    this.binaryFileService
+      .getFile(getUrl(document, DocumentLinkRel.FILE))
+      .pipe(filterIsLoadedOrHasError(), first())
+      .subscribe((binaryFile: StateResource<BinaryFileResource>) => {
+        this._bescheidDocument$.next({
+          ...this._bescheidDocument$.value,
+          upload: createEmptyUploadInProgress(),
+          create: createEmptyStateResource(),
+          resource: binaryFile.resource,
+          documentUri: getUrl(document, LinkRel.Self),
+        });
+      });
   }
 
-  public getUploadBescheidDocumentInProgress(): Observable<UploadFileInProgress> {
-    return this.uploadBescheidDocumentInProgress$.asObservable();
+  loadAttachments(bescheidResource: BescheidResource): void {
+    if (hasLink(bescheidResource, BescheidLinkRel.ATTACHMENTS)) {
+      this.binaryFileService
+        .getFiles(bescheidResource, BescheidLinkRel.ATTACHMENTS)
+        .pipe(
+          filterIsLoadedOrHasError(),
+          first(),
+          map((stateResource: StateResource<BinaryFileListResource>) =>
+            getEmbeddedResources<BinaryFileResource>(stateResource, BinaryFileListLinkRel.FILE_LIST),
+          ),
+        )
+        .subscribe((files: BinaryFileResource[]) => this.binaryFileService.addFiles(BESCHEID_UPLOADED_ATTACHMENTS, files));
+    }
   }
 
-  doUploadBescheidDocument(bescheid: BescheidResource, file: File): void {
+  public uploadBescheidDocument(document: File, bescheid: BescheidResource): void {
+    this._bescheidDocument$.next({ ...this._bescheidDocument$.value, upload: { fileName: document.name, loading: true } });
     this.binaryFileService
-      .uploadFile(bescheid, BescheidLinkRel.UPLOAD_BESCHEID_FILE, file, false)
+      .uploadFile(bescheid, BescheidLinkRel.UPLOAD_BESCHEID_FILE, document, false)
       .pipe(filterIsLoadedOrHasError(), first())
       .subscribe((binaryFileStateResource: StateResource<BinaryFileResource>) =>
         this.handleUploadBescheidDocumentResponse(bescheid, binaryFileStateResource),
@@ -356,7 +204,7 @@ export class BescheidService {
     binaryFileStateResource: StateResource<BinaryFileResource>,
   ): void {
     if (hasStateResourceError(binaryFileStateResource)) {
-      this.setUploadBescheidDocumentInProgressError(binaryFileStateResource.error);
+      this.emitBescheidDocumentError(binaryFileStateResource);
     } else {
       this.createBescheidDocumentFromFile(bescheid, binaryFileStateResource.resource);
     }
@@ -376,203 +224,167 @@ export class BescheidService {
     binaryFile: BinaryFileResource,
   ): void {
     if (hasStateResourceError(commandStateResource)) {
-      this.setUploadBescheidDocumentInProgressError(commandStateResource.error);
+      this.emitBescheidDocumentError(commandStateResource);
     } else {
-      this.bescheidDocument$.next(createEmptyStateResource());
-      this.bescheidDocumentFile$.next(createStateResource(binaryFile));
-      this.bescheidDocumentUri$.next(getEffectedResourceUrl(commandStateResource.resource));
-      this.clearUploadBescheidDocumentInProgress();
+      this._bescheidDocument$.next({
+        ...this._bescheidDocument$.value,
+        documentUri: getEffectedResourceUrl(commandStateResource.resource),
+        upload: createEmptyUploadInProgress(),
+        resource: binaryFile,
+      });
     }
   }
 
-  private setUploadBescheidDocumentInProgressError(error: HttpError): void {
-    this.uploadBescheidDocumentInProgress$.next({ loading: false, error });
-  }
-
-  public deleteBescheidDocument(): void {
-    this.bescheidDocumentUri$.next(null);
-    this.bescheidDocumentFile$.next(createEmptyStateResource());
-    this.bescheidDocument$.next(createEmptyStateResource());
-  }
-
-  public createBescheidDocument(): Observable<StateResource<CommandResource>> {
-    this.clearUploadBescheidDocumentInProgress();
-    this.setCreateBescheidDocumentInProgress();
-    this.doCreateBescheidDocument()
-      .pipe(filterIsLoadedOrHasError(), first())
-      .subscribe((commandStateResource: StateResource<CommandResource>) =>
-        this.handleCreateBescheidDocumentResponse(commandStateResource),
+  public createBescheid(
+    vorgangWithEingang: VorgangWithEingangResource,
+    bescheid?: Bescheid,
+  ): Observable<StateResource<CommandResource>> {
+    this.bescheidFacade.createBescheidDraft(vorgangWithEingang, buildCreateBescheidCommand(bescheid));
+    return this.bescheidFacade
+      .getBescheidCommand()
+      .pipe(
+        tapOnCommandSuccessfullyDone((commandStateResource: StateResource<CommandResource>) =>
+          this.updateBescheidDraft(commandStateResource.resource),
+        ),
       );
-    return this.getCreateBescheidDocumentInProgress();
   }
 
-  private clearUploadBescheidDocumentInProgress(): void {
-    this.uploadBescheidDocumentInProgress$.next({ loading: false });
+  updateBescheidDraft(command: CommandResource): void {
+    this.bescheidResourceService.loadByResourceUri(getEffectedResourceUrl(command));
+    if (command.order === CommandOrder.CREATE_BESCHEID) {
+      this._wizard$.next({ ...this._wizard$.value, bescheidCreated: true });
+    }
   }
 
-  public getCreateBescheidDocumentInProgress(): Observable<StateResource<CommandResource>> {
-    return this.createBescheidDocumentInProgress$.asObservable();
+  public updateBescheid(
+    bescheidResource: BescheidResource,
+    updatedBescheid: Bescheid,
+  ): Observable<StateResource<CommandResource>> {
+    return this.doUpdateBescheid(bescheidResource, updatedBescheid).pipe(
+      tapOnCommandSuccessfullyDone((commandStateResource: StateResource<CommandResource>) => {
+        this.updateBescheidDraft(commandStateResource.resource);
+      }),
+    );
   }
 
-  private setCreateBescheidDocumentInProgress(): void {
-    this.createBescheidDocumentInProgress$.next(createEmptyStateResource(true));
+  doUpdateBescheid(bescheidResource: BescheidResource, bescheid: Bescheid): Observable<StateResource<CommandResource>> {
+    return this.commandService.createCommandByProps(buildUpdateBescheidCommandProps(bescheidResource, bescheid));
   }
 
-  doCreateBescheidDocument(): Observable<StateResource<CommandResource>> {
-    return this.commandService.createCommandByProps(buildCreateBescheidDocumentCommandProps(this.getResource()));
+  public sendBescheidManually(): Observable<StateResource<CommandResource>> {
+    return this.sendBescheid(BescheidLinkRel.BESCHEIDEN);
   }
 
-  private handleCreateBescheidDocumentResponse(commandStateResource: StateResource<CommandResource>): void {
-    this.createBescheidDocumentInProgress$.next(commandStateResource);
-    if (notHasCommandError(commandStateResource.resource)) {
-      const documentUri: ResourceUri = getEffectedResourceUrl(commandStateResource.resource);
-      this.bescheidDocumentUri$.next(documentUri);
-      this.loadBescheidDocumentByUri(documentUri);
-    }
+  public sendBescheidMessage(): Observable<StateResource<CommandResource>> {
+    return this.sendBescheid(BescheidLinkRel.BESCHEIDEN_UND_SENDEN);
   }
 
-  loadBescheidDocumentFile(document: DocumentResource): void {
-    this.binaryFileService
-      .getFile(getUrl(document, DocumentLinkRel.FILE))
-      .pipe(filterIsLoadedOrHasError(), first())
-      .subscribe((binaryFile) => {
-        this.bescheidDocumentFile$.next(binaryFile);
-        this.createBescheidDocumentInProgress$.next(createEmptyStateResource());
-      });
+  sendBescheid(linkRel: BescheidLinkRel): Observable<StateResource<CommandResource>> {
+    return this.getBescheidDraft().pipe(
+      filter(isLoaded),
+      map((stateResource: StateResource<BescheidResource>) => stateResource.resource),
+      switchMap((bescheidResource: BescheidResource) =>
+        this.commandService.createCommandByProps(buildSendBescheidCommandProps(bescheidResource, linkRel)),
+      ),
+    );
   }
 
-  public getBescheidDocumentCommand(): Observable<StateResource<CommandResource>> {
-    return this.commandService.getCommandByOrder(CommandOrder.CREATE_BESCHEID_DOCUMENT);
+  public getBescheidDraft(): Observable<StateResource<BescheidResource>> {
+    return this.bescheidResourceService.get();
   }
 
-  public existsBescheidDraft(): boolean {
-    let exists: boolean;
-    this.bescheidResourceService
-      .existResource()
-      .pipe(take(1))
-      .subscribe((existsDraft: boolean) => (exists = existsDraft));
-    return exists;
+  public getBescheidDocument(): Observable<BescheidDocument> {
+    return this._bescheidDocument$.asObservable();
   }
 
-  public bescheidVerwerfen(): Observable<StateResource<CommandResource>> {
-    return this.deleteBescheid(this.getResource()).pipe(
-      tapOnCommandSuccessfullyDone(() => {
-        this.deleteBescheidDocument();
-        this.vorgangService.reloadCurrentVorgang();
-      }),
-    );
+  public deleteBescheidDocument(): void {
+    this._bescheidDocument$.next(createEmptyBescheidDocument());
   }
 
-  deleteBescheid(bescheid: BescheidResource): Observable<StateResource<CommandResource>> {
-    return this.commandService.createCommandByProps(buildDeleteBescheidCommandProps(bescheid));
+  public getActiveStep(): Observable<BescheidWizardStep> {
+    return this._wizard$.asObservable().pipe(map((wizard: Wizard) => wizard.activeStep));
   }
 
-  /**
-   * @returns @deprecated Don't use this function, instead pass data to function if necessarry.
-   */
-  getResource(): BescheidResource {
-    let resource: StateResource<BescheidResource> = undefined;
-    this.bescheidResourceService
-      .selectResource()
-      .pipe(take(1))
-      .subscribe((stateResource: StateResource<BescheidResource>) => (resource = stateResource));
-
-    return resource.resource;
+  public setActiveStep(step: BescheidWizardStep): void {
+    this._clearUploadedFiles();
+    this._wizard$.next({ ...this._wizard$.value, activeStep: step });
   }
 
-  public reloadCurrentVorgang(): void {
-    this.vorgangService.reloadCurrentVorgang();
+  public getBescheidCreated(): Observable<boolean> {
+    return this._wizard$.asObservable().pipe(map((wizard: Wizard) => wizard.bescheidCreated));
   }
 
-  public loadBescheidDocument(resourceUri: ResourceUri): Observable<StateResource<DocumentResource>> {
-    return this.repository.getResource<DocumentResource>(resourceUri).pipe(
-      map((documentResource: DocumentResource) => createStateResource(documentResource)),
-      startWith(createEmptyStateResource<DocumentResource>(true)),
-    );
+  public selectBescheidResource(): Observable<StateResource<BescheidResource>> {
+    return this.bescheidResourceService.selectResource();
   }
 
-  public getEmpfaenger(): Observable<string> {
-    return this.vorgangService.getVorgangWithEingang().pipe(
-      filter(isLoaded),
-      map((stateResource) => stateResource.resource),
-      map(getEmpfaenger),
-    );
+  public getWizard(): Observable<Wizard> {
+    return this._wizard$.asObservable();
   }
 
-  public getLastBescheid(): Observable<BescheidResource> {
-    return this.bescheidListResourceService.getItems().pipe(
-      map((bescheide: BescheidResource[]) => this.filterBySentStatus(bescheide)),
-      map((bescheide: BescheidResource[]) => this.sortByBeschiedenAm(bescheide)),
-      map((bescheide: BescheidResource[]) => bescheide[0]),
-    );
+  public setSendBy(sendBy: BescheidSendBy): void {
+    this._wizard$.next({ ...this._wizard$.value, sendBy: sendBy });
   }
 
-  private sortByBeschiedenAm(bescheide: BescheidResource[]): BescheidResource[] {
-    return sortByGermanDateStr<BescheidResource>(bescheide, (bescheid: BescheidResource) => bescheid.beschiedenAm);
+  public setNachrichtEmpfaenger(empfaenger: string): void {
+    this._wizard$.next({ ...this._wizard$.value, empfaenger: empfaenger });
   }
 
-  public existBescheid(): Observable<boolean> {
-    return this.bescheidListResourceService.getItems().pipe(
-      map((bescheide: BescheidResource[]) => this.filterBySentStatus(bescheide)),
-      map((bescheide: BescheidResource[]) => isNotEmpty(bescheide)),
-    );
+  public lockBescheidSending(): void {
+    this._wizard$.next({ ...this._wizard$.value, canBeSend: false });
   }
 
-  public getBescheidList(): Observable<StateResource<BescheidListResource>> {
-    return this.bescheidListResourceService.getList();
+  public unlockBescheidSending(): void {
+    this._wizard$.next({ ...this._wizard$.value, canBeSend: true });
   }
 
-  filterBySentStatus(bescheide: BescheidResource[]): BescheidResource[] {
-    return isNotNil(bescheide) ? bescheide.filter(this.hasSentStatus) : [];
+  public finishAddingBescheidDocument(): void {
+    this._bescheidDocument$.next({
+      ...this._bescheidDocument$.value,
+      upload: createEmptyUploadInProgress(),
+      create: createEmptyStateResource(),
+    });
   }
 
-  private hasSentStatus(bescheid: BescheidResource): boolean {
-    return bescheid.status === BescheidStatus.SENT;
+  _clearUploadedFiles(): void {
+    this.binaryFileService.clearUploadedFiles(BESCHEID_UPLOADED_ATTACHMENTS);
   }
 
-  public refreshList(): void {
-    this.bescheidListResourceService.refresh();
+  public getBescheidList(): Observable<StateResource<BescheidListResource>> {
+    return this.bescheidListResourceService.getList();
   }
 
-  public uploadAttachment(bescheidResource: BescheidResource, file: File): Observable<StateResource<BinaryFileResource>> {
-    this.uploadAttachmentInProgress$.next({ fileName: file.name, loading: true });
-    return this.binaryFileService
-      .uploadFile(bescheidResource, BescheidLinkRel.UPLOAD_ATTACHMENT, file, false)
-      .pipe(
-        tap((binaryFileStateResource: StateResource<BinaryFileResource>) => this.handleAttachmentUpload(binaryFileStateResource)),
-      );
+  public getBescheidDocumentByUri(resourceUri: ResourceUri): Observable<StateResource<DocumentResource>> {
+    return this.resourceRepository.getResource<DocumentResource>(resourceUri).pipe(
+      map((documentResource: DocumentResource) => createStateResource(documentResource)),
+      startWith(createEmptyStateResource<DocumentResource>(true)),
+    );
   }
 
-  handleAttachmentUpload(binaryFileStateResource: StateResource<BinaryFileResource>) {
-    if (hasStateResourceError(binaryFileStateResource)) {
-      this.uploadAttachmentInProgress$.next({
-        loading: false,
-        error: binaryFileStateResource.error,
-      });
-    } else {
-      this.uploadAttachmentInProgress$.next({
-        ...this.uploadAttachmentInProgress$.value,
-        loading: binaryFileStateResource.loading,
-      });
-    }
-    this.uploadedAttachment$.next(binaryFileStateResource);
+  public getLastBescheid(): Observable<BescheidResource> {
+    return this.bescheidListResourceService.getItems().pipe(
+      map((bescheide: BescheidResource[]) => this.filterBySentStatus(bescheide)),
+      map((bescheide: BescheidResource[]) => this.sortByBeschiedenAm(bescheide)),
+      map((bescheide: BescheidResource[]) => bescheide[0]),
+    );
   }
 
-  public getUploadAttachmentInProgress(): Observable<UploadFileInProgress> {
-    return this.uploadAttachmentInProgress$.asObservable();
+  filterBySentStatus(bescheide: BescheidResource[]): BescheidResource[] {
+    return isNotNil(bescheide) ? bescheide.filter(this.hasSentStatus) : [];
   }
 
-  public getUploadedAttachment(): Observable<StateResource<BinaryFileResource>> {
-    return this.uploadedAttachment$.asObservable();
+  private hasSentStatus(bescheid: BescheidResource): boolean {
+    return bescheid.status === BescheidStatus.SENT;
   }
 
-  public clearAttachmentUpload(): void {
-    this.uploadAttachmentInProgress$.next(createEmptyStateResource());
+  private sortByBeschiedenAm(bescheide: BescheidResource[]): BescheidResource[] {
+    return sortByGermanDateStr<BescheidResource>(bescheide, (bescheid: BescheidResource) => bescheid.beschiedenAm);
   }
 
-  public exit(): void {
-    this.bescheidListResourceService.refresh();
-    this.vorgangService.reloadCurrentVorgang();
-    this.postfachService.setPostfachMailOnReload();
+  public existBescheid(): Observable<boolean> {
+    return this.bescheidListResourceService.getItems().pipe(
+      map((bescheide: BescheidResource[]) => this.filterBySentStatus(bescheide)),
+      map((bescheide: BescheidResource[]) => isNotEmpty(bescheide)),
+    );
   }
 }
diff --git a/alfa-client/libs/bescheid-shared/src/lib/bescheid2.service.spec.ts b/alfa-client/libs/bescheid-shared/src/lib/bescheid2.service.spec.ts
deleted file mode 100644
index 9fbf45a5ca814d6ed15691e08259f1a664f836e0..0000000000000000000000000000000000000000
--- a/alfa-client/libs/bescheid-shared/src/lib/bescheid2.service.spec.ts
+++ /dev/null
@@ -1,888 +0,0 @@
-/*
- * Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BinaryFileListLinkRel, BinaryFileListResource, BinaryFileResource, BinaryFileService, } from '@alfa-client/binary-file-shared';
-import { CommandOrder, CommandResource, CommandResourceService, CommandService, CreateCommandProps, getEffectedResourceUrl, } from '@alfa-client/command-shared';
-import { PostfachService } from '@alfa-client/postfach-shared';
-import { createEmptyStateResource, createErrorStateResource, createStateResource, EMPTY_STRING, getEmbeddedResources, StateResource, } from '@alfa-client/tech-shared';
-import { Mock, mock } from '@alfa-client/test-utils';
-import { VorgangCommandService, VorgangService, VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
-import { TestBed } from '@angular/core/testing';
-import { faker } from '@faker-js/faker';
-import { getUrl, LinkRel, ResourceUri } from '@ngxp/rest';
-import { CommandLinkRel } from 'libs/command-shared/src/lib/command.linkrel';
-import { createProblemDetail } from 'libs/tech-shared/test/error';
-import { createVorgangWithEingangResource } from 'libs/vorgang-shared/test/vorgang';
-import { EMPTY, Observable, of } from 'rxjs';
-import { createBinaryFileListResource, createBinaryFileResource } from '../../../binary-file-shared/test/binary-file';
-import { createCommandErrorStateResource, createCommandResource, createCommandStateResource, createCreateCommandProps, createSuccessfullyDoneCommandStateResource, } from '../../../command-shared/test/command';
-import { ResourceRepository } from '../../../tech-shared/src/lib/resource/resource.repository';
-import { createFile } from '../../../tech-shared/test/file';
-import { singleCold, singleColdCompleted } from '../../../tech-shared/test/marbles';
-import { createBescheid, createBescheidDocument, createBescheidResource } from '../test/bescheid';
-import { createDocumentResource } from '../test/document';
-import { BescheidFacade } from './+state/bescheid.facade';
-import { BescheidResourceService } from './bescheid-resource-service';
-import { BescheidLinkRel } from './bescheid.linkrel';
-import { Bescheid, BESCHEID_UPLOADED_ATTACHMENTS, BescheidDocument, BescheidResource, BescheidWizardStep, createEmptyBescheidDocument, createEmptyUploadInProgress, createInitialWizard, } from './bescheid.model';
-import { BescheidService2 } from './bescheid2.service';
-import { DocumentLinkRel } from './document.linkrel';
-import { DocumentResource } from './document.model';
-
-import { expect } from '@jest/globals';
-import * as BescheidUtil from './bescheid.util';
-
-describe('BescheidService', () => {
-  let service: BescheidService2;
-
-  let facade: Mock<BescheidFacade>;
-  let vorgangService: Mock<VorgangService>;
-  let resourceRepository: Mock<ResourceRepository>;
-  let commandService: Mock<CommandService>;
-  let vorgangCommandService: Mock<VorgangCommandService>;
-  let binaryFileService: Mock<BinaryFileService>;
-  let postfachService: Mock<PostfachService>;
-  let bescheidResourceService: Mock<BescheidResourceService>;
-
-  const vorgangWithEingangResource: VorgangWithEingangResource = createVorgangWithEingangResource();
-  const vorgangWithEingangStateResource: StateResource<VorgangWithEingangResource> =
-    createStateResource(vorgangWithEingangResource);
-  const bescheidResource: BescheidResource = createBescheidResource();
-  const commandStateResource: StateResource<CommandResource> = createCommandStateResource();
-
-  beforeEach(() => {
-    facade = mock(BescheidFacade);
-    resourceRepository = mock(ResourceRepository);
-    commandService = mock(CommandService);
-    vorgangCommandService = mock(VorgangCommandService);
-    vorgangService = mock(VorgangService);
-    vorgangService.getVorgangWithEingang.mockReturnValue(of(vorgangWithEingangStateResource));
-    binaryFileService = mock(BinaryFileService);
-    postfachService = mock(PostfachService);
-    bescheidResourceService = mock(CommandResourceService);
-
-    TestBed.configureTestingModule({
-      providers: [
-        { provide: BescheidFacade, useValue: facade },
-        { provide: VorgangService, useValue: vorgangService },
-        { provide: ResourceRepository, useValue: resourceRepository },
-        { provide: CommandService, useValue: commandService },
-        { provide: VorgangCommandService, useValue: vorgangCommandService },
-        { provide: BinaryFileService, useValue: binaryFileService },
-        {
-          provide: PostfachService,
-          useValue: postfachService,
-        },
-        { provide: BescheidResourceService, useValue: bescheidResourceService },
-        BescheidService2,
-      ],
-    });
-
-    service = TestBed.inject(BescheidService2);
-  });
-
-  it('should be created', () => {
-    expect(service).toBeTruthy();
-  });
-
-  describe('init', () => {
-    it('should init state', () => {
-      service.setActiveStep(2);
-
-      service.init();
-
-      expect(service.getWizard()).toBeObservable(singleCold(createInitialWizard()));
-      expect(service.getActiveStep()).toBeObservable(singleCold(BescheidWizardStep.AntragBescheiden));
-      expect(service.getBescheidCreated()).toBeObservable(singleCold(false));
-      expect(service.getBescheidDocument()).toBeObservable(singleCold(createEmptyBescheidDocument()));
-    });
-  });
-
-  describe('exit', () => {
-    beforeEach(() => {
-      service._clearUploadedFiles = jest.fn();
-    });
-
-    it('should reload postfach list', () => {
-      service.exit();
-
-      expect(postfachService.setPostfachMailOnReload).toHaveBeenCalled();
-    });
-
-    it('should clear uploaded files', () => {
-      service.exit();
-
-      expect(service._clearUploadedFiles).toHaveBeenCalled();
-    });
-  });
-
-  describe('skipBescheidCreation', () => {
-    beforeEach(() => {
-      service.deleteBescheidAndCompleteVorgang = jest.fn().mockReturnValue(of(commandStateResource));
-    });
-
-    it('should complete vorgang', () => {
-      service.skipBescheidCreation(vorgangWithEingangResource, null);
-
-      expect(vorgangCommandService.abschliessen).toHaveBeenCalledWith(vorgangWithEingangResource);
-    });
-
-    it('should NOT complete vorgang', () => {
-      service.skipBescheidCreation(vorgangWithEingangResource, bescheidResource);
-
-      expect(vorgangCommandService.abschliessen).not.toHaveBeenCalled();
-    });
-
-    it('should delete bescheid and complete vorgang', () => {
-      service.skipBescheidCreation(vorgangWithEingangResource, bescheidResource).subscribe();
-
-      expect(service.deleteBescheidAndCompleteVorgang).toHaveBeenCalledWith(vorgangWithEingangResource);
-    });
-
-    it('should return command', () => {
-      const command$: Observable<StateResource<CommandResource>> = service.skipBescheidCreation(
-        vorgangWithEingangResource,
-        bescheidResource,
-      );
-
-      expect(command$).toBeObservable(singleColdCompleted(commandStateResource));
-    });
-  });
-
-  describe('deleteBescheidAndCompleteVorgang', () => {
-    beforeEach(() => {
-      service.deleteBescheid = jest.fn().mockReturnValue(of(createCommandStateResource));
-      vorgangCommandService.abschliessen.mockReturnValue(EMPTY);
-    });
-
-    it('should complete vorgang', () => {
-      service.deleteBescheidAndCompleteVorgang(vorgangWithEingangResource).subscribe();
-
-      expect(vorgangCommandService.abschliessen).toHaveBeenCalledWith(vorgangWithEingangResource);
-    });
-
-    it('should delete bescheid', () => {
-      vorgangCommandService.abschliessen.mockReturnValue(of(createSuccessfullyDoneCommandStateResource()));
-
-      service.deleteBescheidAndCompleteVorgang(vorgangWithEingangResource).subscribe();
-
-      expect(service.deleteBescheid).toHaveBeenCalled();
-    });
-
-    it('should NOT delete bescheid on loading', () => {
-      vorgangCommandService.abschliessen.mockReturnValue(of(createEmptyStateResource(true)));
-
-      service.deleteBescheidAndCompleteVorgang(vorgangWithEingangResource).subscribe();
-
-      expect(service.deleteBescheid).not.toHaveBeenCalled();
-    });
-
-    it('should NOT delete bescheid on error', () => {
-      vorgangCommandService.abschliessen.mockReturnValue(of(createErrorStateResource(createProblemDetail())));
-
-      service.deleteBescheidAndCompleteVorgang(vorgangWithEingangResource).subscribe();
-
-      expect(service.deleteBescheid).not.toHaveBeenCalled();
-    });
-
-    it('should return vorgang abschliessen command', () => {
-      const command: StateResource<CommandResource> = createSuccessfullyDoneCommandStateResource();
-      vorgangCommandService.abschliessen.mockReturnValue(of(command));
-
-      const command$: Observable<StateResource<CommandResource>> =
-        service.deleteBescheidAndCompleteVorgang(vorgangWithEingangResource);
-
-      expect(command$).toBeObservable(singleColdCompleted(command));
-    });
-  });
-
-  describe('delete bescheid', () => {
-    it('should create command', () => {
-      service.deleteBescheid();
-
-      expect(bescheidResourceService.delete).toHaveBeenCalled();
-    });
-
-    it('should return command', () => {
-      const commandStateResource: StateResource<CommandResource> = createSuccessfullyDoneCommandStateResource();
-      bescheidResourceService.delete.mockReturnValue(of(commandStateResource));
-
-      const createdCommand$: Observable<StateResource<CommandResource>> = service.deleteBescheid();
-
-      expect(createdCommand$).toBeObservable(singleColdCompleted(commandStateResource));
-    });
-  });
-
-  describe('loadFiles', () => {
-    beforeEach(() => {
-      service.loadBescheidDocument = jest.fn();
-      service.loadAttachments = jest.fn();
-    });
-
-    it('should bescheid document', () => {
-      service.loadFiles(bescheidResource);
-
-      expect(service.loadBescheidDocument).toHaveBeenCalledWith(bescheidResource);
-    });
-
-    it('should load attachments', () => {
-      service.loadFiles(bescheidResource);
-
-      expect(service.loadAttachments).toHaveBeenCalledWith(bescheidResource);
-    });
-  });
-
-  describe('create bescheid document', () => {
-    beforeEach(() => {
-      service.doCreateBescheidDocument = jest.fn().mockReturnValue(EMPTY);
-      service.handleCreateBescheidDocumentResponse = jest.fn();
-    });
-
-    it('should emit bescheid document', () => {
-      service.createBescheidDocument(bescheidResource);
-
-      expect(service.getBescheidDocument()).toBeObservable(
-        singleCold({ ...createEmptyBescheidDocument(), create: createEmptyStateResource(true) }),
-      );
-    });
-
-    it('should do create bescheid document', () => {
-      service.createBescheidDocument(bescheidResource);
-
-      expect(service.doCreateBescheidDocument).toHaveBeenCalledWith(bescheidResource);
-    });
-
-    it('should handle create response on loaded', () => {
-      service.doCreateBescheidDocument = jest.fn().mockReturnValue(of(commandStateResource));
-
-      service.createBescheidDocument(bescheidResource);
-
-      expect(service.handleCreateBescheidDocumentResponse).toHaveBeenCalledWith(commandStateResource);
-    });
-
-    it('should handle create response on error', () => {
-      const commandError: StateResource<CommandResource> = createCommandErrorStateResource();
-      service.doCreateBescheidDocument = jest.fn().mockReturnValue(of(commandError));
-
-      service.createBescheidDocument(bescheidResource);
-
-      expect(service.handleCreateBescheidDocumentResponse).toHaveBeenCalledWith(commandError);
-    });
-  });
-
-  describe('doCreateBescheidDocument', () => {
-    it('should create command by props', () => {
-      service.doCreateBescheidDocument(bescheidResource);
-
-      expect(commandService.createCommandByProps).toHaveBeenCalledWith({
-        resource: bescheidResource,
-        linkRel: BescheidLinkRel.CREATE_DOCUMENT,
-        command: {
-          order: CommandOrder.CREATE_BESCHEID_DOCUMENT,
-          body: null,
-        },
-        snackBarMessage: EMPTY_STRING,
-      });
-    });
-  });
-
-  describe('handleCreateBescheidDocumentResponse', () => {
-    const commandStateResource: StateResource<CommandResource> = createStateResource(
-      createCommandResource([CommandLinkRel.EFFECTED_RESOURCE]),
-    );
-
-    beforeEach(() => {
-      service.loadBescheidDocumentByUri = jest.fn();
-      service.emitBescheidDocumentError = jest.fn();
-    });
-
-    it('should emit error', () => {
-      const commandErrorStateResource: StateResource<CommandResource> = createCommandErrorStateResource();
-
-      service.handleCreateBescheidDocumentResponse(commandErrorStateResource);
-
-      expect(service.getBescheidDocument()).toBeObservable(
-        singleCold({ ...createEmptyBescheidDocument(), create: commandErrorStateResource } as BescheidDocument),
-      );
-    });
-
-    it('should emit bescheid document state', () => {
-      service.handleCreateBescheidDocumentResponse(commandStateResource);
-
-      expect(service.getBescheidDocument()).toBeObservable(
-        singleCold({
-          ...createEmptyBescheidDocument(),
-          documentUri: getEffectedResourceUrl(commandStateResource.resource),
-        }),
-      );
-    });
-
-    it('should load document by uri', () => {
-      service.handleCreateBescheidDocumentResponse(commandStateResource);
-
-      expect(service.loadBescheidDocumentByUri).toHaveBeenCalledWith(getEffectedResourceUrl(commandStateResource.resource));
-    });
-  });
-
-  describe('emitBescheidDocumentError', () => {
-    it('should emit', () => {
-      const commandError: StateResource<CommandResource> = createCommandErrorStateResource();
-
-      service.emitBescheidDocumentError(commandError);
-
-      expect(service.getBescheidDocument()).toBeObservable(
-        singleCold({
-          ...createEmptyBescheidDocument(),
-          upload: { ...createEmptyUploadInProgress(), loading: false, error: commandError.error },
-        }),
-      );
-    });
-  });
-
-  describe('loadBescheidDocument', () => {
-    beforeEach(() => {
-      service.loadBescheidDocumentByUri = jest.fn();
-    });
-
-    it('should load by uri', () => {
-      const bescheidResource: BescheidResource = createBescheidResource([BescheidLinkRel.BESCHEID_DOCUMENT]);
-
-      service.loadBescheidDocument(bescheidResource);
-
-      expect(service.loadBescheidDocumentByUri).toHaveBeenCalledWith(getUrl(bescheidResource, BescheidLinkRel.BESCHEID_DOCUMENT));
-    });
-
-    it('should NOT load by uri', () => {
-      service.loadBescheidDocument(bescheidResource);
-
-      expect(service.loadBescheidDocumentByUri).not.toHaveBeenCalled();
-    });
-  });
-
-  describe('loadBescheidDocumentByUri', () => {
-    const resourceUri: ResourceUri = faker.internet.url();
-
-    beforeEach(() => {
-      resourceRepository.getResource.mockReturnValue(EMPTY);
-      service.loadBescheidDocumentFile = jest.fn();
-    });
-
-    it('should get resource', () => {
-      service.loadBescheidDocumentByUri(resourceUri);
-
-      expect(resourceRepository.getResource).toHaveBeenCalledWith(resourceUri);
-    });
-
-    it('should load bescheid document file', () => {
-      const documentResource: DocumentResource = createDocumentResource();
-      resourceRepository.getResource.mockReturnValue(of(documentResource));
-
-      service.loadBescheidDocumentByUri(resourceUri);
-
-      expect(service.loadBescheidDocumentFile).toHaveBeenCalledWith(documentResource);
-    });
-  });
-
-  describe('load bescheid document file', () => {
-    const document: DocumentResource = createDocumentResource([DocumentLinkRel.FILE]);
-    const binaryFileStateResource: StateResource<BinaryFileResource> = createStateResource(createBinaryFileResource());
-
-    beforeEach(() => {
-      binaryFileService.getFile.mockReturnValue(of(binaryFileStateResource));
-    });
-
-    it('should call binary file service', () => {
-      service.loadBescheidDocumentFile(document);
-
-      expect(binaryFileService.getFile).toHaveBeenCalledWith(getUrl(document, DocumentLinkRel.FILE));
-    });
-
-    it('should emit bescheid document state', () => {
-      service.loadBescheidDocumentFile(document);
-
-      expect(service.getBescheidDocument()).toBeObservable(
-        singleCold({
-          upload: createEmptyUploadInProgress(),
-          create: createEmptyStateResource(),
-          resource: binaryFileStateResource.resource,
-          documentUri: getUrl(document, LinkRel.Self),
-        }),
-      );
-    });
-  });
-
-  describe('loadAttachments', () => {
-    const bescheidResourceWithAttachments: BescheidResource = createBescheidResource([BescheidLinkRel.ATTACHMENTS]);
-
-    beforeEach(() => {
-      binaryFileService.getFiles.mockReturnValue(EMPTY);
-    });
-
-    it('should call binary file service', () => {
-      service.loadAttachments(bescheidResourceWithAttachments);
-
-      expect(binaryFileService.getFiles).toHaveBeenCalledWith(bescheidResourceWithAttachments, BescheidLinkRel.ATTACHMENTS);
-    });
-
-    it('should NOT call binary file service', () => {
-      service.loadAttachments(bescheidResource);
-
-      expect(binaryFileService.getFiles).not.toHaveBeenCalled();
-    });
-
-    it('should add files', () => {
-      const binaryFileListStateResource: StateResource<BinaryFileListResource> =
-        createStateResource(createBinaryFileListResource());
-      binaryFileService.getFiles.mockReturnValue(of(binaryFileListStateResource));
-
-      service.loadAttachments(bescheidResourceWithAttachments);
-
-      expect(binaryFileService.addFiles).toHaveBeenCalledWith(
-        BESCHEID_UPLOADED_ATTACHMENTS,
-        getEmbeddedResources(binaryFileListStateResource, BinaryFileListLinkRel.FILE_LIST),
-      );
-    });
-  });
-
-  describe('upload bescheid document', () => {
-    const documentFile: File = createFile();
-
-    beforeEach(() => {
-      binaryFileService.uploadFile.mockReturnValue(EMPTY);
-      service.handleUploadBescheidDocumentResponse = jest.fn();
-    });
-
-    it('should emit bescheid document state', () => {
-      service.uploadBescheidDocument(documentFile, bescheidResource);
-
-      expect(service.getBescheidDocument()).toBeObservable(
-        singleCold({ ...createEmptyBescheidDocument(), upload: { fileName: documentFile.name, loading: true } }),
-      );
-    });
-
-    it('should call binary file service', () => {
-      service.uploadBescheidDocument(documentFile, bescheidResource);
-
-      expect(binaryFileService.uploadFile).toHaveBeenCalledWith(
-        bescheidResource,
-        BescheidLinkRel.UPLOAD_BESCHEID_FILE,
-        documentFile,
-        false,
-      );
-    });
-
-    it('should handle upload response', () => {
-      const binaryFileStateResource: StateResource<BinaryFileResource> = createStateResource(createBinaryFileResource());
-      binaryFileService.uploadFile.mockReturnValue(of(binaryFileStateResource));
-
-      service.uploadBescheidDocument(documentFile, bescheidResource);
-
-      expect(service.handleUploadBescheidDocumentResponse).toHaveBeenCalledWith(bescheidResource, binaryFileStateResource);
-    });
-  });
-
-  describe('handleUploadBescheidDocumentResponse', () => {
-    beforeEach(() => {
-      service.emitBescheidDocumentError = jest.fn();
-      service.createBescheidDocumentFromFile = jest.fn();
-    });
-
-    it('should emit error', () => {
-      const errorStateResource: StateResource<BinaryFileResource> = createErrorStateResource(createProblemDetail());
-
-      service.handleUploadBescheidDocumentResponse(bescheidResource, errorStateResource);
-
-      expect(service.emitBescheidDocumentError).toHaveBeenCalledWith(errorStateResource);
-    });
-
-    it('should create bescheid document from file', () => {
-      const binaryFileStateResource: StateResource<BinaryFileResource> = createStateResource(createBinaryFileResource());
-
-      service.handleUploadBescheidDocumentResponse(bescheidResource, binaryFileStateResource);
-
-      expect(service.createBescheidDocumentFromFile).toHaveBeenCalledWith(bescheidResource, binaryFileStateResource.resource);
-    });
-  });
-
-  describe('create bescheid document from file', () => {
-    const bescheid: BescheidResource = createBescheidResource();
-    const binaryFile: BinaryFileResource = createBinaryFileResource();
-
-    const createCommandProps: CreateCommandProps = createCreateCommandProps();
-    let buildCreateBescheidDocumentFromFilePropsSpy;
-
-    const commandStateResource: StateResource<CommandResource> = createCommandStateResource();
-
-    beforeEach(() => {
-      buildCreateBescheidDocumentFromFilePropsSpy = jest
-        .spyOn(BescheidUtil, 'buildCreateBescheidDocumentFromFileProps')
-        .mockReturnValue(createCommandProps);
-      commandService.createCommandByProps.mockReturnValue(of(commandStateResource));
-    });
-
-    it('should call command sevice', () => {
-      service.createBescheidDocumentFromFile(bescheid, binaryFile);
-
-      expect(commandService.createCommandByProps).toHaveBeenCalledWith(createCommandProps);
-    });
-
-    it('should build create command document from file props', () => {
-      service.createBescheidDocumentFromFile(bescheid, binaryFile);
-
-      expect(buildCreateBescheidDocumentFromFilePropsSpy).toHaveBeenCalledWith(bescheid, binaryFile);
-    });
-
-    it('should call handle create bescheid document from file response', () => {
-      service.handleCreateBescheidDocumentFromFileResponse = jest.fn();
-
-      service.createBescheidDocumentFromFile(bescheid, binaryFile);
-
-      expect(service.handleCreateBescheidDocumentFromFileResponse).toHaveBeenCalledWith(commandStateResource, binaryFile);
-    });
-  });
-
-  describe('handleCreateBescheidDocumentFromFileResponse', () => {
-    const commandStateResource: StateResource<CommandResource> = createStateResource(
-      createCommandResource([CommandLinkRel.EFFECTED_RESOURCE]),
-    );
-
-    beforeEach(() => {
-      service.emitBescheidDocumentError = jest.fn();
-    });
-
-    it('should emit error', () => {
-      const errorStateResource: StateResource<CommandResource> = createErrorStateResource(createProblemDetail());
-
-      service.handleCreateBescheidDocumentFromFileResponse(errorStateResource, createBinaryFileResource());
-
-      expect(service.emitBescheidDocumentError).toHaveBeenCalledWith(errorStateResource);
-    });
-
-    it('should NOT emit error', () => {
-      const binaryFileResource: BinaryFileResource = createBinaryFileResource();
-
-      service.handleCreateBescheidDocumentFromFileResponse(commandStateResource, binaryFileResource);
-
-      expect(service.emitBescheidDocumentError).not.toHaveBeenCalled();
-    });
-
-    it('should emit bescheid document state', () => {
-      const binaryFileResource: BinaryFileResource = createBinaryFileResource();
-
-      service.handleCreateBescheidDocumentFromFileResponse(commandStateResource, binaryFileResource);
-
-      expect(service.getBescheidDocument()).toBeObservable(
-        singleCold({
-          ...createEmptyBescheidDocument(),
-          documentUri: getEffectedResourceUrl(commandStateResource.resource),
-          upload: createEmptyUploadInProgress(),
-          resource: binaryFileResource,
-        }),
-      );
-    });
-
-    it('should NOT emit bescheid document state', () => {
-      const errorStateResource: StateResource<CommandResource> = createErrorStateResource(createProblemDetail());
-
-      service.handleCreateBescheidDocumentFromFileResponse(errorStateResource, createBinaryFileResource());
-
-      expect(service.getBescheidDocument()).toBeObservable(singleCold(createEmptyBescheidDocument()));
-    });
-  });
-
-  describe('createBescheid', () => {
-    const vorgangWithEingang: VorgangWithEingangResource = createVorgangWithEingangResource();
-    const command: CommandResource = createCommandResource([CommandLinkRel.EFFECTED_RESOURCE]);
-    const commandStateResource: StateResource<CommandResource> = createStateResource(command);
-
-    beforeEach(() => {
-      service.updateBescheidDraft = jest.fn();
-    });
-
-    beforeEach(() => {
-      facade.getBescheidCommand.mockReturnValue(of(commandStateResource));
-      (service as any).bescheidResourceService.loadByResourceUri = jest.fn();
-    });
-
-    it('should call facade', () => {
-      service.createBescheid(vorgangWithEingang).subscribe();
-
-      expect(facade.createBescheidDraft).toHaveBeenCalledWith(vorgangWithEingang, {
-        order: CommandOrder.CREATE_BESCHEID,
-        body: null,
-      });
-    });
-
-    it('should update bescheid draft', () => {
-      service.createBescheid(vorgangWithEingang).subscribe();
-
-      expect(service.updateBescheidDraft).toHaveBeenCalledWith(commandStateResource.resource);
-    });
-  });
-
-  describe('updateBescheidDraft', () => {
-    const command: CommandResource = createCommandResource([CommandLinkRel.EFFECTED_RESOURCE]);
-
-    beforeEach(() => {
-      (service as any).bescheidResourceService.loadByResourceUri = jest.fn();
-    });
-
-    it('should load resource by uri', () => {
-      service.updateBescheidDraft(command);
-
-      expect((service as any).bescheidResourceService.loadByResourceUri).toHaveBeenCalledWith(
-        getUrl(command, CommandLinkRel.EFFECTED_RESOURCE),
-      );
-    });
-
-    it('should emit bescheid created', () => {
-      service.updateBescheidDraft({ ...command, order: CommandOrder.CREATE_BESCHEID });
-
-      expect(service.getBescheidCreated()).toBeObservable(singleCold(true));
-    });
-  });
-
-  describe('updateBescheid', () => {
-    const bescheid: Bescheid = createBescheid();
-    const commandResource: CommandResource = createCommandResource([CommandLinkRel.EFFECTED_RESOURCE]);
-    const commandStateResource: StateResource<CommandResource> = createStateResource(commandResource);
-
-    beforeEach(() => {
-      service.doUpdateBescheid = jest.fn().mockReturnValue(EMPTY);
-      service.updateBescheidDraft = jest.fn().mockReturnValue(EMPTY);
-    });
-
-    it('should do update bescheid', () => {
-      service.updateBescheid(bescheidResource, bescheid);
-
-      expect(service.doUpdateBescheid).toHaveBeenCalledWith(bescheidResource, bescheid);
-    });
-
-    it('should update bescheid draft', () => {
-      service.doUpdateBescheid = jest.fn().mockReturnValue(of(commandStateResource));
-
-      service.updateBescheid(bescheidResource, bescheid).subscribe();
-
-      expect(service.updateBescheidDraft).toHaveBeenCalledWith(commandResource);
-    });
-  });
-
-  describe('do update bescheid', () => {
-    const bescheid: Bescheid = createBescheid();
-    const bescheidResource: BescheidResource = createBescheidResource();
-
-    const createCommandProps: CreateCommandProps = createCreateCommandProps();
-    let buildUpdateBescheidCommandPropsSpy: jest.SpyInstance;
-
-    beforeEach(() => {
-      buildUpdateBescheidCommandPropsSpy = jest
-        .spyOn(BescheidUtil, 'buildUpdateBescheidCommandProps')
-        .mockReturnValue(createCommandProps);
-      commandService.createCommandByProps.mockClear();
-      commandService.createCommandByProps.mockReturnValue(of(createCommandStateResource()));
-    });
-
-    it('should build update bescheid command props', () => {
-      service.doUpdateBescheid(bescheidResource, bescheid);
-
-      expect(buildUpdateBescheidCommandPropsSpy).toHaveBeenCalledWith(bescheidResource, bescheid);
-    });
-
-    it('should call command service', () => {
-      service.doUpdateBescheid(bescheidResource, bescheid).subscribe();
-
-      expect(commandService.createCommandByProps).toHaveBeenCalledWith(createCommandProps);
-    });
-  });
-
-  describe('sendBescheidManually', () => {
-    beforeEach(() => {
-      service.sendBescheid = jest.fn().mockReturnValue(EMPTY);
-    });
-
-    it('should send bescheid', () => {
-      service.sendBescheidManually().subscribe();
-
-      expect(service.sendBescheid).toHaveBeenCalledWith(BescheidLinkRel.BESCHEIDEN);
-    });
-
-    it('should return send bescheid command', () => {
-      const commandStateResource: StateResource<CommandResource> = createSuccessfullyDoneCommandStateResource();
-      service.sendBescheid = jest.fn().mockReturnValue(of(commandStateResource));
-
-      const sendCommandStateResource$: Observable<StateResource<CommandResource>> = service.sendBescheidManually();
-
-      expect(sendCommandStateResource$).toBeObservable(singleColdCompleted(commandStateResource));
-    });
-  });
-
-  describe('sendBescheid', () => {
-    beforeEach(() => {
-      service.getBescheidDraft = jest.fn().mockReturnValue(of(createStateResource(bescheidResource)));
-      commandService.createCommandByProps.mockReturnValue(EMPTY);
-    });
-
-    it('should get bescheid draft', () => {
-      service.sendBescheidManually().subscribe();
-
-      expect(service.getBescheidDraft).toHaveBeenCalled();
-    });
-
-    it('should create command', () => {
-      service.sendBescheid(BescheidLinkRel.BESCHEIDEN).subscribe();
-
-      expect(commandService.createCommandByProps).toHaveBeenCalledWith({
-        resource: bescheidResource,
-        linkRel: BescheidLinkRel.BESCHEIDEN,
-        command: {
-          order: CommandOrder.SEND_BESCHEID,
-          body: null,
-        },
-        snackBarMessage: EMPTY_STRING,
-      } as CreateCommandProps);
-    });
-
-    it('should return send bescheid command', () => {
-      const commandStateResource: StateResource<CommandResource> = createSuccessfullyDoneCommandStateResource();
-      commandService.createCommandByProps = jest.fn().mockReturnValue(of(commandStateResource));
-
-      const sendCommandStateResource$: Observable<StateResource<CommandResource>> = service.sendBescheid(
-        BescheidLinkRel.BESCHEIDEN,
-      );
-
-      expect(sendCommandStateResource$).toBeObservable(singleColdCompleted(commandStateResource));
-    });
-  });
-
-  describe('sendBescheidMessage', () => {
-    beforeEach(() => {
-      service.getBescheidDraft = jest.fn().mockReturnValue(createStateResource(bescheidResource));
-      service.sendBescheid = jest.fn().mockReturnValue(EMPTY);
-    });
-
-    it('should send bescheid', () => {
-      service.sendBescheidMessage().subscribe();
-
-      expect(service.sendBescheid).toHaveBeenCalledWith(BescheidLinkRel.BESCHEIDEN_UND_SENDEN);
-    });
-
-    it('should return send bescheid command', () => {
-      const commandStateResource: StateResource<CommandResource> = createSuccessfullyDoneCommandStateResource();
-      service.sendBescheid = jest.fn().mockReturnValue(of(commandStateResource));
-
-      const sendCommandStateResource$: Observable<StateResource<CommandResource>> = service.sendBescheidMessage();
-
-      expect(sendCommandStateResource$).toBeObservable(singleColdCompleted(commandStateResource));
-    });
-  });
-
-  describe('setActiveStep', () => {
-    beforeEach(() => {
-      service._clearUploadedFiles = jest.fn();
-    });
-
-    it('should emit changed active step', () => {
-      service.setActiveStep(BescheidWizardStep.DokumenteHochladen);
-
-      expect(service.getActiveStep()).toBeObservable(singleCold(BescheidWizardStep.DokumenteHochladen));
-    });
-
-    it('should clear uploaded files', () => {
-      service.setActiveStep(BescheidWizardStep.DokumenteHochladen);
-
-      expect(service._clearUploadedFiles).toHaveBeenCalled();
-    });
-  });
-
-  describe('getBescheidDraft', () => {
-    const bescheidDraft: BescheidResource = createBescheidResource();
-    const bescheidDraftStateResource: StateResource<BescheidResource> = createStateResource(bescheidDraft);
-
-    it('should call resource service', () => {
-      bescheidResourceService.get = jest.fn();
-
-      service.getBescheidDraft();
-
-      expect(bescheidResourceService.get).toHaveBeenCalled();
-    });
-
-    it('should return value', () => {
-      bescheidResourceService.get = jest.fn().mockReturnValue(singleCold(bescheidDraftStateResource));
-
-      const bescheidStateResource$: Observable<StateResource<BescheidResource>> = service.getBescheidDraft();
-
-      expect(bescheidStateResource$).toBeObservable(singleCold(bescheidDraftStateResource));
-    });
-  });
-
-  describe('setNachrichtEmpfaenger', () => {
-    it('should change wizard state', () => {
-      const empfaenger: string = faker.person.fullName();
-
-      service.setNachrichtEmpfaenger(empfaenger);
-
-      expect(service.getWizard()).toBeObservable(singleCold({ ...createInitialWizard(), empfaenger }));
-    });
-  });
-
-  describe('lockBescheidSending', () => {
-    it('should change wizard state', () => {
-      service.lockBescheidSending();
-
-      expect(service.getWizard()).toBeObservable(singleCold({ ...createInitialWizard(), canBeSend: false }));
-    });
-  });
-
-  describe('unlockBescheidSending', () => {
-    it('should change wizard state', () => {
-      service.unlockBescheidSending();
-
-      expect(service.getWizard()).toBeObservable(singleCold({ ...createInitialWizard(), canBeSend: true }));
-    });
-  });
-
-  describe('finishAddingBescheidDocument', () => {
-    it('should update state', () => {
-      const bescheidDocument: BescheidDocument = createBescheidDocument();
-      service._bescheidDocument$.next(bescheidDocument);
-
-      service.finishAddingBescheidDocument();
-
-      expect(service.getBescheidDocument()).toBeObservable(
-        singleCold({
-          ...bescheidDocument,
-          create: createEmptyStateResource(),
-          upload: createEmptyUploadInProgress(),
-        } as BescheidDocument),
-      );
-    });
-  });
-
-  describe('clear uploaded files', () => {
-    it('should call binary files service', () => {
-      service._clearUploadedFiles();
-
-      expect(binaryFileService.clearUploadedFiles).toHaveBeenCalledWith(BESCHEID_UPLOADED_ATTACHMENTS);
-    });
-  });
-});
diff --git a/alfa-client/libs/bescheid-shared/src/lib/bescheid2.service.ts b/alfa-client/libs/bescheid-shared/src/lib/bescheid2.service.ts
deleted file mode 100644
index 8a48a4dbdf043a0994ac12c2a298a6ae2be2fb3e..0000000000000000000000000000000000000000
--- a/alfa-client/libs/bescheid-shared/src/lib/bescheid2.service.ts
+++ /dev/null
@@ -1,337 +0,0 @@
-import {
-  Bescheid,
-  BESCHEID_UPLOADED_ATTACHMENTS,
-  BescheidDocument,
-  BescheidLinkRel,
-  BescheidResource,
-  BescheidSendBy,
-  BescheidWizardStep,
-  buildCreateBescheidCommand,
-  buildCreateBescheidDocumentCommandProps,
-  buildCreateBescheidDocumentFromFileProps,
-  buildSendBescheidCommandProps,
-  buildUpdateBescheidCommandProps,
-  createEmptyBescheidDocument,
-  createEmptyUploadInProgress,
-  createInitialWizard,
-  DocumentResource,
-  Wizard,
-} from '@alfa-client/bescheid-shared';
-import {
-  BinaryFileListLinkRel,
-  BinaryFileListResource,
-  BinaryFileResource,
-  BinaryFileService,
-} from '@alfa-client/binary-file-shared';
-import {
-  CommandOrder,
-  CommandResource,
-  CommandService,
-  getEffectedResourceUrl,
-  notHasCommandError,
-  tapOnCommandSuccessfullyDone,
-} from '@alfa-client/command-shared';
-import { PostfachService } from '@alfa-client/postfach-shared';
-import {
-  createEmptyStateResource,
-  filterIsLoadedOrHasError,
-  getEmbeddedResources,
-  hasStateResourceError,
-  isLoaded,
-  ResourceRepository,
-  StateResource,
-} from '@alfa-client/tech-shared';
-import { VorgangCommandService, VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
-import { inject, Injectable } from '@angular/core';
-import { getUrl, hasLink, LinkRel, Resource, ResourceUri } from '@ngxp/rest';
-import { isNil } from 'lodash-es';
-import { BehaviorSubject, filter, first, map, Observable, switchMap } from 'rxjs';
-import { BescheidFacade } from './+state/bescheid.facade';
-import { BescheidResourceService } from './bescheid-resource-service';
-import { DocumentLinkRel } from './document.linkrel';
-
-@Injectable()
-export class BescheidService2 {
-  private readonly bescheidFacade = inject(BescheidFacade);
-  private readonly commandService = inject(CommandService);
-  private readonly vorgangCommandService = inject(VorgangCommandService);
-  private readonly binaryFileService = inject(BinaryFileService);
-  private readonly resourceRepository = inject(ResourceRepository);
-  private readonly postfachService = inject(PostfachService);
-  private readonly bescheidResourceService = inject(BescheidResourceService);
-
-  readonly _bescheidDocument$: BehaviorSubject<BescheidDocument> = new BehaviorSubject(createEmptyBescheidDocument());
-  readonly _wizard$: BehaviorSubject<Wizard> = new BehaviorSubject(createInitialWizard());
-
-  public init(): void {
-    this._wizard$.next(createInitialWizard());
-    this._bescheidDocument$.next(createEmptyBescheidDocument());
-  }
-
-  public exit(): void {
-    this.postfachService.setPostfachMailOnReload();
-    this._clearUploadedFiles();
-  }
-
-  public skipBescheidCreation(
-    vorgangWithEingangResource: VorgangWithEingangResource,
-    bescheidResource: BescheidResource,
-  ): Observable<StateResource<CommandResource>> {
-    if (isNil(bescheidResource)) {
-      return this.vorgangCommandService.abschliessen(vorgangWithEingangResource);
-    }
-    return this.deleteBescheidAndCompleteVorgang(vorgangWithEingangResource);
-  }
-
-  deleteBescheidAndCompleteVorgang(
-    vorgangWithEingangResource: VorgangWithEingangResource,
-  ): Observable<StateResource<CommandResource>> {
-    return this.vorgangCommandService
-      .abschliessen(vorgangWithEingangResource)
-      .pipe(tapOnCommandSuccessfullyDone(() => this.deleteBescheid()));
-  }
-
-  public deleteBescheid(): Observable<StateResource<CommandResource>> {
-    return this.bescheidResourceService.delete();
-  }
-
-  public loadFiles(bescheidResource: BescheidResource): void {
-    this.loadBescheidDocument(bescheidResource);
-    this.loadAttachments(bescheidResource);
-  }
-
-  public createBescheidDocument(bescheidResource: BescheidResource): void {
-    this._bescheidDocument$.next({ ...createEmptyBescheidDocument(), create: createEmptyStateResource(true) });
-    this.doCreateBescheidDocument(bescheidResource)
-      .pipe(filterIsLoadedOrHasError(), first())
-      .subscribe((commandStateResource: StateResource<CommandResource>) =>
-        this.handleCreateBescheidDocumentResponse(commandStateResource),
-      );
-  }
-
-  doCreateBescheidDocument(bescheidResource: BescheidResource): Observable<StateResource<CommandResource>> {
-    return this.commandService.createCommandByProps(buildCreateBescheidDocumentCommandProps(bescheidResource));
-  }
-
-  handleCreateBescheidDocumentResponse(commandStateResource: StateResource<CommandResource>): void {
-    if (notHasCommandError(commandStateResource.resource)) {
-      const documentUri: ResourceUri = getEffectedResourceUrl(commandStateResource.resource);
-      this._bescheidDocument$.next({ ...this._bescheidDocument$.value, documentUri });
-      this.loadBescheidDocumentByUri(documentUri);
-    } else {
-      this._bescheidDocument$.next({ ...this._bescheidDocument$.value, create: commandStateResource });
-    }
-  }
-
-  emitBescheidDocumentError(stateResource: StateResource<Resource>): void {
-    const value: BescheidDocument = this._bescheidDocument$.value;
-    this._bescheidDocument$.next({
-      ...value,
-      upload: { ...value.upload, loading: false, error: stateResource.error },
-    });
-  }
-
-  loadBescheidDocument(bescheidResource: BescheidResource): void {
-    if (hasLink(bescheidResource, BescheidLinkRel.BESCHEID_DOCUMENT)) {
-      this.loadBescheidDocumentByUri(getUrl(bescheidResource, BescheidLinkRel.BESCHEID_DOCUMENT));
-    }
-  }
-
-  public loadBescheidDocumentByUri(resourceUri: ResourceUri): void {
-    this.resourceRepository
-      .getResource(resourceUri)
-      .pipe(first())
-      .subscribe((document: DocumentResource) => this.loadBescheidDocumentFile(document));
-  }
-
-  loadBescheidDocumentFile(document: DocumentResource): void {
-    this.binaryFileService
-      .getFile(getUrl(document, DocumentLinkRel.FILE))
-      .pipe(filterIsLoadedOrHasError(), first())
-      .subscribe((binaryFile: StateResource<BinaryFileResource>) => {
-        this._bescheidDocument$.next({
-          ...this._bescheidDocument$.value,
-          upload: createEmptyUploadInProgress(),
-          create: createEmptyStateResource(),
-          resource: binaryFile.resource,
-          documentUri: getUrl(document, LinkRel.Self),
-        });
-      });
-  }
-
-  loadAttachments(bescheidResource: BescheidResource): void {
-    if (hasLink(bescheidResource, BescheidLinkRel.ATTACHMENTS)) {
-      this.binaryFileService
-        .getFiles(bescheidResource, BescheidLinkRel.ATTACHMENTS)
-        .pipe(
-          filterIsLoadedOrHasError(),
-          first(),
-          map((stateResource: StateResource<BinaryFileListResource>) =>
-            getEmbeddedResources<BinaryFileResource>(stateResource, BinaryFileListLinkRel.FILE_LIST),
-          ),
-        )
-        .subscribe((files: BinaryFileResource[]) => this.binaryFileService.addFiles(BESCHEID_UPLOADED_ATTACHMENTS, files));
-    }
-  }
-
-  public uploadBescheidDocument(document: File, bescheid: BescheidResource): void {
-    this._bescheidDocument$.next({ ...this._bescheidDocument$.value, upload: { fileName: document.name, loading: true } });
-    this.binaryFileService
-      .uploadFile(bescheid, BescheidLinkRel.UPLOAD_BESCHEID_FILE, document, false)
-      .pipe(filterIsLoadedOrHasError(), first())
-      .subscribe((binaryFileStateResource: StateResource<BinaryFileResource>) =>
-        this.handleUploadBescheidDocumentResponse(bescheid, binaryFileStateResource),
-      );
-  }
-
-  handleUploadBescheidDocumentResponse(
-    bescheid: BescheidResource,
-    binaryFileStateResource: StateResource<BinaryFileResource>,
-  ): void {
-    if (hasStateResourceError(binaryFileStateResource)) {
-      this.emitBescheidDocumentError(binaryFileStateResource);
-    } else {
-      this.createBescheidDocumentFromFile(bescheid, binaryFileStateResource.resource);
-    }
-  }
-
-  createBescheidDocumentFromFile(bescheid: BescheidResource, binaryFile: BinaryFileResource): void {
-    this.commandService
-      .createCommandByProps(buildCreateBescheidDocumentFromFileProps(bescheid, binaryFile))
-      .pipe(filterIsLoadedOrHasError(), first())
-      .subscribe((commandStateResource: StateResource<CommandResource>) =>
-        this.handleCreateBescheidDocumentFromFileResponse(commandStateResource, binaryFile),
-      );
-  }
-
-  handleCreateBescheidDocumentFromFileResponse(
-    commandStateResource: StateResource<CommandResource>,
-    binaryFile: BinaryFileResource,
-  ): void {
-    if (hasStateResourceError(commandStateResource)) {
-      this.emitBescheidDocumentError(commandStateResource);
-    } else {
-      this._bescheidDocument$.next({
-        ...this._bescheidDocument$.value,
-        documentUri: getEffectedResourceUrl(commandStateResource.resource),
-        upload: createEmptyUploadInProgress(),
-        resource: binaryFile,
-      });
-    }
-  }
-
-  public createBescheid(
-    vorgangWithEingang: VorgangWithEingangResource,
-    bescheid?: Bescheid,
-  ): Observable<StateResource<CommandResource>> {
-    this.bescheidFacade.createBescheidDraft(vorgangWithEingang, buildCreateBescheidCommand(bescheid));
-    return this.bescheidFacade
-      .getBescheidCommand()
-      .pipe(
-        tapOnCommandSuccessfullyDone((commandStateResource: StateResource<CommandResource>) =>
-          this.updateBescheidDraft(commandStateResource.resource),
-        ),
-      );
-  }
-
-  updateBescheidDraft(command: CommandResource): void {
-    this.bescheidResourceService.loadByResourceUri(getEffectedResourceUrl(command));
-    if (command.order === CommandOrder.CREATE_BESCHEID) {
-      this._wizard$.next({ ...this._wizard$.value, bescheidCreated: true });
-    }
-  }
-
-  public updateBescheid(
-    bescheidResource: BescheidResource,
-    updatedBescheid: Bescheid,
-  ): Observable<StateResource<CommandResource>> {
-    return this.doUpdateBescheid(bescheidResource, updatedBescheid).pipe(
-      tapOnCommandSuccessfullyDone((commandStateResource: StateResource<CommandResource>) => {
-        this.updateBescheidDraft(commandStateResource.resource);
-      }),
-    );
-  }
-
-  doUpdateBescheid(bescheidResource: BescheidResource, bescheid: Bescheid): Observable<StateResource<CommandResource>> {
-    return this.commandService.createCommandByProps(buildUpdateBescheidCommandProps(bescheidResource, bescheid));
-  }
-
-  public sendBescheidManually(): Observable<StateResource<CommandResource>> {
-    return this.sendBescheid(BescheidLinkRel.BESCHEIDEN);
-  }
-
-  public sendBescheidMessage(): Observable<StateResource<CommandResource>> {
-    return this.sendBescheid(BescheidLinkRel.BESCHEIDEN_UND_SENDEN);
-  }
-
-  sendBescheid(linkRel: BescheidLinkRel): Observable<StateResource<CommandResource>> {
-    return this.getBescheidDraft().pipe(
-      filter(isLoaded),
-      map((stateResource: StateResource<BescheidResource>) => stateResource.resource),
-      switchMap((bescheidResource: BescheidResource) =>
-        this.commandService.createCommandByProps(buildSendBescheidCommandProps(bescheidResource, linkRel)),
-      ),
-    );
-  }
-
-  public getBescheidDraft(): Observable<StateResource<BescheidResource>> {
-    return this.bescheidResourceService.get();
-  }
-
-  public getBescheidDocument(): Observable<BescheidDocument> {
-    return this._bescheidDocument$.asObservable();
-  }
-
-  public deleteBescheidDocument(): void {
-    this._bescheidDocument$.next(createEmptyBescheidDocument());
-  }
-
-  public getActiveStep(): Observable<BescheidWizardStep> {
-    return this._wizard$.asObservable().pipe(map((wizard: Wizard) => wizard.activeStep));
-  }
-
-  public setActiveStep(step: BescheidWizardStep): void {
-    this._clearUploadedFiles();
-    this._wizard$.next({ ...this._wizard$.value, activeStep: step });
-  }
-
-  public getBescheidCreated(): Observable<boolean> {
-    return this._wizard$.asObservable().pipe(map((wizard: Wizard) => wizard.bescheidCreated));
-  }
-
-  public selectBescheidResource(): Observable<StateResource<BescheidResource>> {
-    return this.bescheidResourceService.selectResource();
-  }
-
-  public getWizard(): Observable<Wizard> {
-    return this._wizard$.asObservable();
-  }
-
-  public setSendBy(sendBy: BescheidSendBy): void {
-    this._wizard$.next({ ...this._wizard$.value, sendBy: sendBy });
-  }
-
-  public setNachrichtEmpfaenger(empfaenger: string): void {
-    this._wizard$.next({ ...this._wizard$.value, empfaenger: empfaenger });
-  }
-
-  public lockBescheidSending(): void {
-    this._wizard$.next({ ...this._wizard$.value, canBeSend: false });
-  }
-
-  public unlockBescheidSending(): void {
-    this._wizard$.next({ ...this._wizard$.value, canBeSend: true });
-  }
-
-  public finishAddingBescheidDocument(): void {
-    this._bescheidDocument$.next({
-      ...this._bescheidDocument$.value,
-      upload: createEmptyUploadInProgress(),
-      create: createEmptyStateResource(),
-    });
-  }
-
-  _clearUploadedFiles(): void {
-    this.binaryFileService.clearUploadedFiles(BESCHEID_UPLOADED_ATTACHMENTS);
-  }
-}
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-in-vorgang-container/bescheid-in-vorgang-container.component.html b/alfa-client/libs/bescheid/src/lib/bescheid-in-vorgang-container/bescheid-in-vorgang-container.component.html
deleted file mode 100644
index 0526dcd28fe6df116fd5b5265bf6c032ea25746a..0000000000000000000000000000000000000000
--- a/alfa-client/libs/bescheid/src/lib/bescheid-in-vorgang-container/bescheid-in-vorgang-container.component.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!--
-
-    Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
-    Ministerpräsidenten des Landes Schleswig-Holstein
-    Staatskanzlei
-    Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-
-    Lizenziert unter der EUPL, Version 1.2 oder - sobald
-    diese von der Europäischen Kommission genehmigt wurden -
-    Folgeversionen der EUPL ("Lizenz");
-    Sie dürfen dieses Werk ausschließlich gemäß
-    dieser Lizenz nutzen.
-    Eine Kopie der Lizenz finden Sie hier:
-
-    https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-
-    Sofern nicht durch anwendbare Rechtsvorschriften
-    gefordert oder in schriftlicher Form vereinbart, wird
-    die unter der Lizenz verbreitete Software "so wie sie
-    ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-    ausdrücklich oder stillschweigend - verbreitet.
-    Die sprachspezifischen Genehmigungen und Beschränkungen
-    unter der Lizenz sind dem Lizenztext zu entnehmen.
-
--->
-<alfa-bescheid-in-vorgang
-  *ngIf="bescheidStateResource$ | async as bescheidStateResource"
-  data-test-id="bescheid-in-vorgang"
-  [bescheidStateResource]="bescheidStateResource"
-  [bescheidDocumentFile]="bescheidDocumentFile$ | async"
-  [hasBescheidDraft]="hasBescheidDraft"
->
-</alfa-bescheid-in-vorgang>
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-in-vorgang-container/bescheid-in-vorgang-container.component.spec.ts b/alfa-client/libs/bescheid/src/lib/bescheid-in-vorgang-container/bescheid-in-vorgang-container.component.spec.ts
deleted file mode 100644
index 9e0e0870df4acfdef28672db7215f9eeb5839f8e..0000000000000000000000000000000000000000
--- a/alfa-client/libs/bescheid/src/lib/bescheid-in-vorgang-container/bescheid-in-vorgang-container.component.spec.ts
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BescheidLinkRel, BescheidResource, BescheidService } from '@alfa-client/bescheid-shared';
-import { StateResource, createStateResource } from '@alfa-client/tech-shared';
-import { Mock, mock } from '@alfa-client/test-utils';
-import { VorgangWithEingangLinkRel, VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
-import { SimpleChanges } from '@angular/core';
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { createBescheidResource } from 'libs/bescheid-shared/src/test/bescheid';
-import { createVorgangWithEingangResource } from 'libs/vorgang-shared/test/vorgang';
-import { MockComponent } from 'ng-mocks';
-import { of } from 'rxjs';
-import { BescheidInVorgangContainerComponent } from './bescheid-in-vorgang-container.component';
-import { BescheidInVorgangComponent } from './bescheid-in-vorgang/bescheid-in-vorgang.component';
-
-describe('BescheidInVorgangContainerComponent', () => {
-  let component: BescheidInVorgangContainerComponent;
-  let fixture: ComponentFixture<BescheidInVorgangContainerComponent>;
-
-  let bescheidService: Mock<BescheidService>;
-  const vorgang: VorgangWithEingangResource = createVorgangWithEingangResource();
-
-  const noChanges: SimpleChanges = {};
-  const changes: SimpleChanges = <any>{ vorgang: vorgang };
-
-  const bescheidResource: BescheidResource = createBescheidResource();
-  const bescheidStateResource: StateResource<BescheidResource> =
-    createStateResource(bescheidResource);
-
-  beforeEach(async () => {
-    bescheidService = mock(BescheidService);
-    bescheidService.getBescheidDocumentFile = jest.fn();
-    bescheidService.loadBescheidDocument = jest.fn();
-    bescheidService.getBescheidDraft.mockReturnValue(of(bescheidStateResource));
-
-    await TestBed.configureTestingModule({
-      declarations: [
-        BescheidInVorgangContainerComponent,
-        MockComponent(BescheidInVorgangComponent),
-      ],
-      providers: [{ provide: BescheidService, useValue: bescheidService }],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(BescheidInVorgangContainerComponent);
-    component = fixture.componentInstance;
-    component.vorgang = vorgang;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-
-  describe('hasBescheidDraft', () => {
-    it('should return false', () => {
-      component.vorgang = vorgang;
-
-      expect(component.hasBescheidDraft).toBeFalsy();
-    });
-
-    it('should return true', () => {
-      component.vorgang = createVorgangWithEingangResource([
-        VorgangWithEingangLinkRel.BESCHEID_DRAFT,
-      ]);
-
-      expect(component.hasBescheidDraft).toBeTruthy();
-    });
-  });
-
-  describe('onChanges', () => {
-    it('should not call getBescheid', () => {
-      component.getBescheid = jest.fn();
-
-      component.ngOnChanges(noChanges);
-
-      expect(component.getBescheid).not.toHaveBeenCalled();
-    });
-
-    it('should call getBescheid', () => {
-      component.getBescheid = jest.fn();
-
-      component.ngOnChanges(changes);
-
-      expect(component.getBescheid).toHaveBeenCalled();
-    });
-
-    it('should not call bescheidService.getBescheidDocumentFile', () => {
-      component.ngOnChanges(noChanges);
-
-      expect(bescheidService.getBescheidDocumentFile).not.toHaveBeenCalled();
-    });
-
-    it('should call bescheidService.getBescheidDocumentFile', () => {
-      component.ngOnChanges(changes);
-
-      expect(bescheidService.getBescheidDocumentFile).toHaveBeenCalled();
-    });
-  });
-
-  describe('getBescheid', () => {
-    it('should not call bescheidService.loadBescheidDocumentByUri', (done) => {
-      component.ngOnChanges(changes);
-
-      component.bescheidStateResource$.subscribe(() => {
-        expect(bescheidService.loadBescheidDocumentByUri).not.toHaveBeenCalled();
-        done();
-      });
-    });
-
-    it('should call bescheidService.loadBescheidDocumentByUri', (done) => {
-      const bescheidResource: BescheidResource = createBescheidResource([
-        BescheidLinkRel.BESCHEID_DOCUMENT,
-      ]);
-      const bescheidStateResource: StateResource<BescheidResource> =
-        createStateResource(bescheidResource);
-      bescheidService.getBescheidDraft.mockReturnValue(of(bescheidStateResource));
-
-      component.ngOnChanges(changes);
-
-      component.bescheidStateResource$.subscribe(() => {
-        expect(bescheidService.loadBescheidDocumentByUri).toHaveBeenCalled();
-        done();
-      });
-    });
-  });
-});
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-in-vorgang-container/bescheid-in-vorgang-container.component.ts b/alfa-client/libs/bescheid/src/lib/bescheid-in-vorgang-container/bescheid-in-vorgang-container.component.ts
deleted file mode 100644
index 97dc8bd587a6a4ece1d5d88c44a283681dc288dd..0000000000000000000000000000000000000000
--- a/alfa-client/libs/bescheid/src/lib/bescheid-in-vorgang-container/bescheid-in-vorgang-container.component.ts
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BescheidLinkRel, BescheidResource, BescheidService } from '@alfa-client/bescheid-shared';
-import { BinaryFileResource } from '@alfa-client/binary-file-shared';
-import { StateResource } from '@alfa-client/tech-shared';
-import { VorgangResource, VorgangWithEingangLinkRel } from '@alfa-client/vorgang-shared';
-import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';
-import { getUrl, hasLink } from '@ngxp/rest';
-import { has } from 'lodash-es';
-import { Observable, tap } from 'rxjs';
-
-@Component({
-  selector: 'alfa-bescheid-in-vorgang-container',
-  templateUrl: './bescheid-in-vorgang-container.component.html',
-  styles: [],
-})
-export class BescheidInVorgangContainerComponent implements OnChanges {
-  @Input() vorgang: VorgangResource;
-
-  public bescheidStateResource$: Observable<StateResource<BescheidResource>>;
-  public bescheidDocumentFile$: Observable<StateResource<BinaryFileResource>>;
-
-  get hasBescheidDraft(): boolean {
-    return hasLink(this.vorgang, VorgangWithEingangLinkRel.BESCHEID_DRAFT);
-  }
-
-  constructor(private bescheidService: BescheidService) {}
-
-  // TODO Prüfen, warum nicht als Setter möglich. Hatte im ersten Versuch zu Laufzeitfehlern geführt.
-  ngOnChanges(changes: SimpleChanges): void {
-    if (!has(changes, 'vorgang')) {
-      return;
-    }
-
-    this.bescheidStateResource$ = this.getBescheid();
-    this.bescheidDocumentFile$ = this.bescheidService.getBescheidDocumentFile();
-  }
-
-  getBescheid(): Observable<StateResource<BescheidResource>> {
-    return this.bescheidService.getBescheidDraft().pipe(
-      tap((bescheidResource) => {
-        if (hasLink(bescheidResource.resource, BescheidLinkRel.BESCHEID_DOCUMENT)) {
-          this.bescheidService.loadBescheidDocumentByUri(
-            getUrl(bescheidResource.resource, BescheidLinkRel.BESCHEID_DOCUMENT),
-          );
-        }
-      }),
-    );
-  }
-}
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-in-vorgang-container/bescheid-in-vorgang/bescheid-in-vorgang.component.html b/alfa-client/libs/bescheid/src/lib/bescheid-in-vorgang-container/bescheid-in-vorgang/bescheid-in-vorgang.component.html
deleted file mode 100644
index 8273187344645af3ac5814af70eb389e268283ba..0000000000000000000000000000000000000000
--- a/alfa-client/libs/bescheid/src/lib/bescheid-in-vorgang-container/bescheid-in-vorgang/bescheid-in-vorgang.component.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<!--
-
-    Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
-    Ministerpräsidenten des Landes Schleswig-Holstein
-    Staatskanzlei
-    Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-
-    Lizenziert unter der EUPL, Version 1.2 oder - sobald
-    diese von der Europäischen Kommission genehmigt wurden -
-    Folgeversionen der EUPL ("Lizenz");
-    Sie dürfen dieses Werk ausschließlich gemäß
-    dieser Lizenz nutzen.
-    Eine Kopie der Lizenz finden Sie hier:
-
-    https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-
-    Sofern nicht durch anwendbare Rechtsvorschriften
-    gefordert oder in schriftlicher Form vereinbart, wird
-    die unter der Lizenz verbreitete Software "so wie sie
-    ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-    ausdrücklich oder stillschweigend - verbreitet.
-    Die sprachspezifischen Genehmigungen und Beschränkungen
-    unter der Lizenz sind dem Lizenztext zu entnehmen.
-
--->
-<ozgcloud-spinner [stateResource]="bescheidStateResource">
-  <ng-container *ngIf="bescheidStateResource.resource as bescheid">
-    <ozgcloud-expansion-panel headline="Bescheid">
-      <div class="flex max-w-xl flex-col gap-4">
-        <ods-bescheid-status-text [dateText]="bescheid.beschiedenAm | formatFullDatePipe" />
-
-        <alfa-binary-file2-container
-          *ngIf="bescheidDocumentFile.resource && bescheidDocumentFile.loaded"
-          [file]="bescheidDocumentFile.resource"
-          data-test-id="bescheid-document-in-vorgang-binary-file"
-        >
-        </alfa-binary-file2-container>
-      </div>
-    </ozgcloud-expansion-panel>
-  </ng-container>
-</ozgcloud-spinner>
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-in-vorgang-container/bescheid-in-vorgang/bescheid-in-vorgang.component.spec.ts b/alfa-client/libs/bescheid/src/lib/bescheid-in-vorgang-container/bescheid-in-vorgang/bescheid-in-vorgang.component.spec.ts
deleted file mode 100644
index c68eaca257bb2cc3feaad12ab0cb232a199c0ecc..0000000000000000000000000000000000000000
--- a/alfa-client/libs/bescheid/src/lib/bescheid-in-vorgang-container/bescheid-in-vorgang/bescheid-in-vorgang.component.spec.ts
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BescheidResource } from '@alfa-client/bescheid-shared';
-import { BinaryFile2ContainerComponent, BinaryFileContainerComponent } from '@alfa-client/binary-file';
-import { BinaryFileResource } from '@alfa-client/binary-file-shared';
-import { StateResource, createStateResource } from '@alfa-client/tech-shared';
-import { existsAsHtmlElement, notExistsAsHtmlElement } from '@alfa-client/test-utils';
-import { ExpansionPanelComponent, SpinnerComponent } from '@alfa-client/ui';
-import { registerLocaleData } from '@angular/common';
-import localeDe from '@angular/common/locales/de';
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { FormatFullDatePipe } from 'libs/tech-shared/src/lib/pipe/format-full-date.pipe';
-import { MockComponent } from 'ng-mocks';
-import { createBescheidResource } from '../../../../../bescheid-shared/src/test/bescheid';
-import { createBinaryFileResource } from '../../../../../binary-file-shared/test/binary-file';
-import { getDataTestIdOf } from '../../../../../tech-shared/test/data-test';
-import { BescheidInVorgangComponent } from './bescheid-in-vorgang.component';
-
-import { BescheidStatusTextComponent } from '@ods/system';
-
-registerLocaleData(localeDe);
-
-describe('BescheidInVorgangComponent', () => {
-  let component: BescheidInVorgangComponent;
-  let fixture: ComponentFixture<BescheidInVorgangComponent>;
-
-  const bescheidResource: BescheidResource = createBescheidResource();
-  const bescheidStateResource: StateResource<BescheidResource> = createStateResource(bescheidResource);
-
-  const binaryFile: BinaryFileResource = createBinaryFileResource();
-  const binaryFileStateResource: StateResource<BinaryFileResource> = createStateResource(binaryFile);
-
-  const bescheidDocumentBinaryFileContainer: string = getDataTestIdOf('bescheid-document-in-vorgang-binary-file');
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [
-        BescheidInVorgangComponent,
-        FormatFullDatePipe,
-        MockComponent(SpinnerComponent),
-        MockComponent(ExpansionPanelComponent),
-        MockComponent(BinaryFileContainerComponent),
-        MockComponent(BescheidStatusTextComponent),
-        MockComponent(BinaryFile2ContainerComponent),
-      ],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(BescheidInVorgangComponent);
-    component = fixture.componentInstance;
-    component.bescheidStateResource = bescheidStateResource;
-    component.bescheidDocumentFile = binaryFileStateResource;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-
-  describe('render', () => {
-    it('should show bescheid document file', () => {
-      component.bescheidDocumentFile = createStateResource(createBinaryFileResource());
-
-      fixture.detectChanges();
-
-      existsAsHtmlElement(fixture, bescheidDocumentBinaryFileContainer);
-    });
-
-    it('should NOT show bescheid document file if resource null', () => {
-      component.bescheidDocumentFile = { ...createStateResource(null), loaded: true };
-
-      fixture.detectChanges();
-
-      notExistsAsHtmlElement(fixture, bescheidDocumentBinaryFileContainer);
-    });
-
-    it('should NOT show bescheid document file if resource loading', () => {
-      component.bescheidDocumentFile = {
-        ...createStateResource(createBinaryFileResource()),
-        loaded: false,
-      };
-
-      fixture.detectChanges();
-
-      notExistsAsHtmlElement(fixture, bescheidDocumentBinaryFileContainer);
-    });
-  });
-
-  describe('bescheidBewilligt', () => {
-    it('should return true', () => {
-      component.bescheidStateResource.resource.bewilligt = true;
-
-      expect(component.bescheidBewilligt).toBeTruthy();
-    });
-
-    it('should return false', () => {
-      component.bescheidStateResource.resource.bewilligt = false;
-
-      expect(component.bescheidBewilligt).toBeFalsy();
-    });
-  });
-
-  describe('bescheidAbgelehnt', () => {
-    it('should return false', () => {
-      component.bescheidStateResource.resource.bewilligt = true;
-
-      expect(component.bescheidAbgelehnt).toBeFalsy();
-    });
-
-    it('should return true', () => {
-      component.bescheidStateResource.resource.bewilligt = false;
-
-      expect(component.bescheidAbgelehnt).toBeTruthy();
-    });
-  });
-});
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-in-vorgang-container/bescheid-in-vorgang/bescheid-in-vorgang.component.ts b/alfa-client/libs/bescheid/src/lib/bescheid-in-vorgang-container/bescheid-in-vorgang/bescheid-in-vorgang.component.ts
deleted file mode 100644
index cb92b3bebba90cb4bc62d3685519dbc9c29683d5..0000000000000000000000000000000000000000
--- a/alfa-client/libs/bescheid/src/lib/bescheid-in-vorgang-container/bescheid-in-vorgang/bescheid-in-vorgang.component.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BescheidResource } from '@alfa-client/bescheid-shared';
-import { BinaryFileResource } from '@alfa-client/binary-file-shared';
-import { StateResource } from '@alfa-client/tech-shared';
-import { Component, Input } from '@angular/core';
-
-@Component({
-  selector: 'alfa-bescheid-in-vorgang',
-  templateUrl: './bescheid-in-vorgang.component.html',
-})
-export class BescheidInVorgangComponent {
-  @Input() bescheidStateResource: StateResource<BescheidResource>;
-  @Input() bescheidDocumentFile: StateResource<BinaryFileResource>;
-  @Input() hasBescheidDraft: boolean = false;
-
-  get bescheidBewilligt(): boolean {
-    return <boolean>this.bescheidStateResource.resource.bewilligt;
-  }
-
-  get bescheidAbgelehnt(): boolean {
-    return !this.bescheidBewilligt;
-  }
-}
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-list-in-vorgang-container/bescheid-list-in-vorgang/document-in-bescheid-container/document-in-bescheid-container.component.spec.ts b/alfa-client/libs/bescheid/src/lib/bescheid-list-in-vorgang-container/bescheid-list-in-vorgang/document-in-bescheid-container/document-in-bescheid-container.component.spec.ts
index 9d003e6fff71a5306124381c873fc1eef9d2b496..d1c390fc0df7df8a30b9463b1d22eeef9b5dcb82 100644
--- a/alfa-client/libs/bescheid/src/lib/bescheid-list-in-vorgang-container/bescheid-list-in-vorgang/document-in-bescheid-container/document-in-bescheid-container.component.spec.ts
+++ b/alfa-client/libs/bescheid/src/lib/bescheid-list-in-vorgang-container/bescheid-list-in-vorgang/document-in-bescheid-container/document-in-bescheid-container.component.spec.ts
@@ -23,22 +23,11 @@
  */
 import { BescheidService } from '@alfa-client/bescheid-shared';
 import { BinaryFileUriContainerComponent } from '@alfa-client/binary-file';
-import {
-  GetUrlPipe,
-  HasLinkPipe,
-  StateResource,
-  createStateResource,
-} from '@alfa-client/tech-shared';
-import {
-  Mock,
-  existsAsHtmlElement,
-  getMockComponent,
-  mock,
-  notExistsAsHtmlElement,
-} from '@alfa-client/test-utils';
+import { createStateResource, GetUrlPipe, HasLinkPipe, StateResource } from '@alfa-client/tech-shared';
+import { existsAsHtmlElement, getMockComponent, Mock, mock, notExistsAsHtmlElement } from '@alfa-client/test-utils';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { faker } from '@faker-js/faker';
-import { ResourceUri, getUrl } from '@ngxp/rest';
+import { getUrl, ResourceUri } from '@ngxp/rest';
 import { AttachmentWrapperComponent } from '@ods/system';
 import { DocumentLinkRel } from 'libs/bescheid-shared/src/lib/document.linkrel';
 import { DocumentResource } from 'libs/bescheid-shared/src/lib/document.model';
@@ -81,7 +70,7 @@ describe('DocumentInBescheidContainerComponent', () => {
     fixture = TestBed.createComponent(DocumentInBescheidContainerComponent);
     component = fixture.componentInstance;
     component.documentUri = documentUri;
-    bescheidService.loadBescheidDocument.mockReturnValue(of(documentStateResource));
+    bescheidService.getBescheidDocumentByUri.mockReturnValue(of(documentStateResource));
     fixture.detectChanges();
   });
 
@@ -93,15 +82,13 @@ describe('DocumentInBescheidContainerComponent', () => {
     it('should call service to load bescheid document', () => {
       component.ngOnInit();
 
-      expect(bescheidService.loadBescheidDocument).toHaveBeenCalledWith(documentUri);
+      expect(bescheidService.getBescheidDocumentByUri).toHaveBeenCalledWith(documentUri);
     });
   });
 
   describe('binary file uri container', () => {
     it('should be visible if link exists on resource', () => {
-      component.documentStateResource$ = of(
-        createStateResource(createDocumentResource([DocumentLinkRel.FILE])),
-      );
+      component.documentStateResource$ = of(createStateResource(createDocumentResource([DocumentLinkRel.FILE])));
 
       fixture.detectChanges();
 
@@ -117,8 +104,10 @@ describe('DocumentInBescheidContainerComponent', () => {
     });
 
     it('should be called with binaryFileUri', () => {
-      const binaryFileUriContainer: BinaryFileUriContainerComponent =
-        getMockComponent<BinaryFileUriContainerComponent>(fixture, BinaryFileUriContainerComponent);
+      const binaryFileUriContainer: BinaryFileUriContainerComponent = getMockComponent<BinaryFileUriContainerComponent>(
+        fixture,
+        BinaryFileUriContainerComponent,
+      );
 
       expect(binaryFileUriContainer.binaryFileUri).toBe(getUrl(document, DocumentLinkRel.FILE));
     });
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-list-in-vorgang-container/bescheid-list-in-vorgang/document-in-bescheid-container/document-in-bescheid-container.component.ts b/alfa-client/libs/bescheid/src/lib/bescheid-list-in-vorgang-container/bescheid-list-in-vorgang/document-in-bescheid-container/document-in-bescheid-container.component.ts
index d4ff2b232c9cbd6e4a0602dfb8de775b2f6b8634..a99457f2b2edf4a0aeca4060a5e2fbe6588c99bc 100644
--- a/alfa-client/libs/bescheid/src/lib/bescheid-list-in-vorgang-container/bescheid-list-in-vorgang/document-in-bescheid-container/document-in-bescheid-container.component.ts
+++ b/alfa-client/libs/bescheid/src/lib/bescheid-list-in-vorgang-container/bescheid-list-in-vorgang/document-in-bescheid-container/document-in-bescheid-container.component.ts
@@ -43,6 +43,6 @@ export class DocumentInBescheidContainerComponent implements OnInit {
   constructor(private bescheidService: BescheidService) {}
 
   ngOnInit(): void {
-    this.documentStateResource$ = this.bescheidService.loadBescheidDocument(this.documentUri);
+    this.documentStateResource$ = this.bescheidService.getBescheidDocumentByUri(this.documentUri);
   }
 }
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard-container.component.spec.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard-container.component.spec.ts
index 1fe204ade444f7609bea459484de54ed0ab5a829..ed66740aa800ca2b5243d64b3f60d0b04552e43b 100644
--- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard-container.component.spec.ts
+++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard-container.component.spec.ts
@@ -21,19 +21,11 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { BescheidResource, BescheidWizardDialogResult, BescheidWizardStep } from '@alfa-client/bescheid-shared';
+import { BescheidWizardContainerComponent } from '@alfa-client/bescheid';
+import { BescheidResource, BescheidService, BescheidWizardDialogResult, BescheidWizardStep } from '@alfa-client/bescheid-shared';
 import { CommandOrder, CommandResource } from '@alfa-client/command-shared';
 import { createEmptyStateResource, createStateResource, ESCAPE_KEY, StateResource } from '@alfa-client/tech-shared';
-import {
-  createDialogRefMock,
-  DialogRefMock,
-  existsAsHtmlElement,
-  getElementFromFixtureByType,
-  Mock,
-  mock,
-  triggerEvent,
-  useFromMock,
-} from '@alfa-client/test-utils';
+import { createDialogRefMock, DialogRefMock, existsAsHtmlElement, getElementFromFixtureByType, Mock, mock, triggerEvent, useFromMock, } from '@alfa-client/test-utils';
 import { OzgcloudDialogService } from '@alfa-client/ui';
 import { VorgangWithEingangLinkRel, VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
 import { DIALOG_DATA, DialogRef } from '@angular/cdk/dialog';
@@ -41,20 +33,14 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { ButtonComponent, CloseIconComponent } from '@ods/system';
 import { MockComponent } from 'ng-mocks';
 import { EMPTY, of } from 'rxjs';
-import { BescheidService2 } from '../../../../bescheid-shared/src/lib/bescheid2.service';
 import { createBescheidResource, createBescheidStateResource } from '../../../../bescheid-shared/src/test/bescheid';
 import { createCommandErrorResource, createSuccessfullyDoneCommandResource } from '../../../../command-shared/test/command';
 import { getDataTestIdAttributeOf, getDataTestIdOf } from '../../../../tech-shared/test/data-test';
 import { singleColdCompleted } from '../../../../tech-shared/test/marbles';
 import { createKeydownKeyboardEvent } from '../../../../test-utils/src/lib/keyboard';
 import { createVorgangWithEingangResource } from '../../../../vorgang-shared/test/vorgang';
-import { BescheidWizardContainerComponent } from './bescheid-wizard-container.component';
 import { BescheidWizardComponent } from './bescheid-wizard/bescheid-wizard.component';
-import {
-  BescheidWizardCancelDialogContainerComponent,
-  CancelWizardDialogData,
-  CancelWizardDialogResult,
-} from './bescheid-wizard/cancel-dialog-container/bescheid-wizard-cancel-dialog-container.component';
+import { BescheidWizardCancelDialogContainerComponent, CancelWizardDialogData, CancelWizardDialogResult, } from './bescheid-wizard/cancel-dialog-container/bescheid-wizard-cancel-dialog-container.component';
 import { BescheidFormService } from './bescheid.formservice';
 
 describe('BescheidWizardContainerComponent', () => {
@@ -64,7 +50,7 @@ describe('BescheidWizardContainerComponent', () => {
   const bescheidWizard: string = getDataTestIdOf('bescheid-wizard');
   const closeButton: string = getDataTestIdAttributeOf('close-bescheid');
 
-  let bescheidService: Mock<BescheidService2>;
+  let bescheidService: Mock<BescheidService>;
   let ozgcloudDialogService: Mock<OzgcloudDialogService>;
   let formService: Mock<BescheidFormService>;
   let wizardDialogRef: DialogRefMock<BescheidWizardDialogResult>;
@@ -72,7 +58,7 @@ describe('BescheidWizardContainerComponent', () => {
   const vorgangWithEingangResource: VorgangWithEingangResource = createVorgangWithEingangResource();
 
   beforeEach(() => {
-    bescheidService = mock(BescheidService2);
+    bescheidService = mock(BescheidService);
     bescheidService.getBescheidCreated.mockReturnValue(EMPTY);
     ozgcloudDialogService = mock(OzgcloudDialogService);
     formService = mock(BescheidFormService);
@@ -105,7 +91,7 @@ describe('BescheidWizardContainerComponent', () => {
           useValue: { vorgangWithEingangResource },
         },
         {
-          provide: BescheidService2,
+          provide: BescheidService,
           useValue: bescheidService,
         },
         {
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard-container.component.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard-container.component.ts
index cba4185d1a3d6805f5291ad6972c11965ed40fc5..75bf0b0c07f51e508304f2b353af195b6bc97254 100644
--- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard-container.component.ts
+++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard-container.component.ts
@@ -21,18 +21,16 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { BescheidResource, BescheidWizardDialogResult, BescheidWizardStep } from '@alfa-client/bescheid-shared';
-import { CommandOrder, CommandResource, CommandService, isSuccessfulDone } from '@alfa-client/command-shared';
-import { createEmptyStateResource, isEscapeKey, isNotLoading, isNotNil, ResourceRepository, StateResource, } from '@alfa-client/tech-shared';
+import { BescheidResource, BescheidService, BescheidWizardDialogResult, BescheidWizardStep } from '@alfa-client/bescheid-shared';
+import { CommandOrder, CommandResource, isSuccessfulDone } from '@alfa-client/command-shared';
+import { createEmptyStateResource, isEscapeKey, isNotLoading, isNotNil, StateResource } from '@alfa-client/tech-shared';
 import { OzgcloudDialogService } from '@alfa-client/ui';
-import { VorgangService, VorgangWithEingangLinkRel, VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
+import { VorgangWithEingangLinkRel, VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
 import { getEmpfaenger } from '@alfa-client/vorgang-shared-ui';
 import { DIALOG_DATA, DialogRef } from '@angular/cdk/dialog';
 import { Component, inject, OnDestroy, OnInit, ViewContainerRef } from '@angular/core';
 import { hasLink } from '@ngxp/rest';
-import { BescheidResourceService, createBescheidResourceService } from 'libs/bescheid-shared/src/lib/bescheid-resource-service';
 import { filter, first, Observable, of, Subscription, switchMap } from 'rxjs';
-import { BescheidService2 } from '../../../../bescheid-shared/src/lib/bescheid2.service';
 import { BescheidWizardCancelDialogContainerComponent, CancelWizardDialogData, CancelWizardDialogResult, } from './bescheid-wizard/cancel-dialog-container/bescheid-wizard-cancel-dialog-container.component';
 import { BescheidFormService } from './bescheid.formservice';
 
@@ -43,18 +41,10 @@ export interface BescheidWizardDialogData {
 @Component({
   selector: 'alfa-bescheid-wizard-container',
   templateUrl: './bescheid-wizard-container.component.html',
-  providers: [
-    BescheidFormService,
-    BescheidService2,
-    {
-      provide: BescheidResourceService,
-      useFactory: createBescheidResourceService,
-      deps: [ResourceRepository, CommandService, VorgangService],
-    },
-  ],
+  providers: [BescheidFormService],
 })
 export class BescheidWizardContainerComponent implements OnInit, OnDestroy {
-  private readonly bescheidService = inject(BescheidService2);
+  private readonly bescheidService = inject(BescheidService);
   private readonly ozgcloudDialogService = inject(OzgcloudDialogService);
   private readonly dialogData: BescheidWizardDialogData = inject(DIALOG_DATA);
   private readonly dialogRef = inject(DialogRef<BescheidWizardDialogResult>);
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/antrag-bescheiden/abschliessen-dialog-container/bescheid-wizard-abschliessen-dialog-container.component.spec.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/antrag-bescheiden/abschliessen-dialog-container/bescheid-wizard-abschliessen-dialog-container.component.spec.ts
index df6b0e09d088b27f5601ba9b12abf43363b8a0a7..176d402990d293f01afab28575a5d1d0dce49a32 100644
--- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/antrag-bescheiden/abschliessen-dialog-container/bescheid-wizard-abschliessen-dialog-container.component.spec.ts
+++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/antrag-bescheiden/abschliessen-dialog-container/bescheid-wizard-abschliessen-dialog-container.component.spec.ts
@@ -21,7 +21,7 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { BescheidResource } from '@alfa-client/bescheid-shared';
+import { BescheidResource, BescheidService } from '@alfa-client/bescheid-shared';
 import { CommandResource } from '@alfa-client/command-shared';
 import { StateResource } from '@alfa-client/tech-shared';
 import { createDialogRefMock, DialogRefMock, getElementComponentFromFixtureByCss, mock, Mock, triggerEvent, } from '@alfa-client/test-utils';
@@ -32,7 +32,6 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { MatIcon } from '@angular/material/icon';
 import { MockComponent } from 'ng-mocks';
 import { of } from 'rxjs';
-import { BescheidService2 } from '../../../../../../../bescheid-shared/src/lib/bescheid2.service';
 import { createBescheidResource } from '../../../../../../../bescheid-shared/src/test/bescheid';
 import { createSuccessfullyDoneCommandStateResource } from '../../../../../../../command-shared/test/command';
 import { getDataTestIdOf } from '../../../../../../../tech-shared/test/data-test';
@@ -52,10 +51,10 @@ describe('BescheidWizardAbschliessenDialogContainerComponent', () => {
   const dialogData: AbschliessenDialogData = { vorgangWithEingangResource, bescheidResource };
 
   let dialogRef: DialogRefMock;
-  let bescheidService: Mock<BescheidService2>;
+  let bescheidService: Mock<BescheidService>;
 
   beforeEach(() => {
-    bescheidService = mock(BescheidService2);
+    bescheidService = mock(BescheidService);
     dialogRef = createDialogRefMock();
   });
 
@@ -76,7 +75,7 @@ describe('BescheidWizardAbschliessenDialogContainerComponent', () => {
           useValue: dialogRef,
         },
         {
-          provide: BescheidService2,
+          provide: BescheidService,
           useValue: bescheidService,
         },
       ],
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/antrag-bescheiden/abschliessen-dialog-container/bescheid-wizard-abschliessen-dialog-container.component.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/antrag-bescheiden/abschliessen-dialog-container/bescheid-wizard-abschliessen-dialog-container.component.ts
index 5a8ace4040ce03c2e7cff5f2efc3f24877d0f201..b420406bed82120b5f314a766ded532bdc413b9e 100644
--- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/antrag-bescheiden/abschliessen-dialog-container/bescheid-wizard-abschliessen-dialog-container.component.ts
+++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/antrag-bescheiden/abschliessen-dialog-container/bescheid-wizard-abschliessen-dialog-container.component.ts
@@ -21,7 +21,7 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { BescheidResource } from '@alfa-client/bescheid-shared';
+import { BescheidResource, BescheidService } from '@alfa-client/bescheid-shared';
 import { CommandResource, tapOnCommandSuccessfullyDone } from '@alfa-client/command-shared';
 import { StateResource } from '@alfa-client/tech-shared';
 import { createDialogResult } from '@alfa-client/ui';
@@ -29,7 +29,6 @@ import { VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
 import { DIALOG_DATA, DialogRef } from '@angular/cdk/dialog';
 import { Component, inject } from '@angular/core';
 import { Observable } from 'rxjs';
-import { BescheidService2 } from '../../../../../../../bescheid-shared/src/lib/bescheid2.service';
 
 export interface AbschliessenDialogData {
   vorgangWithEingangResource: VorgangWithEingangResource;
@@ -43,7 +42,7 @@ export interface AbschliessenDialogData {
 export class BescheidWizardAbschliessenDialogContainerComponent {
   private readonly dialogData: AbschliessenDialogData = inject(DIALOG_DATA);
   private readonly dialogRef = inject(DialogRef);
-  private readonly bescheidService = inject(BescheidService2);
+  private readonly bescheidService = inject(BescheidService);
 
   public abschliessen$: Observable<StateResource<CommandResource>>;
 
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/antrag-bescheiden/bescheid-wizard-antrag-bescheiden-container.component.spec.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/antrag-bescheiden/bescheid-wizard-antrag-bescheiden-container.component.spec.ts
index d3452acaabaa91d8cced04afc925138dd1d2d546..44b1340298c7853918997126eb57c715dbd6ecf7 100644
--- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/antrag-bescheiden/bescheid-wizard-antrag-bescheiden-container.component.spec.ts
+++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/antrag-bescheiden/bescheid-wizard-antrag-bescheiden-container.component.spec.ts
@@ -21,11 +21,11 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
+import { BescheidService } from '@alfa-client/bescheid-shared';
 import { existsAsHtmlElement, getElementFromFixtureByType, Mock, mock, triggerEvent, useFromMock } from '@alfa-client/test-utils';
 import { EventEmitter } from '@angular/core';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { MockComponent } from 'ng-mocks';
-import { BescheidService2 } from '../../../../../../bescheid-shared/src/lib/bescheid2.service';
 import { createBescheidResource } from '../../../../../../bescheid-shared/src/test/bescheid';
 import { getDataTestIdOf } from '../../../../../../tech-shared/test/data-test';
 import { createVorgangWithEingangResource } from '../../../../../../vorgang-shared/test/vorgang';
@@ -47,10 +47,10 @@ describe('BescheidWizardAntragBescheidenComponent', () => {
   const abschliessenButton: string = getDataTestIdOf('wizard-abschliessen-button');
   const antragBescheidenSummary: string = getDataTestIdOf('antrag-bescheiden-summary');
 
-  let bescheidService: Mock<BescheidService2>;
+  let bescheidService: Mock<BescheidService>;
 
   beforeEach(() => {
-    bescheidService = mock(BescheidService2);
+    bescheidService = mock(BescheidService);
   });
 
   beforeEach(async () => {
@@ -67,7 +67,7 @@ describe('BescheidWizardAntragBescheidenComponent', () => {
       ],
       providers: [
         {
-          provide: BescheidService2,
+          provide: BescheidService,
           useValue: bescheidService,
         },
       ],
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/antrag-bescheiden/bescheid-wizard-antrag-bescheiden-container.component.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/antrag-bescheiden/bescheid-wizard-antrag-bescheiden-container.component.ts
index 9837cbe2bca5ed1e8ff4f9674d10895c476d7faf..c7a230663a49cf616a2d6429527f2c28a23a0af6 100644
--- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/antrag-bescheiden/bescheid-wizard-antrag-bescheiden-container.component.ts
+++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/antrag-bescheiden/bescheid-wizard-antrag-bescheiden-container.component.ts
@@ -21,10 +21,9 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { BescheidResource, BescheidWizardStep } from '@alfa-client/bescheid-shared';
+import { BescheidResource, BescheidService, BescheidWizardStep } from '@alfa-client/bescheid-shared';
 import { VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
 import { Component, EventEmitter, inject, Input, Output } from '@angular/core';
-import { BescheidService2 } from '../../../../../../bescheid-shared/src/lib/bescheid2.service';
 
 @Component({
   selector: 'alfa-bescheid-wizard-antrag-bescheiden-container',
@@ -36,7 +35,7 @@ export class BescheidWizardAntragBescheidenContainerComponent {
 
   @Output() vorgangAbgeschlossen: EventEmitter<void> = new EventEmitter<void>();
 
-  private readonly bescheidService = inject(BescheidService2);
+  private readonly bescheidService = inject(BescheidService);
 
   public readonly BescheidWizardStep = BescheidWizardStep;
 
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/antrag-bescheiden/form/bescheid-wizard-antrag-bescheiden-form.component.spec.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/antrag-bescheiden/form/bescheid-wizard-antrag-bescheiden-form.component.spec.ts
index fc15a7f9282febbd25179f0b255a5781234bfb86..17cafdfc31404bd5b48a694aac2cb4886ffa039b 100644
--- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/antrag-bescheiden/form/bescheid-wizard-antrag-bescheiden-form.component.spec.ts
+++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/antrag-bescheiden/form/bescheid-wizard-antrag-bescheiden-form.component.spec.ts
@@ -21,7 +21,7 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { BescheidLinkRel } from '@alfa-client/bescheid-shared';
+import { BescheidLinkRel, BescheidService } from '@alfa-client/bescheid-shared';
 import { CommandResource } from '@alfa-client/command-shared';
 import { createEmptyStateResource, HasLinkPipe, StateResource } from '@alfa-client/tech-shared';
 import { existsAsHtmlElement, getElementFromFixtureByType, mock, notExistsAsHtmlElement, triggerEvent, useFromMock, } from '@alfa-client/test-utils';
@@ -33,7 +33,6 @@ import { ReactiveFormsModule, UntypedFormBuilder } from '@angular/forms';
 import { CloseIconComponent, RadioButtonCardComponent, StampIconComponent } from '@ods/system';
 import { MockComponent } from 'ng-mocks';
 import { EMPTY, of } from 'rxjs';
-import { BescheidService2 } from '../../../../../../../bescheid-shared/src/lib/bescheid2.service';
 import { createBescheidResource } from '../../../../../../../bescheid-shared/src/test/bescheid';
 import { createSuccessfullyDoneCommandStateResource } from '../../../../../../../command-shared/test/command';
 import { getDataTestIdOf } from '../../../../../../../tech-shared/test/data-test';
@@ -52,7 +51,7 @@ describe('BescheidWizardAntragBescheidenFormComponent', () => {
   let formService: BescheidFormService;
 
   beforeEach(async () => {
-    formService = new BescheidFormService(new UntypedFormBuilder(), useFromMock(mock(BescheidService2)));
+    formService = new BescheidFormService(new UntypedFormBuilder(), useFromMock(mock(BescheidService)));
     formService.submit = jest.fn().mockReturnValue(EMPTY);
 
     await TestBed.configureTestingModule({
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/bescheid-versenden/bescheid-wizard-bescheid-versenden-container.component.spec.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/bescheid-versenden/bescheid-wizard-bescheid-versenden-container.component.spec.ts
index abdb3be7cef699e775c5bbc324911d1ef71b7127..2c380d39800c54ee08bb2df2ccf0cbf8772454de 100644
--- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/bescheid-versenden/bescheid-wizard-bescheid-versenden-container.component.spec.ts
+++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/bescheid-versenden/bescheid-wizard-bescheid-versenden-container.component.spec.ts
@@ -1,9 +1,8 @@
-import { BescheidResource, BescheidSendBy, BescheidWizardStep, Wizard } from '@alfa-client/bescheid-shared';
+import { BescheidResource, BescheidSendBy, BescheidService, BescheidWizardStep, Wizard } from '@alfa-client/bescheid-shared';
 import { existsAsHtmlElement, getElementComponentFromFixtureByCss, mock, Mock, triggerEvent } from '@alfa-client/test-utils';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { MockComponent } from 'ng-mocks';
 import { of } from 'rxjs';
-import { BescheidService2 } from '../../../../../../bescheid-shared/src/lib/bescheid2.service';
 import { createBescheidResource, createWizard } from '../../../../../../bescheid-shared/src/test/bescheid';
 import { getDataTestIdOf } from '../../../../../../tech-shared/test/data-test';
 import { singleColdCompleted } from '../../../../../../tech-shared/test/marbles';
@@ -26,10 +25,10 @@ describe('BescheidWizardBescheidVersendenComponent', () => {
 
   const bescheidResource: BescheidResource = createBescheidResource();
 
-  let bescheidService: Mock<BescheidService2>;
+  let bescheidService: Mock<BescheidService>;
 
   beforeEach(() => {
-    bescheidService = mock(BescheidService2);
+    bescheidService = mock(BescheidService);
   });
 
   beforeEach(async () => {
@@ -42,7 +41,7 @@ describe('BescheidWizardBescheidVersendenComponent', () => {
         MockComponent(BescheidWizardSummaryComponent),
         MockComponent(BescheidWizardBescheidVersendenSummaryComponent),
       ],
-      providers: [{ provide: BescheidService2, useValue: bescheidService }],
+      providers: [{ provide: BescheidService, useValue: bescheidService }],
     }).compileComponents();
 
     createComponent();
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/bescheid-versenden/bescheid-wizard-bescheid-versenden-container.component.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/bescheid-versenden/bescheid-wizard-bescheid-versenden-container.component.ts
index 70408d0b23afb74630248f0a140e07f8f0ccf60a..d1bbf807849412342cc64563b8a77f8b84be271f 100644
--- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/bescheid-versenden/bescheid-wizard-bescheid-versenden-container.component.ts
+++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/bescheid-versenden/bescheid-wizard-bescheid-versenden-container.component.ts
@@ -1,7 +1,6 @@
-import { BescheidResource, BescheidSendBy, BescheidWizardStep, Wizard } from '@alfa-client/bescheid-shared';
+import { BescheidResource, BescheidSendBy, BescheidService, BescheidWizardStep, Wizard } from '@alfa-client/bescheid-shared';
 import { Component, inject, Input } from '@angular/core';
 import { Observable } from 'rxjs';
-import { BescheidService2 } from '../../../../../../bescheid-shared/src/lib/bescheid2.service';
 
 @Component({
   selector: 'alfa-bescheid-wizard-bescheid-versenden-container',
@@ -17,7 +16,7 @@ export class BescheidWizardBescheidVersendenContainerComponent {
     return this._bescheidResource;
   }
 
-  private readonly bescheidService: BescheidService2 = inject(BescheidService2);
+  private readonly bescheidService: BescheidService = inject(BescheidService);
 
   public readonly wizard$: Observable<Wizard> = this.bescheidService.getWizard();
 
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/bescheid-versenden/summary/senden/bescheid-wizard-bescheid-versenden-senden.component.spec.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/bescheid-versenden/summary/senden/bescheid-wizard-bescheid-versenden-senden.component.spec.ts
index 3f2dd5b69457b1b28b56291e838c633fc17b120f..f26bf0b030c3f4e2ce0e4eab50433c485302069c 100644
--- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/bescheid-versenden/summary/senden/bescheid-wizard-bescheid-versenden-senden.component.spec.ts
+++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/bescheid-versenden/summary/senden/bescheid-wizard-bescheid-versenden-senden.component.spec.ts
@@ -1,4 +1,4 @@
-import { BescheidLinkRel, BescheidWizardDialogResult } from '@alfa-client/bescheid-shared';
+import { BescheidLinkRel, BescheidService, BescheidWizardDialogResult } from '@alfa-client/bescheid-shared';
 import { BinaryFileListContainerComponent } from '@alfa-client/binary-file';
 import {
   createEmptyStateResource,
@@ -14,7 +14,6 @@ import { expect } from '@jest/globals';
 import { ButtonWithSpinnerComponent, TextareaEditorComponent, TextEditorComponent } from '@ods/component';
 import { MockComponent } from 'ng-mocks';
 import { EMPTY, of } from 'rxjs';
-import { BescheidService2 } from '../../../../../../../../bescheid-shared/src/lib/bescheid2.service';
 import { createBescheidResource, createWizard } from '../../../../../../../../bescheid-shared/src/test/bescheid';
 import { createSuccessfullyDoneCommandStateResource } from '../../../../../../../../command-shared/test/command';
 import { getDataTestIdOf } from '../../../../../../../../tech-shared/test/data-test';
@@ -31,12 +30,12 @@ describe('BescheidWizardBescheidVersendenSendenComponent', () => {
   const attachmentsTestId: string = getDataTestIdOf('bescheid-attachments');
   const empfaengerTestId: string = getDataTestIdOf('bescheid-nachricht-empfaenger');
 
-  let bescheidService: Mock<BescheidService2>;
+  let bescheidService: Mock<BescheidService>;
   let formService: BescheidFormService;
   let dialogRef: Mock<DialogRef<BescheidWizardDialogResult>>;
 
   beforeEach(() => {
-    bescheidService = mock(BescheidService2);
+    bescheidService = mock(BescheidService);
     formService = new BescheidFormService(new FormBuilder(), useFromMock(bescheidService));
     formService.submit = jest.fn();
     dialogRef = mock(DialogRef<BescheidWizardDialogResult>);
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/bescheid-wizard.component.spec.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/bescheid-wizard.component.spec.ts
index c818a3613876e7b6533d508d5714fbbfa5881330..93aeea17c15dd88b2a0cd57455c972025c297de7 100644
--- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/bescheid-wizard.component.spec.ts
+++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/bescheid-wizard.component.spec.ts
@@ -21,23 +21,9 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { BescheidResource, BescheidWizardStep } from '@alfa-client/bescheid-shared';
-import {
-  createEmptyStateResource,
-  createErrorStateResource,
-  createLoadingStateResource,
-  HasLinkPipe,
-  StateResource,
-} from '@alfa-client/tech-shared';
-import {
-  existsAsHtmlElement,
-  getElementComponentFromFixtureByCss,
-  Mock,
-  mock,
-  notExistsAsHtmlElement,
-  triggerEvent,
-  useFromMock,
-} from '@alfa-client/test-utils';
+import { BescheidResource, BescheidService, BescheidWizardStep } from '@alfa-client/bescheid-shared';
+import { createEmptyStateResource, createErrorStateResource, createLoadingStateResource, HasLinkPipe, StateResource, } from '@alfa-client/tech-shared';
+import { existsAsHtmlElement, getElementComponentFromFixtureByCss, Mock, mock, notExistsAsHtmlElement, triggerEvent, useFromMock, } from '@alfa-client/test-utils';
 import { SpinnerComponent } from '@alfa-client/ui';
 import { VorgangWithEingangLinkRel } from '@alfa-client/vorgang-shared';
 import { EventEmitter } from '@angular/core';
@@ -45,7 +31,6 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { ReactiveFormsModule, UntypedFormBuilder } from '@angular/forms';
 import { expect } from '@jest/globals';
 import { MockComponent } from 'ng-mocks';
-import { BescheidService2 } from '../../../../../bescheid-shared/src/lib/bescheid2.service';
 import { createBescheidResource, createBescheidStateResource } from '../../../../../bescheid-shared/src/test/bescheid';
 import { getDataTestIdOf } from '../../../../../tech-shared/test/data-test';
 import { createProblemDetail } from '../../../../../tech-shared/test/error';
@@ -66,11 +51,11 @@ describe('BescheidWizardComponent', () => {
   const dokumenteHochladenStep: string = getDataTestIdOf('dokumente-hochladen-step');
   const bescheidVersendenStepTestId: string = getDataTestIdOf('bescheid-versenden-step');
 
-  let bescheidService: Mock<BescheidService2>;
+  let bescheidService: Mock<BescheidService>;
   let formService: BescheidFormService;
 
   beforeEach(() => {
-    bescheidService = mock(BescheidService2);
+    bescheidService = mock(BescheidService);
     formService = new BescheidFormService(new UntypedFormBuilder(), useFromMock(bescheidService));
   });
 
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/cancel-dialog-container/bescheid-wizard-cancel-dialog-container.component.spec.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/cancel-dialog-container/bescheid-wizard-cancel-dialog-container.component.spec.ts
index 47aa453fd30472816900af6f9f3c15c74063a05d..54f6e363e26b5372102bc8be397585cae8b839f5 100644
--- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/cancel-dialog-container/bescheid-wizard-cancel-dialog-container.component.spec.ts
+++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/cancel-dialog-container/bescheid-wizard-cancel-dialog-container.component.spec.ts
@@ -21,23 +21,15 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
+import { BescheidService } from '@alfa-client/bescheid-shared';
 import { CommandResource } from '@alfa-client/command-shared';
 import { createErrorStateResource, StateResource } from '@alfa-client/tech-shared';
-import {
-  createDialogRefMock,
-  DialogRefMock,
-  existsAsHtmlElement,
-  getElementComponentFromFixtureByCss,
-  Mock,
-  mock,
-  triggerEvent,
-} from '@alfa-client/test-utils';
+import { createDialogRefMock, DialogRefMock, existsAsHtmlElement, getElementComponentFromFixtureByCss, Mock, mock, triggerEvent, } from '@alfa-client/test-utils';
 import { DIALOG_DATA, DialogRef } from '@angular/cdk/dialog';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { expect } from '@jest/globals';
 import { ButtonWithSpinnerComponent } from '@ods/component';
 import { CheckIconComponent, CloseIconComponent } from '@ods/system';
-import { BescheidService2 } from 'libs/bescheid-shared/src/lib/bescheid2.service';
 import { createBescheidResource } from 'libs/bescheid-shared/src/test/bescheid';
 import { createCommandStateResource, createSuccessfullyDoneCommandStateResource } from 'libs/command-shared/test/command';
 import { getDataTestIdAttributeOf } from 'libs/tech-shared/test/data-test';
@@ -46,10 +38,7 @@ import { singleColdCompleted } from 'libs/tech-shared/test/marbles';
 import { MockComponent } from 'ng-mocks';
 import { EMPTY, of } from 'rxjs';
 import { BescheidFormService } from '../../bescheid.formservice';
-import {
-  BescheidWizardCancelDialogContainerComponent,
-  CancelWizardDialogData,
-} from './bescheid-wizard-cancel-dialog-container.component';
+import { BescheidWizardCancelDialogContainerComponent, CancelWizardDialogData, } from './bescheid-wizard-cancel-dialog-container.component';
 
 describe('BescheidWizardCancelDialogContainerComponent', () => {
   let component: BescheidWizardCancelDialogContainerComponent;
@@ -63,13 +52,13 @@ describe('BescheidWizardCancelDialogContainerComponent', () => {
   };
 
   let formService: Mock<BescheidFormService>;
-  let bescheidService: Mock<BescheidService2>;
+  let bescheidService: Mock<BescheidService>;
   let dialogRef: DialogRefMock;
 
   beforeEach(() => {
     formService = mock(BescheidFormService);
     formService.submit = jest.fn().mockReturnValue(EMPTY);
-    bescheidService = mock(BescheidService2);
+    bescheidService = mock(BescheidService);
     bescheidService.deleteBescheid.mockReturnValue(EMPTY);
     dialogRef = createDialogRefMock();
   });
@@ -84,7 +73,7 @@ describe('BescheidWizardCancelDialogContainerComponent', () => {
       ],
       providers: [
         {
-          provide: BescheidService2,
+          provide: BescheidService,
           useValue: bescheidService,
         },
         {
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/cancel-dialog-container/bescheid-wizard-cancel-dialog-container.component.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/cancel-dialog-container/bescheid-wizard-cancel-dialog-container.component.ts
index 2b2ee2327c607f41cc889b00a62c84ff3b9560b2..e230e5d3b832b550dd2e99035e02bf44f9e4f5cf 100644
--- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/cancel-dialog-container/bescheid-wizard-cancel-dialog-container.component.ts
+++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/cancel-dialog-container/bescheid-wizard-cancel-dialog-container.component.ts
@@ -21,14 +21,13 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { BescheidResource } from '@alfa-client/bescheid-shared';
+import { BescheidResource, BescheidService } from '@alfa-client/bescheid-shared';
 import { tapOnCommandSuccessfullyDone } from '@alfa-client/command-shared';
 import { isNotNil, StateResource } from '@alfa-client/tech-shared';
 import { DIALOG_DATA, DialogRef } from '@angular/cdk/dialog';
 import { Component, inject, OnDestroy, OnInit } from '@angular/core';
 import { Resource } from '@ngxp/rest';
 import { Observable } from 'rxjs';
-import { BescheidService2 } from '../../../../../../bescheid-shared/src/lib/bescheid2.service';
 import { BescheidFormService } from '../../bescheid.formservice';
 
 export interface CancelWizardDialogData {
@@ -45,7 +44,7 @@ export interface CancelWizardDialogResult {
 export class BescheidWizardCancelDialogContainerComponent implements OnInit, OnDestroy {
   private readonly dialogData: CancelWizardDialogData = inject(DIALOG_DATA);
   private readonly dialogRef = inject(DialogRef);
-  private readonly bescheidService = inject(BescheidService2);
+  private readonly bescheidService = inject(BescheidService);
   private readonly formService = inject(BescheidFormService);
 
   public saveStateResource$: Observable<StateResource<Resource>>;
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/create-document-button-container/bescheid-wizard-create-document-button-container.component.spec.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/create-document-button-container/bescheid-wizard-create-document-button-container.component.spec.ts
index 578b614b16d24e6b9d40ed36e1a0608b04781e24..3bc3dff8884f2550f4cdd597a520aedbfde10ef2 100644
--- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/create-document-button-container/bescheid-wizard-create-document-button-container.component.spec.ts
+++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/create-document-button-container/bescheid-wizard-create-document-button-container.component.spec.ts
@@ -1,9 +1,8 @@
-import { BescheidDocument, BescheidResource } from '@alfa-client/bescheid-shared';
+import { BescheidDocument, BescheidResource, BescheidService } from '@alfa-client/bescheid-shared';
 import { existsAsHtmlElement, getElementComponentFromFixtureByCss, mock, Mock, triggerEvent } from '@alfa-client/test-utils';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { MockComponent } from 'ng-mocks';
 import { of } from 'rxjs';
-import { BescheidService2 } from '../../../../../../bescheid-shared/src/lib/bescheid2.service';
 import { createBescheidDocument, createBescheidResource } from '../../../../../../bescheid-shared/src/test/bescheid';
 import { getDataTestIdOf } from '../../../../../../tech-shared/test/data-test';
 import { singleColdCompleted } from '../../../../../../tech-shared/test/marbles';
@@ -19,10 +18,10 @@ describe('BescheidWizardCreateDocumentButtonContainerComponent', () => {
   const bescheidDocument: BescheidDocument = createBescheidDocument();
   const bescheidResource: BescheidResource = createBescheidResource();
 
-  let bescheidService: Mock<BescheidService2>;
+  let bescheidService: Mock<BescheidService>;
 
   beforeEach(() => {
-    bescheidService = mock(BescheidService2);
+    bescheidService = mock(BescheidService);
   });
 
   beforeEach(async () => {
@@ -31,7 +30,7 @@ describe('BescheidWizardCreateDocumentButtonContainerComponent', () => {
         BescheidWizardCreateDocumentButtonContainerComponent,
         MockComponent(BescheidWizardCreateDocumentButtonComponent),
       ],
-      providers: [{ provide: BescheidService2, useValue: bescheidService }],
+      providers: [{ provide: BescheidService, useValue: bescheidService }],
     }).compileComponents();
 
     createComponent();
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/create-document-button-container/bescheid-wizard-create-document-button-container.component.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/create-document-button-container/bescheid-wizard-create-document-button-container.component.ts
index 63c525d76932091bdf971c5789c843568afd8112..4d9e68343b9ab3dc71d0afe637df79b13af83687 100644
--- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/create-document-button-container/bescheid-wizard-create-document-button-container.component.ts
+++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/create-document-button-container/bescheid-wizard-create-document-button-container.component.ts
@@ -1,7 +1,6 @@
-import { BescheidDocument, BescheidResource } from '@alfa-client/bescheid-shared';
+import { BescheidDocument, BescheidResource, BescheidService } from '@alfa-client/bescheid-shared';
 import { Component, inject, Input } from '@angular/core';
 import { Observable } from 'rxjs';
-import { BescheidService2 } from '../../../../../../bescheid-shared/src/lib/bescheid2.service';
 
 @Component({
   selector: 'alfa-bescheid-wizard-create-document-button-container',
@@ -10,7 +9,7 @@ import { BescheidService2 } from '../../../../../../bescheid-shared/src/lib/besc
 export class BescheidWizardCreateDocumentButtonContainerComponent {
   @Input() bescheidResource: BescheidResource;
 
-  private readonly bescheidService = inject(BescheidService2);
+  private readonly bescheidService = inject(BescheidService);
 
   public readonly bescheidDocument$: Observable<BescheidDocument> = this.bescheidService.getBescheidDocument();
 
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/document-file-container/bescheid-wizard-document-file-container.component.spec.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/document-file-container/bescheid-wizard-document-file-container.component.spec.ts
index 9171b0143e8af45416b48d4a779d6e277ad0a5ef..0a88e197e4883b8c2186568328d0c104e0c10fcd 100644
--- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/document-file-container/bescheid-wizard-document-file-container.component.spec.ts
+++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/document-file-container/bescheid-wizard-document-file-container.component.spec.ts
@@ -1,9 +1,8 @@
-import { BescheidDocument, BescheidWizardStep } from '@alfa-client/bescheid-shared';
+import { BescheidDocument, BescheidService, BescheidWizardStep } from '@alfa-client/bescheid-shared';
 import { existsAsHtmlElement, getElementComponentFromFixtureByCss, Mock, mock, triggerEvent } from '@alfa-client/test-utils';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { MockComponent } from 'ng-mocks';
 import { of } from 'rxjs';
-import { BescheidService2 } from '../../../../../../bescheid-shared/src/lib/bescheid2.service';
 import { createBescheidDocument } from '../../../../../../bescheid-shared/src/test/bescheid';
 import { getDataTestIdOf } from '../../../../../../tech-shared/test/data-test';
 import { singleColdCompleted } from '../../../../../../tech-shared/test/marbles';
@@ -19,11 +18,11 @@ describe('BescheidWizardDocumentFileContainerComponent', () => {
 
   const bescheidDocument: BescheidDocument = createBescheidDocument();
 
-  let bescheidService: Mock<BescheidService2>;
+  let bescheidService: Mock<BescheidService>;
   let formService: Mock<BescheidFormService>;
 
   beforeEach(() => {
-    bescheidService = mock(BescheidService2);
+    bescheidService = mock(BescheidService);
     formService = mock(BescheidFormService);
   });
 
@@ -31,7 +30,7 @@ describe('BescheidWizardDocumentFileContainerComponent', () => {
     await TestBed.configureTestingModule({
       declarations: [BescheidWizardDocumentFileContainerComponent, MockComponent(BescheidWizardDocumentFileComponent)],
       providers: [
-        { provide: BescheidService2, useValue: bescheidService },
+        { provide: BescheidService, useValue: bescheidService },
         { provide: BescheidFormService, useValue: formService },
       ],
     }).compileComponents();
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/document-file-container/bescheid-wizard-document-file-container.component.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/document-file-container/bescheid-wizard-document-file-container.component.ts
index f50758a6f2914eacb0f1f0a3711e6d0eec3f5d13..cfaf1a4a8de33e7cf16ea21c8fc79a922987fda5 100644
--- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/document-file-container/bescheid-wizard-document-file-container.component.ts
+++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/document-file-container/bescheid-wizard-document-file-container.component.ts
@@ -1,7 +1,6 @@
-import { BescheidDocument, BescheidWizardStep } from '@alfa-client/bescheid-shared';
+import { BescheidDocument, BescheidService, BescheidWizardStep } from '@alfa-client/bescheid-shared';
 import { Component, inject } from '@angular/core';
 import { Observable } from 'rxjs';
-import { BescheidService2 } from '../../../../../../bescheid-shared/src/lib/bescheid2.service';
 import { BescheidFormService } from '../../bescheid.formservice';
 
 @Component({
@@ -9,7 +8,7 @@ import { BescheidFormService } from '../../bescheid.formservice';
   templateUrl: './bescheid-wizard-document-file-container.component.html',
 })
 export class BescheidWizardDocumentFileContainerComponent {
-  private readonly bescheidService = inject(BescheidService2);
+  private readonly bescheidService = inject(BescheidService);
   private readonly formService = inject(BescheidFormService);
 
   public readonly bescheidDocument$: Observable<BescheidDocument> = this.bescheidService.getBescheidDocument();
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen-container/bescheid-wizard-dokumente-hochladen-container.component.spec.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen-container/bescheid-wizard-dokumente-hochladen-container.component.spec.ts
index 26fb71e977b88813e501e3adcebe112e4077c3fb..258427f6c2c4d46ec153dde019e6f51f0cb777b6 100644
--- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen-container/bescheid-wizard-dokumente-hochladen-container.component.spec.ts
+++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen-container/bescheid-wizard-dokumente-hochladen-container.component.spec.ts
@@ -21,13 +21,12 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { BescheidDocument, BescheidResource, BescheidWizardStep } from '@alfa-client/bescheid-shared';
+import { BescheidDocument, BescheidResource, BescheidService, BescheidWizardStep } from '@alfa-client/bescheid-shared';
 import { getElementComponentFromFixtureByCss, Mock, mock, triggerEvent } from '@alfa-client/test-utils';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { expect } from '@jest/globals';
 import { MockComponent } from 'ng-mocks';
 import { of } from 'rxjs';
-import { BescheidService2 } from '../../../../../../bescheid-shared/src/lib/bescheid2.service';
 import { createBescheidDocument, createBescheidResource } from '../../../../../../bescheid-shared/src/test/bescheid';
 import { getDataTestIdOf } from '../../../../../../tech-shared/test/data-test';
 import { singleColdCompleted } from '../../../../../../tech-shared/test/marbles';
@@ -52,10 +51,10 @@ describe('BescheidWizardDokumenteHochladenComponent', () => {
   const bescheidResource: BescheidResource = createBescheidResource();
   const bescheidDocument: BescheidDocument = createBescheidDocument();
 
-  let bescheidService: Mock<BescheidService2>;
+  let bescheidService: Mock<BescheidService>;
 
   beforeEach(() => {
-    bescheidService = mock(BescheidService2);
+    bescheidService = mock(BescheidService);
   });
 
   beforeEach(async () => {
@@ -70,7 +69,7 @@ describe('BescheidWizardDokumenteHochladenComponent', () => {
         MockComponent(BescheidWizardDokumenteHochladenFormComponent),
         MockComponent(BescheidWizardStepperComponent),
       ],
-      providers: [{ provide: BescheidService2, useValue: bescheidService }],
+      providers: [{ provide: BescheidService, useValue: bescheidService }],
     }).compileComponents();
 
     createComponent();
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen-container/bescheid-wizard-dokumente-hochladen-container.component.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen-container/bescheid-wizard-dokumente-hochladen-container.component.ts
index c15d92820a7e08b122ed18f729dc344adc8f8a58..6f6f5711ad1c0996f6382f316255a2b248e8a671 100644
--- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen-container/bescheid-wizard-dokumente-hochladen-container.component.ts
+++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen-container/bescheid-wizard-dokumente-hochladen-container.component.ts
@@ -21,10 +21,9 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { BescheidDocument, BescheidResource, BescheidWizardStep } from '@alfa-client/bescheid-shared';
+import { BescheidDocument, BescheidResource, BescheidService, BescheidWizardStep } from '@alfa-client/bescheid-shared';
 import { Component, inject, Input, OnInit } from '@angular/core';
 import { Observable } from 'rxjs';
-import { BescheidService2 } from '../../../../../../bescheid-shared/src/lib/bescheid2.service';
 
 @Component({
   selector: 'alfa-bescheid-wizard-dokumente-hochladen-container',
@@ -33,7 +32,7 @@ import { BescheidService2 } from '../../../../../../bescheid-shared/src/lib/besc
 export class BescheidWizardDokumenteHochladenContainerComponent implements OnInit {
   @Input() bescheidResource: BescheidResource;
 
-  private readonly bescheidService = inject(BescheidService2);
+  private readonly bescheidService = inject(BescheidService);
 
   public readonly bescheidDocument$: Observable<BescheidDocument> = this.bescheidService.getBescheidDocument();
   public isBescheidDocumentMissing: boolean = false;
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/upload-document-button-container/bescheid-wizard-upload-document-button-container.component.spec.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/upload-document-button-container/bescheid-wizard-upload-document-button-container.component.spec.ts
index aad7d40ccedf3a798acadb6be1b76e9560b43912..c2c9cd000ce52b6755a0dc94e667cfa89975b87d 100644
--- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/upload-document-button-container/bescheid-wizard-upload-document-button-container.component.spec.ts
+++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/upload-document-button-container/bescheid-wizard-upload-document-button-container.component.spec.ts
@@ -1,9 +1,8 @@
-import { BescheidDocument, BescheidResource } from '@alfa-client/bescheid-shared';
+import { BescheidDocument, BescheidResource, BescheidService } from '@alfa-client/bescheid-shared';
 import { getElementComponentFromFixtureByCss, mock, Mock, triggerEvent } from '@alfa-client/test-utils';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { MockComponent } from 'ng-mocks';
 import { of } from 'rxjs';
-import { BescheidService2 } from '../../../../../../bescheid-shared/src/lib/bescheid2.service';
 import { createBescheidDocument, createBescheidResource } from '../../../../../../bescheid-shared/src/test/bescheid';
 import { getDataTestIdOf } from '../../../../../../tech-shared/test/data-test';
 import { createFile } from '../../../../../../tech-shared/test/file';
@@ -19,10 +18,10 @@ describe('BescheidWizardDokumentHochladenContainerButtonComponent', () => {
 
   const bescheidDocument: BescheidDocument = createBescheidDocument();
 
-  let bescheidService: Mock<BescheidService2>;
+  let bescheidService: Mock<BescheidService>;
 
   beforeEach(() => {
-    bescheidService = mock(BescheidService2);
+    bescheidService = mock(BescheidService);
   });
 
   beforeEach(async () => {
@@ -31,7 +30,7 @@ describe('BescheidWizardDokumentHochladenContainerButtonComponent', () => {
         BescheidWizardUploadDocumentButtonContainerComponent,
         MockComponent(BescheidWizardUploadDocumentButtonComponent),
       ],
-      providers: [{ provide: BescheidService2, useValue: bescheidService }],
+      providers: [{ provide: BescheidService, useValue: bescheidService }],
     }).compileComponents();
 
     createComponent();
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/upload-document-button-container/bescheid-wizard-upload-document-button-container.component.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/upload-document-button-container/bescheid-wizard-upload-document-button-container.component.ts
index a874617f496f42ccb8492a8fd116ae29d2384d36..a20952de3f529cca7bfe2dcc1bbb5328b773c793 100644
--- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/upload-document-button-container/bescheid-wizard-upload-document-button-container.component.ts
+++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/upload-document-button-container/bescheid-wizard-upload-document-button-container.component.ts
@@ -1,7 +1,6 @@
-import { BescheidDocument, BescheidResource } from '@alfa-client/bescheid-shared';
+import { BescheidDocument, BescheidResource, BescheidService } from '@alfa-client/bescheid-shared';
 import { Component, inject, Input } from '@angular/core';
 import { Observable } from 'rxjs';
-import { BescheidService2 } from '../../../../../../bescheid-shared/src/lib/bescheid2.service';
 
 @Component({
   selector: 'alfa-bescheid-wizard-upload-document-button-container',
@@ -10,7 +9,7 @@ import { BescheidService2 } from '../../../../../../bescheid-shared/src/lib/besc
 export class BescheidWizardUploadDocumentButtonContainerComponent {
   @Input() bescheidResource: BescheidResource;
 
-  private readonly bescheidService = inject(BescheidService2);
+  private readonly bescheidService = inject(BescheidService);
 
   public readonly bescheidDocument$: Observable<BescheidDocument> = this.bescheidService.getBescheidDocument();
 
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/upload-document-button-container/upload-document-button/bescheid-wizard-upload-document-button.component.spec.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/upload-document-button-container/upload-document-button/bescheid-wizard-upload-document-button.component.spec.ts
index 66689e97b55fe62c4176df10614f23737020c5ba..083c98f7eed6d4c044c5069d477adce953fd8722 100644
--- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/upload-document-button-container/upload-document-button/bescheid-wizard-upload-document-button.component.spec.ts
+++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/upload-document-button-container/upload-document-button/bescheid-wizard-upload-document-button.component.spec.ts
@@ -1,4 +1,4 @@
-import { BescheidDocument, BescheidLinkRel, createEmptyUploadInProgress } from '@alfa-client/bescheid-shared';
+import { BescheidDocument, BescheidLinkRel, BescheidService, createEmptyUploadInProgress } from '@alfa-client/bescheid-shared';
 import { HasLinkPipe } from '@alfa-client/tech-shared';
 import {
   existsAsHtmlElement,
@@ -12,7 +12,6 @@ import { ReactiveFormsModule, UntypedFormBuilder } from '@angular/forms';
 import { SingleFileUploadEditorComponent } from '@ods/component';
 import { BescheidUploadIconComponent, SpinnerIconComponent } from '@ods/system';
 import { MockComponent } from 'ng-mocks';
-import { BescheidService2 } from '../../../../../../../bescheid-shared/src/lib/bescheid2.service';
 import {
   createBescheidDocument,
   createBescheidResource,
@@ -34,7 +33,7 @@ describe('BescheidWizardDokumentHochladenButtonComponent', () => {
   let formService: BescheidFormService;
 
   beforeEach(() => {
-    formService = new BescheidFormService(new UntypedFormBuilder(), useFromMock(mock(BescheidService2)));
+    formService = new BescheidFormService(new UntypedFormBuilder(), useFromMock(mock(BescheidService)));
   });
 
   beforeEach(async () => {
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid.formservice.spec.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid.formservice.spec.ts
index 86c5f0caee0f27416b51343699e465ec2eb4ef47..2197d0fc501a39c9c0569732ba606df100d60f9d 100644
--- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid.formservice.spec.ts
+++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid.formservice.spec.ts
@@ -21,7 +21,15 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { Bescheid, BescheidLinkRel, BescheidResource, BescheidSendBy, BescheidWizardStep, Wizard, } from '@alfa-client/bescheid-shared';
+import {
+  Bescheid,
+  BescheidLinkRel,
+  BescheidResource,
+  BescheidSendBy,
+  BescheidService,
+  BescheidWizardStep,
+  Wizard,
+} from '@alfa-client/bescheid-shared';
 import { CommandResource } from '@alfa-client/command-shared';
 import { createErrorStateResource, createLoadingStateResource, formatForDatabase, StateResource } from '@alfa-client/tech-shared';
 import { Mock, mock, useFromMock } from '@alfa-client/test-utils';
@@ -33,7 +41,6 @@ import { faker } from '@faker-js/faker';
 import { expect } from '@jest/globals';
 import { ResourceUri } from '@ngxp/rest';
 import { EMPTY, Observable, of } from 'rxjs';
-import { BescheidService2 } from '../../../../bescheid-shared/src/lib/bescheid2.service';
 import { createBescheid, createBescheidResource, createWizard } from '../../../../bescheid-shared/src/test/bescheid';
 import { createSuccessfullyDoneCommandStateResource } from '../../../../command-shared/test/command';
 import { createProblemDetail } from '../../../../tech-shared/test/error';
@@ -45,13 +52,13 @@ registerLocaleData(localeDe);
 
 describe('BescheidFormService', () => {
   let service: BescheidFormService;
-  let bescheidService: Mock<BescheidService2>;
+  let bescheidService: Mock<BescheidService>;
   const now: Date = new Date();
   Date.now = jest.fn().mockReturnValue(now);
   const vorgangWithEingangResource: VorgangWithEingangResource = createVorgangWithEingangResource();
 
   beforeEach(() => {
-    bescheidService = mock(BescheidService2);
+    bescheidService = mock(BescheidService);
     service = new BescheidFormService(new UntypedFormBuilder(), useFromMock(bescheidService));
     service.setVorgangWithEingangResource(vorgangWithEingangResource);
   });
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid.formservice.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid.formservice.ts
index eb96bb9d90af5f6729a3f251ea01bc2e91c58eb7..bdcd436ea2fe58713c255e8a953101205e6b9b90 100644
--- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid.formservice.ts
+++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid.formservice.ts
@@ -21,7 +21,7 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { Bescheid, BescheidLinkRel, BescheidResource, BescheidSendBy, BescheidWizardStep, Wizard, } from '@alfa-client/bescheid-shared';
+import { Bescheid, BescheidLinkRel, BescheidResource, BescheidSendBy, BescheidService, BescheidWizardStep, Wizard, } from '@alfa-client/bescheid-shared';
 import { CommandResource, switchMapCommandSuccessfullyDone } from '@alfa-client/command-shared';
 import { AbstractFormService, convertToBoolean, formatForDatabase, isNotNil, StateResource } from '@alfa-client/tech-shared';
 import { VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
@@ -30,7 +30,6 @@ import { FormControl, UntypedFormArray, UntypedFormBuilder, UntypedFormControl,
 import { getUrl, hasLink, ResourceUri } from '@ngxp/rest';
 import { isNil } from 'lodash-es';
 import { first, Observable, startWith, switchMap } from 'rxjs';
-import { BescheidService2 } from '../../../../bescheid-shared/src/lib/bescheid2.service';
 
 @Injectable()
 export class BescheidFormService extends AbstractFormService<CommandResource> {
@@ -49,7 +48,7 @@ export class BescheidFormService extends AbstractFormService<CommandResource> {
 
   constructor(
     formBuilder: UntypedFormBuilder,
-    private readonly bescheidService: BescheidService2,
+    private readonly bescheidService: BescheidService,
   ) {
     super(formBuilder);
   }
diff --git a/alfa-client/libs/bescheid/src/lib/bescheid.module.ts b/alfa-client/libs/bescheid/src/lib/bescheid.module.ts
index f098c06d4ec7b163b55a8bad5f60c7682521866c..bff2453ae3266fe805b85177073edc854782757c 100644
--- a/alfa-client/libs/bescheid/src/lib/bescheid.module.ts
+++ b/alfa-client/libs/bescheid/src/lib/bescheid.module.ts
@@ -28,8 +28,6 @@ import { ConvertForDataTestPipe, ConvertProblemDetailToErrorMessagesPipe, GetUrl
 import { CommonModule } from '@angular/common';
 import { NgModule } from '@angular/core';
 import { ButtonWithSpinnerComponent, FileUploadEditorComponent, SingleFileUploadEditorComponent, TextareaEditorComponent, TextEditorComponent, } from '@ods/component';
-import { BescheidInVorgangContainerComponent } from './bescheid-in-vorgang-container/bescheid-in-vorgang-container.component';
-import { BescheidInVorgangComponent } from './bescheid-in-vorgang-container/bescheid-in-vorgang/bescheid-in-vorgang.component';
 import { BescheidListInVorgangContainerComponent } from './bescheid-list-in-vorgang-container/bescheid-list-in-vorgang-container.component';
 import { BescheidListInVorgangComponent } from './bescheid-list-in-vorgang-container/bescheid-list-in-vorgang/bescheid-list-in-vorgang.component';
 import { DocumentInBescheidContainerComponent } from './bescheid-list-in-vorgang-container/bescheid-list-in-vorgang/document-in-bescheid-container/document-in-bescheid-container.component';
@@ -114,8 +112,6 @@ import { BescheidWizardWeiterButtonComponent } from './bescheid-wizard-container
     MultiFileUploadEditorComponent,
   ],
   declarations: [
-    BescheidInVorgangContainerComponent,
-    BescheidInVorgangComponent,
     BescheidListInVorgangContainerComponent,
     BescheidListInVorgangComponent,
     DocumentInBescheidContainerComponent,
@@ -152,10 +148,6 @@ import { BescheidWizardWeiterButtonComponent } from './bescheid-wizard-container
     BescheidWizardBescheidVersendenSpeichernComponent,
     StepContentLayoutComponent,
   ],
-  exports: [
-    BescheidInVorgangContainerComponent,
-    BescheidListInVorgangContainerComponent,
-    BeschiedenDateInVorgangContainerComponent,
-  ],
+  exports: [BescheidListInVorgangContainerComponent, BeschiedenDateInVorgangContainerComponent],
 })
 export class BescheidModule {}
diff --git a/alfa-client/libs/bescheid/src/lib/beschieden-date-in-vorgang-container/beschieden-date-container/beschieden-date-container.component.spec.ts b/alfa-client/libs/bescheid/src/lib/beschieden-date-in-vorgang-container/beschieden-date-container/beschieden-date-container.component.spec.ts
index 94e4e5de89a58a43eaacae49d8473f9e979afb7b..e70aa9d868a76481094ebd59714e262e0356a98d 100644
--- a/alfa-client/libs/bescheid/src/lib/beschieden-date-in-vorgang-container/beschieden-date-container/beschieden-date-container.component.spec.ts
+++ b/alfa-client/libs/bescheid/src/lib/beschieden-date-in-vorgang-container/beschieden-date-container/beschieden-date-container.component.spec.ts
@@ -21,13 +21,13 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { BescheidService } from '@alfa-client/bescheid-shared';
-import { Mock, existsAsHtmlElement, mock, notExistsAsHtmlElement } from '@alfa-client/test-utils';
+import { existsAsHtmlElement, Mock, mock, notExistsAsHtmlElement } from '@alfa-client/test-utils';
 import { registerLocaleData } from '@angular/common';
 import localeDe from '@angular/common/locales/de';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { MockComponent } from 'ng-mocks';
 
+import { BescheidService } from '@alfa-client/bescheid-shared';
 import { CloseIconComponent, StampIconComponent } from '@ods/system';
 import { createBescheidResource } from 'libs/bescheid-shared/src/test/bescheid';
 import { FormatFullDatePipe } from 'libs/tech-shared/src/lib/pipe/format-full-date.pipe';
diff --git a/alfa-client/libs/bescheid/src/lib/beschieden-date-in-vorgang-container/beschieden-date-in-vorgang-container.component.spec.ts b/alfa-client/libs/bescheid/src/lib/beschieden-date-in-vorgang-container/beschieden-date-in-vorgang-container.component.spec.ts
index c2ace7dc8dfdb9b91b374315dcd557b38962c0e9..d7b59d493cc09da7afa7a84f1decfc6fa5ba1a86 100644
--- a/alfa-client/libs/bescheid/src/lib/beschieden-date-in-vorgang-container/beschieden-date-in-vorgang-container.component.spec.ts
+++ b/alfa-client/libs/bescheid/src/lib/beschieden-date-in-vorgang-container/beschieden-date-in-vorgang-container.component.spec.ts
@@ -22,7 +22,7 @@
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
 import { BescheidService } from '@alfa-client/bescheid-shared';
-import { Mock, existsAsHtmlElement, mock, notExistsAsHtmlElement } from '@alfa-client/test-utils';
+import { existsAsHtmlElement, Mock, mock, notExistsAsHtmlElement } from '@alfa-client/test-utils';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { getDataTestIdOf } from 'libs/tech-shared/test/data-test';
 import { MockComponent } from 'ng-mocks';
@@ -40,10 +40,7 @@ describe('BeschiedenDateInVorgangContainerComponent', () => {
 
   beforeEach(async () => {
     await TestBed.configureTestingModule({
-      declarations: [
-        BeschiedenDateInVorgangContainerComponent,
-        MockComponent(BeschiedenDateContainerComponent),
-      ],
+      declarations: [BeschiedenDateInVorgangContainerComponent, MockComponent(BeschiedenDateContainerComponent)],
       providers: [
         {
           provide: BescheidService,
diff --git a/alfa-client/libs/binary-file/src/lib/download-archive-file-button-container/download-archive-file-button-container.component.html b/alfa-client/libs/binary-file/src/lib/download-archive-file-button-container/download-archive-file-button-container.component.html
index b4f57dff63600c9090de98d2646272bad58e06f4..9434cdd4a3edbaa2d3adb37bc41b54d585dc1b81 100644
--- a/alfa-client/libs/binary-file/src/lib/download-archive-file-button-container/download-archive-file-button-container.component.html
+++ b/alfa-client/libs/binary-file/src/lib/download-archive-file-button-container/download-archive-file-button-container.component.html
@@ -24,6 +24,7 @@
 
 -->
 <ods-download-button
+  dataTestId="download-archive-file-button"
   [stateResource]="downloadArchiveInProgress$ | async"
   data-test-class="download-archive"
   (click)="downloadArchive()"
diff --git a/alfa-client/libs/binary-file/src/lib/multi-file-upload-editor/multi-file-upload-editor.component.html b/alfa-client/libs/binary-file/src/lib/multi-file-upload-editor/multi-file-upload-editor.component.html
index 4024dc2de95e58d010447f113834a2b1b0387252..538932cf346eea42688fc28259a330b1d18fb552 100644
--- a/alfa-client/libs/binary-file/src/lib/multi-file-upload-editor/multi-file-upload-editor.component.html
+++ b/alfa-client/libs/binary-file/src/lib/multi-file-upload-editor/multi-file-upload-editor.component.html
@@ -6,6 +6,7 @@
   [isLoading]="isUploadInProgress$ | async"
   [variant]="uploadButtonVariant"
   data-test-id="binary-file-upload"
+  dataTestId="multi-file-upload-button"
 >
   <ods-spinner-icon spinner size="medium" />
   <ods-attachment-icon icon size="medium" />
diff --git a/alfa-client/libs/binary-file/src/lib/vertical-binary-file-list/vertical-binary-file-list.component.html b/alfa-client/libs/binary-file/src/lib/vertical-binary-file-list/vertical-binary-file-list.component.html
index b8b8d9e4c1d3addfff29d35af5e786923e194454..2649c1cdb731e0b5997df29d904241f569cf544d 100644
--- a/alfa-client/libs/binary-file/src/lib/vertical-binary-file-list/vertical-binary-file-list.component.html
+++ b/alfa-client/libs/binary-file/src/lib/vertical-binary-file-list/vertical-binary-file-list.component.html
@@ -23,28 +23,18 @@
     unter der Lizenz sind dem Lizenztext zu entnehmen.
 
 -->
-<ozgcloud-spinner
-  *ngIf="binaryFileListStateResource.resource"
-  [stateResource]="binaryFileListStateResource"
->
+<ozgcloud-spinner *ngIf="binaryFileListStateResource.resource" [stateResource]="binaryFileListStateResource">
   <ods-attachment-wrapper data-test-id="file-list">
-    <ods-attachment-header
-      [title]="title"
-      *ngIf="title || archiveDownloadUri"
-      data-test-id="file-list-header"
-    >
+    <ods-attachment-header [title]="title" *ngIf="title || archiveDownloadUri" data-test-id="file-list-header">
       <alfa-download-archive-file-button-container
         *ngIf="archiveDownloadUri"
-        data-test-class="download-archive-file-button"
+        data-test-id="download-archive-file-button-container"
         [downloadUri]="archiveDownloadUri"
         action-buttons
       ></alfa-download-archive-file-button-container
     ></ods-attachment-header>
     <ng-container
-      *ngFor="
-        let binaryFileResource of binaryFileListStateResource.resource
-          | toEmbeddedResources: fileListRel.FILE_LIST
-      "
+      *ngFor="let binaryFileResource of binaryFileListStateResource.resource | toEmbeddedResources: fileListRel.FILE_LIST"
     >
       <alfa-binary-file2-container
         [file]="binaryFileResource"
diff --git a/alfa-client/libs/binary-file/src/lib/vertical-binary-file-list/vertical-binary-file-list.component.spec.ts b/alfa-client/libs/binary-file/src/lib/vertical-binary-file-list/vertical-binary-file-list.component.spec.ts
index 93be7c71dab2c1f665423770e2c877a73e12c869..500c35cf858960e3a27674d2bf53ca9999555ca5 100644
--- a/alfa-client/libs/binary-file/src/lib/vertical-binary-file-list/vertical-binary-file-list.component.spec.ts
+++ b/alfa-client/libs/binary-file/src/lib/vertical-binary-file-list/vertical-binary-file-list.component.spec.ts
@@ -23,21 +23,14 @@
  */
 import { BinaryFileResource } from '@alfa-client/binary-file-shared';
 import { ToEmbeddedResourcesPipe, createStateResource } from '@alfa-client/tech-shared';
-import {
-  existsAsHtmlElement,
-  getMockComponent,
-  notExistsAsHtmlElement,
-} from '@alfa-client/test-utils';
+import { existsAsHtmlElement, getMockComponent, notExistsAsHtmlElement } from '@alfa-client/test-utils';
 import { SpinnerComponent } from '@alfa-client/ui';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { faker } from '@faker-js/faker';
 import { ResourceUri } from '@ngxp/rest';
 import { AttachmentHeaderComponent, AttachmentWrapperComponent } from '@ods/system';
-import {
-  createBinaryFileListResource,
-  createBinaryFileResource,
-} from 'libs/binary-file-shared/test/binary-file';
-import { getDataTestClassOf, getDataTestIdOf } from 'libs/tech-shared/test/data-test';
+import { createBinaryFileListResource, createBinaryFileResource } from 'libs/binary-file-shared/test/binary-file';
+import { getDataTestIdOf } from 'libs/tech-shared/test/data-test';
 import { MockComponent } from 'ng-mocks';
 import { BinaryFile2ContainerComponent } from '../binary-file2-container/binary-file2-container.component';
 import { DownloadArchiveFileButtonContainerComponent } from '../download-archive-file-button-container/download-archive-file-button-container.component';
@@ -47,7 +40,7 @@ describe('VerticalBinaryFileListComponent', () => {
   let component: VerticalBinaryFileListComponent;
   let fixture: ComponentFixture<VerticalBinaryFileListComponent>;
 
-  const downloadArchiveFileButton: string = getDataTestClassOf('download-archive-file-button');
+  const downloadArchiveFileButton: string = getDataTestIdOf('download-archive-file-button-container');
   const fileListHeader: string = getDataTestIdOf('file-list-header');
 
   const binaryFile: BinaryFileResource = createBinaryFileResource();
@@ -69,9 +62,7 @@ describe('VerticalBinaryFileListComponent', () => {
   beforeEach(() => {
     fixture = TestBed.createComponent(VerticalBinaryFileListComponent);
     component = fixture.componentInstance;
-    component.binaryFileListStateResource = createStateResource(
-      createBinaryFileListResource([binaryFile]),
-    );
+    component.binaryFileListStateResource = createStateResource(createBinaryFileListResource([binaryFile]));
     fixture.detectChanges();
   });
 
@@ -82,28 +73,19 @@ describe('VerticalBinaryFileListComponent', () => {
   describe('binary file component', () => {
     describe('should be called with', () => {
       it('file', () => {
-        const comp: BinaryFile2ContainerComponent = getMockComponent(
-          fixture,
-          BinaryFile2ContainerComponent,
-        );
+        const comp: BinaryFile2ContainerComponent = getMockComponent(fixture, BinaryFile2ContainerComponent);
 
         expect(comp.file).toBe(binaryFile);
       });
 
       it('deletable', () => {
-        const comp: BinaryFile2ContainerComponent = getMockComponent(
-          fixture,
-          BinaryFile2ContainerComponent,
-        );
+        const comp: BinaryFile2ContainerComponent = getMockComponent(fixture, BinaryFile2ContainerComponent);
 
         expect(comp.deletable).toBe(component.deletable);
       });
 
       it('downloadFileNamePrefix', () => {
-        const comp: BinaryFile2ContainerComponent = getMockComponent(
-          fixture,
-          BinaryFile2ContainerComponent,
-        );
+        const comp: BinaryFile2ContainerComponent = getMockComponent(fixture, BinaryFile2ContainerComponent);
 
         expect(comp.downloadFileNamePrefix).toBe(component.downloadFileNamePrefix);
       });
diff --git a/alfa-client/libs/design-component/src/lib/download-button/download-button.component.ts b/alfa-client/libs/design-component/src/lib/download-button/download-button.component.ts
index 7c479ec1713ce6efca5777e04880575c623ba23d..14473d08c588ba1a2ee9d63a240cb30ca451d48b 100644
--- a/alfa-client/libs/design-component/src/lib/download-button/download-button.component.ts
+++ b/alfa-client/libs/design-component/src/lib/download-button/download-button.component.ts
@@ -46,7 +46,7 @@ type IconVariants = VariantProps<typeof iconVariants>;
   </ods-button>`,
 })
 export class DownloadButtonComponent {
-  @Input() dataTestId: string = '';
+  @Input({ required: true }) dataTestId: string;
   @Input() size: IconVariants['size'] = 'small';
   @Input() set stateResource(resource: StateResource<CommandResource>) {
     this.isLoading = resource.loading || resource.reload;
diff --git a/alfa-client/libs/design-component/src/lib/form/checkbox-editor/checkbox-editor.component.spec.ts b/alfa-client/libs/design-component/src/lib/form/checkbox-editor/checkbox-editor.component.spec.ts
index e5dd90b745edd9549abd452e66b8b566ce118e01..cada7efb7a5dc25e643c2854438cd39f626f70a9 100644
--- a/alfa-client/libs/design-component/src/lib/form/checkbox-editor/checkbox-editor.component.spec.ts
+++ b/alfa-client/libs/design-component/src/lib/form/checkbox-editor/checkbox-editor.component.spec.ts
@@ -56,7 +56,7 @@ describe('CheckboxEditorComponent', () => {
     describe('hasError', () => {
       it('should return true', () => {
         component.fieldControl.setErrors({ 1: createInvalidParam() });
-
+        component._updateInvalidParams();
         const result: boolean = component.hasError;
 
         expect(result).toBe(true);
@@ -76,6 +76,7 @@ describe('CheckboxEditorComponent', () => {
     describe('error message', () => {
       it('should show', () => {
         component.fieldControl.setErrors({ 1: createInvalidParam() });
+        component._updateInvalidParams();
         fixture.detectChanges();
 
         const element: HTMLElement = getElementFromFixture(fixture, errorMessageId);
diff --git a/alfa-client/libs/design-component/src/lib/form/file-upload-editor/file-upload-editor.component.html b/alfa-client/libs/design-component/src/lib/form/file-upload-editor/file-upload-editor.component.html
index ff08ce18e4ad8cc6037b84833bd941f375a6da0f..e3807c40af21c86b0026c201ed9cb12525aa263b 100644
--- a/alfa-client/libs/design-component/src/lib/form/file-upload-editor/file-upload-editor.component.html
+++ b/alfa-client/libs/design-component/src/lib/form/file-upload-editor/file-upload-editor.component.html
@@ -35,6 +35,7 @@
   [attr.data-test-id]="(label | convertForDataTest) + '-file-upload-button'"
   [isLoading]="uploadInProgress.loading"
   class="relative w-full max-w-72"
+  dataTestId="file-upload-editor"
 >
   <ods-spinner-icon spinner size="medium" />
   <ods-attachment-icon icon size="medium" />
diff --git a/alfa-client/libs/design-component/src/lib/form/formcontrol-editor.abstract.component.ts b/alfa-client/libs/design-component/src/lib/form/formcontrol-editor.abstract.component.ts
index 1227c464e93ac1d30efb35880ef6dc872bf280e3..0e77b51c101f31ac094b7c59f6fbae9834f76b9a 100644
--- a/alfa-client/libs/design-component/src/lib/form/formcontrol-editor.abstract.component.ts
+++ b/alfa-client/libs/design-component/src/lib/form/formcontrol-editor.abstract.component.ts
@@ -33,6 +33,7 @@ export abstract class FormControlEditorAbstractComponent implements ControlValue
   readonly fieldControl: UntypedFormControl = new UntypedFormControl();
   public onChange = (text: string | Date) => undefined;
   public onTouched = () => undefined;
+  public invalidParams: InvalidParam[] = [];
 
   private changesSubscr: Subscription;
   private statusSubscr: Subscription;
@@ -81,12 +82,16 @@ export abstract class FormControlEditorAbstractComponent implements ControlValue
   setErrors(): void {
     if (this.control) {
       this.fieldControl.setErrors(this.control.errors);
-      if (this.control.invalid) this.fieldControl.markAsTouched();
+      if (this.control.invalid) {
+        this._updateInvalidParams();
+        this.fieldControl.markAsTouched();
+      }
     }
   }
 
-  get invalidParams(): InvalidParam[] {
-    return this.fieldControl.errors ?
+  _updateInvalidParams(): void {
+    this.invalidParams =
+      this.fieldControl.errors ?
         Object.keys(this.fieldControl.errors).map((key) => <InvalidParam>this.fieldControl.errors[key])
       : [];
   }
diff --git a/alfa-client/libs/design-component/src/lib/form/single-file-upload-editor/single-file-upload-editor.component.html b/alfa-client/libs/design-component/src/lib/form/single-file-upload-editor/single-file-upload-editor.component.html
index 837b069ad149e2e7e2eb08305e54e8ab74df16f5..409101e9b6320310d915e0364f8da49bf82a7fda 100644
--- a/alfa-client/libs/design-component/src/lib/form/single-file-upload-editor/single-file-upload-editor.component.html
+++ b/alfa-client/libs/design-component/src/lib/form/single-file-upload-editor/single-file-upload-editor.component.html
@@ -29,6 +29,7 @@
   [isLoading]="uploadInProgress"
   [accept]="accept"
   [attr.data-test-id]="(label | convertForDataTest) + '-single-file-upload-button'"
+  dataTestId="single-file-upload-button"
 >
   <ng-content icon select="[icon]"></ng-content>
   <ng-content text select="[text]"></ng-content>
diff --git a/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.html b/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.html
index b65b88d5b02c74982b872549c6d87aeccdf1644b..2e4573ac9c648f820f392f51dc8e96c237f74fb5 100644
--- a/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.html
+++ b/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.html
@@ -32,7 +32,7 @@
   (click)="resetInput()"
   [disabled]="isLoading"
   [multiple]="multi"
-  [attr.data-test-id]="(id | convertForDataTest) + '-file-upload-input'"
+  [attr.data-test-id]="dataTestId"
 />
 <label [for]="id" [ngClass]="uploadButtonVariants({ variant })" role="button">
   @if (isLoading) {
diff --git a/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.spec.ts b/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.spec.ts
index 54b7d3b7dde522ce018e0efae8b4210f6e2e2cff..bc63bfe1e214deec130fcd1f487045d14a68ad79 100644
--- a/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.spec.ts
+++ b/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.spec.ts
@@ -21,7 +21,6 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { ConvertForDataTestPipe } from '@alfa-client/tech-shared';
 import { getElementFromFixture } from '@alfa-client/test-utils';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { faker } from '@faker-js/faker';
@@ -34,16 +33,18 @@ describe('FileUploadButtonComponent', () => {
   let fixture: ComponentFixture<FileUploadButtonComponent>;
 
   const labelText: string = faker.word.noun();
-  const inputTestClass: string = getDataTestIdOf(labelText + '-file-upload-input');
+  const dataTestId: string = 'dummyDataTestId';
+  const input: string = getDataTestIdOf(dataTestId);
 
   beforeEach(async () => {
     await TestBed.configureTestingModule({
-      imports: [FileUploadButtonComponent, ConvertForDataTestPipe],
+      imports: [FileUploadButtonComponent],
     }).compileComponents();
 
     fixture = TestBed.createComponent(FileUploadButtonComponent);
     component = fixture.componentInstance;
     component.id = labelText;
+    component.dataTestId = dataTestId;
     fixture.detectChanges();
   });
 
@@ -54,7 +55,7 @@ describe('FileUploadButtonComponent', () => {
   describe('click at file input', () => {
     it('should call resetInput()', () => {
       component.resetInput = jest.fn();
-      const fileInput = getElementFromFixture(fixture, inputTestClass);
+      const fileInput = getElementFromFixture(fixture, input);
 
       fileInput.click();
       fixture.detectChanges();
@@ -68,7 +69,7 @@ describe('FileUploadButtonComponent', () => {
       component.multi = true;
       fixture.detectChanges();
 
-      const inputElement: HTMLInputElement = getElementFromFixture(fixture, inputTestClass);
+      const inputElement: HTMLInputElement = getElementFromFixture(fixture, input);
 
       expect(inputElement.multiple).toEqual(component.multi);
     });
diff --git a/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.ts b/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.ts
index b5048be11b1b7e67eaf8c077e3d4cd0caab66388..9f06d3864e0c7767b368509d49449e68d18ac0a0 100644
--- a/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.ts
+++ b/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.ts
@@ -59,6 +59,7 @@ export class FileUploadButtonComponent {
   @Input() accept: string = '*/*';
   @Input() multi: boolean = false;
   @Input() variant: UploadButtonVariants['variant'];
+  @Input({ required: true }) dataTestId: string;
 
   @ViewChild('inputElement') inputElement: ElementRef = new ElementRef({});
 
diff --git a/alfa-client/libs/design-system/src/lib/list/list-item/list-item.component.spec.ts b/alfa-client/libs/design-system/src/lib/list/list-item/list-item.component.spec.ts
index 7bfdff811e56e7986b589f06cad84a596b4ddf59..fff8eddf2051dbd1cbf53c80e1f5c733cae7e42a 100644
--- a/alfa-client/libs/design-system/src/lib/list/list-item/list-item.component.spec.ts
+++ b/alfa-client/libs/design-system/src/lib/list/list-item/list-item.component.spec.ts
@@ -24,7 +24,7 @@
 import { getElementFromFixture } from '@alfa-client/test-utils';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { provideRouter } from '@angular/router';
-import { faker } from '@faker-js/faker';
+import { faker } from '@faker-js/faker/.';
 import { getDataTestClassOf } from 'libs/tech-shared/test/data-test';
 import { ListItemComponent } from './list-item.component';
 
@@ -32,6 +32,8 @@ describe('ListItemComponent', () => {
   let component: ListItemComponent;
   let fixture: ComponentFixture<ListItemComponent>;
 
+  const link: string = getDataTestClassOf('list-item-link');
+
   beforeEach(async () => {
     await TestBed.configureTestingModule({
       imports: [ListItemComponent],
@@ -50,13 +52,12 @@ describe('ListItemComponent', () => {
   describe('input', () => {
     describe('routerLink', () => {
       it('should set href attribute', () => {
-        component.path = encodeURI(faker.system.filePath());
-        const resultingLink: string = 'http://localhost' + component.path;
-        const linkElement: HTMLLinkElement = getElementFromFixture(fixture, getDataTestClassOf('list-item-link'));
+        component.path = encodeURIComponent(faker.system.filePath());
 
         fixture.detectChanges();
 
-        expect(linkElement.href).toBe(resultingLink);
+        const linkElement: HTMLLinkElement = getElementFromFixture(fixture, link);
+        expect(decodeURIComponent(linkElement.href)).toBe(`http://localhost/${component.path}`);
       });
     });
   });
diff --git a/alfa-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-item-in-vorgang/kommentar-list-item-in-vorgang.component.html b/alfa-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-item-in-vorgang/kommentar-list-item-in-vorgang.component.html
index 78ac673c8e3c3a2b871f8f0af621b8bf5b2d09e3..2bace6cd981024e6e589d527c6af06a0a1c572a1 100644
--- a/alfa-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-item-in-vorgang/kommentar-list-item-in-vorgang.component.html
+++ b/alfa-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-item-in-vorgang/kommentar-list-item-in-vorgang.component.html
@@ -32,7 +32,7 @@
         [kommentar]="kommentar"
         data-test-class="kommentar-created-by"
       ></alfa-user-profile-in-kommentar-container>
-      <span data-test-id="kommentar-created-at" class="date text-sm">{{
+      <span data-test-class="kommentar-created-at" class="date text-sm">{{
         kommentar.createdAt | formatDateWithTimePipe: false
       }}</span>
     </div>
diff --git a/alfa-client/libs/ui/src/lib/ui/ozgcloud-dialog/ozgcloud-dialog.service.spec.ts b/alfa-client/libs/ui/src/lib/ui/ozgcloud-dialog/ozgcloud-dialog.service.spec.ts
index b95396349c8cb79f0e97601877a7fcd108529e56..971f3982258f6c9b65e7c031763595d20a3f900a 100644
--- a/alfa-client/libs/ui/src/lib/ui/ozgcloud-dialog/ozgcloud-dialog.service.spec.ts
+++ b/alfa-client/libs/ui/src/lib/ui/ozgcloud-dialog/ozgcloud-dialog.service.spec.ts
@@ -123,21 +123,30 @@ describe('OzgcloudDialogService', () => {
   });
 
   describe('openWizard', () => {
+    beforeEach(() => {
+      service.openInCallingComponentContext = jest.fn();
+    });
+
     it('should open wizard dialog', () => {
-      service.openWizard(component);
+      service.openWizard(component, viewContainerRef);
 
-      expect(dialog.open).toHaveBeenCalledWith(component, {
-        ...service.WIZARD_DIALOG_CONFIG,
-      });
+      expect(service.openInCallingComponentContext).toHaveBeenCalledWith(
+        component,
+        viewContainerRef,
+        undefined,
+        service.WIZARD_DIALOG_CONFIG,
+      );
     });
 
     it('should open wizard dialog with data', () => {
-      service.openWizard(component, dialogData);
+      service.openWizard(component, viewContainerRef, dialogData);
 
-      expect(dialog.open).toHaveBeenCalledWith(component, {
-        ...service.WIZARD_DIALOG_CONFIG,
-        data: dialogData,
-      });
+      expect(service.openInCallingComponentContext).toHaveBeenCalledWith(
+        component,
+        viewContainerRef,
+        dialogData,
+        service.WIZARD_DIALOG_CONFIG,
+      );
     });
   });
 
diff --git a/alfa-client/libs/ui/src/lib/ui/ozgcloud-dialog/ozgcloud-dialog.service.ts b/alfa-client/libs/ui/src/lib/ui/ozgcloud-dialog/ozgcloud-dialog.service.ts
index aebed88efe5a54fafce9ec09283f0314c744fc5e..cbea4f7eb2ab5ed2a177d1ac3809fae3fabaaae8 100644
--- a/alfa-client/libs/ui/src/lib/ui/ozgcloud-dialog/ozgcloud-dialog.service.ts
+++ b/alfa-client/libs/ui/src/lib/ui/ozgcloud-dialog/ozgcloud-dialog.service.ts
@@ -43,8 +43,8 @@ export class OzgcloudDialogService {
     disableClose: true,
   };
 
-  public openWizard<C, D, R = unknown>(component: ComponentType<C>, data?: D): DialogRef<R> {
-    return this.openDialog<C, R>(component, this.buildDialogConfigWithData<D>(data, this.WIZARD_DIALOG_CONFIG));
+  public openWizard<C, D, R = unknown>(component: ComponentType<C>, viewContainerRef: ViewContainerRef, data?: D): DialogRef<R> {
+    return this.openInCallingComponentContext<C, D, R>(component, viewContainerRef, data, this.WIZARD_DIALOG_CONFIG);
   }
 
   /**
diff --git a/alfa-client/libs/ui/src/lib/ui/validation-error/validation-error.component.html b/alfa-client/libs/ui/src/lib/ui/validation-error/validation-error.component.html
index 673ecf065e1b890e163cf98fab0335c180bea627..edc6820dfa4a6626a4e634f1116bff672bfc8fb6 100644
--- a/alfa-client/libs/ui/src/lib/ui/validation-error/validation-error.component.html
+++ b/alfa-client/libs/ui/src/lib/ui/validation-error/validation-error.component.html
@@ -23,6 +23,6 @@ Die sprachspezifischen Genehmigungen und Beschränkungen
 unter der Lizenz sind dem Lizenztext zu entnehmen.
 
 -->
-@for (invalidParam of invalidParams; track invalidParam) {
-  <span>{{ message(invalidParam) }}</span>
+@for (validationMessage of validationMessages; track validationMessage) {
+  <span>{{ validationMessage }}</span>
 }
diff --git a/alfa-client/libs/ui/src/lib/ui/validation-error/validation-error.component.ts b/alfa-client/libs/ui/src/lib/ui/validation-error/validation-error.component.ts
index eae4c1e99487d7fe169a73fee93d07af75f55676..3b2b26490f43530dfa97995a52cc1efed224f637 100644
--- a/alfa-client/libs/ui/src/lib/ui/validation-error/validation-error.component.ts
+++ b/alfa-client/libs/ui/src/lib/ui/validation-error/validation-error.component.ts
@@ -21,7 +21,7 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { InvalidParam, getMessageForInvalidParam } from '@alfa-client/tech-shared';
+import { getMessageForInvalidParam, InvalidParam } from '@alfa-client/tech-shared';
 import { Component, Input } from '@angular/core';
 
 @Component({
@@ -32,9 +32,10 @@ import { Component, Input } from '@angular/core';
 })
 export class ValidationErrorComponent {
   @Input() label: string;
-  @Input() invalidParams: InvalidParam[];
 
-  public message(invalidParam: InvalidParam): string {
-    return getMessageForInvalidParam(this.label, invalidParam);
+  @Input() set invalidParams(value: InvalidParam[]) {
+    this.validationMessages = value.map((invalidParam: InvalidParam) => getMessageForInvalidParam(this.label, invalidParam));
   }
+
+  public validationMessages: string[] = [];
 }
diff --git a/alfa-client/libs/vorgang-detail/src/index.ts b/alfa-client/libs/vorgang-detail/src/index.ts
index d9615b0082ac270218d00ecc945e2c2410bd0251..765983a28a264f4ee218a4b33ad3ee2cf3488959 100644
--- a/alfa-client/libs/vorgang-detail/src/index.ts
+++ b/alfa-client/libs/vorgang-detail/src/index.ts
@@ -23,5 +23,4 @@
  */
 export * from './lib/aktenzeichen-edit-dialog/aktenzeichen-edit-dialog.component';
 export * from './lib/aktenzeichen-editable/aktenzeichen-editable.component';
-export * from './lib/vorgang-detail-page/vorgang-detail-bescheiden/bescheiden.model';
 export * from './lib/vorgang-detail.module';
diff --git a/alfa-client/libs/vorgang-detail/src/lib/buttons/bescheiden-button/bescheiden-button.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/buttons/bescheiden-button/bescheiden-button.component.spec.ts
index 932363f2b33c3e0ebf50e8082a9389fd83a0a5a7..728a67f0542506e2c817191447c4fce7b5400b6c 100644
--- a/alfa-client/libs/vorgang-detail/src/lib/buttons/bescheiden-button/bescheiden-button.component.spec.ts
+++ b/alfa-client/libs/vorgang-detail/src/lib/buttons/bescheiden-button/bescheiden-button.component.spec.ts
@@ -24,18 +24,8 @@
 import { BescheidWizardContainerComponent } from '@alfa-client/bescheid';
 import { BescheidWizardDialogResult } from '@alfa-client/bescheid-shared';
 import { CommandResource } from '@alfa-client/command-shared';
-import { createEmptyStateResource, createStateResource, HasLinkPipe, StateResource } from '@alfa-client/tech-shared';
-import {
-  createDialogRefMock,
-  DialogRefMock,
-  getElementComponentFromFixtureByCss,
-  getMockComponent,
-  Mock,
-  mock,
-  notExistsAsHtmlElement,
-  tooltipExistsWithText,
-  triggerEvent,
-} from '@alfa-client/test-utils';
+import { createStateResource, HasLinkPipe, StateResource } from '@alfa-client/tech-shared';
+import { createDialogRefMock, DialogRefMock, getElementComponentFromFixtureByCss, getMockComponent, Mock, mock, notExistsAsHtmlElement, tooltipExistsWithText, triggerEvent, } from '@alfa-client/test-utils';
 import { OzgcloudDialogService } from '@alfa-client/ui';
 import { VorgangCommandService, VorgangService, VorgangWithEingangLinkRel } from '@alfa-client/vorgang-shared';
 import { DialogRef } from '@angular/cdk/dialog';
@@ -46,8 +36,7 @@ import { createCommandResource } from 'libs/command-shared/test/command';
 import { getDataTestIdAttributeOf } from 'libs/tech-shared/test/data-test';
 import { createVorgangWithEingangResource } from 'libs/vorgang-shared/test/vorgang';
 import { MockComponent } from 'ng-mocks';
-import { Observable, of } from 'rxjs';
-import { VorgangDetailBescheidenComponent } from '../../vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden.component';
+import { of } from 'rxjs';
 import { BescheidenButtonComponent } from './bescheiden-button.component';
 
 describe('BescheidenButtonComponent', () => {
@@ -57,11 +46,13 @@ describe('BescheidenButtonComponent', () => {
   const bescheidenButton: string = getDataTestIdAttributeOf('bescheiden-button');
   const bescheidenIconButton: string = getDataTestIdAttributeOf('bescheiden-icon-button');
 
+  const viewContainerRef = <any>{};
+
   let vorgangCommandService: Mock<VorgangCommandService>;
   let ozgcloudDialogService: Mock<OzgcloudDialogService>;
   let vorgangService: Mock<VorgangService>;
 
-  const dialogRef = <DialogRef<VorgangDetailBescheidenComponent>>{};
+  const dialogRef = <DialogRef<BescheidWizardDialogResult>>{};
 
   beforeEach(() => {
     vorgangCommandService = mock(VorgangCommandService);
@@ -96,6 +87,7 @@ describe('BescheidenButtonComponent', () => {
 
     fixture = TestBed.createComponent(BescheidenButtonComponent);
     component = fixture.componentInstance;
+    component.viewContainerRef = viewContainerRef;
     ozgcloudDialogService.openWizard = jest.fn().mockReturnValue(dialogRef);
     fixture.detectChanges();
   });
@@ -132,29 +124,6 @@ describe('BescheidenButtonComponent', () => {
           expect(component.openBescheidenWizard).toHaveBeenCalled();
         });
       });
-
-      describe('should do bescheiden', () => {
-        const command: CommandResource = createCommandResource();
-        const comandStateResource$: Observable<StateResource<CommandResource>> = of(createStateResource(command));
-
-        beforeEach(() => {
-          vorgangCommandService.bescheiden.mockReturnValue(comandStateResource$);
-        });
-
-        it('should call vorgangCommandService.bescheiden', () => {
-          component.bescheiden();
-
-          expect(vorgangCommandService.bescheiden).toHaveBeenCalled();
-        });
-
-        it('should assign response', () => {
-          component.commandStateResource$ = of(createEmptyStateResource<CommandResource>());
-
-          component.bescheiden();
-
-          expect(component.commandStateResource$).toBe(comandStateResource$);
-        });
-      });
     });
 
     describe('bescheiden icon button', () => {
@@ -196,7 +165,7 @@ describe('BescheidenButtonComponent', () => {
 
         component.openBescheidenWizard();
 
-        expect(ozgcloudDialogService.openWizard).toHaveBeenCalledWith(BescheidWizardContainerComponent, {
+        expect(ozgcloudDialogService.openWizard).toHaveBeenCalledWith(BescheidWizardContainerComponent, viewContainerRef, {
           vorgangWithEingangResource: vorgang,
         });
       });
diff --git a/alfa-client/libs/vorgang-detail/src/lib/buttons/bescheiden-button/bescheiden-button.component.ts b/alfa-client/libs/vorgang-detail/src/lib/buttons/bescheiden-button/bescheiden-button.component.ts
index 14105a18936391dbbf8646abed381e2b9273767c..eb3496cd4e8844f34b270c19ee130fc9722639c2 100644
--- a/alfa-client/libs/vorgang-detail/src/lib/buttons/bescheiden-button/bescheiden-button.component.ts
+++ b/alfa-client/libs/vorgang-detail/src/lib/buttons/bescheiden-button/bescheiden-button.component.ts
@@ -21,22 +21,16 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { BescheidWizardContainerComponent } from '@alfa-client/bescheid';
+import { BescheidWizardContainerComponent, BescheidWizardDialogData } from '@alfa-client/bescheid';
 import { BescheidWizardDialogResult } from '@alfa-client/bescheid-shared';
 import { CommandResource } from '@alfa-client/command-shared';
 import { createEmptyStateResource, isNotNil, StateResource } from '@alfa-client/tech-shared';
 import { OzgcloudDialogService } from '@alfa-client/ui';
-import {
-  VorgangCommandService,
-  VorgangService,
-  VorgangWithEingangLinkRel,
-  VorgangWithEingangResource,
-} from '@alfa-client/vorgang-shared';
+import { VorgangCommandService, VorgangService, VorgangWithEingangLinkRel, VorgangWithEingangResource, } from '@alfa-client/vorgang-shared';
 import { DialogRef } from '@angular/cdk/dialog';
-import { Component, Input, OnInit } from '@angular/core';
+import { Component, inject, Input, OnInit, ViewContainerRef } from '@angular/core';
 import { hasLink } from '@ngxp/rest';
 import { Observable, of } from 'rxjs';
-import { BescheidenDialogData } from '../../vorgang-detail-page/vorgang-detail-bescheiden/bescheiden.model';
 
 @Component({
   selector: 'alfa-bescheiden-button',
@@ -47,6 +41,11 @@ export class BescheidenButtonComponent implements OnInit {
   @Input() vorgang: VorgangWithEingangResource;
   @Input() showAsIconButton: boolean = false;
 
+  viewContainerRef = inject(ViewContainerRef);
+  private readonly vorgangCommandService = inject(VorgangCommandService);
+  private readonly vorgangService = inject(VorgangService);
+  private readonly ozgcloudDialogService = inject(OzgcloudDialogService);
+
   commandStateResource$: Observable<StateResource<CommandResource>> = of(createEmptyStateResource<CommandResource>());
 
   readonly linkRel = VorgangWithEingangLinkRel;
@@ -61,38 +60,21 @@ export class BescheidenButtonComponent implements OnInit {
       );
   }
 
-  constructor(
-    private vorgangCommandService: VorgangCommandService,
-    private vorgangService: VorgangService,
-    private ozgcloudDialogService: OzgcloudDialogService,
-  ) {}
-
   ngOnInit(): void {
     this.commandStateResource$ = this.vorgangCommandService.getBeschiedenCommand();
   }
 
   public bescheiden(): void {
-    if (this.shouldOpenBescheidenWizard()) {
-      this.openBescheidenWizard();
-    } else {
-      this.commandStateResource$ = this.vorgangCommandService.bescheiden(this.vorgang);
-    }
-  }
-
-  private shouldOpenBescheidenWizard(): boolean {
-    return (
-      hasLink(this.vorgang, VorgangWithEingangLinkRel.CREATE_BESCHEID_DRAFT) ||
-      hasLink(this.vorgang, VorgangWithEingangLinkRel.BESCHEID_DRAFT)
-    );
+    this.openBescheidenWizard();
   }
 
   public openBescheidenWizard(): void {
-    const dialogData: BescheidenDialogData = { vorgangWithEingangResource: this.vorgang };
+    const dialogData: BescheidWizardDialogData = { vorgangWithEingangResource: this.vorgang };
     const dialogRef: DialogRef<BescheidWizardDialogResult> = this.ozgcloudDialogService.openWizard<
       BescheidWizardContainerComponent,
-      BescheidenDialogData,
+      BescheidWizardDialogData,
       BescheidWizardDialogResult
-    >(BescheidWizardContainerComponent, dialogData);
+    >(BescheidWizardContainerComponent, this.viewContainerRef, dialogData);
     dialogRef.closed.subscribe((dialogResult: BescheidWizardDialogResult) => this.handleBescheidWizardClosed(dialogResult));
   }
 
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/bescheiden.formservice.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/bescheiden.formservice.spec.ts
deleted file mode 100644
index f69a1d6f6d0127dbc83a1ead4b55b751d42714cb..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/bescheiden.formservice.spec.ts
+++ /dev/null
@@ -1,578 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import {
-  Bescheid,
-  BescheidLinkRel,
-  BescheidResource,
-  BescheidSendBy,
-  BescheidService,
-  DocumentResource,
-} from '@alfa-client/bescheid-shared';
-import { BinaryFileResource } from '@alfa-client/binary-file-shared';
-import { CommandLinkRel, CommandResource } from '@alfa-client/command-shared';
-import {
-  EMPTY_STRING,
-  StateResource,
-  createStateResource,
-  formatForDatabase,
-} from '@alfa-client/tech-shared';
-import { Mock, mock, useFromMock } from '@alfa-client/test-utils';
-import { VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
-import { registerLocaleData } from '@angular/common';
-import localeDe from '@angular/common/locales/de';
-import { fakeAsync, tick } from '@angular/core/testing';
-import { UntypedFormBuilder } from '@angular/forms';
-import { faker } from '@faker-js/faker';
-import { Resource, ResourceUri } from '@ngxp/rest';
-import { cold } from 'jest-marbles';
-import {
-  createCommandResource,
-  createCommandStateResource,
-} from 'libs/command-shared/test/command';
-import { toResource } from 'libs/tech-shared/test/resource';
-import { of } from 'rxjs';
-import {
-  createBescheid,
-  createBescheidResource,
-} from '../../../../../bescheid-shared/src/test/bescheid';
-import { createDocumentResource } from '../../../../../bescheid-shared/src/test/document';
-import { createBinaryFileResource } from '../../../../../binary-file-shared/test/binary-file';
-import { singleCold } from '../../../../../tech-shared/test/marbles';
-import { createVorgangWithEingangResource } from '../../../../../vorgang-shared/test/vorgang';
-import { BescheidenFormService } from './bescheiden.formservice';
-
-registerLocaleData(localeDe);
-
-describe('BescheidenFormService', () => {
-  let service: BescheidenFormService;
-  let bescheidService: Mock<BescheidService>;
-  const now: Date = new Date();
-  Date.now = jest.fn().mockReturnValue(now);
-
-  beforeEach(() => {
-    bescheidService = mock(BescheidService);
-    service = new BescheidenFormService(new UntypedFormBuilder(), useFromMock(bescheidService));
-  });
-
-  describe('constructor', () => {
-    it('should initialize form beschieden am', () => {
-      expect(service.getValue().beschiedenAm).toEqual(formatForDatabase(now));
-    });
-
-    it('should initialize form bewilligt', () => {
-      expect(service.getValue().bewilligt).toBeTruthy();
-    });
-
-    it('should initialize form send by', () => {
-      expect(service.getValue().sendBy).toEqual(BescheidSendBy.NACHRICHT);
-    });
-
-    it('should initialize form bescheid dokument', () => {
-      expect(service.getValue().bescheidDocument).toBeNull();
-    });
-
-    it('should initialize form attachments', () => {
-      expect(service.getValue().attachments).toEqual([]);
-    });
-
-    it('should initialize form nachricht subject', () => {
-      expect(service.getValue().nachrichtSubject).toEqual(EMPTY_STRING);
-    });
-
-    it('should initialize form nachricht text', () => {
-      expect(service.getValue().nachrichtText).toEqual(EMPTY_STRING);
-    });
-  });
-
-  describe('init', () => {
-    it('should subscribe to sendBy', () => {
-      service.subscribeToSendBy = jest.fn();
-
-      service.init();
-
-      expect(service.subscribeToSendBy).toHaveBeenCalled();
-    });
-  });
-
-  describe('subscribe to send by', () => {
-    it('should update send by on value change', () => {
-      service.updateSendByManual = jest.fn();
-
-      service.subscribeToSendBy();
-      service.form.controls[BescheidenFormService.FIELD_SEND_BY].patchValue(BescheidSendBy.MANUAL);
-
-      expect(service.updateSendByManual).toHaveBeenCalled();
-    });
-  });
-
-  describe('update send by manual', () => {
-    it('should set to true if its manual', () => {
-      service.updateSendByManual(BescheidSendBy.MANUAL);
-
-      expect(service.sendByManual.value).toBeTruthy();
-    });
-    it('should set to false if its nachricht', () => {
-      service.updateSendByManual(BescheidSendBy.NACHRICHT);
-
-      expect(service.sendByManual.value).toBeFalsy();
-    });
-    it('should not emit if value not changed', () => {
-      service.sendByManual.next(true);
-      service.sendByManual.next = jest.fn();
-
-      service.updateSendByManual(BescheidSendBy.MANUAL);
-
-      expect(service.sendByManual.next).not.toHaveBeenCalled();
-    });
-    it('should emit on value change', () => {
-      service.sendByManual.next(false);
-      service.sendByManual.next = jest.fn();
-
-      service.updateSendByManual(BescheidSendBy.MANUAL);
-
-      expect(service.sendByManual.next).toHaveBeenCalled();
-    });
-  });
-
-  describe('initializeFormChanges', () => {
-    it('should emit initial form value', () => {
-      expect(service.getBescheidChanges()).toBeObservable(
-        cold('a', {
-          a: {
-            beschiedenAm: now,
-            bewilligt: true,
-            attachments: [],
-            bescheidDocument: null,
-            sendBy: BescheidSendBy.NACHRICHT,
-            nachrichtSubject: '',
-            nachrichtText: '',
-          },
-        }),
-      );
-    });
-  });
-
-  describe('getValue', () => {
-    let getFormValue: jest.Mock;
-
-    beforeEach(() => {
-      getFormValue = service.getFormValue = jest.fn();
-      getFormValue.mockReturnValue({ beschiedenAm: now, bewilligt: 'true' });
-    });
-
-    it('should call getFormValue', () => {
-      service.getValue();
-
-      expect(getFormValue).toHaveBeenCalled();
-    });
-
-    it('should return bescheid', () => {
-      const value: Bescheid = service.getValue();
-
-      expect(value).toEqual({ bewilligt: true, beschiedenAm: formatForDatabase(now) } as Bescheid);
-    });
-  });
-
-  describe('getValueWithApproved', () => {
-    it('should convert string bewilligt from bescheid if it is not nil', () => {
-      const bescheid: Bescheid = { ...createBescheid(), bewilligt: 'true' };
-
-      const result = service.getValueWithApproved(bescheid);
-
-      expect(result.bewilligt).toBeTruthy();
-    });
-
-    it('should set bewilligt to false if it is nil', () => {
-      const bescheid: Bescheid = { ...createBescheid(), bewilligt: undefined };
-
-      const result = service.getValueWithApproved(bescheid);
-
-      expect(result.bewilligt).toBeFalsy();
-    });
-  });
-
-  describe('getBescheidChanges', () => {
-    it('should emit initial form value', () => {
-      expect(service.getBescheidChanges()).toBeObservable(
-        singleCold({
-          beschiedenAm: now,
-          bewilligt: true,
-          attachments: [],
-          bescheidDocument: null,
-          sendBy: BescheidSendBy.NACHRICHT,
-          nachrichtSubject: '',
-          nachrichtText: '',
-        }),
-      );
-    });
-  });
-
-  describe('patchValues', () => {
-    let bescheidResource: BescheidResource;
-    let patch: jest.Mock;
-
-    beforeEach(() => {
-      bescheidResource = createBescheidResource();
-      patch = service.patch = jest.fn();
-    });
-
-    it('should call patch', () => {
-      service.patchValues(bescheidResource);
-
-      expect(patch).toHaveBeenCalledWith({
-        [BescheidenFormService.FIELD_BESCHIEDEN_AM]: bescheidResource.beschiedenAm,
-        [BescheidenFormService.FIELD_BEWILLIGT]: String(bescheidResource.bewilligt),
-        [BescheidenFormService.FIELD_BESCHEID_DOCUMENT]: null,
-        [BescheidenFormService.FIELD_SEND_BY]: String(bescheidResource.sendBy),
-        [BescheidenFormService.FIELD_NACHRICHT_SUBJECT]: bescheidResource.nachrichtSubject,
-        [BescheidenFormService.FIELD_NACHRICHT_TEXT]: bescheidResource.nachrichtText,
-      });
-    });
-
-    it('should call patch with undefined sendBy', () => {
-      const bescheidDocumentUri: ResourceUri = faker.internet.url();
-      service.patchValues({
-        ...bescheidResource,
-        sendBy: undefined,
-        _links: {
-          ...bescheidResource._links,
-          [BescheidLinkRel.BESCHEID_DOCUMENT]: { href: bescheidDocumentUri },
-        },
-      });
-
-      expect(patch).toHaveBeenCalledWith({
-        [BescheidenFormService.FIELD_BESCHIEDEN_AM]: bescheidResource.beschiedenAm,
-        [BescheidenFormService.FIELD_BEWILLIGT]: String(bescheidResource.bewilligt),
-        [BescheidenFormService.FIELD_SEND_BY]: BescheidSendBy.NACHRICHT,
-        [BescheidenFormService.FIELD_BESCHEID_DOCUMENT]: bescheidDocumentUri,
-        [BescheidenFormService.FIELD_NACHRICHT_SUBJECT]: bescheidResource.nachrichtSubject,
-        [BescheidenFormService.FIELD_NACHRICHT_TEXT]: bescheidResource.nachrichtText,
-      });
-    });
-
-    it('should not call patch', () => {
-      service.patchValues(null);
-
-      expect(patch).not.toHaveBeenCalled();
-    });
-
-    it('should patch attachments', () => {
-      service.patchValues(bescheidResource);
-
-      expect(service.getFormValue().attachments).toEqual(bescheidResource.attachments);
-    });
-  });
-
-  describe('submit', () => {
-    const commandStateResource: StateResource<CommandResource> =
-      createStateResource(createCommandResource());
-
-    beforeEach(() => {
-      bescheidService.updateBescheid.mockReturnValue(of(commandStateResource));
-      bescheidService.createBescheid.mockReturnValue(of(commandStateResource));
-      service.updateNachrichtOnSuccess = jest.fn().mockReturnValue(() => of(commandStateResource));
-    });
-
-    it('should call bescheid service update bescheid draft if is patch', (done) => {
-      const dummyPatchResource: Resource = toResource({});
-      service.patch(dummyPatchResource);
-
-      service.submit().subscribe(() => {
-        expect(bescheidService.updateBescheid).toHaveBeenCalledWith(service.getValue());
-        done();
-      });
-    });
-
-    it('should call bescheid service update bescheid draft if bescheid draft exists', (done) => {
-      bescheidService.existsBescheidDraft.mockReturnValue(true);
-
-      service.submit().subscribe(() => {
-        expect(bescheidService.updateBescheid).toHaveBeenCalledWith(service.getValue());
-        done();
-      });
-    });
-
-    it('should call bescheid service create bescheid draft if bescheid draft not exists', (done) => {
-      bescheidService.existsBescheidDraft.mockReturnValue(false);
-
-      service.submit().subscribe(() => {
-        expect(bescheidService.createBescheid).toHaveBeenCalledWith(
-          service.vorgangWithEingangResource,
-          service.getValue(),
-        );
-        done();
-      });
-    });
-
-    it('should update nachricht after successful bescheid creation', (done) => {
-      bescheidService.existsBescheidDraft.mockReturnValue(false);
-
-      service.submit().subscribe(() => {
-        expect(service.updateNachrichtOnSuccess).toHaveBeenCalled();
-        done();
-      });
-    });
-  });
-
-  describe('submit draft', () => {
-    const commandStateResource: StateResource<CommandResource> = createStateResource(
-      createCommandResource([CommandLinkRel.EFFECTED_RESOURCE]),
-    );
-
-    beforeEach(() => {
-      service.submit = jest.fn().mockReturnValue(of(commandStateResource));
-    });
-
-    it('should call submit', (done) => {
-      service.submitDraft().subscribe(() => {
-        expect(service.submit).toHaveBeenCalledWith();
-        done();
-      });
-    });
-
-    it('should call service to reload vorgang', fakeAsync(() => {
-      service.submitDraft().subscribe();
-      tick();
-
-      expect(bescheidService.reloadCurrentVorgang).toHaveBeenCalled();
-    }));
-  });
-
-  describe('setVorgangWithEingangResource', () => {
-    it('should set vorgangWithEingangResource', () => {
-      const vorgangWithEingangResource: VorgangWithEingangResource =
-        createVorgangWithEingangResource();
-
-      service.setVorgangWithEingangResource(vorgangWithEingangResource);
-
-      expect(service.vorgangWithEingangResource).toBe(vorgangWithEingangResource);
-    });
-  });
-
-  describe('getVorgangWithEingangResource', () => {
-    it('should reutrn vorgangWithEingangResource', () => {
-      const vorgangWithEingangResource: VorgangWithEingangResource =
-        createVorgangWithEingangResource();
-      service.vorgangWithEingangResource = vorgangWithEingangResource;
-
-      const vorang: VorgangWithEingangResource = service.getVorgangWithEingangResource();
-
-      expect(vorang).toBe(vorgangWithEingangResource);
-    });
-  });
-
-  describe('deleteFile', () => {
-    it('should emit binary file resource', (done) => {
-      const file: BinaryFileResource = createBinaryFileResource();
-
-      service.getFileDelete().subscribe((deletedFile: BinaryFileResource) => {
-        expect(deletedFile).toEqual(file);
-        done();
-      });
-
-      service.deleteFile(file);
-    });
-  });
-
-  describe('setActiveStep', () => {
-    it('should emit step', () => {
-      service.setActiveStep(3);
-
-      expect(service.getActiveStep()).toBeObservable(singleCold(3));
-    });
-  });
-
-  describe('patchNachricht', () => {
-    it('should patch nachrichtSubject with value from document', () => {
-      const documentResource: DocumentResource = createDocumentResource();
-
-      service.patchNachricht(documentResource);
-
-      expect(service.getValue().nachrichtSubject).toEqual(documentResource.nachrichtSubject);
-    });
-
-    it('should not patch nachrichtSubject if given', () => {
-      const documentResource: DocumentResource = createDocumentResource();
-      const bescheidResource: BescheidResource = createBescheidResource();
-      service.patchValues(bescheidResource);
-
-      service.patchNachricht(documentResource);
-
-      expect(service.getValue().nachrichtSubject).toEqual(bescheidResource.nachrichtSubject);
-    });
-
-    it('should patch nachrichtText with value from document', () => {
-      const documentResource: DocumentResource = createDocumentResource();
-
-      service.patchNachricht(documentResource);
-
-      expect(service.getValue().nachrichtText).toEqual(documentResource.nachrichtText);
-    });
-
-    it('should not patch nachrichtText if given', () => {
-      const documentResource: DocumentResource = createDocumentResource();
-      const bescheidResource: BescheidResource = createBescheidResource();
-      service.patchValues(bescheidResource);
-
-      service.patchNachricht(documentResource);
-
-      expect(service.getValue().nachrichtText).toEqual(bescheidResource.nachrichtText);
-    });
-  });
-
-  describe('clearNachricht', () => {
-    it('should patch values', () => {
-      const documentResource: DocumentResource = createDocumentResource();
-
-      service.patchNachricht(documentResource);
-      service.clearNachricht();
-
-      expect(service.getValue().nachrichtSubject).toEqual(EMPTY_STRING);
-      expect(service.getValue().nachrichtText).toEqual(EMPTY_STRING);
-    });
-  });
-
-  describe('setSendBy', () => {
-    it.each(Object.keys(BescheidSendBy))(
-      'should set control value to %s',
-      (sendBy: BescheidSendBy) => {
-        service.setSendBy(sendBy);
-
-        expect(service.getValue().sendBy).toEqual(sendBy);
-      },
-    );
-  });
-
-  describe('validateBescheidDocumentExists', () => {
-    it('should return true', () => {
-      service.getValue = jest.fn().mockReturnValue(createBescheid());
-
-      service.validateBescheidDocumentExists();
-
-      expect(service.validateBescheidDocumentExists()).toBeTruthy();
-    });
-
-    it('should return false', () => {
-      service.getValue = jest.fn().mockReturnValue({
-        ...createBescheid(),
-        bescheidDocument: null,
-      } as Bescheid);
-
-      service.validateBescheidDocumentExists();
-
-      expect(service.validateBescheidDocumentExists()).toBeFalsy();
-    });
-
-    describe('getShowMissingBescheidDocumentError', () => {
-      it('should emit true', () => {
-        service.getValue = jest.fn().mockReturnValue({
-          ...createBescheid(),
-          bescheidDocument: null,
-        } as Bescheid);
-
-        service.validateBescheidDocumentExists();
-
-        expect(service.getShowMissingBescheidDocumentError()).toBeObservable(singleCold(true));
-      });
-
-      it('should emit false', () => {
-        service.getValue = jest.fn().mockReturnValue(createBescheid());
-
-        service.validateBescheidDocumentExists();
-
-        expect(service.getShowMissingBescheidDocumentError()).toBeObservable(singleCold(false));
-      });
-    });
-  });
-
-  describe('isBetreffInvalid', () => {
-    it('should return true', () => {
-      service.form.controls[BescheidenFormService.FIELD_NACHRICHT_SUBJECT].setErrors({});
-
-      expect(service.isBetreffInvalid()).toBeTruthy();
-    });
-
-    it('should return false', () => {
-      service.form.controls[BescheidenFormService.FIELD_NACHRICHT_SUBJECT].setErrors(null);
-
-      expect(service.isBetreffInvalid()).toBeFalsy();
-    });
-  });
-
-  describe('isNachrichtInvalid', () => {
-    it('should return true', () => {
-      service.form.controls[BescheidenFormService.FIELD_NACHRICHT_TEXT].setErrors({});
-
-      expect(service.isNachrichtInvalid()).toBeTruthy();
-    });
-
-    it('should return false', () => {
-      service.form.controls[BescheidenFormService.FIELD_NACHRICHT_TEXT].setErrors(null);
-
-      expect(service.isNachrichtInvalid()).toBeFalsy();
-    });
-  });
-
-  describe('updateNachrichtOnSuccess', () => {
-    const subject: string = faker.lorem.words(3);
-    const text: string = faker.lorem.text();
-    const bescheidResource: BescheidResource = createBescheidResource();
-
-    beforeEach(() => {
-      bescheidResource.nachrichtSubject = subject;
-      bescheidResource.nachrichtText = text;
-      bescheidService.getBescheidDraft.mockReturnValue(of(createStateResource(bescheidResource)));
-    });
-
-    it('should get bescheid draft', () => {
-      service
-        .updateNachrichtOnSuccess()(
-          of(createCommandStateResource([CommandLinkRel.EFFECTED_RESOURCE])),
-        )
-        .subscribe();
-
-      expect(bescheidService.getBescheidDraft).toHaveBeenCalled();
-    });
-
-    it('should set subject', () => {
-      service
-        .updateNachrichtOnSuccess()(
-          of(createCommandStateResource([CommandLinkRel.EFFECTED_RESOURCE])),
-        )
-        .subscribe();
-
-      expect(service.getValue().nachrichtSubject).toEqual(subject);
-    });
-
-    it('should set text', () => {
-      service
-        .updateNachrichtOnSuccess()(
-          of(createCommandStateResource([CommandLinkRel.EFFECTED_RESOURCE])),
-        )
-        .subscribe();
-
-      expect(service.getValue().nachrichtText).toEqual(text);
-    });
-  });
-});
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/bescheiden.formservice.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/bescheiden.formservice.ts
deleted file mode 100644
index 27dd25492855e410c1ce03221a1b97da8fd67a77..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/bescheiden.formservice.ts
+++ /dev/null
@@ -1,307 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import {
-  Bescheid,
-  BescheidLinkRel,
-  BescheidResource,
-  BescheidSendBy,
-  BescheidService,
-  DocumentResource,
-} from '@alfa-client/bescheid-shared';
-import { BinaryFileResource } from '@alfa-client/binary-file-shared';
-import { CommandResource, tapOnCommandSuccessfullyDone } from '@alfa-client/command-shared';
-import {
-  AbstractFormService,
-  EMPTY_STRING,
-  StateResource,
-  convertToBoolean,
-  formatForDatabase,
-  isLoaded,
-  isNotEmpty,
-  isNotNil,
-} from '@alfa-client/tech-shared';
-import { VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
-import { Injectable, OnDestroy } from '@angular/core';
-import { FormControl, UntypedFormArray, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms';
-import { Resource, ResourceUri, getUrl, hasLink } from '@ngxp/rest';
-import { isEmpty, isNil, isUndefined } from 'lodash-es';
-import { BehaviorSubject, Observable, Subject, Subscription, combineLatest, filter, first, map, startWith } from 'rxjs';
-
-@Injectable()
-export class BescheidenFormService extends AbstractFormService<CommandResource> implements OnDestroy {
-  static readonly FIELD_BESCHIEDEN_AM = 'beschiedenAm';
-  static readonly FIELD_BEWILLIGT = 'bewilligt';
-  static readonly FIELD_BESCHEID_DOCUMENT = 'bescheidDocument';
-  static readonly FIELD_ATTACHMENTS = 'attachments';
-  public static readonly FIELD_SEND_BY = 'sendBy';
-  static readonly FIELD_NACHRICHT_SUBJECT = 'nachrichtSubject';
-  static readonly FIELD_NACHRICHT_TEXT = 'nachrichtText';
-
-  static readonly FIELD_PATH_PREFIX = 'command.body';
-
-  static readonly BETREFF_DEFAULT: string = 'Ihr Bescheid zum Antrag';
-
-  private readonly bescheidChanges$: BehaviorSubject<Bescheid>;
-  private readonly fileDelete$: Subject<BinaryFileResource>;
-  private readonly showMissingBescheidDocumentError$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
-
-  private readonly activeStep$: BehaviorSubject<number> = new BehaviorSubject(1);
-  readonly sendByManual: BehaviorSubject<boolean> = new BehaviorSubject(false);
-
-  vorgangWithEingangResource: VorgangWithEingangResource;
-
-  private formControlSubscriptions: Subscription;
-  private formChangesSubscription: Subscription;
-
-  constructor(
-    formBuilder: UntypedFormBuilder,
-    private readonly bescheidService: BescheidService,
-  ) {
-    super(formBuilder);
-
-    this.bescheidChanges$ = new BehaviorSubject<Bescheid>(this.getFormValue());
-    this.fileDelete$ = new Subject<BinaryFileResource>();
-    this.init();
-  }
-
-  init(): void {
-    this.formControlSubscriptions = this.subscribeToSendBy();
-    this.initializeFormChanges();
-  }
-
-  subscribeToSendBy(): Subscription {
-    return this.form.controls[BescheidenFormService.FIELD_SEND_BY].valueChanges.subscribe((sendBy: BescheidSendBy) =>
-      this.updateSendByManual(sendBy),
-    );
-  }
-
-  updateSendByManual(sendBy: BescheidSendBy): void {
-    const isSendByManual = sendBy === BescheidSendBy.MANUAL;
-    if (isSendByManual !== this.sendByManual.value) this.sendByManual.next(isSendByManual);
-  }
-
-  initializeFormChanges(): void {
-    this.formChangesSubscription = this.form.valueChanges
-      .pipe(
-        startWith(this.getFormValue()),
-        map((value) => this.getValueWithApproved(value)),
-      )
-      .subscribe((bescheid) => this.bescheidChanges$.next(bescheid));
-  }
-
-  ngOnDestroy(): void {
-    this.unsubscribe();
-  }
-
-  private unsubscribe(): void {
-    if (isNotNil(this.formChangesSubscription) && !this.formChangesSubscription.closed) {
-      this.formChangesSubscription.unsubscribe();
-    }
-    if (isNotNil(this.formControlSubscriptions)) this.formControlSubscriptions.unsubscribe();
-  }
-
-  public patchValues(bescheid: BescheidResource): void {
-    if (isNil(bescheid)) {
-      return;
-    }
-    const bescheidDocumentUri: ResourceUri = this.getBescheidDocumentUri(bescheid);
-    this.bescheidService.setDocumentUri(bescheidDocumentUri);
-    this.patch({
-      [BescheidenFormService.FIELD_BESCHIEDEN_AM]: bescheid.beschiedenAm,
-      [BescheidenFormService.FIELD_BEWILLIGT]: String(bescheid.bewilligt),
-      [BescheidenFormService.FIELD_BESCHEID_DOCUMENT]: bescheidDocumentUri,
-      [BescheidenFormService.FIELD_SEND_BY]: isUndefined(bescheid.sendBy) ? BescheidSendBy.NACHRICHT : bescheid.sendBy,
-      [BescheidenFormService.FIELD_NACHRICHT_SUBJECT]: bescheid.nachrichtSubject,
-      [BescheidenFormService.FIELD_NACHRICHT_TEXT]: bescheid.nachrichtText,
-    });
-    bescheid.attachments.forEach((attachmentLink) =>
-      (this.form.controls[BescheidenFormService.FIELD_ATTACHMENTS] as UntypedFormArray).push(
-        new UntypedFormControl(attachmentLink),
-      ),
-    );
-  }
-
-  private getBescheidDocumentUri(bescheid: BescheidResource): ResourceUri {
-    if (hasLink(bescheid, BescheidLinkRel.BESCHEID_DOCUMENT)) {
-      return getUrl(bescheid, BescheidLinkRel.BESCHEID_DOCUMENT);
-    }
-    return null;
-  }
-
-  protected initForm(): UntypedFormGroup {
-    return this.formBuilder.group({
-      [BescheidenFormService.FIELD_BESCHIEDEN_AM]: new UntypedFormControl(new Date(Date.now())),
-      [BescheidenFormService.FIELD_BEWILLIGT]: new UntypedFormControl('true'),
-      [BescheidenFormService.FIELD_SEND_BY]: new UntypedFormControl(BescheidSendBy.NACHRICHT),
-      [BescheidenFormService.FIELD_BESCHEID_DOCUMENT]: new UntypedFormControl(null),
-      [BescheidenFormService.FIELD_ATTACHMENTS]: new UntypedFormArray([]),
-      [BescheidenFormService.FIELD_NACHRICHT_SUBJECT]: new UntypedFormControl(''),
-      [BescheidenFormService.FIELD_NACHRICHT_TEXT]: new UntypedFormControl(''),
-    });
-  }
-
-  protected getPathPrefix(): string {
-    return BescheidenFormService.FIELD_PATH_PREFIX;
-  }
-
-  protected doSubmit(): Observable<StateResource<CommandResource>> {
-    if (this.isPatch() || this.bescheidService.existsBescheidDraft()) {
-      return this.bescheidService.updateBescheid(this.getValue());
-    } else {
-      return this.bescheidService
-        .createBescheid(this.vorgangWithEingangResource, this.getValue())
-        .pipe(this.updateNachrichtOnSuccess());
-    }
-  }
-
-  updateNachrichtOnSuccess(): (source: Observable<StateResource<CommandResource>>) => Observable<StateResource<CommandResource>> {
-    return tapOnCommandSuccessfullyDone(() => {
-      this.bescheidService
-        .getBescheidDraft()
-        .pipe(filter(isLoaded), first())
-        .subscribe((bescheidStateResource: StateResource<BescheidResource>) => {
-          this.setNachrichtSubject(bescheidStateResource.resource.nachrichtSubject);
-          this.setNachrichtText(bescheidStateResource.resource.nachrichtText);
-        });
-    });
-  }
-
-  public submitDraft(): Observable<StateResource<Resource>> {
-    return this.submit().pipe(tapOnCommandSuccessfullyDone(() => this.bescheidService.reloadCurrentVorgang()));
-  }
-
-  public getValue(): Bescheid {
-    const value: any = this.getFormValue();
-    return {
-      ...value,
-      beschiedenAm: formatForDatabase(value.beschiedenAm),
-      bewilligt: convertToBoolean(value.bewilligt),
-      attachments: value.attachments,
-    };
-  }
-
-  public getValueWithApproved(value: any): Bescheid {
-    return {
-      ...value,
-      bewilligt: isNotNil(value.bewilligt) ? convertToBoolean(value.bewilligt) : false,
-    };
-  }
-
-  public getBescheidChanges(): Observable<Bescheid> {
-    return this.bescheidChanges$.asObservable();
-  }
-
-  public setVorgangWithEingangResource(vorgangWithEingangResource: VorgangWithEingangResource): void {
-    this.vorgangWithEingangResource = vorgangWithEingangResource;
-  }
-
-  public getVorgangWithEingangResource(): VorgangWithEingangResource {
-    return this.vorgangWithEingangResource;
-  }
-
-  public deleteFile(binaryFileResource: BinaryFileResource): void {
-    this.fileDelete$.next(binaryFileResource);
-  }
-
-  public getFileDelete(): Observable<BinaryFileResource> {
-    return this.fileDelete$.asObservable();
-  }
-
-  public setActiveStep(step: number) {
-    this.activeStep$.next(step);
-  }
-
-  public getActiveStep(): Observable<number> {
-    return this.activeStep$.asObservable();
-  }
-
-  public clearBescheidDocumentFile(): void {
-    this.updateBescheidDocumentFile(null);
-  }
-
-  public updateBescheidDocumentFile(uri: ResourceUri): void {
-    this.getBescheidDocumentControl().patchValue(uri);
-  }
-
-  private getBescheidDocumentControl(): FormControl {
-    return <FormControl>this.form.controls[BescheidenFormService.FIELD_BESCHEID_DOCUMENT];
-  }
-
-  public isSendByManual(): Observable<boolean> {
-    return this.sendByManual.asObservable();
-  }
-
-  public patchNachricht(documentResource: DocumentResource): void {
-    const value = this.getValue();
-    if (isEmpty(value.nachrichtSubject)) {
-      if (isNotEmpty(documentResource.nachrichtSubject)) {
-        this.setNachrichtSubject(documentResource.nachrichtSubject);
-      }
-    }
-
-    if (isEmpty(value.nachrichtText)) {
-      if (isNotEmpty(documentResource.nachrichtText)) {
-        this.setNachrichtText(documentResource.nachrichtText);
-      }
-    }
-  }
-
-  public clearNachricht(): void {
-    this.setNachrichtSubject(EMPTY_STRING);
-    this.setNachrichtText(EMPTY_STRING);
-  }
-
-  private setNachrichtSubject(value: string): void {
-    this.form.controls[BescheidenFormService.FIELD_NACHRICHT_SUBJECT].patchValue(value);
-  }
-
-  private setNachrichtText(value: string): void {
-    this.form.controls[BescheidenFormService.FIELD_NACHRICHT_TEXT].patchValue(value);
-  }
-
-  public setSendBy(sendBy: BescheidSendBy): void {
-    this.form.controls[BescheidenFormService.FIELD_SEND_BY].patchValue(sendBy);
-  }
-
-  public getShowMissingBescheidDocumentError(): Observable<boolean> {
-    return combineLatest([this.showMissingBescheidDocumentError$.asObservable(), this.getBescheidChanges()]).pipe(
-      map(
-        ([showMissingBescheidDocumentError, bescheid]) => showMissingBescheidDocumentError && isEmpty(bescheid.bescheidDocument),
-      ),
-    );
-  }
-
-  public validateBescheidDocumentExists(): boolean {
-    this.showMissingBescheidDocumentError$.next(isEmpty(this.getValue().bescheidDocument));
-    return isNotEmpty(this.getValue().bescheidDocument);
-  }
-
-  public isBetreffInvalid(): boolean {
-    return this.form.controls[BescheidenFormService.FIELD_NACHRICHT_SUBJECT].invalid;
-  }
-
-  public isNachrichtInvalid(): boolean {
-    return this.form.controls[BescheidenFormService.FIELD_NACHRICHT_TEXT].invalid;
-  }
-}
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/bescheiden.model.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/bescheiden.model.ts
deleted file mode 100644
index 61f653e0c6e04b4e60bd03970bf9839d0a06ee07..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/bescheiden.model.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BescheidResource } from '@alfa-client/bescheid-shared';
-import { VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
-
-export interface BescheidenDialogData {
-  vorgangWithEingangResource: VorgangWithEingangResource;
-  bescheidDraftResource?: BescheidResource;
-}
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-attachments/vorgang-detail-bescheiden-result-attachments.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-attachments/vorgang-detail-bescheiden-result-attachments.component.html
deleted file mode 100644
index b191b552c456fd14168b0df509afdc6a38ddd0fd..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-attachments/vorgang-detail-bescheiden-result-attachments.component.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<!--
-
-    Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
-    Ministerpräsidenten des Landes Schleswig-Holstein
-    Staatskanzlei
-    Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-
-    Lizenziert unter der EUPL, Version 1.2 oder - sobald
-    diese von der Europäischen Kommission genehmigt wurden -
-    Folgeversionen der EUPL ("Lizenz");
-    Sie dürfen dieses Werk ausschließlich gemäß
-    dieser Lizenz nutzen.
-    Eine Kopie der Lizenz finden Sie hier:
-
-    https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-
-    Sofern nicht durch anwendbare Rechtsvorschriften
-    gefordert oder in schriftlicher Form vereinbart, wird
-    die unter der Lizenz verbreitete Software "so wie sie
-    ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-    ausdrücklich oder stillschweigend - verbreitet.
-    Die sprachspezifischen Genehmigungen und Beschränkungen
-    unter der Lizenz sind dem Lizenztext zu entnehmen.
-
--->
-<ods-attachment-wrapper>
-  <alfa-binary-file2-container
-    *ngFor="let attachment of existingAttachments"
-    [file]="attachment"
-    [deletable]="deletable"
-    (startDelete)="deleteFile($event)"
-  >
-  </alfa-binary-file2-container>
-  <ng-container *ngFor="let attachment of uploadedAttachments">
-    <alfa-binary-file2-container
-      *ngIf="!attachment.loading && attachment.resource"
-      [file]="attachment.resource"
-      [deletable]="deletable"
-      (startDelete)="deleteFile($event)"
-      [attr.data-test-id]="(attachment.resource.name | convertForDataTest) + '-file2-container'"
-    >
-    </alfa-binary-file2-container>
-  </ng-container>
-  <ng-container *ngIf="uploadInProgress$ | async as uploadFileInProgress">
-    <ods-attachment
-      data-test-id="attachment-upload-in-progress"
-      *ngIf="uploadFileInProgress.loading || uploadFileInProgress.error"
-      [loadingCaption]="uploadFileInProgress.fileName"
-      errorCaption="Fehler beim Hochladen"
-      [errorMessages]="uploadFileInProgress.error | convertProblemDetailToErrorMessages"
-      description="Anhang wird hochgeladen"
-      [isLoading]="uploadFileInProgress.loading"
-    ></ods-attachment>
-  </ng-container>
-</ods-attachment-wrapper>
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-attachments/vorgang-detail-bescheiden-result-attachments.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-attachments/vorgang-detail-bescheiden-result-attachments.component.spec.ts
deleted file mode 100644
index 237ed0fe684cfe2e873c2a2ff6d38865520476be..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-attachments/vorgang-detail-bescheiden-result-attachments.component.spec.ts
+++ /dev/null
@@ -1,374 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BescheidService } from '@alfa-client/bescheid-shared';
-import { BinaryFile2ContainerComponent } from '@alfa-client/binary-file';
-import { BinaryFileResource } from '@alfa-client/binary-file-shared';
-import {
-  convertForDataTest,
-  ConvertForDataTestPipe,
-  createErrorStateResource,
-  createStateResource,
-  FileSizePipe,
-  StateResource,
-} from '@alfa-client/tech-shared';
-import { existsAsHtmlElement, Mock, mock, notExistsAsHtmlElement } from '@alfa-client/test-utils';
-import { OzgcloudSvgIconComponent, SpinnerComponent } from '@alfa-client/ui';
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { MatIcon } from '@angular/material/icon';
-import { AttachmentComponent, AttachmentWrapperComponent, SpinnerIconComponent } from '@ods/system';
-import { ConvertProblemDetailToErrorMessagesPipe } from 'libs/tech-shared/src/lib/pipe/convert-problem-detail-to-error-messages.pipe';
-import { MockComponent, MockPipe } from 'ng-mocks';
-import { BehaviorSubject, EMPTY, Observable, of, Subscription } from 'rxjs';
-import { createUploadFileInProgress } from '../../../../../../../bescheid-shared/src/test/bescheid';
-import {
-  createBinaryFileResource,
-  createLoadedBinaryFileResource,
-  createLoadingBinaryFileStateResource,
-} from '../../../../../../../binary-file-shared/test/binary-file';
-import { getDataTestIdOf } from '../../../../../../../tech-shared/test/data-test';
-import { createApiError } from '../../../../../../../tech-shared/test/error';
-import { BescheidenFormService } from '../../bescheiden.formservice';
-import { VorgangDetailBescheidenResultAttachmentsComponent } from './vorgang-detail-bescheiden-result-attachments.component';
-
-describe('VorgangDetailBescheidenResultAttachmentsComponent', () => {
-  let component: VorgangDetailBescheidenResultAttachmentsComponent;
-  let fixture: ComponentFixture<VorgangDetailBescheidenResultAttachmentsComponent>;
-
-  let bescheidService: Mock<BescheidService>;
-  let formService: Mock<BescheidenFormService>;
-
-  beforeEach(async () => {
-    bescheidService = mock(BescheidService);
-    bescheidService.getAttachments.mockReturnValue(EMPTY);
-    bescheidService.getUploadedAttachment.mockReturnValue(EMPTY);
-
-    formService = mock(BescheidenFormService);
-    formService.getBescheidChanges.mockReturnValue(
-      new BehaviorSubject({ beschiedenAm: new Date(), bewilligt: false }),
-    );
-
-    await TestBed.configureTestingModule({
-      declarations: [
-        VorgangDetailBescheidenResultAttachmentsComponent,
-        ConvertForDataTestPipe,
-        MatIcon,
-        MockPipe(FileSizePipe),
-        MockPipe(ConvertProblemDetailToErrorMessagesPipe),
-        MockComponent(OzgcloudSvgIconComponent),
-        MockComponent(SpinnerComponent),
-        MockComponent(AttachmentWrapperComponent),
-        MockComponent(BinaryFile2ContainerComponent),
-        MockComponent(SpinnerIconComponent),
-        MockComponent(AttachmentComponent),
-      ],
-      providers: [
-        {
-          provide: BescheidenFormService,
-          useValue: formService,
-        },
-        {
-          provide: BescheidService,
-          useValue: bescheidService,
-        },
-      ],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(VorgangDetailBescheidenResultAttachmentsComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-
-  describe('render', () => {
-    const attachment = createStateResource(createBinaryFileResource());
-    const dataTestId = getDataTestIdOf(
-      `${convertForDataTest(attachment.resource.name)}-file2-container`,
-    );
-    const uploadInProgressDataTestId: string = getDataTestIdOf('attachment-upload-in-progress');
-
-    beforeEach(() => {
-      component.uploadedAttachments = [attachment];
-    });
-
-    it('should render uploaded file container', () => {
-      component.ngOnInit();
-      fixture.detectChanges();
-
-      existsAsHtmlElement(fixture, dataTestId);
-    });
-
-    it('should not render uploaded file container on loading', () => {
-      component.uploadedAttachments = [{ ...attachment, loading: true }];
-      component.ngOnInit();
-      fixture.detectChanges();
-
-      notExistsAsHtmlElement(fixture, dataTestId);
-    });
-
-    it('should not render uploaded file container on null resource', () => {
-      component.uploadedAttachments = [{ ...attachment, resource: null }];
-      component.ngOnInit();
-      fixture.detectChanges();
-
-      notExistsAsHtmlElement(fixture, dataTestId);
-    });
-
-    it('should render attachment in progress component when loading', () => {
-      component.uploadInProgress$ = of({ ...createUploadFileInProgress(), loading: true });
-
-      fixture.detectChanges();
-
-      existsAsHtmlElement(fixture, uploadInProgressDataTestId);
-    });
-
-    it('should render attachment in progress component on error', () => {
-      component.uploadInProgress$ = of({
-        ...createUploadFileInProgress(),
-        loading: false,
-        error: createApiError(),
-      });
-
-      fixture.detectChanges();
-
-      existsAsHtmlElement(fixture, uploadInProgressDataTestId);
-    });
-
-    it('should not render attachment in progress component when not loading and no error', () => {
-      component.uploadInProgress$ = of({
-        ...createUploadFileInProgress(),
-        loading: false,
-        error: null,
-      });
-
-      fixture.detectChanges();
-
-      notExistsAsHtmlElement(fixture, uploadInProgressDataTestId);
-    });
-  });
-
-  describe('ngOnInit', () => {
-    let loadExistingAttachments: jest.Mock;
-    let subscribeToAttachmentUpload: jest.Mock;
-
-    beforeEach(() => {
-      component.loadExistingAttachments = loadExistingAttachments = jest.fn();
-      component.subscribeToAttachmentUpload = subscribeToAttachmentUpload = jest.fn();
-    });
-
-    it('should load existing attachments', () => {
-      component.ngOnInit();
-
-      expect(loadExistingAttachments).toHaveBeenCalled();
-    });
-
-    it('should subscribe to attachments upload', () => {
-      component.ngOnInit();
-
-      expect(subscribeToAttachmentUpload).toHaveBeenCalled();
-    });
-
-    it('should get upload attachment in progress', () => {
-      component.ngOnInit();
-
-      expect(bescheidService.getUploadAttachmentInProgress).toHaveBeenCalled();
-    });
-  });
-
-  describe('ngOnDestroy', () => {
-    it('should unsubscribe', () => {
-      const subscription = mock(Subscription);
-      const observable = mock(Observable);
-      observable.subscribe.mockReturnValue(subscription);
-      bescheidService.getUploadedAttachment.mockReturnValue(observable);
-      component.ngOnInit();
-
-      component.ngOnDestroy();
-
-      expect(subscription.unsubscribe).toHaveBeenCalled();
-    });
-  });
-
-  describe('loadExistingAttachments', () => {
-    let attachment: BinaryFileResource;
-
-    beforeEach(() => {
-      attachment = createBinaryFileResource();
-      bescheidService.getAttachments.mockReturnValue(of([attachment]));
-    });
-
-    it('should get attachments', () => {
-      component.loadExistingAttachments();
-
-      expect(bescheidService.getAttachments).toHaveBeenCalled();
-    });
-
-    it('should set existing attachments', () => {
-      component.loadExistingAttachments();
-
-      expect(component.existingAttachments).toEqual([attachment]);
-    });
-
-    it('should reset uploaded attachments', () => {
-      component.uploadedAttachments = [createStateResource(createBinaryFileResource())];
-
-      component.loadExistingAttachments();
-
-      expect(component.uploadedAttachments).toEqual([]);
-    });
-  });
-
-  describe('subscribeToAttachmentUpload', () => {
-    let attachment: StateResource<BinaryFileResource>;
-
-    beforeEach(() => {
-      attachment = createLoadedBinaryFileResource();
-      bescheidService.getUploadedAttachment.mockReturnValue(of(attachment));
-    });
-
-    it('should should set uploaded attachments', () => {
-      component.buildUploadedAttachments = jest.fn().mockReturnValue([attachment]);
-
-      component.subscribeToAttachmentUpload();
-
-      expect(component.uploadedAttachments).toEqual([attachment]);
-    });
-  });
-
-  describe('buildUploadedAttachments', () => {
-    let uploadedAttachment: StateResource<BinaryFileResource>;
-    let uploadedAttachments: StateResource<BinaryFileResource>[];
-    let loadingAttachment: StateResource<BinaryFileResource>;
-
-    beforeEach(() => {
-      uploadedAttachment = createLoadedBinaryFileResource();
-      uploadedAttachments = [uploadedAttachment];
-      component.uploadedAttachments = uploadedAttachments;
-      loadingAttachment = createLoadingBinaryFileStateResource();
-    });
-
-    it('should add loaded state resource', () => {
-      const newBinaryFileResource = createLoadedBinaryFileResource();
-
-      const uploaded = component.buildUploadedAttachments(newBinaryFileResource);
-
-      expect(uploaded).toEqual([uploadedAttachment, newBinaryFileResource]);
-    });
-
-    it('should add error state resource', () => {
-      const errorStateResource = createErrorStateResource(createApiError());
-
-      const uploaded = component.buildUploadedAttachments(errorStateResource);
-
-      expect(uploaded).toEqual([uploadedAttachment, errorStateResource]);
-    });
-
-    it('should add loading state resource if none exists', () => {
-      const uploaded = component.buildUploadedAttachments(loadingAttachment);
-
-      expect(uploaded).toEqual([uploadedAttachment, loadingAttachment]);
-    });
-
-    it('should not add loading state resource if one exists', () => {
-      component.uploadedAttachments = [...component.uploadedAttachments, loadingAttachment];
-
-      const uploaded = component.buildUploadedAttachments(createLoadingBinaryFileStateResource());
-
-      expect(uploaded).toEqual([uploadedAttachment, loadingAttachment]);
-    });
-
-    it('should should not have error state resource if loading in progress', () => {
-      component.uploadedAttachments = [createErrorStateResource(createApiError())];
-
-      const uploaded = component.buildUploadedAttachments(loadingAttachment);
-
-      expect(uploaded).toEqual([loadingAttachment]);
-    });
-  });
-
-  describe('deleteFile', () => {
-    let existingAttachment: BinaryFileResource;
-    let uploadedAttachmentStateResource: StateResource<BinaryFileResource>;
-
-    beforeEach(() => {
-      existingAttachment = createBinaryFileResource();
-      uploadedAttachmentStateResource = createStateResource(createBinaryFileResource());
-    });
-
-    it('should call form service', () => {
-      const file = createBinaryFileResource();
-
-      component.deleteFile(file);
-
-      expect(formService.deleteFile).toHaveBeenCalledWith(file);
-    });
-
-    it('should delete attachment from uploaded', () => {
-      component.uploadedAttachments = [uploadedAttachmentStateResource];
-
-      component.deleteFile(uploadedAttachmentStateResource.resource);
-
-      expect(component.uploadedAttachments).toEqual([]);
-    });
-
-    it('should leave errors in uploaded', () => {
-      const error: StateResource<BinaryFileResource> = createStateResource(
-        createBinaryFileResource(),
-      );
-      component.uploadedAttachments = [error];
-
-      component.deleteFile(uploadedAttachmentStateResource.resource);
-
-      expect(component.uploadedAttachments).toEqual([error]);
-    });
-
-    it('should not delete attachment from existing', () => {
-      component.uploadedAttachments = [uploadedAttachmentStateResource];
-      component.existingAttachments = [existingAttachment];
-
-      component.deleteFile(uploadedAttachmentStateResource.resource);
-
-      expect(component.existingAttachments).toEqual([existingAttachment]);
-    });
-
-    it('should delete attachment from existing', () => {
-      component.existingAttachments = [existingAttachment];
-
-      component.deleteFile(existingAttachment);
-
-      expect(component.existingAttachments).toEqual([]);
-    });
-
-    it('should not delete attachment from existing', () => {
-      component.uploadedAttachments = [uploadedAttachmentStateResource];
-      component.existingAttachments = [existingAttachment];
-
-      component.deleteFile(existingAttachment);
-
-      expect(component.uploadedAttachments).toEqual([uploadedAttachmentStateResource]);
-    });
-  });
-});
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-attachments/vorgang-detail-bescheiden-result-attachments.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-attachments/vorgang-detail-bescheiden-result-attachments.component.ts
deleted file mode 100644
index 9095679deabf5902fdaed7faab0aafb234e6cda0..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-attachments/vorgang-detail-bescheiden-result-attachments.component.ts
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BescheidService, UploadFileInProgress } from '@alfa-client/bescheid-shared';
-import { BinaryFileResource } from '@alfa-client/binary-file-shared';
-import {
-  containsLoading,
-  getSuccessfullyLoaded,
-  hasStateResourceError,
-  isLoaded,
-  isNotNil,
-  StateResource,
-} from '@alfa-client/tech-shared';
-import { Component, Input, OnDestroy, OnInit } from '@angular/core';
-import { getUrl } from '@ngxp/rest';
-import { first, Observable, Subscription } from 'rxjs';
-import { BescheidenFormService } from '../../bescheiden.formservice';
-
-@Component({
-  selector: 'alfa-vorgang-detail-bescheiden-result-attachments',
-  templateUrl: './vorgang-detail-bescheiden-result-attachments.component.html',
-  styles: [],
-})
-export class VorgangDetailBescheidenResultAttachmentsComponent implements OnDestroy, OnInit {
-  @Input() public deletable: boolean;
-
-  existingAttachments: BinaryFileResource[] = [];
-  uploadedAttachments: StateResource<BinaryFileResource>[] = [];
-  uploadInProgress$: Observable<UploadFileInProgress>;
-
-  private attachmentUploadSubscription: Subscription;
-
-  constructor(
-    public formService: BescheidenFormService,
-    private readonly bescheidService: BescheidService,
-  ) {}
-
-  ngOnInit(): void {
-    this.uploadInProgress$ = this.bescheidService.getUploadAttachmentInProgress();
-    this.loadExistingAttachments();
-    this.subscribeToAttachmentUpload();
-  }
-
-  ngOnDestroy(): void {
-    if (isNotNil(this.attachmentUploadSubscription))
-      this.attachmentUploadSubscription.unsubscribe();
-  }
-
-  loadExistingAttachments() {
-    this.bescheidService
-      .getAttachments()
-      .pipe(first())
-      .subscribe((attachments) => {
-        this.uploadedAttachments = [];
-        this.existingAttachments = attachments;
-      });
-  }
-
-  subscribeToAttachmentUpload() {
-    this.attachmentUploadSubscription = this.bescheidService
-      .getUploadedAttachment()
-      .subscribe(
-        (stateResource: StateResource<BinaryFileResource>) =>
-          (this.uploadedAttachments = this.buildUploadedAttachments(stateResource)),
-      );
-  }
-
-  buildUploadedAttachments(
-    uploadStateResource: StateResource<BinaryFileResource>,
-  ): StateResource<BinaryFileResource>[] {
-    if (isLoaded(uploadStateResource) || hasStateResourceError(uploadStateResource)) {
-      return [...getSuccessfullyLoaded(this.uploadedAttachments), uploadStateResource];
-    } else if (uploadStateResource.loading && !containsLoading(this.uploadedAttachments)) {
-      return [...getSuccessfullyLoaded(this.uploadedAttachments), uploadStateResource];
-    }
-    return this.uploadedAttachments;
-  }
-
-  deleteFile(file: BinaryFileResource): void {
-    this.formService.deleteFile(file);
-    this.uploadedAttachments = this.uploadedAttachments.filter(
-      (attachment: StateResource<BinaryFileResource>) =>
-        !hasStateResourceError(attachment) && getUrl(attachment.resource) !== getUrl(file),
-    );
-    this.existingAttachments = this.existingAttachments.filter(
-      (attachment: BinaryFileResource) => getUrl(attachment) !== getUrl(file),
-    );
-  }
-}
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-dokument/vorgang-detail-bescheiden-result-dokument.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-dokument/vorgang-detail-bescheiden-result-dokument.component.html
deleted file mode 100644
index 549661320fea8f0ec24dd46a61d60959f3b360ed..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-dokument/vorgang-detail-bescheiden-result-dokument.component.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<!--
-
-    Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
-    Ministerpräsidenten des Landes Schleswig-Holstein
-    Staatskanzlei
-    Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-
-    Lizenziert unter der EUPL, Version 1.2 oder - sobald
-    diese von der Europäischen Kommission genehmigt wurden -
-    Folgeversionen der EUPL ("Lizenz");
-    Sie dürfen dieses Werk ausschließlich gemäß
-    dieser Lizenz nutzen.
-    Eine Kopie der Lizenz finden Sie hier:
-
-    https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-
-    Sofern nicht durch anwendbare Rechtsvorschriften
-    gefordert oder in schriftlicher Form vereinbart, wird
-    die unter der Lizenz verbreitete Software "so wie sie
-    ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-    ausdrücklich oder stillschweigend - verbreitet.
-    Die sprachspezifischen Genehmigungen und Beschränkungen
-    unter der Lizenz sind dem Lizenztext zu entnehmen.
-
--->
-<p
-  *ngIf="showMissingBescheidDocumentError"
-  data-test-id="missing-bescheid-document-error-message"
-  class="text-base text-error"
->
-  Bitte fügen Sie ein Bescheiddokument hinzu.
-</p>
-<ods-attachment-wrapper>
-  <ng-container *ngIf="bescheidDocumentFile.resource">
-    <alfa-binary-file2-container
-      *ngIf="
-        !bescheidDocumentFile.loading &&
-        !uploadBescheidDocumentInProgress.loading &&
-        !createDocumentInProgess.loading
-      "
-      [file]="bescheidDocumentFile.resource"
-      [deletable]="deletable"
-      (startDelete)="deleteFile.emit()"
-    >
-    </alfa-binary-file2-container>
-  </ng-container>
-  <ods-attachment
-    *ngIf="uploadBescheidDocumentInProgress.loading || uploadBescheidDocumentInProgress.error"
-    errorCaption="Fehler beim Hochladen"
-    [loadingCaption]="uploadBescheidDocumentInProgress.fileName"
-    [attr.data-test-id]="
-      'upload-bescheid-document-error-' + !!uploadBescheidDocumentInProgress.error
-    "
-    [isLoading]="uploadBescheidDocumentInProgress.loading"
-    [errorMessages]="uploadBescheidDocumentInProgress.error | convertProblemDetailToErrorMessages"
-    description="Bescheiddokument wird hochgeladen"
-  ></ods-attachment>
-  <ods-attachment
-    *ngIf="createDocumentInProgess.loading || hasCreateDocumentError"
-    errorCaption="Fehler beim automatischen Erstellen"
-    loadingCaption="Bescheiddokument"
-    description="Bescheiddokument wird erstellt"
-    [isLoading]="createDocumentInProgess.loading"
-    [errorMessages]="createDocumentErrorMessages"
-    data-test-id="create-bescheid-document-attachment"
-  ></ods-attachment>
-</ods-attachment-wrapper>
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-dokument/vorgang-detail-bescheiden-result-dokument.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-dokument/vorgang-detail-bescheiden-result-dokument.component.spec.ts
deleted file mode 100644
index 5ea0a01d388e0491b87552821b48f5df9fe32750..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-dokument/vorgang-detail-bescheiden-result-dokument.component.spec.ts
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BescheidLinkRel, BescheidResource, BescheidService } from '@alfa-client/bescheid-shared';
-import { BinaryFile2ContainerComponent } from '@alfa-client/binary-file';
-import { CommandResource } from '@alfa-client/command-shared';
-import {
-  StateResource,
-  createEmptyStateResource,
-  createStateResource,
-} from '@alfa-client/tech-shared';
-import { Mock, existsAsHtmlElement, mock, notExistsAsHtmlElement } from '@alfa-client/test-utils';
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { getUrl } from '@ngxp/rest';
-import { AttachmentComponent, AttachmentWrapperComponent } from '@ods/system';
-import { createBescheidResource } from 'libs/bescheid-shared/src/test/bescheid';
-import { createBinaryFileResource } from 'libs/binary-file-shared/test/binary-file';
-import { ConvertProblemDetailToErrorMessagesPipe } from 'libs/tech-shared/src/lib/pipe/convert-problem-detail-to-error-messages.pipe';
-import { getDataTestIdOf } from 'libs/tech-shared/test/data-test';
-import { createApiError } from 'libs/tech-shared/test/error';
-import { MockComponent, MockPipe } from 'ng-mocks';
-import {
-  createCommandErrorStateResource,
-  createCommandResource,
-  createCommandStateResource,
-} from '../../../../../../../command-shared/test/command';
-import { VorgangDetailBescheidenResultDokumentComponent } from './vorgang-detail-bescheiden-result-dokument.component';
-
-describe('VorgangDetailBescheidenResultDokumentComponent', () => {
-  let component: VorgangDetailBescheidenResultDokumentComponent;
-  let fixture: ComponentFixture<VorgangDetailBescheidenResultDokumentComponent>;
-
-  const createBescheidDocumentAttachment: string = getDataTestIdOf(
-    'create-bescheid-document-attachment',
-  );
-  const uploadBescheidDocumentError: string = getDataTestIdOf(
-    'upload-bescheid-document-error-true',
-  );
-  const missingBescheidDocumentErrorMessage: string = getDataTestIdOf(
-    'missing-bescheid-document-error-message',
-  );
-
-  let bescheidService: Mock<BescheidService>;
-
-  beforeEach(async () => {
-    bescheidService = mock(BescheidService);
-
-    await TestBed.configureTestingModule({
-      declarations: [
-        VorgangDetailBescheidenResultDokumentComponent,
-        MockComponent(BinaryFile2ContainerComponent),
-        MockComponent(AttachmentComponent),
-        MockComponent(AttachmentWrapperComponent),
-        MockPipe(ConvertProblemDetailToErrorMessagesPipe),
-      ],
-      providers: [
-        {
-          provide: BescheidService,
-          useValue: bescheidService,
-        },
-      ],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(VorgangDetailBescheidenResultDokumentComponent);
-    component = fixture.componentInstance;
-    component.bescheidDocumentFile = createStateResource(createBinaryFileResource());
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-
-  describe('render', () => {
-    it('should show error message for missing bescheid document', () => {
-      component.showMissingBescheidDocumentError = true;
-
-      fixture.detectChanges();
-
-      existsAsHtmlElement(fixture, missingBescheidDocumentErrorMessage);
-    });
-
-    it('should not show error message for missing bescheid document', () => {
-      component.showMissingBescheidDocumentError = false;
-
-      fixture.detectChanges();
-
-      notExistsAsHtmlElement(fixture, missingBescheidDocumentErrorMessage);
-    });
-
-    describe('create bescheid document ods-attachment', () => {
-      it('should be shown if error exists', () => {
-        component.createBescheidDocumentInProgress = createCommandErrorStateResource();
-
-        fixture.detectChanges();
-
-        existsAsHtmlElement(fixture, createBescheidDocumentAttachment);
-      });
-
-      it('should be shown while loading', () => {
-        component.createBescheidDocumentInProgress = createStateResource(
-          createCommandResource(),
-          true,
-        );
-
-        fixture.detectChanges();
-
-        existsAsHtmlElement(fixture, createBescheidDocumentAttachment);
-      });
-
-      it('should be hidden on loaded without error', () => {
-        component.createBescheidDocumentInProgress = createCommandStateResource();
-
-        fixture.detectChanges();
-
-        notExistsAsHtmlElement(fixture, createBescheidDocumentAttachment);
-      });
-    });
-  });
-
-  describe('handle bescheid document', () => {
-    it('should call service to load bescheid document by uri if link is present', () => {
-      const bescheid: BescheidResource = createBescheidResource([
-        BescheidLinkRel.BESCHEID_DOCUMENT,
-      ]);
-
-      component.handleBescheidDocument(bescheid);
-
-      expect(bescheidService.loadBescheidDocumentByUri).toHaveBeenCalledWith(
-        getUrl(bescheid, BescheidLinkRel.BESCHEID_DOCUMENT),
-      );
-    });
-
-    it('should NOT call service if link is missing', () => {
-      component.handleBescheidDocument(createBescheidResource());
-
-      expect(bescheidService.loadBescheidDocumentByUri).not.toHaveBeenCalled();
-    });
-  });
-
-  describe('upload bescheid document error', () => {
-    it('should be shown if error exists', () => {
-      component.uploadBescheidDocumentInProgress = { loading: false, error: createApiError() };
-
-      fixture.detectChanges();
-
-      existsAsHtmlElement(fixture, uploadBescheidDocumentError);
-    });
-
-    it('should be hidden on non error', () => {
-      component.uploadBescheidDocumentInProgress = { loading: false };
-
-      fixture.detectChanges();
-
-      notExistsAsHtmlElement(fixture, uploadBescheidDocumentError);
-    });
-  });
-
-  describe('set create bescheid document in progress', () => {
-    beforeEach(() => {
-      component.handleCreateBescheidDocumentCommandError = jest.fn();
-    });
-
-    it('should set create document in progress', () => {
-      const commandStateResource: StateResource<CommandResource> = createEmptyStateResource();
-
-      component.createBescheidDocumentInProgress = commandStateResource;
-
-      expect(component.createDocumentInProgess).toBe(commandStateResource);
-    });
-
-    it('should handle command error', () => {
-      const commandStateResource: StateResource<CommandResource> = createEmptyStateResource();
-
-      component.createBescheidDocumentInProgress = commandStateResource;
-
-      expect(component.handleCreateBescheidDocumentCommandError).toHaveBeenCalledWith(
-        commandStateResource,
-      );
-    });
-  });
-
-  describe('handleCreateBescheidDocumentCommandError', () => {
-    it('should set has error', () => {
-      component.handleCreateBescheidDocumentCommandError(createCommandErrorStateResource());
-
-      expect(component.hasCreateDocumentError).toBeTruthy();
-    });
-
-    it('should not set has error', () => {
-      component.handleCreateBescheidDocumentCommandError(createCommandStateResource());
-
-      expect(component.hasCreateDocumentError).toBeFalsy();
-    });
-
-    it('should not set has error on empty state resource', () => {
-      component.handleCreateBescheidDocumentCommandError(createEmptyStateResource());
-
-      expect(component.hasCreateDocumentError).toBeFalsy();
-    });
-
-    it('should set error messages', () => {
-      component.handleCreateBescheidDocumentCommandError(createCommandErrorStateResource());
-
-      expect(component.createDocumentErrorMessages).toEqual([
-        VorgangDetailBescheidenResultDokumentComponent.CREATE_DOCUMENT_ERROR_MESSAGE,
-      ]);
-    });
-
-    it('should not set error messages', () => {
-      component.handleCreateBescheidDocumentCommandError(createCommandStateResource());
-
-      expect(component.createDocumentErrorMessages).toEqual([]);
-    });
-  });
-});
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-dokument/vorgang-detail-bescheiden-result-dokument.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-dokument/vorgang-detail-bescheiden-result-dokument.component.ts
deleted file mode 100644
index 86b59f535b00aed46987c43c573e79dc4d957a24..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-dokument/vorgang-detail-bescheiden-result-dokument.component.ts
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import {
-  BescheidLinkRel,
-  BescheidResource,
-  BescheidService,
-  UploadFileInProgress,
-} from '@alfa-client/bescheid-shared';
-import { BinaryFileResource } from '@alfa-client/binary-file-shared';
-import { CommandResource, hasCommandError } from '@alfa-client/command-shared';
-import { createEmptyStateResource, isNotNil, StateResource } from '@alfa-client/tech-shared';
-import { Component, EventEmitter, Input, Output } from '@angular/core';
-import { getUrl, hasLink } from '@ngxp/rest';
-
-@Component({
-  selector: 'alfa-vorgang-detail-bescheiden-result-dokument',
-  templateUrl: './vorgang-detail-bescheiden-result-dokument.component.html',
-})
-export class VorgangDetailBescheidenResultDokumentComponent {
-  static readonly CREATE_DOCUMENT_ERROR_MESSAGE: string =
-    'Bescheiddokument konnte nicht erzeugt werden.';
-
-  @Input() bescheidDocumentFile: StateResource<BinaryFileResource>;
-  @Input() uploadBescheidDocumentInProgress: UploadFileInProgress = { loading: false };
-
-  @Input() set createBescheidDocumentInProgress(
-    commandStateResource: StateResource<CommandResource>,
-  ) {
-    this.createDocumentInProgess = commandStateResource;
-    this.handleCreateBescheidDocumentCommandError(commandStateResource);
-  }
-
-  @Input() set bescheidDraftStateResource(bescheidStateResource: StateResource<BescheidResource>) {
-    this.handleBescheidDocument(bescheidStateResource.resource);
-  }
-
-  @Input() public deletable: boolean;
-
-  @Input() public showMissingBescheidDocumentError: boolean;
-  @Output() deleteFile: EventEmitter<void> = new EventEmitter<void>();
-
-  createDocumentErrorMessages: string[] = [];
-  createDocumentInProgess: StateResource<CommandResource> = createEmptyStateResource();
-  hasCreateDocumentError: boolean = false;
-
-  constructor(private bescheidService: BescheidService) {}
-
-  handleBescheidDocument(bescheid: BescheidResource): void {
-    if (hasLink(bescheid, BescheidLinkRel.BESCHEID_DOCUMENT)) {
-      this.bescheidService.loadBescheidDocumentByUri(
-        getUrl(bescheid, BescheidLinkRel.BESCHEID_DOCUMENT),
-      );
-    }
-  }
-
-  handleCreateBescheidDocumentCommandError(
-    commandStateResource: StateResource<CommandResource>,
-  ): void {
-    this.hasCreateDocumentError =
-      isNotNil(commandStateResource.resource) && hasCommandError(commandStateResource.resource);
-    if (this.hasCreateDocumentError) {
-      this.createDocumentErrorMessages = [
-        VorgangDetailBescheidenResultDokumentComponent.CREATE_DOCUMENT_ERROR_MESSAGE,
-      ];
-    } else {
-      this.createDocumentErrorMessages = [];
-    }
-  }
-}
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-nachricht/vorgang-detail-bescheiden-result-nachricht.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-nachricht/vorgang-detail-bescheiden-result-nachricht.component.html
deleted file mode 100644
index 3f492daf368d4f0e5a3c2c75c4c5740a8cefb757..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-nachricht/vorgang-detail-bescheiden-result-nachricht.component.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<!--
-
-    Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
-    Ministerpräsidenten des Landes Schleswig-Holstein
-    Staatskanzlei
-    Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-
-    Lizenziert unter der EUPL, Version 1.2 oder - sobald
-    diese von der Europäischen Kommission genehmigt wurden -
-    Folgeversionen der EUPL ("Lizenz");
-    Sie dürfen dieses Werk ausschließlich gemäß
-    dieser Lizenz nutzen.
-    Eine Kopie der Lizenz finden Sie hier:
-
-    https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-
-    Sofern nicht durch anwendbare Rechtsvorschriften
-    gefordert oder in schriftlicher Form vereinbart, wird
-    die unter der Lizenz verbreitete Software "so wie sie
-    ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-    ausdrücklich oder stillschweigend - verbreitet.
-    Die sprachspezifischen Genehmigungen und Beschränkungen
-    unter der Lizenz sind dem Lizenztext zu entnehmen.
-
--->
-<h3 class="mb-3 font-medium text-primary">Neue Nachricht</h3>
-<p
-  *ngIf="empfaenger$ | async as empfaenger"
-  data-test-id="bescheid-nachricht-empfaenger"
-  class="mb-2 text-sm font-medium"
->
-  An: {{ empfaenger }}
-</p>
-<div [formGroup]="form">
-  <ods-text-editor
-    [formControlName]="formServiceClass.FIELD_NACHRICHT_SUBJECT"
-    label="Betreff"
-    placeholder="Betreff hier eingeben"
-    [focus]="focusBetreff"
-    [isRequired]="true"
-  >
-  </ods-text-editor>
-
-  <ods-textarea-editor
-    [formControlName]="formServiceClass.FIELD_NACHRICHT_TEXT"
-    label="Text"
-    placeholder="Nachrichtentext hier eingeben"
-    [focus]="focusNachricht"
-    [isRequired]="true"
-  >
-  </ods-textarea-editor>
-</div>
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-nachricht/vorgang-detail-bescheiden-result-nachricht.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-nachricht/vorgang-detail-bescheiden-result-nachricht.component.spec.ts
deleted file mode 100644
index 74477d48db034ee0193f40bc099eb7be07495c3f..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-nachricht/vorgang-detail-bescheiden-result-nachricht.component.spec.ts
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BescheidService, DocumentResource } from '@alfa-client/bescheid-shared';
-import {
-  createEmptyStateResource,
-  createErrorStateResource,
-  createStateResource,
-  StateResource,
-} from '@alfa-client/tech-shared';
-import { getElementFromFixture } from '@alfa-client/test-utils';
-import { registerLocaleData } from '@angular/common';
-import localeDe from '@angular/common/locales/de';
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { ReactiveFormsModule, UntypedFormBuilder } from '@angular/forms';
-import { faker } from '@faker-js/faker';
-import { TextareaEditorComponent, TextEditorComponent } from '@ods/component';
-import { Mock, mock, useFromMock } from 'libs/test-utils/src/lib/mocking';
-import { OzgcloudSvgIconComponent } from 'libs/ui/src/lib/ui/ozgcloud-svgicon/ozgcloud-svgicon.component';
-import { MockComponent } from 'ng-mocks';
-import { EMPTY, of } from 'rxjs';
-import { createDocumentResource } from '../../../../../../../bescheid-shared/src/test/document';
-import { getDataTestIdOf } from '../../../../../../../tech-shared/test/data-test';
-import { createApiError } from '../../../../../../../tech-shared/test/error';
-import { singleColdCompleted } from '../../../../../../../tech-shared/test/marbles';
-import { BescheidenFormService } from '../../bescheiden.formservice';
-import { VorgangDetailBescheidenResultNachrichtComponent } from './vorgang-detail-bescheiden-result-nachricht.component';
-
-registerLocaleData(localeDe);
-
-describe('VorgangDetailBescheidenResultNachrichtComponent', () => {
-  let component: VorgangDetailBescheidenResultNachrichtComponent;
-  let fixture: ComponentFixture<VorgangDetailBescheidenResultNachrichtComponent>;
-
-  let bescheidService: Mock<BescheidService>;
-  let formService: BescheidenFormService;
-
-  const bescheidNachrichtEmpfaengerElement: string = getDataTestIdOf(
-    'bescheid-nachricht-empfaenger',
-  );
-
-  beforeEach(async () => {
-    bescheidService = mock(BescheidService);
-    formService = new BescheidenFormService(new UntypedFormBuilder(), useFromMock(bescheidService));
-
-    await TestBed.configureTestingModule({
-      imports: [ReactiveFormsModule],
-      declarations: [
-        VorgangDetailBescheidenResultNachrichtComponent,
-        MockComponent(OzgcloudSvgIconComponent),
-        MockComponent(TextEditorComponent),
-        MockComponent(TextareaEditorComponent),
-      ],
-      providers: [
-        {
-          provide: BescheidService,
-          useValue: bescheidService,
-        },
-        {
-          provide: BescheidenFormService,
-          useValue: formService,
-        },
-      ],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(VorgangDetailBescheidenResultNachrichtComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-
-  describe('render', () => {
-    it('should render Nachrichtenempfänger', () => {
-      const empfaenger: string = `${faker.person.firstName()} ${faker.person.lastName()}`;
-      bescheidService.getEmpfaenger.mockReturnValue(of(empfaenger));
-      component.ngOnInit();
-
-      fixture.detectChanges();
-
-      const element = getElementFromFixture(fixture, bescheidNachrichtEmpfaengerElement);
-      expect(element).toBeInstanceOf(HTMLElement);
-    });
-
-    it('should not render Nachrichtenempfänger', () => {
-      bescheidService.getEmpfaenger.mockReturnValue(EMPTY);
-      component.ngOnInit();
-
-      fixture.detectChanges();
-
-      const element = getElementFromFixture(fixture, bescheidNachrichtEmpfaengerElement);
-      expect(element).not.toBeInstanceOf(HTMLElement);
-    });
-  });
-
-  describe('ngOnInit', () => {
-    it('should set Nachrichtenempfänger', () => {
-      const empfaenger: string = `${faker.person.firstName()} ${faker.person.lastName()}`;
-      bescheidService.getEmpfaenger.mockReturnValue(of(empfaenger));
-
-      component.ngOnInit();
-
-      expect(component.empfaenger$).toBeObservable(singleColdCompleted(empfaenger));
-    });
-  });
-
-  describe('set bescheidDocumentStateResource', () => {
-    beforeEach(() => {
-      formService.patchNachricht = jest.fn();
-    });
-
-    it('should patch form', () => {
-      const documentStateResource: StateResource<DocumentResource> =
-        createStateResource(createDocumentResource());
-      jest.spyOn(formService.form, 'valid', 'get').mockReturnValue(true);
-
-      component.bescheidDocumentStateResource = documentStateResource;
-
-      expect(formService.patchNachricht).toHaveBeenCalledWith(documentStateResource.resource);
-    });
-
-    it('should not patch if form is invalid', () => {
-      const documentStateResource: StateResource<DocumentResource> =
-        createStateResource(createDocumentResource());
-      jest.spyOn(formService.form, 'valid', 'get').mockReturnValue(false);
-
-      component.bescheidDocumentStateResource = documentStateResource;
-
-      expect(formService.patchNachricht).not.toHaveBeenCalledWith(documentStateResource.resource);
-    });
-
-    it('should not patch form if document loading', () => {
-      component.bescheidDocumentStateResource = { ...createEmptyStateResource(), loading: true };
-
-      expect(formService.patchNachricht).not.toHaveBeenCalled();
-    });
-
-    it('should not patch form if document loaded with error', () => {
-      component.bescheidDocumentStateResource = createErrorStateResource(createApiError());
-
-      expect(formService.patchNachricht).not.toHaveBeenCalled();
-    });
-
-    it.each([null, undefined])(
-      'should not patch form if document resource is %s',
-      (resource: DocumentResource) => {
-        component.bescheidDocumentStateResource = createStateResource(resource);
-
-        expect(formService.patchNachricht).not.toHaveBeenCalled();
-      },
-    );
-  });
-
-  describe('resetFocus', () => {
-    it('should reset betreff focus', () => {
-      component.focusBetreff = true;
-
-      component.resetFocus();
-
-      expect(component.focusBetreff).toBeFalsy();
-    });
-
-    it('should reset nachricht focus', () => {
-      component.focusNachricht = true;
-
-      component.resetFocus();
-
-      expect(component.focusNachricht).toBeFalsy();
-    });
-  });
-
-  describe('sendWithNachrichtCommandStateResource', () => {
-    beforeEach(() => {
-      component.resetFocus = jest.fn();
-    });
-
-    it('should reset focus', () => {
-      component.sendWithNachrichtCommandStateResource = createEmptyStateResource();
-
-      expect(component.resetFocus).toHaveBeenCalled();
-    });
-
-    it('should focus betreff', () => {
-      component.focusBetreff = false;
-      formService.isBetreffInvalid = jest.fn().mockReturnValue(true);
-      formService.isNachrichtInvalid = jest.fn().mockReturnValue(false);
-
-      component.sendWithNachrichtCommandStateResource = createErrorStateResource(createApiError());
-
-      expect(component.focusBetreff).toBeTruthy();
-    });
-
-    it('should focus nachricht', () => {
-      component.focusNachricht = false;
-      formService.isBetreffInvalid = jest.fn().mockReturnValue(false);
-      formService.isNachrichtInvalid = jest.fn().mockReturnValue(true);
-
-      component.sendWithNachrichtCommandStateResource = createErrorStateResource(createApiError());
-
-      expect(component.focusNachricht).toBeTruthy();
-    });
-
-    it('should focus betreff first', () => {
-      component.focusNachricht = false;
-      component.focusBetreff = false;
-      formService.isBetreffInvalid = jest.fn().mockReturnValue(true);
-      formService.isNachrichtInvalid = jest.fn().mockReturnValue(true);
-
-      component.sendWithNachrichtCommandStateResource = createErrorStateResource(createApiError());
-
-      expect(component.focusBetreff).toBeTruthy();
-      expect(component.focusNachricht).toBeFalsy();
-    });
-  });
-});
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-nachricht/vorgang-detail-bescheiden-result-nachricht.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-nachricht/vorgang-detail-bescheiden-result-nachricht.component.ts
deleted file mode 100644
index 9805935d7bf121a66c3c384046acfbb33f620261..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-nachricht/vorgang-detail-bescheiden-result-nachricht.component.ts
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BescheidService, DocumentResource } from '@alfa-client/bescheid-shared';
-import { CommandResource } from '@alfa-client/command-shared';
-import { hasStateResourceError, isNotNil, StateResource } from '@alfa-client/tech-shared';
-import { Component, Input, OnInit } from '@angular/core';
-import { FormGroup } from '@angular/forms';
-import { Observable } from 'rxjs';
-import { BescheidenFormService } from '../../bescheiden.formservice';
-
-@Component({
-  selector: 'alfa-vorgang-detail-bescheiden-result-nachricht',
-  templateUrl: './vorgang-detail-bescheiden-result-nachricht.component.html',
-})
-export class VorgangDetailBescheidenResultNachrichtComponent implements OnInit {
-  @Input()
-  set bescheidDocumentStateResource(stateResource: StateResource<DocumentResource>) {
-    if (!stateResource.loading && !stateResource.error && isNotNil(stateResource.resource)) {
-      if (isNotNil(this.form) && this.form.valid) {
-        this.formService.patchNachricht(stateResource.resource);
-      }
-    }
-  }
-
-  @Input()
-  set sendWithNachrichtCommandStateResource(stateResource: StateResource<CommandResource>) {
-    this.resetFocus();
-    if (isNotNil(stateResource) && hasStateResourceError(stateResource)) {
-      if (this.formService.isBetreffInvalid()) {
-        this.focusBetreff = true;
-      } else if (this.formService.isNachrichtInvalid()) {
-        this.focusNachricht = true;
-      }
-    }
-  }
-
-  resetFocus() {
-    this.focusBetreff = false;
-    this.focusNachricht = false;
-  }
-
-  empfaenger$: Observable<string>;
-  form: FormGroup;
-
-  public focusBetreff: boolean = false;
-  public focusNachricht: boolean = false;
-
-  readonly formServiceClass = BescheidenFormService;
-
-  constructor(
-    private readonly bescheidService: BescheidService,
-    private readonly formService: BescheidenFormService,
-  ) {}
-
-  ngOnInit(): void {
-    this.empfaenger$ = this.bescheidService.getEmpfaenger();
-    this.form = this.formService.form;
-  }
-}
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-status/vorgang-detail-bescheiden-result-status.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-status/vorgang-detail-bescheiden-result-status.component.html
deleted file mode 100644
index 8326ca0d520668acd781ed322ee654779d593958..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-status/vorgang-detail-bescheiden-result-status.component.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!--
-
-    Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
-    Ministerpräsidenten des Landes Schleswig-Holstein
-    Staatskanzlei
-    Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-
-    Lizenziert unter der EUPL, Version 1.2 oder - sobald
-    diese von der Europäischen Kommission genehmigt wurden -
-    Folgeversionen der EUPL ("Lizenz");
-    Sie dürfen dieses Werk ausschließlich gemäß
-    dieser Lizenz nutzen.
-    Eine Kopie der Lizenz finden Sie hier:
-
-    https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-
-    Sofern nicht durch anwendbare Rechtsvorschriften
-    gefordert oder in schriftlicher Form vereinbart, wird
-    die unter der Lizenz verbreitete Software "so wie sie
-    ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-    ausdrücklich oder stillschweigend - verbreitet.
-    Die sprachspezifischen Genehmigungen und Beschränkungen
-    unter der Lizenz sind dem Lizenztext zu entnehmen.
-
--->
-<ods-bescheid-status-text
-  [bewilligt]="bescheid.bewilligt"
-  [dateText]="bescheid.beschiedenAm | date: 'dd.MM.yyyy'"
-  [hasBescheidDraft]="false"
-></ods-bescheid-status-text>
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-status/vorgang-detail-bescheiden-result-status.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-status/vorgang-detail-bescheiden-result-status.component.spec.ts
deleted file mode 100644
index cab1ef05621a6e784834e5296528fc6aa3e8a320..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-status/vorgang-detail-bescheiden-result-status.component.spec.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { registerLocaleData } from '@angular/common';
-import localeDe from '@angular/common/locales/de';
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { MatIcon } from '@angular/material/icon';
-import { MatIconTestingModule } from '@angular/material/icon/testing';
-import { BescheidStatusTextComponent } from '@ods/system';
-import { createBescheid } from 'libs/bescheid-shared/src/test/bescheid';
-import { FormatFullDatePipe } from 'libs/tech-shared/src/lib/pipe/format-full-date.pipe';
-import { OzgcloudSvgIconComponent } from 'libs/ui/src/lib/ui/ozgcloud-svgicon/ozgcloud-svgicon.component';
-import { MockComponent } from 'ng-mocks';
-import { VorgangDetailBescheidenResultStatusComponent } from './vorgang-detail-bescheiden-result-status.component';
-
-registerLocaleData(localeDe);
-
-describe('VorgangDetailBescheidenResultStatusComponent', () => {
-  let component: VorgangDetailBescheidenResultStatusComponent;
-  let fixture: ComponentFixture<VorgangDetailBescheidenResultStatusComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      imports: [MatIconTestingModule],
-      declarations: [
-        VorgangDetailBescheidenResultStatusComponent,
-        MatIcon,
-        FormatFullDatePipe,
-        MockComponent(OzgcloudSvgIconComponent),
-        MockComponent(BescheidStatusTextComponent),
-      ],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(VorgangDetailBescheidenResultStatusComponent);
-    component = fixture.componentInstance;
-    component.bescheid = createBescheid();
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-status/vorgang-detail-bescheiden-result-status.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-status/vorgang-detail-bescheiden-result-status.component.ts
deleted file mode 100644
index 37662cc9de142103c614263b7c28b0848755de40..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-status/vorgang-detail-bescheiden-result-status.component.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { Bescheid } from '@alfa-client/bescheid-shared';
-import { Component, Input } from '@angular/core';
-
-@Component({
-  selector: 'alfa-vorgang-detail-bescheiden-result-status',
-  templateUrl: './vorgang-detail-bescheiden-result-status.component.html',
-})
-export class VorgangDetailBescheidenResultStatusComponent {
-  @Input() bescheid: Bescheid;
-}
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result.component.html
deleted file mode 100644
index 1f1fef09c56f5e02db3a38fe54aa85107223fc5e..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result.component.html
+++ /dev/null
@@ -1,134 +0,0 @@
-<!--
-
-    Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
-    Ministerpräsidenten des Landes Schleswig-Holstein
-    Staatskanzlei
-    Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-
-    Lizenziert unter der EUPL, Version 1.2 oder - sobald
-    diese von der Europäischen Kommission genehmigt wurden -
-    Folgeversionen der EUPL ("Lizenz");
-    Sie dürfen dieses Werk ausschließlich gemäß
-    dieser Lizenz nutzen.
-    Eine Kopie der Lizenz finden Sie hier:
-
-    https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-
-    Sofern nicht durch anwendbare Rechtsvorschriften
-    gefordert oder in schriftlicher Form vereinbart, wird
-    die unter der Lizenz verbreitete Software "so wie sie
-    ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-    ausdrücklich oder stillschweigend - verbreitet.
-    Die sprachspezifischen Genehmigungen und Beschränkungen
-    unter der Lizenz sind dem Lizenztext zu entnehmen.
-
--->
-<section
-  class="flex w-full flex-col justify-between overflow-auto rounded-xl bg-background-100 px-4 py-5"
-  *ngIf="{
-    activeStep: activeStep$ | async,
-    sendByManual: sendByManual$ | async
-  } as wizardData"
-  tabindex="0"
->
-  <div class="flex-1">
-    <h3
-      *ngIf="wizardData.sendByManual || wizardData.activeStep !== 3"
-      class="mb-4 text-base font-bold text-primary-600"
-    >
-      Bescheid
-    </h3>
-
-    <div
-      class="my-4"
-      data-test-id="bescheid-status-text"
-      *ngIf="
-        wizardData.activeStep === 1 ||
-        wizardData.activeStep === 2 ||
-        (wizardData.activeStep === 3 && wizardData.sendByManual)
-      "
-    >
-      <alfa-vorgang-detail-bescheiden-result-status
-        data-test-id="bescheid-status"
-        [bescheid]="bescheid$ | async"
-      ></alfa-vorgang-detail-bescheiden-result-status>
-    </div>
-
-    <div *ngIf="!wizardData.sendByManual && wizardData.activeStep === 3 && (canSend$ | async)">
-      <alfa-vorgang-detail-bescheiden-result-nachricht
-        [bescheidDocumentStateResource]="bescheidDocument$ | async"
-        [sendWithNachrichtCommandStateResource]="sendWithNachricht$ | async"
-        data-test-id="bescheid-nachricht-an-antragsteller"
-      ></alfa-vorgang-detail-bescheiden-result-nachricht>
-    </div>
-
-    <div
-      class="my-4"
-      *ngIf="
-        wizardData.activeStep === 2 ||
-        (wizardData.activeStep === 3 && (wizardData.sendByManual || (canSend$ | async)))
-      "
-      data-test-id="bescheid-status-dokument"
-    >
-      <alfa-vorgang-detail-bescheiden-result-dokument
-        data-test-id="bescheid-document"
-        [deletable]="wizardData.activeStep === 2"
-        [bescheidDraftStateResource]="bescheidDraftStateResource$ | async"
-        [uploadBescheidDocumentInProgress]="uploadBescheidDocumentInProgress$ | async"
-        [createBescheidDocumentInProgress]="createBescheidDocumentInProgress$ | async"
-        [bescheidDocumentFile]="bescheidDocumentFile$ | async"
-        [showMissingBescheidDocumentError]="showMissingBescheidDocumentError$ | async"
-        (deleteFile)="deleteBescheidDocument()"
-      ></alfa-vorgang-detail-bescheiden-result-dokument>
-    </div>
-
-    <div
-      class="my-4"
-      data-test-id="bescheid-status-attachments"
-      *ngIf="
-        wizardData.activeStep === 2 ||
-        (wizardData.activeStep === 3 && (wizardData.sendByManual || (canSend$ | async)))
-      "
-    >
-      <alfa-vorgang-detail-bescheiden-result-attachments
-        [deletable]="wizardData.activeStep === 2"
-        data-test-id="bescheid-attachments"
-      ></alfa-vorgang-detail-bescheiden-result-attachments>
-    </div>
-  </div>
-  <div class="flex-none">
-    <div class="flex flex-col">
-      <ng-container *ngIf="wizardData.sendByManual && wizardData.activeStep === 3">
-        <p class="mb-8 text-base font-normal text-text">
-          Der Bescheid muss manuell versendet werden.
-        </p>
-
-        <ng-container *ngIf="bescheidDraftStateResource$ | async as bescheidDraftStateResource">
-          <ods-button-with-spinner
-            class="self-end"
-            *ngIf="canSave$ | async"
-            data-test-id="confirm-and-save-button"
-            [stateResource]="saveAndSendInProgress$ | async"
-            text="Antrag bescheiden und speichern"
-            (clickEmitter)="saveAndSendManually(bescheidDraftStateResource.resource)"
-          ></ods-button-with-spinner>
-        </ng-container>
-        <!-- -->
-      </ng-container>
-      <ng-container
-        *ngIf="wizardData.activeStep === 3 && !wizardData.sendByManual && (canSend$ | async)"
-      >
-        <ng-container *ngIf="bescheidDraftStateResource$ | async as bescheidDraftStateResource">
-          <ods-button-with-spinner
-            class="self-end"
-            *ngIf="canSend$ | async"
-            data-test-id="send-button"
-            [stateResource]="saveAndSendInProgress$ | async"
-            text="Bescheid senden"
-            (clickEmitter)="saveAndSendWithNachricht(bescheidDraftStateResource.resource)"
-          ></ods-button-with-spinner>
-        </ng-container>
-      </ng-container>
-    </div>
-  </div>
-</section>
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result.component.spec.ts
deleted file mode 100644
index 48eff7cb96f976e67260ca3bc8d6cb84723900cb..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result.component.spec.ts
+++ /dev/null
@@ -1,719 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BescheidLinkRel, BescheidResource, BescheidService } from '@alfa-client/bescheid-shared';
-import { CommandOrder, CommandResource } from '@alfa-client/command-shared';
-import {
-  createEmptyStateResource,
-  createStateResource,
-  StateResource,
-} from '@alfa-client/tech-shared';
-import {
-  dispatchEventFromFixture,
-  existsAsHtmlElement,
-  getElementFromFixture,
-  Mock,
-  mock,
-  notExistsAsHtmlElement,
-} from '@alfa-client/test-utils';
-import { OzgcloudButtonWithSpinnerComponent } from '@alfa-client/ui';
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { ButtonWithSpinnerComponent } from '@ods/component';
-import {
-  createBescheidResource,
-  createBescheidStateResource,
-} from 'libs/bescheid-shared/src/test/bescheid';
-import { CommandLinkRel } from 'libs/command-shared/src/lib/command.linkrel';
-import {
-  createCommandResource,
-  createCommandStateResource,
-} from 'libs/command-shared/test/command';
-import { getDataTestIdOf } from 'libs/tech-shared/test/data-test';
-import { MockComponent } from 'ng-mocks';
-import { BehaviorSubject, EMPTY, first, of } from 'rxjs';
-import { singleColdCompleted } from '../../../../../../tech-shared/test/marbles';
-import { BescheidenFormService } from '../bescheiden.formservice';
-import { VorgangDetailBescheidenResultAttachmentsComponent } from './vorgang-detail-bescheiden-result-attachments/vorgang-detail-bescheiden-result-attachments.component';
-import { VorgangDetailBescheidenResultDokumentComponent } from './vorgang-detail-bescheiden-result-dokument/vorgang-detail-bescheiden-result-dokument.component';
-import { VorgangDetailBescheidenResultNachrichtComponent } from './vorgang-detail-bescheiden-result-nachricht/vorgang-detail-bescheiden-result-nachricht.component';
-import { VorgangDetailBescheidenResultStatusComponent } from './vorgang-detail-bescheiden-result-status/vorgang-detail-bescheiden-result-status.component';
-import { VorgangDetailBescheidenResultComponent } from './vorgang-detail-bescheiden-result.component';
-
-describe('VorgangDetailBescheidenResultComponent', () => {
-  let component: VorgangDetailBescheidenResultComponent;
-  let fixture: ComponentFixture<VorgangDetailBescheidenResultComponent>;
-
-  let bescheidService: Mock<BescheidService>;
-  let formService: Mock<BescheidenFormService>;
-
-  const bescheidStatus: string = getDataTestIdOf('bescheid-status');
-  const bescheidDocument: string = getDataTestIdOf('bescheid-document');
-  const bescheidAttachments: string = getDataTestIdOf('bescheid-attachments');
-  const saveAndSendButton: string = getDataTestIdOf('confirm-and-save-button');
-  const sendButton: string = getDataTestIdOf('send-button');
-  const nachrichtAntragstellerComponent = getDataTestIdOf('bescheid-nachricht-an-antragsteller');
-
-  beforeEach(async () => {
-    bescheidService = mock(BescheidService);
-    bescheidService.getBescheidDraft.mockReturnValue(EMPTY);
-
-    formService = mock(BescheidenFormService);
-    formService.getBescheidChanges.mockReturnValue(
-      new BehaviorSubject({ beschiedenAm: new Date(), bewilligt: false }),
-    );
-    formService.getActiveStep.mockReturnValue(EMPTY);
-    formService.isSendByManual.mockReturnValue(EMPTY);
-
-    await TestBed.configureTestingModule({
-      declarations: [
-        VorgangDetailBescheidenResultComponent,
-        MockComponent(VorgangDetailBescheidenResultStatusComponent),
-        MockComponent(VorgangDetailBescheidenResultDokumentComponent),
-        MockComponent(VorgangDetailBescheidenResultAttachmentsComponent),
-        MockComponent(OzgcloudButtonWithSpinnerComponent),
-        MockComponent(VorgangDetailBescheidenResultNachrichtComponent),
-        MockComponent(ButtonWithSpinnerComponent),
-      ],
-      providers: [
-        {
-          provide: BescheidService,
-          useValue: bescheidService,
-        },
-        {
-          provide: BescheidenFormService,
-          useValue: formService,
-        },
-      ],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(VorgangDetailBescheidenResultComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-
-  describe('render Nachricht component', () => {
-    it('should render', () => {
-      formService.getActiveStep.mockReturnValue(of(3));
-      formService.isSendByManual.mockReturnValue(of(false));
-      component.ngOnInit();
-      component.canSend$ = of(true);
-
-      fixture.detectChanges();
-
-      const element = getElementFromFixture(fixture, nachrichtAntragstellerComponent);
-      expect(element).toBeInstanceOf(HTMLElement);
-    });
-
-    it.each([1, 2])('should not render in step %d', (step) => {
-      formService.getActiveStep.mockReturnValue(of(step));
-      formService.isSendByManual.mockReturnValue(of(false));
-      component.ngOnInit();
-      component.canSend$ = of(true);
-
-      fixture.detectChanges();
-
-      const element = getElementFromFixture(fixture, nachrichtAntragstellerComponent);
-      expect(element).not.toBeInstanceOf(HTMLElement);
-    });
-
-    it('should not render if send by manual', () => {
-      formService.getActiveStep.mockReturnValue(of(3));
-      formService.isSendByManual.mockReturnValue(of(true));
-      component.ngOnInit();
-      component.canSend$ = of(true);
-
-      fixture.detectChanges();
-
-      const element = getElementFromFixture(fixture, nachrichtAntragstellerComponent);
-      expect(element).not.toBeInstanceOf(HTMLElement);
-    });
-
-    it('should not render if postfach not configured', () => {
-      formService.getActiveStep.mockReturnValue(of(3));
-      formService.isSendByManual.mockReturnValue(of(false));
-      component.ngOnInit();
-      component.canSend$ = of(false);
-
-      fixture.detectChanges();
-
-      const element = getElementFromFixture(fixture, nachrichtAntragstellerComponent);
-      expect(element).not.toBeInstanceOf(HTMLElement);
-    });
-  });
-
-  describe('render send button', () => {
-    it('should render', () => {
-      formService.getActiveStep.mockReturnValue(of(3));
-      formService.isSendByManual.mockReturnValue(of(false));
-      bescheidService.getBescheidDraft.mockReturnValue(
-        of(createStateResource(createBescheidResource())),
-      );
-      component.ngOnInit();
-      component.canSend$ = of(true);
-
-      fixture.detectChanges();
-
-      const element = getElementFromFixture(fixture, sendButton);
-      expect(element).toBeInstanceOf(HTMLElement);
-    });
-
-    it.each([1, 2])('should not render in step %d', (step) => {
-      formService.getActiveStep.mockReturnValue(of(step));
-      formService.isSendByManual.mockReturnValue(of(false));
-      component.ngOnInit();
-      component.canSend$ = of(true);
-
-      fixture.detectChanges();
-
-      const element = getElementFromFixture(fixture, sendButton);
-      expect(element).not.toBeInstanceOf(HTMLElement);
-    });
-
-    it('should not render if send by manual', () => {
-      formService.getActiveStep.mockReturnValue(of(3));
-      formService.isSendByManual.mockReturnValue(of(true));
-      component.ngOnInit();
-      component.canSend$ = of(true);
-
-      fixture.detectChanges();
-
-      const element = getElementFromFixture(fixture, sendButton);
-      expect(element).not.toBeInstanceOf(HTMLElement);
-    });
-
-    it('should not render if postfach not configured', () => {
-      formService.getActiveStep.mockReturnValue(of(3));
-      formService.isSendByManual.mockReturnValue(of(false));
-      component.ngOnInit();
-      component.canSend$ = of(false);
-
-      fixture.detectChanges();
-
-      const element = getElementFromFixture(fixture, sendButton);
-      expect(element).not.toBeInstanceOf(HTMLElement);
-    });
-  });
-
-  describe('ngOnInit', () => {
-    it('should call service to get bescheid document file', () => {
-      component.ngOnInit();
-
-      expect(bescheidService.getBescheidDocumentFile).toHaveBeenCalled();
-    });
-
-    it('should call service to get bescheid draft', () => {
-      component.ngOnInit();
-
-      expect(bescheidService.getBescheidDraft).toHaveBeenCalled();
-    });
-
-    it('should call service to get bescheid document', () => {
-      component.ngOnInit();
-
-      expect(bescheidService.getBescheidDocument).toHaveBeenCalled();
-    });
-
-    it('should call formservice to get current bescheid/formular', () => {
-      component.ngOnInit();
-
-      expect(formService.getBescheidChanges).toHaveBeenCalled();
-    });
-
-    it('should get is send by manual', () => {
-      component.getIsSendManually = jest.fn();
-
-      component.ngOnInit();
-
-      expect(component.getIsSendManually).toHaveBeenCalled();
-    });
-
-    it('should call service to get upload bescheid document in progress', () => {
-      component.ngOnInit();
-
-      expect(bescheidService.getUploadBescheidDocumentInProgress).toHaveBeenCalled();
-    });
-
-    it('should call service to get create bescheid document in progress', () => {
-      component.ngOnInit();
-
-      expect(bescheidService.getCreateBescheidDocumentInProgress).toHaveBeenCalled();
-    });
-
-    it('should get active step', () => {
-      component.getActiveStep = jest.fn();
-
-      component.ngOnInit();
-
-      expect(component.getActiveStep).toHaveBeenCalled();
-    });
-
-    describe('canSave$', () => {
-      it('should emit true', () => {
-        bescheidService.getBescheidDraft.mockReturnValue(
-          of(createBescheidStateResource([BescheidLinkRel.BESCHEIDEN])),
-        );
-        component.ngOnInit();
-
-        expect(component.canSave$).toBeObservable(singleColdCompleted(true));
-      });
-
-      it('should emit false', () => {
-        bescheidService.getBescheidDraft.mockReturnValue(of(createBescheidStateResource()));
-        component.ngOnInit();
-
-        expect(component.canSave$).toBeObservable(singleColdCompleted(false));
-      });
-    });
-
-    describe('canSend$', () => {
-      it('should emit true', () => {
-        bescheidService.getBescheidDraft.mockReturnValue(
-          of(createBescheidStateResource([BescheidLinkRel.BESCHEIDEN_UND_SENDEN])),
-        );
-        component.ngOnInit();
-
-        expect(component.canSend$).toBeObservable(singleColdCompleted(true));
-      });
-
-      it('should emit false', () => {
-        bescheidService.getBescheidDraft.mockReturnValue(of(createBescheidStateResource()));
-        component.ngOnInit();
-
-        expect(component.canSend$).toBeObservable(singleColdCompleted(false));
-      });
-    });
-
-    describe('showMissingBescheidDocumentError$', () => {
-      it('should emit true', () => {
-        formService.getShowMissingBescheidDocumentError.mockReturnValue(of(true));
-
-        component.ngOnInit();
-
-        expect(component.showMissingBescheidDocumentError$).toBeObservable(
-          singleColdCompleted(true),
-        );
-      });
-
-      it('should emit false', () => {
-        formService.getShowMissingBescheidDocumentError.mockReturnValue(of(false));
-
-        component.ngOnInit();
-
-        expect(component.showMissingBescheidDocumentError$).toBeObservable(
-          singleColdCompleted(false),
-        );
-      });
-    });
-  });
-
-  describe('deleteBescheidDocument', () => {
-    it('should call service to delete bescheid document', () => {
-      component.deleteBescheidDocument();
-
-      expect(bescheidService.deleteBescheidDocument).toHaveBeenCalled();
-    });
-
-    it('should clear bescheid document file', () => {
-      component.deleteBescheidDocument();
-
-      expect(formService.clearBescheidDocumentFile).toHaveBeenCalled();
-    });
-  });
-
-  describe('save and send manually', () => {
-    const bescheidDraft: BescheidResource = createBescheidResource();
-    const bescheidStateResource: StateResource<BescheidResource> =
-      createStateResource(bescheidDraft);
-
-    beforeEach(() => {
-      component.bescheidDraftStateResource$ = of(bescheidStateResource);
-      component.sendByManual$ = of(true);
-      component.activeStep$ = of(3);
-    });
-
-    it('should clear nachricht', () => {
-      component.doUpdateAndSend = jest.fn();
-
-      component.saveAndSendManually(bescheidDraft);
-
-      expect(formService.clearNachricht).toHaveBeenCalled();
-    });
-
-    it('should call component on event dispatch', () => {
-      component.saveAndSendManually = jest.fn();
-      component.canSave$ = of(true);
-
-      fixture.detectChanges();
-
-      dispatchEventFromFixture(fixture, saveAndSendButton, 'clickEmitter');
-
-      expect(component.saveAndSendManually).toHaveBeenCalledWith(bescheidDraft);
-    });
-
-    it('should call do update and send', () => {
-      component.doUpdateAndSend = jest.fn();
-
-      component.saveAndSendManually(bescheidDraft);
-
-      expect(component.doUpdateAndSend).toHaveBeenCalled();
-    });
-  });
-
-  describe('save and send with Nachricht', () => {
-    const bescheidDraft: BescheidResource = createBescheidResource();
-    const bescheidStateResource: StateResource<BescheidResource> =
-      createStateResource(bescheidDraft);
-    let doUpdateAndSendMock: jest.Mock;
-
-    beforeEach(() => {
-      component.bescheidDraftStateResource$ = of(bescheidStateResource);
-      component.sendByManual$ = of(true);
-      component.activeStep$ = of(3);
-      doUpdateAndSendMock = component.doUpdateAndSend = jest.fn();
-    });
-
-    it('should call do update and send', () => {
-      component.saveAndSendWithNachricht(bescheidDraft);
-
-      expect(doUpdateAndSendMock).toHaveBeenCalledWith(bescheidDraft, expect.any(Function));
-    });
-
-    it('should send bescheid to antragsteller', () => {
-      bescheidService.sendBescheidToAntragsteller.mockReturnValue(of(createCommandStateResource()));
-      component.saveAndSendWithNachricht(bescheidDraft);
-      const sendCallback = doUpdateAndSendMock.mock.calls[0][1];
-
-      sendCallback(bescheidDraft);
-
-      expect(bescheidService.sendBescheidToAntragsteller).toHaveBeenCalledWith(bescheidDraft);
-    });
-
-    it('should emit send nachricht', () => {
-      const sendCommandStateResource: StateResource<CommandResource> = createCommandStateResource();
-      bescheidService.sendBescheidToAntragsteller.mockReturnValue(of(sendCommandStateResource));
-      component.saveAndSendWithNachricht(bescheidDraft);
-      const sendCallback = doUpdateAndSendMock.mock.calls[0][1];
-
-      sendCallback(bescheidDraft).subscribe();
-
-      expect(component.sendWithNachricht$.value).toEqual(sendCommandStateResource);
-    });
-  });
-
-  describe('doUpdateAndSend', () => {
-    const bescheidDraft: BescheidResource = createBescheidResource();
-    const commandStateResource: StateResource<CommandResource> = createStateResource(
-      createCommandResource([CommandLinkRel.EFFECTED_RESOURCE]),
-    );
-
-    beforeEach(() => {
-      component.sendByManual$ = of(true);
-      formService.submit = jest.fn().mockReturnValue(of(commandStateResource));
-    });
-
-    it('should call formservice submit', () => {
-      component.doUpdateAndSend(bescheidDraft, jest.fn()).subscribe();
-
-      expect(formService.submit).toHaveBeenCalled();
-    });
-
-    it('should call send after successfully update', () => {
-      component.doSendAfterSuccessfullyUpdate = jest.fn();
-      const sendMock = jest.fn();
-
-      component.doUpdateAndSend(bescheidDraft, sendMock).subscribe();
-
-      expect(component.doSendAfterSuccessfullyUpdate).toHaveBeenCalledWith(bescheidDraft, sendMock);
-    });
-
-    it('should close dialog on successfully done command', () => {
-      const sendMock = jest.fn();
-      formService.submit = jest.fn().mockReturnValue(
-        of(
-          createStateResource({
-            ...createCommandResource([CommandLinkRel.EFFECTED_RESOURCE]),
-            order: CommandOrder.SEND_BESCHEID,
-          }),
-        ),
-      );
-      const emit = (component.closeDialog.emit = jest.fn());
-
-      component.doUpdateAndSend(bescheidDraft, sendMock).subscribe();
-
-      expect(emit).toHaveBeenCalled();
-    });
-  });
-
-  describe('doSendAfterSuccessfullyUpdate', () => {
-    const bescheidDraft: BescheidResource = createBescheidResource();
-
-    it('should call send', () => {
-      const commandStateResource: StateResource<CommandResource> = createStateResource(
-        createCommandResource([CommandLinkRel.EFFECTED_RESOURCE]),
-      );
-      const sendMock = jest.fn();
-
-      component
-        .doSendAfterSuccessfullyUpdate(bescheidDraft, sendMock)(of(commandStateResource))
-        .subscribe();
-
-      expect(sendMock).toHaveBeenCalled();
-    });
-
-    it('should not call send', () => {
-      const commandStateResource: StateResource<CommandResource> = createEmptyStateResource();
-      const sendMock = jest.fn();
-
-      component
-        .doSendAfterSuccessfullyUpdate(bescheidDraft, sendMock)(of(commandStateResource))
-        .subscribe();
-
-      expect(sendMock).not.toHaveBeenCalled();
-    });
-  });
-
-  describe('bescheid status text', () => {
-    it('should NOT be visible on NOT send by manual', () => {
-      component.sendByManual$ = of(false);
-
-      fixture.detectChanges();
-
-      notExistsAsHtmlElement(fixture, bescheidStatus);
-    });
-
-    it('should NOT be visible on step 3 and NOT send by manual', () => {
-      component.sendByManual$ = of(false);
-      component.activeStep$ = of(3);
-
-      fixture.detectChanges();
-
-      notExistsAsHtmlElement(fixture, bescheidStatus);
-    });
-  });
-
-  describe('bescheid document', () => {
-    it('should NOT be visible on NOT send by manual', () => {
-      component.sendByManual$ = of(false);
-
-      fixture.detectChanges();
-
-      notExistsAsHtmlElement(fixture, bescheidDocument);
-    });
-
-    it('should NOT be visible on step 3', () => {
-      component.sendByManual$ = of(false);
-      component.activeStep$ = of(3);
-
-      fixture.detectChanges();
-
-      notExistsAsHtmlElement(fixture, bescheidDocument);
-    });
-
-    it('should NOT be visible on step 1', () => {
-      component.sendByManual$ = of(false);
-      component.activeStep$ = of(1);
-
-      fixture.detectChanges();
-
-      notExistsAsHtmlElement(fixture, bescheidDocument);
-    });
-
-    it('should be visible in step 3 when link exists', () => {
-      component.sendByManual$ = of(false);
-      component.activeStep$ = of(3);
-      component.canSend$ = of(true);
-
-      fixture.detectChanges();
-
-      existsAsHtmlElement(fixture, bescheidDocument);
-    });
-  });
-
-  describe('bescheid attachments', () => {
-    it('should NOT be visible on NOT send by manual', () => {
-      component.sendByManual$ = of(false);
-
-      fixture.detectChanges();
-
-      notExistsAsHtmlElement(fixture, bescheidAttachments);
-    });
-
-    it('should NOT be visible on step 3', () => {
-      component.sendByManual$ = of(false);
-      component.activeStep$ = of(3);
-
-      fixture.detectChanges();
-
-      notExistsAsHtmlElement(fixture, bescheidAttachments);
-    });
-
-    it('should NOT be visible on step 1', () => {
-      component.sendByManual$ = of(false);
-      component.activeStep$ = of(1);
-
-      fixture.detectChanges();
-
-      notExistsAsHtmlElement(fixture, bescheidAttachments);
-    });
-
-    it('should be visible in step 3 when postfach is configured', () => {
-      component.sendByManual$ = of(false);
-      component.activeStep$ = of(3);
-      component.canSend$ = of(true);
-
-      fixture.detectChanges();
-
-      existsAsHtmlElement(fixture, bescheidAttachments);
-    });
-  });
-
-  describe('update and bescheiden', () => {
-    it('should NOT be visible on step 1', () => {
-      component.sendByManual$ = of(false);
-
-      fixture.detectChanges();
-
-      notExistsAsHtmlElement(fixture, saveAndSendButton);
-    });
-
-    it('should NOT be visible on setp 2', () => {
-      component.sendByManual$ = of(false);
-
-      fixture.detectChanges();
-
-      notExistsAsHtmlElement(fixture, saveAndSendButton);
-    });
-    it('should NOT be visible on step 3 and NOT send by manual', () => {
-      component.sendByManual$ = of(false);
-
-      fixture.detectChanges();
-
-      notExistsAsHtmlElement(fixture, saveAndSendButton);
-    });
-  });
-
-  describe('resetSend', () => {
-    it('should set to empty state resource', () => {
-      component.saveAndSendInProgress$ = of(createStateResource(createCommandResource()));
-
-      component.resetSend();
-
-      expect(component.saveAndSendInProgress$).toBeObservable(
-        singleColdCompleted(createEmptyStateResource()),
-      );
-    });
-  });
-
-  describe('get active step', () => {
-    it('should call formService', () => {
-      component.getActiveStep().subscribe();
-
-      expect(formService.getActiveStep).toHaveBeenCalled();
-    });
-
-    it.each([1, VorgangDetailBescheidenResultComponent.BESCHEID_VERSENDEN_STEP])(
-      'should call bescheidService to clear attachment upload on step %s',
-      (step: number) => {
-        formService.getActiveStep.mockReturnValue(of(step));
-
-        component.getActiveStep().subscribe();
-
-        expect(bescheidService.clearAttachmentUpload).toHaveBeenCalled();
-      },
-    );
-
-    describe('reset send', () => {
-      beforeEach(() => {
-        component.resetSend = jest.fn();
-      });
-
-      it.each([1, VorgangDetailBescheidenResultComponent.ADD_DOCUMENTS_STEP])(
-        'should be called on step %s',
-        (step: number) => {
-          formService.getActiveStep.mockReturnValue(of(step));
-
-          component.getActiveStep().subscribe();
-
-          expect(component.resetSend).toHaveBeenCalled();
-        },
-      );
-
-      it('should not be called on last step', () => {
-        formService.getActiveStep.mockReturnValue(of(3));
-
-        component.getActiveStep().subscribe();
-
-        expect(component.resetSend).not.toHaveBeenCalled();
-      });
-    });
-  });
-
-  describe('reset send', () => {
-    it('should clear saveAndSendInProgress', (done) => {
-      component.saveAndSendInProgress$ = of(createCommandStateResource());
-
-      component.resetSend();
-
-      component.saveAndSendInProgress$
-        .subscribe((saveAndSendInProgress: StateResource<CommandResource>) => {
-          expect(saveAndSendInProgress).toEqual(createEmptyStateResource());
-          done();
-        });
-    });
-
-    it('should clear sendWithNachricht', () => {
-      component.sendWithNachricht$.next(createCommandStateResource());
-
-      component.resetSend();
-
-      expect(component.sendWithNachricht$.value).toEqual(createEmptyStateResource());
-    });
-  });
-
-  describe('getIsSendManually', () => {
-    beforeEach(() => {
-      component.resetSend = jest.fn();
-    });
-
-    it('should get is send by manual from from service', () => {
-      component.getIsSendManually();
-
-      expect(formService.isSendByManual).toHaveBeenCalled();
-    });
-
-    it.each([true, false])(
-      'should reset send if send by manual is %s',
-      (isSendByManual: boolean) => {
-        formService.isSendByManual.mockReturnValue(of(isSendByManual));
-
-        component.getIsSendManually().subscribe();
-
-        expect(component.resetSend).toHaveBeenCalled();
-      },
-    );
-  });
-});
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result.component.ts
deleted file mode 100644
index 5b77ac192ea34a4479534bef624a6ba3e24bb3ac..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result.component.ts
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import {
-  Bescheid,
-  BescheidLinkRel,
-  BescheidResource,
-  BescheidService,
-  DocumentResource,
-  UploadFileInProgress,
-} from '@alfa-client/bescheid-shared';
-import { BinaryFileResource } from '@alfa-client/binary-file-shared';
-import {
-  CommandOrder,
-  CommandResource,
-  switchMapCommandSuccessfullyDone,
-  tapOnCommandSuccessfullyDone,
-} from '@alfa-client/command-shared';
-import { createEmptyStateResource, isLoaded, StateResource } from '@alfa-client/tech-shared';
-import { Component, EventEmitter, OnInit, Output } from '@angular/core';
-import { hasLink } from '@ngxp/rest';
-import { BehaviorSubject, filter, map, Observable, of, OperatorFunction, tap } from 'rxjs';
-import { BescheidenFormService } from '../bescheiden.formservice';
-
-type sendBescheid = (BescheidResource: BescheidResource) => Observable<StateResource<CommandResource>>;
-
-@Component({
-  selector: 'alfa-vorgang-detail-bescheiden-result',
-  templateUrl: './vorgang-detail-bescheiden-result.component.html',
-})
-export class VorgangDetailBescheidenResultComponent implements OnInit {
-  static readonly ADD_DOCUMENTS_STEP: number = 2;
-  static readonly BESCHEID_VERSENDEN_STEP: number = 3;
-
-  @Output() closeDialog: EventEmitter<void> = new EventEmitter();
-
-  public activeStep$: Observable<number>;
-  public bescheid$: Observable<Bescheid>;
-  public sendByManual$: Observable<boolean>;
-
-  public bescheidDraftStateResource$: Observable<StateResource<BescheidResource>> =
-    of(createEmptyStateResource<BescheidResource>());
-  public bescheidDocumentFile$: Observable<StateResource<BinaryFileResource>> =
-    of(createEmptyStateResource<BinaryFileResource>());
-  public bescheidDocument$: Observable<StateResource<DocumentResource>> = of(createEmptyStateResource<DocumentResource>());
-  public saveAndSendInProgress$: Observable<StateResource<CommandResource>> = of(createEmptyStateResource<CommandResource>());
-
-  public uploadBescheidDocumentInProgress$: Observable<UploadFileInProgress> = of({
-    loading: false,
-  });
-
-  public createBescheidDocumentInProgress$: Observable<StateResource<CommandResource>> =
-    of(createEmptyStateResource<CommandResource>());
-
-  public sendWithNachricht$: BehaviorSubject<StateResource<CommandResource>> = new BehaviorSubject(
-    createEmptyStateResource<CommandResource>(),
-  );
-
-  public canSave$: Observable<boolean> = of(true);
-  public canSend$: Observable<boolean> = of(true);
-  public showMissingBescheidDocumentError$: Observable<boolean> = of(false);
-
-  public bescheidLinkRel = BescheidLinkRel;
-
-  constructor(
-    private bescheidService: BescheidService,
-    public formService: BescheidenFormService,
-  ) {}
-
-  ngOnInit(): void {
-    this.bescheidDraftStateResource$ = this.bescheidService.getBescheidDraft();
-    this.bescheidDocumentFile$ = this.bescheidService.getBescheidDocumentFile();
-    this.uploadBescheidDocumentInProgress$ = this.bescheidService.getUploadBescheidDocumentInProgress();
-    this.createBescheidDocumentInProgress$ = this.bescheidService.getCreateBescheidDocumentInProgress();
-    this.bescheidDocument$ = this.bescheidService.getBescheidDocument();
-
-    this.activeStep$ = this.getActiveStep();
-    this.bescheid$ = this.formService.getBescheidChanges();
-    this.sendByManual$ = this.getIsSendManually();
-
-    this.canSave$ = this.bescheidDraftStateResource$.pipe(
-      filter(isLoaded),
-      map((stateResource: StateResource<BescheidResource>) => hasLink(stateResource.resource, BescheidLinkRel.BESCHEIDEN)),
-    );
-    this.canSend$ = this.bescheidDraftStateResource$.pipe(
-      filter(isLoaded),
-      map((stateResource: StateResource<BescheidResource>) =>
-        hasLink(stateResource.resource, BescheidLinkRel.BESCHEIDEN_UND_SENDEN),
-      ),
-    );
-    this.showMissingBescheidDocumentError$ = this.formService.getShowMissingBescheidDocumentError();
-  }
-
-  getActiveStep(): Observable<number> {
-    return this.formService.getActiveStep().pipe(tap((step: number) => this.resetStateOnStepChange(step)));
-  }
-
-  getIsSendManually(): Observable<boolean> {
-    return this.formService.isSendByManual().pipe(tap(() => this.resetSend()));
-  }
-
-  private resetStateOnStepChange(step: number): void {
-    if (this.isNotLast(step)) this.resetSend();
-    if (this.shouldClearAttachmentInProgress(step)) this.bescheidService.clearAttachmentUpload();
-  }
-
-  private isNotLast(step: number): boolean {
-    return step < VorgangDetailBescheidenResultComponent.BESCHEID_VERSENDEN_STEP;
-  }
-
-  private shouldClearAttachmentInProgress(step: number): boolean {
-    return step != VorgangDetailBescheidenResultComponent.ADD_DOCUMENTS_STEP;
-  }
-
-  resetSend(): void {
-    this.saveAndSendInProgress$ = of(createEmptyStateResource<CommandResource>());
-    this.sendWithNachricht$.next(createEmptyStateResource<CommandResource>());
-  }
-
-  public deleteBescheidDocument(): void {
-    this.formService.clearBescheidDocumentFile();
-    this.bescheidService.deleteBescheidDocument();
-  }
-
-  public saveAndSendManually(bescheidDraft: BescheidResource): void {
-    this.formService.clearNachricht();
-    this.saveAndSendInProgress$ = this.doUpdateAndSend(bescheidDraft, (bescheidResource) =>
-      this.bescheidService.sendBescheidManually(bescheidResource),
-    );
-  }
-
-  public saveAndSendWithNachricht(bescheidDraft: BescheidResource): void {
-    this.saveAndSendInProgress$ = this.doUpdateAndSend(bescheidDraft, (bescheidResource) =>
-      this.bescheidService
-        .sendBescheidToAntragsteller(bescheidResource)
-        .pipe(
-          tap((sendCommandStateResource: StateResource<CommandResource>) =>
-            this.sendWithNachricht$.next(sendCommandStateResource),
-          ),
-        ),
-    );
-  }
-
-  doUpdateAndSend(bescheidDraft: BescheidResource, send: sendBescheid): Observable<StateResource<CommandResource>> {
-    return this.formService.submit(this.doSendAfterSuccessfullyUpdate(bescheidDraft, send)).pipe(
-      tapOnCommandSuccessfullyDone((commandStateResource: StateResource<CommandResource>) => {
-        if (this.isSendBescheidCommand(commandStateResource)) {
-          this.closeDialog.emit();
-        }
-      }),
-    );
-  }
-
-  doSendAfterSuccessfullyUpdate(
-    bescheidDraft: BescheidResource,
-    send: sendBescheid,
-  ): OperatorFunction<StateResource<CommandResource>, StateResource<CommandResource>> {
-    return switchMapCommandSuccessfullyDone(() => send(bescheidDraft));
-  }
-
-  private isSendBescheidCommand(commandStateResource: StateResource<CommandResource>): boolean {
-    return commandStateResource.resource.order == CommandOrder.SEND_BESCHEID;
-  }
-}
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-buttons/vorgang-detail-bescheiden-step-button/vorgang-detail-bescheiden-step-button.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-buttons/vorgang-detail-bescheiden-step-button/vorgang-detail-bescheiden-step-button.component.html
deleted file mode 100644
index ebdc411aa0cc5ffaaed9348339c0817af48b2838..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-buttons/vorgang-detail-bescheiden-step-button/vorgang-detail-bescheiden-step-button.component.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<!--
-
-    Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
-    Ministerpräsidenten des Landes Schleswig-Holstein
-    Staatskanzlei
-    Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-
-    Lizenziert unter der EUPL, Version 1.2 oder - sobald
-    diese von der Europäischen Kommission genehmigt wurden -
-    Folgeversionen der EUPL ("Lizenz");
-    Sie dürfen dieses Werk ausschließlich gemäß
-    dieser Lizenz nutzen.
-    Eine Kopie der Lizenz finden Sie hier:
-
-    https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-
-    Sofern nicht durch anwendbare Rechtsvorschriften
-    gefordert oder in schriftlicher Form vereinbart, wird
-    die unter der Lizenz verbreitete Software "so wie sie
-    ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-    ausdrücklich oder stillschweigend - verbreitet.
-    Die sprachspezifischen Genehmigungen und Beschränkungen
-    unter der Lizenz sind dem Lizenztext zu entnehmen.
-
--->
-<div class="relative z-10 flex min-h-28 flex-col items-center">
-  <div
-    class="-z-1 absolute w-1"
-    [ngClass]="
-      step === 1 ?
-        isPrevious() ? 'bottom-0 top-2 bg-primary-600'
-        : 'bottom-0 top-2 bg-gray-500'
-      : step === 2 ?
-        isPrevious() ? 'bottom-0 top-0 bg-primary-600'
-        : 'bottom-0 top-0 bg-gray-500'
-      : step === 3 ?
-        isActive() ? 'top-0 h-2  bg-primary-600'
-        : 'top-0 h-2 bg-gray-500'
-      : ''
-    "
-    aria-hidden="true"
-  ></div>
-
-  <button
-    class="z-10 flex"
-    (click)="clickHandler(step)"
-    [ngClass]="isPrevious() ? 'cursor-pointer' : 'cursor-default'"
-    [attr.data-test-id]="
-      step === 1 ? 'step-1-button'
-      : step === 2 ? 'step-2-button'
-      : step === 3 ? 'step-3-button'
-      : ''
-    "
-    role="tab"
-    [attr.aria-selected]="isActive()"
-    [attr.aria-disabled]="!isActive()"
-    attr.aria-controls="vorgang-detail-bescheiden-step-content-{{ step }}"
-    [tabindex]="
-      isActive() ? '0'
-      : isPrevious() ? '0'
-      : '-1'
-    "
-    [attr.aria-label]="
-      step === 1 ? 'Step 1. Antrag bescheiden'
-      : step === 2 ? 'Step 2. Dokumente hinzufügen'
-      : step === 3 ? 'Step 3. Bescheid versenden'
-      : ''
-    "
-  >
-    <span
-      class="flex size-10 items-center justify-center rounded-full"
-      [ngClass]="
-        isActive() ?
-          'border-4 border-primary-600 bg-background-50'
-        : 'border-transparent bg-transparent'
-      "
-    >
-      <span
-        class="flex size-7 items-center justify-center rounded-full text-sm text-whitetext"
-        [ngClass]="isPrevious() || isActive() ? 'bg-primary-600' : 'bg-gray-500'"
-      >
-        {{ step }}
-      </span>
-    </span>
-  </button>
-</div>
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-buttons/vorgang-detail-bescheiden-step-button/vorgang-detail-bescheiden-step-button.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-buttons/vorgang-detail-bescheiden-step-button/vorgang-detail-bescheiden-step-button.component.spec.ts
deleted file mode 100644
index 80d87d9ba66ebeaf56908ce56266ae501417a6ec..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-buttons/vorgang-detail-bescheiden-step-button/vorgang-detail-bescheiden-step-button.component.spec.ts
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { mock } from '@alfa-client/test-utils';
-import { EventEmitter } from '@angular/core';
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { VorgangDetailBescheidenStepButtonComponent } from './vorgang-detail-bescheiden-step-button.component';
-
-describe('VorgangDetailBescheidenStepButtonComponent', () => {
-  let component: VorgangDetailBescheidenStepButtonComponent;
-  let fixture: ComponentFixture<VorgangDetailBescheidenStepButtonComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [VorgangDetailBescheidenStepButtonComponent],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(VorgangDetailBescheidenStepButtonComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-
-  describe('isActive', () => {
-    it('return true if step equals activeStep', () => {
-      component.step = 2;
-      component.activeStep = 2;
-
-      expect(component.isActive()).toBeTruthy();
-    });
-
-    it('return false if step not equals activeStep', () => {
-      component.step = 1;
-      component.activeStep = 2;
-
-      expect(component.isActive()).toBeFalsy();
-    });
-  });
-
-  describe('isPrevious', () => {
-    it('return true if step is less than activeStep', () => {
-      component.step = 1;
-      component.activeStep = 2;
-
-      expect(component.isPrevious()).toBeTruthy();
-    });
-
-    it('return false if step equals activeStep', () => {
-      component.step = 2;
-      component.activeStep = 2;
-
-      expect(component.isPrevious()).toBeFalsy();
-    });
-
-    it('return false if step is greater than activeStep', () => {
-      component.step = 3;
-      component.activeStep = 2;
-
-      expect(component.isPrevious()).toBeFalsy();
-    });
-  });
-
-  describe('isNext', () => {
-    it('return false if step is less than activeStep', () => {
-      component.step = 1;
-      component.activeStep = 2;
-
-      expect(component.isNext()).toBeFalsy();
-    });
-
-    it('return false if step equals activeStep', () => {
-      component.step = 2;
-      component.activeStep = 2;
-
-      expect(component.isNext()).toBeFalsy();
-    });
-
-    it('return true if step is greater than activeStep', () => {
-      component.step = 3;
-      component.activeStep = 2;
-
-      expect(component.isNext()).toBeTruthy();
-    });
-  });
-
-  describe('clickHandler', () => {
-    const isPreviousMock = jest.fn();
-    beforeEach(() => {
-      component.isPrevious = isPreviousMock;
-      component.activeStepChange = <any>mock(EventEmitter);
-    });
-
-    it('should emit step', () => {
-      isPreviousMock.mockReturnValue(true);
-
-      component.clickHandler(1);
-
-      expect(component.activeStepChange.emit).toHaveBeenCalledWith(1);
-    });
-
-    it('should not emit step', () => {
-      isPreviousMock.mockReturnValue(false);
-
-      component.clickHandler(1);
-
-      expect(component.activeStepChange.emit).not.toHaveBeenCalled();
-    });
-  });
-});
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-buttons/vorgang-detail-bescheiden-step-button/vorgang-detail-bescheiden-step-button.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-buttons/vorgang-detail-bescheiden-step-button/vorgang-detail-bescheiden-step-button.component.ts
deleted file mode 100644
index 31db0b3d312a443b44bb5dfce4ca48312e8f081b..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-buttons/vorgang-detail-bescheiden-step-button/vorgang-detail-bescheiden-step-button.component.ts
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { Component, EventEmitter, Input, Output } from '@angular/core';
-
-@Component({
-  selector: 'alfa-vorgang-detail-bescheiden-step-button',
-  templateUrl: './vorgang-detail-bescheiden-step-button.component.html',
-})
-export class VorgangDetailBescheidenStepButtonComponent {
-  @Input() step: number;
-  @Input() activeStep: number;
-  @Output() activeStepChange = new EventEmitter<number>();
-
-  clickHandler(step: number): void {
-    if (this.isPrevious()) {
-      this.activeStepChange.emit(step);
-    }
-  }
-
-  isActive(): boolean {
-    return this.step === this.activeStep;
-  }
-
-  isPrevious(): boolean {
-    return this.step < this.activeStep;
-  }
-
-  isNext(): boolean {
-    return this.step > this.activeStep;
-  }
-}
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-buttons/vorgang-detail-bescheiden-step-buttons.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-buttons/vorgang-detail-bescheiden-step-buttons.component.html
deleted file mode 100644
index cab555ca05bae46a71f42f86ca9ace915ad4c98e..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-buttons/vorgang-detail-bescheiden-step-buttons.component.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<!--
-
-    Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
-    Ministerpräsidenten des Landes Schleswig-Holstein
-    Staatskanzlei
-    Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-
-    Lizenziert unter der EUPL, Version 1.2 oder - sobald
-    diese von der Europäischen Kommission genehmigt wurden -
-    Folgeversionen der EUPL ("Lizenz");
-    Sie dürfen dieses Werk ausschließlich gemäß
-    dieser Lizenz nutzen.
-    Eine Kopie der Lizenz finden Sie hier:
-
-    https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-
-    Sofern nicht durch anwendbare Rechtsvorschriften
-    gefordert oder in schriftlicher Form vereinbart, wird
-    die unter der Lizenz verbreitete Software "so wie sie
-    ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-    ausdrücklich oder stillschweigend - verbreitet.
-    Die sprachspezifischen Genehmigungen und Beschränkungen
-    unter der Lizenz sind dem Lizenztext zu entnehmen.
-
--->
-<div role="tablist">
-  <alfa-vorgang-detail-bescheiden-step-button
-    [activeStep]="activeStep"
-    (activeStepChange)="changeActiveStep($event)"
-    [step]="1"
-  ></alfa-vorgang-detail-bescheiden-step-button>
-  <alfa-vorgang-detail-bescheiden-step-button
-    [activeStep]="activeStep"
-    (activeStepChange)="changeActiveStep($event)"
-    [step]="2"
-  ></alfa-vorgang-detail-bescheiden-step-button>
-  <alfa-vorgang-detail-bescheiden-step-button
-    [activeStep]="activeStep"
-    (activeStepChange)="changeActiveStep($event)"
-    [step]="3"
-  ></alfa-vorgang-detail-bescheiden-step-button>
-</div>
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-buttons/vorgang-detail-bescheiden-step-buttons.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-buttons/vorgang-detail-bescheiden-step-buttons.component.spec.ts
deleted file mode 100644
index c20c00972f5b3e09dce3b3455aa2ec25e3f453e0..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-buttons/vorgang-detail-bescheiden-step-buttons.component.spec.ts
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BescheidService } from '@alfa-client/bescheid-shared';
-import { Mock, mock } from '@alfa-client/test-utils';
-import { EventEmitter } from '@angular/core';
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { MockComponent } from 'ng-mocks';
-import { BescheidenFormService } from '../../bescheiden.formservice';
-import { VorgangDetailBescheidenStepButtonComponent } from './vorgang-detail-bescheiden-step-button/vorgang-detail-bescheiden-step-button.component';
-import { VorgangDetailBescheidenStepButtonsComponent } from './vorgang-detail-bescheiden-step-buttons.component';
-
-describe('VorgangDetailBescheidenStepButtonsComponent', () => {
-  let component: VorgangDetailBescheidenStepButtonsComponent;
-  let fixture: ComponentFixture<VorgangDetailBescheidenStepButtonsComponent>;
-
-  const formService: Mock<BescheidenFormService> = mock(BescheidenFormService);
-  const bescheidService: Mock<BescheidService> = mock(BescheidService);
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [
-        VorgangDetailBescheidenStepButtonsComponent,
-        MockComponent(VorgangDetailBescheidenStepButtonComponent),
-      ],
-      providers: [
-        {
-          provide: BescheidenFormService,
-          useValue: formService,
-        },
-        {
-          provide: BescheidService,
-          useValue: bescheidService,
-        },
-      ],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(VorgangDetailBescheidenStepButtonsComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-
-  describe('changeActiveStep', () => {
-    const step: number = 1;
-    beforeEach(() => {
-      component.activeStepChange = <any>mock(EventEmitter);
-    });
-
-    it('should emit step', () => {
-      component.changeActiveStep(step);
-
-      expect(component.activeStepChange.emit).toHaveBeenCalledWith(step);
-    });
-
-    it('should set active step in formservice', () => {
-      component.changeActiveStep(step);
-
-      expect(formService.setActiveStep).toHaveBeenCalledWith(step);
-    });
-  });
-});
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-buttons/vorgang-detail-bescheiden-step-buttons.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-buttons/vorgang-detail-bescheiden-step-buttons.component.ts
deleted file mode 100644
index 41e080d47b77c6f46fed0a914131e8df9fc3f501..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-buttons/vorgang-detail-bescheiden-step-buttons.component.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { Component, EventEmitter, Input, Output } from '@angular/core';
-import { BescheidenFormService } from '../../bescheiden.formservice';
-
-@Component({
-  selector: 'alfa-vorgang-detail-bescheiden-step-buttons',
-  templateUrl: './vorgang-detail-bescheiden-step-buttons.component.html',
-})
-export class VorgangDetailBescheidenStepButtonsComponent {
-  @Input() activeStep: number = 1;
-  @Output() activeStepChange = new EventEmitter<number>();
-
-  constructor(private formService: BescheidenFormService) {}
-
-  public changeActiveStep(step: number): void {
-    this.formService.setActiveStep(step);
-    this.activeStepChange.emit(step);
-  }
-}
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-title/vorgang-detail-bescheiden-step-title.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-title/vorgang-detail-bescheiden-step-title.component.html
deleted file mode 100644
index 8a82e62b23b248ab3ba1b6521b34f0b6eba6538f..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-title/vorgang-detail-bescheiden-step-title.component.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!--
-
-    Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
-    Ministerpräsidenten des Landes Schleswig-Holstein
-    Staatskanzlei
-    Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-
-    Lizenziert unter der EUPL, Version 1.2 oder - sobald
-    diese von der Europäischen Kommission genehmigt wurden -
-    Folgeversionen der EUPL ("Lizenz");
-    Sie dürfen dieses Werk ausschließlich gemäß
-    dieser Lizenz nutzen.
-    Eine Kopie der Lizenz finden Sie hier:
-
-    https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-
-    Sofern nicht durch anwendbare Rechtsvorschriften
-    gefordert oder in schriftlicher Form vereinbart, wird
-    die unter der Lizenz verbreitete Software "so wie sie
-    ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-    ausdrücklich oder stillschweigend - verbreitet.
-    Die sprachspezifischen Genehmigungen und Beschränkungen
-    unter der Lizenz sind dem Lizenztext zu entnehmen.
-
--->
-<div class="text-base font-bold text-primary-600" data-test-id="step-caption">
-  {{ label }}
-</div>
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-title/vorgang-detail-bescheiden-step-title.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-title/vorgang-detail-bescheiden-step-title.component.spec.ts
deleted file mode 100644
index 1f353186741ab865b0ce29209c74de7869b24794..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-title/vorgang-detail-bescheiden-step-title.component.spec.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { VorgangDetailBescheidenStepTitleComponent } from './vorgang-detail-bescheiden-step-title.component';
-
-describe('VorgangDetailBescheidenStepTitleComponent', () => {
-  let component: VorgangDetailBescheidenStepTitleComponent;
-  let fixture: ComponentFixture<VorgangDetailBescheidenStepTitleComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [VorgangDetailBescheidenStepTitleComponent],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(VorgangDetailBescheidenStepTitleComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-title/vorgang-detail-bescheiden-step-title.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-title/vorgang-detail-bescheiden-step-title.component.ts
deleted file mode 100644
index b32755681354bc47070662b8a151ab1c21c78497..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-title/vorgang-detail-bescheiden-step-title.component.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { Component, Input } from '@angular/core';
-
-@Component({
-  selector: 'alfa-vorgang-detail-bescheiden-step-title',
-  templateUrl: './vorgang-detail-bescheiden-step-title.component.html',
-})
-export class VorgangDetailBescheidenStepTitleComponent {
-  @Input()
-  public label: string;
-}
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-abbrechen-button/vorgang-detail-bescheiden-abbrechen-button.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-abbrechen-button/vorgang-detail-bescheiden-abbrechen-button.component.html
deleted file mode 100644
index 1670968d3dc1333bca788a7e6f9a3991d9c93942..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-abbrechen-button/vorgang-detail-bescheiden-abbrechen-button.component.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!--
-
-    Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
-    Ministerpräsidenten des Landes Schleswig-Holstein
-    Staatskanzlei
-    Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-
-    Lizenziert unter der EUPL, Version 1.2 oder - sobald
-    diese von der Europäischen Kommission genehmigt wurden -
-    Folgeversionen der EUPL ("Lizenz");
-    Sie dürfen dieses Werk ausschließlich gemäß
-    dieser Lizenz nutzen.
-    Eine Kopie der Lizenz finden Sie hier:
-
-    https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-
-    Sofern nicht durch anwendbare Rechtsvorschriften
-    gefordert oder in schriftlicher Form vereinbart, wird
-    die unter der Lizenz verbreitete Software "so wie sie
-    ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-    ausdrücklich oder stillschweigend - verbreitet.
-    Die sprachspezifischen Genehmigungen und Beschränkungen
-    unter der Lizenz sind dem Lizenztext zu entnehmen.
-
--->
-<button
-  (click)="clickEmitter.emit()"
-  class="absolute right-3 top-3 text-text"
-  data-test-id="close-bescheid"
->
-  <mat-icon>close</mat-icon>
-</button>
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-abbrechen-button/vorgang-detail-bescheiden-abbrechen-button.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-abbrechen-button/vorgang-detail-bescheiden-abbrechen-button.component.spec.ts
deleted file mode 100644
index f332bc85b62e81c0cdfa31a5f1f0596c42e89a1c..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-abbrechen-button/vorgang-detail-bescheiden-abbrechen-button.component.spec.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { MatIcon } from '@angular/material/icon';
-import { VorgangDetailBescheidenAbbrechenButtonComponent } from './vorgang-detail-bescheiden-abbrechen-button.component';
-
-describe('VorgangDetailBescheidenAbbrechenButtonComponent', () => {
-  let component: VorgangDetailBescheidenAbbrechenButtonComponent;
-  let fixture: ComponentFixture<VorgangDetailBescheidenAbbrechenButtonComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [VorgangDetailBescheidenAbbrechenButtonComponent],
-      imports: [MatIcon],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(VorgangDetailBescheidenAbbrechenButtonComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-abbrechen-button/vorgang-detail-bescheiden-abbrechen-button.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-abbrechen-button/vorgang-detail-bescheiden-abbrechen-button.component.ts
deleted file mode 100644
index aff28de42e789d535824c010ef79fcfc898e6ebc..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-abbrechen-button/vorgang-detail-bescheiden-abbrechen-button.component.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { Component, EventEmitter, Output } from '@angular/core';
-
-@Component({
-  selector: 'alfa-vorgang-detail-bescheiden-abbrechen-button',
-  templateUrl: './vorgang-detail-bescheiden-abbrechen-button.component.html',
-  styles: [],
-})
-export class VorgangDetailBescheidenAbbrechenButtonComponent {
-  @Output() public clickEmitter: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();
-}
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-abbrechen-dialog/vorgang-detail-bescheiden-abbrechen-dialog.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-abbrechen-dialog/vorgang-detail-bescheiden-abbrechen-dialog.component.html
deleted file mode 100644
index b535a27820affba89cb302cd71974c9a01dc863a..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-abbrechen-dialog/vorgang-detail-bescheiden-abbrechen-dialog.component.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<!--
-
-    Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
-    Ministerpräsidenten des Landes Schleswig-Holstein
-    Staatskanzlei
-    Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-
-    Lizenziert unter der EUPL, Version 1.2 oder - sobald
-    diese von der Europäischen Kommission genehmigt wurden -
-    Folgeversionen der EUPL ("Lizenz");
-    Sie dürfen dieses Werk ausschließlich gemäß
-    dieser Lizenz nutzen.
-    Eine Kopie der Lizenz finden Sie hier:
-
-    https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-
-    Sofern nicht durch anwendbare Rechtsvorschriften
-    gefordert oder in schriftlicher Form vereinbart, wird
-    die unter der Lizenz verbreitete Software "so wie sie
-    ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-    ausdrücklich oder stillschweigend - verbreitet.
-    Die sprachspezifischen Genehmigungen und Beschränkungen
-    unter der Lizenz sind dem Lizenztext zu entnehmen.
-
--->
-<div
-  class="relative m-6 max-w-2xl rounded-lg bg-modalBg p-6 shadow-xl"
-  data-test-id="bescheid-close-dialog"
->
-  <div class="flex flex-col gap-6">
-    <div>
-      <h4 class="text-lg font-medium text-primary">Bescheiderstellung abbrechen</h4>
-    </div>
-    <div class="grow">
-      <p class="text-base">
-        Soll der Bescheid-Entwurf zur späteren Bearbeitung gespeichert oder verworfen werden?
-      </p>
-    </div>
-    <div class="flex gap-4">
-      <ozgcloud-stroked-button-with-spinner
-        (click)="saveBescheidDraft()"
-        data-test-id="bescheiderstellung-abbrechen-entwurf-speichern"
-        text="Entwurf speichern"
-        type="submit"
-        icon="check"
-        [stateResource]="saveDraftInProgress$ | async"
-      >
-      </ozgcloud-stroked-button-with-spinner>
-      <ozgcloud-stroked-button-with-spinner
-        (click)="onCancel()"
-        data-test-id="bescheiderstellung-abbrechen-entwurf-verwerfen"
-        text="Verwerfen"
-        color=""
-        icon="clear"
-        type="submit"
-        [stateResource]="deleteBescheid$ | async"
-      >
-      </ozgcloud-stroked-button-with-spinner>
-    </div>
-  </div>
-</div>
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-abbrechen-dialog/vorgang-detail-bescheiden-abbrechen-dialog.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-abbrechen-dialog/vorgang-detail-bescheiden-abbrechen-dialog.component.spec.ts
deleted file mode 100644
index 8f5036fdc866a121e136dd39fc3fc9559019d77a..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-abbrechen-dialog/vorgang-detail-bescheiden-abbrechen-dialog.component.spec.ts
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BescheidService } from '@alfa-client/bescheid-shared';
-import { CommandLinkRel, CommandResource } from '@alfa-client/command-shared';
-import { StateResource, createStateResource } from '@alfa-client/tech-shared';
-import { mock } from '@alfa-client/test-utils';
-import { OzgcloudDialogService, OzgcloudStrokedButtonWithSpinnerComponent } from '@alfa-client/ui';
-import { VorgangWithEingangLinkRel, VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
-import { ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testing';
-import { MatIcon } from '@angular/material/icon';
-import {
-  createCommandResource,
-  createCommandStateResource,
-} from 'libs/command-shared/test/command';
-import { createVorgangWithEingangResource } from 'libs/vorgang-shared/test/vorgang';
-import { MockComponent } from 'ng-mocks';
-import { of } from 'rxjs';
-import { BescheidenFormService } from '../../../bescheiden.formservice';
-import { VorgangDetailBescheidenAbbrechenDialogComponent } from './vorgang-detail-bescheiden-abbrechen-dialog.component';
-
-describe('VorgangDetailBescheidenAbbrechenDialogComponent', () => {
-  let component: VorgangDetailBescheidenAbbrechenDialogComponent;
-  let fixture: ComponentFixture<VorgangDetailBescheidenAbbrechenDialogComponent>;
-
-  const bescheidService = mock(BescheidService);
-  const ozgcloudDialogService = mock(OzgcloudDialogService);
-  const formService = mock(BescheidenFormService);
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [
-        VorgangDetailBescheidenAbbrechenDialogComponent,
-        MockComponent(OzgcloudStrokedButtonWithSpinnerComponent),
-        MockComponent(MatIcon),
-      ],
-      providers: [
-        {
-          provide: BescheidService,
-          useValue: bescheidService,
-        },
-        {
-          provide: OzgcloudDialogService,
-          useValue: ozgcloudDialogService,
-        },
-        {
-          provide: BescheidenFormService,
-          useValue: formService,
-        },
-      ],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(VorgangDetailBescheidenAbbrechenDialogComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-
-  describe('saveBescheidDraft', () => {
-    beforeEach(() => {
-      const submitCommand: StateResource<CommandResource> = createCommandStateResource([
-        CommandLinkRel.EFFECTED_RESOURCE,
-      ]);
-      formService.submitDraft = jest.fn().mockReturnValue(of(submitCommand));
-    });
-
-    it('should call formService.submit', () => {
-      component.saveBescheidDraft();
-
-      expect(formService.submitDraft).toHaveBeenCalled();
-    });
-
-    describe('on successfully done command', () => {
-      it('should call ozgcloudDialogService.closeAll', fakeAsync(() => {
-        component.saveBescheidDraft();
-        component.saveDraftInProgress$.subscribe();
-        tick();
-
-        expect(ozgcloudDialogService.closeAll).toHaveBeenCalled();
-      }));
-
-      it('should call bescheid service to refresh list', fakeAsync(() => {
-        component.saveBescheidDraft();
-        component.saveDraftInProgress$.subscribe();
-        tick();
-
-        expect(bescheidService.refreshList).toHaveBeenCalled();
-      }));
-    });
-  });
-
-  describe('onCancel', () => {
-    it('should call deleteBescheidDraft if Vorgang has bescheidDraft', () => {
-      bescheidService.existsBescheidDraft.mockReturnValue(true);
-      component.deleteBescheidDraft = jest.fn();
-
-      component.onCancel();
-
-      expect(component.deleteBescheidDraft).toHaveBeenCalled();
-    });
-
-    it('should call ozgcloudDialogService.closeAll if Vorgang has no bescheidDraft', () => {
-      bescheidService.existsBescheidDraft.mockReturnValue(false);
-
-      component.onCancel();
-
-      expect(ozgcloudDialogService.closeAll).toHaveBeenCalled();
-    });
-  });
-
-  describe('deleteBescheidDraft', () => {
-    beforeEach(() => {
-      const vorgangWithBescheid: VorgangWithEingangResource = createVorgangWithEingangResource([
-        VorgangWithEingangLinkRel.BESCHEID_DRAFT,
-      ]);
-      formService.getVorgangWithEingangResource = jest.fn().mockReturnValue(vorgangWithBescheid);
-
-      const commandResource: CommandResource = createCommandResource([
-        CommandLinkRel.EFFECTED_RESOURCE,
-      ]);
-      const commandStateResource: StateResource<CommandResource> =
-        createStateResource(commandResource);
-
-      bescheidService.bescheidVerwerfen = jest.fn().mockReturnValue(of(commandStateResource));
-    });
-
-    it('should call bescheidService.bescheidVerwerfen', fakeAsync(() => {
-      component.deleteBescheidDraft();
-      component.deleteBescheid$.subscribe();
-      tick();
-
-      expect(bescheidService.bescheidVerwerfen).toHaveBeenCalled();
-    }));
-
-    it('should call ozgcloudDialogService.closeAll', () => {
-      component.deleteBescheidDraft();
-
-      expect(ozgcloudDialogService.closeAll).toHaveBeenCalled();
-    });
-  });
-});
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-abbrechen-dialog/vorgang-detail-bescheiden-abbrechen-dialog.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-abbrechen-dialog/vorgang-detail-bescheiden-abbrechen-dialog.component.ts
deleted file mode 100644
index fb480448c1ac1fa88a18afe16ee02e950a637e58..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-abbrechen-dialog/vorgang-detail-bescheiden-abbrechen-dialog.component.ts
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BescheidService } from '@alfa-client/bescheid-shared';
-import { CommandResource, tapOnCommandSuccessfullyDone } from '@alfa-client/command-shared';
-import { StateResource } from '@alfa-client/tech-shared';
-import { OzgcloudDialogService } from '@alfa-client/ui';
-import { Component } from '@angular/core';
-import { Observable } from 'rxjs';
-import { BescheidenFormService } from '../../../bescheiden.formservice';
-
-@Component({
-  selector: 'alfa-vorgang-detail-bescheiden-abbrechen-dialog',
-  templateUrl: './vorgang-detail-bescheiden-abbrechen-dialog.component.html',
-})
-export class VorgangDetailBescheidenAbbrechenDialogComponent {
-  saveDraftInProgress$: Observable<StateResource<CommandResource>>;
-  deleteBescheid$: Observable<StateResource<CommandResource>>;
-
-  constructor(
-    private readonly bescheidService: BescheidService,
-    private readonly ozgcloudDialogService: OzgcloudDialogService,
-    private readonly formService: BescheidenFormService,
-  ) {}
-
-  public saveBescheidDraft() {
-    this.saveDraftInProgress$ = this.formService.submitDraft().pipe(
-      tapOnCommandSuccessfullyDone(() => {
-        this.ozgcloudDialogService.closeAll();
-        this.bescheidService.refreshList();
-      }),
-    );
-  }
-
-  public onCancel() {
-    if (this.bescheidService.existsBescheidDraft()) {
-      this.deleteBescheidDraft();
-    } else {
-      this.ozgcloudDialogService.closeAll();
-    }
-  }
-
-  deleteBescheidDraft(): void {
-    this.deleteBescheid$ = this.bescheidService.bescheidVerwerfen().pipe(
-      tapOnCommandSuccessfullyDone(() => {
-        this.ozgcloudDialogService.closeAll();
-      }),
-    );
-  }
-}
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-antrag-bescheiden/vorgang-detail-bescheiden-antrag-bescheiden.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-antrag-bescheiden/vorgang-detail-bescheiden-antrag-bescheiden.component.html
deleted file mode 100644
index 9f568635f1454de105701a1a31e25adda21d4e48..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-antrag-bescheiden/vorgang-detail-bescheiden-antrag-bescheiden.component.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<!--
-
-    Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
-    Ministerpräsidenten des Landes Schleswig-Holstein
-    Staatskanzlei
-    Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-
-    Lizenziert unter der EUPL, Version 1.2 oder - sobald
-    diese von der Europäischen Kommission genehmigt wurden -
-    Folgeversionen der EUPL ("Lizenz");
-    Sie dürfen dieses Werk ausschließlich gemäß
-    dieser Lizenz nutzen.
-    Eine Kopie der Lizenz finden Sie hier:
-
-    https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-
-    Sofern nicht durch anwendbare Rechtsvorschriften
-    gefordert oder in schriftlicher Form vereinbart, wird
-    die unter der Lizenz verbreitete Software "so wie sie
-    ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-    ausdrücklich oder stillschweigend - verbreitet.
-    Die sprachspezifischen Genehmigungen und Beschränkungen
-    unter der Lizenz sind dem Lizenztext zu entnehmen.
-
--->
-<div [formGroup]="formService.form" role="radiogroup" aria-label="Bescheidstatus">
-  <div class="my-10 flex max-w-2xl gap-8">
-    <ods-radio-button-card
-      label="bewilligt"
-      [name]="formServiceClass.FIELD_BEWILLIGT"
-      value="true"
-      data-test-id="button-bewilligt"
-      variant="bescheid_bewilligt"
-      ><ods-stamp-icon size="large"></ods-stamp-icon>
-    </ods-radio-button-card>
-    <ods-radio-button-card
-      label="abgelehnt"
-      [name]="formServiceClass.FIELD_BEWILLIGT"
-      value="false"
-      data-test-id="button-abgelehnt"
-      variant="bescheid_abgelehnt"
-      ><ods-close-icon size="large" class="fill-abgelehnt"></ods-close-icon>
-    </ods-radio-button-card>
-  </div>
-  <div class="flex w-full">
-    <ozgcloud-date-editor
-      [formControlName]="formServiceClass.FIELD_BESCHIEDEN_AM"
-      label="am"
-      aria-label="Bescheiddatum"
-      [required]="true"
-    >
-    </ozgcloud-date-editor>
-  </div>
-</div>
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-antrag-bescheiden/vorgang-detail-bescheiden-antrag-bescheiden.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-antrag-bescheiden/vorgang-detail-bescheiden-antrag-bescheiden.component.spec.ts
deleted file mode 100644
index f476bc0b4a2a39aae84dfd41335ac0949456d628..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-antrag-bescheiden/vorgang-detail-bescheiden-antrag-bescheiden.component.spec.ts
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BescheidService } from '@alfa-client/bescheid-shared';
-import { Mock, mock, useFromMock } from '@alfa-client/test-utils';
-import { DateEditorComponent } from '@alfa-client/ui';
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { ReactiveFormsModule, UntypedFormBuilder } from '@angular/forms';
-import { CloseIconComponent, RadioButtonCardComponent, StampIconComponent } from '@ods/system';
-import { MockComponent } from 'ng-mocks';
-import { BescheidenFormService } from '../../../bescheiden.formservice';
-import { VorgangDetailBescheidenAntragBescheidenComponent } from './vorgang-detail-bescheiden-antrag-bescheiden.component';
-
-describe('VorgangDetailBescheidenAntragBescheidenComponent', () => {
-  let component: VorgangDetailBescheidenAntragBescheidenComponent;
-  let fixture: ComponentFixture<VorgangDetailBescheidenAntragBescheidenComponent>;
-
-  let bescheidService: Mock<BescheidService>;
-  let formService: BescheidenFormService;
-
-  beforeEach(async () => {
-    bescheidService = mock(BescheidService);
-    formService = new BescheidenFormService(new UntypedFormBuilder(), useFromMock(bescheidService));
-    await TestBed.configureTestingModule({
-      declarations: [
-        VorgangDetailBescheidenAntragBescheidenComponent,
-        MockComponent(RadioButtonCardComponent),
-        MockComponent(DateEditorComponent),
-        MockComponent(StampIconComponent),
-        MockComponent(CloseIconComponent),
-      ],
-      imports: [ReactiveFormsModule],
-      providers: [
-        {
-          provide: BescheidenFormService,
-          useValue: formService,
-        },
-        {
-          provide: BescheidService,
-          useValue: bescheidService,
-        },
-      ],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(VorgangDetailBescheidenAntragBescheidenComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-antrag-bescheiden/vorgang-detail-bescheiden-antrag-bescheiden.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-antrag-bescheiden/vorgang-detail-bescheiden-antrag-bescheiden.component.ts
deleted file mode 100644
index 0e8a3cb8ecaccc3d7d427ab77d549ce0566cb0a3..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-antrag-bescheiden/vorgang-detail-bescheiden-antrag-bescheiden.component.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { Component } from '@angular/core';
-import { BescheidenFormService } from '../../../bescheiden.formservice';
-
-@Component({
-  selector: 'alfa-vorgang-detail-bescheiden-antrag-bescheiden',
-  templateUrl: './vorgang-detail-bescheiden-antrag-bescheiden.component.html',
-})
-export class VorgangDetailBescheidenAntragBescheidenComponent {
-  protected readonly formServiceClass = BescheidenFormService;
-
-  constructor(public formService: BescheidenFormService) {}
-}
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-bescheid-versenden/vorgang-detail-bescheiden-bescheid-versenden.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-bescheid-versenden/vorgang-detail-bescheiden-bescheid-versenden.component.html
deleted file mode 100644
index db7e7a2afbbe80ca4fef1198e35794870fc6f4a6..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-bescheid-versenden/vorgang-detail-bescheiden-bescheid-versenden.component.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<!--
-
-    Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
-    Ministerpräsidenten des Landes Schleswig-Holstein
-    Staatskanzlei
-    Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-
-    Lizenziert unter der EUPL, Version 1.2 oder - sobald
-    diese von der Europäischen Kommission genehmigt wurden -
-    Folgeversionen der EUPL ("Lizenz");
-    Sie dürfen dieses Werk ausschließlich gemäß
-    dieser Lizenz nutzen.
-    Eine Kopie der Lizenz finden Sie hier:
-
-    https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-
-    Sofern nicht durch anwendbare Rechtsvorschriften
-    gefordert oder in schriftlicher Form vereinbart, wird
-    die unter der Lizenz verbreitete Software "so wie sie
-    ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-    ausdrücklich oder stillschweigend - verbreitet.
-    Die sprachspezifischen Genehmigungen und Beschränkungen
-    unter der Lizenz sind dem Lizenztext zu entnehmen.
-
--->
-<div
-  [formGroup]="formService.form"
-  class="mt-5 flex w-full max-w-72 flex-col gap-4"
-  role="radiogroup"
-  aria-level="Bescheid versenden"
->
-  <ng-container *ngIf="bescheidResource$ | async | hasLink: bescheidLinkRel.BESCHEIDEN_UND_SENDEN">
-    <ods-radio-button-card
-      label="Als neue Nachricht an den Antragsteller senden"
-      [value]="sendBy.NACHRICHT"
-      [name]="formServiceClass.FIELD_SEND_BY"
-      variant="bescheid_save"
-      [fullWidthText]="true"
-      data-test-id="send-to-antragsteller-button"
-      ><ods-send-icon size="large"></ods-send-icon
-    ></ods-radio-button-card>
-    <ods-radio-button-card
-      *ngIf="bescheidResource$ | async | hasLink: bescheidLinkRel.BESCHEIDEN"
-      label="Nur speichern"
-      [value]="sendBy.MANUAL"
-      [name]="formServiceClass.FIELD_SEND_BY"
-      variant="bescheid_save"
-      [fullWidthText]="true"
-      data-test-id="save-button"
-      ><ods-save-icon size="large"></ods-save-icon
-    ></ods-radio-button-card>
-  </ng-container>
-</div>
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-bescheid-versenden/vorgang-detail-bescheiden-bescheid-versenden.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-bescheid-versenden/vorgang-detail-bescheiden-bescheid-versenden.component.spec.ts
deleted file mode 100644
index cb8eeb6c18d18c4b49d98fe13a7025c05d61b923..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-bescheid-versenden/vorgang-detail-bescheiden-bescheid-versenden.component.spec.ts
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import {
-  BescheidLinkRel,
-  BescheidResource,
-  BescheidSendBy,
-  BescheidService,
-} from '@alfa-client/bescheid-shared';
-import { HasLinkPipe, createStateResource } from '@alfa-client/tech-shared';
-import { Mock, getElementFromFixture, mock, useFromMock } from '@alfa-client/test-utils';
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { ReactiveFormsModule, UntypedFormBuilder } from '@angular/forms';
-import { MatIconTestingModule } from '@angular/material/icon/testing';
-import { RadioButtonCardComponent, SaveIconComponent, SendIconComponent } from '@ods/system';
-import { MockComponent } from 'ng-mocks';
-import { EMPTY, of } from 'rxjs';
-import { createBescheidResource } from '../../../../../../../../bescheid-shared/src/test/bescheid';
-import { getDataTestIdOf } from '../../../../../../../../tech-shared/test/data-test';
-import { BescheidenFormService } from '../../../bescheiden.formservice';
-import { VorgangDetailBescheidenBescheidVersendenComponent } from './vorgang-detail-bescheiden-bescheid-versenden.component';
-
-describe('VorgangDetailBescheidenBescheidVersendenComponent', () => {
-  let component: VorgangDetailBescheidenBescheidVersendenComponent;
-  let fixture: ComponentFixture<VorgangDetailBescheidenBescheidVersendenComponent>;
-
-  let bescheidService: Mock<BescheidService>;
-  let formService: BescheidenFormService;
-
-  const sendToAntragstellerButtonTestId: string = getDataTestIdOf('send-to-antragsteller-button');
-  const saveAndSendButtonTestId: string = getDataTestIdOf('save-button');
-
-  beforeEach(async () => {
-    bescheidService = mock(BescheidService);
-    formService = new BescheidenFormService(new UntypedFormBuilder(), useFromMock(bescheidService));
-
-    await TestBed.configureTestingModule({
-      imports: [ReactiveFormsModule, MatIconTestingModule],
-      declarations: [
-        VorgangDetailBescheidenBescheidVersendenComponent,
-        HasLinkPipe,
-        MockComponent(RadioButtonCardComponent),
-        MockComponent(SendIconComponent),
-        MockComponent(SaveIconComponent),
-      ],
-      providers: [
-        {
-          provide: BescheidenFormService,
-          useValue: formService,
-        },
-        {
-          provide: BescheidService,
-          useValue: bescheidService,
-        },
-      ],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(VorgangDetailBescheidenBescheidVersendenComponent);
-    component = fixture.componentInstance;
-    bescheidService.getBescheidDraft.mockReturnValue(EMPTY);
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-
-  describe('render', () => {
-    it('should render send button', () => {
-      bescheidService.getBescheidDraft.mockReturnValue(
-        of(createStateResource(createBescheidResource([BescheidLinkRel.BESCHEIDEN_UND_SENDEN]))),
-      );
-
-      component.ngOnInit();
-      fixture.detectChanges();
-
-      const element = getElementFromFixture(fixture, sendToAntragstellerButtonTestId);
-      expect(element).toBeInstanceOf(HTMLElement);
-    });
-
-    it('should not render send button', () => {
-      bescheidService.getBescheidDraft.mockReturnValue(
-        of(createStateResource(createBescheidResource())),
-      );
-
-      component.ngOnInit();
-      fixture.detectChanges();
-
-      const element = getElementFromFixture(fixture, sendToAntragstellerButtonTestId);
-      expect(element).not.toBeInstanceOf(HTMLElement);
-    });
-
-    it('should render save button', () => {
-      bescheidService.getBescheidDraft.mockReturnValue(
-        of(
-          createStateResource(
-            createBescheidResource([
-              BescheidLinkRel.BESCHEIDEN,
-              BescheidLinkRel.BESCHEIDEN_UND_SENDEN,
-            ]),
-          ),
-        ),
-      );
-
-      component.ngOnInit();
-      fixture.detectChanges();
-
-      const element = getElementFromFixture(fixture, saveAndSendButtonTestId);
-      expect(element).toBeInstanceOf(HTMLElement);
-    });
-
-    it('should not render save button if send link missing', () => {
-      bescheidService.getBescheidDraft.mockReturnValue(
-        of(createStateResource(createBescheidResource([BescheidLinkRel.BESCHEIDEN]))),
-      );
-
-      component.ngOnInit();
-      fixture.detectChanges();
-
-      const element = getElementFromFixture(fixture, saveAndSendButtonTestId);
-      expect(element).not.toBeInstanceOf(HTMLElement);
-    });
-
-    it('should not render save button if link is missing', () => {
-      bescheidService.getBescheidDraft.mockReturnValue(
-        of(createStateResource(createBescheidResource([BescheidLinkRel.BESCHEIDEN_UND_SENDEN]))),
-      );
-
-      component.ngOnInit();
-      fixture.detectChanges();
-
-      const element = getElementFromFixture(fixture, saveAndSendButtonTestId);
-      expect(element).not.toBeInstanceOf(HTMLElement);
-    });
-  });
-
-  describe('ngOnInit', () => {
-    const bescheidResource: BescheidResource = createBescheidResource();
-
-    it('should set sendBy in form', () => {
-      component.initSendBy = jest.fn();
-      bescheidService.getBescheidDraft.mockReturnValue(of(createStateResource(bescheidResource)));
-
-      component.ngOnInit();
-      component.bescheidResource$.subscribe();
-
-      expect(component.initSendBy).toHaveBeenCalledWith(bescheidResource);
-    });
-  });
-
-  describe('initSendBy', () => {
-    it('should call form service', () => {
-      formService.setSendBy = jest.fn();
-
-      component.initSendBy(createBescheidResource());
-
-      expect(formService.setSendBy).toHaveBeenCalledWith(BescheidSendBy.MANUAL);
-    });
-
-    it('should not call form service', () => {
-      formService.setSendBy = jest.fn();
-
-      component.initSendBy(createBescheidResource([BescheidLinkRel.BESCHEIDEN_UND_SENDEN]));
-
-      expect(formService.setSendBy).not.toHaveBeenCalled();
-    });
-  });
-});
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-bescheid-versenden/vorgang-detail-bescheiden-bescheid-versenden.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-bescheid-versenden/vorgang-detail-bescheiden-bescheid-versenden.component.ts
deleted file mode 100644
index 4ffba257e5599d896ac6b90db7ae92c409eb6481..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-bescheid-versenden/vorgang-detail-bescheiden-bescheid-versenden.component.ts
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import {
-  BescheidLinkRel,
-  BescheidResource,
-  BescheidSendBy,
-  BescheidService,
-} from '@alfa-client/bescheid-shared';
-import { StateResource, isLoaded, notHasLink } from '@alfa-client/tech-shared';
-import { Component, OnInit } from '@angular/core';
-import { Observable, filter, map, tap } from 'rxjs';
-import { BescheidenFormService } from '../../../bescheiden.formservice';
-
-@Component({
-  selector: 'alfa-vorgang-detail-bescheiden-bescheid-versenden',
-  templateUrl: './vorgang-detail-bescheiden-bescheid-versenden.component.html',
-})
-export class VorgangDetailBescheidenBescheidVersendenComponent implements OnInit {
-  public bescheidResource$: Observable<BescheidResource>;
-
-  public readonly formServiceClass = BescheidenFormService;
-  public readonly sendBy = BescheidSendBy;
-
-  public bescheidLinkRel = BescheidLinkRel;
-
-  constructor(
-    public formService: BescheidenFormService,
-    private readonly bescheidService: BescheidService,
-  ) {}
-
-  ngOnInit(): void {
-    this.bescheidResource$ = this.bescheidService.getBescheidDraft().pipe(
-      filter(isLoaded),
-      map((stateResource: StateResource<BescheidResource>) => stateResource.resource),
-      tap((bescheidResource: BescheidResource) => this.initSendBy(bescheidResource)),
-    );
-  }
-
-  initSendBy(bescheidResource: BescheidResource): void {
-    if (notHasLink(bescheidResource, BescheidLinkRel.BESCHEIDEN_UND_SENDEN)) {
-      this.formService.setSendBy(BescheidSendBy.MANUAL);
-    }
-  }
-}
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-attachment-hochladen/vorgang-detail-bescheiden-attachment-hochladen.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-attachment-hochladen/vorgang-detail-bescheiden-attachment-hochladen.component.html
deleted file mode 100644
index 7dd1b32d5d178b5f907f7964ebb22734ad876cbe..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-attachment-hochladen/vorgang-detail-bescheiden-attachment-hochladen.component.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!--
-
-    Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
-    Ministerpräsidenten des Landes Schleswig-Holstein
-    Staatskanzlei
-    Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-
-    Lizenziert unter der EUPL, Version 1.2 oder - sobald
-    diese von der Europäischen Kommission genehmigt wurden -
-    Folgeversionen der EUPL ("Lizenz");
-    Sie dürfen dieses Werk ausschließlich gemäß
-    dieser Lizenz nutzen.
-    Eine Kopie der Lizenz finden Sie hier:
-
-    https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-
-    Sofern nicht durch anwendbare Rechtsvorschriften
-    gefordert oder in schriftlicher Form vereinbart, wird
-    die unter der Lizenz verbreitete Software "so wie sie
-    ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-    ausdrücklich oder stillschweigend - verbreitet.
-    Die sprachspezifischen Genehmigungen und Beschränkungen
-    unter der Lizenz sind dem Lizenztext zu entnehmen.
-
--->
-<div [formGroup]="formService.form" class="mt-4">
-  <ods-file-upload-editor
-    [attr.data-test-id]="'vorgang-bescheiden-upload-editor' + formServiceClass.FIELD_ATTACHMENTS"
-    [parentFormArrayName]="formServiceClass.FIELD_ATTACHMENTS"
-    [uploadInProgress]="uploadInProgress$ | async"
-    (newFile)="uploadFile($event)"
-    [fileLinkList]="getFileLinkList()"
-    label="Anhang hochladen"
-  >
-  </ods-file-upload-editor>
-</div>
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-attachment-hochladen/vorgang-detail-bescheiden-attachment-hochladen.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-attachment-hochladen/vorgang-detail-bescheiden-attachment-hochladen.component.spec.ts
deleted file mode 100644
index d4cecc3e41a00d51b537c0d189ec87e855a78f09..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-attachment-hochladen/vorgang-detail-bescheiden-attachment-hochladen.component.spec.ts
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BescheidResource, BescheidService } from '@alfa-client/bescheid-shared';
-import { BinaryFileAttachmentContainerComponent } from '@alfa-client/binary-file';
-import { BinaryFileResource } from '@alfa-client/binary-file-shared';
-import { StateResource, createStateResource } from '@alfa-client/tech-shared';
-import { Mock, mock, useFromMock } from '@alfa-client/test-utils';
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { ReactiveFormsModule, UntypedFormBuilder } from '@angular/forms';
-import { FileUploadEditorComponent } from '@ods/component';
-import { MockComponent } from 'ng-mocks';
-import { EMPTY, Observable, Subscription, of } from 'rxjs';
-import { createBescheidStateResource } from '../../../../../../../../../bescheid-shared/src/test/bescheid';
-import { createBinaryFileResource } from '../../../../../../../../../binary-file-shared/test/binary-file';
-import { createFile } from '../../../../../../../../../tech-shared/test/file';
-import { singleColdCompleted } from '../../../../../../../../../tech-shared/test/marbles';
-import { BescheidenFormService } from '../../../../bescheiden.formservice';
-import { VorgangDetailBescheidenAttachmentHochladenComponent } from './vorgang-detail-bescheiden-attachment-hochladen.component';
-
-describe('VorgangDetailBescheidenDokumentHochladenComponent', () => {
-  let component: VorgangDetailBescheidenAttachmentHochladenComponent;
-  let fixture: ComponentFixture<VorgangDetailBescheidenAttachmentHochladenComponent>;
-  const selfLink: string = 'self';
-
-  let bescheidService: Mock<BescheidService>;
-  let formService: BescheidenFormService;
-
-  beforeEach(async () => {
-    bescheidService = mock(BescheidService);
-    bescheidService.getAttachments.mockReturnValue(EMPTY);
-
-    formService = new BescheidenFormService(new UntypedFormBuilder(), useFromMock(bescheidService));
-
-    await TestBed.configureTestingModule({
-      declarations: [
-        VorgangDetailBescheidenAttachmentHochladenComponent,
-        MockComponent(BinaryFileAttachmentContainerComponent),
-        MockComponent(FileUploadEditorComponent),
-      ],
-      imports: [ReactiveFormsModule],
-      providers: [
-        {
-          provide: BescheidenFormService,
-          useValue: formService,
-        },
-        {
-          provide: BescheidService,
-          useValue: bescheidService,
-        },
-      ],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(VorgangDetailBescheidenAttachmentHochladenComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-
-  describe('ngOnInit', () => {
-    let loadExistingAttachments: jest.Mock;
-    let subscribeToFileDeletion: jest.Mock;
-
-    beforeEach(() => {
-      loadExistingAttachments = component.loadExistingAttachments = jest.fn();
-      subscribeToFileDeletion = component.subscribeToFileDeletion = jest.fn();
-    });
-
-    it('should load existing attachments', () => {
-      component.ngOnInit();
-
-      expect(loadExistingAttachments).toHaveBeenCalled();
-    });
-
-    it('should subscribe to file deletion', () => {
-      component.ngOnInit();
-
-      expect(subscribeToFileDeletion).toHaveBeenCalled();
-    });
-  });
-
-  describe('ngOnDestroy', () => {
-    it('should unsubscribe from file deletion', () => {
-      const subscription = mock(Subscription);
-      const getDeleteFile = (formService.getFileDelete = jest.fn());
-      const observable = mock(Observable);
-      getDeleteFile.mockReturnValue(observable);
-      observable.subscribe.mockReturnValue(subscription);
-      component.ngOnInit();
-
-      component.ngOnDestroy();
-
-      expect(subscription.unsubscribe).toHaveBeenCalled();
-    });
-  });
-
-  describe('loadExistingAttachments', () => {
-    let binaryFileResource: BinaryFileResource;
-
-    beforeEach(() => {
-      binaryFileResource = createBinaryFileResource();
-      bescheidService.getAttachments.mockReturnValue(of([binaryFileResource]));
-    });
-
-    it('should get attachments', () => {
-      component.loadExistingAttachments();
-
-      expect(bescheidService.getAttachments).toHaveBeenCalled();
-    });
-
-    it('should add attachments to fileList', () => {
-      component.loadExistingAttachments();
-
-      expect(component.fileList).toEqual([binaryFileResource]);
-    });
-  });
-
-  describe('subscribeToFileDeletion', () => {
-    let getFileDelete: jest.Mock;
-    let getFileDeleteObservable: Mock<Observable<BinaryFileResource>>;
-
-    beforeEach(() => {
-      getFileDeleteObservable = mock(Observable);
-      getFileDelete = formService.getFileDelete = jest
-        .fn()
-        .mockReturnValue(getFileDeleteObservable);
-    });
-
-    it('should subscribe to file deletion', () => {
-      component.subscribeToFileDeletion();
-
-      expect(getFileDelete).toHaveBeenCalled();
-    });
-  });
-
-  describe('deleteFile', () => {
-    let binaryFileResource: BinaryFileResource;
-
-    beforeEach(() => {
-      binaryFileResource = createBinaryFileResource();
-    });
-
-    it('should remove file from list', () => {
-      component.fileList = [binaryFileResource];
-
-      component.deleteFile(binaryFileResource);
-
-      expect(component.fileList).toEqual([]);
-    });
-  });
-
-  describe('getFileLinkList', () => {
-    it('should return url list', () => {
-      const binaryFileResource = createBinaryFileResource([selfLink]);
-      component.fileList = [binaryFileResource];
-
-      const uriList = component.getFileLinkList();
-
-      expect(uriList[0]).toEqual(binaryFileResource._links.self.href);
-    });
-  });
-
-  describe('uploadFile', () => {
-    const bescheidDraftStateResource: StateResource<BescheidResource> =
-      createBescheidStateResource();
-    const file: File = createFile();
-    const binaryFileStateResource: StateResource<BinaryFileResource> = createStateResource(
-      createBinaryFileResource(),
-    );
-
-    beforeEach(() => {
-      bescheidService.uploadAttachment.mockReturnValue(of(binaryFileStateResource));
-      component.bescheidDraftStateResource = bescheidDraftStateResource;
-    });
-
-    it('should upload attachment', () => {
-      component.uploadFile(file);
-
-      component.uploadInProgress$.subscribe();
-
-      expect(bescheidService.uploadAttachment).toHaveBeenCalledWith(
-        bescheidDraftStateResource.resource,
-        file,
-      );
-    });
-
-    it('should add to file list', () => {
-      component.uploadFile(file);
-
-      component.uploadInProgress$.subscribe();
-
-      expect(component.fileList).toEqual([binaryFileStateResource.resource]);
-    });
-
-    it('should emit', () => {
-      component.uploadFile(file);
-
-      expect(component.uploadInProgress$).toBeObservable(
-        singleColdCompleted(binaryFileStateResource),
-      );
-    });
-  });
-});
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-attachment-hochladen/vorgang-detail-bescheiden-attachment-hochladen.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-attachment-hochladen/vorgang-detail-bescheiden-attachment-hochladen.component.ts
deleted file mode 100644
index 6c5fe5d18d04c4c3101987d76b7e68d14f869807..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-attachment-hochladen/vorgang-detail-bescheiden-attachment-hochladen.component.ts
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BescheidResource, BescheidService } from '@alfa-client/bescheid-shared';
-import { BinaryFileResource } from '@alfa-client/binary-file-shared';
-import {
-  StateResource,
-  createEmptyStateResource,
-  doOnValidStateResource,
-  isNotNil,
-} from '@alfa-client/tech-shared';
-import { Component, Input, OnDestroy, OnInit } from '@angular/core';
-import { getUrl } from '@ngxp/rest';
-import { Observable, Subscription, first, of, tap } from 'rxjs';
-import { BescheidenFormService } from '../../../../bescheiden.formservice';
-
-@Component({
-  selector: 'alfa-vorgang-detail-bescheiden-attachment-hochladen',
-  templateUrl: './vorgang-detail-bescheiden-attachment-hochladen.component.html',
-  styles: [],
-})
-export class VorgangDetailBescheidenAttachmentHochladenComponent implements OnInit, OnDestroy {
-  @Input() bescheidDraftStateResource: StateResource<BescheidResource>;
-
-  uploadInProgress$: Observable<StateResource<BinaryFileResource>>;
-  fileList: BinaryFileResource[] = [];
-  private deleteFileSubscription: Subscription;
-
-  readonly formServiceClass = BescheidenFormService;
-
-  constructor(
-    public readonly formService: BescheidenFormService,
-    private readonly bescheidService: BescheidService,
-  ) {
-    this.uploadInProgress$ = of(createEmptyStateResource<BinaryFileResource>());
-  }
-
-  ngOnInit(): void {
-    this.loadExistingAttachments();
-    this.subscribeToFileDeletion();
-  }
-
-  ngOnDestroy(): void {
-    if (isNotNil(this.deleteFileSubscription)) this.deleteFileSubscription.unsubscribe();
-  }
-
-  loadExistingAttachments(): void {
-    this.bescheidService
-      .getAttachments()
-      .pipe(first())
-      .subscribe((attachments) => (this.fileList = attachments));
-  }
-
-  subscribeToFileDeletion(): void {
-    this.deleteFileSubscription = this.formService
-      .getFileDelete()
-      .subscribe((binaryFileResource) => this.deleteFile(binaryFileResource));
-  }
-
-  deleteFile(binaryFileResource: BinaryFileResource) {
-    this.fileList = this.fileList.filter((file) => getUrl(file) !== getUrl(binaryFileResource));
-  }
-
-  getFileLinkList(): string[] {
-    return this.fileList.map((fileResource: BinaryFileResource) => getUrl(fileResource));
-  }
-
-  public uploadFile(file: File): void {
-    this.uploadInProgress$ = this.bescheidService
-      .uploadAttachment(this.bescheidDraftStateResource.resource, file)
-      .pipe(
-        tap((stateResource: StateResource<BinaryFileResource>) =>
-          doOnValidStateResource(
-            stateResource,
-            () => (this.fileList = [...this.fileList, stateResource.resource]),
-          ),
-        ),
-      );
-  }
-}
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen.component.html
deleted file mode 100644
index 93076b339f608ddd394e212c68c60457d40d82b1..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen.component.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<!--
-
-    Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
-    Ministerpräsidenten des Landes Schleswig-Holstein
-    Staatskanzlei
-    Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-
-    Lizenziert unter der EUPL, Version 1.2 oder - sobald
-    diese von der Europäischen Kommission genehmigt wurden -
-    Folgeversionen der EUPL ("Lizenz");
-    Sie dürfen dieses Werk ausschließlich gemäß
-    dieser Lizenz nutzen.
-    Eine Kopie der Lizenz finden Sie hier:
-
-    https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-
-    Sofern nicht durch anwendbare Rechtsvorschriften
-    gefordert oder in schriftlicher Form vereinbart, wird
-    die unter der Lizenz verbreitete Software "so wie sie
-    ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-    ausdrücklich oder stillschweigend - verbreitet.
-    Die sprachspezifischen Genehmigungen und Beschränkungen
-    unter der Lizenz sind dem Lizenztext zu entnehmen.
-
--->
-<ng-container *ngIf="bescheidDraftStateResource.resource as bescheidDraft">
-  <div class="mt-4">
-    <ods-button-card
-      *ngIf="bescheidDraft | hasLink: bescheidLinkRel.CREATE_DOCUMENT"
-      class="w-72"
-      [isLoading]="(createBescheidDocumentInProgress$ | async).loading"
-      (click)="createBescheidDocument()"
-      data-test-id="create-bescheid-document-button"
-      text="Bescheiddokument"
-      subText="automatisch erstellen"
-    >
-      <ods-bescheid-generate-icon icon />
-    </ods-button-card>
-  </div>
-</ng-container>
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen.component.spec.ts
deleted file mode 100644
index 28bf0e8b5ba83f7889afb81cb80bb5a7e1e8d320..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen.component.spec.ts
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BescheidLinkRel, BescheidService } from '@alfa-client/bescheid-shared';
-import { CommandLinkRel } from '@alfa-client/command-shared';
-import {
-  createEmptyStateResource,
-  createStateResource,
-  HasLinkPipe,
-} from '@alfa-client/tech-shared';
-import {
-  dispatchEventFromFixture,
-  existsAsHtmlElement,
-  Mock,
-  mock,
-  notExistsAsHtmlElement,
-} from '@alfa-client/test-utils';
-import { OzgcloudButtonWithSpinnerComponent } from '@alfa-client/ui';
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import {
-  BescheidGenerateIconComponent,
-  ButtonCardComponent,
-  SpinnerIconComponent,
-} from '@ods/system';
-import { createBescheidResource } from 'libs/bescheid-shared/src/test/bescheid';
-import { getDataTestIdOf } from 'libs/tech-shared/test/data-test';
-import { MockComponent } from 'ng-mocks';
-import { of } from 'rxjs';
-import {
-  createCommandErrorStateResource,
-  createCommandStateResource,
-} from '../../../../../../../../../command-shared/test/command';
-import { BescheidenFormService } from '../../../../bescheiden.formservice';
-import { VorgangDetailBescheidenBescheidAutomatischErstellenComponent } from './vorgang-detail-bescheiden-bescheid-automatisch-erstellen.component';
-
-describe('VorgangDetailBescheidenBescheidAutomatischErstellenComponent', () => {
-  let component: VorgangDetailBescheidenBescheidAutomatischErstellenComponent;
-  let fixture: ComponentFixture<VorgangDetailBescheidenBescheidAutomatischErstellenComponent>;
-
-  const createBescheidDocumentButton: string = getDataTestIdOf('create-bescheid-document-button');
-
-  let bescheidService: Mock<BescheidService>;
-  let formService: Mock<BescheidenFormService>;
-
-  beforeEach(async () => {
-    bescheidService = mock(BescheidService);
-    formService = mock(BescheidenFormService);
-
-    await TestBed.configureTestingModule({
-      imports: [HasLinkPipe],
-      declarations: [
-        VorgangDetailBescheidenBescheidAutomatischErstellenComponent,
-        MockComponent(OzgcloudButtonWithSpinnerComponent),
-        MockComponent(ButtonCardComponent),
-        MockComponent(SpinnerIconComponent),
-        MockComponent(BescheidGenerateIconComponent),
-      ],
-      providers: [
-        {
-          provide: BescheidService,
-          useValue: bescheidService,
-        },
-        {
-          provide: BescheidenFormService,
-          useValue: formService,
-        },
-      ],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(VorgangDetailBescheidenBescheidAutomatischErstellenComponent);
-    component = fixture.componentInstance;
-    component.bescheidDraftStateResource = createStateResource(createBescheidResource());
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-
-  describe('create bescheid document button', () => {
-    beforeEach(() => {
-      component.bescheidDraftStateResource = createStateResource(
-        createBescheidResource([BescheidLinkRel.CREATE_DOCUMENT]),
-      );
-
-      fixture.detectChanges();
-    });
-    it('should call bescheid service on click', () => {
-      dispatchEventFromFixture(fixture, createBescheidDocumentButton, 'click');
-
-      expect(bescheidService.createBescheidDocument).toHaveBeenCalled();
-    });
-
-    it('should be hidden if link is NOT present', () => {
-      component.bescheidDraftStateResource = createStateResource(createBescheidResource());
-
-      fixture.detectChanges();
-
-      notExistsAsHtmlElement(fixture, createBescheidDocumentButton);
-    });
-
-    it('should be visible if link is present', () => {
-      component.bescheidDraftStateResource = createStateResource(
-        createBescheidResource([BescheidLinkRel.CREATE_DOCUMENT]),
-      );
-      fixture.detectChanges();
-
-      existsAsHtmlElement(fixture, createBescheidDocumentButton);
-    });
-
-    it('should clear nachricht', () => {
-      bescheidService.createBescheidDocument.mockReturnValue(
-        of(createCommandStateResource([CommandLinkRel.EFFECTED_RESOURCE])),
-      );
-
-      component.createBescheidDocument();
-
-      component.createBescheidDocumentInProgress$.subscribe();
-      expect(formService.clearNachricht).toHaveBeenCalled();
-    });
-
-    it('should not clear nachricht when loading', () => {
-      bescheidService.createBescheidDocument.mockReturnValue(of(createEmptyStateResource(true)));
-
-      component.createBescheidDocument();
-
-      component.createBescheidDocumentInProgress$.subscribe();
-      expect(formService.clearNachricht).not.toHaveBeenCalled();
-    });
-
-    it('should not clear nachricht when error', () => {
-      bescheidService.createBescheidDocument.mockReturnValue(of(createCommandErrorStateResource()));
-
-      component.createBescheidDocument();
-
-      component.createBescheidDocumentInProgress$.subscribe();
-      expect(formService.clearNachricht).not.toHaveBeenCalled();
-    });
-  });
-});
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen.component.ts
deleted file mode 100644
index 47ceb4fb1feeadc93da73eec593d1c69424a4ca1..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen.component.ts
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BescheidLinkRel, BescheidResource, BescheidService } from '@alfa-client/bescheid-shared';
-import { CommandResource, isSuccessfulDone } from '@alfa-client/command-shared';
-import { createEmptyStateResource, StateResource } from '@alfa-client/tech-shared';
-import { Component, Input } from '@angular/core';
-import { Observable, of, tap } from 'rxjs';
-import { BescheidenFormService } from '../../../../bescheiden.formservice';
-
-@Component({
-  selector: 'alfa-vorgang-detail-bescheiden-bescheid-automatisch-erstellen',
-  templateUrl: './vorgang-detail-bescheiden-bescheid-automatisch-erstellen.component.html',
-})
-export class VorgangDetailBescheidenBescheidAutomatischErstellenComponent {
-  @Input() public bescheidDraftStateResource: StateResource<BescheidResource>;
-
-  public createBescheidDocumentInProgress$: Observable<StateResource<CommandResource>> = of(
-    createEmptyStateResource<CommandResource>(),
-  );
-
-  public readonly bescheidLinkRel = BescheidLinkRel;
-
-  constructor(
-    private readonly bescheidService: BescheidService,
-    private readonly formService: BescheidenFormService,
-  ) {}
-
-  public createBescheidDocument(): void {
-    this.createBescheidDocumentInProgress$ = this.bescheidService.createBescheidDocument().pipe(
-      tap((commandStateResource: StateResource<CommandResource>) => {
-        if (isSuccessfulDone(commandStateResource.resource)) {
-          this.formService.clearNachricht();
-        }
-      }),
-    );
-  }
-}
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-dokument-hochladen/vorgang-detail-bescheiden-dokument-hochladen.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-dokument-hochladen/vorgang-detail-bescheiden-dokument-hochladen.component.html
deleted file mode 100644
index cf032e3993238d0351d91cda1818be9dc7f0cb98..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-dokument-hochladen/vorgang-detail-bescheiden-dokument-hochladen.component.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!--
-
-    Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
-    Ministerpräsidenten des Landes Schleswig-Holstein
-    Staatskanzlei
-    Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-
-    Lizenziert unter der EUPL, Version 1.2 oder - sobald
-    diese von der Europäischen Kommission genehmigt wurden -
-    Folgeversionen der EUPL ("Lizenz");
-    Sie dürfen dieses Werk ausschließlich gemäß
-    dieser Lizenz nutzen.
-    Eine Kopie der Lizenz finden Sie hier:
-
-    https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-
-    Sofern nicht durch anwendbare Rechtsvorschriften
-    gefordert oder in schriftlicher Form vereinbart, wird
-    die unter der Lizenz verbreitete Software "so wie sie
-    ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-    ausdrücklich oder stillschweigend - verbreitet.
-    Die sprachspezifischen Genehmigungen und Beschränkungen
-    unter der Lizenz sind dem Lizenztext zu entnehmen.
-
--->
-<div [formGroup]="formService.form">
-  <ods-single-file-upload-editor
-    *ngIf="bescheidDraftStateResource.resource | hasLink: bescheidLinkRel.UPLOAD_BESCHEID_FILE"
-    [uploadInProgress]="(uploadDocumentFileInProgress$ | async).loading"
-    class="w-72"
-    attr.data-test-id="vorgang-bescheiden-upload-editor"
-    [formControlName]="formServiceClass.FIELD_BESCHEID_DOCUMENT"
-    (newFile)="uploadFile($event)"
-  >
-    <ods-bescheid-upload-icon icon></ods-bescheid-upload-icon>
-    <ods-spinner-icon spinner size="extra-large"></ods-spinner-icon>
-    <div text class="text-center">Bescheiddokument hochladen</div>
-  </ods-single-file-upload-editor>
-</div>
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-dokument-hochladen/vorgang-detail-bescheiden-dokument-hochladen.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-dokument-hochladen/vorgang-detail-bescheiden-dokument-hochladen.component.spec.ts
deleted file mode 100644
index 5b089dac014abc5a0da5991e964ba167b50edcf9..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-dokument-hochladen/vorgang-detail-bescheiden-dokument-hochladen.component.spec.ts
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BescheidService } from '@alfa-client/bescheid-shared';
-import { HasLinkPipe } from '@alfa-client/tech-shared';
-import { Mock, mock, useFromMock } from '@alfa-client/test-utils';
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { ReactiveFormsModule, UntypedFormBuilder } from '@angular/forms';
-import { MatIcon } from '@angular/material/icon';
-import { faker } from '@faker-js/faker';
-import { ResourceUri } from '@ngxp/rest';
-import { SingleFileUploadEditorComponent } from '@ods/component';
-import { SpinnerIconComponent } from '@ods/system';
-import { MockComponent, MockPipe } from 'ng-mocks';
-import { of } from 'rxjs';
-import { createBescheidStateResource } from '../../../../../../../../../bescheid-shared/src/test/bescheid';
-import { createFile } from '../../../../../../../../../tech-shared/test/file';
-import { BescheidenFormService } from '../../../../bescheiden.formservice';
-import { VorgangDetailBescheidenDokumentHochladenComponent } from './vorgang-detail-bescheiden-dokument-hochladen.component';
-
-describe('VorgangDetailBescheidenDokumentHochladenComponent', () => {
-  let component: VorgangDetailBescheidenDokumentHochladenComponent;
-  let fixture: ComponentFixture<VorgangDetailBescheidenDokumentHochladenComponent>;
-
-  let bescheidService: Mock<BescheidService>;
-  let formService: BescheidenFormService;
-
-  beforeEach(async () => {
-    bescheidService = mock(BescheidService);
-    bescheidService.getDocumentUri.mockReturnValue(of(null));
-
-    formService = new BescheidenFormService(new UntypedFormBuilder(), useFromMock(bescheidService));
-
-    await TestBed.configureTestingModule({
-      declarations: [
-        VorgangDetailBescheidenDokumentHochladenComponent,
-        MatIcon,
-        MockPipe(HasLinkPipe),
-        MockComponent(SingleFileUploadEditorComponent),
-        MockComponent(SpinnerIconComponent),
-      ],
-      imports: [ReactiveFormsModule],
-      providers: [
-        {
-          provide: BescheidenFormService,
-          useValue: formService,
-        },
-        {
-          provide: BescheidService,
-          useValue: bescheidService,
-        },
-      ],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(VorgangDetailBescheidenDokumentHochladenComponent);
-    component = fixture.componentInstance;
-    component.bescheidDraftStateResource = createBescheidStateResource();
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-
-  describe('ngOnInit', () => {
-    it('should handle document uri changes', () => {
-      bescheidService.getDocumentUri.mockReturnValue(of('DocumentUriDummy'));
-      component.handleDocumentUriChanges = jest.fn();
-
-      component.ngOnInit();
-
-      expect(component.handleDocumentUriChanges).toHaveBeenCalledWith('DocumentUriDummy');
-    });
-  });
-
-  describe('handle document uri changes', () => {
-    it('should update bescheid document file in form service', () => {
-      const documentUri: ResourceUri = faker.person.firstName();
-      formService.updateBescheidDocumentFile = jest.fn();
-
-      component.handleDocumentUriChanges(documentUri);
-
-      expect(formService.updateBescheidDocumentFile).toHaveBeenCalledWith(documentUri);
-    });
-    it('should clear bescheid document file in form service', () => {
-      formService.clearBescheidDocumentFile = jest.fn();
-
-      component.handleDocumentUriChanges(null);
-
-      expect(formService.clearBescheidDocumentFile).toHaveBeenCalled();
-    });
-  });
-
-  describe('upload file', () => {
-    it('should call service to upload bescheid document', () => {
-      const bescheidStateResource = createBescheidStateResource();
-      const file = createFile();
-      component.bescheidDraftStateResource = bescheidStateResource;
-
-      component.uploadFile(file);
-
-      expect(bescheidService.uploadBescheidDocument).toHaveBeenCalledWith(bescheidStateResource.resource, file);
-    });
-  });
-});
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-dokument-hochladen/vorgang-detail-bescheiden-dokument-hochladen.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-dokument-hochladen/vorgang-detail-bescheiden-dokument-hochladen.component.ts
deleted file mode 100644
index ebf303e9cc6208ac2fb0908cd9c1c52bf8f693d1..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-dokument-hochladen/vorgang-detail-bescheiden-dokument-hochladen.component.ts
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import {
-  BescheidLinkRel,
-  BescheidResource,
-  BescheidService,
-  UploadFileInProgress,
-} from '@alfa-client/bescheid-shared';
-import { isNotNil, StateResource } from '@alfa-client/tech-shared';
-import { Component, Input, OnDestroy, OnInit } from '@angular/core';
-import { ResourceUri } from '@ngxp/rest';
-import { isNull } from 'lodash-es';
-import { Observable, of, Subscription } from 'rxjs';
-import { BescheidenFormService } from '../../../../bescheiden.formservice';
-
-@Component({
-  selector: 'alfa-vorgang-detail-bescheiden-dokument-hochladen',
-  templateUrl: './vorgang-detail-bescheiden-dokument-hochladen.component.html',
-  styles: [],
-})
-export class VorgangDetailBescheidenDokumentHochladenComponent implements OnInit, OnDestroy {
-  @Input() bescheidDraftStateResource: StateResource<BescheidResource>;
-
-  public uploadDocumentFileInProgress$: Observable<UploadFileInProgress> = of({ loading: false });
-
-  public readonly formServiceClass = BescheidenFormService;
-  public readonly bescheidLinkRel = BescheidLinkRel;
-
-  private documentUriChangeSubscription: Subscription;
-
-  constructor(
-    public readonly formService: BescheidenFormService,
-    private bescheidService: BescheidService,
-  ) {}
-
-  ngOnInit(): void {
-    this.documentUriChangeSubscription = this.bescheidService
-      .getDocumentUri()
-      .subscribe((documentUri) => this.handleDocumentUriChanges(documentUri));
-  }
-
-  handleDocumentUriChanges(uri: ResourceUri): void {
-    if (isNull(uri)) {
-      this.formService.clearBescheidDocumentFile();
-    } else {
-      this.formService.updateBescheidDocumentFile(uri);
-    }
-  }
-
-  public uploadFile(file: File): void {
-    this.uploadDocumentFileInProgress$ = this.bescheidService.uploadBescheidDocument(
-      this.bescheidDraftStateResource.resource,
-      file,
-    );
-  }
-
-  ngOnDestroy(): void {
-    if (isNotNil(this.documentUriChangeSubscription))
-      this.documentUriChangeSubscription.unsubscribe();
-  }
-}
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-dokumente-hinzufuegen.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-dokumente-hinzufuegen.component.html
deleted file mode 100644
index 93c14522705e5f06a802280c49be66dc224a4721..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-dokumente-hinzufuegen.component.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!--
-
-    Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
-    Ministerpräsidenten des Landes Schleswig-Holstein
-    Staatskanzlei
-    Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-
-    Lizenziert unter der EUPL, Version 1.2 oder - sobald
-    diese von der Europäischen Kommission genehmigt wurden -
-    Folgeversionen der EUPL ("Lizenz");
-    Sie dürfen dieses Werk ausschließlich gemäß
-    dieser Lizenz nutzen.
-    Eine Kopie der Lizenz finden Sie hier:
-
-    https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-
-    Sofern nicht durch anwendbare Rechtsvorschriften
-    gefordert oder in schriftlicher Form vereinbart, wird
-    die unter der Lizenz verbreitete Software "so wie sie
-    ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-    ausdrücklich oder stillschweigend - verbreitet.
-    Die sprachspezifischen Genehmigungen und Beschränkungen
-    unter der Lizenz sind dem Lizenztext zu entnehmen.
-
--->
-<div class="flex flex-col gap-4">
-  <alfa-vorgang-detail-bescheiden-bescheid-automatisch-erstellen
-    [bescheidDraftStateResource]="bescheidDraftStateResource$ | async"
-  ></alfa-vorgang-detail-bescheiden-bescheid-automatisch-erstellen>
-  <alfa-vorgang-detail-bescheiden-dokument-hochladen
-    [bescheidDraftStateResource]="bescheidDraftStateResource$ | async"
-  ></alfa-vorgang-detail-bescheiden-dokument-hochladen>
-  <alfa-vorgang-detail-bescheiden-attachment-hochladen
-    [bescheidDraftStateResource]="bescheidDraftStateResource$ | async"
-  ></alfa-vorgang-detail-bescheiden-attachment-hochladen>
-</div>
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-dokumente-hinzufuegen.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-dokumente-hinzufuegen.component.spec.ts
deleted file mode 100644
index ea893f621e61c4bac925b2cb8a3a0a1155047548..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-dokumente-hinzufuegen.component.spec.ts
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BescheidService } from '@alfa-client/bescheid-shared';
-import { Mock, mock } from '@alfa-client/test-utils';
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { MockComponent } from 'ng-mocks';
-import { VorgangDetailBescheidenAttachmentHochladenComponent } from './vorgang-detail-bescheiden-attachment-hochladen/vorgang-detail-bescheiden-attachment-hochladen.component';
-import { VorgangDetailBescheidenBescheidAutomatischErstellenComponent } from './vorgang-detail-bescheiden-bescheid-automatisch-erstellen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen.component';
-import { VorgangDetailBescheidenDokumentHochladenComponent } from './vorgang-detail-bescheiden-dokument-hochladen/vorgang-detail-bescheiden-dokument-hochladen.component';
-import { VorgangDetailBescheidenDokumenteHinzufuegenComponent } from './vorgang-detail-bescheiden-dokumente-hinzufuegen.component';
-
-describe('VorgangDetailBescheidenDokumenteHinzufuegenComponent', () => {
-  let component: VorgangDetailBescheidenDokumenteHinzufuegenComponent;
-  let fixture: ComponentFixture<VorgangDetailBescheidenDokumenteHinzufuegenComponent>;
-
-  const bescheidService: Mock<BescheidService> = mock(BescheidService);
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [
-        VorgangDetailBescheidenDokumenteHinzufuegenComponent,
-        MockComponent(VorgangDetailBescheidenBescheidAutomatischErstellenComponent),
-        MockComponent(VorgangDetailBescheidenDokumentHochladenComponent),
-        MockComponent(VorgangDetailBescheidenAttachmentHochladenComponent),
-      ],
-      providers: [
-        {
-          provide: BescheidService,
-          useValue: bescheidService,
-        },
-      ],
-    }).compileComponents();
-    fixture = TestBed.createComponent(VorgangDetailBescheidenDokumenteHinzufuegenComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-
-  describe('ngOnInit', () => {
-    it('should call service get bescheid draft if exists', () => {
-      component.ngOnInit();
-
-      expect(bescheidService.getBescheidDraft).toHaveBeenCalled();
-    });
-  });
-});
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-dokumente-hinzufuegen.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-dokumente-hinzufuegen.component.ts
deleted file mode 100644
index ae454a1d2e50138e617e6f7e8cd82d6ee7da39f5..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-dokumente-hinzufuegen.component.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BescheidResource, BescheidService } from '@alfa-client/bescheid-shared';
-import { StateResource, createEmptyStateResource } from '@alfa-client/tech-shared';
-import { Component, OnInit } from '@angular/core';
-import { Observable, of } from 'rxjs';
-
-@Component({
-  selector: 'alfa-vorgang-detail-bescheiden-dokumente-hinzufuegen',
-  templateUrl: './vorgang-detail-bescheiden-dokumente-hinzufuegen.component.html',
-  styles: [],
-})
-export class VorgangDetailBescheidenDokumenteHinzufuegenComponent implements OnInit {
-  public bescheidDraftStateResource$: Observable<StateResource<BescheidResource>> = of(
-    createEmptyStateResource<BescheidResource>(),
-  );
-
-  constructor(private bescheidService: BescheidService) {}
-
-  ngOnInit(): void {
-    this.bescheidDraftStateResource$ = this.bescheidService.getBescheidDraft();
-  }
-}
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-step-content/vorgang-detail-bescheiden-step-content.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-step-content/vorgang-detail-bescheiden-step-content.component.html
deleted file mode 100644
index d940d1a0b6ee4e24b612f371157e5df63a171fdc..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-step-content/vorgang-detail-bescheiden-step-content.component.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<!--
-
-    Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
-    Ministerpräsidenten des Landes Schleswig-Holstein
-    Staatskanzlei
-    Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-
-    Lizenziert unter der EUPL, Version 1.2 oder - sobald
-    diese von der Europäischen Kommission genehmigt wurden -
-    Folgeversionen der EUPL ("Lizenz");
-    Sie dürfen dieses Werk ausschließlich gemäß
-    dieser Lizenz nutzen.
-    Eine Kopie der Lizenz finden Sie hier:
-
-    https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-
-    Sofern nicht durch anwendbare Rechtsvorschriften
-    gefordert oder in schriftlicher Form vereinbart, wird
-    die unter der Lizenz verbreitete Software "so wie sie
-    ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-    ausdrücklich oder stillschweigend - verbreitet.
-    Die sprachspezifischen Genehmigungen und Beschränkungen
-    unter der Lizenz sind dem Lizenztext zu entnehmen.
-
--->
-<div
-  *ngIf="shouldShowStep()"
-  class="min-h-28 flex-1"
-  id="vorgang-detail-bescheiden-step-content-{{ step }}"
-  role="tabpanel"
-  [tabindex]="shouldShowStepContent() ? '0' : '-1'"
->
-  <alfa-vorgang-detail-bescheiden-step-title
-    [label]="stepTitle"
-    data-test-id="step-caption"
-  ></alfa-vorgang-detail-bescheiden-step-title>
-  <div *ngIf="shouldShowStepContent()">
-    <ng-content></ng-content>
-  </div>
-</div>
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-step-content/vorgang-detail-bescheiden-step-content.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-step-content/vorgang-detail-bescheiden-step-content.component.spec.ts
deleted file mode 100644
index 825d6d08b617426f04782aedd866d705a96bbc08..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-step-content/vorgang-detail-bescheiden-step-content.component.spec.ts
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { MockComponent } from 'ng-mocks';
-import { VorgangDetailBescheidenStepTitleComponent } from '../../vorgang-detail-bescheiden-step-title/vorgang-detail-bescheiden-step-title.component';
-import { VorgangDetailBescheidenWeiterButtonComponent } from '../../vorgang-detail-bescheiden-weiter-button/vorgang-detail-bescheiden-weiter-button.component';
-import { VorgangDetailBescheidenStepContentComponent } from './vorgang-detail-bescheiden-step-content.component';
-
-describe('VorgangDetailBescheidenStepsContentComponent', () => {
-  let component: VorgangDetailBescheidenStepContentComponent;
-  let fixture: ComponentFixture<VorgangDetailBescheidenStepContentComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [
-        VorgangDetailBescheidenStepContentComponent,
-        MockComponent(VorgangDetailBescheidenWeiterButtonComponent),
-        MockComponent(VorgangDetailBescheidenStepTitleComponent),
-      ],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(VorgangDetailBescheidenStepContentComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-
-  describe('shouldShowStep', () => {
-    it('should return true', () => {
-      component.activeStep = 2;
-      component.step = 2;
-
-      const shouldShowStep = component.shouldShowStep();
-
-      expect(shouldShowStep).toBeTruthy();
-    });
-
-    it('should return false', () => {
-      component.activeStep = 2;
-      component.step = 3;
-
-      const shouldShowStep = component.shouldShowStep();
-
-      expect(shouldShowStep).toBeFalsy();
-    });
-  });
-
-  describe('shouldShowStepContent', () => {
-    it('should return true', () => {
-      component.activeStep = 2;
-      component.step = 2;
-
-      const shouldShowStep = component.shouldShowStepContent();
-
-      expect(shouldShowStep).toBeTruthy();
-    });
-
-    it('should return false', () => {
-      component.activeStep = 2;
-      component.step = 1;
-
-      const shouldShowStep = component.shouldShowStepContent();
-
-      expect(shouldShowStep).toBeFalsy();
-    });
-  });
-});
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-step-content/vorgang-detail-bescheiden-step-content.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-step-content/vorgang-detail-bescheiden-step-content.component.ts
deleted file mode 100644
index 4ab18f4714f922f27232a7b0a66d48bb5d08f9f0..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-step-content/vorgang-detail-bescheiden-step-content.component.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { Component, Input } from '@angular/core';
-
-@Component({
-  selector: 'alfa-vorgang-detail-bescheiden-step-content',
-  templateUrl: './vorgang-detail-bescheiden-step-content.component.html',
-  styles: [':host {@apply flex}'],
-})
-export class VorgangDetailBescheidenStepContentComponent {
-  @Input() stepTitle: string;
-  @Input() step: number;
-  @Input() nextStep: number;
-  @Input() activeStep: number = 1;
-
-  public shouldShowStep(): boolean {
-    return this.activeStep > this.step - 1;
-  }
-
-  public shouldShowStepContent(): boolean {
-    return this.activeStep === this.step;
-  }
-}
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-steps-content.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-steps-content.component.html
deleted file mode 100644
index ab8c1d21a70bcd3eadfb8bf884a6215e961019be..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-steps-content.component.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<!--
-
-    Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
-    Ministerpräsidenten des Landes Schleswig-Holstein
-    Staatskanzlei
-    Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-
-    Lizenziert unter der EUPL, Version 1.2 oder - sobald
-    diese von der Europäischen Kommission genehmigt wurden -
-    Folgeversionen der EUPL ("Lizenz");
-    Sie dürfen dieses Werk ausschließlich gemäß
-    dieser Lizenz nutzen.
-    Eine Kopie der Lizenz finden Sie hier:
-
-    https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-
-    Sofern nicht durch anwendbare Rechtsvorschriften
-    gefordert oder in schriftlicher Form vereinbart, wird
-    die unter der Lizenz verbreitete Software "so wie sie
-    ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-    ausdrücklich oder stillschweigend - verbreitet.
-    Die sprachspezifischen Genehmigungen und Beschränkungen
-    unter der Lizenz sind dem Lizenztext zu entnehmen.
-
--->
-<alfa-vorgang-detail-bescheiden-step-content
-  stepTitle="Antrag bescheiden"
-  [step]="1"
-  [nextStep]="2"
-  [activeStep]="activeStep$ | async"
->
-  <alfa-vorgang-detail-bescheiden-antrag-bescheiden></alfa-vorgang-detail-bescheiden-antrag-bescheiden>
-  <alfa-vorgang-detail-bescheiden-weiter-button
-    (clickEmitter)="changeActiveStep(2)"
-    [submitResource]="submitResource"
-  ></alfa-vorgang-detail-bescheiden-weiter-button>
-</alfa-vorgang-detail-bescheiden-step-content>
-
-<alfa-vorgang-detail-bescheiden-step-content
-  stepTitle="Dokumente hinzufügen"
-  [step]="2"
-  [nextStep]="3"
-  [activeStep]="activeStep$ | async"
->
-  <alfa-vorgang-detail-bescheiden-dokumente-hinzufuegen
-    *ngIf="(activeStep$ | async) === 2"
-    data-test-id="bescheid-documents-upload"
-  ></alfa-vorgang-detail-bescheiden-dokumente-hinzufuegen>
-  <alfa-vorgang-detail-bescheiden-weiter-button
-    (clickEmitter)="changeActiveStep(3)"
-    [submitResource]="submitResource"
-  ></alfa-vorgang-detail-bescheiden-weiter-button>
-</alfa-vorgang-detail-bescheiden-step-content>
-
-<alfa-vorgang-detail-bescheiden-step-content
-  stepTitle="Bescheid versenden"
-  [step]="3"
-  [nextStep]="3"
-  [activeStep]="activeStep$ | async"
->
-  <alfa-vorgang-detail-bescheiden-bescheid-versenden
-    *ngIf="(activeStep$ | async) === 3"
-    data-test-id="bescheiden-bescheid-versenden"
-  ></alfa-vorgang-detail-bescheiden-bescheid-versenden>
-</alfa-vorgang-detail-bescheiden-step-content>
-
-<alfa-vorgang-detail-bescheiden-ueberspringen-button
-  *ngIf="showBescheidErstellungUeberspringen$ | async"
-></alfa-vorgang-detail-bescheiden-ueberspringen-button>
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-steps-content.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-steps-content.component.spec.ts
deleted file mode 100644
index d9ff1e4db615920247c80afd51992b5a2f7bf266..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-steps-content.component.spec.ts
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BescheidService } from '@alfa-client/bescheid-shared';
-import {
-  createEmptyStateResource,
-  createErrorStateResource,
-  createStateResource,
-} from '@alfa-client/tech-shared';
-import { Mock, getElementFromFixture, mock } from '@alfa-client/test-utils';
-import { VorgangService, VorgangWithEingangLinkRel } from '@alfa-client/vorgang-shared';
-import { EventEmitter } from '@angular/core';
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { createApiError } from 'libs/tech-shared/test/error';
-import { MockComponent } from 'ng-mocks';
-import { EMPTY, of } from 'rxjs';
-import {
-  createCommandResource,
-  createCommandStateResource,
-} from '../../../../../../../command-shared/test/command';
-import { getDataTestIdOf } from '../../../../../../../tech-shared/test/data-test';
-import { singleCold } from '../../../../../../../tech-shared/test/marbles';
-import { createVorgangWithEingangResource } from '../../../../../../../vorgang-shared/test/vorgang';
-import { BescheidenFormService } from '../../bescheiden.formservice';
-import { VorgangDetailBescheidenStepTitleComponent } from '../vorgang-detail-bescheiden-step-title/vorgang-detail-bescheiden-step-title.component';
-import { VorgangDetailBescheidenWeiterButtonComponent } from '../vorgang-detail-bescheiden-weiter-button/vorgang-detail-bescheiden-weiter-button.component';
-import { VorgangDetailBescheidenAntragBescheidenComponent } from './vorgang-detail-bescheiden-antrag-bescheiden/vorgang-detail-bescheiden-antrag-bescheiden.component';
-import { VorgangDetailBescheidenBescheidVersendenComponent } from './vorgang-detail-bescheiden-bescheid-versenden/vorgang-detail-bescheiden-bescheid-versenden.component';
-import { VorgangDetailBescheidenDokumenteHinzufuegenComponent } from './vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-dokumente-hinzufuegen.component';
-import { VorgangDetailBescheidenStepContentComponent } from './vorgang-detail-bescheiden-step-content/vorgang-detail-bescheiden-step-content.component';
-import { VorgangDetailBescheidenStepsContentComponent } from './vorgang-detail-bescheiden-steps-content.component';
-import { VorgangDetailBescheidenUeberspringenButtonComponent } from './vorgang-detail-bescheiden-ueberspringen-button/vorgang-detail-bescheiden-ueberspringen-button.component';
-
-describe('VorgangDetailBescheidenStepsContentComponent', () => {
-  let component: VorgangDetailBescheidenStepsContentComponent;
-  let fixture: ComponentFixture<VorgangDetailBescheidenStepsContentComponent>;
-
-  let vorgangService: Mock<VorgangService>;
-  let bescheidService: Mock<BescheidService>;
-  let formService: Mock<BescheidenFormService>;
-
-  const bescheidVersendenTestId: string = getDataTestIdOf('bescheiden-bescheid-versenden');
-
-  beforeEach(async () => {
-    vorgangService = mock(VorgangService);
-    vorgangService.getVorgangWithEingang.mockReturnValue(EMPTY);
-
-    bescheidService = mock(BescheidService);
-    formService = mock(BescheidenFormService);
-
-    await TestBed.configureTestingModule({
-      declarations: [
-        VorgangDetailBescheidenStepsContentComponent,
-        MockComponent(VorgangDetailBescheidenWeiterButtonComponent),
-        MockComponent(VorgangDetailBescheidenStepTitleComponent),
-        MockComponent(VorgangDetailBescheidenStepContentComponent),
-        MockComponent(VorgangDetailBescheidenUeberspringenButtonComponent),
-        MockComponent(VorgangDetailBescheidenAntragBescheidenComponent),
-        MockComponent(VorgangDetailBescheidenDokumenteHinzufuegenComponent),
-        MockComponent(VorgangDetailBescheidenBescheidVersendenComponent),
-      ],
-      providers: [
-        {
-          provide: VorgangService,
-          useValue: vorgangService,
-        },
-        {
-          provide: BescheidService,
-          useValue: bescheidService,
-        },
-        {
-          provide: BescheidenFormService,
-          useValue: formService,
-        },
-      ],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(VorgangDetailBescheidenStepsContentComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-
-  describe('render', () => {
-    it('should show documents component in step 2', () => {
-      component.activeStep = 2;
-      fixture.detectChanges();
-
-      const element = getElementFromFixture(fixture, getDataTestIdOf('bescheid-documents-upload'));
-
-      expect(element).toBeInstanceOf(HTMLElement);
-    });
-
-    it.each([1, 3])('should not show documents component in step %d', (step) => {
-      component.activeStep = step;
-      fixture.detectChanges();
-
-      const element = getElementFromFixture(fixture, getDataTestIdOf('bescheid-documents-upload'));
-
-      expect(element).not.toBeInstanceOf(HTMLElement);
-    });
-
-    it('should show bescheid versenden in step 3', () => {
-      component.activeStep = 3;
-      fixture.detectChanges();
-
-      const element = getElementFromFixture(fixture, bescheidVersendenTestId);
-
-      expect(element).toBeInstanceOf(HTMLElement);
-    });
-
-    it.each([1, 2])('should not show bescheid versenden in step %d', (step: number) => {
-      component.activeStep = step;
-      fixture.detectChanges();
-
-      const element = getElementFromFixture(fixture, bescheidVersendenTestId);
-
-      expect(element).not.toBeInstanceOf(HTMLElement);
-    });
-  });
-
-  describe('changeActiveStep', () => {
-    beforeEach(() => {
-      component.activeStepChange = <any>mock(EventEmitter);
-      formService.submit = jest.fn();
-    });
-
-    it('should submit', () => {
-      component.canChangeTo = jest.fn().mockReturnValue(true);
-      formService.submit = jest.fn().mockReturnValue(EMPTY);
-
-      component.changeActiveStep(1);
-
-      expect(formService.submit).toHaveBeenCalled();
-    });
-
-    it('should not submit', () => {
-      component.canChangeTo = jest.fn().mockReturnValue(false);
-      formService.submit = jest.fn().mockReturnValue(EMPTY);
-
-      component.changeActiveStep(1);
-
-      expect(formService.submit).not.toHaveBeenCalled();
-    });
-  });
-
-  describe('canChangeTo', () => {
-    it.each([1, 2])('should true for step %d', (step: number) => {
-      const canChange = component.canChangeTo(step);
-
-      expect(canChange).toBeTruthy();
-    });
-
-    it('should return true for step 3', () => {
-      formService.validateBescheidDocumentExists.mockReturnValue(true);
-
-      const canChange = component.canChangeTo(3);
-
-      expect(canChange).toBeTruthy();
-    });
-
-    it('should return false for step 3', () => {
-      formService.validateBescheidDocumentExists.mockReturnValue(false);
-
-      const canChange = component.canChangeTo(3);
-
-      expect(canChange).toBeFalsy();
-    });
-  });
-
-  describe('ngOnInit', () => {
-    it('should render überspringen und abschliessen button', () => {
-      component.activeStep = 1;
-      vorgangService.getVorgangWithEingang.mockReturnValue(
-        of(
-          createStateResource(
-            createVorgangWithEingangResource([VorgangWithEingangLinkRel.ABSCHLIESSEN]),
-          ),
-        ),
-      );
-
-      component.ngOnInit();
-
-      expect(component.showBescheidErstellungUeberspringen$).toBeObservable(singleCold(true));
-    });
-
-    it('should not render überspringen und abschliessen button for active step 2', () => {
-      component.activeStep = 2;
-      vorgangService.getVorgangWithEingang.mockReturnValue(
-        of(
-          createStateResource(
-            createVorgangWithEingangResource([VorgangWithEingangLinkRel.ABSCHLIESSEN]),
-          ),
-        ),
-      );
-
-      component.ngOnInit();
-
-      expect(component.showBescheidErstellungUeberspringen$).toBeObservable(singleCold(false));
-    });
-
-    it('should not render überspringen und abschliessen button if link missing', () => {
-      component.activeStep = 1;
-      vorgangService.getVorgangWithEingang.mockReturnValue(
-        of(createStateResource(createVorgangWithEingangResource())),
-      );
-
-      component.ngOnInit();
-
-      expect(component.showBescheidErstellungUeberspringen$).toBeObservable(singleCold(false));
-    });
-  });
-
-  describe('noError', () => {
-    it('should return true', () => {
-      const noError = component.noError(createCommandStateResource());
-
-      expect(noError).toBeTruthy();
-    });
-
-    it('should return false on not loaded state resource', () => {
-      const noError = component.noError(createEmptyStateResource());
-
-      expect(noError).toBeFalsy();
-    });
-
-    it('should return false on loading state resource', () => {
-      const noError = component.noError(createStateResource(createCommandResource(), true));
-
-      expect(noError).toBeFalsy();
-    });
-
-    it('should return false on error state resource', () => {
-      const noError = component.noError(createErrorStateResource(createApiError()));
-
-      expect(noError).toBeFalsy();
-    });
-  });
-});
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-steps-content.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-steps-content.component.ts
deleted file mode 100644
index c880db36f7f58edf7f7865beb016deedf5d69ed2..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-steps-content.component.ts
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import {
-  StateResource,
-  createEmptyStateResource,
-  hasStateResourceError,
-  isLoaded,
-} from '@alfa-client/tech-shared';
-import {
-  VorgangService,
-  VorgangWithEingangLinkRel,
-  VorgangWithEingangResource,
-} from '@alfa-client/vorgang-shared';
-import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
-import { Resource, hasLink } from '@ngxp/rest';
-import { BehaviorSubject, Observable, combineLatest, filter, first, map, tap } from 'rxjs';
-import { BescheidenFormService } from '../../bescheiden.formservice';
-
-@Component({
-  selector: 'alfa-vorgang-detail-bescheiden-steps-content',
-  templateUrl: './vorgang-detail-bescheiden-steps-content.component.html',
-  styles: [':host {@apply flex flex-col}'],
-})
-export class VorgangDetailBescheidenStepsContentComponent implements OnInit {
-  readonly activeStep$ = new BehaviorSubject(1);
-
-  @Input() set activeStep(step: number) {
-    this.activeStep$.next(step);
-  }
-  @Output() activeStepChange = new EventEmitter<number>();
-
-  showBescheidErstellungUeberspringen$: Observable<boolean>;
-
-  submitResource: StateResource<Resource> = createEmptyStateResource();
-
-  constructor(
-    private readonly vorgangService: VorgangService,
-    private formService: BescheidenFormService,
-  ) {}
-
-  ngOnInit(): void {
-    this.showBescheidErstellungUeberspringen$ = combineLatest([
-      this.vorgangService.getVorgangWithEingang().pipe(
-        filter(isLoaded),
-        map((stateResource: StateResource<VorgangWithEingangResource>) =>
-          hasLink(stateResource.resource, VorgangWithEingangLinkRel.ABSCHLIESSEN),
-        ),
-      ),
-      this.activeStep$.pipe(map((step) => step === 1)),
-    ]).pipe(map(([hasAbschliessenLink, isFirstStep]) => hasAbschliessenLink && isFirstStep));
-  }
-
-  public changeActiveStep(step: number): void {
-    if (this.canChangeTo(step)) {
-      this.formService
-        .submit()
-        .pipe(
-          tap((resource: StateResource<Resource>) => (this.submitResource = resource)),
-          filter(this.noError),
-          first(),
-        )
-        .subscribe(() => {
-          this.formService.setActiveStep(step);
-          this.activeStepChange.emit(step);
-        });
-    }
-  }
-
-  canChangeTo(nextStep: number): boolean {
-    if (nextStep < 3) {
-      return true;
-    }
-    return this.formService.validateBescheidDocumentExists();
-  }
-
-  noError(stateResource: StateResource<Resource>): boolean {
-    return isLoaded(stateResource) && !hasStateResourceError(stateResource);
-  }
-}
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-button/vorgang-detail-bescheiden-ueberspringen-button.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-button/vorgang-detail-bescheiden-ueberspringen-button.component.html
deleted file mode 100644
index c12b66319d09caa61ccb7b5289dd79f5ccf5ca12..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-button/vorgang-detail-bescheiden-ueberspringen-button.component.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!--
-
-    Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
-    Ministerpräsidenten des Landes Schleswig-Holstein
-    Staatskanzlei
-    Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-
-    Lizenziert unter der EUPL, Version 1.2 oder - sobald
-    diese von der Europäischen Kommission genehmigt wurden -
-    Folgeversionen der EUPL ("Lizenz");
-    Sie dürfen dieses Werk ausschließlich gemäß
-    dieser Lizenz nutzen.
-    Eine Kopie der Lizenz finden Sie hier:
-
-    https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-
-    Sofern nicht durch anwendbare Rechtsvorschriften
-    gefordert oder in schriftlicher Form vereinbart, wird
-    die unter der Lizenz verbreitete Software "so wie sie
-    ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-    ausdrücklich oder stillschweigend - verbreitet.
-    Die sprachspezifischen Genehmigungen und Beschränkungen
-    unter der Lizenz sind dem Lizenztext zu entnehmen.
-
--->
-<button
-  (click)="onClick()"
-  data-test-id="bescheid-ueberspringen"
-  class="mt-6 select-none text-left text-primary hover:underline"
->
-  Bescheiderstellung überspringen<br />und abschließen
-</button>
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-button/vorgang-detail-bescheiden-ueberspringen-button.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-button/vorgang-detail-bescheiden-ueberspringen-button.component.spec.ts
deleted file mode 100644
index 6b574a970798d3521230f50d7fe14dab66087a02..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-button/vorgang-detail-bescheiden-ueberspringen-button.component.spec.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { Mock, mock } from '@alfa-client/test-utils';
-import { OzgcloudDialogService } from '@alfa-client/ui';
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { VorgangDetailBescheidenUeberspringenDialogComponent } from '../vorgang-detail-bescheiden-ueberspringen-dialog/vorgang-detail-bescheiden-ueberspringen-dialog.component';
-import { VorgangDetailBescheidenUeberspringenButtonComponent } from './vorgang-detail-bescheiden-ueberspringen-button.component';
-
-describe('VorgangDetailBescheidenUeberspringenButtonComponent', () => {
-  let component: VorgangDetailBescheidenUeberspringenButtonComponent;
-  let fixture: ComponentFixture<VorgangDetailBescheidenUeberspringenButtonComponent>;
-
-  let ozgcloudDialogService: Mock<OzgcloudDialogService>;
-
-  beforeEach(async () => {
-    ozgcloudDialogService = mock(OzgcloudDialogService);
-
-    await TestBed.configureTestingModule({
-      declarations: [VorgangDetailBescheidenUeberspringenButtonComponent],
-      providers: [
-        {
-          provide: OzgcloudDialogService,
-          useValue: ozgcloudDialogService,
-        },
-      ],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(VorgangDetailBescheidenUeberspringenButtonComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-
-  describe('onClick', () => {
-    it('should open dialog', () => {
-      component.onClick();
-
-      expect(ozgcloudDialogService.open).toHaveBeenCalledWith(
-        VorgangDetailBescheidenUeberspringenDialogComponent,
-      );
-    });
-  });
-});
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-button/vorgang-detail-bescheiden-ueberspringen-button.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-button/vorgang-detail-bescheiden-ueberspringen-button.component.ts
deleted file mode 100644
index 37aa7deb4c581124eb3be9a57d30cf784c0951cd..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-button/vorgang-detail-bescheiden-ueberspringen-button.component.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { OzgcloudDialogService } from '@alfa-client/ui';
-import { VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
-import { Component, Input } from '@angular/core';
-import { VorgangDetailBescheidenUeberspringenDialogComponent } from '../vorgang-detail-bescheiden-ueberspringen-dialog/vorgang-detail-bescheiden-ueberspringen-dialog.component';
-
-@Component({
-  selector: 'alfa-vorgang-detail-bescheiden-ueberspringen-button',
-  templateUrl: './vorgang-detail-bescheiden-ueberspringen-button.component.html',
-  styles: [':host {@apply flex flex-1 items-end}'],
-})
-export class VorgangDetailBescheidenUeberspringenButtonComponent {
-  @Input() vorgang: VorgangWithEingangResource;
-
-  constructor(private readonly ozgcloudDialogService: OzgcloudDialogService) {}
-
-  public onClick(): void {
-    this.ozgcloudDialogService.open<VorgangDetailBescheidenUeberspringenDialogComponent>(
-      VorgangDetailBescheidenUeberspringenDialogComponent,
-    );
-  }
-}
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-dialog/vorgang-detail-bescheiden-ueberspringen-dialog.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-dialog/vorgang-detail-bescheiden-ueberspringen-dialog.component.html
deleted file mode 100644
index 407ab86311898af6a4bfcd3eda4eebe1d03ac20f..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-dialog/vorgang-detail-bescheiden-ueberspringen-dialog.component.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!--
-
-    Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
-    Ministerpräsidenten des Landes Schleswig-Holstein
-    Staatskanzlei
-    Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-
-    Lizenziert unter der EUPL, Version 1.2 oder - sobald
-    diese von der Europäischen Kommission genehmigt wurden -
-    Folgeversionen der EUPL ("Lizenz");
-    Sie dürfen dieses Werk ausschließlich gemäß
-    dieser Lizenz nutzen.
-    Eine Kopie der Lizenz finden Sie hier:
-
-    https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-
-    Sofern nicht durch anwendbare Rechtsvorschriften
-    gefordert oder in schriftlicher Form vereinbart, wird
-    die unter der Lizenz verbreitete Software "so wie sie
-    ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-    ausdrücklich oder stillschweigend - verbreitet.
-    Die sprachspezifischen Genehmigungen und Beschränkungen
-    unter der Lizenz sind dem Lizenztext zu entnehmen.
-
--->
-<div
-  class="relative m-6 max-w-2xl rounded-lg bg-modalBg p-6 shadow-xl"
-  data-test-id="bescheid-ueberspringen-dialog"
->
-  <button
-    class="absolute right-4 top-4 flex size-12 items-center justify-center rounded-full hover:bg-background-100"
-    (click)="onClose()"
-  >
-    <mat-icon>close</mat-icon>
-  </button>
-
-  <div class="flex flex-col gap-6">
-    <div>
-      <h4 class="text-lg font-medium text-primary">Bescheiderstellung überspringen</h4>
-    </div>
-    <div class="grow">
-      <p class="text-base">
-        Soll die Bescheiderstellung übersprungen und der Vorgang direkt in den Status Abgeschlossen
-        gesetzt werden?
-      </p>
-    </div>
-    <div class="flex gap-4">
-      <ozgcloud-stroked-button-with-spinner
-        (click)="onConfirm()"
-        data-test-id="ueberspringen-abschliessen-button"
-        text="Überspringen und abschließen"
-        type="submit"
-        icon="check"
-        [stateResource]="bescheiderstellungUeberspringen$ | async"
-      >
-      </ozgcloud-stroked-button-with-spinner>
-      <ozgcloud-stroked-button-with-spinner
-        (click)="onCancel()"
-        data-test-id="ueberspringen-abbrechen-button"
-        text="Abbrechen"
-        color=""
-        icon="clear"
-        type="submit"
-      >
-      </ozgcloud-stroked-button-with-spinner>
-    </div>
-  </div>
-</div>
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-dialog/vorgang-detail-bescheiden-ueberspringen-dialog.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-dialog/vorgang-detail-bescheiden-ueberspringen-dialog.component.spec.ts
deleted file mode 100644
index 8429d3185620d549723b4fbbaa1c620e1a5c6cb8..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-dialog/vorgang-detail-bescheiden-ueberspringen-dialog.component.spec.ts
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BescheidService } from '@alfa-client/bescheid-shared';
-import { CommandResource } from '@alfa-client/command-shared';
-import {
-  StateResource,
-  createEmptyStateResource,
-  createStateResource,
-} from '@alfa-client/tech-shared';
-import { Mock, mock } from '@alfa-client/test-utils';
-import { OzgcloudDialogService, OzgcloudStrokedButtonWithSpinnerComponent } from '@alfa-client/ui';
-import { VorgangService, VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
-import { DialogRef } from '@angular/cdk/dialog';
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { MatIcon } from '@angular/material/icon';
-import { cold } from 'jest-marbles';
-import { MockComponent } from 'ng-mocks';
-import { of } from 'rxjs';
-import { CommandLinkRel } from '../../../../../../../../command-shared/src/lib/command.linkrel';
-import { createCommandResource } from '../../../../../../../../command-shared/test/command';
-import { createVorgangWithEingangResource } from '../../../../../../../../vorgang-shared/test/vorgang';
-import { VorgangDetailBescheidenUeberspringenDialogComponent } from './vorgang-detail-bescheiden-ueberspringen-dialog.component';
-
-describe('VorgangDetailBescheidenUeberspringenButtonComponent', () => {
-  let component: VorgangDetailBescheidenUeberspringenDialogComponent;
-  let fixture: ComponentFixture<VorgangDetailBescheidenUeberspringenDialogComponent>;
-
-  let dialogRef: Mock<DialogRef>;
-  let bescheidService: Mock<BescheidService>;
-  let ozgcloudDialogService: Mock<OzgcloudDialogService>;
-  let vorgangService: Mock<VorgangService>;
-
-  beforeEach(async () => {
-    dialogRef = mock(DialogRef);
-    bescheidService = mock(BescheidService);
-    ozgcloudDialogService = mock(OzgcloudDialogService);
-    vorgangService = mock(VorgangService);
-
-    await TestBed.configureTestingModule({
-      declarations: [
-        VorgangDetailBescheidenUeberspringenDialogComponent,
-        MockComponent(OzgcloudStrokedButtonWithSpinnerComponent),
-        MockComponent(MatIcon),
-      ],
-      providers: [
-        {
-          provide: DialogRef,
-          useValue: dialogRef,
-        },
-        {
-          provide: BescheidService,
-          useValue: bescheidService,
-        },
-        {
-          provide: OzgcloudDialogService,
-          useValue: ozgcloudDialogService,
-        },
-        {
-          provide: VorgangService,
-          useValue: vorgangService,
-        },
-      ],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(VorgangDetailBescheidenUeberspringenDialogComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-
-  describe('onCancel', () => {
-    it('should close dialog', () => {
-      component.onCancel();
-
-      expect(dialogRef.close).toHaveBeenCalled();
-    });
-  });
-
-  describe('onConfirm', () => {
-    let vorgangWithEingangResource: VorgangWithEingangResource;
-    const successfullyDoneCommandStateResource: StateResource<CommandResource> =
-      createStateResource(createCommandResource([CommandLinkRel.EFFECTED_RESOURCE]));
-
-    beforeEach(() => {
-      vorgangWithEingangResource = createVorgangWithEingangResource();
-      vorgangService.getVorgangWithEingang.mockReturnValue(
-        of(createStateResource(vorgangWithEingangResource)),
-      );
-      bescheidService.bescheidErstellungUeberspringen.mockReturnValue(
-        of(successfullyDoneCommandStateResource),
-      );
-    });
-
-    it('should get vorgang with eingang', () => {
-      component.onConfirm();
-
-      expect(vorgangService.getVorgangWithEingang).toHaveBeenCalled();
-    });
-
-    it('should call bescheid service erstellung ueberspringen', (done) => {
-      component.onConfirm();
-
-      component.bescheiderstellungUeberspringen$.subscribe(() => {
-        expect(bescheidService.bescheidErstellungUeberspringen).toHaveBeenCalledWith(
-          vorgangWithEingangResource,
-        );
-        done();
-      });
-    });
-
-    it('should close all dialogs on success', (done) => {
-      component.onConfirm();
-
-      component.bescheiderstellungUeberspringen$.subscribe(() => {
-        expect(ozgcloudDialogService.closeAll).toHaveBeenCalled();
-        done();
-      });
-    });
-
-    it('should not close all dialogs on command not done successfully', (done) => {
-      bescheidService.bescheidErstellungUeberspringen.mockReturnValue(
-        of(createEmptyStateResource()),
-      );
-
-      component.onConfirm();
-
-      component.bescheiderstellungUeberspringen$.subscribe(() => {
-        expect(ozgcloudDialogService.closeAll).not.toHaveBeenCalled();
-        done();
-      });
-    });
-
-    it('should return command', () => {
-      component.onConfirm();
-
-      expect(component.bescheiderstellungUeberspringen$).toBeObservable(
-        cold('(a|)', { a: successfullyDoneCommandStateResource }),
-      );
-    });
-  });
-
-  describe('onClose', () => {
-    it('should close dialog', () => {
-      component.onClose();
-
-      expect(dialogRef.close).toHaveBeenCalled();
-    });
-  });
-});
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-dialog/vorgang-detail-bescheiden-ueberspringen-dialog.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-dialog/vorgang-detail-bescheiden-ueberspringen-dialog.component.ts
deleted file mode 100644
index c960ee26ac2d189260e5afa2ec4ce95ef56ec95b..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-dialog/vorgang-detail-bescheiden-ueberspringen-dialog.component.ts
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BescheidService } from '@alfa-client/bescheid-shared';
-import { CommandResource, tapOnCommandSuccessfullyDone } from '@alfa-client/command-shared';
-import { StateResource, isLoaded } from '@alfa-client/tech-shared';
-import { OzgcloudDialogService } from '@alfa-client/ui';
-import { VorgangService } from '@alfa-client/vorgang-shared';
-import { DialogRef } from '@angular/cdk/dialog';
-import { Component } from '@angular/core';
-import { Observable, filter, first, switchMap } from 'rxjs';
-
-@Component({
-  selector: 'alfa-vorgang-detail-bescheiden-ueberspringen-dialog',
-  templateUrl: './vorgang-detail-bescheiden-ueberspringen-dialog.component.html',
-})
-export class VorgangDetailBescheidenUeberspringenDialogComponent {
-  bescheiderstellungUeberspringen$: Observable<StateResource<CommandResource>>;
-
-  constructor(
-    private readonly dialogRef: DialogRef,
-    private readonly bescheidService: BescheidService,
-    private readonly ozgcloudDialogService: OzgcloudDialogService,
-    private readonly vorgangService: VorgangService,
-  ) {}
-
-  public onClose(): void {
-    this.dialogRef.close();
-  }
-
-  public onConfirm(): void {
-    this.bescheiderstellungUeberspringen$ = this.vorgangService.getVorgangWithEingang().pipe(
-      filter(isLoaded),
-      first(),
-      switchMap((stateResource) =>
-        this.bescheidService.bescheidErstellungUeberspringen(stateResource.resource).pipe(
-          tapOnCommandSuccessfullyDone(() => {
-            this.ozgcloudDialogService.closeAll();
-          }),
-        ),
-      ),
-    );
-  }
-
-  public onCancel(): void {
-    this.dialogRef.close();
-  }
-}
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps.component.html
deleted file mode 100644
index 5036dc81f87a4906d55be87f32a538b6e50679aa..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps.component.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!--
-
-    Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
-    Ministerpräsidenten des Landes Schleswig-Holstein
-    Staatskanzlei
-    Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-
-    Lizenziert unter der EUPL, Version 1.2 oder - sobald
-    diese von der Europäischen Kommission genehmigt wurden -
-    Folgeversionen der EUPL ("Lizenz");
-    Sie dürfen dieses Werk ausschließlich gemäß
-    dieser Lizenz nutzen.
-    Eine Kopie der Lizenz finden Sie hier:
-
-    https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-
-    Sofern nicht durch anwendbare Rechtsvorschriften
-    gefordert oder in schriftlicher Form vereinbart, wird
-    die unter der Lizenz verbreitete Software "so wie sie
-    ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-    ausdrücklich oder stillschweigend - verbreitet.
-    Die sprachspezifischen Genehmigungen und Beschränkungen
-    unter der Lizenz sind dem Lizenztext zu entnehmen.
-
--->
-<div class="flex w-full flex-row gap-7" role="tablist" aria-orientation="vertical">
-  <alfa-vorgang-detail-bescheiden-step-buttons
-    [(activeStep)]="activeStep"
-  ></alfa-vorgang-detail-bescheiden-step-buttons>
-  <alfa-vorgang-detail-bescheiden-steps-content
-    class="flex-1"
-    [(activeStep)]="activeStep"
-  ></alfa-vorgang-detail-bescheiden-steps-content>
-</div>
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps.component.spec.ts
deleted file mode 100644
index 3f3fe9261b3e5fda926612eb2714c91df04f6079..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps.component.spec.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { MockComponent } from 'ng-mocks';
-import { VorgangDetailBescheidenStepButtonsComponent } from './vorgang-detail-bescheiden-step-buttons/vorgang-detail-bescheiden-step-buttons.component';
-import { VorgangDetailBescheidenStepsContentComponent } from './vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-steps-content.component';
-import { VorgangDetailBescheidenStepsComponent } from './vorgang-detail-bescheiden-steps.component';
-import { VorgangDetailBescheidenWeiterButtonComponent } from './vorgang-detail-bescheiden-weiter-button/vorgang-detail-bescheiden-weiter-button.component';
-
-describe('VorgangDetailBescheidenStepsComponent', () => {
-  let component: VorgangDetailBescheidenStepsComponent;
-  let fixture: ComponentFixture<VorgangDetailBescheidenStepsComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [
-        VorgangDetailBescheidenStepsComponent,
-        MockComponent(VorgangDetailBescheidenStepButtonsComponent),
-        MockComponent(VorgangDetailBescheidenWeiterButtonComponent),
-        MockComponent(VorgangDetailBescheidenStepsContentComponent),
-      ],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(VorgangDetailBescheidenStepsComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-
-  describe('changeActiveStep', () => {
-    it('should set activeStep', () => {
-      const step: number = 1;
-
-      component.changeActiveStep(step);
-
-      expect(component.activeStep).toBe(step);
-    });
-  });
-});
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps.component.ts
deleted file mode 100644
index c77004f343469a304d8b498a52223b77b5452da0..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps.component.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { Component, Input } from '@angular/core';
-
-@Component({
-  selector: 'alfa-vorgang-detail-bescheiden-steps',
-  templateUrl: './vorgang-detail-bescheiden-steps.component.html',
-})
-export class VorgangDetailBescheidenStepsComponent {
-  @Input() activeStep: number = 1;
-
-  public changeActiveStep(step: number): void {
-    this.activeStep = step;
-  }
-}
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-weiter-button/vorgang-detail-bescheiden-weiter-button.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-weiter-button/vorgang-detail-bescheiden-weiter-button.component.html
deleted file mode 100644
index 49e6a9a7906c47445d2c667004494a94170ee84d..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-weiter-button/vorgang-detail-bescheiden-weiter-button.component.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!--
-
-    Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
-    Ministerpräsidenten des Landes Schleswig-Holstein
-    Staatskanzlei
-    Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-
-    Lizenziert unter der EUPL, Version 1.2 oder - sobald
-    diese von der Europäischen Kommission genehmigt wurden -
-    Folgeversionen der EUPL ("Lizenz");
-    Sie dürfen dieses Werk ausschließlich gemäß
-    dieser Lizenz nutzen.
-    Eine Kopie der Lizenz finden Sie hier:
-
-    https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-
-    Sofern nicht durch anwendbare Rechtsvorschriften
-    gefordert oder in schriftlicher Form vereinbart, wird
-    die unter der Lizenz verbreitete Software "so wie sie
-    ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-    ausdrücklich oder stillschweigend - verbreitet.
-    Die sprachspezifischen Genehmigungen und Beschränkungen
-    unter der Lizenz sind dem Lizenztext zu entnehmen.
-
--->
-<ods-button-with-spinner
-  *ngIf="showButton$ | async"
-  (clickEmitter)="clickEmitter.emit()"
-  [stateResource]="submitResource"
-  variant="primary"
-  size="medium"
-  class="mt-8 flex"
-  dataTestId="bescheid-weiter-button"
-  text="Weiter"
->
-</ods-button-with-spinner>
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-weiter-button/vorgang-detail-bescheiden-weiter-button.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-weiter-button/vorgang-detail-bescheiden-weiter-button.component.spec.ts
deleted file mode 100644
index 510d50d1bc34aac1039966aad3cc53fe389cbc42..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-weiter-button/vorgang-detail-bescheiden-weiter-button.component.spec.ts
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BescheidLinkRel, BescheidService } from '@alfa-client/bescheid-shared';
-import { createStateResource } from '@alfa-client/tech-shared';
-import { Mock, mock } from '@alfa-client/test-utils';
-import { VorgangService, VorgangWithEingangLinkRel } from '@alfa-client/vorgang-shared';
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { cold } from 'jest-marbles';
-import { EMPTY, of } from 'rxjs';
-import { createBescheidResource } from '../../../../../../../bescheid-shared/src/test/bescheid';
-import { createVorgangWithEingangResource } from '../../../../../../../vorgang-shared/test/vorgang';
-import { BescheidenFormService } from '../../bescheiden.formservice';
-import { VorgangDetailBescheidenWeiterButtonComponent } from './vorgang-detail-bescheiden-weiter-button.component';
-
-describe('VorgangDetailBescheidenWeiterButtonComponent', () => {
-  let component: VorgangDetailBescheidenWeiterButtonComponent;
-  let fixture: ComponentFixture<VorgangDetailBescheidenWeiterButtonComponent>;
-
-  let formService: Mock<BescheidenFormService>;
-  let bescheidService: Mock<BescheidService>;
-  let vorgangService: Mock<VorgangService>;
-
-  beforeEach(async () => {
-    formService = mock(BescheidenFormService);
-    bescheidService = mock(BescheidService);
-    vorgangService = mock(VorgangService);
-    bescheidService.getBescheidDraftIfExists.mockReturnValue(EMPTY);
-    vorgangService.getVorgangWithEingang.mockReturnValue(EMPTY);
-
-    await TestBed.configureTestingModule({
-      declarations: [VorgangDetailBescheidenWeiterButtonComponent],
-      providers: [
-        {
-          provide: BescheidenFormService,
-          useValue: formService,
-        },
-        {
-          provide: BescheidService,
-          useValue: bescheidService,
-        },
-        {
-          provide: VorgangService,
-          useValue: vorgangService,
-        },
-      ],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(VorgangDetailBescheidenWeiterButtonComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-
-  describe('ngOnInit', () => {
-    it('should show button if update link available', () => {
-      const bescheidResource = createBescheidResource([BescheidLinkRel.UPDATE]);
-      bescheidService.getBescheidDraftIfExists.mockReturnValue(
-        of(createStateResource(bescheidResource)),
-      );
-
-      component.ngOnInit();
-
-      expect(component.showButton$).toBeObservable(cold('(a|)', { a: true }));
-    });
-
-    it('should not show button if update link unavailable', () => {
-      const bescheidResource = createBescheidResource();
-      bescheidService.getBescheidDraftIfExists.mockReturnValue(
-        of(createStateResource(bescheidResource)),
-      );
-
-      component.ngOnInit();
-
-      expect(component.showButton$).toBeObservable(cold('(a|)', { a: false }));
-    });
-
-    it('should show button if create bescheid draft link available', () => {
-      const vorgangWithEingangResource = createVorgangWithEingangResource([
-        VorgangWithEingangLinkRel.CREATE_BESCHEID_DRAFT,
-      ]);
-      vorgangService.getVorgangWithEingang.mockReturnValue(
-        of(createStateResource(vorgangWithEingangResource)),
-      );
-
-      component.ngOnInit();
-
-      expect(component.showButton$).toBeObservable(cold('(a|)', { a: true }));
-    });
-  });
-});
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-weiter-button/vorgang-detail-bescheiden-weiter-button.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-weiter-button/vorgang-detail-bescheiden-weiter-button.component.ts
deleted file mode 100644
index 8a231cf355b524c3556ce59914bcb001b222d2e0..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-weiter-button/vorgang-detail-bescheiden-weiter-button.component.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BescheidLinkRel, BescheidService } from '@alfa-client/bescheid-shared';
-import { StateResource, createEmptyStateResource, isLoaded } from '@alfa-client/tech-shared';
-import { VorgangService, VorgangWithEingangLinkRel } from '@alfa-client/vorgang-shared';
-import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
-import { Resource, hasLink } from '@ngxp/rest';
-import { Observable, filter, map, merge } from 'rxjs';
-import { BescheidenFormService } from '../../bescheiden.formservice';
-
-@Component({
-  selector: 'alfa-vorgang-detail-bescheiden-weiter-button',
-  templateUrl: './vorgang-detail-bescheiden-weiter-button.component.html',
-})
-export class VorgangDetailBescheidenWeiterButtonComponent implements OnInit {
-  @Input() submitResource: StateResource<Resource> = createEmptyStateResource();
-  @Output() clickEmitter: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();
-
-  showButton$: Observable<boolean>;
-
-  constructor(
-    public formService: BescheidenFormService,
-    private readonly bescheidService: BescheidService,
-    private readonly vorgangService: VorgangService,
-  ) {}
-
-  ngOnInit(): void {
-    this.showButton$ = merge(
-      this.vorgangService.getVorgangWithEingang(),
-      this.bescheidService.getBescheidDraftIfExists(),
-    ).pipe(
-      filter(isLoaded),
-      map(
-        (stateResource) =>
-          hasLink(stateResource.resource, VorgangWithEingangLinkRel.CREATE_BESCHEID_DRAFT) ||
-          hasLink(stateResource.resource, BescheidLinkRel.UPDATE),
-      ),
-    );
-  }
-}
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden.component.html
deleted file mode 100644
index da99c64248a271a75a7a429e570b7146c1fa2baa..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden.component.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<!--
-
-    Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
-    Ministerpräsidenten des Landes Schleswig-Holstein
-    Staatskanzlei
-    Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-
-    Lizenziert unter der EUPL, Version 1.2 oder - sobald
-    diese von der Europäischen Kommission genehmigt wurden -
-    Folgeversionen der EUPL ("Lizenz");
-    Sie dürfen dieses Werk ausschließlich gemäß
-    dieser Lizenz nutzen.
-    Eine Kopie der Lizenz finden Sie hier:
-
-    https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-
-    Sofern nicht durch anwendbare Rechtsvorschriften
-    gefordert oder in schriftlicher Form vereinbart, wird
-    die unter der Lizenz verbreitete Software "so wie sie
-    ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-    ausdrücklich oder stillschweigend - verbreitet.
-    Die sprachspezifischen Genehmigungen und Beschränkungen
-    unter der Lizenz sind dem Lizenztext zu entnehmen.
-
--->
-<div
-  class="relative z-10 duration-500 ease-in-out"
-  aria-label="Bescheid Dialog"
-  role="dialog"
-  aria-modal="true"
-  data-test-id="bescheid-wizard"
->
-  <div class="fixed inset-0 z-10 w-screen overflow-y-auto">
-    <div class="flex h-full items-center justify-center p-8">
-      <div
-        class="relative h-full w-full max-w-7xl transform overflow-hidden rounded-lg bg-background-200 px-6 py-10 text-left shadow-xl transition-all"
-      >
-        <alfa-vorgang-detail-bescheiden-abbrechen-button
-          (clickEmitter)="cancelWizard()"
-        ></alfa-vorgang-detail-bescheiden-abbrechen-button>
-        <form [formGroup]="formService.form" class="flex h-full flex-row gap-11">
-          <alfa-vorgang-detail-bescheiden-steps
-            class="flex w-1/2"
-          ></alfa-vorgang-detail-bescheiden-steps>
-          <alfa-vorgang-detail-bescheiden-result
-            data-test-id="bescheiden-result"
-            (closeDialog)="onClose()"
-            class="flex w-1/2"
-          ></alfa-vorgang-detail-bescheiden-result>
-        </form>
-      </div>
-    </div>
-  </div>
-</div>
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden.component.spec.ts
deleted file mode 100644
index b976d702d642721c317985fad672a8fe7b94fd48..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden.component.spec.ts
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BescheidResource, BescheidService } from '@alfa-client/bescheid-shared';
-import { PostfachService } from '@alfa-client/postfach-shared';
-import { Mock, dispatchEventFromFixture, mock, useFromMock } from '@alfa-client/test-utils';
-import { OzgcloudDialogService } from '@alfa-client/ui';
-import { VorgangService, VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
-import { DIALOG_DATA, DialogRef } from '@angular/cdk/dialog';
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { ReactiveFormsModule, UntypedFormBuilder } from '@angular/forms';
-import { MatIcon } from '@angular/material/icon';
-import { getDataTestIdOf } from 'libs/tech-shared/test/data-test';
-import { MockComponent } from 'ng-mocks';
-import { Subscription, of } from 'rxjs';
-import { createBescheidResource } from '../../../../../bescheid-shared/src/test/bescheid';
-import { createVorgangWithEingangResource } from '../../../../../vorgang-shared/test/vorgang';
-import { BescheidenFormService } from './bescheiden.formservice';
-import { VorgangDetailBescheidenResultComponent } from './vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result.component';
-import { VorgangDetailBescheidenAbbrechenButtonComponent } from './vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-abbrechen-button/vorgang-detail-bescheiden-abbrechen-button.component';
-import { VorgangDetailBescheidenAbbrechenDialogComponent } from './vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-abbrechen-dialog/vorgang-detail-bescheiden-abbrechen-dialog.component';
-import { VorgangDetailBescheidenStepsComponent } from './vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps.component';
-import { VorgangDetailBescheidenComponent } from './vorgang-detail-bescheiden.component';
-
-describe('VorgangDetailBescheidenComponent', () => {
-  let component: VorgangDetailBescheidenComponent;
-  let fixture: ComponentFixture<VorgangDetailBescheidenComponent>;
-
-  let bescheidService: Mock<BescheidService>;
-  let vorgangService: Mock<VorgangService>;
-  let formService: BescheidenFormService;
-  let postfachService: Mock<PostfachService>;
-  let ozgcloudDialogService: Mock<OzgcloudDialogService>;
-
-  let vorgangWithEingangResource: VorgangWithEingangResource;
-  let bescheidDraftResource: BescheidResource;
-
-  const bescheidenResult: string = getDataTestIdOf('bescheiden-result');
-
-  beforeEach(async () => {
-    bescheidService = mock(BescheidService);
-    vorgangService = mock(VorgangService);
-    formService = new BescheidenFormService(new UntypedFormBuilder(), useFromMock(bescheidService));
-    postfachService = mock(PostfachService);
-    ozgcloudDialogService = mock(OzgcloudDialogService);
-
-    vorgangWithEingangResource = createVorgangWithEingangResource();
-    bescheidDraftResource = createBescheidResource();
-
-    TestBed.overrideComponent(VorgangDetailBescheidenComponent, {
-      set: {
-        providers: [
-          {
-            provide: BescheidenFormService,
-            useValue: formService,
-          },
-        ],
-      },
-    });
-    await TestBed.configureTestingModule({
-      declarations: [
-        VorgangDetailBescheidenComponent,
-        MockComponent(VorgangDetailBescheidenStepsComponent),
-        MockComponent(VorgangDetailBescheidenResultComponent),
-        MockComponent(VorgangDetailBescheidenAbbrechenButtonComponent),
-        MockComponent(MatIcon),
-      ],
-      providers: [
-        {
-          provide: BescheidService,
-          useValue: bescheidService,
-        },
-        {
-          provide: VorgangService,
-          useValue: vorgangService,
-        },
-        {
-          provide: DialogRef,
-          useValue: { keydownEvents: of(KeyboardEvent), close: jest.fn(), disableClose: false },
-        },
-        {
-          provide: DIALOG_DATA,
-          useValue: { vorgangWithEingangResource, bescheidDraftResource },
-        },
-        {
-          provide: PostfachService,
-          useValue: postfachService,
-        },
-        {
-          provide: OzgcloudDialogService,
-          useValue: ozgcloudDialogService,
-        },
-      ],
-      imports: [ReactiveFormsModule],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(VorgangDetailBescheidenComponent);
-    component = fixture.componentInstance;
-
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-
-  describe('ngOnInit', () => {
-    it('should set vorgang on form service', () => {
-      const setVorgangWithEingangResource = (formService.setVorgangWithEingangResource = jest.fn());
-
-      component.ngOnInit();
-
-      expect(setVorgangWithEingangResource).toHaveBeenCalledWith(vorgangWithEingangResource);
-    });
-
-    it('should patch values', () => {
-      const patchValues = (formService.patchValues = jest.fn());
-
-      component.ngOnInit();
-
-      expect(patchValues).toHaveBeenCalledWith(bescheidDraftResource);
-    });
-
-    it('should call handleEscapeKey', () => {
-      component.handleEscapeKey = jest.fn();
-
-      component.ngOnInit();
-
-      expect(component.handleEscapeKey).toHaveBeenCalled();
-    });
-  });
-
-  describe('handleEscapeKey', () => {
-    it('should subscribe to dialogRef.keydownEvents', () => {
-      component.handleEscapeKey();
-
-      expect(component.keydownEventsSubscription).toBeInstanceOf(Subscription);
-    });
-  });
-
-  describe('ngOnDestroy', () => {
-    it('should unsubscribe keydownEventsSubscription', () => {
-      component.keydownEventsSubscription = new Subscription();
-      jest.spyOn(component.keydownEventsSubscription, 'unsubscribe');
-
-      component.ngOnDestroy();
-
-      expect(component.keydownEventsSubscription.unsubscribe).toHaveBeenCalled();
-    });
-  });
-
-  describe('onClose', () => {
-    it('should call dialogRef.close', () => {
-      component.onClose();
-
-      expect(component.dialogRef.close).toHaveBeenCalled();
-    });
-
-    it('should call vorgang service to reload current vorgang', () => {
-      component.onClose();
-
-      expect(vorgangService.reloadCurrentVorgang).toHaveBeenCalled();
-    });
-
-    it('should reload postfach mail list', () => {
-      component.onClose();
-
-      expect(postfachService.setPostfachMailOnReload).toHaveBeenCalled();
-    });
-  });
-
-  describe('close dialog on bescheiden result', () => {
-    it('should close dialog ref', () => {
-      dispatchEventFromFixture(fixture, bescheidenResult, 'closeDialog');
-
-      expect(component.dialogRef.close).toHaveBeenCalled();
-    });
-  });
-
-  describe('cancelWizard', () => {
-    it('should call ozgcloudDialogService.open', () => {
-      component.cancelWizard();
-
-      expect(ozgcloudDialogService.openInCallingComponentContext).toHaveBeenCalledWith(
-        VorgangDetailBescheidenAbbrechenDialogComponent,
-        component.viewContainerRef,
-      );
-    });
-  });
-});
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden.component.ts
deleted file mode 100644
index 24f030b71967c3b4ea1a4d4f9c0e3ad3a780166d..0000000000000000000000000000000000000000
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden.component.ts
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-import { BescheidResource } from '@alfa-client/bescheid-shared';
-import { PostfachService } from '@alfa-client/postfach-shared';
-import { isEscapeKey } from '@alfa-client/tech-shared';
-import { OzgcloudDialogService } from '@alfa-client/ui';
-import { VorgangService } from '@alfa-client/vorgang-shared';
-import { DIALOG_DATA, DialogRef } from '@angular/cdk/dialog';
-import { Component, Inject, OnDestroy, OnInit, ViewContainerRef } from '@angular/core';
-import { Subscription, filter } from 'rxjs';
-import { BescheidenFormService } from './bescheiden.formservice';
-import { BescheidenDialogData } from './bescheiden.model';
-import { VorgangDetailBescheidenAbbrechenDialogComponent } from './vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-abbrechen-dialog/vorgang-detail-bescheiden-abbrechen-dialog.component';
-
-@Component({
-  selector: 'alfa-vorgang-detail-bescheiden',
-  templateUrl: './vorgang-detail-bescheiden.component.html',
-  providers: [BescheidenFormService],
-})
-export class VorgangDetailBescheidenComponent implements OnDestroy, OnInit {
-  private readonly bescheidDraftResource: BescheidResource;
-
-  keydownEventsSubscription: Subscription;
-
-  public activeStep: number = 1;
-
-  constructor(
-    public dialogRef: DialogRef,
-    public readonly formService: BescheidenFormService,
-    private readonly vorgangService: VorgangService,
-    private readonly postfachService: PostfachService,
-    @Inject(DIALOG_DATA) private readonly dialogData: BescheidenDialogData,
-    private readonly ozgcloudDialogService: OzgcloudDialogService,
-    readonly viewContainerRef: ViewContainerRef,
-  ) {
-    this.bescheidDraftResource = dialogData.bescheidDraftResource;
-  }
-
-  ngOnInit(): void {
-    this.formService.setVorgangWithEingangResource(this.dialogData.vorgangWithEingangResource);
-    this.formService.patchValues(this.bescheidDraftResource);
-    this.handleEscapeKey();
-  }
-
-  handleEscapeKey(): void {
-    this.keydownEventsSubscription = this.dialogRef.keydownEvents
-      .pipe(filter(isEscapeKey))
-      .subscribe(() => this.cancelWizard());
-  }
-
-  ngOnDestroy(): void {
-    this.keydownEventsSubscription.unsubscribe();
-  }
-
-  public onClose(): void {
-    this.dialogRef.close();
-    this.vorgangService.reloadCurrentVorgang();
-    this.postfachService.setPostfachMailOnReload();
-  }
-
-  public cancelWizard(): void {
-    this.ozgcloudDialogService.openInCallingComponentContext<VorgangDetailBescheidenAbbrechenDialogComponent>(
-      VorgangDetailBescheidenAbbrechenDialogComponent,
-      this.viewContainerRef,
-    );
-  }
-}
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-page.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-page.component.ts
index 44f75752c49f761680b3c7db8966cf7b4c220270..150d74f675519f8e62932689e2f2294daeea5fe5 100644
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-page.component.ts
+++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-page.component.ts
@@ -24,22 +24,16 @@
 import { CommandResource } from '@alfa-client/command-shared';
 import { LoeschAnforderungService } from '@alfa-client/loesch-anforderung-shared';
 import { NavigationService } from '@alfa-client/navigation-shared';
-import { StateResource, isResourceNotFoundError } from '@alfa-client/tech-shared';
+import { isResourceNotFoundError, StateResource } from '@alfa-client/tech-shared';
 import { Messages, SnackBarService } from '@alfa-client/ui';
-import {
-  VorgangCommandService,
-  VorgangService,
-  VorgangWithEingangResource,
-} from '@alfa-client/vorgang-shared';
+import { VorgangCommandService, VorgangService, VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
 import { Component, OnInit } from '@angular/core';
 import { Observable, tap } from 'rxjs';
-import { BescheidenFormService } from './vorgang-detail-bescheiden/bescheiden.formservice';
 
 @Component({
   selector: 'alfa-vorgang-detail-page',
   templateUrl: './vorgang-detail-page.component.html',
   styleUrls: ['./vorgang-detail-page.component.scss'],
-  providers: [BescheidenFormService],
 })
 export class VorgangDetailPageComponent implements OnInit {
   vorgangStateResource$: Observable<StateResource<VorgangWithEingangResource>>;
@@ -57,12 +51,9 @@ export class VorgangDetailPageComponent implements OnInit {
   ngOnInit(): void {
     this.vorgangStateResource$ = this.vorgangService
       .getVorgangWithEingang()
-      .pipe(
-        tap((resource: StateResource<VorgangWithEingangResource>) => this.handleApiError(resource)),
-      );
+      .pipe(tap((resource: StateResource<VorgangWithEingangResource>) => this.handleApiError(resource)));
     this.revokeCommandStateResource$ = this.vorgangCommandService.getRevokeCommand();
-    this.vorgangLoeschenCommandStateResource$ =
-      this.loeschAnforderungService.getEndgueltigLoeschenCommand();
+    this.vorgangLoeschenCommandStateResource$ = this.loeschAnforderungService.getEndgueltigLoeschenCommand();
   }
 
   handleApiError(resource: StateResource<VorgangWithEingangResource>) {
diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail.module.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail.module.ts
index 8721335caf1722ea64bcefb5c99f013e2f96c16d..1d749edd60cabb56f750dd00852651e0fc41b1cf 100644
--- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail.module.ts
+++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail.module.ts
@@ -99,29 +99,6 @@ import { VorgangDetailFormularDatenComponent } from './vorgang-detail-page/vorga
 import { VorgangDetailHeaderComponent } from './vorgang-detail-page/vorgang-detail-area/vorgang-detail-header/vorgang-detail-header.component';
 import { VorgangDetailBackButtonContainerComponent } from './vorgang-detail-page/vorgang-detail-back-button-container/vorgang-detail-back-button-container.component';
 import { VorgangDetailBackButtonComponent } from './vorgang-detail-page/vorgang-detail-back-button-container/vorgang-detail-back-button/vorgang-detail-back-button.component';
-import { VorgangDetailBescheidenResultAttachmentsComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-attachments/vorgang-detail-bescheiden-result-attachments.component';
-import { VorgangDetailBescheidenResultDokumentComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-dokument/vorgang-detail-bescheiden-result-dokument.component';
-import { VorgangDetailBescheidenResultNachrichtComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-nachricht/vorgang-detail-bescheiden-result-nachricht.component';
-import { VorgangDetailBescheidenResultStatusComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result-status/vorgang-detail-bescheiden-result-status.component';
-import { VorgangDetailBescheidenResultComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-result/vorgang-detail-bescheiden-result.component';
-import { VorgangDetailBescheidenStepButtonComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-buttons/vorgang-detail-bescheiden-step-button/vorgang-detail-bescheiden-step-button.component';
-import { VorgangDetailBescheidenStepButtonsComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-buttons/vorgang-detail-bescheiden-step-buttons.component';
-import { VorgangDetailBescheidenStepTitleComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-step-title/vorgang-detail-bescheiden-step-title.component';
-import { VorgangDetailBescheidenAbbrechenButtonComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-abbrechen-button/vorgang-detail-bescheiden-abbrechen-button.component';
-import { VorgangDetailBescheidenAbbrechenDialogComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-abbrechen-dialog/vorgang-detail-bescheiden-abbrechen-dialog.component';
-import { VorgangDetailBescheidenAntragBescheidenComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-antrag-bescheiden/vorgang-detail-bescheiden-antrag-bescheiden.component';
-import { VorgangDetailBescheidenBescheidVersendenComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-bescheid-versenden/vorgang-detail-bescheiden-bescheid-versenden.component';
-import { VorgangDetailBescheidenAttachmentHochladenComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-attachment-hochladen/vorgang-detail-bescheiden-attachment-hochladen.component';
-import { VorgangDetailBescheidenBescheidAutomatischErstellenComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen/vorgang-detail-bescheiden-bescheid-automatisch-erstellen.component';
-import { VorgangDetailBescheidenDokumentHochladenComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-dokument-hochladen/vorgang-detail-bescheiden-dokument-hochladen.component';
-import { VorgangDetailBescheidenDokumenteHinzufuegenComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-dokumente-hinzufuegen/vorgang-detail-bescheiden-dokumente-hinzufuegen.component';
-import { VorgangDetailBescheidenStepContentComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-step-content/vorgang-detail-bescheiden-step-content.component';
-import { VorgangDetailBescheidenStepsContentComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-steps-content.component';
-import { VorgangDetailBescheidenUeberspringenButtonComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-button/vorgang-detail-bescheiden-ueberspringen-button.component';
-import { VorgangDetailBescheidenUeberspringenDialogComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-ueberspringen-dialog/vorgang-detail-bescheiden-ueberspringen-dialog.component';
-import { VorgangDetailBescheidenStepsComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps.component';
-import { VorgangDetailBescheidenWeiterButtonComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-weiter-button/vorgang-detail-bescheiden-weiter-button.component';
-import { VorgangDetailBescheidenComponent } from './vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden.component';
 import { VorgangArchiveConfirmationDialogContainerComponent } from './vorgang-detail-page/vorgang-detail-more-menu/vorgang-archive-container/vorgang-archive-confirmation-dialog-container/vorgang-archive-confirmation-dialog-container.component';
 import { VorgangArchiveConfirmationDialogComponent } from './vorgang-detail-page/vorgang-detail-more-menu/vorgang-archive-container/vorgang-archive-confirmation-dialog-container/vorgang-archive-confirmation-dialog/vorgang-archive-confirmation-dialog.component';
 import { VorgangArchiveContainerComponent } from './vorgang-detail-page/vorgang-detail-more-menu/vorgang-archive-container/vorgang-archive-container.component';
@@ -242,34 +219,11 @@ const routes: Routes = [
     ProcessVorgangContainerComponent,
     AktenzeichenEditableComponent,
     AktenzeichenEditDialogComponent,
-    VorgangDetailBescheidenComponent,
-    VorgangDetailBescheidenResultComponent,
-    VorgangDetailBescheidenStepButtonComponent,
-    VorgangDetailBescheidenStepsComponent,
-    VorgangDetailBescheidenStepButtonsComponent,
-    VorgangDetailBescheidenWeiterButtonComponent,
-    VorgangDetailBescheidenStepTitleComponent,
-    VorgangDetailBescheidenStepsContentComponent,
-    VorgangDetailBescheidenStepContentComponent,
-    VorgangDetailBescheidenResultStatusComponent,
-    VorgangDetailBescheidenUeberspringenButtonComponent,
-    VorgangDetailBescheidenUeberspringenDialogComponent,
-    VorgangDetailBescheidenAbbrechenDialogComponent,
-    VorgangDetailBescheidenAbbrechenButtonComponent,
-    VorgangDetailBescheidenDokumentHochladenComponent,
-    VorgangDetailBescheidenBescheidAutomatischErstellenComponent,
-    VorgangDetailBescheidenDokumenteHinzufuegenComponent,
-    VorgangDetailBescheidenAntragBescheidenComponent,
-    VorgangDetailBescheidenAttachmentHochladenComponent,
-    VorgangDetailBescheidenResultDokumentComponent,
-    VorgangDetailBescheidenResultAttachmentsComponent,
-    VorgangDetailBescheidenBescheidVersendenComponent,
-    VorgangDetailBescheidenResultNachrichtComponent,
     VorgangDetailDateienContainerComponent,
     VorgangArchiveContainerComponent,
     VorgangArchiveConfirmationDialogContainerComponent,
     VorgangArchiveConfirmationDialogComponent,
   ],
-  exports: [VorgangDetailAntragstellerComponent, VorgangDetailAntragDataComponent, VorgangDetailBescheidenComponent],
+  exports: [VorgangDetailAntragstellerComponent, VorgangDetailAntragDataComponent],
 })
 export class VorgangDetailModule {}
diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-page.component.html b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-page.component.html
index 8f0c3d3c5dfb5e59a191e8e18c725e098376b2fe..99cc6d70f2db39cd1ab3fb16016af9f8f07288ac 100644
--- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-page.component.html
+++ b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-page.component.html
@@ -24,31 +24,19 @@
 
 -->
 <ozgcloud-spinner [stateResource]="wiedervorlageStateResource">
-  <ozgcloud-subnavigation
-    data-test-id="subnavigation-wiedervorlage"
-    class="mat-typography mat-app-background"
-  >
-    <alfa-wiedervorlage-action-buttons [wiedervorlage]="wiedervorlageStateResource.resource">
-    </alfa-wiedervorlage-action-buttons>
+  <ozgcloud-subnavigation data-test-id="subnavigation-wiedervorlage" class="mat-typography mat-app-background">
+    <alfa-wiedervorlage-action-buttons [wiedervorlage]="wiedervorlageStateResource.resource"> </alfa-wiedervorlage-action-buttons>
   </ozgcloud-subnavigation>
 
   <div class="l-scroll-area--full">
     <div class="wrapper grow">
-      <h1 class="text-lg font-medium">Wiedervorlage</h1>
+      <h1 class="text-lg font-medium" data-test-id="wiedervorlage-headline">Wiedervorlage</h1>
       <alfa-wiedervorlage-breadcrumb-container
         [wiedervorlage]="wiedervorlageStateResource.resource"
       ></alfa-wiedervorlage-breadcrumb-container>
 
-      <alfa-wiedervorlage-status
-        class="status"
-        [wiedervorlageResource]="wiedervorlageStateResource.resource"
-        [diameter]="16"
-      >
-        <span>{{
-          wiedervorlageStateResource.resource && wiedervorlageStateResource.resource.done ?
-            'erledigt'
-          : 'offen'
-        }}</span>
+      <alfa-wiedervorlage-status class="status" [wiedervorlageResource]="wiedervorlageStateResource.resource" [diameter]="16">
+        <span>{{ wiedervorlageStateResource.resource && wiedervorlageStateResource.resource.done ? 'erledigt' : 'offen' }}</span>
       </alfa-wiedervorlage-status>
 
       <alfa-wiedervorlage-form
diff --git a/alfa-client/pom.xml b/alfa-client/pom.xml
deleted file mode 100644
index 017bc5fd3f5d2419879bc3a31934f0f0612d1473..0000000000000000000000000000000000000000
--- a/alfa-client/pom.xml
+++ /dev/null
@@ -1,135 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den
-    Ministerpräsidenten des Landes Schleswig-Holstein
-    Staatskanzlei
-    Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-
-    Lizenziert unter der EUPL, Version 1.2 oder - sobald
-    diese von der Europäischen Kommission genehmigt wurden -
-    Folgeversionen der EUPL ("Lizenz");
-    Sie dürfen dieses Werk ausschließlich gemäß
-    dieser Lizenz nutzen.
-    Eine Kopie der Lizenz finden Sie hier:
-
-    https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-
-    Sofern nicht durch anwendbare Rechtsvorschriften
-    gefordert oder in schriftlicher Form vereinbart, wird
-    die unter der Lizenz verbreitete Software "so wie sie
-    ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-    ausdrücklich oder stillschweigend - verbreitet.
-    Die sprachspezifischen Genehmigungen und Beschränkungen
-    unter der Lizenz sind dem Lizenztext zu entnehmen.
-
--->
-<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-  <parent>
-    <groupId>de.ozgcloud.alfa</groupId>
-    <artifactId>alfa</artifactId>
-    <version>2.18.0-SNAPSHOT</version>
-  </parent>
-
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>alfa-client</artifactId>
-  <name>Alfa Client</name>
-  <packaging>pom</packaging>
-  <inceptionYear>2020</inceptionYear>
-
-  <build>
-    <plugins>
-      <plugin>
-        <artifactId>maven-clean-plugin</artifactId>
-        <configuration>
-          <filesets>
-            <fileset>
-              <directory>dist</directory>
-              <includes>
-                <include>*</include>
-                <include>**/*</include>
-              </includes>
-            </fileset>
-          </filesets>
-        </configuration>
-      </plugin>
-
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>exec-maven-plugin</artifactId>
-        <version>3.0.0</version>
-        <executions>
-          <execution>
-            <id>test-application</id>
-            <phase>test</phase>
-            <configuration>
-              <workingDirectory>./</workingDirectory>
-              <executable>pnpm</executable>
-              <arguments>
-                <argument>run</argument>
-                <argument>test</argument>
-              </arguments>
-              <skip>${skipTests}</skip>
-            </configuration>
-            <goals>
-              <goal>exec</goal>
-            </goals>
-          </execution>
-          <execution>
-            <id>build-application</id>
-            <phase>compile</phase>
-            <configuration>
-              <workingDirectory>./</workingDirectory>
-              <executable>pnpm</executable>
-              <arguments>
-                <argument>run</argument>
-                <argument>ci-build</argument>
-              </arguments>
-            </configuration>
-            <goals>
-              <goal>exec</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-
-  <profiles>
-    <profile>
-      <activation>
-        <property>
-          <name>!skipNpmInstall</name>
-        </property>
-      </activation>
-      <id>npmInstall</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.codehaus.mojo</groupId>
-            <artifactId>exec-maven-plugin</artifactId>
-            <version>3.0.0</version>
-            <executions>
-              <execution>
-                <id>install-dependencies</id>
-                <phase>generate-sources</phase>
-                <configuration>
-                  <workingDirectory>./</workingDirectory>
-                  <executable>pnpm</executable>
-                  <arguments>
-                    <argument>install</argument>
-                  </arguments>
-                </configuration>
-                <goals>
-                  <goal>exec</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-  </profiles>
-
-</project>
diff --git a/pom.xml b/pom.xml
deleted file mode 100644
index 1becad5631bbd10ec78b3b254a89d26b82c1ffcd..0000000000000000000000000000000000000000
--- a/pom.xml
+++ /dev/null
@@ -1,172 +0,0 @@
-<?xml version="1.0"?>
-<!--
-
-    Copyright (C) 2020 Das Land Schleswig-Holstein vertreten durch den
-    Ministerpräsidenten des Landes Schleswig-Holstein
-    Staatskanzlei
-    Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-
-    Lizenziert unter der EUPL, Version 1.2 oder - sobald
-    diese von der Europäischen Kommission genehmigt wurden -
-    Folgeversionen der EUPL ("Lizenz");
-    Sie dürfen dieses Werk ausschließlich gemäß
-    dieser Lizenz nutzen.
-    Eine Kopie der Lizenz finden Sie hier:
-
-    https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-
-    Sofern nicht durch anwendbare Rechtsvorschriften
-    gefordert oder in schriftlicher Form vereinbart, wird
-    die unter der Lizenz verbreitete Software "so wie sie
-    ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-    ausdrücklich oder stillschweigend - verbreitet.
-    Die sprachspezifischen Genehmigungen und Beschränkungen
-    unter der Lizenz sind dem Lizenztext zu entnehmen.
-
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>de.ozgcloud.common</groupId>
-		<artifactId>ozgcloud-common-parent</artifactId>
-		<version>4.6.0</version>
-	</parent>
-
-	<groupId>de.ozgcloud.alfa</groupId>
-	<artifactId>alfa</artifactId>
-	<version>2.19.0</version>
-	<name>Alfa Parent</name>
-	<packaging>pom</packaging>
-	<inceptionYear>2020</inceptionYear>
-
-	<modules>
-		<module>alfa-client</module>
-		<module>alfa-server</module>
-		<module>alfa-service</module>
-	</modules>
-
-	<properties>
-		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
-
-		<vorgang-manager.version>2.19.0-SNAPSHOT</vorgang-manager.version>
-		<nachrichten-manager.version>2.11.0</nachrichten-manager.version>
-		<ozgcloud-common-pdf.version>3.0.1</ozgcloud-common-pdf.version>
-		<user-manager.version>2.8.0</user-manager.version>
-		<zufi-manager.version>1.5.0</zufi-manager.version>
-		<collaboration-manager.version>0.5.0</collaboration-manager.version>
-		<archive-manager.version>0.1.0-SNAPSHOT</archive-manager.version>
-		<document-manager.version>1.1.0</document-manager.version>
-		<spring-cloud-config-client.version>4.1.3</spring-cloud-config-client.version>
-
-		<!-- TODO: die Version über ozgcloud-common ziehen -->
-		<jjwt.version>0.12.6</jjwt.version>
-	</properties>
-
-	<build>
-		<pluginManagement>
-			<plugins>
-				<plugin>
-					<groupId>com.mycila</groupId>
-					<artifactId>license-maven-plugin</artifactId>
-				</plugin>
-			</plugins>
-		</pluginManagement>
-	</build>
-
-	<dependencyManagement>
-		<dependencies>
-			<dependency>
-				<groupId>de.ozgcloud.vorgang</groupId>
-				<artifactId>vorgang-manager-interface</artifactId>
-				<version>${vorgang-manager.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>de.ozgcloud.zufi</groupId>
-				<artifactId>zufi-manager-interface</artifactId>
-				<version>${zufi-manager.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>de.ozgcloud.nachrichten</groupId>
-				<artifactId>nachrichten-manager-interface</artifactId>
-				<version>${nachrichten-manager.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>de.ozgcloud.vorgang</groupId>
-				<artifactId>vorgang-manager-utils</artifactId>
-				<version>${vorgang-manager.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>de.ozgcloud.common</groupId>
-				<artifactId>ozgcloud-common-pdf</artifactId>
-				<version>${ozgcloud-common-pdf.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>de.ozgcloud.user</groupId>
-				<artifactId>user-manager-interface</artifactId>
-				<version>${user-manager.version}</version>
-				<exclusions>
-					<exclusion>
-						<groupId>io.quarkus</groupId>
-						<artifactId>quarkus-grpc</artifactId>
-					</exclusion>
-					<exclusion>
-						<groupId>org.jboss.slf4j</groupId>
-						<artifactId>slf4j-jboss-logmanager</artifactId>
-					</exclusion>
-				</exclusions>
-			</dependency>
-			<dependency>
-				<groupId>de.ozgcloud.collaboration</groupId>
-				<artifactId>collaboration-manager-interface</artifactId>
-				<version>${collaboration-manager.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>de.ozgcloud.archive</groupId>
-				<artifactId>archive-manager-interface</artifactId>
-				<version>${archive-manager.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>de.ozgcloud.document</groupId>
-				<artifactId>document-manager-interface</artifactId>
-				<version>${document-manager.version}</version>
-			</dependency>
-
-			<dependency>
-				<groupId>io.jsonwebtoken</groupId>
-				<artifactId>jjwt-api</artifactId>
-				<version>${jjwt.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>io.jsonwebtoken</groupId>
-				<artifactId>jjwt-impl</artifactId>
-				<version>${jjwt.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>io.jsonwebtoken</groupId>
-				<artifactId>jjwt-jackson</artifactId>
-				<version>${jjwt.version}</version>
-				<scope>runtime</scope>
-			</dependency>
-			<dependency>
-				<groupId>org.springframework.cloud</groupId>
-				<artifactId>spring-cloud-starter-config</artifactId>
-				<version>${spring-cloud-config-client.version}</version>
-			</dependency>
-		</dependencies>
-	</dependencyManagement>
-
-	<distributionManagement>
-		<repository>
-			<id>ozg-nexus</id>
-			<name>ozg-releases</name>
-			<url>https://nexus.ozg-sh.de/repository/ozg-releases/</url>
-		</repository>
-		<snapshotRepository>
-			<id>ozg-snapshots-nexus</id>
-			<name>ozg-snapshots</name>
-			<url>https://nexus.ozg-sh.de/repository/ozg-snapshots/</url>
-		</snapshotRepository>
-	</distributionManagement>
-</project>
diff --git a/release-erstellen.sh b/release-erstellen.sh
deleted file mode 100755
index 182ce07649b687a7ac150227283ae58547da58ec..0000000000000000000000000000000000000000
--- a/release-erstellen.sh
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/bin/sh
-#
-# Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den
-# Ministerpräsidenten des Landes Schleswig-Holstein
-# Staatskanzlei
-# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-#
-# Lizenziert unter der EUPL, Version 1.2 oder - sobald
-# diese von der Europäischen Kommission genehmigt wurden -
-# Folgeversionen der EUPL ("Lizenz");
-# Sie dürfen dieses Werk ausschließlich gemäß
-# dieser Lizenz nutzen.
-# Eine Kopie der Lizenz finden Sie hier:
-#
-# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-#
-# Sofern nicht durch anwendbare Rechtsvorschriften
-# gefordert oder in schriftlicher Form vereinbart, wird
-# die unter der Lizenz verbreitete Software "so wie sie
-# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-# ausdrücklich oder stillschweigend - verbreitet.
-# Die sprachspezifischen Genehmigungen und Beschränkungen
-# unter der Lizenz sind dem Lizenztext zu entnehmen.
-#
-
-
-if [ "$#" -ne 1 ]; then
-    echo "Aufruf: ozg-release-erstellen.sh JA"
-    echo "Als Parameter bitte 'JA' eintragen zur Sicherheit"
-    exit 1
-fi
-
-
-## alle -SNAPSHOT in pom.xmls entfernen
-#find . -name pom.xml -exec sed -i 's/-SNAPSHOT//g' {} +
-SED_PARAMS="-i"
-if [[ "$OSTYPE" =~ ^darwin ]]; then
-    SED_PARAMS="$SED_PARAMS '' -e"
-fi
-find . -name pom.xml -exec sed $SED_PARAMS 's/-SNAPSHOT//g' {} +
-
-## release version auslesen
-NEWVERSION=$(xmlstarlet sel -N w="http://maven.apache.org/POM/4.0.0" -t -v '//w:project/w:version' -n pom.xml)
-
-(cd alfa-client && nx release version --projects alfa -d $NEWVERSION)
-
-echo
-echo "NEXT STEPS:"
-echo "***********"
-echo "Änderungen prüfen"
-echo "git commit -a -m 'release version "$NEWVERSION"'"
-echo "git push"
-echo "git tag "$NEWVERSION
-echo "git push --tags"
diff --git a/release-startdev.sh b/release-startdev.sh
deleted file mode 100755
index 49290eeba6165ff19c1023c2592576a3bd0412b8..0000000000000000000000000000000000000000
--- a/release-startdev.sh
+++ /dev/null
@@ -1,78 +0,0 @@
-#!/bin/bash
-#
-# Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den
-# Ministerpräsidenten des Landes Schleswig-Holstein
-# Staatskanzlei
-# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-#
-# Lizenziert unter der EUPL, Version 1.2 oder - sobald
-# diese von der Europäischen Kommission genehmigt wurden -
-# Folgeversionen der EUPL ("Lizenz");
-# Sie dürfen dieses Werk ausschließlich gemäß
-# dieser Lizenz nutzen.
-# Eine Kopie der Lizenz finden Sie hier:
-#
-# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-#
-# Sofern nicht durch anwendbare Rechtsvorschriften
-# gefordert oder in schriftlicher Form vereinbart, wird
-# die unter der Lizenz verbreitete Software "so wie sie
-# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-# ausdrücklich oder stillschweigend - verbreitet.
-# Die sprachspezifischen Genehmigungen und Beschränkungen
-# unter der Lizenz sind dem Lizenztext zu entnehmen.
-#
-
-
-#set -x
-
-if [ "$#" -ne 1 ]; then
-    echo "Aufruf: ozg-release-startdev.sh NEWVERSION"
-    exit 1
-fi
-
-NEWVERSION=$1
-
-echo
-
-# pom.xml:main -> project.version setzen
-# projectname/pom.xml:parent -> project.parent.version setzen
-# projectname/pom.xml:parent,main -> project.parent.version und project.version setzen
-#
-PROJECTS="pom.xml:main 
-          alfa-service/pom.xml:parent
-          alfa-server/pom.xml:parent
-          alfa-client/pom.xml:parent "
-
-for PROJECT in $PROJECTS;
-do
-  POMFILE=$(echo $PROJECT | cut -d':' -f1)
-  ACTIONS=$(echo $PROJECT | cut -d':' -f2)
-
-  ## Auf SNAPSHOT Versionen testen
-  if fgrep -q "SNAPSHOT" $POMFILE; then
-    RED='\033[0;31m'
-    NC='\033[0m'
-    echo "${RED}ERROR: Datei "$POMFILE" enthält noch SNAPSHOT Versionen, das sollte hier nicht passieren.${NC}"
-    exit 1
-  fi
-
-  ## Versionen setzen
-  if [[ $ACTIONS == *"main"* ]] ; then
-    xmlstarlet ed --pf -L -N w="http://maven.apache.org/POM/4.0.0" -u '//w:project/w:version' -v $NEWVERSION $POMFILE
-  fi
-
-  if [[ $ACTIONS == *"parent"* ]]; then
-    xmlstarlet ed --pf -L -N w="http://maven.apache.org/POM/4.0.0" -u '//w:project/w:parent/w:version' -v $NEWVERSION $POMFILE
-  fi
-done
-
-
-
-echo
-echo "NEXT STEPS:"
-echo "***********"
-echo "Änderungen prüfen"
-echo "git commit -a -m 'start development "$NEWVERSION"'"
-echo "git push"
-