# đ Automatisierter Buchungs-Workflow - Implementierungsplan **Datum**: 2025-11-12 **Ziel**: Vollautomatischer Workflow von E-Mail-Eingang bis Kalender-Reservierung --- ## đ GEWĂNSCHTER WORKFLOW ### Phase 1: E-Mail-Eingang â KI-Analyse ``` E-Mail kommt rein â KI extrahiert automatisch: - Kundendaten - Event-Details - GewĂźnschtes Datum â System erstellt: - Angebot-Entwurf (LexOffice) - Mietvertrag-Entwurf (PDF) - E-Mail-Antwort-Entwurf (GPT-4) â Status: PENDING_REVIEW (Wartet auf Admin-Freigabe) ``` ### Phase 2: Admin-Review im Dashboard ``` Dashboard zeigt: "Offene Anfragen" (Queue) â Admin Ăśffnet Anfrage und sieht: - â KI-generierte E-Mail (Vorschau) - â Angebot-PDF (Vorschau) - â Mietvertrag-PDF (Vorschau) - â Extrahierte Daten â Admin prĂźft und klickt: - [â Korrektur vornehmen] (optional) - [â Senden] (alles in einem Rutsch) ``` ### Phase 3: Automatischer Versand ``` System sendet gleichzeitig: 1. E-Mail an Kunden (mit Anhängen): - Angebot (PDF) - Mietvertrag (PDF) - Personalisierte Nachricht 2. Erstellt Kalender-Eintrag: - Reservierung im Format: "[KUNDE] - [ORT] - [PHOTOBOX]" - Synchronisiert mit Plesk-Kalender 3. Status-Update: - RESERVED (Warte auf Vertrag) ``` ### Phase 4: VertragsrĂźcklauf & Bestätigung ``` Kunde unterschreibt Vertrag â Cron-Job prĂźft: - Hochgeladenen Vertrag (signiert) - Oder Online-Signatur â System erstellt automatisch: - LexOffice Auftragsbestätigung - Bestätigungs-E-Mail an Kunden - Kalender-Update: RESERVED â CONFIRMED ``` --- ## đ KALENDER-INTEGRATION ### Option 1: CalDAV-Synchronisation (Empfohlen) ``` SaveTheMoment Atlas (DB) â CalDAV Server (z.B. ownCloud/Nextcloud) â Plesk Kalender (liest Ăźber CalDAV) ``` **Vorteile**: - Bidirektionale Sync - Standard-Protokoll - Konflikt-Erkennung **Implementierung**: ```typescript // lib/calendar-sync.ts import { CalDAVClient } from 'tsdav'; class CalendarService { async createReservation(booking: Booking) { const event = { summary: `${booking.customerName} - ${booking.eventCity} - ${booking.photobox.model}`, dtstart: booking.eventDate, dtend: booking.setupTimeLatest, location: `${booking.eventAddress}, ${booking.eventZip} ${booking.eventCity}`, description: `Buchungsnr: ${booking.bookingNumber}\\nFotobox: ${booking.photobox.serialNumber}`, }; await caldavClient.createCalendarObject({ calendar: this.calendar, filename: `${booking.bookingNumber}.ics`, data: this.generateICS(event), }); } } ``` ### Option 2: iCal-Export (Einfacher, aber manuell) ``` SaveTheMoment Atlas â Generiert .ics Datei â Download-Link fĂźr Admin â Manueller Import in Plesk-Kalender ``` **Vorteile**: - Einfache Implementierung - Keine Extra-Software **Nachteile**: - Kein automatischer Sync - Manueller Schritt notwendig ### Option 3: Google Calendar API (Flexibel) ``` SaveTheMoment Atlas â Google Calendar API â Shared Calendar (von Plesk abrufbar) ``` **Vorteile**: - API vorhanden - Echtzeit-Updates - Kann mit Plesk synchronisiert werden --- ## đď¸ BENĂTIGTE ĂNDERUNGEN ### 1. Neuer Booking-Status-Flow ```typescript // Aktuell: RESERVED â CONFIRMED â COMPLETED // Neu: AI_PENDING â REVIEW_PENDING â RESERVED â CONTRACT_PENDING â CONFIRMED â COMPLETED // Zusätzliche Stati: - AI_PENDING: KI analysiert gerade - REVIEW_PENDING: Wartet auf Admin-Freigabe - CONTRACT_PENDING: Wartet auf unterschriebenen Vertrag ``` ### 2. Neue Datenbank-Felder ```prisma model Booking { // ... existing fields // Workflow-Status aiDraftReady Boolean @default(false) adminReviewedAt DateTime? adminReviewedBy String? // E-Mail-Entwurf emailDraft String? // GPT-4 generierter Text emailDraftApproved Boolean @default(false) // Dokument-EntwĂźrfe quotationDraftUrl String? // LexOffice PDF Preview contractDraftUrl String? // Mietvertrag PDF Preview // Versand-Status documentsSentAt DateTime? documentsSentTo String? // Kalender-Sync calendarEventId String? // CalDAV Event ID calendarSynced Boolean @default(false) calendarSyncedAt DateTime? } ``` ### 3. Neue API-Endpunkte ``` POST /api/bookings/[id]/approve-and-send â Admin klickt "Senden" â Sendet E-Mail + PDFs â Erstellt Kalender-Eintrag â Update Status GET /api/admin/pending-reviews â Liste aller Anfragen mit aiDraftReady=true â FĂźr Dashboard-Queue POST /api/bookings/[id]/calendar-sync â Synchronisiert Buchung mit Kalender â Nutzt CalDAV oder Google Calendar API POST /api/cron/process-pending-bookings â Neue Cron-Job â PrĂźft E-Mails â Startet KI-Analyse â Erstellt EntwĂźrfe ``` ### 4. Neues Dashboard-Widget: "Offene Anfragen" ```tsx // components/PendingReviewsQueue.tsx export default function PendingReviewsQueue() { const [pendingBookings, setPendingBookings] = useState([]); return (
{booking.eventCity} ¡ {formatDate(booking.eventDate)}