Files
Atlas/WORKFLOW-KI-BUCHUNG.md
2025-11-12 20:21:32 +01:00

8.3 KiB

Automatisierter Buchungs-Workflow mit KI-Unterstützung

Workflow-Übersicht

Kundenanfrage → KI-Analyse → Admin-Bearbeitung → Vertragsunterzeichnung 
→ Auto-Bestätigung → Admin-Freigabe → Fahrer-Verfügbarkeit → Admin-Zuteilung → Tour

Phase 1: Eingehende Anfrage

1.1 Anfrage-Eingang

  • Quelle: E-Mail (IMAP-Synchronisation)
  • Status: RESERVED (Buchung wird automatisch erstellt)

1.2 KI-Analyse (GPT-4)

Extrahiert aus E-Mail:

  • Kundendaten (Name, E-Mail, Telefon, Adresse)
  • Event-Details (Datum, Uhrzeit, Ort, Dauer)
  • Fotobox-Modell (falls angegeben)
  • Besondere Wünsche

Generiert automatisch:

  1. Antwort-Entwurf (zur Freigabe durch Admin)
  2. Mietvertrag-Entwurf (PDF, mit Platzhaltern)
  3. Angebot über LexOffice API (Rechnung-Entwurf)

1.3 Status nach KI-Analyse

  • Buchung: RESERVED + aiParsed: true
  • E-Mail-Entwurf gespeichert
  • Vertrag-Entwurf generiert
  • LexOffice-Angebot erstellt (ID gespeichert)

Phase 2: Admin-Bearbeitung

2.1 Admin prüft Vorschläge

Dashboard zeigt:

  • KI-extrahierte Daten
  • Antwort-Entwurf
  • Vertrag-PDF (Vorschau)
  • LexOffice-Angebot (Link)

2.2 Admin-Aktionen

  1. Antwort-Entwurf freigeben/bearbeiten
  2. Vertrag anpassen (falls nötig)
  3. Button "Anfrage bestätigen & senden"

2.3 Was passiert beim Senden?

  • E-Mail mit Antwort + Vertrag-Link wird versendet
  • Vertrag-Status: contractGenerated: true
  • LexOffice-Angebot: Status "Gesendet"
  • Buchung-Status: RESERVEDCONFIRMED

Phase 3: Vertragsunterzeichnung

3.1 Kunde unterschreibt

2 Möglichkeiten:

  • Digital: Online-Formular mit Signatur-Feld
  • Analog: PDF herunterladen, unterschreiben, hochladen

3.2 Automatische Prüfung (Cron-Job)

Läuft alle 15 Minuten:

// Prüft alle CONFIRMED Buchungen
if (booking.contractSigned === true && booking.contractSignedAt !== null) {
  // 1. Auftragsbestätigung generieren (LexOffice API)
  // 2. Auftragsbestätigung per E-Mail senden
  // 3. Buchung für Admin freigeben
  // 4. Status: CONFIRMED → READY_FOR_ASSIGNMENT
}

3.3 Status-Update

  • contractSigned: true
  • contractSignedAt: DateTime
  • status: READY_FOR_ASSIGNMENT (neue Status-Option!)
  • LexOffice: Auftragsbestätigung generiert & versendet

Phase 4: Admin-Freigabe für Fahrer

4.1 Admin sieht neue Buchungen

Dashboard-Ansicht "Freizugebende Buchungen":

  • Filter: status === READY_FOR_ASSIGNMENT
  • Anzeige: Event-Details, Datum, Ort, Fotobox

4.2 Admin gibt frei

  • Button "Für Fahrer freigeben"
  • Status: READY_FOR_ASSIGNMENTOPEN_FOR_DRIVERS
  • Benachrichtigung an alle verfügbaren Fahrer (optional)

Phase 5: Fahrer-Verfügbarkeit

5.1 Fahrer-Portal

Fahrer sehen:

  • Alle Buchungen mit status === OPEN_FOR_DRIVERS
  • Filter nach Datum, Ort, Zeitraum

5.2 Fahrer meldet Verfügbarkeit

  • Button "Ich bin verfügbar für diesen Event"
  • Erstellt DriverAvailability Eintrag:
    model DriverAvailability {
      id         String   @id @default(cuid())
      bookingId  String
      booking    Booking  @relation(...)
      driverId   String
      driver     User     @relation(...)
      available  Boolean  @default(true)
      createdAt  DateTime @default(now())
    }
    

5.3 Status

  • Buchung bleibt OPEN_FOR_DRIVERS
  • Mehrere Fahrer können sich melden

Phase 6: Admin-Zuteilung

6.1 Admin sieht verfügbare Fahrer

Dashboard-Ansicht:

  • Buchung mit Status OPEN_FOR_DRIVERS
  • Liste aller Fahrer, die sich gemeldet haben
  • Fahrer-Info: Name, Bewertung, letzte Touren

6.2 Admin weist Fahrer zu

  • Dropdown: Fahrer auswählen
  • Button "Fahrer zuweisen & Tour erstellen"

6.3 Automatische Tour-Erstellung

// 1. Tour erstellen
const tour = await prisma.tour.create({
  data: {
    tourDate: booking.eventDate,
    tourNumber: generateTourNumber(),
    driverId: selectedDriverId,
    status: 'PLANNED',
  },
});

