Zum Hauptinhalt springen

Kostenberechnung für Aufträge

Die Sprachbrücke-Plattform verwendet ein zweistufiges Kostensystem für Dolmetschaufträge, das sowohl Grundkosten als auch zusätzliche Kosten berücksichtigt.

Überblick

Grundkosten (total_amount)

  • Zweck: Der Hauptdienstleistungspreis, der dem Kunden vorab angeboten wird
  • Festlegung: Bei der Auftragserstellung oder Kostenschätzung
  • Beispiele:
    • 2-stündiger Dolmetschdienst: 120€
    • Halbtägige Konferenzdolmetschung: 400€
    • Arzttermin-Dolmetschung: 80€

Zusätzliche Kosten

  • Zweck: Zusätzliche Gebühren, die während der Dienstleistung entstehen
  • Kategorien: Fahrt, Überstunden, Parkgebühren, Ausrüstung, Materialien, Sonstiges
  • Genehmigung erforderlich: Alle zusätzlichen Kosten müssen vor der Abrechnung genehmigt werden

Berechnungsmethoden

calculateTotalCost() - Endgültiger Rechnungsbetrag

Diese Methode berechnet den finalen Betrag, der dem Kunden in Rechnung gestellt wird:

public function calculateTotalCost(): float
{
// Beginne mit dem Grundauftragsbetrag
$baseAmount = (float) $this->total_amount;

// Füge genehmigte zusätzliche Kosten hinzu
$additionalCostsTotal = $this->additionalCosts()
->where('approval_status', 'approved')
->sum('amount') ?? 0;

return $baseAmount + $additionalCostsTotal;
}

Verwendung: Endabrechnung, Rechnungserstellung, Kundenzahlung

calculateTotalAmount() - Auftragsbasierte Berechnung

Diese Methode berechnet Kosten basierend auf tatsächlichen Zuweisungen:

public function calculateTotalAmount(): float
{
$baseAmount = 0;

// Füge Zuweisungskosten hinzu
if ($this->assignments()->exists()) {
$baseAmount += $this->assignments->sum('calculated_cost') ?? 0;
}

// Füge genehmigte zusätzliche Kosten hinzu
$additionalCostsTotal = $this->additionalCosts()
->where('approval_status', 'approved')
->sum('amount') ?? 0;

return $baseAmount + $additionalCostsTotal;
}

Verwendung: Interne Kostenverfolgung, zuweisungsbasierte Berechnungen

Workflow-Beispiel

1. Auftragserstellung

Kunde beantragt 2-stündige Dolmetschung
total_amount = 120€ (Grundangebot)

2. Dienstleistungserbringung

Sprachmittler arbeitet 2,5 Stunden (30 Min Überstunden)
Fahrt zu entferntem Ort erforderlich
Parkgebühren entstehen

3. Zusätzliche Kosten hinzugefügt

- Überstunden: 30,00€ (genehmigungspflichtig)
- Fahrt: 25,50€ (genehmigungspflichtig)
- Parkgebühren: 8,00€ (genehmigungspflichtig)

4. Kostengenehmigung

- Überstunden: 30,00€ (genehmigt)
- Fahrt: 25,50€ (genehmigt)
- Parkgebühren: 8,00€ (abgelehnt - nicht vorab autorisiert)

5. Endberechnung

calculateTotalCost() = 120€ + 30,00€ + 25,50€ = 175,50€

Geschäftsregeln

Kostengenehmigung

  • Nur Benutzer mit der Rolle UserRole::ADMIN können zusätzliche Kosten genehmigen
  • Selbstgenehmigung ist nicht erlaubt (Ersteller kann eigene Kosten nicht genehmigen)
  • Nach Genehmigung/Ablehnung können zusätzliche Kosten nicht mehr geändert werden

Statusbasierte Einbeziehung

  • Nur genehmigte zusätzliche Kosten werden in die Endberechnung einbezogen
  • Ausstehende und abgelehnte Kosten werden von der Abrechnung ausgeschlossen
  • Dies stellt sicher, dass Kunden nur für autorisierte Ausgaben belastet werden

Zuweisungskostenberechnung

  • Automatisch berechnet, wenn der Zuweisungsstatus auf abgeschlossen wechselt
  • Formel: (tatsächliche_dauer_minuten / 60) × stundensatz
  • Auf 2 Dezimalstellen gerundet

Datenbankschema

Orders Tabelle

  • total_amount: DECIMAL(10,2) - Grunddienstleistungskosten
  • Andere kostenbezogene Felder über Beziehungen verwaltet

Additional Costs Tabelle

  • amount: DECIMAL(8,2) - Kostenbetrag
  • approval_status: ENUM('pending', 'approved', 'rejected')
  • category: ENUM('travel', 'overtime', 'parking', 'equipment', 'materials', 'other')

Assignments Tabelle

  • calculated_cost: DECIMAL(8,2) - Berechnet aus stundensatz × tatsächliche_dauer
  • hourly_rate: DECIMAL(6,2) - Sprachmittlersatz
  • actual_duration_minutes: INTEGER - Tatsächliche Dienstzeit

Zukünftige Überlegungen

Mögliche Änderungen

  • Dynamische Preisgestaltung: Zeit- oder nachfragebasierte Preisanpassungen
  • Rabattsystem: Kunden- oder volumenspezifische Rabatte
  • Steuerberechnung: Mehrwertsteuer oder andere Steuereinschlüsse
  • Währungsunterstützung: Mehrwährungsbehandlung
  • Provisionsstruktur: Plattformgebühren oder Sprachmittlerprovisionen

Migrationsstrategie

Bei Änderungen der Geschäftslogik berücksichtigen:

  1. Datenbankmigrationen für neue Felder
  2. Rückwärtskompatibilität für bestehende Aufträge
  3. Datenmigrationsskripte für historische Daten
  4. Aktualisierte Testabdeckung für neue Szenarien

Verwandte Dateien

  • app/Models/Order.php - Hauptkostenberechnungsmethoden
  • app/Models/AdditionalCost.php - Verwaltung zusätzlicher Kosten
  • app/Models/Assignment.php - Zuweisungskostenberechnung
  • tests/Unit/OrderModelTest.php - Kostenberechnungstests
  • database/migrations/*_create_orders_table.php - Schemadefinition

API-Endpunkte (Zukünftig)

  • GET /api/orders/{id}/costs - Kostenaufschlüsselung abrufen
  • POST /api/orders/{id}/additional-costs - Zusätzliche Kosten hinzufügen
  • PUT /api/additional-costs/{id}/approve - Zusätzliche Kosten genehmigen
  • PUT /api/additional-costs/{id}/reject - Zusätzliche Kosten ablehnen