intermediate
auftraege
parts-catalog
labor

Ersatzteile und Arbeitszeit erfassen

Erfassen Sie Teile und Arbeitsstunden gegen Tasks, summieren Sie auf Lifetime-Kosten pro Fahrzeug und speisen Sie damit Ihre monatliche GuV

Levy Fleets TeamMay 18, 20266 min read

Ersatzteile und Arbeitszeit erfassen

Zu wissen, was jeder Auftrag kostet, ist der Unterschied zwischen einer profitabel wachsenden Flotte und einer, die Margen in ein schwarzes Loch verliert. Levy Service erfasst Teileverbrauch und Arbeitsminuten gegen jeden Task und summiert sie zu Lifetime-Kosten pro Fahrzeug und monatlichen GuV-Zeilen pro Flotte.

Der Parts Catalog

Verwalten Sie den Katalog unter /dashboard/parts-catalog. Jede Zeile in parts_catalog hat:

  • SKU (Ihre interne Stock Keeping Unit)
  • Name (lesbares Label)
  • Unit Cost (in Cents, Snapshot zum Zeitpunkt des Katalogeintrags)
  • Vehicle Models (auf welche Modelle das Teil passt, z.B. ["es400a", "es400b"])
  • Stock on Hand (Anzahl in Ihrem Lager)
  • Reorder Threshold (Alarm, wenn Bestand darunter faellt)

Katalog-Zeilen koennen global (von Levy gepflegte Standard-OKAI/Segway-Teile) oder per Subaccount (Ihre eigenen Teile) sein. Globale Zeilen haben subaccount_id = NULL und sind fuer jede Flotte sichtbar. Sie koennen eine globale SKU ueberschreiben, indem Sie eine Subaccount-spezifische Zeile mit derselben SKU anlegen.

Teile gegen einen Task buchen

Im Task Detail Screen der operator-app oeffnet der Tech Parts und:

  1. Sucht im Katalog nach der SKU
  2. Setzt die verwendete Menge
  3. Tippt Add

Das schreibt eine task_parts-Zeile mit unit_cost_cents als Snapshot aus dem Katalog zum Zeitpunkt der Verwendung. Der Snapshot ist wichtig: Wenn sich der Katalogpreis naechsten Monat aendert, bleibt der historische Datensatz korrekt.

task_parts.used_by haelt fest, welcher Tech das Teil verbraucht hat, und stock_on_hand in parts_catalog wird automatisch dekrementiert. Faellt der Bestand unter reorder_threshold, erhaelt der ops_manager eine Slack-Notification (sofern konfiguriert).

Arbeitszeit erfassen

Arbeitszeit wird ueber task_labor erfasst:

  • Minutes - die auf diesen Task verwendete Zeit
  • Hourly Rate - Default aus team_members.hourly_rate_cents, pro Task ueberschreibbar
  • Total Cost - berechnet als (minutes / 60) * hourly_rate_cents

Die operator-app erfasst Arbeitsminuten automatisch: Die Uhr startet beim start und stoppt beim resolve. Techs koennen die Minuten vor dem Resolve editieren, falls die automatisch erfasste Zeit nicht stimmt (z.B. wenn sie den Task waehrend einer Mittagspause offen liessen).

Kostenaufrollung pro Task

tasks.total_cost_cents ist die Summe aller task_parts.quantity * task_parts.unit_cost_cents plus aller task_labor.total_cost_cents auf dem Task. Die Spalte wird ueber einen DB-Trigger, der bei Insert/Update/Delete von task_parts und task_labor feuert, synchron gehalten.

Das taucht im Side Drawer des Dashboards als Zeile Total Cost auf und summiert sich in die Analytik pro Fahrzeug und pro Flotte.

Lifetime-Kosten pro Fahrzeug

Die Fahrzeug-Detailseite unter /dashboard/vehicles/[id] traegt eine Karte Lifetime Maintenance Cost, die jeden geschlossenen total_cost_cents gegen das Fahrzeug summiert. Die Aufschluesselung zeigt:

  • Parts vs. Labor Split
  • Top-5 Task-Typen nach Aufwand
  • Tasks pro Quartal (Trend)
  • Kosten pro Fahrt (Lifetime Cost / Lifetime Rides)

Das sind die Daten, mit denen Sie entscheiden, wann ein Fahrzeug ausgemustert wird. Steigt Cost per Ride ueber Ihre Ersatz-ROI-Schwelle, ist es Zeit.

Flottenweite GuV-Zeile

Die Analytics-Seite unter /dashboard/tasks/analytics traegt eine Heatmap Cost per Vehicle und ein Diagramm Monthly Maintenance P&L. Das Diagramm ist ein Stacked Bar mit Parts Cost, internen Labor Costs und Vendor Invoice Costs pro Monat. Das ist die Folie, die in Ihr monatliches Investor-Update kommt.

Hinter den Kulissen liest der Analytics-Endpunkt aus der materialisierten View technician_performance (naechtlich aktualisiert durch /api/cron/refresh-tech-performance) plus eine direkte Summierung gegen tasks.total_cost_cents.

Vendor Invoices

Wird ein Task ueber das Magic-Link-Portal an einen Vendor ausgelagert, laedt der Vendor eine Rechnung ueber POST /api/vendor/[token]/tasks/[id]/invoice hoch. Das erstellt eine task_vendor_invoices-Zeile und eine Stripe Invoice (sofern STRIPE_SECRET_KEY konfiguriert ist). Die Vendor-Kosten rollen wie interne Parts und Labor in tasks.total_cost_cents ein.

Den vollstaendigen Ablauf finden Sie in Vendor Dispatch.

Reorder-Alerts und Lagerverwaltung

Der Reorder-Alert ist die einzige Stelle, an der wir Lagerentscheidungen automatisieren. Levy Service generiert noch keine Bestellungen und ist nicht an die Systeme Ihrer Lieferanten angebunden - das ist ein Roadmap-Item fuer Phase 5. Vorlaeufig sieht der Workflow so aus:

  1. Bestand faellt unter reorder_threshold
  2. Slack-Alert geht an den ops_manager
  3. Ops Manager platziert die Bestellung beim Lieferanten
  4. Bei Wareneingang aktualisiert der Ops Manager stock_on_hand aus der Parts-Catalog-Seite

Datenaufbewahrung

Parts- und Labor-Zeilen werden unbefristet aufbewahrt - sie sind Finanzbelege und speisen die Lifetime-Cost-Sicht. Bitte nicht loeschen. Wenn Sie ein Teil falsch gebucht haben, setzen Sie die Quantity der Zeile auf null, statt zu loeschen.

Was gute Flotten messen

Die Flotten mit profitablem Wartungsbetrieb haben drei Dinge gemeinsam: einen sauberen Katalog mit 30-50 SKUs (nicht 300), Techs, die jede Arbeit erfassen (ohne Ausnahme), und einen monatlichen Review der Cost-per-Vehicle-Heatmap, um die Zitronen zu identifizieren.