Skip to content

Protokoll-Erstellung

Die Route app/pages/create.vue erstellt neue Acceptances für einen Vertrag. Sie ist der Zielpfad für Einstiege mit ?contract=<id> und optional ?type=<id>.

Einstieg

Die Middleware app/middleware/determiner.ts leitet vertragsbasierte Einstiege nach /create weiter:

  • ?contract=<id> öffnet die Auswahl verfügbarer Protokolltypen
  • ?contract=<id>&type=<id> erstellt direkt den angegebenen Typ

create.vue liest die Vertrags-ID aus route.query.contract und lädt die Verfügbarkeit über:

ts
/acceptance/contract/{contractId}/available

Die Antwort enthält verfügbare Protokolltypen, bestehende Acceptances, mögliche Clone-Quellen sowie Vertrags-, Mieter- und Wohnungsdaten für die Anzeige.

Protokollauswahl

app/components/Protocol/ProtocolSelection.vue kapselt die wiederverwendbare Auswahl-UI.

Aufgaben:

  • verfügbare Protokolltypen anzeigen
  • bestehende Protokolle des Vertrags anzeigen
  • vorhandene Clone-Quellen anbieten
  • abgeschlossene Clone-Quellen standardmäßig bevorzugen
  • nicht finalisierte Clone-Quellen nur nach bewusster Auswahl einblenden

Labels, Icons und Farben für Typen kommen aus app/composables/protocol/useAcceptanceTypes.ts.

Bekannte Typen:

  • 1: Vorabnahme
  • 2: Abnahme
  • 3: Übergabe
  • 5: Verlängerung

Blanko-Erstellung

Eine neue Acceptance wird fachlich über useProtocolCreation().createProtocol(...) orchestriert. Der Orchestrator bündelt API-Aufruf, Erfolgs-/Fehler-Toast und den gemeinsamen Ladezustand. Der eigentliche Server-Call bleibt in useAcceptanceApi().createAcceptance(contractId, type).

Der API-Pfad ist:

ts
POST /acceptance/

Payload:

ts
{
  contractId,
  type
}

Wenn die Antwort eine neue ID enthält, lädt redirectToCreatedAcceptance(...) zuerst Metadaten über den Acceptance-Store vor und navigiert danach in den Editor:

ts
/
?acceptance=<newId>

Erstellung mit Übernahme

Wenn Clone-Quellen vorhanden sind, fragt die Auswahl zuerst, ob leer erstellt oder aus einer Quelle übernommen werden soll.

Bei Übernahme öffnet ProtocolCloneModal.vue. Der gemeinsame Ablauf liegt in useProtocolCreation().createProtocolWithDraftClone(...):

  1. Acceptance über useAcceptanceApi().createAcceptance(...) erstellen
  2. Clone-Auswahl über useAcceptanceApi().applyCloneToAcceptance(...) an /acceptance/{newId}/clone/apply senden
  3. Erfolgs-/Fehler-Toast zentral behandeln
  4. der jeweilige Einstieg schließt Modals und navigiert zur neuen Acceptance

Der Clone-Dialog ist derselbe Baustein, der auch aus anderen produktiven Flows verwendet wird. Details zur eigentlichen Übernahme stehen in /protocol-clone-framework.

Gelöschte Protokolle

Wenn die Route mit deletedAcceptanceId und deletedAcceptanceType geöffnet wird, zeigt create.vue einen Hinweis auf das gelöschte Protokoll.

Falls inzwischen ein Ersatzprotokoll desselben Typs existiert, bietet die Seite einen direkten Einstieg in dieses Protokoll an. Die Zielroute wird über getAcceptanceRouteLocation(...) bestimmt und führt gesperrte Acceptances nach /finalize, sonst in den Editor.