350 lines
16 KiB
Markdown
350 lines
16 KiB
Markdown
# Phase 3: KI-Workflow Implementierungs-Roadmap
|
||
|
||
## 🎯 Ziel
|
||
|
||
Vollautomatisierter Buchungsworkflow von E-Mail-Eingang bis zur Fahrer-Zuteilung mit KI-Unterstützung.
|
||
|
||
---
|
||
|
||
## ✅ Bereits implementiert (Phase B)
|
||
|
||
### Datenbank:
|
||
- ✅ BookingStatus erweitert (7 Stati)
|
||
- ✅ DriverAvailability Model
|
||
- ✅ Booking-Felder für KI & LexOffice
|
||
- ✅ Migrations durchgeführt
|
||
|
||
### Services:
|
||
- ✅ AIService (`lib/ai-service.ts`)
|
||
- E-Mail-Parsing mit GPT-4
|
||
- Antwort-Generierung
|
||
- Vertrags-Personalisierung
|
||
|
||
- ✅ LexOfficeService (`lib/lexoffice.ts`)
|
||
- Kontakt-Erstellung
|
||
- Angebots-Erstellung
|
||
- Auftragsbestätigungs-Erstellung
|
||
|
||
### API-Endpunkte:
|
||
- ✅ `/api/bookings/[id]/ai-analyze` - KI-Analyse
|
||
- ✅ `/api/bookings/[id]/release-to-drivers` - Admin-Freigabe
|
||
- ✅ `/api/bookings/[id]/availability` - Fahrer-Verfügbarkeit
|
||
- ✅ `/api/bookings/[id]/assign-driver` - Fahrer-Zuteilung
|
||
- ✅ `/api/cron/check-contracts` - Auto-Vertragsprüfung
|
||
|
||
---
|
||
|
||
## 📱 UI-Komponenten (TODO)
|
||
|
||
### 1. Admin-Dashboard Erweiterungen
|
||
|
||
#### 1.1 Neue Anfragen (Status: RESERVED + aiParsed)
|
||
|
||
**Component**: `components/admin/NewBookingsQueue.tsx`
|
||
|
||
```tsx
|
||
Ansicht:
|
||
┌─────────────────────────────────────────────────────────┐
|
||
│ 📨 Neue Anfragen (3) │
|
||
├─────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ [KI] Max Mustermann - Hochzeit 15.12.2025 [Analysieren]│
|
||
│ 📧 max@example.com | 📍 Berlin │
|
||
│ 💡 KI-Analyse: 95% sicher | Antwort-Entwurf bereit│
|
||
│ [Entwurf ansehen] [Angebot erstellen] │
|
||
│ │
|
||
│ [NEU] Anna Schmidt - Firmenevent 20.12.2025 [Analysieren]│
|
||
│ 📧 anna@firma.de | 📍 Hamburg │
|
||
│ ⚠️ Noch nicht analysiert │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
**Features**:
|
||
- Liste aller Buchungen mit `status === RESERVED`
|
||
- Badge "KI" für analysierte, "NEU" für neue
|
||
- Inline-Buttons: "Analysieren", "Entwurf ansehen"
|
||
- KI-Confidence-Anzeige
|
||
- Schnell-Aktionen
|
||
|
||
|
||
#### 1.2 KI-Entwurfs-Dialog
|
||
|
||
**Component**: `components/admin/AIReviewDialog.tsx`
|
||
|
||
```tsx
|
||
Modal:
|
||
┌─────────────────────────────────────────────────────────┐
|
||
│ 🤖 KI-Analyse: Max Mustermann [X] │
|
||
├─────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ ✅ Extrahierte Daten: │
|
||
│ ┌─────────────────────────────────────────────────────┐ │
|
||
│ │ Name: Max Mustermann [Bearbeiten] │ │
|
||
│ │ E-Mail: max@example.com │ │
|
||
│ │ Telefon: +49 123 456789 │ │
|
||
│ │ Event: 15.12.2025, 18:00 Uhr │ │
|
||
│ │ Ort: Hochzeitssaal Berlin, 10115 Berlin │ │
|
||
│ │ Typ: Privat │ │
|
||
│ └─────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ 📝 KI-Antwort-Entwurf: │
|
||
│ ┌─────────────────────────────────────────────────────┐ │
|
||
│ │ Sehr geehrter Herr Mustermann, │ │
|
||
│ │ │ │
|
||
│ │ vielen Dank für Ihre Anfrage für Ihre Hochzeit... │ │
|
||
│ │ [... editierbarer Text ...] │ │
|
||
│ └─────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ 📄 Aktionen: │
|
||
│ [Angebot erstellen] [Vertrag generieren] [Verwerfen] │
|
||
│ │
|
||
│ [Alles bestätigen & senden] ←───────────────────────── │
|
||
└─────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
**Features**:
|
||
- Bearbeitbare extrahierte Daten
|
||
- Editierbarer Antwort-Entwurf
|
||
- "Alles bestätigen & senden" → Erstellt Angebot + Vertrag + sendet E-Mail
|
||
- Status: RESERVED → CONFIRMED
|
||
|
||
|
||
#### 1.3 Freizugebende Buchungen (Status: READY_FOR_ASSIGNMENT)
|
||
|
||
**Component**: `components/admin/ReadyForAssignmentQueue.tsx`
|
||
|
||
```tsx
|
||
Ansicht:
|
||
┌─────────────────────────────────────────────────────────┐
|
||
│ ✅ Freizugebende Buchungen (2) │
|
||
├─────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ ✓ Max Mustermann - Hochzeit 15.12.2025 │
|
||
│ 📝 Vertrag unterschrieben (digital) │
|
||
│ 💰 Auftragsbestätigung versendet │
|
||
│ [Für Fahrer freigeben] ←────────────────────────────│
|
||
│ │
|
||
│ ✓ Anna Schmidt - Firmenevent 20.12.2025 │
|
||
│ 📝 Vertrag hochgeladen (analog) │
|
||
│ 💰 Auftragsbestätigung versendet │
|
||
│ [Für Fahrer freigeben] │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
**Features**:
|
||
- Automatisch gefiltert: `status === READY_FOR_ASSIGNMENT`
|
||
- Zeigt Vertrags-Status
|
||
- "Für Fahrer freigeben" → `status = OPEN_FOR_DRIVERS`
|
||
|
||
|
||
#### 1.4 Offene Zuweisungen (Status: OPEN_FOR_DRIVERS)
|
||
|
||
**Component**: `components/admin/DriverAssignmentQueue.tsx`
|
||
|
||
```tsx
|
||
Ansicht:
|
||
┌─────────────────────────────────────────────────────────┐
|
||
│ 🚗 Offene Zuweisungen (1) │
|
||
├─────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ Max Mustermann - Hochzeit 15.12.2025 │
|
||
│ 📍 Berlin | ⏰ 18:00 Uhr │
|
||
│ │
|
||
│ 👥 Verfügbare Fahrer (3): │
|
||
│ ┌─────────────────────────────────────────────────────┐│
|
||
│ │ ● Hans Müller [Zuweisen] ││
|
||
│ │ VW T6, B-HH 1234 ││
|
||
│ │ ⭐⭐⭐⭐⭐ (12 Touren) ││
|
||
│ │ 💬 "Kenne die Location gut" ││
|
||
│ │ ││
|
||
│ │ ● Lisa Schmidt [Zuweisen] ││
|
||
│ │ Mercedes Sprinter, HH-LS 567 ││
|
||
│ │ ⭐⭐⭐⭐ (8 Touren) ││
|
||
│ │ ││
|
||
│ │ ● Tom Werner [Zuweisen] ││
|
||
│ │ Ford Transit, B-TW 890 ││
|
||
│ │ ⭐⭐⭐⭐⭐ (15 Touren) ││
|
||
│ └─────────────────────────────────────────────────────┘│
|
||
│ │
|
||
└─────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
**Features**:
|
||
- Liste verfügbarer Fahrer pro Buchung
|
||
- Fahrer-Infos: Fahrzeug, Bewertung, Touren-Anzahl
|
||
- Optionale Nachricht vom Fahrer
|
||
- "Zuweisen" → Erstellt/aktualisiert Tour, Status = ASSIGNED
|
||
|
||
|
||
### 2. Fahrer-Portal Erweiterungen
|
||
|
||
#### 2.1 Verfügbare Events
|
||
|
||
**Component**: `components/driver/AvailableEvents.tsx`
|
||
|
||
```tsx
|
||
Ansicht:
|
||
┌─────────────────────────────────────────────────────────┐
|
||
│ 📅 Verfügbare Events (4) │
|
||
├─────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ 🎉 Hochzeit - Berlin │
|
||
│ 📅 15.12.2025, 18:00 Uhr │
|
||
│ 📍 Hochzeitssaal Berlin, Musterstr. 1 │
|
||
│ 🕐 Aufbau bis 17:30 Uhr │
|
||
│ [Ich bin verfügbar] ←─────────────────────────────────│
|
||
│ │
|
||
│ 🏢 Firmenevent - Hamburg │
|
||
│ 📅 20.12.2025, 14:00 Uhr │
|
||
│ 📍 Hotel Alster, Hamburg │
|
||
│ 🕐 Aufbau bis 13:30 Uhr │
|
||
│ [Ich bin verfügbar] │
|
||
│ │
|
||
│ ✅ Du hast dich bereits gemeldet (2) │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
**Features**:
|
||
- Filtert `status === OPEN_FOR_DRIVERS`
|
||
- Zeigt Event-Details
|
||
- "Ich bin verfügbar" → POST `/api/bookings/[id]/availability`
|
||
- Optionale Nachricht an Admin
|
||
|
||
|
||
#### 2.2 Verfügbarkeits-Dialog
|
||
|
||
**Component**: `components/driver/AvailabilityDialog.tsx`
|
||
|
||
```tsx
|
||
Modal:
|
||
┌─────────────────────────────────────────────────────────┐
|
||
│ ✋ Verfügbarkeit bestätigen [X] │
|
||
├─────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ Event: Hochzeit - Berlin │
|
||
│ Datum: 15.12.2025, 18:00 Uhr │
|
||
│ │
|
||
│ Möchtest du für diesen Event verfügbar sein? │
|
||
│ │
|
||
│ Nachricht an Admin (optional): │
|
||
│ ┌─────────────────────────────────────────────────────┐ │
|
||
│ │ Ich kenne die Location gut und habe Erfahrung mit │ │
|
||
│ │ Hochzeiten. │ │
|
||
│ └─────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ [Abbrechen] [Bestätigen] │
|
||
└─────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 🔄 Automatisierungs-Jobs
|
||
|
||
### Cron-Job Setup (Vercel Cron)
|
||
|
||
`vercel.json`:
|
||
```json
|
||
{
|
||
"crons": [
|
||
{
|
||
"path": "/api/cron/sync-emails",
|
||
"schedule": "*/5 * * * *"
|
||
},
|
||
{
|
||
"path": "/api/cron/check-contracts",
|
||
"schedule": "*/15 * * * *"
|
||
},
|
||
{
|
||
"path": "/api/cron/sync-lexoffice",
|
||
"schedule": "*/30 * * * *"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 📅 Implementierungs-Zeitplan
|
||
|
||
### Sprint 1: Admin KI-Review (2-3 Tage)
|
||
- [ ] `NewBookingsQueue` Component
|
||
- [ ] `AIReviewDialog` Component
|
||
- [ ] Integration in Dashboard
|
||
- [ ] Test: E-Mail → KI-Analyse → Review → Senden
|
||
|
||
### Sprint 2: Freigabe-Workflow (2 Tage)
|
||
- [ ] `ReadyForAssignmentQueue` Component
|
||
- [ ] Auto-Freigabe nach Vertrag
|
||
- [ ] Status-Updates testen
|
||
|
||
### Sprint 3: Fahrer-Portal (2-3 Tage)
|
||
- [ ] `AvailableEvents` Component
|
||
- [ ] `AvailabilityDialog` Component
|
||
- [ ] Verfügbarkeits-API testen
|
||
|
||
### Sprint 4: Admin Zuweisung (2 Tage)
|
||
- [ ] `DriverAssignmentQueue` Component
|
||
- [ ] Fahrer-Zuweisung UI
|
||
- [ ] Tour-Erstellung testen
|
||
|
||
### Sprint 5: E-Mail-Integration (3-4 Tage)
|
||
- [ ] IMAP E-Mail-Sync
|
||
- [ ] Webhook für neue E-Mails
|
||
- [ ] Auto-KI-Analyse bei neuer E-Mail
|
||
|
||
### Sprint 6: Testing & Polish (2-3 Tage)
|
||
- [ ] End-to-End Tests
|
||
- [ ] UI/UX-Optimierungen
|
||
- [ ] Performance-Tests
|
||
|
||
**Gesamt: ~15-20 Tage**
|
||
|
||
---
|
||
|
||
## 🔑 Benötigte API-Keys
|
||
|
||
### 1. OpenAI API Key
|
||
- **Wo**: https://platform.openai.com/api-keys
|
||
- **Kosten**: ~$0.01-0.03 pro E-Mail-Analyse
|
||
- **Limit**: Empfehlung 100$/Monat
|
||
|
||
### 2. LexOffice API Key
|
||
- **Wo**: https://app.lexoffice.de/addons/#/public-api
|
||
- **Kosten**: Kostenlos im Tarif enthalten
|
||
- **Limit**: Unbegrenzt
|
||
|
||
### 3. Google Maps API Key
|
||
- **Wo**: https://console.cloud.google.com/
|
||
- **Kosten**: 200$/Monat gratis
|
||
- **APIs**: Directions, Distance Matrix, Geocoding
|
||
|
||
---
|
||
|
||
## 🎨 Design-System
|
||
|
||
### Farben (Status-Badges):
|
||
- `RESERVED`: Blau (#3B82F6)
|
||
- `CONFIRMED`: Gelb (#F59E0B)
|
||
- `READY_FOR_ASSIGNMENT`: Lila (#A855F7)
|
||
- `OPEN_FOR_DRIVERS`: Cyan (#06B6D4)
|
||
- `ASSIGNED`: Grün (#10B981)
|
||
- `COMPLETED`: Grau (#6B7280)
|
||
- `CANCELLED`: Rot (#EF4444)
|
||
|
||
### Icons:
|
||
- 📨 Neue Anfrage
|
||
- 🤖 KI-analysiert
|
||
- ✅ Vertrag unterschrieben
|
||
- 💰 Auftragsbestätigung
|
||
- 👥 Verfügbare Fahrer
|
||
- 🚗 Zugewiesen
|
||
- ✓ Abgeschlossen
|
||
|
||
---
|
||
|
||
**Bereit für die Implementierung?**
|
||
Welcher Sprint soll als nächstes angegangen werden?
|