# Implementierungsplan

Dieser Plan beschreibt die konkrete technische Umsetzung. Die fachlichen
Grundentscheidungen stehen in `PLANUNG.md`; Installations- und Betriebsdetails
stehen in `INSTALL.md`.

## Leitlinien

- Backend zuerst dort stabilisieren, wo mehrere Clients dieselben Funktionen
  nutzen.
- Gemeinsame Datenverträge und Rechte werden vor UI-Komfortfunktionen umgesetzt.
- Webclient und Desktopclient sollen dieselben Backend-Endpunkte verwenden.
- Alles außer dem Dashboard wird in Fenstern bearbeitet.
- Neue fachliche Funktionen bekommen eigene atomare Rechte.
- Bestehende Firmenschemas müssen bei Backend-Start idempotent nachgezogen
  werden.
- Benutzer sichtbare Texte verwenden echte Umlaute.

## Phase 1: Fundament Stabilisieren

Ziel: Login, Firma, Benutzerrechte, Fensterkonzept und Live-Aktualisierung sind
verlässlich testbar.

- [x] PostgreSQL-Grundschema und Firmenschema-Migrationen anlegen
- [x] Dev-Bootstrap für lokale Benutzer/Firma ohne E-Mail-Versand
- [x] Webclient auf Vue umstellen
- [x] Desktopclient-Konfiguration für Backend-URL
- [x] Logo in Webclient und Desktopclient verwenden
- [x] Benutzerrechte-Fenster im Webclient
- [x] Benutzerrechte-Fenster im Desktopclient
- [x] Rollenänderungen über Backend-Endpunkt speichern
- [x] Atomare Rechte initial anlegen
- [x] Bestehende aktive Firmenschemas beim Backend-Start nachziehen
- [x] Echte Session-/Auth-Tokens einführen statt temporärer User-ID im Header
- [x] Aktuelle Firma explizit auswählen und in Requests mitsenden
- [x] Backend-Rechteprüfung für jeden geschützten Endpunkt zentralisieren
- [x] Rollen auf Rechte abbilden und nicht nur Rollen anzeigen
- [x] Live-Events für Benutzer-/Rollenänderungen an alle Clients senden
- [x] Automatisierten API-Test für Rollenänderung ergänzen
- [x] Webclient-Build/Typprüfung für Benutzerrechte-Fenster ergänzen
- [x] Desktopclient-Build/Typprüfung für Benutzerrechte-Fenster ergänzen

## Phase 2: Fenster- und Clientmodell

Ziel: Die Anwendung verhält sich konsequent fensterbasiert und aktualisiert
offene Fenster bei Änderungen.

- [x] Webclient öffnet angemeldete Arbeitsbereiche als Fenster
- [x] Desktopclient öffnet Benutzerrechte als Fenster
- [x] Gemeinsames Fensterkonzept dokumentieren
- [x] Webclient-Fenster verschiebbar machen
- [x] Webclient-Fenstergröße änderbar machen
- [x] Webclient-Fensterstatus pro Benutzer lokal speichern
- [x] Desktopclient-Fenster für Firmendaten ergänzen
- [x] Desktopclient-Fenster für Freischaltung ergänzen
- [x] Einheitliche Fensteraktionen definieren: Öffnen, Schließen, Fokussieren,
  Aktualisieren
- [x] Live-Update-Store im Webclient für Stammdaten einführen
- [x] Live-Update-Store im Desktopclient für Stammdaten einführen
- [x] Konfliktverhalten bei paralleler Bearbeitung definieren

## Phase 3: Stammdaten

Ziel: Kunden, Lieferanten, Artikel und Aktivitäten sind als erste fachliche
Objekte vollständig nutzbar.

- [x] Datenmodell Kunden finalisieren
- [x] Migration Kunden erstellen
- [x] Backend-CRUD Kunden implementieren
- [x] Web-Fenster Kundenliste und Kundendetail implementieren
- [x] Desktop-Fenster Kundenliste und Kundendetail implementieren
- [x] Kundenrabatt und Skonto beim Kunden ablegen
- [x] Datenmodell Lieferanten finalisieren
- [x] Migration Lieferanten erstellen
- [x] Backend-CRUD Lieferanten implementieren
- [x] Lieferanten-Skonto ablegen
- [x] Datenmodell Artikel finalisieren
- [x] Migration Artikel erstellen
- [x] Backend-CRUD Artikel implementieren
- [x] Artikelpreise historisieren
- [x] Datenmodell Aktivitäten finalisieren
- [x] Migration Aktivitäten erstellen
- [x] Backend-CRUD Aktivitäten implementieren
- [x] Web-Fenster für Lieferanten, Artikel und Aktivitäten implementieren
- [x] Desktop-Fenster für Lieferanten, Artikel und Aktivitäten implementieren
- [x] Live-Events für Stammdatenänderungen senden

## Phase 4: Angebote und Rechnungen

Ziel: Angebote und Rechnungen bilden den ersten produktiven Arbeitsablauf.

