Changes for page Fuhrpark (Fleet Manager)
Last modified by Patrizia Gurschka on 2026/09/14 07:51
From version 8.1
edited by Patrizia Gurschka
on 2026/09/10 07:35
on 2026/09/10 07:35
Change comment:
Uploaded new attachment "1789018507266-361.png", version {1}
To version 19.1
edited by Patrizia Gurschka
on 2026/09/14 07:51
on 2026/09/14 07:51
Change comment:
There is no comment for this version
Summary
-
Page properties (1 modified, 0 added, 0 removed)
-
Attachments (0 modified, 2 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -1,180 +1,145 @@ 1 -= 🚗 Fuhrpark (Fleet Manager) = 1 +|((( 2 += **🚗 **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. 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. 4 4 5 - **Auf dieser Seite**9 +{{/info}} 6 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]] 11 + 12 +))) 27 27 28 -== Übersicht == 14 + 15 +)))|((( 16 +|((( 17 +**Auf dieser Seite** 29 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. 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 +))) 31 31 32 -Das Projekt wurde von einer Streamlit-Monolith-Anwendung auf eine FastAPI-Backend- + React-Frontend-Architektur umgestellt. 40 + 41 +))) 33 33 34 -== Technologie-Stack == 35 35 36 -**Frontend:** React 18 · Vite · React Router · React Query (TanStack Query) · Axios · eigene UI-Komponentenbibliothek (kein UI-Framework wie MUI/shadcn) 37 37 38 - **Backend:**FastAPI (Python) · SQLite (WAL-Modus) · Pandas · python-jose (JWT) · passlib/bcrypt · pyodbc (SQL-Server-Anbindung)45 += Überblick = 39 39 40 - **Externe Anbindungen:**47 +Fuhrpark ist eine FastAPI-Backend- + React-Frontend-Anwendung (migriert von einer Streamlit-Monolith-Anwendung). Die Lösung besteht aus: 41 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 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 45 45 46 -= =Projektstruktur ==54 += Architektur = 47 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 -}}} 56 +[[image:1789018507266-361.png]] 80 80 81 - ==Hauptfunktionen==58 +//Frontend, Backend und Datenbank laufen im Docker-Compose-Stack; die Cron-Skripte laufen direkt auf dem Host und schreiben in dieselbe fleet.db.// 82 82 83 -= ==Fahrzeugeverwalten===60 += Technologiestack = 84 84 85 -F ahrzeuge werdeninitial aus RIMO importiert unddanach in der App gepflegt (Rückschreiben nach RIMO istgeplant,aktuellnichtimplementiert).Anlegenerfordert MAT-ID, Marke und Modell als Pflichtfelder;Fahrerund Line Manager können direktzugewiesen werden(LineManager wird bei Fahrer-Auswahl automatisch ergänzt,ist aber weiterhin manuell überschreibbar).Zuordnungen mit befristetem Zeitraum kehrennach 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)oderarchiviert werden (wandern in dieArchiv-Ansicht, von dort reaktivierbar). Ein gesetztes „Deactivation Date" deaktiviert und archiviert das Fahrzeug automatisch zum entsprechenden Datum. Komponenten: FahrzeugePage, VehicleFormModal, VehicleDrawer.62 +**Frontend: **React 18 · Vite · React Router · React Query (TanStack Query) · Axios 86 86 87 - ===Fahrerverwalten===64 +**Backend: **FastAPI (Python) · SQLite · Pandas · python-jose (JWT) · passlib/bcrypt · pyodbc 88 88 89 - Fahrerwerdentäglich um 4:00Uhr gegenRIMOabgeglichen(Neuanlage beiunbekannter Personalnummer,sonstAktualisierung von Stammdaten, KostenstelleundLineManager). ExterneFahrer können manuell angelegt undbearbeitetwerden;Stammdateninterner(per RIMO importierter)Fahrersindschreibgeschützt. Komponenten: FahrerPage, DriverFormModal.66 +**Externe APIs: **RIMO/SQL-Server (ai.sdmperson, rimo.sdmtool) · Microsoft Fabric (SharePoint, KM-Formular-Mails) · GPS-AT- und Tesla-API 90 90 91 -= ==Kilometer-Daten ===68 += Hauptfunktionen = 92 92 93 - Kilometerständewerden 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 derSharePoint-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.70 +== 1. Stammdaten-Import == 94 94 95 - ===Kalkulation===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. 96 96 97 - ProFahrzeug wird eine Kostenkalkulation aus Anschaffungskosten, laufenden Kosten (Versicherung, Wartung etc.)sowie Verbrauch und Energiepreisen erstellt. Ergebnis: Kosten pro Monat, Jahr und Kilometer. Beim Anlegen einesFahrzeugs werden die Default-Parameter aus „Kalkulationsparameter" nachFahrzeugtyp übernommen; die verbleibenden individuellen Felder werden in „Kalkulation" ergänzt undper „Aktualisieren" neuberechnet. Komponente: KalkulationPage.74 +== 2. Fahrzeug-/Fahrer-Zuordnung == 98 98 99 - ===Handlungsbedarf===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. 100 100 101 - Hochrechnungenwerden 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 geliefertmarkiertwird,entfällt es automatisch aus derHandlungsbedarfsliste, der Beschaffungsprozess gilt als abgeschlossen. Neu angelegte sowie aus dem Handlungsbedarf stammende Fahrzeuge erscheinen automatisch im Forecast;Ersatzfahrzeuge enthalten dort eine Referenz auf dasursprüngliche (ersetzte) Fahrzeug. Komponente: HandlungsbedarfPage.78 +== 3. Kilometer-Erfassung == 102 102 103 - ===Dashboard===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. 104 104 105 - ZentraleÜbersicht:Anzahl Fahrzeuge,Kostenübersicht und relevante Kennzahlen zum aktuellen Fuhrparkstatus. Komponente:DashboardPage.82 +== 4. Kalkulation == 106 106 107 - ===Benutzerverwaltung (Admin)===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). 108 108 109 - AdminskönnenBenutzeranlegen, Passwörter ändern sowie Fahrerund 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.86 +== 5. Handlungsbedarf == 110 110 111 - ===Kalkulationsparameter===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. 112 112 113 - Anpassungenhier wirken sich auf **alle** Fahrzeuge des jeweiligen Typs aus.Dem Controlling vorbehalten(Rollenadmin, demo,controlling).Komponente: KalkParamsPage.90 +== 6. Export & Abrechnung == 114 114 115 - ===Export&Berichte===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. 116 116 117 - Monatliche Abrechnungen und Kostenstellen-Umbuchungen werden auf Klick erstellt und als CSV exportiert,zur WeiterverarbeitunginExcel. Gefahrene Kilometersowiedie vollständige Fahrzeugliste (inkl. Kalkulationsaufschlüsselung)können als Excel-Datei heruntergeladen werden.94 += Nachvollziehbarkeit & Fehlerbehandlung = 118 118 119 - ==Routing==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). 120 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 98 +[[image:1789022432806-668.png]] 131 131 132 - ==Datenzugriff ==100 +//Ablauf bei einem Line-Manager-Wechsel, inkl. Absicherung gegen doppelte Sichtbarkeit.// 133 133 134 - DerZugriff erfolgt über einen zentralen Axios-Client(api/index.js)inVerbindung mit React Queryfür Caching, Invalidierung und Hintergrund-Aktualisierung. Jede Seite bindetdie für sie relevanten REST-Endpunkte des FastAPI-Backends ein (vehiclesApi, driversApi, usersApi, calcParamsApi).102 += Cronjobs & Konfiguration = 135 135 136 -== Backend == 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 137 137 138 - **Authentifizierung:**JWT (python-jose), OAuth2-Password-Flow, 8-Stunden-Tokens. Rollen: admin, demo,controlling, Benutzer (Line Manager/Fahrer). Sichtbarkeitvon Fahrzeugen/Fahrern für normale Nutzer richtet sich nach Line-Manager-Zuordnung.113 += Sicherheit = 139 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).115 +Authentifizierung 141 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. 117 +* JWT (python-jose), OAuth2-Password-Flow, 8-Stunden-Tokens 118 +* Rollen: admin, demo, controlling, Benutzer (Line Manager/Fahrer) 119 +* Zugriff auf Fahrzeug-Zuweisungshistorie und rohe KM-Ablesungen ist admin/demo vorbehalten — serverseitig abgesichert (403), nicht nur im Frontend versteckt 143 143 144 - == Architektur ==121 +Datenschutz 145 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] 123 +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). 152 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 -}}} 125 += Besondere Geschäftslogik = 158 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. 127 +* **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“. 128 +* **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. 129 +* **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). 130 +* **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. 160 160 161 -= =Server ==132 += Server / Umgebung = 162 162 163 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 164 165 165 **Deployment bei Codeänderungen** (manuell auf dem Server auszuführen): 166 166 167 -{{{sudo -u www-data git pull 168 -docker compose up -d --build 169 -}}} 138 +sudo -u www-data git pull 170 170 171 - **Cronjobs:** sudo-u www-datacrontab -e, Logs unter/mnt/data/fleet-manager/fuhrpark/logs. Enthält u. a. dentäglichen Fahrer-Sync (1_import_users_drivers.py)unddie KM-Stand-Importe (gpsat/tesla/sharepoint überimport_km.py).140 +docker compose up -d ~-~-build 172 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 174 175 - == Hinweise==143 +**Cronjobs: **sudo -u www-data crontab -e, Logs unter /mnt/data/fleet-manager/fuhrpark/logs. 176 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. 145 +Erreichbar unter http:~/~/fleetmanager.spl-tele.com:8501 — mit VPN und im SPL-TELE-Netzwerk.
- 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