// 2. Buchung zu Tour zuordnen
await prisma.booking.update({
  where: { id: bookingId },
  data: {
    tourId: tour.id,
    status: 'ASSIGNED',
  },
});

// 3. Benachrichtigung an Fahrer
await sendDriverNotification(selectedDriverId, tour);

Neue Datenbank-Modelle (benötigt)

1. DriverAvailability

model DriverAvailability {
  id         String   @id @default(cuid())
  bookingId  String
  booking    Booking  @relation(fields: [bookingId], references: [id], onDelete: Cascade)
  driverId   String
  driver     User     @relation(fields: [driverId], references: [id], onDelete: Cascade)
  available  Boolean  @default(true)
  createdAt  DateTime @default(now())
  
  @@unique([bookingId, driverId])
  @@index([bookingId])
  @@index([driverId])
}

2. Erweiterte Booking-Status

enum BookingStatus {
  RESERVED              // Initial (nach E-Mail-Eingang)
  CONFIRMED             // Admin hat bestätigt & gesendet
  READY_FOR_ASSIGNMENT  // Vertrag unterschrieben → Admin-Freigabe
  OPEN_FOR_DRIVERS      // Admin hat freigegeben → Fahrer können sich melden
  ASSIGNED              // Admin hat Fahrer zugewiesen & Tour erstellt
  COMPLETED             // Event abgeschlossen
  CANCELLED             // Storniert
}

3. Zusätzliche Booking-Felder

model Booking {
  // ... bestehende Felder
  
  // KI-Analyse
  aiParsed              Boolean         @default(false)
  aiResponseDraft       String?         @db.Text
  aiProcessedAt         DateTime?
  
  // Freigabe-Status
  readyForAssignment    Boolean         @default(false)
  openForDrivers        Boolean         @default(false)
  
  // Fahrer-Verfügbarkeit
  driverAvailability    DriverAvailability[]
  
  // LexOffice Auftragsbestätigung
  lexofficeConfirmationId String?
  confirmationSentAt      DateTime?
}

Automatisierungs-Jobs (Cron)

Job 1: Vertragsprüfung (alle 15 Min)

// app/api/cron/check-contracts/route.ts
// Prüft unterschriebene Verträge → sendet Auftragsbestätigung

Job 2: E-Mail-Synchronisation (alle 5 Min)

// app/api/cron/sync-emails/route.ts
// IMAP → neue Anfragen → KI-Analyse

Job 3: LexOffice-Sync (alle 30 Min)

// app/api/cron/sync-lexoffice/route.ts
// Synchronisiert Zahlungsstatus, Rechnungen, etc.

API-Endpunkte (benötigt)

KI-Analyse

  • POST /api/bookings/[id]/ai-analyze - KI-Analyse triggern
  • GET /api/bookings/[id]/ai-draft - Antwort-Entwurf abrufen

Freigabe-Workflow

  • POST /api/bookings/[id]/release-to-drivers - Admin gibt frei
  • GET /api/bookings/open-for-drivers - Fahrer-Portal Ansicht

Fahrer-Verfügbarkeit

  • POST /api/bookings/[id]/availability - Fahrer meldet Verfügbarkeit
  • GET /api/bookings/[id]/available-drivers - Liste verfügbarer Fahrer

Fahrer-Zuteilung

  • POST /api/bookings/[id]/assign-driver - Admin weist zu & erstellt Tour

LexOffice-Integration

  • POST /api/lexoffice/create-offer - Angebot erstellen
  • POST /api/lexoffice/create-confirmation - Auftragsbestätigung
  • GET /api/lexoffice/invoice/[id] - Rechnung abrufen

UI-Komponenten (benötigt)

Admin-Dashboard

  1. Neue Anfragen (Status: RESERVED + aiParsed)
  2. Freizugebende Buchungen (Status: READY_FOR_ASSIGNMENT)
  3. Offene Zuweisungen (Status: OPEN_FOR_DRIVERS)
  4. Aktive Touren (Status: ASSIGNED)

Fahrer-Portal

  1. Verfügbare Events (Status: OPEN_FOR_DRIVERS)
  2. Meine Verfügbarkeiten (DriverAvailability Liste)
  3. Zugewiesene Touren (Meine Tours)

Nächste Schritte

Phase 1: Datenbank erweitern

  • BookingStatus-Enum erweitern
  • DriverAvailability Model hinzufügen
  • Booking-Felder für KI & Freigabe
  • Migration durchführen

Phase 2: KI-Integration

  • OpenAI API anbinden
  • E-Mail-Parser mit GPT-4
  • Antwort-Generator
  • Vertrag-Generator

Phase 3: LexOffice-Integration

  • API-Client erstellen
  • Angebots-Erstellung
  • Auftragsbestätigungs-Erstellung
  • Webhook für Zahlungsstatus

Phase 4: Workflow-UI

  • Admin: KI-Entwürfe prüfen
  • Admin: Freigabe-Dashboard
  • Fahrer: Verfügbarkeits-Portal
  • Admin: Zuweisungs-Interface

Phase 5: Automatisierung

  • Cron-Job: Vertragsprüfung
  • Cron-Job: E-Mail-Sync
  • Cron-Job: LexOffice-Sync
  • Benachrichtigungs-System

Möchten Sie mit der Implementierung beginnen? Welcher Teil soll zuerst umgesetzt werden?