Wiki source code of Fuhrpark (Fleet Manager)

Version 8.1 by Patrizia Gurschka on 2026/09/10 07:35

Show last authors
1 = đźš— Fuhrpark (Fleet Manager) =
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
5 **Auf dieser Seite**
6
7 * đźš— [[Fuhrpark (Fleet Manager)>>url:https://claude.ai/chat/bbe27d6f-4606-42f0-8e93-34a994469548#-fuhrpark-fleet-manager]]
8 ** [[Ăśbersicht>>url:https://claude.ai/chat/bbe27d6f-4606-42f0-8e93-34a994469548#%C3%BCbersicht]]
9 ** [[Technologie-Stack>>url:https://claude.ai/chat/bbe27d6f-4606-42f0-8e93-34a994469548#technologie-stack]]
10 ** [[Projektstruktur>>url:https://claude.ai/chat/bbe27d6f-4606-42f0-8e93-34a994469548#projektstruktur]]
11 ** [[Hauptfunktionen>>url:https://claude.ai/chat/bbe27d6f-4606-42f0-8e93-34a994469548#hauptfunktionen]]
12 *** [[Fahrzeuge verwalten>>url:https://claude.ai/chat/bbe27d6f-4606-42f0-8e93-34a994469548#fahrzeuge-verwalten]]
13 *** [[Fahrer verwalten>>url:https://claude.ai/chat/bbe27d6f-4606-42f0-8e93-34a994469548#fahrer-verwalten]]
14 *** [[Kilometer-Daten>>url:https://claude.ai/chat/bbe27d6f-4606-42f0-8e93-34a994469548#kilometer-daten]]
15 *** [[Kalkulation>>url:https://claude.ai/chat/bbe27d6f-4606-42f0-8e93-34a994469548#kalkulation]]
16 *** [[Handlungsbedarf>>url:https://claude.ai/chat/bbe27d6f-4606-42f0-8e93-34a994469548#handlungsbedarf]]
17 *** [[Dashboard>>url:https://claude.ai/chat/bbe27d6f-4606-42f0-8e93-34a994469548#dashboard]]
18 *** [[Benutzerverwaltung (Admin)>>url:https://claude.ai/chat/bbe27d6f-4606-42f0-8e93-34a994469548#benutzerverwaltung-admin]]
19 *** [[Kalkulationsparameter>>url:https://claude.ai/chat/bbe27d6f-4606-42f0-8e93-34a994469548#kalkulationsparameter]]
20 *** [[Export & Berichte>>url:https://claude.ai/chat/bbe27d6f-4606-42f0-8e93-34a994469548#export--berichte]]
21 ** [[Routing>>url:https://claude.ai/chat/bbe27d6f-4606-42f0-8e93-34a994469548#routing]]
22 ** [[Datenzugriff>>url:https://claude.ai/chat/bbe27d6f-4606-42f0-8e93-34a994469548#datenzugriff]]
23 ** [[Backend>>url:https://claude.ai/chat/bbe27d6f-4606-42f0-8e93-34a994469548#backend]]
24 ** [[Architektur>>url:https://claude.ai/chat/bbe27d6f-4606-42f0-8e93-34a994469548#architektur]]
25 ** [[Server>>url:https://claude.ai/chat/bbe27d6f-4606-42f0-8e93-34a994469548#server]]
26 ** [[Hinweise>>url:https://claude.ai/chat/bbe27d6f-4606-42f0-8e93-34a994469548#hinweise]]
27
28 == Ăśbersicht ==
29
30 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.
31
32 Das Projekt wurde von einer Streamlit-Monolith-Anwendung auf eine FastAPI-Backend- + React-Frontend-Architektur umgestellt.
33
34 == Technologie-Stack ==
35
36 **Frontend:** React 18 · Vite · React Router · React Query (TanStack Query) · Axios · eigene UI-Komponentenbibliothek (kein UI-Framework wie MUI/shadcn)
37
38 **Backend:** FastAPI (Python) · SQLite (WAL-Modus) · Pandas · python-jose (JWT) · passlib/bcrypt · pyodbc (SQL-Server-Anbindung)
39
40 **Externe Anbindungen:**
41
42 * **RIMO / SQL-Server (ai.sdmperson, rimo.sdmtool):** täglicher Fahrer-/Line-Manager-Sync, Datumsermittlung für Nachkorrekturen
43 * **Microsoft Fabric:** KM-Formular-E-Mails, SharePoint-Listenabgleich
44 * **GPS-AT / Tesla:** automatischer Kilometerstand-Import
45
46 == Projektstruktur ==
47
48 {{{fuhrpark/
49 ├── _bootstrap.py Gemeinsames Setup für alle Skripte
50 ├── 1_import_users_drivers.py Täglicher Fahrer-/Line-Manager-Sync (Cron)
51 ├── 2_import_vehicles.py Einmaliger Fahrzeug-Erstimport
52 ├── 3_import_vehicle_data.py Manueller Excel-Import (Fahrzeugdaten)
53 ├── 4_import_km_history.py Manueller Excel-Import (KM-Historie)
54 ├── import_km.py KM-Stand-Import (gpsat/tesla/sharepoint)
55 ├── repair_stale_line_manager_assignments.py Einmaliges Reparatur-Skript (Altlasten)
56 ├── docker-compose.yml
57 ├── .env Secrets für Docker (SECRET_KEY, CORS)
58 ├── data/ fleet.db, fleet_demo.db (nicht in Git)
59 ├── abrechnungen/ Export-Ablage (nicht in Git)
60 ├── backend/
61 │ ├── Dockerfile
62 │ ├── .env Secrets für Cron-Skripte (CONN_STR, SP_*, SMTP_*)
63 │ ├── requirements.txt
64 │ └── app/
65 │ ├── main.py FastAPI-Einstiegspunkt, Hintergrund-Jobs
66 │ ├── config.py Zentrale Konfiguration (ENV-Variablen)
67 │ ├── db.py Schema, Migrationen, Indizes
68 │ ├── auth.py JWT/Passwort-Logik
69 │ ├── services.py Geschäftslogik (Kalkulation, Zuordnung, ...)
70 │ └── routers/ vehicles, drivers, users, dashboard, calc_params, auth
71 └── frontend/
72 ├── Dockerfile
73 ├── nginx.conf Reverse-Proxy zu /api, SPA-Routing
74 └── src/
75 ├── api/ zentraler Axios-Client
76 ├── context/ AuthContext
77 ├── components/ VehicleFormModal, DriverFormModal, ui/, ...
78 └── pages/ Dashboard, Fahrzeuge, Fahrer, KM-Dashboard, ...
79 }}}
80
81 == Hauptfunktionen ==
82
83 === Fahrzeuge verwalten ===
84
85 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.
86
87 === Fahrer verwalten ===
88
89 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.
90
91 === Kilometer-Daten ===
92
93 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.
94
95 === Kalkulation ===
96
97 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.
98
99 === Handlungsbedarf ===
100
101 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.
102
103 === Dashboard ===
104
105 Zentrale Ăśbersicht: Anzahl Fahrzeuge, KostenĂĽbersicht und relevante Kennzahlen zum aktuellen Fuhrparkstatus. Komponente: DashboardPage.
106
107 === Benutzerverwaltung (Admin) ===
108
109 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.
110
111 === Kalkulationsparameter ===
112
113 Anpassungen hier wirken sich auf **alle** Fahrzeuge des jeweiligen Typs aus. Dem Controlling vorbehalten (Rollen admin, demo, controlling). Komponente: KalkParamsPage.
114
115 === Export & Berichte ===
116
117 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.
118
119 == Routing ==
120
121 |=Seite|=Beschreibung
122 |Dashboard|Startseite, zentrale Kennzahlen
123 |Fahrzeuge|Fahrzeugverwaltung, Zuordnung, Archiv
124 |Fahrer|Fahrerverwaltung
125 |KM-Dashboard|Kilometerauswertung, Monatsabrechnung
126 |Kalkulation|Kostenkalkulation je Fahrzeug
127 |Handlungsbedarf|Ersatzbeschaffung, Forecast
128 |Kalkulationsparameter|Typ-Defaults (Controlling)
129 |Benutzer|Benutzerverwaltung (Admin)
130 |Login|Anmeldung
131
132 == Datenzugriff ==
133
134 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).
135
136 == Backend ==
137
138 **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.
139
140 **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).
141
142 **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.
143
144 == Architektur ==
145
146 {{{flowchart TD
147 A[React Frontend] --> B[React Query / Axios-Client]
148 B --> C[nginx Reverse-Proxy]
149 C --> D[FastAPI Backend]
150 D --> E[(SQLite<br/>fleet.db)]
151 D --> F[JWT Auth]
152
153 G[Cron-Skripte<br/>Projekt-Root] --> E
154 G --> H[SQL-Server / RIMO<br/>ai.sdmperson, rimo.sdmtool]
155 G --> I[Microsoft Fabric<br/>SharePoint / KM-Mails]
156 G --> J[GPS-AT / Tesla APIs]
157 }}}
158
159 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.
160
161 == Server ==
162
163 Die App läuft auf 192.168.208.2, per Docker Compose (Services backend + frontend), und liegt unter /mnt/data/fleet-manager/fuhrpark.
164
165 **Deployment bei Codeänderungen** (manuell auf dem Server auszuführen):
166
167 {{{sudo -u www-data git pull
168 docker compose up -d --build
169 }}}
170
171 **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).
172
173 Erreichbar unter [[http:~~/~~/fleetmanager.spl-tele.com:8501>>url:http://fleetmanager.spl-tele.com:8501/]] — mit VPN und im SPL-TELE-Netzwerk.
174
175 == Hinweise ==
176
177 * Änderungen im Demo-Modus werden nicht gespeichert.
178 * Benutzerrechte bestimmen die Sichtbarkeit der Daten (Line-Manager-Zuordnung).
179 * Regelmäßige Datenpflege (z. B. Fahrerzuordnung) ist wichtig für korrekte Auswertungen.
180 * 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.