Changes for page Fuhrpark (Fleet Manager)
Last modified by Patrizia Gurschka on 2026/09/14 07:51
From version 4.1
edited by Dimitri Rupp
on 2026/06/11 11:00
on 2026/06/11 11:00
Change comment:
There is no comment for this version
To version 16.1
edited by Patrizia Gurschka
on 2026/09/10 08:40
on 2026/09/10 08:40
Change comment:
There is no comment for this version
Summary
-
Page properties (2 modified, 0 added, 0 removed)
-
Attachments (0 modified, 3 added, 0 removed)
Details
- Page properties
-
- Author
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki. drupp1 +XWiki.gurschkap - Content
-
... ... @@ -1,243 +1,158 @@ 1 -**Ablauf Fleet Manager:** 1 +|((( 2 += **🚗 **Fuhrpark (Fleet Manager) = 2 2 4 +|((( 5 +{{info}} 6 +**Zweck: **Webbasierte Verwaltung des Firmenfuhrparks — Fahrzeug-/Fahrerstammdaten, Kostenkalkulation, Kilometerauswertung, Ersatzbeschaffungs-Planung (Handlungsbedarf) und monatliche Abrechnung. 7 +**Zielgruppe: **Fuhrpark-/Controlling-Team, Line Manager, IT-Betrieb. 3 3 4 - **~1. Fahrzeuge verwalten**9 +{{/info}} 5 5 6 -Fahrzeuge werden bis jetzt einmal aus Rimo importiert und dann in der App gepflegt. (Geplant: retour schreiben in Rimo) 11 + 12 +))) 7 7 14 + 15 +)))|((( 16 +|((( 17 +**Auf dieser Seite** 8 8 9 -**Fahrzeug anlegen** 19 +* [[🚗 Fuhrpark (Fleet Manager)>>path:#top]] 20 +** [[Überblick>>path:#ueberblick]] 21 +** [[Architektur>>path:#architektur]] 22 +** [[Technologiestack>>path:#technologiestack]] 23 +** [[Hauptfunktionen>>path:#hauptfunktionen]] 24 +*** [[1. Stammdaten-Import>>path:#hf1]] 25 +*** [[2. Fahrzeug-/Fahrer-Zuordnung>>path:#hf2]] 26 +*** [[3. Kilometer-Erfassung>>path:#hf3]] 27 +*** [[4. Kalkulation>>path:#hf4]] 28 +*** [[5. Handlungsbedarf>>path:#hf5]] 29 +*** [[6. Export & Abrechnung>>path:#hf6]] 30 +** [[Nachvollziehbarkeit & Fehlerbehandlung>>path:#orch]] 31 +** [[Cronjobs & Konfiguration>>path:#konfiguration]] 32 +** [[Sicherheit>>path:#sicherheit]] 33 +*** [[Authentifizierung>>path:#auth]] 34 +*** [[Datenschutz>>path:#datenschutz]] 35 +** [[Besondere Geschäftslogik>>path:#geschaeftslogik]] 36 +** [[Offene Punkte / zu verifizieren>>path:#offene-punkte]] 37 +** [[Server / Umgebung>>path:#server]] 38 +))) 10 10 11 -1. Menü **„Fahrzeuge“** öffnen 12 -1. Auf **„Fahrzeug hinzufügen“** klicken 13 -1. Pflichtfelder ausfüllen (MAT-ID, Marke, Modell verpflichtend) 14 -1. Fahrer und Line Manager (wird automatisch ergänzt, kann dennoch selbst ausgewählt werden) auswählen 15 -1. Speichern 40 + 41 +))) 16 16 17 17 18 18 19 - **Fahrzeugbearbeiten**45 += Überblick = 20 20 21 -* Fahrzeug auswählen 22 -* Änderungen durchführen 47 +Fuhrpark ist eine FastAPI-Backend- + React-Frontend-Anwendung (migriert von einer Streamlit-Monolith-Anwendung). Die Lösung besteht aus: 23 23 24 -Wenn ein Fahrer nur für einen Zeitraum zugewiesen wird, wird nach diesem Zeitraum wieder der Ursprungsfahrer eingetragen. Wenn kein Enddatum eingetragen wird, bleibt der Fahrer bis etwas geändert wird. 49 +* Frontend: React 18 · Vite · React Query · Axios-Client (nginx-Reverse-Proxy) 50 +* Backend: FastAPI · SQLite (WAL-Modus) · JWT-Authentifizierung 51 +* Datenquellen: RIMO/SQL-Server (Fahrer-Stammdaten) · Microsoft Fabric (SharePoint, KM-Formular-Mails) · GPS-AT/Tesla-APIs (Kilometerstände) 52 +* Orchestrierung: eigenständige Cron-Skripte auf dem Server, unabhängig vom Docker-Container 25 25 26 - *Speichern54 += Architektur = 27 27 56 +[[image:1789018507266-361.png]] 28 28 58 +//Frontend, Backend und Datenbank laufen im Docker-Compose-Stack; die Cron-Skripte laufen direkt auf dem Host und schreiben in dieselbe fleet.db.// 29 29 30 - **Fahrzeugdeaktivieren**60 += Technologiestack = 31 31 32 -* in "bearbeiten" kanndasFahrzeugaufinaktivgesetztwerdenundbleibtin der Tabelle62 +**Frontend: **React 18 · Vite · React Router · React Query (TanStack Query) · Axios 33 33 64 +**Backend: **FastAPI (Python) · SQLite · Pandas · python-jose (JWT) · passlib/bcrypt · pyodbc 34 34 66 +**Externe APIs: **RIMO/SQL-Server (ai.sdmperson, rimo.sdmtool) · Microsoft Fabric (SharePoint, KM-Formular-Mails) · GPS-AT- und Tesla-API 35 35 36 - **Fahrzeugarchivieren**68 += Hauptfunktionen = 37 37 38 - *Fahrzeug kann archiviertwerden, dann wird es automatisch auf inaktiv gesetzt undin der „archivierteFahrzeuge“ Tabelle angezeigt (dortkann es wieder aktiviert werden)70 +~1. Stammdaten-Import 39 39 40 -- ---72 +Fahrzeuge werden initial aus RIMO importiert und danach in der App gepflegt (Rückschreiben nach RIMO ist geplant, aktuell nicht implementiert). Fahrer werden täglich um 4:00 Uhr gegen RIMO (ai.sdmperson) abgeglichen — Neuanlage bei unbekannter Personalnummer, sonst Aktualisierung von Stammdaten, Kostenstelle und Line Manager. Externe Fahrer können zusätzlich manuell angelegt werden; Stammdaten interner (RIMO-importierter) Fahrer sind schreibgeschützt. 41 41 74 +2. Fahrzeug-/Fahrer-Zuordnung 42 42 43 - **2. Fahrer verwalten**76 +Fahrer und Line Manager können einem Fahrzeug direkt zugewiesen werden (Line Manager wird bei Fahrer-Auswahl automatisch ergänzt, bleibt aber überschreibbar). Befristete Zuordnungen kehren nach Ablauf automatisch zum vorherigen Fahrer zurück. Jede Zuordnungs- sowie Line-Manager-/Kostenstellen-Änderung wird vollständig und zeitlich abgegrenzt protokolliert (vehicle_assignment_history, driver_attribute_history) — sowohl bei manueller Änderung als auch beim täglichen RIMO-Sync. 44 44 45 - Fahrerwerden jeden Tag um 4:00in der Früh in Rimoüberprüftund wenn notwendig neu angelegt oderbei Veränderungenangepasst.78 +3. Kilometer-Erfassung 46 46 80 +Kilometerstände werden automatisiert importiert: GPS-AT täglich, Tesla wöchentlich, jeweils zum Monatsende. Für Fahrzeuge ohne automatische Anbindung wird 3 Tage vor Monatsende täglich eine Erinnerungsmail verschickt, bis ein Wert in der SharePoint-Liste eingetragen ist. Das KM-Dashboard berücksichtigt bei der Auswertung ausschließlich den Zeitraum, in dem die jeweilige Zuordnung tatsächlich bestand — auch bei unterjährigem Fahrer- oder Line-Manager-Wechsel. 47 47 48 - **Fahreranlegen (extern)**82 +4. Kalkulation 49 49 50 -1. Menü **„Fahrer“** öffnen 51 -1. Auf **„Fahrer hinzufügen“** klicken 52 -1. Stammdaten eingeben 53 -1. Speichern 84 +Pro Fahrzeug wird eine Kostenkalkulation aus Anschaffungskosten, laufenden Kosten und Verbrauch/Energiepreisen erstellt (Kosten pro Monat/Jahr/Kilometer). Beim Anlegen werden Default-Parameter aus „Kalkulationsparameter“ nach Fahrzeugtyp übernommen; individuelle Felder werden ergänzt und per „Aktualisieren“ neu berechnet. Änderungen an Kalkulationsparametern wirken sich auf alle Fahrzeuge des jeweiligen Typs aus (Rollen admin/demo/controlling). 54 54 86 +5. Handlungsbedarf 55 55 88 +Hochrechnungen werden bei jedem KM-Stand-Import neu berechnet. Ein bestelltes Fahrzeug wird über das Häkchen „Bestellt“ markiert, erst danach anlegbar. Nach Anlage steht „Geliefert“ zur Verfügung; sobald gesetzt, entfällt das Fahrzeug automatisch aus der Handlungsbedarfsliste. Ein gesetztes „Deactivation Date“ deaktiviert und archiviert ein Fahrzeug automatisch zum entsprechenden Datum. 56 56 57 - **Fahrerbearbeiten**90 +6. Export & Abrechnung 58 58 59 - *Stammdaten ändern(nurbei extern)92 +Monatliche Abrechnungen und Kostenstellen-Umbuchungen werden auf Klick erstellt und als CSV exportiert. Die vollständige Fahrzeugliste (inkl. kompletter Kalkulationsaufschlüsselung) sowie gefahrene Kilometer können als Excel-Datei heruntergeladen werden. 60 60 61 - ----94 += Nachvollziehbarkeit & Fehlerbehandlung = 62 62 96 +Ändert sich der Line Manager eines Fahrers — manuell oder über den täglichen Cron-Sync — wird nicht nur drivers.user_id aktualisiert, sondern auch jede betroffene vehicle_assignment_history-Zeile korrekt geschlossen und neu angelegt. Ohne diesen Schritt bliebe ein Fahrzeug fälschlich sowohl beim alten als auch beim neuen Line Manager sichtbar (historisch aufgetretener Fehler, mittlerweile behoben und mit einem Reparatur-Skript für Altfälle nachgezogen). 63 63 64 - **3. Kilometer-Daten**98 +[[image:1789022432806-668.png]] 65 65 66 -* Kilometerstände werden automatisch importiert (z. B. GPS / Tesla) 67 -** gpsat täglich um 4:00 68 -** tesla montags 4:00 69 -** beides jeweils Ende des Monats 70 -** Erinnerungsmail wird 3 Tage von Ende des Monats täglich ausgeschickt, wenn kein KM Stand in der Sharepoint Liste vorhanden ist. Sobald die Liste vollständig ist, wird sie auf die App übertragen. 100 +//Ablauf bei einem Line-Manager-Wechsel, inkl. Absicherung gegen doppelte Sichtbarkeit.// 71 71 102 += Cronjobs & Konfiguration = 72 72 104 +|**Bereich**|**Details** 105 +|Täglicher Fahrer-Sync|1_import_users_drivers.py, 4:00 Uhr — Fahrer-Stammdaten, Line Manager, Kostenstelle gegen RIMO (ai.sdmperson) abgleichen 106 +|KM-Import gpsat|import_km.py gpsat, täglich 4:00 Uhr, jeweils zum Monatsende 107 +|KM-Import Tesla|import_km.py tesla, montags 4:00 Uhr, jeweils zum Monatsende 108 +|SharePoint-Erinnerung|3 Tage vor Monatsende täglich, wenn kein KM-Stand in der SharePoint-Liste vorhanden ist 109 +|Docker Compose|Services backend (FastAPI) + frontend (nginx + React-Build) 110 +|Datenbank|SQLite, WAL-Modus, data/fleet.db (Projekt-Root, nicht in Git) 111 +|Reparatur-Skript|repair_stale_line_manager_assignments.py — einmalig, bei Altlasten vor dem Line-Manager-Fix 73 73 74 -* Das System berechnet: 75 -** Differenzen 76 -** Jahreskilometer 77 -** aktuelle Laufleistung 78 78 79 79 115 += Sicherheit = 80 80 81 - Diese Datensindim **KM-Dashboard** einsehbar.117 +Authentifizierung 82 82 83 ----- 119 +* JWT (python-jose), OAuth2-Password-Flow, 8-Stunden-Tokens 120 +* Rollen: admin, demo, controlling, Benutzer (Line Manager/Fahrer) 121 +* Zugriff auf Fahrzeug-Zuweisungshistorie und rohe KM-Ablesungen ist admin/demo vorbehalten — serverseitig abgesichert (403), nicht nur im Frontend versteckt 84 84 123 +Datenschutz 85 85 86 - **4.Kalkulation**125 +Sichtbarkeit von Fahrzeugen und Fahrern für normale Nutzer richtet sich ausschließlich nach der Line-Manager-Zuordnung. Passwörter sowie SQL-Server-/Fabric-Zugangsdaten liegen in nicht versionierten .env-Dateien (Docker-.env für Secrets der App, backend/.env für die Cron-Skripte). 87 87 88 - Fürjedes Fahrzeugkanneine Kostenkalkulation durchgeführtwerden:127 += Besondere Geschäftslogik = 89 89 90 -* Anschaffungskosten 91 -* Laufende Kosten (Versicherung, Wartung etc.) 92 -* Verbrauch & Energiepreise 129 +* **Zeitzonen-Korrektur: **sync_vehicle_assignment() vergleicht mit datetime('now','localtime') statt datetime('now') — SQLite liefert sonst UTC, während alle gespeicherten Zeitstempel lokale Zeit sind. Ohne die Korrektur blieb eine gerade beendete Zuordnung bis zu 1–2 Stunden fälschlich „aktiv“. 130 +* **Import-Marker: **Historienzeilen aus der einmaligen Erstbefüllung (changed_by='import') zeigen in der Zuordnungs-Anzeige bewusst kein Startdatum („– 20.04.2026“ statt „28.02.2026 – 20.04.2026“), da dieses Datum nur den Zeitpunkt des Imports, nicht den echten historischen Beginn widerspiegelt. 131 +* **Odometer vs. Jahreskilometer: **vehicles.current_km speichert die im laufenden Kalenderjahr gefahrenen Kilometer (Vergleichswert zu „Max. KM/Jahr“), nicht den tatsächlichen Tacho-Stand. Für die Anzeige des echten Kilometerstands wird stattdessen die letzte Ablesung aus der KM-Historie herangezogen (latest_odometer_km). 132 +* **Zuordnungsende “heute“: **Wird als Enddatum das aktuelle Datum gewählt, wird als Enddatum bewusst der Vortag (23:59:59) gespeichert — damit gilt die Zuordnung ab exakt Mitternacht des gewählten Tages als beendet, ohne Sekundenpräzision oder Sonderfall im Code. 93 93 134 +|((( 135 +**⚠️ Offene Punkte / zu verifizieren** 94 94 137 +* Flottenweite Reaktivierung in apply_due_deactivations(): Die automatische Reaktivierung („kein Deactivation Date mehr“) wirkt aktuell auf ALLE Fahrzeuge mit deactivation_date=NULL, nicht nur auf das gerade bearbeitete — kann manuell archivierte Fahrzeuge versehentlich mit reaktivieren. Fix identifiziert (Reaktivierung auf die eine Fahrzeug-ID scopen), Umsetzung noch ausständig. 138 +* Genaues Schema von rimo.sdmtool (Spaltennamen name/last_update) ist aus einer Beschreibung übernommen, nicht 1:1 gegen die echte Tabelle verifiziert. 139 +* Kein bestätigtes automatisches Backup der Produktivdatenbank gefunden — falls vorhanden, läuft es außerhalb des Anwendungscodes; sollte auf dem Server verifiziert werden. 140 +* Exakte SharePoint-/Fabric-Spaltennamen (SP_LIST_ITEMS_URL u. Ä.) sollten einmalig gegen die reale Liste geprüft werden. 141 +))) 95 95 96 -Ergebnisse: 97 97 98 -* Kosten pro Monat 99 -* Kosten pro Jahr 100 -* Kosten pro Kilometer 101 101 145 += Server / Umgebung = 102 102 147 +Die App läuft auf 192.168.208.2, per Docker Compose (Services backend + frontend), und liegt unter /mnt/data/fleet-manager/fuhrpark. 103 103 104 - Wenn ein Fahrzeug hinzugefügt wird, werden dieDefault Parameter aus „Kalkulationsparameter“nach Typ übernommen. Die7 fehlendenFelderwerden in „Kalkulation“ bei "bearbeiten"eingetragenund beimauf„Aktualisieren“ Drücken werdendieWerteberechnetin die Tabelle eingetragen.149 +**Deployment bei Codeänderungen** (manuell auf dem Server auszuführen): 105 105 106 --- --151 +sudo -u www-data git pull 107 107 153 +docker compose up -d ~-~-build 108 108 109 -**5. Handlungsbedarf** 110 110 111 - Die HochrechnungeninHandlungsbedarfwerdenimmerneuberechnet mitden Importen der KM Stände.156 +**Cronjobs: **sudo -u www-data crontab -e, Logs unter /mnt/data/fleet-manager/fuhrpark/logs. 112 112 113 - 114 -**Neues Fahrzeug bestellen** 115 - 116 -* Wenn neues Fahrzeug bestellt wurde, muss im Bereich „Handlungsbedarf“ das Häkchen bei „Bestellt“ gesetzt werden. 117 -* Erst danach ist es möglich, ein neues Fahrzeug im System anzulegen. 118 - 119 - 120 - 121 -**Neues Fahrzeug anlegen** 122 - 123 -* Ein Fahrzeug kann erst bearbeitet werden, nachdem es angelegt wurde 124 -* Nach der Anlage steht die Funktion „Geliefert“ zur Verfügung 125 - 126 - 127 - 128 -**Fahrzeug als geliefert markieren** 129 - 130 -* Sobald ein Fahrzeug als „geliefert“ markiert wird: 131 -** wird es automatisch aus der Handlungsbedarfsliste entfernt 132 -** gilt der Beschaffungsprozess als abgeschlossen 133 - 134 - 135 - 136 -**Darstellung im Forecast** 137 - 138 -* Neu hinzugefügte Fahrzeuge (Bereich „Fahrzeuge“) 139 -* sowie im Handlungsbedarf angelegte Fahrzeuge 140 - 141 -werden automatisch im Bereich „Forecast“ angezeigt. 142 - 143 -Zusätzlich gilt: 144 - 145 -* Fahrzeuge aus dem Handlungsbedarf enthalten im Forecast eine 146 -Referenz zum alten (ersetzten) Fahrzeug 147 - 148 - 149 - 150 -**Deaktivierung von Fahrzeugen** 151 - 152 -Wenn im Feld „Deactivation Date“ ein Datum eingetragen wird: 153 - 154 -wird das Fahrzeug ab diesem Datum automatisch: 155 - 156 -* deaktiviert 157 -* in den Bereich „Archivierte Fahrzeuge**“** verschoben 158 - 159 ----- 160 - 161 - 162 -**6. Dashboard** 163 - 164 -Das Dashboard zeigt: 165 - 166 -* Anzahl Fahrzeuge 167 -* Kostenübersicht 168 -* relevante Kennzahlen 169 - 170 -Es dient als zentrale Übersicht für den aktuellen Fuhrparkstatus. 171 - 172 ----- 173 - 174 - 175 -**7. Benutzerverwaltung (Admin)** 176 - 177 -Admins können: 178 - 179 -* Benutzer anlegen 180 -* Passwörter ändern 181 -* Fahrer und Fahrzeuge zuweisen 182 - 183 ----- 184 - 185 - 186 -**8. Kalkulationsparameter** 187 - 188 -Wenn hier etwas angepasst wird, werden die Werte für alle Fahrzeuge dieses Typs abgeändert. 189 - 190 ----- 191 - 192 - 193 -**9. Export & Berichte** 194 - 195 -* Monatliche Abrechnungen werden automatisch erstellt 196 -* Export erfolgt als CSV-Datei 197 -* Daten können in Excel weiterverarbeitet werden 198 - 199 ----- 200 - 201 - 202 -**10. Hinweise** 203 - 204 -* Änderungen im Demo-Modus werden nicht gespeichert 205 -* Benutzerrechte bestimmen die Sichtbarkeit der Daten 206 -* Regelmäßige Datenpflege (z. B. Fahrerzuordnung) ist wichtig für korrekte Auswertungen 207 - 208 - 209 - 210 - 211 -**Fehlerbehebung** 212 - 213 -* **Frontend:** Streamlit 214 -* **Backend:** Python 215 -* **Datenbank:** SQLite 216 -* **Externe APIs:** Microsoft Fabric Integration 217 - 218 -Die App läuft auf 192.168.208.2, in einem Docker und liegt in: /mnt/data/fleet-manager/fuhrpark. 219 - 220 -Falls etwas in Github geändert wird muss der git pull manuell auf dem Server passieren: 221 - 222 -* sudo chown -R $USER:$USER /mnt/data/fleet-manager/fuhrpark 223 -* git pull 224 -* sudo chown -R www-data:www-data /mnt/data/fleet-manager/fuhrpark 225 -* docker compose up -d ~-~-build 226 - 227 -Es gibt cronjobs in crontab -e, mit logs in /mnt/data/fleet-manager/fuhrpark/logs. 228 - 229 ----- 230 - 231 -== Verwandte Themen == 232 - 233 -//Kuratiert — kann direkt im Editor ergänzt werden:// 234 - 235 -* [[ABK (Ausschreibungssoftware)>>doc:IT-Wiki.02-Tools.ABK.WebHome]] 236 -* [[UiPath>>doc:IT-Wiki.02-Tools.UiPath.WebHome]] 237 -* [[Microsoft Intune>>doc:IT-Wiki.02-Tools.Intune.WebHome]] 238 - 239 -{{include reference="IT-Wiki.Makros.Verwandte-Themen.WebHome"/}} 240 - 241 ----- 242 -**Status:** Migriert — Team-Review ausstehend · **Owner:** //(festlegen)// · **Letzter Review:** 2026-06-11 243 - 158 +Erreichbar unter http:~/~/fleetmanager.spl-tele.com:8501 — mit VPN und im SPL-TELE-Netzwerk.
- 1789018507266-361.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.gurschkap - Size
-
... ... @@ -1,0 +1,1 @@ 1 +52.2 KB - Content
- 1789018507268-395.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.gurschkap - Size
-
... ... @@ -1,0 +1,1 @@ 1 +19.7 KB - Content
- 1789022432806-668.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.gurschkap - Size
-
... ... @@ -1,0 +1,1 @@ 1 +55.3 KB - Content