Fahrzeuge
Zweck
Der Fuhrpark in SpeamCore haelt alle Fahrzeuge des Mandanten — sowohl Leasing- als auch Eigentumsfahrzeuge — mit Stammdaten, Kilometerstand-Historie, Reifenwechseln und Vertragsdokumenten. Fahrzeuge sind über VehicleAssignment einem Mitarbeiter zuordenbar.
Voraussetzungen
Berechtigungen (CASL)
Frontend-Page-Guard:
| Action | Subject | Keycloak-Rolle |
|---|---|---|
view | FE_Vehicle, Vehicle | — |
Tab-Subjects:
| Tab | Sub-Pfad | Subject |
|---|---|---|
| Kilometerstaende | /vehicles/:id/mileages | VehicleMileage:view |
| Kontakte | /vehicles/:id/contacts | Contact:view |
| Reifen | /vehicles/:id/tires | VehicleTire:view |
| Vertragsdokumente | /vehicles/:id/contract-documents | Document:view |
| Anschreiben | /vehicles/:id/letter-documents | Document:view |
| Protokolle | /vehicles/:id/protocol-documents | Document:view |
Schritt-für-Schritt-Anleitung
Fahrzeug anlegen
- Fahrzeuge (
/vehicles) → + Neu. - Wichtig:
ownershipType(leasingoderownership) auswählen — danach nicht mehr änderbar. - Stammdaten:
name,registrationNumber(Kennzeichen),vin, Hersteller (manufacturerId), Modell. - Bei
leasing: Vertrags-Felder (Vertragsnummer, Netto-Rate, Laufzeit, Mehr-/Minder-Kilometerpreis, Toleranz). - Bei
ownership: Kaufpreis, Versicherungsdaten. - Speichern. Status startet auf
active.
Kilometerstand erfassen
- Tab Kilometerstaende → + Neu.
- Datum und km-Stand eintragen.
- Speichern. Validierung: neuer Wert ≥ vorhergehender Wert (Hook am Modell).
Fahrzeug archivieren
status auf archived setzen — die meisten Felder werden danach disabled.

