# Features

Vollständige Feature-Liste aller implementierten und geänderten Funktionen.
Dient als Basis für das Kundenangebot.

---

## ✅ Supplier Assessment (MO-24)

- **Was es macht:** Strukturiertes Bewertungstool für Lieferantenbesuche. Ingenieure beantworten einen mehrstufigen Fragenkatalog (1–4 Punkte: Nicht erfüllt → Best Practice) über hierarchische Kategorien (Hauptkategorie → Unterkategorie → Frage). Ergebnisse werden als Radar-/Balkendiagramm ausgewertet und als Excel exportiert.
- **Routen:** `/assessment` (Liste), `/assessment/[id]` (Bewertungsworkspace), `/assessment/[id]/dashboard` (Analyse), `/assessment/admin` (Katalogverwaltung, nur Admins)
- **Betroffene Dateien:**
  - `lib/assessment-types.ts` — Typdefinitionen, Rating-Konfiguration (deutsch)
  - `lib/assessment-analytics.ts` — Score-Berechnung, Fortschrittsprozente (client-side)
  - `lib/assessment-export.ts` — Excel-Export: Zusammenfassung + Detailansicht (BMW-Styling, farbkodiert)
  - `lib/assessment-catalog-import.ts` — xlsx-Import mit Vorschau (neu/update/Fehler)
  - `lib/assessment-catalog-export.ts` — Katalog-Export als xlsx-Vorlage
  - `app/assessment/` — Server-Komponenten (Datenabruf, Auth)
  - `components/assessment/` — Client-Komponenten: Workspace, Dashboard, Fragenkarten, Sidebar, Admin-CRUD
  - `MO-24/assessment-phase1.sql` — Supabase-Migration: 5 Tabellen mit RLS
- **Technologie:** ExcelJS (Export), SheetJS (Import), Dexie (lokales Caching), Recharts (Radar- & Balkendiagramm), Supabase RLS

---

## ✅ Kapazitätsplanung / Einsatzplanung (MO-23)

- **Was es macht:** Monatlicher Kalenderraster zur Einsatzplanung von Beratern. Team-Leads und Admins planen Zuordnungen (Berater → Projekt → Terminart) mit Kapazitätsanzeige, Überbuchungserkennung, deutschen Feiertagen und Drag & Drop. Rollen­basierter Zugriff: Admin, Team-Lead, Berater (nur eigene Zeilen), Readonly.
- **Routen:** `/planning` (Hauptraster), `/planning/consultants`, `/planning/projects`, `/planning/reports`, `/planning/settings`
- **Betroffene Dateien:**
  - `lib/planning-types.ts` — Typen: `Consultant`, `AppointmentType`, `PlanningProject`, `Assignment`, `AuditLogEntry`
  - `lib/planning-config.ts` — Farb-Maps, ISO-Wochenberechnung, Layout-Hilfsfunktionen
  - `lib/planning-capacity.ts` — `buildCapacityMap()`: Auslastung je Berater & Tag, Überbuchungsdetection
  - `lib/planning-permissions.ts` — Rollenbasierte Rechte (`PlanningPerms`), `canEditAssignment()`
  - `lib/german-holidays.ts` — Österlicher Algorithmus für alle 9 deutschen Bundesfeiertage (ohne externe Bibliothek)
  - `app/planning/` — Server-Komponenten
  - `components/planning/` — Client-Komponenten: Grid, Zuordnungskarten, Modals (Create/Edit/Copy Week), Bulk-Aktionen, Audit-Log-Panel, Reports, Heatmap, Excel-Export, Druckansicht
  - `MO-23/planning-tables.sql`, `planning-phase3.sql`, `planning-phase4.sql` — Supabase-Migrationen: Tabellen + Audit-Trigger + RLS
- **Technologie:** HTML5 Drag & Drop, ISO 8601 Kalender, ExcelJS (Grid-Export), Recharts (Reports), Dexie, Supabase RLS + Audit-Trigger

---

## ✅ Offline-Modus / PWA (Local-First Architektur)

