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

8.9 KiB

🚀 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:

// 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

// 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

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"

// components/PendingReviewsQueue.tsx
export default function PendingReviewsQueue() {
  const [pendingBookings, setPendingBookings] = useState([]);
  
  return (
    <div className="bg-gray-800 p-6 rounded-xl">
      <h2>📋 Offene Anfragen ({pendingBookings.length})</h2>
      
      {pendingBookings.map(booking => (
        <div key={booking.id} className="border-b py-4">
          <div className="flex justify-between">
            <div>
              <h3>{booking.customerName}</h3>
              <p>{booking.eventCity} · {formatDate(booking.eventDate)}</p>
            </div>
            <button onClick={() => openReview(booking.id)}>
              Prüfen 
            </button>
          </div>
        </div>
      ))}
    </div>
  );
}

5. Review-Modal (Admin-Prüfung)

// components/BookingReviewModal.tsx
<Modal open={showReview}>
  <h2>Anfrage prüfen: {booking.customerName}</h2>
  
  <Tabs>
    <Tab label="E-Mail-Entwurf">
      <EmailPreview content={booking.emailDraft} />
      <button onClick={editEmail}>Bearbeiten</button>
    </Tab>
    
    <Tab label="Angebot">
      <PDFPreview url={booking.quotationDraftUrl} />
    </Tab>
    
    <Tab label="Mietvertrag">
      <PDFPreview url={booking.contractDraftUrl} />
    </Tab>
    
    <Tab label="Kundendaten">
      <CustomerDataForm data={booking} onEdit={handleEdit} />
    </Tab>
  </Tabs>
  
  <div className="flex gap-4">
    <button onClick={handleReject}>Ablehnen</button>
    <button onClick={handleEdit}>Korrigieren</button>
    <button onClick={handleApproveAndSend} className="bg-green-600">
       Prüfen & Senden
    </button>
  </div>
</Modal>

⏱️ IMPLEMENTIERUNGS-ZEITPLAN

Sprint 1: Workflow-Basis (2-3 Tage)

  • Neue Booking-Stati hinzufügen
  • DB-Migration für neue Felder
  • API: /api/admin/pending-reviews
  • Dashboard-Widget: "Offene Anfragen"

Sprint 2: Auto-Generierung (3-4 Tage)

  • Cron-Job: E-Mail-Prüfung + KI-Analyse
  • Auto-Generierung: Angebot-Entwurf (LexOffice)
  • Auto-Generierung: Vertrag-Entwurf (PDF)
  • Auto-Generierung: E-Mail-Antwort (GPT-4)

Sprint 3: Admin-Review-UI (2-3 Tage)

  • Review-Modal mit Tabs
  • PDF-Preview-Komponenten
  • E-Mail-Editor (falls Korrektur nötig)
  • "Approve & Send" Funktion

Sprint 4: Automatischer Versand (2 Tage)

  • API: /api/bookings/[id]/approve-and-send
  • E-Mail-Versand mit Anhängen (Angebot + Vertrag)
  • Status-Update nach Versand

Sprint 5: Kalender-Integration (3-4 Tage)

  • CalDAV-Client implementieren
  • Oder: Google Calendar API
  • Oder: iCal-Export
  • Plesk-Kalender-Anbindung konfigurieren
  • Bidirektionale Synchronisation

Sprint 6: Testing & Optimierung (2 Tage)

  • End-to-End-Tests
  • Performance-Optimierung
  • Fehlerbehandlung
  • Admin-Schulung

Gesamt-Aufwand: ~14-19 Tage (3-4 Wochen)


🔐 KALENDER-OPTIONEN: ENTSCHEIDUNGSMATRIX

Kriterium CalDAV iCal Export Google Calendar
Auto-Sync Ja Nein Ja
Plesk-kompatibel Ja Ja ⚠️ Indirekt
Implementierungs-Aufwand 🟡 Mittel 🟢 Gering 🟡 Mittel
Konflikt-Erkennung Ja Nein Ja
Kosten 🟢 Kostenlos 🟢 Kostenlos 🟢 Kostenlos
Empfehlung

Empfehlung: CalDAV, falls Plesk CalDAV unterstützt. Sonst: Google Calendar API.


NÄCHSTE SCHRITTE

Fragen an dich:

  1. Kalender-System:

    • Welches Kalender-System nutzt ihr aktuell in Plesk?
    • Unterstützt es CalDAV?
    • Oder soll ich Google Calendar API nutzen?
  2. E-Mail-Versand:

    • Über welchen SMTP-Server sollen die Entwürfe versendet werden?
    • Sind die SMTP-Einstellungen schon in den Locations hinterlegt?
  3. Priorität:

    • Was ist wichtiger: Kalender-Sync oder Auto-Workflow?
    • Soll ich mit dem Auto-Workflow (Sprint 1-4) starten?
  4. Testing:

    • Soll ich zuerst einen kleinen Prototyp bauen zum Testen?

Status: Planung abgeschlossen, warte auf deine Entscheidungen! 🎯