Changes for page Fuhrpark (Fleet Manager)
Last modified by Patrizia Gurschka on 2026/09/14 07:51
From 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
To version 3.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
Summary
-
Page properties (3 modified, 0 added, 0 removed)
Details
- Page properties
-
- Author
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki. gurschkap1 +XWiki.drupp - Tags
-
... ... @@ -1,1 +1,0 @@ 1 -anleitung - Content
-
... ... @@ -1,157 +1,243 @@ 1 - = 🚗 Fuhrpark(Fleet Manager) =1 +**Ablauf 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. 4 4 5 - ==Übersicht==4 +**~1. Fahrzeuge verwalten** 6 6 7 -F uhrpark unterstützt dengesamtenLebenszykluseinesFirmenfahrzeugs:Anlageund Zuordnung, laufende Kostenkalkulation, Kilometer-Tracking,Handlungsbedarf/Ersatzbeschaffungbiszurmonatlichen AbrechnungundKostenstellen-Umbuchung.Fahrzeug- undFahrerstammdaten werdenausdem unternehmensweitenRIMO-System(SQL-Server-DWH)synchronisiert, Kilometerstände automatisiert über GPS-/Tesla-Anbindungund SharePointimportiert.6 +Fahrzeuge werden bis jetzt einmal aus Rimo importiert und dann in der App gepflegt. (Geplant: retour schreiben in Rimo) 8 8 9 -Das Projekt wurde von einer Streamlit-Monolith-Anwendung auf eine FastAPI-Backend- + React-Frontend-Architektur umgestellt. 10 10 11 - == Technologie-Stack ==9 +**Fahrzeug anlegen** 12 12 13 -**Frontend:** React 18 · Vite · React Router · React Query (TanStack Query) · Axios · eigene UI-Komponentenbibliothek (kein UI-Framework wie MUI/shadcn) 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 14 14 15 -**Backend:** FastAPI (Python) · SQLite (WAL-Modus) · Pandas · python-jose (JWT) · passlib/bcrypt · pyodbc (SQL-Server-Anbindung) 16 16 17 -**Externe Anbindungen:** 18 18 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 19 +**Fahrzeug bearbeiten** 22 22 23 -== Projektstruktur == 21 +* Fahrzeug auswählen 22 +* Änderungen durchführen 24 24 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 -}}} 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. 57 57 58 - ==Hauptfunktionen==26 +* Speichern 59 59 60 -=== Fahrzeuge verwalten === 61 61 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. 63 63 64 - ===Fahrerverwalten===30 +**Fahrzeug deaktivieren** 65 65 66 - Fahrerwerden täglich um 4:00 Uhr gegenRIMO abgeglichen (Neuanlagebeiunbekannter Personalnummer,sonst Aktualisierung vonStammdaten, Kostenstelleund Line Manager). ExterneFahrerkönnen manuellangelegtund bearbeitet werden;Stammdateninterner (per RIMO importierter) Fahrer sindschreibgeschützt.Komponenten:FahrerPage,DriverFormModal.32 +* in "bearbeiten" kann das Fahrzeug auf inaktiv gesetzt werden und bleibt in der Tabelle 67 67 68 -=== Kilometer-Daten === 69 69 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. 71 71 72 - === Kalkulation===36 +**Fahrzeug archivieren** 73 73 74 - ProFahrzeugwird eine Kostenkalkulation aus Anschaffungskosten, laufenden Kosten(Versicherung,Wartungetc.) sowieVerbrauch undEnergiepreisenerstellt.Ergebnis: Kosten pro Monat,JahrundKilometer.Beim Anlegeneines Fahrzeugs werden die Default-Parameteraus„Kalkulationsparameter"nachFahrzeugtyp übernommen;die verbleibendenindividuellenFelderwerden in „Kalkulation"ergänztundper„Aktualisieren"neu berechnet. Komponente: KalkulationPage.38 +* Fahrzeug kann archiviert werden, dann wird es automatisch auf inaktiv gesetzt und in der „archivierte Fahrzeuge“ Tabelle angezeigt (dort kann es wieder aktiviert werden) 75 75 76 - === Handlungsbedarf ===40 +---- 77 77 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. 79 79 80 - ===Dashboard===43 +**2. Fahrer verwalten** 81 81 82 - ZentraleÜbersicht:AnzahlFahrzeuge,Kostenübersicht undrelevanteKennzahlenzumaktuellen Fuhrparkstatus.Komponente:DashboardPage.45 +Fahrer werden jeden Tag um 4:00 in der Früh in Rimo überprüft und wenn notwendig neu angelegt oder bei Veränderungen angepasst. 83 83 84 -=== Benutzerverwaltung (Admin) === 85 85 86 - Admins können Benutzer anlegen, Passwörter ändern sowieFahrerund Fahrzeuge zuweisen. Änderungenan Line Manager und Kostenstelle werden nachvollziehbar protokolliert(driver_attribute_history), sowohl bei manueller Änderung als auch beim täglichen RIMO-Sync. Komponente: BenutzerPage.48 +**Fahrer anlegen (extern)** 87 87 88 -=== Kalkulationsparameter === 50 +1. Menü **„Fahrer“** öffnen 51 +1. Auf **„Fahrer hinzufügen“** klicken 52 +1. Stammdaten eingeben 53 +1. Speichern 89 89 90 -Anpassungen hier wirken sich auf **alle** Fahrzeuge des jeweiligen Typs aus. Dem Controlling vorbehalten (Rollen admin, demo, controlling). Komponente: KalkParamsPage. 91 91 92 -=== Export & Berichte === 93 93 94 - Monatliche Abrechnungenund Kostenstellen-Umbuchungen werdenauf 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.57 +**Fahrer bearbeiten** 95 95 96 - ==Routing==59 +* Stammdaten ändern (nur bei extern) 97 97 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 61 +---- 108 108 109 -== Datenzugriff == 110 110 111 - DerZugriff erfolgt über einen zentralen Axios-Client (api/index.js) in Verbindungmit ReactQuery für Caching, Invalidierung und Hintergrund-Aktualisierung. Jede Seitebindet die für sie relevanten REST-Endpunkte des FastAPI-Backends ein (vehiclesApi, driversApi, usersApi, calcParamsApi).64 +**3. Kilometer-Daten** 112 112 113 -== Backend == 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. 114 114 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. 116 116 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). 118 118 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. 74 +* Das System berechnet: 75 +** Differenzen 76 +** Jahreskilometer 77 +** aktuelle Laufleistung 120 120 121 -== Architektur == 122 122 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] 129 129 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 -}}} 81 +Diese Daten sind im **KM-Dashboard** einsehbar. 135 135 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.83 +---- 137 137 138 -== Server == 139 139 140 - Die App läuft auf 192.168.208.2,per Docker Compose (Services backend + frontend),undliegt unter /mnt/data/fleet-manager/fuhrpark.86 +**4. Kalkulation** 141 141 142 - **Deploymentbei Codeänderungen**(manuellaufdem Server auszuführen):88 +Für jedes Fahrzeug kann eine Kostenkalkulation durchgeführt werden: 143 143 144 - {{{sudo-u www-data git pull145 -d ockercompose up-d --build146 - }}}90 +* Anschaffungskosten 91 +* Laufende Kosten (Versicherung, Wartung etc.) 92 +* Verbrauch & Energiepreise 147 147 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). 149 149 150 -Erreichbar unter [[http:~~/~~/fleetmanager.spl-tele.com:8501>>url:http://fleetmanager.spl-tele.com:8501/]] — mit VPN und im SPL-TELE-Netzwerk. 151 151 152 - == Hinweise==96 +Ergebnisse: 153 153 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. 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 +