Zum Hauptinhalt springen

Kerngeschäftslogik

Last Updated: Juli 2025
Version: 1.0 - Hauptprozesse und Business Logic
Status: ✅ Aktuell - Basierend auf aktueller Implementierung

Auftragsprozess (Order Workflow)

1. REQUESTER erstellt ORDER
2. System erstellt ORDER_REQUESTS für passende Sprachmittler
3. SPRACHMITTLER erhält Benachrichtigung und antwortet
4. Bei Annahme: ORDER_REQUEST wird zu ASSIGNMENT
5. ASSIGNMENT wird durchgeführt (check-in/check-out)
6. ORDER wird abgeschlossen
7. INVOICE wird erstellt und verarbeitet

Sprachmittler-Matching Algorithm

Das Matching-System ist in der MatchInterpretersForOrder Action implementiert und arbeitet in mehreren Phasen:

1. Order-Klassifizierung

Adhoc vs. Geplant: Das System unterscheidet zwischen zwei Auftragstypen basierend auf der verfügbaren Zeit bis zum Termin:

  • Adhoc-Aufträge: Weniger als 24 Stunden bis zum Termin

    • Warum anders? Bei kurzfristigen Anfragen ist Geschwindigkeit wichtiger als Perfektion
    • Strategie: Alle passenden Sprachmittler werden gleichzeitig benachrichtigt
    • Vorteil: Schnellste mögliche Antwortzeit
  • Geplante Aufträge: 24 Stunden oder mehr bis zum Termin

    • Warum anders? Bei geplanten Terminen kann der beste Kandidat in Ruhe ausgewählt werden
    • Strategie: Der beste Kandidat wird zuerst angefragt, bei Ablehnung folgt der nächstbeste
    • Vorteil: Höchste Qualität und beste Passung
$hoursUntilStart = now()->diffInHours($order->scheduled_at, false);
$isAdhoc = $hoursUntilStart < 24 && $hoursUntilStart > 0;

2. Kandidaten-Filterung

Bevor das Scoring beginnt, werden alle Sprachmittler durch mehrere "harte" Filter gesiebt. Nur wer alle Kriterien erfüllt, kommt in die engere Auswahl:

Filter 1: Grundvoraussetzungen

  • Aktiver Sprachmittler-Account mit vollständigem Profil
  • Status "Active" (nicht deaktiviert oder wartend auf Bestätigung)

Filter 2: Sprachkombination

  • Sprachmittler muss mindestens eine der benötigten Zielsprachen beherrschen
  • Das System prüft, ob die Sprachcodes des Sprachmittlers mit denen der Bestellung übereinstimmen

Filter 3: Kategorie-Blacklist

  • Sprachmittler können bestimmte Themenbereiche (z.B. Medizin, Recht) von ihrer Arbeit ausschließen
  • Orders in diesen Kategorien werden für sie automatisch herausgefiltert

Filter 4: Zeitliche Verfügbarkeit

  • Keine überschneidenden Termine (mit 1-Stunden-Puffer vorher und 3-Stunden-Annahme für die Dauer)
  • Prüfung gegen bereits akzeptierte Assignments

Filter 5: Entfernung

  • Wenn der Order auf "über 30km erlaubt" gesetzt ist, werden alle Sprachmittler akzeptiert
  • Andernfalls würde eine Distanzberechnung stattfinden (noch nicht implementiert)
// Beispiel der Implementierung:
User::whereHas('roles', function ($query) {
$query->where('name', 'interpreter');
})->where('state', Active::class)
->with(['interpreterProfile', 'interpreterProfile.systemLanguages'])

3. Scoring-System

Alle verbliebenen Kandidaten werden nach einem gewichteten Punktesystem bewertet. Maximum: 100 Punkte

Das System bewertet vier Hauptkriterien mit unterschiedlicher Gewichtung:

Sprachkompetenz (40% = 40 Punkte max)

  • Aktuell: Einfaches Ja/Nein-System
    • Hat die benötigte Sprache = 100 Punkte
    • Hat sie nicht = 0 Punkte (bereits herausgefiltert)
  • Geplant: Berücksichtigung von Proficiency-Leveln (native/advanced/intermediate/basic)

Verfügbarkeit (25% = 25 Punkte max)

  • Aktuell: Binäre Bewertung
    • Zeitlich verfügbar = 100 Punkte
    • Nicht verfügbar = 0 Punkte (bereits herausgefiltert)
  • Geplant: Nuancierte Bewertung basierend auf aktueller Arbeitsbelastung und Flexibilität

Erfahrung & Bewertung (20% = 20 Punkte max)

  • Kundenbewertungen: Durchschnittliche 5-Sterne-Bewertung wird in Prozent umgerechnet
  • Erfahrungsbonus: Mehr abgeschlossene Aufträge = höhere Punkte (max. 20 Bonuspunkte)
  • Berechnung: (avgRating/5)*100 + min(totalRatings*2, 20)

