# 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.