Toolbar (Detail-Seite)
Schlanke Toolbar oben rechts:
| Icon | Aktion (aria-label) | CASL | Wirkung |
|---|---|---|---|
| ← | Zurückgehen | — | Zurück zur Liste. |
| 🏠 | Zur Startseite gehen | — | Springt auf das Dashboard / /. |
| ⏮/◀/▶/⏭ | Pagination | — | Navigation durch die gefilterte Liste — Massen-Bearbeitung ohne Liste-Sprung. |
Globale Floating-Drawer (links)
Wie auf jeder Detail-Seite verfuegbar — siehe Floating-Quickbar:
- KAL. (Mini-Kalender)
- ZEIT (Persoenliche Wochen-Arbeitszeit)
- ARBEIT (Eigene bevorstehende Aufträge)
UI-Elemente
Button: „+ Neu"
Erfordert create:Vehicle. Beim Anlegen muss ownershipType zwingend gesetzt sein.
Felder und Eingaben
Stammdaten:
| Feldname | Pflicht | Datentyp | Wirkung beim Ausfuellen | Voraussetzung |
|---|---|---|---|---|
name | nein | String | Anzeigename in Auswahl-Listen und Auftragszuweisungen. | — |
registrationNumber | nein | String | Kennzeichen — Identifikator für Fuhrpark-Reports und Halter-Doku. | — |
vin | nein | String | Fahrgestellnummer für eindeutige Identifikation und Versicherungs-Korrespondenz. | — |
manufacturerCode / modelCode | nein | String | Hersteller- und Modell-Code für detaillierte Berichte. | — |
firstRegistrationDate | nein | DATE | Erstzulassung — beeinflusst Wartungsintervall-Berechnung. | — |
manufacturerId | nein | UUID | Hersteller-Verknuepfung. | view:Manufacturer. |
ownershipType | ja | leasing/ownership | Steuert Sichtbarkeit der Leasing- vs. Eigentum-Felder. Disabled nach Anlage — Wechsel des Besitzverhaeltnisses erfordert neuen Datensatz. | Muss vor erstem Speichern gesetzt sein. |
status | ja | active/archived | archived macht die meisten Felder disabled und blendet das Fahrzeug in Auswahl-Listen aus. | — |
parentId + parentType | nein | polymorph | Typisch VehicleAssignment — Verknuepfung zum aktuellen Mitarbeiter. | view:VehicleAssignment. |
trackMileage | ja | Boolean | Steuert, ob beim Fahrer KM-Eingaben angefragt werden (Workorder-Start, Tour-Start, Mileage-Log). Default true — Bestandsverhalten. Bei false werden die KM-Prompts unterdrückt, z. B. bei Werkstatt-Werkzeug-Fahrzeugen oder elektrischen Stapler-Trolleys ohne klassisches Tacho-Konzept. | — |
Antrieb:
| Feldname | Datentyp | Wirkung beim Ausfuellen | Voraussetzung |
|---|---|---|---|
driveType | hybrid/electric/diesel/petrol/gas | Klassifizierung für Reports (CO₂-Bilanz, Tank-/Lade-Optionen). | — |
gearboxType | automatic/manual | Disposition (welcher Mitarbeiter darf das Fahrzeug fahren). | — |
Leasing-Felder (nur bei ownershipType = leasing sichtbar):
| Feldname | Wirkung beim Ausfuellen | Voraussetzung |
|---|---|---|
contractNumber | Vertragsidentifikation für Korrespondenz mit Leasinggeber. | — |
contractNetRate | Monatliche Rate (netto) für Kosten-Reports. | — |
contractTermMonths | Vertragslaufzeit in Monaten. | — |
contractStartDate / contractEndDate | Vertragszeitraum — Anker für Erinnerungen vor Vertragsende. | endDate >= startDate. |
contractMileageAllowance | Erlaubte Gesamt-Kilometerleistung. Anker für Mehr-/Minder-Berechnung. | — |
contractToleranceKilometer | Toleranzgrenze für Mehr-/Minderkilometer ohne Mehrkosten. | — |
contractOvermileagePrice / contractUndermileagePrice | Preis pro Mehr- bzw. Minderkilometer über/unter der Toleranz. | — |
Eigentum-Felder (nur bei ownershipType = ownership sichtbar):
| Feldname | Wirkung beim Ausfuellen | Voraussetzung |
|---|---|---|
purchasePriceNet | Anschaffungspreis (netto) für Anlagevermoegens-Reports. | — |
purchasePriceDate | Anschaffungs-Datum als Anker für AfA-Berechnung. | — |
insuranceNumber | Versicherungsnummer für Schadensfall. | — |
insuranceCompany | Versicherungsgesellschaft. | — |
Workflows und Zustaende
Wiederverwendbare Konzepte
- Polymorpher Parent-Pattern — Documents/Contacts polymorph am Fahrzeug.
- Berechtigungen verstehen (CASL)
Verknuepfungen zu anderen Modulen
- Mitarbeiter —
VehicleAssignmentverknuepft Fahrzeug und Mitarbeiter. - Hersteller —
manufacturerId. - Kontakte — Vertragsansprechpartner via
ContactParent. - Dokumente — drei Doc-Kategorien: Verträge, Anschreiben, Protokolle.
Häufige Fehler und Lösungen
| Fehler | Lösung |
|---|---|
ownershipType nicht änderbar | Per Design — neuer Datensatz, alter wird archiviert. |
| Kilometerstand wird abgelehnt | Neuer Wert kleiner als letzter erfasster Wert — prüfen oder vorigen Eintrag korrigieren. |
| Leasing-Felder ausgeblendet | ownershipType = ownership gewählt. |
API/Schnittstellen
| Methode | Endpoint | Zweck | CASL |
|---|---|---|---|
GET | /api/vehicles | Liste | view Vehicle |
GET | /api/vehicles/:id | Detail | view Vehicle |
POST | /api/vehicles | Anlegen | create Vehicle |
PATCH | /api/vehicles/:id | Ändern | update Vehicle |
DELETE | /api/vehicles/:id | Soft-Delete | delete Vehicle |
Versionshinweise
- 2026-06-12: Fahrzeugliste hat jetzt ein Rich-Filter-Panel (analog Verkaufsbelege: Kennzeichen, Hersteller, Mitarbeiter, Status, Name); der Status-Filter steht standardmäßig auf
active, sodass archivierte Fahrzeuge ausgeblendet sind (auch in der Mitarbeiter-Fahrzeugliste). Verifiziert anVehicleListPage.tsx. Zugehörig: KM-Foto-KI-Prüfung auf /vehicles-mileages. - 2026-05-20 (Welle 132): Neues Feld
trackMileage(Boolean, Defaulttrue). Beifalsewerden Fahrer-KM-Prompts (Workorder-Start, Tour-Start, Mileage-Log) unterdrückt — Backend-Services prüfen das Flag vor der Prompt-Erzeugung. Bestandsfahrzeuge bleiben auftrue. Quelle: BE7fe94db9+ Migration20260519100001-add-track-mileage-to-vehicles.js, FEe51e5e46(Switch im Vehicle-Form, i18n DE „Km-Tracking" / EN „Mileage Tracking").
Frühere Versionen
- 2026-04-29: Initiale Veroeffentlichung.