Der vollständige Zustandsraum
Der Vertragsabschluss ist ein Sub-Workflow innerhalb des Master-Workflows „vermietung“. Er modelliert sechs Zustände plus einen Terminal-Abbruch. Zentral sind drei Guards: Bonitäts-Ampel grün für bonitaet_freigeben, Vertrag-Entwurf liegt vor für qes_versenden, Aktivierungsdatum ≥ heute UND SEPA-Mandat versendet für mietvertrag_aktiv. Das Migration-Set M216 verankert die Tabellenstruktur und den initialen Guard-Code:
stateDiagram-v2
direction LR
[*] --> anbahnung
anbahnung --> bonitaet_pruefen : bonitaet_anfordern
bonitaet_pruefen --> bonitaet_freigegeben : bonitaet_freigeben<br/>[Ampel grün]
bonitaet_pruefen --> abgebrochen : ablehnen<br/>[Ampel rot]
bonitaet_freigegeben --> qes_versendet : qes_versenden<br/>[Vertrag-Entwurf OK]
qes_versendet --> qes_signiert : qes_signatur_empfangen<br/>[Skribble-Webhook]
qes_versendet --> abgebrochen : qes_abbrechen
qes_signiert --> mietvertrag_aktiv : aktivieren<br/>[Stichtag ≥ heute UND SEPA OK]
anbahnung --> abgebrochen : abbrechen
bonitaet_freigegeben --> abgebrochen : abbrechen
mietvertrag_aktiv --> [*]
abgebrochen --> [*]Der Übergang qes_signatur_empfangen wird nicht manuell vom Verwalter ausgelöst — er kommt als Webhook vom Skribble-Service. Die Engine validiert dabei das Zertifikat (eIDAS-konform) und legt das signierte PDF im Mietvertrags-Archiv ab. Der Verwalter sieht den Statuswechsel als Realtime-Update im Portal.
Beispiel: Wohnung „Frankfurter Allee 42, App. 3C“ — Vertragsabschluss mit Frau M.
Die 3-Zimmer-Wohnung wurde im April inseriert, drei Besichtigungen wurden durchgeführt, Frau M. wurde als Wunschmieterin ausgewählt. Mietbeginn soll der 1. Juni sein.
sequenceDiagram
autonumber
participant V as Verwalter
participant S as ImmoGenio
participant SCH as SCHUFA-Service
participant SKR as Skribble (QES)
participant M as Frau M. (Mieterin)
participant SEPA as SEPA-Modul
V->>S: "anbahnung" — Frau M. als Vertragskandidatin
V->>S: "bonitaet_anfordern"
S->>SCH: SCHUFA-Abfrage (mit Einwilligung)
SCH-->>S: Score 95, Ampel grün
V->>S: "bonitaet_freigeben"
S-->>V: Zustand "bonitaet_freigegeben"
V->>S: Vertragsentwurf aus Brief-Editor laden
V->>S: "qes_versenden" (Magic-Link an Frau M.)
S->>SKR: PDF + Signaturanfrage übergeben
SKR-->>M: E-Mail mit Magic-Link
M->>SKR: Video-Ident absolvieren
M->>SKR: QES-Signatur mit Zertifikat
SKR->>S: Webhook "signiert" + signiertes PDF
S-->>V: Zustand "qes_signiert" (Realtime)
V->>S: Aktivierungsdatum 01.06. hinterlegen
V->>S: SEPA-Mandats-Vorlage versenden
Note over S: 01.06. um 00:00 Uhr
S->>S: Guard prüft Stichtag + SEPA — beide OK
S->>S: Auto-Transition "mietvertrag_aktiv"
S->>SEPA: Lastschriftmandat scharf
S->>S: Master-Workflow → "bewirtschaftung"
S-->>V: Aktivierungs-BenachrichtigungVom Auswahlentscheid bis zum aktiven Vertrag vergehen in diesem Beispiel weniger als 48 Stunden — Frau M. bekommt am Mittwoch den Magic-Link, signiert am Donnerstag, und der Vertrag wird zum 1. Juni um Mitternacht automatisch scharfgeschaltet.
Technisch erzwungene Compliance
Vermieter haften gegenüber dem Eigentümer für die Sorgfaltspflicht bei der Mieterauswahl. Wer einen Mietvertrag ohne Bonitätsprüfung abschließt und der Mieter zahlt nicht, kann mit Schadensersatzansprüchen konfrontiert werden. Klassische Hausverwaltungssoftware lässt diesen Schritt optional — ein Verwalter kann unter Zeitdruck oder aus Unachtsamkeit die Bonität überspringen.
ImmoGenio macht das technisch unmöglich. Der Guard zum Übergang qes_versendet prüft das Vorhandensein einer freigegebenen Bonität. Versucht der Verwalter, den Vertrag direkt zu versenden, blockiert die Engine den Übergang und liefert eine Begründung („Bonität nicht freigegeben — bitte zuerst SCHUFA-Abfrage durchführen oder Bürgschaft hinterlegen“). Im Audit-Trail wird jeder Guard-Fehlschlag dokumentiert — ein dokumentierter Versuch, den Prozess zu umgehen, ist Beweis für Sorgfaltsbewusstsein.
Manueller Override mit Begründung
Es gibt Fälle, in denen die SCHUFA-Auskunft nicht aussagekräftig ist — etwa bei Berufseinsteigern ohne Kredithistorie, bei ausländischen Mietern oder bei einer übernommenen Bürgschaft. Der Workflow erlaubt einen manuellen Override: Der Verwalter kann in „bonitaet_pruefen“ mit einer Pflicht-Begründung („Bürgschaft von Bürgen-XY, Bonität geprüft“) in „bonitaet_freigegeben“ wechseln. Diese Begründung wird im Audit-Trail mit Zeitstempel und User-ID gespeichert — und ist im Streitfall als bewusste Entscheidung dokumentiert, nicht als versäumter Schritt.