Fahrzeug — Kilometer (Sub-Route)
Zweck
Sub-Route /vehicles/:id/mileages zeigt die Kilometerstand-Historie des Fahrzeugs mit Datums-Stempel. Basis für Wartungsintervalle, Inspektions-Trigger und Fahrtenbuch. Werte werden typischerweise periodisch erfasst.
Berechtigungen (CASL)
| Action | Subject | Wirkung | Keycloak-Rolle |
|---|---|---|---|
view | FE_Vehicle, Vehicle | Detail aufrufbar | — |
view/create | VehicleMileage | Einträge pflegen | APP_SPEAMCORE_VIEW/CREATE_VEHICLE_MILEAGE |
Schritt-für-Schritt-Anleitung
- Fahrzeug (
/vehicles/:id) → Tab Kilometer. - + Eintrag → Datum und Kilometerstand erfassen.
- Bei Erreichen von Wartungs-Schwellen kann ein Notification-Event ausgeloest werden.
Anlege-Pattern (Inline-Row-Editing)
Tachostaende werden über die Lebensdauer des Fahrzeugs erfasst — wichtig für Wartungsintervalle, Steuer/Berufsfahrten-Trennung und Verkaufs-Wert.
| Spalte | Eingabe | Wirkung |
|---|---|---|
recordedAt | Datum/Zeit | Zeitpunkt der Tacho-Ablesung. |
mileage | Numerisch (km) | Aktueller Tachostand. Muss > letzter erfasster Wert sein (Backend-Validierung). |
recordedById | Auto | Mitarbeiter, der die Erfassung gemacht hat. |
comment | Textarea | Kontext (z. B. „Vor TUEV", „Nach Auslandsfahrt"). |
Werte werden zur Wartungs-Erinnerung verwendet (Vehicle.nextServiceMileage) und in Berichten als „km-Stand am Stichtag" aggregiert.
Wiederverwendbare Konzepte
Verknuepfungen zu anderen Modulen
- Fahrzeuge — Eltern-Modul.
- Notification-Events — Wartungs-Trigger.
API/Schnittstellen
| Methode | Endpoint | Zweck | CASL |
|---|---|---|---|
GET | /api/vehicle-mileages?filter[vehicleId] | Liste | view VehicleMileage |
POST | /api/vehicle-mileages | Eintrag | create VehicleMileage |
App-Screenshots als KM-Nachweis (Welle 141)
Seit Welle 141 nimmt SpeamCore auch App-Screenshots als Nachweis für KM-Stände an — Fahrer fotografieren den Tacho mit ihrem Handy, das Bild landet als Beleg am Mileage-Eintrag. Die KI klassifiziert das Foto automatisch (vehicle-document-ai-classify-worker), liest den Wert per OCR und schlägt ihn als mileage vor. User bestätigt → Eintrag ist live.
Zusätzlich rotierte SpeamCore die Warnschwelle bei Vielfahrern auf einen quartalsweisen Rhythmus statt täglich:
vehicleMileageOveruseWarningwird nur noch alle 3 Monate ausgelöst (Compliance-Notification).- Daily-Trigger war im Praxisbetrieb zu nervig — bei normaler Fahrleistung mehrfach täglich Pop-ups.
- Logik im BE-Service
vehicle.service.ts(Commit7c8059e4).
Plus: Mileage-Import aus DKV-/UTA-Reports kennt jetzt einen implausible-Flag (Welle 113), und Beträge wie "50400.000" werden korrekt als 50400 interpretiert (DKV-CSV-Parser-Fix).
KM-Foto-KI-Prüfung (seit Juni 2026)
Wird ein Kilometerstand mit Foto über den Compliance-Flow erfasst (POST /compliance-checks/:id/submit-mileage), prüft eine KI per Vision das Tacho-Foto gegen den eingegebenen Wert:
- Die KI liest die Zahl vom Foto und vergleicht sie mit der Eingabe (Toleranz: ±2 % oder ±100 km, je nachdem was größer ist).
- Abgelehnt (HTTP 422) wird nur bei einem echten Mismatch: Die KI hat einen Wert sicher gelesen und er liegt außerhalb der Toleranz.
- Geht durch, wenn die KI keinen sicheren Wert lesen kann (
extractedMileage = null) oder gar kein Kombiinstrument erkennt — schlecht ablesbare, aber legitime Fotos blockieren den Fahrer also nicht.
Abschaltbar: Über die Einstellung „KM-Eingabe: Foto per KI prüfen" (complianceVehicleMileagePhotoAiEnabled, Default an) lässt sich die KI-Prüfung global deaktivieren — dann wird jedes Foto ohne Abgleich akzeptiert.
Korrektur zu hoher Vorwerte: Ein per Foto verifizierter (niedrigerer) Tachostand ersetzt ältere Einträge mit höherer km-Zahl (diese werden in derselben Transaktion soft-gelöscht), sodass die Monotonie-Prüfung sauber bleibt. Die Notiz vermerkt, wie viele Vorwerte ersetzt wurden.
Versionshinweise
- 2026-06-12: KM-Foto-KI-Prüfung dokumentiert — Vision-Abgleich Foto ↔ Eingabe (Toleranz ±2 %/±100 km, Ablehnung nur bei echtem Mismatch), Settings-Toggle
complianceVehicleMileagePhotoAiEnabled, Supersede-Korrektur zu hoher Vorwerte. Verifiziert anvehicleMileagePhotoAi.service.ts,complianceCheck.router.ts(submit-mileage),vehicleMileage.model.ts. - 2026-04-30: Initiale Veröffentlichung.
- 2026-05-21 (Welle 141): App-Screenshots als KM-Nachweis (Foto → AI-Klassifizierung → OCR-Vorschlag).
vehicleMileageOveruseWarningquartalsweise statt täglich. Bestands-Purge alter inkonsistenter Mileage-Daten beim Migrieren. Quelle: BE-Commits4ea001f1,7c8059e4.