- **Was es macht:** Die gesamte App funktioniert vollständig offline. Alle Schreiboperationen werden lokal in IndexedDB zwischengespeichert und bei Wiederverbindung automatisch mit Supabase synchronisiert. Kein Datenverlust bei Verbindungsunterbrechung. App kann als PWA installiert werden.
- **Betroffene Dateien:**
  - `public/manifest.json` — PWA-Manifest (Standalone-Display, BMW-Blau, App-Name "SupplierPulse")
  - `public/sw.js` — Service Worker: Cache-First für statische Assets, Network-First mit Cache-Fallback für Daten, `/offline`-Fallback bei Navigation
  - `app/offline/page.tsx` — "Keine Verbindung"-Fallback-Seite (deutsch)
  - `lib/offline/db.ts` — Dexie-Datenbank (`SupplierDevDB`): 16 Stores, 4 versionierte Migrationen
  - `lib/offline/registry.ts` — Tabellen-Registry mit TTLs (15 Min – 24 Std je nach Datenaktualität)
  - `lib/offline/queue.ts` — Schreibwarteschlange: Enqueue, Retry, Fehlermarkierung
  - `lib/offline/sync-engine.ts` — FIFO-Synchronisation, Pull/Push, Last-Write-Wins-Konfliktlösung auf `updated_at`
  - `lib/offline/sync-hooks.ts` — `useSyncStatus()`, `useSyncOnReconnect()` (Reconnect + 5-Min-Intervall + Tab-Fokus)
  - `lib/offline/repository.ts` — Generische Repository-Factory (`getAll`, `create`, `update`, `remove`) — Local-First, schreibt lokal + stellt in Queue
  - `lib/offline/connection.tsx` — `OnlineStatusProvider`, `useIsOnline()`-Hook
  - `lib/repositories/` — Spezifische Repositories: Assessment, Planning, Project, Account
  - `components/offline/offline-provider.tsx` — Root-Level-Provider, registriert alle Repos
  - `components/offline/online-status-banner.tsx` — Rotes/Grünes Banner bei Verbindungsänderung
  - `components/offline/sync-indicator.tsx` — Header-Icon: Synchronisierungsstatus, Popover mit Zählern + manueller Sync-Auslösung
  - `components/offline/sw-registrar.tsx` — Service-Worker-Registrierung
  - `app/layout.tsx` — PWA-Metadata, Provider-Integration
- **Technologie:** Dexie.js (IndexedDB), Service Worker API, PWA-Standard, Last-Write-Wins-CRDT

---

## ✅ QAF-Vorlagen & Parser-Erweiterung

- **Was es macht:** Ingenieure können QAF-Excel-Dateien (Quoting Analysis Form) hochladen und drei Versionen (Zur Vergabe, Nach Vergabe, Aktuell) nebeneinander vergleichen. Neue Funktionen: strukturierter Client-seitiger Parser für uploads, Server-API zur Generierung leerer BMW-gestylter Vorlagen als xlsx.
- **Betroffene Dateien:**
  - `lib/qaf-parser.ts` — `parseQAFTemplate()`: SheetJS-basiertes Parsing, erkennt "Fertigungskosten"-Sheet, mappt 22 deutsche Spaltenköpfe auf `QAFRow`-Felder
  - `app/api/qaf-template/route.ts` — `GET /api/qaf-template?version=...`: generiert downloadbare xlsx mit BMW-Header (blau/weiß), gefrorener Zeile, Auto-Filter, abwechselnder Zeilenfarbe, 22 Spaltenbreiten
  - `components/qaf/qaf-client.tsx` — Vergleichsansicht: 3 Versions-Tabs + "Vergleich"-Tab, rot/grün Hervorhebung numerischer Spalten, sticky erste Spalte, "Vorlage herunterladen"-Button
- **Technologie:** SheetJS (Client-Parsing), ExcelJS (Server-Generierung), `lowerBetter`-Flag für Vergleichslogik

---

## ✅ Navigations-Integration (App Shell)

- **Was es macht:** Die Hauptnavigation (Sidebar Desktop + Bottom-Tab-Bar Mobile) wurde um die zwei neuen Module erweitert. Der Synchronisierungsstatus ist dauerhaft im Header sichtbar.
- **Betroffene Dateien:**
  - `components/layout/app-shell.tsx` — Neue Nav-Einträge: "Planung" (`/planning`), "Assessment" (`/assessment`)
  - `components/layout/app-header.tsx` — `<SyncIndicator />` im Header-Rechtsbereich
- **Technologie:** Next.js App Router, React, Tailwind CSS

---

## ✅ Offline-fähige Projektverwaltung

- **Was es macht:** Erstellen und Bearbeiten von Besuchen (Projekten) funktioniert jetzt offline. Änderungen werden über das Repository-System in die lokale Sync-Queue geschrieben statt direkt zu Supabase.
- **Betroffene Dateien:**
  - `components/project/new-project-form.tsx` — nutzt `projectRepo.create()` statt direktem Supabase-Insert
  - `components/project/project-edit-form.tsx` — nutzt `projectRepo.update()` statt direktem Supabase-Update
- **Technologie:** Offline-Repository-Pattern (Dexie + Sync-Queue)

---

## Datenbank-Übersicht (neue Tabellen)

| Modul | Tabellen |
|---|---|
| Assessment | `assessment_main_categories`, `assessment_sub_categories`, `assessment_questions`, `assessments`, `assessment_responses` |
| Planung | `consultants`, `appointment_types`, `planning_projects`, `assignments` |
| Offline-Sync | `syncQueue`, `cacheMetadata`, `syncConflicts` (IndexedDB, kein Supabase) |

---

## Abhängigkeiten (neu hinzugefügt)

| Paket | Zweck |
|---|---|
| `dexie` | IndexedDB-Abstraktion für Offline-Speicher |
| `dexie-react-hooks` | React-Hooks für reaktive Dexie-Queries |
