# 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: `RESERVED` → `CONFIRMED`

---

## 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:**
```javascript
// 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_ASSIGNMENT` → `OPEN_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:
  ```prisma
  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
```javascript
// 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
```prisma
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
```prisma
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
```prisma
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)
```typescript
// app/api/cron/check-contracts/route.ts
// Prüft unterschriebene Verträge → sendet Auftragsbestätigung
```

### Job 2: E-Mail-Synchronisation (alle 5 Min)
```typescript
// app/api/cron/sync-emails/route.ts
// IMAP → neue Anfragen → KI-Analyse
```

### Job 3: LexOffice-Sync (alle 30 Min)
```typescript
// 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?**
