Files
assetsTracker/docs/VERKAUF_UEBERSICHT.md
2026-04-07 17:12:32 +02:00

618 lines
26 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# DefektTrack — Produkt- und Infrastruktur-Dokumentation
> **Digitale Defekt- und Asset-Verwaltung für Unternehmen mit mehreren Filialen.**
> Echtzeit-Tracking defekter Ware, rollenbasierte Dashboards und transparente Auswertungen — alles in einer Anwendung.
---
## Inhaltsverzeichnis
1. [Produktübersicht](#1-produktübersicht)
2. [Architektur & Tech-Stack](#2-architektur--tech-stack)
3. [Datenmodell](#3-datenmodell)
4. [Rollenkonzept](#4-rollenkonzept--berechtigungsmatrix)
5. [Asset-Tracker — Liste & Filter](#5-asset-tracker--liste--filter)
6. [Admin-Panel](#6-admin-panel)
7. [Filialleiter-Dashboard](#7-filialleiter-dashboard)
8. [Firmenleiter-Dashboard](#8-firmenleiter-dashboard)
9. [Sicherheitskonzept](#9-sicherheitskonzept)
10. [Navigationsfluss](#10-navigationsfluss)
---
## 1. Produktübersicht
**DefektTrack** ist eine webbasierte Anwendung zur lückenlosen Erfassung, Verfolgung und Auswertung defekter Ware über mehrere Filialen hinweg.
### Welches Problem löst DefektTrack?
| Problem | Lösung |
|---------|--------|
| Defekte Ware wird auf Papier oder in Excel erfasst — unübersichtlich, fehleranfällig, nicht zentral | Zentrale Web-App mit Echtzeit-Synchronisation |
| Keine Transparenz über Standorte hinweg | Firmenweite Dashboards mit Filialvergleich |
| Zuständigkeiten unklar, Aufgaben gehen unter | Zuständigkeits-Zuweisung + Überfälligkeits-Tracking mit 7-Tage-Frist |
| Filialleiter haben keinen Überblick über Team-Performance | Mitarbeiter-Erledigungsraten + Trend-Analysen |
| Firmenleitung sieht keine Gesamtzahlen | Globales Dashboard mit KPIs und Filialvergleich |
### Kernfunktionen auf einen Blick
- Defekt-Erfassung mit ERL-Nummer, Seriennummer, Priorität, Kommentar und Datei-Anhängen
- Dreistufiger Status-Workflow: **Offen → In Bearbeitung → Entsorgt**
- Automatisches Überfälligkeits-Tracking (Frist: 7 Tage)
- 5 Spalten-Filter + 4 Sortieroptionen in der Asset-Tabelle
- Druck-Export (offene/in Bearbeitung) und JSON-Export
- Rollenbasierte Dashboards (Admin, Filialleiter, Firmenleiter)
- Mitarbeiter-Performance-Übersicht
- Audit-Log für alle Änderungen
- Dark Mode / Light Mode
- Responsive Design (Desktop + Mobile)
---
## 2. Architektur & Tech-Stack
### Technologie
| Schicht | Technologie | Version |
|---------|-------------|---------|
| **Frontend** | React | 19 |
| **Bundler** | Vite | 6 |
| **Styling** | Tailwind CSS | 4 |
| **UI-Komponenten** | shadcn/ui (Base UI) | 4 |
| **Charts** | Recharts | 2.15 |
| **Icons** | Lucide React | 0.577 |
| **Routing** | React Router | 7 |
| **Backend (BaaS)** | Appwrite | 21 (Client) / 22 (Server) |
| **API-Server** | Express | 5 |
| **Benachrichtigungen** | Sonner | 2 |
| **Theming** | next-themes | 0.4 |
### Architektur-Diagramm
```mermaid
flowchart TB
subgraph client [Browser]
SPA["React SPA"]
end
subgraph server [Server-Infrastruktur]
ExpressAPI["Express API\n(Admin-Operationen)"]
AppwriteServer["Appwrite Server"]
end
subgraph appwrite [Appwrite Services]
Auth["Authentication\n(E-Mail/Passwort)"]
TeamsService["Teams\n(Rollen)"]
DB["Database\n(5 Collections)"]
StorageSvc["Storage\n(Anhänge)"]
end
SPA -->|"REST API"| AppwriteServer
SPA -->|"/api/*"| ExpressAPI
ExpressAPI -->|"Server SDK"| AppwriteServer
AppwriteServer --> Auth
AppwriteServer --> TeamsService
AppwriteServer --> DB
AppwriteServer --> StorageSvc
```
### Deployment-Optionen
- **Self-hosted:** Appwrite als Docker-Container + Node.js-Server
- **Cloud:** Appwrite Cloud + beliebiges Node.js-Hosting (z.B. Railway, Render, VPS)
- **Statisches Frontend:** Vite-Build als statische Dateien auf beliebigem Webserver
---
## 3. Datenmodell
Die Appwrite-Datenbank (`defekttrack_db`) umfasst 5 Collections und einen Storage-Bucket:
### Collections
#### `locations` — Filialen
| Attribut | Typ | Pflicht | Beschreibung |
|----------|-----|---------|--------------|
| `name` | String (128) | Ja | Filialname (z.B. „Kaiserslautern") |
| `address` | String (256) | Nein | Adresse der Filiale |
| `isActive` | Boolean | Nein | Filiale aktiv/inaktiv (Standard: true) |
**Berechtigungen:** Lesen: alle authentifizierten Benutzer. Schreiben/Löschen: nur Admin.
#### `users_meta` — Benutzerprofile
| Attribut | Typ | Pflicht | Beschreibung |
|----------|-----|---------|--------------|
| `userId` | String (64) | Ja | Appwrite User-ID |
| `locationId` | String (64) | Nein | Zugeordnete Filiale |
| `userName` | String (128) | Nein | Anzeigename |
| `role` | String (32) | Ja | Rolle (admin, firmenleiter, filialleiter, service, lager) |
| `mustChangePassword` | Boolean | Nein | Passwortänderung beim nächsten Login erforderlich |
**Berechtigungen:** Lesen: alle. Erstellen/Löschen: nur Admin. Aktualisieren: alle.
#### `lagerstandorte` — Lagerstandorte pro Filiale
| Attribut | Typ | Pflicht | Beschreibung |
|----------|-----|---------|--------------|
| `name` | String (128) | Ja | Name des Lagerstandorts |
| `locationId` | String (64) | Ja | Zugehörige Filiale |
| `isActive` | Boolean | Nein | Aktiv/Inaktiv (Standard: true) |
**Berechtigungen:** Lesen: alle. CRUD: Admin + Filialleiter.
#### `assets` — Defekt-Einträge
| Attribut | Typ | Pflicht | Beschreibung |
|----------|-----|---------|--------------|
| `erlNummer` | String (64) | Ja | ERL-Nummer (eindeutige Kennung) |
| `seriennummer` | String (128) | Ja | Seriennummer des Artikels |
| `artikelNr` | String (64) | Nein | Artikelnummer |
| `bezeichnung` | String (256) | Nein | Artikelbezeichnung |
| `defekt` | String (1024) | Nein | Defektbeschreibung |
| `lagerstandortId` | String (64) | Nein | Zugeordneter Lagerstandort |
| `zustaendig` | String (128) | Ja | Zuständiger Mitarbeiter |
| `status` | String (32) | Ja | `offen` / `in_bearbeitung` / `entsorgt` |
| `prio` | String (16) | Ja | `kritisch` / `hoch` / `mittel` / `niedrig` |
| `bearbeitungsStatus` | String (64) | Nein | Bearbeitungs-Unterstatus bei "In Bearbeitung" (`portalpruefung` / `gutschreiben_entsorgen` / `zurueck_hersteller` / `defekt_ankunft`) |
| `kommentar` | String (8192) | Nein | Kommentar inkl. Anhang-Marker |
| `createdBy` | String (128) | Nein | Erstellt von |
| `lastEditedBy` | String (128) | Nein | Zuletzt bearbeitet von |
**Berechtigungen:** Lesen/Erstellen/Aktualisieren: alle. Löschen: Admin + Filialleiter.
#### `audit_logs` — Änderungsprotokoll
| Attribut | Typ | Pflicht | Beschreibung |
|----------|-----|---------|--------------|
| `assetId` | String (64) | Ja | Referenz auf Asset |
| `action` | String (64) | Ja | Aktion (z.B. „erstellt", „status_geaendert") |
| `details` | String (2048) | Nein | Beschreibung der Änderung |
| `userId` | String (64) | Ja | Wer hat die Änderung vorgenommen |
| `userName` | String (128) | Ja | Name des Benutzers |
**Berechtigungen:** Lesen + Erstellen: alle authentifizierten Benutzer.
### Storage
| Bucket | Max. Dateigröße | Erlaubte Formate | Verwendung |
|--------|-----------------|------------------|------------|
| `defekttrack_anhaenge` | 15 MB | JPG, PNG, GIF, WebP, PDF | Kommentar-Anhänge mit Bildvorschau |
---
## 4. Rollenkonzept & Berechtigungsmatrix
DefektTrack nutzt **5 Rollen**, die über Appwrite Teams zugewiesen werden. Bei Mehrfach-Mitgliedschaft gilt die Rolle mit der höchsten Priorität.
### Rollenhierarchie
```mermaid
flowchart TD
Admin["Admin\n(Volle Kontrolle)"]
Firmenleiter["Firmenleiter\n(Unternehmensweite Sicht)"]
Filialleiter["Filialleiter\n(Filial-Management)"]
Service["Service\n(Operativ)"]
Lager["Lager\n(Operativ)"]
Admin --- Firmenleiter
Firmenleiter --- Filialleiter
Filialleiter --- Service
Filialleiter --- Lager
```
### Rollenübersicht
| Rolle | Startseite | Beschreibung |
|-------|------------|--------------|
| **Admin** | `/admin` | Systemadministrator mit voller Kontrolle über Filialen, Benutzer und Daten |
| **Firmenleiter** | `/firmenleiter` | Geschäftsführung mit unternehmensweitem Überblick über alle Filialen |
| **Filialleiter** | `/filialleiter` | Filialleitung mit detailliertem Einblick in die eigene Filiale + Vergleich |
| **Service** | `/tracker` | Operative Kraft — erfasst und bearbeitet Defekte im Tagesgeschäft |
| **Lager** | `/tracker` | Operative Kraft — identisch mit Service, arbeitet im Defekt-Tracker |
### Detaillierte Berechtigungsmatrix
| Funktion | Admin | Firmenleiter | Filialleiter | Service | Lager |
|----------|:-----:|:------------:|:------------:|:-------:|:-----:|
| **Defekt-Tracker verwenden** | Ja | Ja | Ja | Ja | Ja |
| **Assets erfassen** | Ja | Ja | Ja | Ja | Ja |
| **Assets Status ändern** | Ja | Ja | Ja | Ja | Ja |
| **Assets bearbeiten** | Ja | Ja | Ja | Ja | Ja |
| **Assets löschen** | Ja | — | Ja | — | — |
| **JSON-Export** | Ja | Ja | Ja | Ja | Ja |
| **Drucken** | Ja | Ja | Ja | Ja | Ja |
| **Admin-Panel** | Ja | — | — | — | — |
| **Filialen verwalten (CRUD)** | Ja | — | — | — | — |
| **Benutzer anlegen/verwalten** | Ja | — | — | — | — |
| **Rollen zuweisen** | Ja | — | — | — | — |
| **Benutzer-Details einsehen** | Ja | Ja | Nur eigene Filiale | — | — |
| **Benutzer-Details bearbeiten** | Ja | Ja | — (nur Lesen) | — | — |
| **Firmenleiter-Dashboard** | Ja | Ja | — | — | — |
| **Filialleiter-Dashboard** | Ja | — | Ja | — | — |
| **Lagerstandorte verwalten** | Ja | — | Ja | — | — |
| **Audit-Log einsehen** | Ja | Ja | Ja | Ja | Ja |
### Was jede Rolle im Detail kann
#### Admin — Volle Systemkontrolle
- Zugang zu **allen Bereichen** der Anwendung (Admin-Panel, alle Dashboards, Tracker)
- Filialen anlegen, bearbeiten, aktivieren/deaktivieren und löschen
- Benutzer anlegen mit Rollenzuweisung und Filialzuordnung
- Benutzerprofile einsehen und bearbeiten (Name, Rolle, Filiale)
- Assets löschen
- Lagerstandorte verwalten
- Überblick über System-KPIs: Benutzeranzahl, Filialanzahl, Assets, Lagerstandorte, Filialen ohne Filialleiter
#### Firmenleiter — Strategischer Unternehmensüberblick
- **Firmenleiter-Dashboard** mit globalen Kennzahlen über alle Filialen
- Überblick: Anzahl Filialen, Mitarbeiter gesamt, Assets gesamt, globale Erledigungsrate
- Status-Übersicht: Offen / In Bearbeitung / Erledigt (firmenweit)
- Filialkarten mit Kennzahlen pro Standort (Mitarbeiter, Lagerstandorte, Assets)
- Benutzer-Details einsehen und bearbeiten
- Defekt-Tracker für operative Arbeit
#### Filialleiter — Detailliertes Filial-Management
- **Filialleiter-Dashboard** mit umfangreichen Analysen der eigenen Filiale
- **Gesamtübersicht:** Donut-Diagramm der Status-Verteilung + Tabelle überfälliger Einträge
- **Tages-Analyse:** Tages-Donut, 7-Tage-Balkendiagramm (Erfasst/Erledigt/Überfällig), Vergleich zum Vortag
- **Monats-Analyse:** Monats-Donut, 6-Monate-Balkendiagramm, Vergleich zum Vormonat
- **Filialvergleich:** Durchschnittswerte anderer Filialen als Benchmark
- **Mitarbeiter-Performance:** Pro Mitarbeiter: zugewiesene Assets, offen, in Bearbeitung, erledigt, Erledigungsrate (%) mit Fortschrittsbalken
- Navigation zu Mitarbeiter-Details (nur Lesen, nur eigene Filiale)
- Lagerstandorte für eigene Filiale verwalten
- Assets löschen
#### Service & Lager — Operative Tagesarbeit
- **Defekt-Tracker** als Hauptarbeitsbereich
- Neue Defekte erfassen: ERL-Nr., Seriennummer, Artikelnr., Bezeichnung, Defekt, Priorität, Lagerstandort, Zuständiger, Kommentar mit Datei-Anhängen
- Status-Workflow: Offen → In Bearbeitung → Entsorgt (zyklisch)
- Filter und Sortierung in der Asset-Tabelle
- Asset-Detailansicht zum Bearbeiten
- Kommentar-/Anhang-Popup zum schnellen Einsehen
- Druckfunktion und JSON-Export
---
## 5. Asset-Tracker — Liste & Filter
Der **Defekt-Tracker** (`/tracker`) ist die zentrale Arbeitsansicht für alle Benutzer. Er besteht aus drei Bereichen:
### Layout
```
┌────────────────────────────────────────────────────────────┐
│ Header (Navigation, Export, Benutzer-Menü) │
├──────────────┬─────────────────────────────────────────────┤
│ │ Dashboard-Karten (6 Karten) │
│ Erfassungs- │─────────────────────────────────────────────│
│ Formular │ │
│ (Sidebar) │ Asset-Tabelle │
│ │ (Filter, Sortierung, Aktionen) │
│ │ │
└──────────────┴─────────────────────────────────────────────┘
```
### Dashboard-Karten (Status-Filter)
6 klickbare Karten, die gleichzeitig als Filter dienen:
| Karte | Farbe | Anzeige | Filter-Effekt |
|-------|-------|---------|---------------|
| **Offen** | Rot | Anzahl Assets mit Status „offen" | Zeigt nur offene Assets |
| **In Bearbeitung** | Amber | Anzahl Assets mit Status „in_bearbeitung" | Zeigt nur Assets in Bearbeitung |
| **Entsorgt** | Grau | Anzahl Assets mit Status „entsorgt" | Zeigt nur entsorgte Assets |
| **12 Tage überfällig** | Blau | Assets 12 Tage über der 7-Tage-Frist | Filtert auf diese Gruppe |
| **34 Tage überfällig** | Indigo | Assets 34 Tage über der 7-Tage-Frist | Filtert auf diese Gruppe |
| **5+ Tage überfällig** | Violett | Assets 5+ Tage über der 7-Tage-Frist | Filtert auf diese Gruppe |
Erneutes Klicken auf eine aktive Karte entfernt den Filter.
### Asset-Tabelle — Spalten
| Spalte | Inhalt | Besonderheiten |
|--------|--------|----------------|
| **ERL-Nr.** | ERL-Nummer | Zellhintergrund farbig nach Priorität (Kritisch=Rot, Hoch=Orange, Mittel=Gelb, Niedrig=Grün) |
| **Artikel** | Artikelnummer + Bezeichnung | Zweizeilig: Nummer fett, Bezeichnung klein |
| **Seriennr.** | Seriennummer | Monospace-Schrift |
| **Defekt** | Defektbeschreibung | Max. 180px Breite, Textabschneidung |
| **Standort** | Name des Lagerstandorts | Aufgelöst aus Lagerstandort-ID |
| **Status** | Offen / In Bearbeitung / Entsorgt | Farbige Badges |
| **Alter** | Tage seit Erfassung | „Heute", „1 Tag", „n Tage" + „Überfällig!"-Warnung ab 7 Tagen |
| **Aktionen** | 4 Buttons im 2x2-Grid | Status ändern, Bearbeiten, Info-Popup, Zuständiger |
### Spalten-Filter (5 Stück)
| Filter | Typ | Funktionsweise |
|--------|-----|----------------|
| **ERL-Nr.** | Textsuche | Teilstring-Suche, case-insensitive |
| **Artikel** | Textsuche | Sucht in Artikelnummer ODER Bezeichnung |
| **Seriennr.** | Textsuche | Teilstring-Suche, case-insensitive |
| **Defekt** | Textsuche | Teilstring-Suche, case-insensitive |
| **Standort** | Dropdown | Auswahl eines spezifischen Lagerstandorts |
### Sortierung (4 Optionen)
| Option | Verhalten |
|--------|-----------|
| **Priorität** (Standard) | Kritisch → Hoch → Mittel → Niedrig |
| **Neueste zuerst** | Nach Erstellungsdatum absteigend |
| **Älteste zuerst** | Nach Erstellungsdatum aufsteigend |
| **Mir zugewiesen** | Nur eigene Assets, sortiert nach Priorität |
### Status-Workflow
```mermaid
stateDiagram-v2
[*] --> Offen: Asset erfasst
Offen --> InBearbeitung: In Bearbeitung nehmen
InBearbeitung --> Entsorgt: Entsorgen
Entsorgt --> Offen: Neu öffnen
state "In Bearbeitung" as InBearbeitung
```
- Überfälligkeit wird automatisch erkannt: Status „Offen" oder „In Bearbeitung" **und** älter als 7 Tage
- Überfällige Zeilen werden optisch hervorgehoben (amber-Hintergrund + linker Rand)
### Zeilen-Aktionen (2x2-Grid pro Zeile)
| Element | Funktion |
|---------|----------|
| **Status-Dropdown** | Dropdown-Menü zur Auswahl des neuen Status (Offen / In Bearbeitung / Entsorgt). Bei Status != "In Bearbeitung" nimmt das Dropdown die volle Breite ein. |
| **Bearbeitungsstatus** | Nur sichtbar bei Status "In Bearbeitung" — Dropdown mit 4 Optionen: Portalprüfung durchführen, Direkt gutschreiben & entsorgen, Zurück an Hersteller senden, Defekt bei Ankunft melden |
| **Info** | Navigation zur Asset-Detailseite (Bearbeiten-Ansicht) |
| **Zuständig** | Anzeige des zuständigen Mitarbeiters (nur Lesen) |
### Erfassungs-Formular (Sidebar)
Neue Defekte werden über die linke Sidebar erfasst:
- ERL-Nummer, Seriennummer (Pflicht)
- Artikelnummer, Bezeichnung
- Defektbeschreibung
- Priorität (Kritisch / Hoch / Mittel / Niedrig)
- Lagerstandort (Dropdown der aktiven Standorte)
- Zuständiger Mitarbeiter (Dropdown der Kollegen)
- Kommentar mit optionalem Betreff
- Datei-Anhänge (Bilder, PDFs — max. 15 MB, mit Vorschau)
### Export & Druck
| Funktion | Beschreibung |
|----------|--------------|
| **Drucken** | Öffnet druckoptimiertes Fenster mit allen offenen/in Bearbeitung befindlichen Assets (ERL-Nr., Seriennummer, Defekt, Priorität) |
| **JSON-Export** | Exportiert alle geladenen Assets als JSON-Datei mit Zeitstempel im Dateinamen |
### Kommentar-System
- Kommentare mit optionalem **Betreff** (markiert mit `*...*`)
- **Datei-Anhänge** werden als Marker im Kommentar-Feld gespeichert
- Anhänge werden im Appwrite Storage abgelegt
- Bilder: Authentifizierte Vorschau direkt in der App
- PDFs und andere Dateien: Download-Link
- Einsehbar über das **Info-Popup** in der Tabelle und auf der **Asset-Detailseite**
---
## 6. Admin-Panel
Das **Admin-Panel** (`/admin`) ist die Verwaltungszentrale für Systemadministratoren.
### KPI-Karten (5 Stück)
| KPI | Beschreibung |
|-----|--------------|
| **Benutzer** | Gesamtzahl registrierter Benutzer |
| **Filialen** | Anzahl angelegter Filialen |
| **Assets gesamt** | Gesamtzahl aller erfassten Defekt-Einträge |
| **Lagerstandorte** | Anzahl aller Lagerstandorte über alle Filialen |
| **Filialen ohne Filialleiter** | Warnung: Filialen, denen kein Filialleiter zugeordnet ist |
### Filial-Verwaltung
| Aktion | Beschreibung |
|--------|--------------|
| **Filiale anlegen** | Name + Adresse eingeben, wird sofort aktiv |
| **Filiale bearbeiten** | Name und Adresse ändern, inkl. Filialdetail-Ansicht |
| **Aktivieren/Deaktivieren** | Filiale ein-/ausschalten ohne Datenverlust |
| **Filiale löschen** | Endgültiges Entfernen (mit Bestätigung) |
Beim Bearbeiten einer Filiale öffnet sich die **Filialdetail-Ansicht** mit erweiterten Verwaltungsoptionen (z.B. Lagerstandorte der Filiale, zugeordnete Benutzer).
### Benutzerverwaltung
| Funktion | Beschreibung |
|----------|--------------|
| **Benutzersuche** | Echtzeit-Suche nach Name oder User-ID |
| **Benutzerliste** | Scrollbare Liste mit Name, Filiale und Rollen-Badge |
| **Benutzer-Detail** | Klick öffnet Detailansicht mit Name, Rolle, Filialzuordnung |
| **Neuer Benutzer** | Formular zum Anlegen: E-Mail, Name, Passwort, Rolle, Filiale |
| **Verfügbare Rollen** | Filialleiter, Service, Lager, Firmenleiter (Admin nur per Setup) |
---
## 7. Filialleiter-Dashboard
Das **Filialleiter-Dashboard** (`/filialleiter`) bietet Filialleitern eine umfassende Analyse ihrer Filiale mit Vergleichswerten.
### Bereich 1: Aktuelle Gesamtübersicht
| Element | Beschreibung |
|---------|--------------|
| **Donut-Diagramm** | Verteilung der Assets nach Status: Offen, In Bearbeitung, Erledigt, Überfällig |
| **Interaktive Legende** | Hover über Legende hebt Sektor hervor, zeigt absolute Zahl + Prozent + Balken |
| **Zentraler Wert** | Gesamtzahl der Assets der Filiale im Donut-Zentrum |
| **Überfällige-Tabelle** | Sortierte Liste aller überfälligen Einträge mit ERL-Nr., Artikel, Status, Tage überfällig, Zuständiger |
Klick auf eine überfällige Zeile navigiert direkt zur Asset-Detailseite.
### Bereich 2: Tages-Ansicht
| Element | Beschreibung |
|---------|--------------|
| **Donut „Meine Filiale"** | Tagesaktivität (erfasst, in Bearbeitung, erledigt, überfällig) |
| **Tages-Kennzahl** | „Heute erfasst" mit Trend-Pfeil im Vergleich zum Vortag |
| **7-Tage-Balkendiagramm** | Pro Tag: Erfasst, Erledigt, Überfällig als gruppierte Balken |
| **Donut „Durchschnitt andere Filialen"** | Gleiche Metrik, gemittelt über alle anderen Filialen als Benchmark |
### Bereich 3: Monats-Ansicht
| Element | Beschreibung |
|---------|--------------|
| **Donut „Meine Filiale"** | Monatliche Status-Verteilung |
| **Monats-Kennzahl** | „Diesen Monat" mit Trend-Pfeil im Vergleich zum Vormonat |
| **6-Monate-Balkendiagramm** | Pro Monat: Erfasst, Erledigt, Überfällig als gruppierte Balken |
| **Donut „Durchschnitt andere Filialen"** | Monats-Durchschnitt aller anderen Filialen |
### Bereich 4: Mitarbeiter-Performance
Tabelle mit allen Mitarbeitern der Filiale:
| Spalte | Beschreibung |
|--------|--------------|
| **Mitarbeiter** | Name (klickbar → Mitarbeiter-Detail) |
| **Zugewiesen** | Gesamtzahl zugewiesener Assets |
| **Offen** | Anzahl offener Assets |
| **In Bearbeitung** | Anzahl in Bearbeitung |
| **Erledigt** | Anzahl erledigter Assets |
| **Erledigungsrate** | Prozent + visueller Fortschrittsbalken |
Sortiert nach Erledigungsrate (höchste zuerst).
---
## 8. Firmenleiter-Dashboard
Das **Firmenleiter-Dashboard** (`/firmenleiter`) bietet der Geschäftsführung einen strategischen Überblick über das gesamte Unternehmen.
### Globale KPI-Karten (4 Stück)
| KPI | Icon | Beschreibung |
|-----|------|--------------|
| **Filialen** | Gebäude | Gesamtzahl aller Filialen |
| **Mitarbeiter gesamt** | Personen | Alle registrierten Benutzer |
| **Assets gesamt** | Paket | Alle erfassten Defekt-Einträge |
| **Erledigungsrate** | Häkchen | Prozent der erledigten Assets (`entsorgt / gesamt * 100`) |
### Status-Übersicht (3 Karten)
| Status | Farbe | Beschreibung |
|--------|-------|--------------|
| **Offen** | Rot | Firmenweit offene Assets |
| **In Bearbeitung** | Amber | Firmenweit in Bearbeitung |
| **Erledigt** | Grün | Firmenweit erledigte Assets |
### Filial-Grid
Pro Filiale eine Karte mit:
| Element | Beschreibung |
|---------|--------------|
| **Filialname** | Name der Filiale |
| **Adresse** | Optional angezeigte Adresse |
| **Status-Badge** | Aktiv / Inaktiv |
| **Mitarbeiter** | Anzahl zugeordneter Mitarbeiter |
| **Lagerstandorte** | Anzahl der Lagerstandorte |
| **Assets** | Gesamtzahl der Assets |
---
## 9. Sicherheitskonzept
### Authentifizierung
- **Appwrite Authentication** mit E-Mail/Passwort-Login
- Session-basiert mit automatischer Session-Prüfung beim App-Start
- Geschützte Routen: Nicht-eingeloggte Benutzer werden zu `/login` umgeleitet
### Autorisierung — Mehrstufiges Konzept
| Schicht | Mechanismus | Beschreibung |
|---------|-------------|--------------|
| **1. Appwrite Teams** | Team-Mitgliedschaft | Jede Rolle = ein Team. Effektive Rolle per Prioritätslogik (Admin > Firmenleiter > Filialleiter > Service > Lager) |
| **2. Collection Permissions** | Appwrite-interne Berechtigung | Pro Collection definiert, wer lesen/erstellen/aktualisieren/löschen darf |
| **3. Frontend-Navigation** | UI-basierte Einschränkung | Rollen-abhängige Menüpunkte im Header |
| **4. Admin-API** | Shared Secret | Express-API für Benutzerverwaltung, geschützt durch `X-Admin-Secret` Header |
### Daten-Isolation
- **Filialbasiert:** Benutzer mit zugewiesener Filiale sehen nur Assets, deren Lagerstandort zur eigenen Filiale gehört
- **Filialleiter:** Kann Mitarbeiter-Details nur für die eigene Filiale einsehen
- **Audit-Trail:** Jede Asset-Änderung (Erstellen, Status-Wechsel) wird protokolliert mit Benutzer, Aktion und Zeitstempel
### Collection-Berechtigungsmatrix
| Collection | Lesen | Erstellen | Aktualisieren | Löschen |
|------------|:-----:|:---------:|:-------------:|:-------:|
| `locations` | Alle | Admin | Admin | Admin |
| `users_meta` | Alle | Admin | Alle | Admin |
| `lagerstandorte` | Alle | Admin, Filialleiter | Admin, Filialleiter | Admin, Filialleiter |
| `assets` | Alle | Alle | Alle | Admin, Filialleiter |
| `audit_logs` | Alle | Alle | — | — |
---
## 10. Navigationsfluss
### Rollenbasierte Weiterleitung nach Login
```mermaid
flowchart TD
Login["Login-Seite\n/login"] --> AuthCheck{"Authentifizierung\nerfolgreich?"}
AuthCheck -->|Nein| Login
AuthCheck -->|Ja| RoleCheck{"Rolle prüfen"}
RoleCheck -->|admin| AdminPanel["/admin\nAdmin-Panel"]
RoleCheck -->|firmenleiter| FirmenDash["/firmenleiter\nFirmenleiter-Dashboard"]
RoleCheck -->|filialleiter| FilialDash["/filialleiter\nFilialleiter-Dashboard"]
RoleCheck -->|"service / lager"| Tracker["/tracker\nDefektTracker"]
```
### Vollständiger Navigationsfluss
```mermaid
flowchart TD
AdminPanel["/admin\nAdmin-Panel"]
FirmenDash["/firmenleiter\nFirmenleiter-Dashboard"]
FilialDash["/filialleiter\nFilialleiter-Dashboard"]
Tracker["/tracker\nDefektTracker"]
AssetDetail["/asset/:id\nAsset-Detail"]
UserDetail["/admin/user/:id\nBenutzer-Detail"]
MitarbeiterDetail["/filialleiter/mitarbeiter/:id\nMitarbeiter-Detail"]
AdminPanel -->|"Nav: DefektTrack"| Tracker
AdminPanel -->|"Nav: Filialleiter"| FilialDash
AdminPanel -->|"Nav: Firmenleiter"| FirmenDash
AdminPanel -->|"Benutzer-Klick"| UserDetail
FirmenDash -->|"Nav: DefektTrack"| Tracker
FirmenDash -->|"Nav: Filialleiter"| FilialDash
FilialDash -->|"Nav: DefektTrack"| Tracker
FilialDash -->|"Überfällig-Klick"| AssetDetail
FilialDash -->|"Mitarbeiter-Klick"| MitarbeiterDetail
Tracker -->|"Bearbeiten-Klick"| AssetDetail
```
### Zugängliche Seiten pro Rolle
| Seite | Admin | Firmenleiter | Filialleiter | Service | Lager |
|-------|:-----:|:------------:|:------------:|:-------:|:-----:|
| `/admin` | Ja | — | — | — | — |
| `/firmenleiter` | Ja | Ja | — | — | — |
| `/filialleiter` | Ja | — | Ja | — | — |
| `/tracker` | Ja | Ja | Ja | Ja | Ja |
| `/asset/:id` | Ja | Ja | Ja | Ja | Ja |
| `/admin/user/:id` | Ja | Ja | — | — | — |
| `/filialleiter/mitarbeiter/:id` | — | — | Ja | — | — |
---
> **DefektTrack** — Transparenz schaffen. Defekte tracken. Prozesse optimieren.