Standort (15% = 15 Punkte max)

  • Aktuell: Fester Standardwert (80 Punkte für alle)
  • Geplant: GPS-basierte Entfernungsberechnung zur Auftragsstelle
$score = 
($languageScore * 0.4) + // 40% - Sprachkompetenz
($availabilityScore * 0.25) + // 25% - Verfügbarkeit
($experienceScore * 0.2) + // 20% - Erfahrung/Bewertung
($locationScore * 0.15); // 15% - Standort

4. Matching-Strategien

Sequenziell (Geplante Aufträge)

Ablauf:

  1. Beste Auswahl: Der Sprachmittler mit dem höchsten Score wird ausgewählt
  2. Benachrichtigung: Nur dieser eine erhält eine Push-Notification
  3. Warten: System wartet auf Antwort (Accept/Reject)
  4. Timeout-Überwachung: Falls keine Antwort in der vorgegebenen Zeit
  5. Fallback: Bei Ablehnung/Timeout wird automatisch der nächstbeste benachrichtigt

Vorteile:

  • Höchste Qualität (bester Kandidat zuerst)
  • Keine Verwirrung durch mehrfache Benachrichtigungen
  • Effiziente Ressourcennutzung

Parallel (Adhoc/Urgent)

Ablauf:

  1. Massenbenachrichtigung: Alle gefundenen Kandidaten erhalten gleichzeitig eine Notification
  2. Wettlauf: Erster der antwortet und akzeptiert, bekommt den Auftrag
  3. Auto-Stornierung: Alle anderen OrderRequests werden automatisch zurückgezogen

Vorteile:

  • Schnellste mögliche Reaktionszeit
  • Höhere Wahrscheinlichkeit einer schnellen Annahme
  • Ideal für kurzfristige Notfälle

5. OrderRequest-Erstellung

Für jeden ausgewählten Sprachmittler wird ein OrderRequest-Datensatz erstellt mit folgenden Informationen:

Auftragsdaten:

  • Verlinkung zu Order und Sprachmittler
  • Sprachkombination (Quell- und Zielsprache)
  • Ort, Zeit und geschätzte Dauer (Standard: 2 Stunden)

Matching-Metadaten:

  • Berechneter Matching-Score
  • Request-Typ ('planned' oder 'adhoc')
  • Ob es sich um die erste Wahl handelt
  • Timeout-Zeitpunkt und -dauer

Tracking-Informationen:

  • Attempt-Nummer (bei wiederholten Versuchen)
  • Historie vorheriger Ablehnungen
  • Zeitstempel für Notification-Versand

6. Verbesserungspotentiale

Das System ist bewusst einfach gehalten und hat Raum für Verbesserungen:

Kurzfristig umsetzbar:

  • Echte GPS-Distanzberechnung
  • Proficiency-Level-Berücksichtigung bei Sprachen
  • Verfügbarkeits-Nuancen (Arbeitsbelastung, Flexibilität)

Mittelfristig:

  • Historische Performance-Daten (Pünktlichkeit, Zuverlässigkeit)
  • Kategorie-Präferenzen (positive Spezialisierungen)
  • Dynamic Pricing Integration

Langfristig:

  • Machine Learning für bessere Score-Gewichtung
  • Predictive Availability
  • Lernende Präferenz-Algorithmen

Notification System

Das System nutzt moderne Push-Notification-Technologie für sofortige Benachrichtigungen:

  • DEVICES: OneSignal Push Notifications für Mobile Apps
  • NOTIFICATIONS: Laravel Standard Notifications für E-Mail und interne Systeme
  • Multi-Channel: Automatisches Fallback zwischen Push und E-Mail

Notification Channels

ChannelVerwendungTimeoutRetry
PushPrimär für Mobile Apps60 Min3x
EmailBackup bei Push-Fehlern2 Std1x

Wichtig: Das System nutzt keine SMS-Benachrichtigungen. Push-Notifications sind der primäre Kommunikationskanal für Sprachmittler.

Abrechnung & Zahlung

  • Tarif-Snapshots: Tarifstände werden bei Auftragsabschluss gespeichert
  • Versionierung: Rechnungen unterstützen Versionen für Korrekturen
  • Automatische Berechnung: Stunden, Kilometer, Zusatzkosten
  • Approval-Workflow: Draft → Submitted → Approved → Paid

Kostenkomponenten

  • Grundkosten: Stundensatz × tatsächliche Arbeitszeit
  • Fahrtkosten: Kilometersatz × Entfernung
  • Zusatzkosten: Parking, Überstunden, Materialien
  • MwSt: Aktueller Steuersatz wird gesnappt

Tags: #business-logic #workflow #matching #notifications #billing