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 a120af6e0825c4a292affa1f14694eb0c3184411..71dc21f419656314c564a01cf6f51cd6907b19d9 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
@@ -11,12 +11,12 @@ import {
 } from '@alfa-client/command-shared';
 import {
   ApiError,
-  EMPTY_STRING,
-  HttpError,
-  StateResource,
   createEmptyStateResource,
   createErrorStateResource,
   createStateResource,
+  EMPTY_STRING,
+  HttpError,
+  StateResource,
 } from '@alfa-client/tech-shared';
 import { Mock, mock, useFromMock } from '@alfa-client/test-utils';
 import {
@@ -27,17 +27,18 @@ import {
 } from '@alfa-client/vorgang-shared';
 import { fakeAsync, tick } from '@angular/core/testing';
 import faker from '@faker-js/faker';
-import { ResourceUri, getUrl } from '@ngxp/rest';
+import { getUrl, ResourceUri } from '@ngxp/rest';
 import { cold } from 'jest-marbles';
 import { CommandLinkRel } from 'libs/command-shared/src/lib/command.linkrel';
 import { createApiError } from 'libs/tech-shared/test/error';
 import { createVorgangWithEingangResource } from 'libs/vorgang-shared/test/vorgang';
-import { Observable, first, of } from 'rxjs';
+import { first, Observable, of } from 'rxjs';
 import {
   createBinaryFileListResource,
   createBinaryFileResource,
 } from '../../../binary-file-shared/test/binary-file';
 import {
+  createCommandErrorResource,
   createCommandResource,
   createCommandStateResource,
   createCreateCommandProps,
@@ -458,10 +459,10 @@ describe('BescheidService', () => {
     });
 
     it('should clear create bescheid document in progress', (done) => {
-      service.createBescheidDocumentInProgress$.next(createUploadFileInProgress());
+      service.createBescheidDocumentInProgress$.next(createCommandStateResource());
 
       service.updateBescheid(bescheid).subscribe(() => {
-        expect(service.createBescheidDocumentInProgress$.value).toEqual({ loading: false });
+        expect(service.createBescheidDocumentInProgress$.value).toEqual(createEmptyStateResource());
         done();
       });
     });
@@ -479,8 +480,7 @@ describe('BescheidService', () => {
   describe('send bescheid', () => {
     const bescheidResource: BescheidResource = createBescheidResource();
     const createCommandProps: CreateCommandProps = createCreateCommandProps();
-    const commandStateResource: StateResource<CommandResource> =
-      createStateResource(createCommandResource());
+    const commandStateResource: StateResource<CommandResource> = createCommandStateResource();
     const linkRel: string = 'link_rel';
 
     let buildSendBescheidCommandPropsSpy: jest.SpyInstance;
@@ -527,8 +527,7 @@ describe('BescheidService', () => {
 
   describe('sendBescheidManually', () => {
     const bescheidResource: BescheidResource = createBescheidResource();
-    const sendBescheidCommand: StateResource<CommandResource> =
-      createStateResource(createCommandResource());
+    const sendBescheidCommand: StateResource<CommandResource> = createCommandStateResource();
 
     beforeEach(() => {
       service.sendBescheid = jest.fn().mockReturnValue(of(sendBescheidCommand));
@@ -553,8 +552,7 @@ describe('BescheidService', () => {
 
   describe('sendBescheidToAntragsteller', () => {
     const bescheidResource: BescheidResource = createBescheidResource();
-    const sendBescheidCommand: StateResource<CommandResource> =
-      createStateResource(createCommandResource());
+    const sendBescheidCommand: StateResource<CommandResource> = createCommandStateResource();
 
     beforeEach(() => {
       service.sendBescheid = jest.fn().mockReturnValue(of(sendBescheidCommand));
@@ -589,9 +587,7 @@ describe('BescheidService', () => {
         .spyOn(BescheidUtil, 'buildUpdateBescheidCommandProps')
         .mockReturnValue(createCommandProps);
       commandService.createCommandByProps.mockClear();
-      commandService.createCommandByProps.mockReturnValue(
-        of(createStateResource(createCommandResource())),
-      );
+      commandService.createCommandByProps.mockReturnValue(of(createCommandStateResource()));
     });
 
     it('should build update bescheid command props', () => {
@@ -688,16 +684,10 @@ describe('BescheidService', () => {
     });
 
     it('should clear create bescheid document', () => {
-      service.createBescheidDocumentInProgress$.next({
-        loading: true,
-        fileName: 'Dummy',
-        error: createApiError(),
-      });
+      service.createBescheidDocumentInProgress$.next(createCommandStateResource());
       service.uploadBescheidDocument(bescheid, file);
 
-      expect(service.createBescheidDocumentInProgress$.value).toEqual({
-        loading: false,
-      });
+      expect(service.createBescheidDocumentInProgress$.value).toEqual(createEmptyStateResource());
     });
 
     it('should call do upload bescheid document', () => {
@@ -796,8 +786,7 @@ describe('BescheidService', () => {
     const createCommandProps: CreateCommandProps = createCreateCommandProps();
     let buildCreateBescheidDocumentFromFilePropsSpy;
 
-    const commandStateResource: StateResource<CommandResource> =
-      createStateResource(createCommandResource());
+    const commandStateResource: StateResource<CommandResource> = createCommandStateResource();
 
     beforeEach(() => {
       buildCreateBescheidDocumentFromFilePropsSpy = jest
@@ -1012,20 +1001,20 @@ describe('BescheidService', () => {
     });
 
     describe('on error', () => {
-      const apiError: HttpError = createApiError();
-      const commandErrorStateResource: StateResource<CommandResource> =
-        createErrorStateResource(apiError);
+      const commandErrorStateResource: StateResource<CommandResource> = createStateResource(
+        createCommandErrorResource(),
+      );
 
-      it('should set error ', () => {
+      it('should emit command state resource', () => {
         commandService.createCommandByProps.mockReturnValue(of(commandErrorStateResource));
 
         service.createBescheidDocument();
 
-        expect(service.createBescheidDocumentInProgress$.value.error).toBe(apiError);
+        expect(service.createBescheidDocumentInProgress$.value).toBe(commandErrorStateResource);
       });
 
       it('should set create bescheid document in progress loading false', () => {
-        service.createBescheidDocumentInProgress$.next({ loading: true });
+        service.createBescheidDocumentInProgress$.next(createEmptyStateResource(true));
         commandService.createCommandByProps.mockReturnValue(of(commandErrorStateResource));
 
         service.createBescheidDocument();
@@ -1168,7 +1157,7 @@ describe('BescheidService', () => {
     });
 
     it('should set create bescheid document in progress loading false', () => {
-      service.createBescheidDocumentInProgress$.next({ loading: true });
+      service.createBescheidDocumentInProgress$.next(createEmptyStateResource(true));
 
       service.loadBescheidDocumentFile(document);
 
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 05a83a1c4861aaf65fd48d1d90c9d4873f680175..1319d619d0cd50d9aefbf616003409ca3a9ebf3e 100644
--- a/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.ts
+++ b/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.ts
@@ -9,20 +9,21 @@ import {
   CommandResourceService,
   CommandService,
   getEffectedResourceUrl,
+  hasCommandError,
   tapOnCommandSuccessfullyDone,
 } from '@alfa-client/command-shared';
 import {
-  HttpError,
-  ResourceListService,
-  StateResource,
   createEmptyStateResource,
   createStateResource,
   filterIsLoadedOrHasError,
   getEmbeddedResources,
   hasStateResourceError,
+  HttpError,
   isLoaded,
   isNotEmpty,
+  ResourceListService,
   sortByGermanDateStr,
+  StateResource,
 } from '@alfa-client/tech-shared';
 import {
   VorgangCommandService,
@@ -32,15 +33,15 @@ import {
 } 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 { getUrl, hasLink, ResourceUri } from '@ngxp/rest';
 import {
   BehaviorSubject,
-  Observable,
-  Subscription,
   filter,
   first,
   map,
+  Observable,
   startWith,
+  Subscription,
   switchMap,
   tap,
 } from 'rxjs';
@@ -92,8 +93,8 @@ export class BescheidService {
   readonly bescheidList$: BehaviorSubject<StateResource<BescheidListResource>> =
     new BehaviorSubject(createEmptyStateResource<BescheidListResource>());
 
-  readonly createBescheidDocumentInProgress$: BehaviorSubject<UploadFileInProgress> =
-    new BehaviorSubject<UploadFileInProgress>({ loading: false });
+  readonly createBescheidDocumentInProgress$: BehaviorSubject<StateResource<CommandResource>> =
+    new BehaviorSubject<StateResource<CommandResource>>(createEmptyStateResource());
 
   readonly uploadBescheidDocumentInProgress$: BehaviorSubject<UploadFileInProgress> =
     new BehaviorSubject<UploadFileInProgress>({ loading: false });
@@ -330,8 +331,9 @@ export class BescheidService {
   }
 
   private clearCreateBescheidDocumentInProgress(): void {
-    this.createBescheidDocumentInProgress$.next({ loading: false });
+    this.createBescheidDocumentInProgress$.next(createEmptyStateResource());
   }
+
   private initUploadBescheidDocumentInProgress(fileName: string): void {
     this.uploadBescheidDocumentInProgress$.next({ fileName, loading: true });
   }
@@ -393,9 +395,9 @@ export class BescheidService {
     this.bescheidDocument$.next(createEmptyStateResource());
   }
 
-  public createBescheidDocument(): Observable<UploadFileInProgress> {
+  public createBescheidDocument(): Observable<StateResource<CommandResource>> {
     this.clearUploadBescheidDocumentInProgress();
-    this.setCreateBescheidDocumenInProgress();
+    this.setCreateBescheidDocumentInProgress();
     this.doCreateBescheidDocument()
       .pipe(filterIsLoadedOrHasError(), first())
       .subscribe((commandStateResource: StateResource<CommandResource>) =>
@@ -408,12 +410,12 @@ export class BescheidService {
     this.uploadBescheidDocumentInProgress$.next({ loading: false });
   }
 
-  public getCreateBescheidDocumentInProgress(): Observable<UploadFileInProgress> {
+  public getCreateBescheidDocumentInProgress(): Observable<StateResource<CommandResource>> {
     return this.createBescheidDocumentInProgress$.asObservable();
   }
 
-  private setCreateBescheidDocumenInProgress(): void {
-    this.createBescheidDocumentInProgress$.next({ loading: true });
+  private setCreateBescheidDocumentInProgress(): void {
+    this.createBescheidDocumentInProgress$.next(createEmptyStateResource(true));
   }
 
   doCreateBescheidDocument(): Observable<StateResource<CommandResource>> {
@@ -425,8 +427,8 @@ export class BescheidService {
   private handleCreateBescheidDocumentResponse(
     commandStateResource: StateResource<CommandResource>,
   ): void {
-    if (hasStateResourceError(commandStateResource)) {
-      this.setCreateBescheidDocumentInProgressError(commandStateResource.error);
+    if (hasCommandError(commandStateResource.resource)) {
+      this.createBescheidDocumentInProgress$.next(commandStateResource);
     } else {
       const documentUri: ResourceUri = getEffectedResourceUrl(commandStateResource.resource);
       this.bescheidDocumentUri$.next(documentUri);
@@ -440,17 +442,10 @@ export class BescheidService {
       .pipe(filterIsLoadedOrHasError(), first())
       .subscribe((binaryFile) => {
         this.bescheidDocumentFile$.next(binaryFile);
-        this.createBescheidDocumentInProgress$.next({ loading: false });
+        this.createBescheidDocumentInProgress$.next(createEmptyStateResource());
       });
   }
 
-  private setCreateBescheidDocumentInProgressError(error: HttpError): void {
-    this.createBescheidDocumentInProgress$.next({
-      error,
-      loading: false,
-    });
-  }
-
   public getBescheidDocumentCommand(): Observable<StateResource<CommandResource>> {
     return this.commandService.getCommandByOrder(CommandOrder.CREATE_BESCHEID_DOCUMENT);
   }
diff --git a/alfa-client/libs/command-shared/test/command.ts b/alfa-client/libs/command-shared/test/command.ts
index e33eef79d37a8936182390dfcb392e4f587c68f6..22dfc484d7137b928ec35e74de5a5902ef42a519 100644
--- a/alfa-client/libs/command-shared/test/command.ts
+++ b/alfa-client/libs/command-shared/test/command.ts
@@ -21,21 +21,13 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
+import { createStateResource, StateResource } from '@alfa-client/tech-shared';
 import { faker } from '@faker-js/faker';
 import { toResource } from 'libs/tech-shared/test/resource';
 import { times } from 'lodash-es';
 import { CommandListLinkRel } from '../src/lib/command.linkrel';
 import { CommandErrorMessage } from '../src/lib/command.message';
-import {
-  Command,
-  CommandListResource,
-  CommandOrder,
-  CommandResource,
-  CommandStatus,
-  CreateCommand,
-  CreateCommandProps,
-} from '../src/lib/command.model';
-import { createStateResource, StateResource } from '@alfa-client/tech-shared';
+import { Command, CommandListResource, CommandOrder, CommandResource, CommandStatus, CreateCommand, CreateCommandProps, } from '../src/lib/command.model';
 
 export function createCommand(): Command {
   return {
@@ -76,6 +68,12 @@ export function createCommandErrorResource(linkRelations: string[] = []): Comman
   };
 }
 
+export function createCommandErrorStateResource(
+  linkRelations: string[] = [],
+): StateResource<CommandResource> {
+  return createStateResource(createCommandErrorResource(linkRelations));
+}
+
 export function createCreateCommand(
   order: CommandOrder = CommandOrder.VORGANG_ANNEHMEN,
 ): CreateCommand {
diff --git a/alfa-client/libs/design-system/src/lib/attachment/attachment.component.spec.ts b/alfa-client/libs/design-system/src/lib/attachment/attachment.component.spec.ts
index c26301f01c12e62681a5166d68643a3fa9cd6f62..26ee7299e31f26003789e8eeaf5b8d77b68d4b31 100644
--- a/alfa-client/libs/design-system/src/lib/attachment/attachment.component.spec.ts
+++ b/alfa-client/libs/design-system/src/lib/attachment/attachment.component.spec.ts
@@ -1,20 +1,11 @@
-import { ApiError, Issue } from '@alfa-client/tech-shared';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { ReactiveFormsModule } from '@angular/forms';
-import { createApiError, createIssue } from 'libs/tech-shared/test/error';
 import { AttachmentComponent } from './attachment.component';
 
-xdescribe('AttachmentComponent', () => {
+describe('AttachmentComponent', () => {
   let component: AttachmentComponent;
   let fixture: ComponentFixture<AttachmentComponent>;
 
-  const issue: Issue = {
-    ...createIssue(),
-    messageCode: 'validation_field_file_content_type_invalid',
-  };
-
-  const error: ApiError = createApiError([issue]);
-
   beforeEach(async () => {
     await TestBed.configureTestingModule({
       imports: [ReactiveFormsModule],
@@ -29,11 +20,40 @@ xdescribe('AttachmentComponent', () => {
     expect(component).toBeTruthy();
   });
 
-  describe('set errorList', () => {
-    it('should push VALIDATION_MESSAGES to errorList', () => {
-      component.error = error;
+  describe('set error messages', () => {
+    it('should mark as has error', () => {
+      component.errorMessages = ['Fehler'];
+
       fixture.detectChanges();
-      expect(component.errorList[0]).toBe('Erlaubte Dateiendungen: pdf, jpg, png, jpeg');
+
+      expect(component.hasError).toBeTruthy();
+    });
+
+    it.each([null, undefined])(
+      'should mark as has not error when error messages %s',
+      (errorMessages: string[]) => {
+        component.errorMessages = errorMessages;
+
+        fixture.detectChanges();
+
+        expect(component.hasError).toBeFalsy();
+      },
+    );
+
+    it('should mark as has not error', () => {
+      component.errorMessages = [];
+
+      fixture.detectChanges();
+
+      expect(component.hasError).toBeFalsy();
+    });
+
+    it('should set errors', () => {
+      component.errorMessages = ['Fehler'];
+
+      fixture.detectChanges();
+
+      expect(component.errors).toEqual(['Fehler']);
     });
   });
 });
diff --git a/alfa-client/libs/design-system/src/lib/attachment/attachment.component.ts b/alfa-client/libs/design-system/src/lib/attachment/attachment.component.ts
index 26b8e0b77783d3dd5f6de9ef1eecbdc5c7db1220..4a4fe3ee5844e2db722ccfc25cd48214b3d4a068 100644
--- a/alfa-client/libs/design-system/src/lib/attachment/attachment.component.ts
+++ b/alfa-client/libs/design-system/src/lib/attachment/attachment.component.ts
@@ -1,8 +1,7 @@
 import { CommonModule } from '@angular/common';
 import { Component, Input } from '@angular/core';
 
-import { ApiError, EMPTY_STRING, Issue, getMessageForIssue } from '@alfa-client/tech-shared';
-import { isNil } from 'lodash-es';
+import { isNotEmpty } from '@alfa-client/tech-shared';
 import { FileIconComponent } from '../icons/file-icon/file-icon.component';
 import { SpinnerIconComponent } from '../icons/spinner-icon/spinner-icon.component';
 
@@ -11,32 +10,32 @@ import { SpinnerIconComponent } from '../icons/spinner-icon/spinner-icon.compone
   standalone: true,
   imports: [CommonModule, SpinnerIconComponent, FileIconComponent],
   styles: [':host {@apply flex}'],
-  template: `<button
+  template: ` <button
     class="relative flex w-full items-start gap-3 border-b border-b-grayborder bg-background-100 px-3 py-2 hover:bg-background-200"
   >
     <div class="flex-shrink">
       <ods-file-icon
-        *ngIf="fileType && !isLoading && !isError"
+        *ngIf="fileType && !isLoading && !hasError"
         [fileType]="fileType"
         size="large"
       />
-      <ods-file-icon *ngIf="!isLoading && isError" fileType="exclamation" size="large" />
-      <ods-spinner-icon *ngIf="isLoading && !isError" size="large" />
+      <ods-file-icon *ngIf="!isLoading && hasError" fileType="exclamation" size="large" />
+      <ods-spinner-icon *ngIf="isLoading && !hasError" size="large" />
     </div>
     <div class="flex grow flex-col items-start break-all text-start text-text">
-      <p *ngIf="!isError && !isLoading && caption" class="text-sm">
+      <p *ngIf="!hasError && !isLoading && caption" class="text-sm">
         {{ caption }}
       </p>
-      <p *ngIf="isError && errorCaption" class="text-sm text-error">
+      <p *ngIf="hasError && errorCaption" class="text-sm text-error">
         {{ errorCaption }}
       </p>
       <p *ngIf="isLoading && loadingCaption" class="text-sm">
         {{ loadingCaption }}
       </p>
-      <p *ngIf="description && !isError" class="text-xs text-text/65">
+      <p *ngIf="description && !hasError" class="text-xs text-text/65">
         {{ description }}
       </p>
-      <p *ngFor="let error of errorList" class="text-xs text-text/65">
+      <p *ngFor="let error of errors" class="text-xs text-text/65">
         {{ error }}
       </p>
     </div>
@@ -50,19 +49,12 @@ export class AttachmentComponent {
   @Input() fileType: string = '';
   @Input() description = '';
   @Input() isLoading: boolean = false;
-  @Input() set error(error: ApiError) {
-    if (isNil(error)) {
-      this.errorList = [];
-      return;
-    }
-    error.issues.forEach((issue: Issue) =>
-      this.errorList.push(getMessageForIssue(EMPTY_STRING, issue)),
-    );
-  }
 
-  protected get isError() {
-    return this.errorList.length > 0;
+  @Input() set errorMessages(errorMessages: string[]) {
+    this.hasError = isNotEmpty(errorMessages);
+    this.errors = errorMessages;
   }
 
-  public errorList: string[] = [];
+  public errors: string[] = [];
+  public hasError: boolean = false;
 }
diff --git a/alfa-client/libs/design-system/src/lib/attachment/attachment.stories.ts b/alfa-client/libs/design-system/src/lib/attachment/attachment.stories.ts
index 7104e718bbf91896eee9611fd9aaabb51cc7525b..b485cf6a12ea32ef33c0906a85176ccfb9bdedd2 100644
--- a/alfa-client/libs/design-system/src/lib/attachment/attachment.stories.ts
+++ b/alfa-client/libs/design-system/src/lib/attachment/attachment.stories.ts
@@ -55,6 +55,6 @@ export const Error: Story = {
   name: 'Error message in file',
   args: {
     caption: 'Fehler beim Hochladen',
-    errorList: ['Erlaubte Dateiendungen: pdf, jpg, png, jpeg'],
+    errorMessages: ['Erlaubte Dateiendungen: pdf, jpg, png, jpeg'],
   },
 };
diff --git a/alfa-client/libs/tech-shared/src/index.ts b/alfa-client/libs/tech-shared/src/index.ts
index fd72ff72fc272d489207273fcbc805abe4f8b2f0..64e34b9ffcb66244bb7687070f685ed6090b4950 100644
--- a/alfa-client/libs/tech-shared/src/index.ts
+++ b/alfa-client/libs/tech-shared/src/index.ts
@@ -31,6 +31,7 @@ export * from './lib/form.util';
 export * from './lib/http.util';
 export * from './lib/message-code';
 export * from './lib/ngrx/actions';
+export * from './lib/pipe/convert-api-error-to-error-messages.pipe';
 export * from './lib/pipe/convert-for-data-test.pipe';
 export * from './lib/pipe/convert-to-boolean.pipe';
 export * from './lib/pipe/enum-to-label.pipe';
diff --git a/alfa-client/libs/tech-shared/src/lib/pipe/convert-api-error-to-error-messages.pipe.spec.ts b/alfa-client/libs/tech-shared/src/lib/pipe/convert-api-error-to-error-messages.pipe.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f2d421bb49d41f593662ba2bbccd22f87255d396
--- /dev/null
+++ b/alfa-client/libs/tech-shared/src/lib/pipe/convert-api-error-to-error-messages.pipe.spec.ts
@@ -0,0 +1,37 @@
+import { ApiError, getMessageForIssue } from '@alfa-client/tech-shared';
+import { createApiError } from '../../../test/error';
+import { ConvertApiErrorToErrorMessagesPipe } from './convert-api-error-to-error-messages.pipe';
+
+jest.mock('@alfa-client/tech-shared');
+const getMessageForIssueMock = getMessageForIssue as jest.Mock;
+
+describe('convertApiErrorToErrorMessagesPipe', () => {
+  const pipe = new ConvertApiErrorToErrorMessagesPipe();
+
+  it('create an instance', () => {
+    expect(pipe).toBeTruthy();
+  });
+
+  describe('transform', () => {
+    it.each([null, undefined])('should return empty array for %s value', (value: ApiError) => {
+      const errorMessages: string[] = pipe.transform(value);
+
+      expect(errorMessages).toEqual([]);
+    });
+
+    it('should get message for issue', () => {
+      pipe.transform(createApiError());
+
+      expect(getMessageForIssueMock).toHaveBeenCalled();
+    });
+
+    it('should return array of error messages', () => {
+      const expectedErrorMessage = 'Fehler';
+      getMessageForIssueMock.mockReturnValue(expectedErrorMessage);
+
+      const errorMessages: string[] = pipe.transform(createApiError());
+
+      expect(errorMessages).toEqual([expectedErrorMessage]);
+    });
+  });
+});
diff --git a/alfa-client/libs/tech-shared/src/lib/pipe/convert-api-error-to-error-messages.pipe.ts b/alfa-client/libs/tech-shared/src/lib/pipe/convert-api-error-to-error-messages.pipe.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7dc36b4163976990d1172d2fa6860c3efeba1b33
--- /dev/null
+++ b/alfa-client/libs/tech-shared/src/lib/pipe/convert-api-error-to-error-messages.pipe.ts
@@ -0,0 +1,13 @@
+import { ApiError, EMPTY_STRING, getMessageForIssue, Issue } from '@alfa-client/tech-shared';
+import { Pipe, PipeTransform } from '@angular/core';
+import { isNil } from 'lodash-es';
+
+@Pipe({ name: 'convertApiErrorToErrorMessages' })
+export class ConvertApiErrorToErrorMessagesPipe implements PipeTransform {
+  transform(value: ApiError) {
+    if (isNil(value)) {
+      return [];
+    }
+    return value.issues.map((issue: Issue) => getMessageForIssue(EMPTY_STRING, issue));
+  }
+}
diff --git a/alfa-client/libs/tech-shared/src/lib/tech-shared.module.ts b/alfa-client/libs/tech-shared/src/lib/tech-shared.module.ts
index 6d81cbece935b0b247a3c77cc8ea765c6e92861f..ecb138d23695a7111038967cf2d80147cbac5206 100644
--- a/alfa-client/libs/tech-shared/src/lib/tech-shared.module.ts
+++ b/alfa-client/libs/tech-shared/src/lib/tech-shared.module.ts
@@ -27,6 +27,7 @@ import { Injector, NgModule } from '@angular/core';
 import { HttpBinaryFileInterceptor } from './interceptor/http-binary-file.interceptor';
 import { HttpXsrfInterceptor } from './interceptor/http-xsrf.interceptor';
 import { XhrInterceptor } from './interceptor/xhr.interceptor';
+import { ConvertApiErrorToErrorMessagesPipe } from './pipe/convert-api-error-to-error-messages.pipe';
 import { ConvertForDataTestPipe } from './pipe/convert-for-data-test.pipe';
 import { ConvertToBooleanPipe } from './pipe/convert-to-boolean.pipe';
 import { EnumToLabelPipe } from './pipe/enum-to-label.pipe';
@@ -65,6 +66,7 @@ import { ToTrafficLightPipe } from './pipe/to-traffic-light.pipe';
     FileSizePlainPipe,
     GetUrlPipe,
     ConvertToBooleanPipe,
+    ConvertApiErrorToErrorMessagesPipe,
   ],
   exports: [
     FormatToPrettyDatePipe,
@@ -84,6 +86,7 @@ import { ToTrafficLightPipe } from './pipe/to-traffic-light.pipe';
     FileSizePlainPipe,
     GetUrlPipe,
     ConvertToBooleanPipe,
+    ConvertApiErrorToErrorMessagesPipe,
   ],
   providers: [
     {
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
index fc9bcf1ed04f5df8d10a3a92d1c6d611d827574f..95e424d51d4542bce8bc97612cd8f632bca51b48 100644
--- 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
@@ -22,7 +22,7 @@
       *ngIf="uploadFileInProgress.loading || uploadFileInProgress.error"
       [loadingCaption]="uploadFileInProgress.fileName"
       errorCaption="Fehler beim Hochladen"
-      [error]="uploadFileInProgress.error"
+      [errorMessages]="uploadFileInProgress.error | convertApiErrorToErrorMessages"
       description="Anhang wird hochgeladen"
       [isLoading]="uploadFileInProgress.loading"
     ></ods-attachment>
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
index 1e9ed7dcaa08a8f3a261a01eaf31c317eb00d7ac..c9b80fe49d0d2389e5d647eac7bceb37dd55f7b3 100644
--- 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
@@ -2,6 +2,7 @@ import { BescheidService } from '@alfa-client/bescheid-shared';
 import { BinaryFile2ContainerComponent } from '@alfa-client/binary-file';
 import { BinaryFileResource } from '@alfa-client/binary-file-shared';
 import {
+  ConvertApiErrorToErrorMessagesPipe,
   convertForDataTest,
   ConvertForDataTestPipe,
   createErrorStateResource,
@@ -54,6 +55,7 @@ describe('VorgangDetailBescheidenResultAttachmentsComponent', () => {
         ConvertForDataTestPipe,
         MatIcon,
         MockPipe(FileSizePipe),
+        MockPipe(ConvertApiErrorToErrorMessagesPipe),
         MockComponent(OzgcloudSvgIconComponent),
         MockComponent(SpinnerComponent),
         MockComponent(AttachmentContainerComponent),
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
index a89c65186da52532a6f73829e58afaaaf65703cd..2080ba5b2a7b977a0837a437c97ae3d1579ba396 100644
--- 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
@@ -8,7 +8,11 @@
 <ods-attachment-container>
   <ng-container *ngIf="bescheidDocumentFile.resource">
     <alfa-binary-file2-container
-      *ngIf="!bescheidDocumentFile.loading && !uploadBescheidDocumentInProgress.loading"
+      *ngIf="
+        !bescheidDocumentFile.loading &&
+        !uploadBescheidDocumentInProgress.loading &&
+        !createDocumentInProgess.loading
+      "
       [file]="bescheidDocumentFile.resource"
       [deletable]="deletable"
       (startDelete)="deleteFile.emit()"
@@ -23,11 +27,16 @@
       'upload-bescheid-document-error-' + !!uploadBescheidDocumentInProgress.error
     "
     [isLoading]="uploadBescheidDocumentInProgress.loading"
-    [error]="uploadBescheidDocumentInProgress.error"
+    [errorMessages]="uploadBescheidDocumentInProgress.error | convertApiErrorToErrorMessages"
+    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>
-  <!-- REPLACEME: UI/UX Componente für den Fehler anzeigen-->
-  <ng-container *ngIf="createBescheidDocumentInProgress.error">
-    <span data-test-id="create-bescheid-document-error">Fehler beim automatischen Erstellen.</span>
-  </ng-container>
-  <!-- -->
 </ods-attachment-container>
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
index 2f71e2de6a3ef57174f129655ba0dd7f1c8ddab5..15a99f1bea6f85d4287f1ca9d0a85fffc4144dbc 100644
--- 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
@@ -1,7 +1,13 @@
 import { BescheidLinkRel, BescheidResource, BescheidService } from '@alfa-client/bescheid-shared';
 import { BinaryFile2ContainerComponent } from '@alfa-client/binary-file';
-import { createStateResource } from '@alfa-client/tech-shared';
-import { Mock, existsAsHtmlElement, mock, notExistsAsHtmlElement } from '@alfa-client/test-utils';
+import { CommandResource } from '@alfa-client/command-shared';
+import {
+  ConvertApiErrorToErrorMessagesPipe,
+  createEmptyStateResource,
+  createStateResource,
+  StateResource,
+} from '@alfa-client/tech-shared';
+import { existsAsHtmlElement, Mock, mock, notExistsAsHtmlElement } from '@alfa-client/test-utils';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { getUrl } from '@ngxp/rest';
 import { AttachmentComponent, AttachmentContainerComponent } from '@ods/system';
@@ -9,15 +15,24 @@ import { createBescheidResource } from 'libs/bescheid-shared/src/test/bescheid';
 import { createBinaryFileResource } from 'libs/binary-file-shared/test/binary-file';
 import { getDataTestIdOf } from 'libs/tech-shared/test/data-test';
 import { createApiError } from 'libs/tech-shared/test/error';
-import { MockComponent } from 'ng-mocks';
+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 createBescheidDocumentError: string = getDataTestIdOf('create-bescheid-document-error');
-  const uploadBescheidDocumentError: string = getDataTestIdOf('upload-bescheid-document-error-true');
+  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',
   );
@@ -33,6 +48,7 @@ describe('VorgangDetailBescheidenResultDokumentComponent', () => {
         MockComponent(BinaryFile2ContainerComponent),
         MockComponent(AttachmentComponent),
         MockComponent(AttachmentContainerComponent),
+        MockPipe(ConvertApiErrorToErrorMessagesPipe),
       ],
       providers: [
         {
@@ -68,6 +84,35 @@ describe('VorgangDetailBescheidenResultDokumentComponent', () => {
 
       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', () => {
@@ -108,21 +153,61 @@ describe('VorgangDetailBescheidenResultDokumentComponent', () => {
     });
   });
 
-  describe('create bescheid document error', () => {
-    it('should be shown if error exists', () => {
-      component.createBescheidDocumentInProgress = { loading: false, error: createApiError() };
+  describe('set create bescheid document in progress', () => {
+    beforeEach(() => {
+      component.handleCreateBescheidDocumentCommandError = jest.fn();
+    });
 
-      fixture.detectChanges();
+    it('should set create document in progress', () => {
+      const commandStateResource: StateResource<CommandResource> = createEmptyStateResource();
+
+      component.createBescheidDocumentInProgress = commandStateResource;
 
-      existsAsHtmlElement(fixture, createBescheidDocumentError);
+      expect(component.createDocumentInProgess).toBe(commandStateResource);
     });
 
-    it('should be hidden on non error', () => {
-      component.createBescheidDocumentInProgress = { loading: false };
+    it('should handle command error', () => {
+      const commandStateResource: StateResource<CommandResource> = createEmptyStateResource();
 
-      fixture.detectChanges();
+      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());
 
-      notExistsAsHtmlElement(fixture, createBescheidDocumentError);
+      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
index f46d2cbd1d7aa2719a19b7f73ae55e1efb23945e..6e7c4eb3941d74b6d782d2ee6b51ee0d35a93a6f 100644
--- 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
@@ -5,7 +5,8 @@ import {
   UploadFileInProgress,
 } from '@alfa-client/bescheid-shared';
 import { BinaryFileResource } from '@alfa-client/binary-file-shared';
-import { StateResource } from '@alfa-client/tech-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';
 
@@ -14,17 +15,32 @@ import { getUrl, hasLink } from '@ngxp/rest';
   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() createBescheidDocumentInProgress: 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;
 
+  @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 {
@@ -34,4 +50,18 @@ export class VorgangDetailBescheidenResultDokumentComponent {
       );
     }
   }
+
+  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.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
index 20d0b09b29f4ddc0ff80fc310312c5efe4a1613a..29e7e18dfa836123bfbf1232551170fc20224012 100644
--- 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
@@ -13,10 +13,10 @@ import {
   switchMapCommandSuccessfullyDone,
   tapOnCommandSuccessfullyDone,
 } from '@alfa-client/command-shared';
-import { StateResource, createEmptyStateResource, isLoaded } from '@alfa-client/tech-shared';
+import { createEmptyStateResource, isLoaded, StateResource } from '@alfa-client/tech-shared';
 import { Component, EventEmitter, OnInit, Output } from '@angular/core';
 import { hasLink } from '@ngxp/rest';
-import { Observable, filter, map, of } from 'rxjs';
+import { filter, map, Observable, of } from 'rxjs';
 import { BescheidenFormService } from '../bescheiden.formservice';
 
 type sendBescheid = (
@@ -51,9 +51,9 @@ export class VorgangDetailBescheidenResultComponent implements OnInit {
     loading: false,
   });
 
-  public createBescheidDocumentInProgress$: Observable<UploadFileInProgress> = of({
-    loading: false,
-  });
+  public createBescheidDocumentInProgress$: Observable<StateResource<CommandResource>> = of(
+    createEmptyStateResource<CommandResource>(),
+  );
 
   public canSave$: Observable<boolean> = of(true);
   public canSend$: Observable<boolean> = of(true);
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
index ab3d869ebee84bf9053f79efff6b80f21f68a6ae..0a6689531ec1b15b38d0deac111ed92163911adc 100644
--- 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
@@ -1,9 +1,14 @@
 import { BescheidLinkRel, BescheidService } from '@alfa-client/bescheid-shared';
-import { HasLinkPipe, createStateResource } from '@alfa-client/tech-shared';
+import { CommandLinkRel } from '@alfa-client/command-shared';
+import {
+  createEmptyStateResource,
+  createStateResource,
+  HasLinkPipe,
+} from '@alfa-client/tech-shared';
 import {
-  Mock,
   dispatchEventFromFixture,
   existsAsHtmlElement,
+  Mock,
   mock,
   notExistsAsHtmlElement,
 } from '@alfa-client/test-utils';
@@ -14,13 +19,14 @@ import {
   ButtonCardComponent,
   SpinnerIconComponent,
 } from '@ods/system';
-import {
-  createBescheidResource,
-  createUploadFileInProgress,
-} from 'libs/bescheid-shared/src/test/bescheid';
+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';
 
@@ -101,7 +107,7 @@ describe('VorgangDetailBescheidenBescheidAutomatischErstellenComponent', () => {
 
     it('should clear nachricht', () => {
       bescheidService.createBescheidDocument.mockReturnValue(
-        of({ ...createUploadFileInProgress(), loading: false, error: null }),
+        of(createCommandStateResource([CommandLinkRel.EFFECTED_RESOURCE])),
       );
 
       component.createBescheidDocument();
@@ -111,9 +117,7 @@ describe('VorgangDetailBescheidenBescheidAutomatischErstellenComponent', () => {
     });
 
     it('should not clear nachricht when loading', () => {
-      bescheidService.createBescheidDocument.mockReturnValue(
-        of({ ...createUploadFileInProgress(), error: null }),
-      );
+      bescheidService.createBescheidDocument.mockReturnValue(of(createEmptyStateResource(true)));
 
       component.createBescheidDocument();
 
@@ -122,9 +126,7 @@ describe('VorgangDetailBescheidenBescheidAutomatischErstellenComponent', () => {
     });
 
     it('should not clear nachricht when error', () => {
-      bescheidService.createBescheidDocument.mockReturnValue(
-        of({ ...createUploadFileInProgress(), loading: false }),
-      );
+      bescheidService.createBescheidDocument.mockReturnValue(of(createCommandErrorStateResource()));
 
       component.createBescheidDocument();
 
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
index 22ea557b1d537f9bf93d27c173b8920307115e03..c8d7e21a4576391531efa2a1dce7b930e9450070 100644
--- 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
@@ -1,12 +1,6 @@
-import {
-  BescheidLinkRel,
-  BescheidResource,
-  BescheidService,
-  hasUploadNoError,
-  isUploadFinished,
-  UploadFileInProgress,
-} from '@alfa-client/bescheid-shared';
-import { StateResource } from '@alfa-client/tech-shared';
+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';
@@ -18,9 +12,9 @@ import { BescheidenFormService } from '../../../../bescheiden.formservice';
 export class VorgangDetailBescheidenBescheidAutomatischErstellenComponent {
   @Input() public bescheidDraftStateResource: StateResource<BescheidResource>;
 
-  public createBescheidDocumentInProgress$: Observable<UploadFileInProgress> = of({
-    loading: false,
-  });
+  public createBescheidDocumentInProgress$: Observable<StateResource<CommandResource>> = of(
+    createEmptyStateResource<CommandResource>(),
+  );
 
   public readonly bescheidLinkRel = BescheidLinkRel;
 
@@ -31,8 +25,8 @@ export class VorgangDetailBescheidenBescheidAutomatischErstellenComponent {
 
   public createBescheidDocument(): void {
     this.createBescheidDocumentInProgress$ = this.bescheidService.createBescheidDocument().pipe(
-      tap((uploadFileInProgress: UploadFileInProgress) => {
-        if (isUploadFinished(uploadFileInProgress) && hasUploadNoError(uploadFileInProgress)) {
+      tap((commandStateResource: StateResource<CommandResource>) => {
+        if (isSuccessfulDone(commandStateResource.resource)) {
           this.formService.clearNachricht();
         }
       }),