- [x] Nummernkreise für Angebote und Rechnungen produktionsreif machen
- [x] Nummernkreise für Kunden, Lieferanten, Artikel und Aktivitäten anbinden
- [x] Nummernkreis-Verwaltung im Webclient und Desktopclient bereitstellen
- [x] Datenmodell Angebote finalisieren
- [x] Backend-CRUD Angebote implementieren
- [x] Angebotspositionen nur aus vorhandenen Artikeln erlauben
- [x] Positionspreis pro Angebot individuell überschreibbar machen
- [x] Web-Fenster Angebot erstellen
- [x] Desktop-Fenster Angebot erstellen
- [x] Angebot zu Ausgangsrechnung umwandeln
- [x] Datenmodell Ausgangsrechnungen finalisieren
- [x] Rechnungspositionen nur aus vorhandenen Artikeln erlauben
- [x] Positionspreis pro Rechnung individuell überschreibbar machen
- [x] Kundenrabatt und Skonto automatisch vorschlagen
- [x] Rechnung revisionssicher abschließen
- [x] Storno-/Korrekturrechnung vorbereiten
- [x] Datenmodell Eingangsrechnungen finalisieren
- [x] Eingangsrechnungen Lieferanten zuordnen
- [x] Lieferanten-Skonto berücksichtigen
- [x] Web-Fenster Ausgangs- und Eingangsrechnungen erstellen
- [x] Desktop-Fenster Ausgangs- und Eingangsrechnungen erstellen

## Phase 5: Import und Preisaktualisierung

Ziel: Artikellisten und externe APIs aktualisieren Preise nachvollziehbar.

- [x] Importformat CSV definieren
- [x] Importformat Excel prüfen und als spätere Erweiterung zurückstellen
- [x] Importvorschau im Backend vorbereiten
- [x] Preislistenimport mit Mapping speichern
- [x] Preisänderungen historisieren
- [x] Preisregeln je Lieferant/Quelle definieren
- [x] API-Connector-Grundstruktur anlegen
- [x] Externe Preis-API-Konfiguration verschlüsselt speichern
- [x] Manueller Preisabgleich
- [x] Geplanter Preisabgleich vorbereiten: Intervall und letzter Abgleich werden gespeichert
- [x] Live-Update an offene Angebots-/Rechnungsfenster senden
- [x] Native-Client-Fenster für Preislisten, Preis-APIs und Preisregeln anbinden

## Phase 6: Kommunikation und Dokumente

Ziel: Kommunikation, Dokumente und Historie werden je Firma verwaltet.

- [x] Datenmodell Kommunikation finalisieren
- [x] Kommunikation Kunden/Lieferanten/Vorgängen/Rechnungen zuordnen
- [x] Dokumentenspeicher-Layout festlegen
- [x] Dokumenten-Metadaten verschlüsselt speichern
- [x] Upload-Endpunkt implementieren
- [x] Download-Endpunkt implementieren
- [x] Rechteprüfung für Dokumentzugriff
- [x] Audit-Log für Dokumentzugriffe
- [x] Web-Fenster für Kommunikation und Dokumente anbinden

## Phase 7: Sicherheit und Betrieb

Ziel: Öffentlicher Server und lokale Installation sind trennbar und sicher
betreibbar.

- [x] Produktives Authentifizierungskonzept implementieren
- [x] Passwort-Reset implementieren
- [x] Einladung mit sicherem Token statt Passwortanzeige implementieren
- [x] E-Mail-Outbox und produktiven Datei-Transport anbinden
- [x] Dev-Ausgabe für E-Mail-Inhalte klar vom Produktivbetrieb trennen
- [x] Mandantenschema-Erzeugung transaktional absichern
- [x] Verschlüsselungsschlüssel-Konzept für Betrieb dokumentieren
- [x] Schlüsselrotation planen
- [x] Backup/Restore je Firma dokumentieren
- [x] Docker-Setup für Backend erweitern
- [x] Reverse-Proxy/TLS-Beispiel bereitstellen
- [x] Installationsprogramm für lokale Einzelkunden-Version planen

## Phase 8: Qualitätssicherung

Ziel: Kernabläufe sind reproduzierbar testbar.

- [x] API-Onboarding-Test erweitern: Registrierung, Freischaltung, Login,
  Rechteänderung
- [x] Kommunikationstest um Live-Events für fachliche Daten erweitern
- [x] Migrationstest für bestehende Firmenschemas
- [x] Rechteprüfung negativ testen
- [x] Webclient-Build und Typprüfung in Standardcheck aufnehmen
- [x] Desktopclient-Headless-Tests erweitern
- [x] Datenbank-Testsetup dokumentieren
- [x] Testdaten-Seed für lokale Entwicklung anlegen

## Aktueller Nächster Schritt

1. Optimierungen und Fehlerbehebungen priorisieren.
2. Benutzereinstellungen für die Navigation sind umgesetzt: scrollbar,
   oder einklappbare Gruppen je Benutzer.
