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:
- Beste Auswahl: Der Sprachmittler mit dem höchsten Score wird ausgewählt
- Benachrichtigung: Nur dieser eine erhält eine Push-Notification
- Warten: System wartet auf Antwort (Accept/Reject)
- Timeout-Überwachung: Falls keine Antwort in der vorgegebenen Zeit
- 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:
- Massenbenachrichtigung: Alle gefundenen Kandidaten erhalten gleichzeitig eine Notification
- Wettlauf: Erster der antwortet und akzeptiert, bekommt den Auftrag
- 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
| Channel | Verwendung | Timeout | Retry |
|---|---|---|---|
| Push | Primär für Mobile Apps | 60 Min | 3x |
| Backup bei Push-Fehlern | 2 Std | 1x |
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