Changes for page Fuhrpark (Fleet Manager)
Last modified by Patrizia Gurschka on 2026/09/14 07:51
From version 2.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 7.2
edited by Patrizia Gurschka
on 2026/09/09 13:08
on 2026/09/09 13:08
Change comment:
Auto-saved during real-time collaboration
Summary
-
Page properties (3 modified, 0 added, 0 removed)
-
Attachments (0 modified, 1 added, 0 removed)
Details
- Page properties
-
- Author
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki. drupp1 +XWiki.gurschkap - Tags
-
... ... @@ -1,0 +1,1 @@ 1 +anleitung - Content
-
... ... @@ -1,243 +1,157 @@ 1 - **AblaufFleet Manager:**1 += 🚗 Fuhrpark (Fleet Manager) = 2 2 3 +>**Zweck:** Webbasiertes System zur Verwaltung des Firmenfuhrparks — von Fahrzeug- und Fahrerstammdaten über Kostenkalkulation und Kilometerauswertung bis zu automatisierter Ersatzbeschaffungs-Planung (Handlungsbedarf) und monatlicher Abrechnung. 3 3 4 - **~1.Fahrzeuge verwalten**5 +== Übersicht == 5 5 6 -F ahrzeugewerdenbisjetzteinmal ausRimo importiertunddannin derAppgepflegt. (Geplant:retour schreiben inRimo)7 +Fuhrpark unterstützt den gesamten Lebenszyklus eines Firmenfahrzeugs: Anlage und Zuordnung, laufende Kostenkalkulation, Kilometer-Tracking, Handlungsbedarf/Ersatzbeschaffung bis zur monatlichen Abrechnung und Kostenstellen-Umbuchung. Fahrzeug- und Fahrerstammdaten werden aus dem unternehmensweiten RIMO-System (SQL-Server-DWH) synchronisiert, Kilometerstände automatisiert über GPS-/Tesla-Anbindung und SharePoint importiert. 7 7 9 +Das Projekt wurde von einer Streamlit-Monolith-Anwendung auf eine FastAPI-Backend- + React-Frontend-Architektur umgestellt. 8 8 9 - **Fahrzeuganlegen**11 +== Technologie-Stack == 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 13 +**Frontend:** React 18 · Vite · React Router · React Query (TanStack Query) · Axios · eigene UI-Komponentenbibliothek (kein UI-Framework wie MUI/shadcn) 16 16 15 +**Backend:** FastAPI (Python) · SQLite (WAL-Modus) · Pandas · python-jose (JWT) · passlib/bcrypt · pyodbc (SQL-Server-Anbindung) 17 17 17 +**Externe Anbindungen:** 18 18 19 -**Fahrzeug bearbeiten** 19 +* **RIMO / SQL-Server (ai.sdmperson, rimo.sdmtool):** täglicher Fahrer-/Line-Manager-Sync, Datumsermittlung für Nachkorrekturen 20 +* **Microsoft Fabric:** KM-Formular-E-Mails, SharePoint-Listenabgleich 21 +* **GPS-AT / Tesla:** automatischer Kilometerstand-Import 20 20 21 -* Fahrzeug auswählen 22 -* Änderungen durchführen 23 +== Projektstruktur == 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. 25 +{{{fuhrpark/ 26 +├── _bootstrap.py Gemeinsames Setup für alle Skripte 27 +├── 1_import_users_drivers.py Täglicher Fahrer-/Line-Manager-Sync (Cron) 28 +├── 2_import_vehicles.py Einmaliger Fahrzeug-Erstimport 29 +├── 3_import_vehicle_data.py Manueller Excel-Import (Fahrzeugdaten) 30 +├── 4_import_km_history.py Manueller Excel-Import (KM-Historie) 31 +├── import_km.py KM-Stand-Import (gpsat/tesla/sharepoint) 32 +├── repair_stale_line_manager_assignments.py Einmaliges Reparatur-Skript (Altlasten) 33 +├── docker-compose.yml 34 +├── .env Secrets für Docker (SECRET_KEY, CORS) 35 +├── data/ fleet.db, fleet_demo.db (nicht in Git) 36 +├── abrechnungen/ Export-Ablage (nicht in Git) 37 +├── backend/ 38 +│ ├── Dockerfile 39 +│ ├── .env Secrets für Cron-Skripte (CONN_STR, SP_*, SMTP_*) 40 +│ ├── requirements.txt 41 +│ └── app/ 42 +│ ├── main.py FastAPI-Einstiegspunkt, Hintergrund-Jobs 43 +│ ├── config.py Zentrale Konfiguration (ENV-Variablen) 44 +│ ├── db.py Schema, Migrationen, Indizes 45 +│ ├── auth.py JWT/Passwort-Logik 46 +│ ├── services.py Geschäftslogik (Kalkulation, Zuordnung, ...) 47 +│ └── routers/ vehicles, drivers, users, dashboard, calc_params, auth 48 +└── frontend/ 49 + ├── Dockerfile 50 + ├── nginx.conf Reverse-Proxy zu /api, SPA-Routing 51 + └── src/ 52 + ├── api/ zentraler Axios-Client 53 + ├── context/ AuthContext 54 + ├── components/ VehicleFormModal, DriverFormModal, ui/, ... 55 + └── pages/ Dashboard, Fahrzeuge, Fahrer, KM-Dashboard, ... 56 +}}} 25 25 26 - *Speichern58 +== Hauptfunktionen == 27 27 60 +=== Fahrzeuge verwalten === 28 28 62 +Fahrzeuge werden initial aus RIMO importiert und danach in der App gepflegt (Rückschreiben nach RIMO ist geplant, aktuell nicht implementiert). Anlegen erfordert MAT-ID, Marke und Modell als Pflichtfelder; Fahrer und Line Manager können direkt zugewiesen werden (Line Manager wird bei Fahrer-Auswahl automatisch ergänzt, ist aber weiterhin manuell überschreibbar). Zuordnungen mit befristetem Zeitraum kehren nach Ablauf automatisch zum vorherigen Fahrer zurück — ohne Enddatum bleibt die Zuordnung bestehen, bis sie aktiv geändert wird. Fahrzeuge können auf inaktiv gesetzt (bleiben sichtbar) oder archiviert werden (wandern in die Archiv-Ansicht, von dort reaktivierbar). Ein gesetztes „Deactivation Date" deaktiviert und archiviert das Fahrzeug automatisch zum entsprechenden Datum. Komponenten: FahrzeugePage, VehicleFormModal, VehicleDrawer. 29 29 30 - **Fahrzeugdeaktivieren**64 +=== Fahrer verwalten === 31 31 32 - *in"bearbeiten"kann das Fahrzeugaufinaktivgesetzt werdenundbleibtinderTabelle66 +Fahrer werden täglich um 4:00 Uhr gegen RIMO abgeglichen (Neuanlage bei unbekannter Personalnummer, sonst Aktualisierung von Stammdaten, Kostenstelle und Line Manager). Externe Fahrer können manuell angelegt und bearbeitet werden; Stammdaten interner (per RIMO importierter) Fahrer sind schreibgeschützt. Komponenten: FahrerPage, DriverFormModal. 33 33 68 +=== Kilometer-Daten === 34 34 70 +Kilometerstände werden automatisiert importiert: GPS-AT täglich um 4:00, Tesla montags um 4:00, 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; sobald die Liste vollständig ist, wird sie automatisch übernommen. Berechnet werden Differenzen, Jahreskilometer und aktuelle Laufleistung, einsehbar im KM-Dashboard — inklusive korrekter Zeitraum-Begrenzung bei unterjährigem Fahrer-/Line-Manager-Wechsel. Komponente: KmDashboardPage. 35 35 36 - **Fahrzeugarchivieren**72 +=== Kalkulation === 37 37 38 - *Fahrzeug kannarchiviertwerden,dannwirdes automatischaufinaktivgesetztund in der „archivierte Fahrzeuge“Tabelleangezeigt(dortkanneswiederaktiviertwerden)74 +Pro Fahrzeug wird eine Kostenkalkulation aus Anschaffungskosten, laufenden Kosten (Versicherung, Wartung etc.) sowie Verbrauch und Energiepreisen erstellt. Ergebnis: Kosten pro Monat, Jahr und Kilometer. Beim Anlegen eines Fahrzeugs werden die Default-Parameter aus „Kalkulationsparameter" nach Fahrzeugtyp übernommen; die verbleibenden individuellen Felder werden in „Kalkulation" ergänzt und per „Aktualisieren" neu berechnet. Komponente: KalkulationPage. 39 39 40 - ----76 +=== Handlungsbedarf === 41 41 78 +Hochrechnungen werden bei jedem KM-Stand-Import neu berechnet. Ein neu bestelltes Fahrzeug wird zunächst über das Häkchen „Bestellt" markiert — erst danach kann es im System angelegt werden. Nach Anlage steht die Funktion „Geliefert" zur Verfügung; sobald ein Fahrzeug als geliefert markiert wird, entfällt es automatisch aus der Handlungsbedarfsliste, der Beschaffungsprozess gilt als abgeschlossen. Neu angelegte sowie aus dem Handlungsbedarf stammende Fahrzeuge erscheinen automatisch im Forecast; Ersatzfahrzeuge enthalten dort eine Referenz auf das ursprüngliche (ersetzte) Fahrzeug. Komponente: HandlungsbedarfPage. 42 42 43 - **2.Fahrerverwalten**80 +=== Dashboard === 44 44 45 - FahrerwerdenjedenTagum 4:00 in derFrüh in Rimoüberprüft undwenn notwendigneu angelegtoderbei Veränderungen angepasst.82 +Zentrale Übersicht: Anzahl Fahrzeuge, Kostenübersicht und relevante Kennzahlen zum aktuellen Fuhrparkstatus. Komponente: DashboardPage. 46 46 84 +=== Benutzerverwaltung (Admin) === 47 47 48 - **Fahrer anlegen(extern)**86 +Admins können Benutzer anlegen, Passwörter ändern sowie Fahrer und Fahrzeuge zuweisen. Änderungen an Line Manager und Kostenstelle werden nachvollziehbar protokolliert (driver_attribute_history), sowohl bei manueller Änderung als auch beim täglichen RIMO-Sync. Komponente: BenutzerPage. 49 49 50 -1. Menü **„Fahrer“** öffnen 51 -1. Auf **„Fahrer hinzufügen“** klicken 52 -1. Stammdaten eingeben 53 -1. Speichern 88 +=== Kalkulationsparameter === 54 54 90 +Anpassungen hier wirken sich auf **alle** Fahrzeuge des jeweiligen Typs aus. Dem Controlling vorbehalten (Rollen admin, demo, controlling). Komponente: KalkParamsPage. 55 55 92 +=== Export & Berichte === 56 56 57 - **Fahrer bearbeiten**94 +Monatliche Abrechnungen und Kostenstellen-Umbuchungen werden auf Klick erstellt und als CSV exportiert, zur Weiterverarbeitung in Excel. Gefahrene Kilometer sowie die vollständige Fahrzeugliste (inkl. Kalkulationsaufschlüsselung) können als Excel-Datei heruntergeladen werden. 58 58 59 - *Stammdaten ändern (nur bei extern)96 +== Routing == 60 60 61 ----- 98 +|=Seite|=Beschreibung 99 +|Dashboard|Startseite, zentrale Kennzahlen 100 +|Fahrzeuge|Fahrzeugverwaltung, Zuordnung, Archiv 101 +|Fahrer|Fahrerverwaltung 102 +|KM-Dashboard|Kilometerauswertung, Monatsabrechnung 103 +|Kalkulation|Kostenkalkulation je Fahrzeug 104 +|Handlungsbedarf|Ersatzbeschaffung, Forecast 105 +|Kalkulationsparameter|Typ-Defaults (Controlling) 106 +|Benutzer|Benutzerverwaltung (Admin) 107 +|Login|Anmeldung 62 62 109 +== Datenzugriff == 63 63 64 - **3.Kilometer-Daten**111 +Der Zugriff erfolgt über einen zentralen Axios-Client (api/index.js) in Verbindung mit React Query für Caching, Invalidierung und Hintergrund-Aktualisierung. Jede Seite bindet die für sie relevanten REST-Endpunkte des FastAPI-Backends ein (vehiclesApi, driversApi, usersApi, calcParamsApi). 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. 113 +== Backend == 71 71 115 +**Authentifizierung:** JWT (python-jose), OAuth2-Password-Flow, 8-Stunden-Tokens. Rollen: admin, demo, controlling, Benutzer (Line Manager/Fahrer). Sichtbarkeit von Fahrzeugen/Fahrern für normale Nutzer richtet sich nach Line-Manager-Zuordnung. 72 72 117 +**Datenbank:** SQLite im WAL-Modus. Schema und nicht-destruktive Migrationen in db.py. Änderungen an Fahrzeugen, Fahrern, Kalkulationsparametern und Passwörtern werden inklusive verantwortlicher Person nachvollzogen (updated_by); Zuordnungsänderungen (Fahrzeug↔Fahrer, Fahrer↔Line-Manager/Kostenstelle) führen eine vollständige, zeitlich abgegrenzte Historie (vehicle_assignment_history, driver_attribute_history). 73 73 74 -* Das System berechnet: 75 -** Differenzen 76 -** Jahreskilometer 77 -** aktuelle Laufleistung 119 +**Externe Anbindung:** SQL-Server-Zugriff über pyodbc (CONN_STR) für den täglichen RIMO-Sync sowie Datumsermittlung bei nachträglichen Korrekturen (rimo.sdmtool.last_update). Microsoft-Fabric-Anbindung für KM-Formular-E-Mails und SharePoint-Abgleich. 78 78 121 +== Architektur == 79 79 123 +{{{flowchart TD 124 + A[React Frontend] --> B[React Query / Axios-Client] 125 + B --> C[nginx Reverse-Proxy] 126 + C --> D[FastAPI Backend] 127 + D --> E[(SQLite<br/>fleet.db)] 128 + D --> F[JWT Auth] 80 80 81 -Diese Daten sind im **KM-Dashboard** einsehbar. 130 + G[Cron-Skripte<br/>Projekt-Root] --> E 131 + G --> H[SQL-Server / RIMO<br/>ai.sdmperson, rimo.sdmtool] 132 + G --> I[Microsoft Fabric<br/>SharePoint / KM-Mails] 133 + G --> J[GPS-AT / Tesla APIs] 134 +}}} 82 82 83 ---- -136 +Die Cron-Skripte laufen **unabhängig** von der FastAPI-App direkt auf dem Server (nicht im Docker-Container), schreiben aber in dieselbe fleet.db wie das Backend. 84 84 138 +== Server == 85 85 86 - **4.Kalkulation**140 +Die App läuft auf 192.168.208.2, per Docker Compose (Services backend + frontend), und liegt unter /mnt/data/fleet-manager/fuhrpark. 87 87 88 - Für jedes Fahrzeug kanneineKostenkalkulationdurchgeführt werden:142 +**Deployment bei Codeänderungen** (manuell auf dem Server auszuführen): 89 89 90 - * Anschaffungskosten91 - * LaufendeKosten(Versicherung,Wartungetc.)92 - * Verbrauch & Energiepreise144 +{{{sudo -u www-data git pull 145 +docker compose up -d --build 146 +}}} 93 93 148 +**Cronjobs:** sudo -u www-data crontab -e, Logs unter /mnt/data/fleet-manager/fuhrpark/logs. Enthält u. a. den täglichen Fahrer-Sync (1_import_users_drivers.py) und die KM-Stand-Importe (gpsat/tesla/sharepoint über import_km.py). 94 94 150 +Erreichbar unter [[http:~~/~~/fleetmanager.spl-tele.com:8501>>url:http://fleetmanager.spl-tele.com:8501/]] — mit VPN und im SPL-TELE-Netzwerk. 95 95 96 - Ergebnisse:152 +== Hinweise == 97 97 98 -* Kosten pro Monat 99 -* Kosten pro Jahr 100 -* Kosten pro Kilometer 101 - 102 - 103 - 104 -Wenn ein Fahrzeug hinzugefügt wird, werden die Default Parameter aus „Kalkulationsparameter“ nach Typ übernommen. Die 7 fehlenden Felder werden in „Kalkulation“ bei "bearbeiten" eingetragen und beim auf „Aktualisieren“ Drücken werden die Werte berechnet in die Tabelle eingetragen. 105 - 106 ----- 107 - 108 - 109 -**5. Handlungsbedarf** 110 - 111 -Die Hochrechnungen in Handlungsbedarf werden immer neu berechnet mit den Importen der KM Stände. 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 - 154 +* Änderungen im Demo-Modus werden nicht gespeichert. 155 +* Benutzerrechte bestimmen die Sichtbarkeit der Daten (Line-Manager-Zuordnung). 156 +* Regelmäßige Datenpflege (z. B. Fahrerzuordnung) ist wichtig für korrekte Auswertungen. 157 +* backend/data/ bzw. data/ (Projekt-Root) enthält die produktive Datenbank und ist **nicht** Teil des Git-Repos — ein git pull verändert die Datenbank nie.
- 1776413498048-751.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.drupp - Size
-
... ... @@ -1,0 +1,1 @@ 1 +3.1 KB - Content