Sync-Screen: ausstehende/fehlgeschlagene Offline-Buchungen einsehen, erneut versuchen oder verwerfen (Drawer-Eintrag mit Zähler-Badge)
Offline-Status überall sichtbar: globaler Banner (amber = ausstehend, rot = dauerhaft fehlgeschlagen, antippbar), 'GEMERKT (OFFLINE)' statt 'GEBUCHT' bei gequeuten Buchungen
Display bleibt in allen Buchungs-Flows an (Keep-Awake)
Pick-Schritt zeigt bei Boxen-Picking-Picklisten das Box-Ziel ('→ Box 5', Sammelbox als 'Box S') inkl. Sprachansage
PROJ-343 Mobile — Scanner verlieren die Kopplung nicht mehr unnötig: ApiError trägt jetzt den Server-code; Heartbeat alle ~60s + bei Foreground branched auf SESSION_EXPIRED → nur neu einloggen (Kopplung bleibt) vs DEVICE_UNPAIRED → Wiederverbinden-Screen. „Gerät verbinden“-Flow (Code → Worker → PIN) aus activate+reconnect zusammengeführt, Einmal-Aktivierung entfernt. Selbst-Wiederverbindung ohne Admin über den aufgeklebten Geräte-Code + PIN. Prominenter Reset-Button entschärft, Login-Screen bietet „Gerät erneut verbinden“. Signierte APK v1.8.14 (versionCode 13).
PROJ-305 (intern PROJ-304 wegen ID-Race): Pickliste am Scanner-Gerät erstellen. Plus-Button '+ Neue Pickliste erstellen' über der Picklisten-Liste im Picking-Modul. Tap öffnet ein Bottom-Sheet mit aktiven Picklisten-Profilen + 'X pickbare Aufträge'-Counter pro Profil. Tap auf Profil mit Aufträgen → POST /api/picklists → 'PICKLISTE ERSTELLT'-Vollbild-Overlay → Modal schließt → Liste refreshed. Profile mit 0 Aufträgen ausgegraut. Keine Auto-Navigation — User entscheidet selbst was als nächstes. Kein Backend-Change, alle Endpoints existierten schon. Pattern 1:1 vom Replenishment-Modul (inline NewOrderModal).
Prominentes Buchungs-Bestätigungs-Overlay 'GEBUCHT' nach jeder erfolgreichen Buchung in allen 5 Buchungs-Modulen (LB-WE, Frei-WE, Umlagern, Plus, Minus). Bisheriges ScanFeedback war mit opacity 0.4 / 400ms / ohne Text viel zu subtil — User-Feedback 'wenn ich etwas buche bekomme ich keinerlei bestätigung angezeigt'. ScanFeedback erweitert um optionales text-Prop: mit Text → big mode (opacity 0.92, 1200ms, fontSize 48 fett mit Schatten, klar als Buchungs-Bestätigung lesbar), ohne Text → small mode wie bisher (für reine Scan-Events).
PROJ-295: Universal-Post-Scan-Card jetzt auch in Umlagern, Plusbuchung und Minusbuchung. Im by_article-Modus zeigt die App nach Artikel-Scan die ProductLocationsList aus PROJ-291 — jetzt mit Tap-to-select für Quell-Lagerplatz, FBA gefiltert, Sperr-Pill bei Sperrlager (ersetzt die bestehende inline-stockLocations-Implementierung, die FBA nicht filterte). Im by_location-Modus zeigt nach Lagerplatz-Scan eine neue LocationContentsList die Artikel mit Bild (32×32) + Tap-to-select. Tap setzt Menge=1 + Step=ready (einheitlich über alle Module per Memory-Regel). Max-Button neben QuantityInput füllt vollen Lagerplatz-Bestand (besonders nützlich bei Minusbuchung 'Lagerplatz leerräumen'). FBA-Lagerplatz-Scan bekommt 403 mit klarer Fehlermeldung. Wareneingang/Inventur/Picking/Replenishment unangetastet.
PROJ-291: Im Wareneingang (LB + Frei) zeigt die App nach dem Artikel-Scan eine Bestandsliste pro Lagerplatz (Top 3 + '+ N weitere'-Chip, sortiert nach Menge desc). FBA-Pool gefiltert via warehouses.is_read_only, Sperrlager bleibt drin mit '[Sperr]'-Pill in Amber. Bei Multi-Warehouse-Workspace kommt ein Lager-Präfix vor den Lagerplatznamen. Freier WE bekommt zusätzlich einen Artikel-Lookup-Step über /api/products/by-barcode — bei bekanntem Artikel volle Card mit Bild + Bestandsliste, bei unbekanntem Barcode bleibt der bisherige Flow als Fallback. Branch + Commit-Tag tragen historisch PROJ-290 wegen ID-Race mit der Cost-Breakdown-PR im Web-Repo.
Responsive Scaling für alle Android-Geräte (26 Dateien)
Auto-Logout nach konfigurierbarer Zeit
ConnectionContext — ein einziger Netzwerk-Listener statt pro Screen
Nachschub-Modul im Drawer-Menü ergänzt
ModuleCard mit optionaler Beschreibung
Nachfüllung / Replenishment Workflow (PROJ-94)
Auto-Confirm Picking ohne Mengenbestätigung
Text-to-Speech für Lagerplatz-Ansage
Kompakter Homescreen mit 2-Spalten Grid
Picking-Einstellungen (Mengenbestätigung, TTS)
Android-Navigationsleiste im Dark Theme
Wareneingang gegen Lieferantenbestellung (LB)
Picking komplett neu geschrieben (Scanner-optimiert)
Custom NumPad für Mengeneingabe
Lagerplatz-Vorschläge bei Einlagerung
Rescan für Menge +1, Lagerplatz-Scan bucht automatisch
Dual-Mode Flows (nach Lagerplatz / nach Artikel)
Scan-Validierung in allen Workflows
Konfigurierbarer Server-URL bei Aktivierung
Versionsbadge auf allen Screens
OTA-Update Check beim App-Start
Geräte-Aktivierung mit Pairing-Code
HID-Scanner-Integration (Timing-basiert)
Sammelkommissionierung / Picking
Umlagern zwischen Lagerplätzen
Plusbuchung (Bestandserhöhung)
Minusbuchung (Bestandsreduzierung)
Offline-Queue mit Auto-Sync bei Reconnect
Sound- und Vibrations-Feedback beim Scannen
Einstellungen (Sound, Vibration, Lautstärke, Tastatur)
Ein-Code-Kopplung über die WMS-Domain (z.B. web.flowkom.de-483921) — der Kopplungscode enthält keine Server-Interna mehr; Broker-Adresse wird beim Koppeln automatisch ermittelt
Auto-Updater: Update-Hinweis im Tray, Installation per Klick mit Fortschrittsbalken, automatischer Neustart
Ein-Code-Kopplung: kombinierter Kopplungscode befüllt die Broker-URL automatisch
Broadcast-Aufweck-Kanal: Sofort-Druck per Push, Polling nur noch als Fallback
Rebranding zu Flowkom Print Agent
Alle Abhängigkeiten in EXE eingebettet (pdfium.dll)
Automatische Versionierung bei jedem Build
Cross-Compilation von macOS ermöglicht
Silent ZPL Label Printing auf lokale Drucker
Silent PDF Label Printing via PdfiumViewer
Supabase Edge Function Integration (Polling)
Device Pairing mit 6-stelligem Code
Heartbeat und automatische Printer-Discovery
Windows Installer mit Inno Setup (Autostart, Voraussetzungsprüfung)
Self-contained EXE ohne .NET-Installation
GitHub Actions CI/CD Pipeline
eBay: Eigene Mengen je Angebot/Variante (Auffuellmenge + Mindestmenge mit automatischem Auffuellen, Checkbox Restbestand abverkaufen, Ueberverkaufsschutz)
eBay: Auktionen im Lister (Laufzeit 1/3/5/7/10 Tage, Startpreis, optional Mindestpreis; genau eine Variante; manuelles Neu-Einstellen nach Auktionsende)
eBay: Out-of-Stock-Control wird jetzt echt im eBay-Konto geprueft und kann per Klick aktiviert werden (Menge 0 nur bei verifiziertem Status)
Kaufland W9 Belegabgleich (PROJ-642): Kaufland-seitige Erstattungen aus dem Bookings-Report automatisch verbuchen inkl. Billkom-Gutschrift (Voll + Teil), 3-facher Doppelbuchungs-Schutz
Shopify-Push überträgt jetzt die Produktbild-Galerie mit — Titelbild zuerst, bei Varianten-Produkten bekommt jede Variante automatisch das Bild ihres Kind-Artikels (PROJ-643)
Neue Aktion „Bilder übertragen“ auf der Shopify-Karte im Plattformen-Tab: ersetzt die Shopify-Produktbilder bereits gelisteter Artikel durch die aktuelle Flowkom-Galerie (PROJ-643)
Shopify-Push-Dialog zeigt vorab, welche Bilder mit übertragen werden (Thumbnail-Vorschau + Zähler, Hinweis bei Artikeln ohne Bilder) (PROJ-643)
eBay Theme-Designer: professionelle Angebotsvorlagen per Konfigurator (Layout, Farben, Schriften, Logo, eBay-Links) mit Live-Vorschau — statt HTML von Hand (PROJ-631 W9c)
eBay Themes: neue CSS-Bildergalerie mit klickbaren Thumbnails aus den Flowkom-Produktbildern ({{galerie}}-Platzhalter) (PROJ-631 W9c)
Kaufland-Direktanbindung komplett (PROJ-642 W1-W8): Bestellimport, Versandbestätigung, Bestands-Push, Storno/Refund-Push (gated), Listings-Inventur + Zuordnung, Lister (EAN-Attach + Produktdaten-Anlage), Retouren + Tickets, Multi-Storefront DE/AT/CZ/SK/PL/FR/IT
Gemeinsame Produkttexte am Artikel (Bulletpoints + Marketing-Beschreibung) als Quelle für Kaufland/eBay/Otto/Shopify-Lister
eBay-Lister: MwSt-Satz je Angebot (Default 19 %) und optionaler Streichpreis werden an eBay übertragen (PROJ-631 W9b)
eBay-Lister: Kategorievorschläge zeigen den vollen Kategoriepfad + neuer Kategoriebaum-Browser zum Durchklicken (PROJ-631 W9b)
eBay-Lister: Fehlgeschlagenes Veröffentlichen zeigt jetzt eine vollständige Fehlerliste mit Sprung zum betroffenen Schritt (PROJ-631 W9b)
eBay: Design-Themes für Angebotsbeschreibungen — Verwaltung mit Live-Vorschau in den Integrations-Einstellungen, Platzhalter (Titel/Beschreibung/Merkmale/Bilder) werden beim Veröffentlichen zu HTML gerendert (PROJ-631 W9)
eBay: Angebots-Vorlagen — im Lister als Vorlage speichern, Standard-Vorlage pro Integration wird bei neuen Angeboten automatisch angewandt, inkl. Preisregel VK + X % (PROJ-631 W9)
eBay: Theme auf bestehende Angebote anwenden — gedrosselter Bulk-Re-Render mit Tages-Limit-Schutz (PROJ-631 W9)
eBay-Lister: Freitext-Werte bei Merkmalen, eigene Merkmale hinzufügen, und Entwurf speichern (Formularstand geht beim Abbrechen nicht mehr verloren)
Kaufland-Direktanbindung W0 (PROJ-642): Verkäuferkonto per API-Schlüssel verbinden (HMAC-signierte Seller-API), geführtes Onboarding, Marktplatz-Auswahl (DE/AT/CZ/SK/PL/FR/IT)
Otto-Lister: Titel-Attribute (Modellbezeichnung, Set-Typ, Set-Info, Besondere Merkmale) prominent im Formular + GPSR-Vorlagen mit Schnellauswahl (PROJ-641 W7)
PROJ-631 W8a: eBay-Lister Foundation — Produkte aus Flowkom als eBay-Angebote listen/aktualisieren/beenden (Inventory/Metadata/Account APIs, unsigniert). Mehrstufiger Lister-Dialog (Kategorie/Merkmale/Inhalt/Richtlinien), hartes Preflight, Varianten-Familien. Default-safe (kein Auto-Publish, reversibel via withdraw), Live-Gates am Brixkom-Piloten offen
Otto-Lister komplett: alle Kategorie-Attribute (Gruppen, Empfehlungen, Mehrfachauswahl), Entwurf speichern + Jetzt listen, Versandprofil & Bearbeitungszeit (Artikel werden auf otto.de sichtbar), otto.de-Status live am Produkt, Preis-Push (PROJ-641 W5)
PROJ-631 W7b: eBay Erstattungs-/Storno-Push an eBay (signierter Geldpfad, default AUS) — Push-Jobs-Zustandsmaschine mit at-most-once-Garantie, issueRefund + Verkäufer-Storno + Käufer-Storno approve/reject, Cron-Drain, Dead-Letter-UI
Alle 6 eBay-Crons im Einstellungen→Cron-Jobs-Tab sichtbar (eigene eBay-Kategorie, Health-Dot + letzter-Lauf-Anzeige)
Otto-Integration: kompletter Lebenszyklus — Storno wird an Otto gemeldet, Otto-Teil-Stornos und Adressänderungen erreichen offene Aufträge, Erstattungs-Belege (Storno-/Service-/Teilerstattungen) werden automatisch verbucht (PROJ-641 W4)
Otto-Lister: durchsuchbare Kategorie-Auswahl über den vollen Otto-Katalog (14.000+ Kategorien, gecacht), USt-Option 'Keine (Differenzbesteuerung)', Hersteller/Vertreiber-Auswahl beim Wirtschaftsakteur
Otto: Retourenlabel automatisch beim Versand erzeugen — konfigurierbar pro Integration (Schalter + Retouren-Versanddienstleister, aktuell DHL; GLS/Hermes vorbereitet)
Otto-Produktlister: Artikel direkt aus Flowkom bei Otto listen (Kategorie/Marke/Pflicht-Attribute/Preis/USt/GPSR, asynchroner Publish-Status mit Ablehnungsgrund, Bestandssync-Schalter je Listing)
eBay-Direktanbindung W7a (PROJ-631): Käufer-Stornoanfragen werden erkannt und angezeigt. Ein Hintergrund-Job liest offene Käufer-Stornoanträge bei eBay und zeigt sie direkt am betroffenen Auftrag an (plus Benachrichtigung) — Flowkom storniert oder erstattet dabei nichts automatisch. Pro Integration ein-/ausschaltbar (Standard AUS). Zusätzlich das technische Fundament für die kommende automatische Storno-/Erstattungs-Abwicklung (eBay-Digital-Signaturen, gegen eBays offiziellen Test-Vektor abgesichert).
Otto-Marktplatz: Retouren direkt in Flowkom. Eingehende Ruecksendungen pruefen und annehmen (Otto erstattet daraufhin den Kunden) oder mit Grund ablehnen — inklusive Retour-Tracking und Link zum Flowkom-Auftrag. Kein Gang ins Otto-Portal mehr noetig.
eBay-Direktanbindung W6 (PROJ-631): automatische Versandbestätigung. Sobald eine übernommene eBay-Bestellung in Flowkom als versendet gilt, meldet ein Hintergrund-Job die Trackingnummer + den Versanddienstleister an eBay — der Käufer bekommt die eBay-native Versandbenachrichtigung. Der Versanddienstleister wird automatisch erkannt (DHL, DHL Express, Deutsche Post, DPD, GLS, Hermes) und lässt sich pro Versandart überschreiben, falls die Erkennung daneben liegt. Absicherungen: doppelte Bestätigungen sind ausgeschlossen (Flowkom prüft vor jeder Meldung den aktuellen Stand bei eBay), eine Bestellung ohne erkennbare Tracking-Daten wird erst gemeldet, sobald die Nummer vorliegt, und wiederholt scheiternde Bestätigungen erzeugen eine Fehler-Benachrichtigung. Pro Integration ein-/ausschaltbar (Standard AUS).
Otto-Marktplatz: Grundlage fuer natives Produkt-Listing. Otto-Kategorien und -Marken sind jetzt abrufbar — das Fundament fuer den spaeteren Listing-Assistenten, mit dem Artikel direkt aus Flowkom bei Otto eingestellt werden.
Otto-Marktplatz: Bestandsuebertragung (Lager -> Otto). Der verfuegbare Lagerbestand der zugeordneten Artikel wird an Otto uebertragen — Transit- und FBA-Bestaende ausgeschlossen, offene Reservierungen abgezogen. Standardmaessig aus; nur im Direkt-Modus.
Otto-Marktplatz: Versandbestaetigung. Versendete Otto-Bestellungen werden mit Trackingnummer und Retourenlabel automatisch an Otto gemeldet. Standardmaessig aus; manuell oder automatisch pro Verbindung.
eBay-Direktanbindung W5 (PROJ-631): automatischer Bestands-Push WMS → eBay. Sobald sich der verfügbare Bestand eines übernommenen Artikels ändert (Bestellung, Wareneingang, CSV-/JTL-Import, manueller Anstoß), überträgt Flowkom die neue Menge automatisch an das eBay-Angebot. Die verfügbare Menge = Lagerbestand minus offene Kommissionierungen (Bundles korrekt heruntergerechnet), niemals unter 0. Pro Angebot doppelt abzusichern (Schalter an der Integration UND am Listing); mit Tages-Änderungsbudget gegen das eBay-Limit von 250 Revisionen pro Angebot/Tag, einem Schutz gegen versehentliches Beenden eines Angebots bei Menge 0 (nur mit bestätigter eBay-Bestandsverwaltung) und einem täglichen Sicherheits-Abgleich. Externer Scheduler ruft den 5-Minuten-Push-Job auf.
Otto-Marktplatz: Direkter Bestellimport. Otto-Bestellungen koennen jetzt direkt in Flowkom importiert werden — als Alternative zum Weg ueber Magnalister. Mit Doppel-Import-Schutz (keine Bestellung landet doppelt), korrekter Netto-/Brutto-/Steuer-Ermittlung und Storno-Erkennung. Standardmaessig aus; pro Otto-Verbindung aktivierbar.
Otto-Marktplatz: Artikel manuell zuordnen. In der Otto-Integration laesst sich jeder Otto-Artikel manuell einem Flowkom-Artikel zuordnen (oder die Zuordnung loesen) — mit Filter "nur nicht zugeordnete" und Suche, fuer SKUs, die die automatische Zuordnung nicht trifft.
Sprachauswahl als Dropdown + mehr Sprachen (Beta, PROJ-636): Die Sprachauswahl in den Konto-Einstellungen ist jetzt ein Dropdown mit Deutsch, English, Español, Français, Italiano, Nederlands und Türkçe. Vollständig übersetzt sind aktuell Deutsch und Türkisch; die übrigen Sprachen sind als „· in Arbeit“ markiert und erscheinen bis zur Fertigstellung überwiegend auf Deutsch (Beta-Hinweis in der Oberfläche).
eBay-Direktanbindung W4 (PROJ-631): Listing-Adoption — bestehende aktive eBay-Festpreis-Angebote per Klick unter die neue Bestandsverwaltung (Inventory API) bringen. Voraussetzung für den späteren automatischen Bestands-Push. Mit Eligibility-Vorprüfung (nur Festpreis + aktiv + SKU auf Listing und jeder Variante) samt konkreter Fix-Anleitung bei Blockern, Aktivierung der eBay Business Policies, familienweiter Übernahme pro Angebot und mehrschichtigem Schutz gegen versehentliche Doppel-Übernahme (die Migration ist endgültig). Nicht übernommene Angebote erhalten noch keinen Bestands-Push (folgt).
Produktverwaltung & Brainflow auf Türkisch (PROJ-634/635): Die komplette Produktverwaltung (Liste, Kanban, Tabelle, Filter, Detailseite, Anlegen/Bearbeiten, Varianten, Bundle) und das Brainflow-Notizmodul sind jetzt auf Türkisch verfügbar — umschaltbar pro User in den Konto-Einstellungen. Eingegebene Inhalte (Produkttitel, Notizen, Tags, SKU/EAN) bleiben unverändert. Weitere Module und Sprachen (z.B. Englisch) folgen schrittweise auf demselben Fundament. Hinweis: türkische Erstübersetzung, fachlicher Feinschliff folgt.
Mehrsprachigkeit — Fundament (PROJ-634): Flowkom kann jetzt pro User in einer anderen Sprache angezeigt werden. Neuer Sprachumschalter in den Konto-Einstellungen (Deutsch/Türkçe), die Wahl gilt nur für dich und folgt dir über Geräte. Deutsch bleibt Standard — für bestehende Nutzer ändert sich nichts.
Status & Notiz beim Produkt anlegen (PROJ-633): Im „Neues Produkt“-Popup lassen sich jetzt der Kanban-Status (Board-Spalte) und eine erste Notiz direkt setzen — statt sie nachträglich per Board-Drag bzw. Notizen-Tab zu ergänzen. Beim Anlegen ist die erste Board-Spalte vorausgewählt; das Status-Feld erscheint auch im Bearbeiten-Popup.
eBay Adoption-UI (W4): Übernehmen-Aktion pro Zeile + Bulk (Inventory API), Eligibility-Badges pro Listing, Business-Policies-Opt-in-Banner, irreversibler Bestätigungs-Dialog
eBay-Direktanbindung W3 (PROJ-631): Direkter Bestellimport — eBay-Bestellungen laufen jetzt direkt (ohne magnalister-Umweg) in Flowkom ein, mit automatischer Artikel-Zuordnung, Kunden-Dedupe, korrekter Steuer-/Rabatt-/Total-Übernahme, konfigurierbaren Filtern + Vorschau, nächtlichem Import-Cron + manuellem Import, und Doppel-Import-Schutz gegen dieselben eBay-Bestellungen, die parallel via Shopify laufen; Cutover-Checkliste (magnalister-Abgleich abschalten) in der eBay-Integration
eBay-Direktanbindung W2 (PROJ-631): Angebots-Inventur — bestehende eBay-Angebote (auch magnalister-erstellte) werden read-only eingelesen, automatisch per SKU den Flowkom-Produkten zugeordnet und in einer Angebots-Verwaltung gepflegt; Fundament für Angebots-Übernahme + Bestands-Sync
eBay-Direktanbindung W1 (PROJ-631): Produktbild-Galerie — mehrere Bilder pro Artikel mit Drag&Drop-Sortierung, Titelbild-Auswahl und clientseitiger Kompression; Fundament für den späteren eBay-Lister
eBay-Direktanbindung W0 (PROJ-631): OAuth-Verbindung fürs eBay-Verkäuferkonto (Ein-Klick-Consent, verschlüsselter Refresh-Token, Re-Connect bei Ablauf), eBay-Integrations-Detailseite, Account-Löschungs-Endpoint (Pflicht für eBay-Production-Keys) und eBay-REST-Client-Fundament
PROJ-630: PDF-Inventurliste mit Festschreibungs-Hinweis. Die Bestandsbewertung lässt sich jetzt als druckbare PDF-Inventurliste exportieren — live oder zu jedem Stichtag (z. B. Monatsultimo für die Buchhaltung). Das PDF enthält den Summen-Block inklusive bezahltem Zulauf, alle Artikel mit Menge, Einstandspreis und Wert sowie einen Hinweis, welcher Anteil des Lagerwerts noch nicht durch kostenfestgeschriebene Bestellungen gedeckt ist (diese Kosten können sich rückwirkend ändern).
PROJ-629: Zahlungsstatus-Verlauf an der Lieferantenbestellung. Im Verlauf-Tab der Bestellung gibt es jetzt eine zweite Sektion, die jede Änderung des Zahlungsstatus (bezahlt / anbezahlt / unbezahlt) mit Zeitpunkt und Nutzer zeigt — automatische Änderungen sind als solche markiert. Damit ist jederzeit nachvollziehbar, warum die Stichtags-Bestandsbewertung eine Bestellung zu einem Datum als bezahlt oder unbezahlt zählt.
Nachfüllung: Nachfüllbedarf-Benachrichtigung — pro Profil aktivierbar (Default aus), prüft einmal täglich ab 7 Uhr und meldet Artikel unter dem Schwellenwert mit exakter Artikel-/Positions-Zahl
Nachfüllung: Überspringen mit optionalem Grund (mobil erfassbar, im Auftrags-Detail sichtbar)
Nachfüllung: Mitarbeiter-Zuweisung direkt in der Übersicht, Profil-Duplizieren, Vorschau im mobilen Erstellen-Dialog (Artikel/Positionen + Wagen-Check)
PROJ-628: Stichtags-Vergleich. Neue aufklappbare Karte in der Bestandsbewertung: zwei Stichtage wählen (Schnellwahl über Ultimo-Chips, als Vergleichsseite geht auch die Live-Ansicht) und vergleichen — Lagerwert-, Einheiten- und Artikel-Deltas auf einen Blick plus die 50 größten Wert-Veränderungen pro Artikel, inklusive neu aufgebauter und komplett abgebauter Artikel. Beantwortet direkt Fragen wie „was hat sich im Juni verändert?“.
PROJ-626: Bestandswert-Verlauf. Neue aufklappbare Chart-Karte in der Bestandsbewertung zeigt den Lagerwert zu den letzten 12 Monatsultimos — Kapitalbindung als Trend statt Einzelwert. Ein Klick auf einen Datenpunkt springt direkt in die Stichtags-Ansicht dieses Ultimos. Der Verlauf wird erst beim Aufklappen berechnet (rückwirkend aus der Lagerbewegungs-Historie, kein Snapshot nötig).
Nachfüllung W1 (PROJ-627): Storno/Überspringen buchen eingesammelte Ware transaktional vom Wagen auf den Quellplatz zurück (neue RPCs)
PROJ-625: Stichtag-Bedienung deutlich schneller. Im Stichtag-Kalender der Bestandsbewertung gibt es jetzt Schnellwahl-Chips (letzter und vorletzter Monatsultimo, letztes Quartalsende, 31.12. des Vorjahres) — ein Klick statt Kalender-Navigation. Der gewählte Stichtag steht außerdem in der URL: Ansichten lassen sich verlinken, neu laden und z.B. dem Steuerberater schicken. Und die Zulauf-Zeile ist jetzt aufklappbar und zeigt, welche Lieferantenbestellungen mit wie vielen Stück und welchem Wert im Zulauf stecken — in der Live-Ansicht genauso wie zu jedem Stichtag.
PROJ-622: Zahlungserfassung für Lieferantenbestellungen pro Mandant einstellbar. Neuer Bereich Einstellungen → Allgemein → Einkauf: Modus Status-Tag (Zahlungsstatus wird wie bisher von Hand am Auftrag gesetzt; Einzelzahlungen sind gesperrt, damit die Automatik den gesetzten Status nie überschreibt) oder Modus Einzelzahlungen (Zahlungen mit Datum/Betrag erfassen, Status wird automatisch berechnet und ist nur noch lesbar). Die Migration erkennt automatisch, welche Mandanten bereits Einzelzahlungen nutzen. Zusätzlich wird jeder Wechsel des Zahlungsstatus jetzt mit Zeitstempel historisiert — der Stichtags-Zulauf der Bestandsbewertung rechnet damit künftig tagesgenau, auch wenn nur der Status-Tag gepflegt wird (bezahlt → wieder unbezahlt wird zum jeweiligen Stichtag korrekt abgebildet).
PROJ-621: Daten-Hub — Import und Export laufen jetzt als Hintergrund-Jobs mit Fortschrittsanzeige („12.000 von 48.000 Zeilen“): große Dateien brechen nicht mehr mit „Bad Gateway“ ab, der Status ist jederzeit in der Job-Historie sichtbar, hängengebliebene Jobs werden ehrlich als fehlgeschlagen markiert.
PROJ-621: Daten-Hub — Kundenstamm ist jetzt importier- und exportierbar (inkl. Rechnungs-/Lieferadresse, USt-IdNr.; deutsche ERP-Spaltennamen werden automatisch zugeordnet); die Kundenverwaltung hat eigene Import-/Export-Buttons.
PROJ-621: Daten-Hub — Excel-Dateien (.xlsx/.xls) können direkt importiert werden, ohne Umweg über CSV.
PROJ-621: Daten-Hub — Importe lassen sich pro Job rückgängig machen: neu angelegte Zeilen werden gelöscht, bereits verwendete Zeilen (z.B. Artikel mit Bestand) bleiben geschützt und werden gemeldet.
PROJ-621: Daten-Hub — Onboarding-Checkliste „Erste Schritte“ führt neue Mandanten in der richtigen Reihenfolge durch den Erstimport (Artikel → Lagerplätze → Bestände → Lieferanten → Kunden).
PROJ-624: Die „Nachfüllung“ lässt sich pro Mandant ein- und ausschalten (Einstellungen → Lager & Versand → Nachfüll-Profile). Standardmäßig aus; wer bereits Nachfüll-Profile angelegt hat, behält den Menüpunkt. Angelegte Profile bleiben beim Ausschalten erhalten.
Workflows: Zeiteingabe in deiner Zeitzone — Uhrzeiten werden lokal eingegeben und angezeigt (UTC-Umrechnung inkl. Wochentagen passiert automatisch)
Workflows: Duplizieren per Klick (Kopie startet deaktiviert) und drei Starter-Vorlagen (Versand-Abschluss, Rechnung nach Versand, Unbezahlt-Meldung)
PROJ-619: Stichtags-Zulauf in der Bestandsbewertung. Die Stichtags-Bestandsbewertung zeigt jetzt auch die zum Stichtag voll bezahlte, noch nicht eingetroffene Ware aus Lieferantenbestellungen — als eigene Zulauf-Zeile plus Gesamt inkl. Zulauf, exakt wie in der Live-Ansicht. Rekonstruiert wird tagesgenau aus der Bestellstatus-Historie, dem Zahlungs-Ledger (Zahlungsdatum bis zum Stichtag, währungsbewusst) und den Wareneingangs-Zeitpunkten; Preise und Kurse fließen mit heutigem Stand ein. Fällt die Zulauf-Berechnung aus, bleibt die restliche Stichtagsbewertung unberührt.
Workflows: Klartext-Zusammenfassung — jeder Workflow erklärt sich als deutscher Satz („Wenn …, dann …"), live im Editor und als Untertitel in der Workflow-Liste
Workflows: Editor mit klarer WANN→WENN→DANN-Gliederung und gruppiertem, durchsuchbarem Feld-Dropdown mit Einheiten (EUR/g/Tage)
Workflows: neuer Trigger „Bei Statuswechsel" — Workflows laufen automatisch, sobald ein Auftrag auf einen gewählten Status wechselt (z.B. versendet → Folgeaktionen), statt auf den nächtlichen Zeitplan zu warten; Verarbeitung i.d.R. binnen 15 Minuten
Workflows: Dry-Run-Vorschau im Editor — „Treffer ermitteln" zeigt, wie viele Aufträge der Workflow AKTUELL treffen würde (inkl. Beispiel-Auftragsnummern), ohne irgendetwas zu ändern; funktioniert auch für ungespeicherte Änderungen
Workflows: „Auftrag testen" — Auftragsnummer eingeben und pro Bedingung sehen, warum ein Auftrag (nicht) getroffen wird, inkl. Hinweis wenn der Status außerhalb des gewählten Bereichs liegt
Workflows: neue Bedingung „Bestelldatum ÄLTER ALS X Tage" — z.B. für Erinnerungs- oder Aufräum-Workflows auf liegengebliebene Aufträge
Workflows: neue Aktion „Benachrichtigung senden" — erzeugt pro Lauf eine Meldung in der Glocke mit der Anzahl getroffener Aufträge (aktualisiert sich statt zu spammen)
Print Agent: Kopplungscode zeigt die WMS-Domain statt Server-Interna (z.B. web.flowkom.de-483921); die Verbindung wird beim Koppeln automatisch ermittelt (neue Route /api/print/broker-info)
Workflows: Fehlschlag-Benachrichtigungen — scheiterte ein zeitgesteuerter Workflow (inkl. Timeout/Claim-Fehler), erscheint eine workspace-weite Fehler-Meldung; der nächste Erfolgslauf (auch manuell) quittiert sie automatisch
Workflows: Due-Check-Catch-up — ein verpasster Scheduler-Tick holt den Tageslauf jetzt nach (überfällig seit letztem Soll-Termin statt ±15-Minuten-Fenster); neue/aktivierte Workflows starten erst mit ihrem nächsten Termin
PROJ-614: Stichtags-Bestandsbewertung. Die Profitbutler-Bestandsbewertung kann den Warenbestandswert jetzt zu einem beliebigen vergangenen Stichtag anzeigen (z.B. 31.05.2026) — rekonstruiert aus dem Lagerbewegungs-Ledger, ohne Snapshot-System. Neuer Stichtag-Datepicker auf der Bestandsbewertungs-Seite (leer = Live wie bisher), gleiche Ansicht mit Gesamtwert, Artikel-Liste und Lager-Aufschlüsselung zum Stichtag, Hinweis-Banner erklärt die Kostenbasis (heutiger Wissensstand, FIFO-Schichten historisch exakt). Zulauf- und Absatz-Kennzahlen bleiben der Live-Ansicht vorbehalten; CSV-Export trägt den Stichtag im Dateinamen. Technisch: neue SECURITY-DEFINER-RPC stock_quantities_at_date (workspace-gesichert, DST-sichere Berlin-Tagesgrenze), Bewertungs-Engine aus der API-Route extrahiert — Live- und Stichtag-Pfad teilen exakt dieselbe FIFO+Kaskaden-Logik.
PROJ-613: Daten-Hub — Import-Vorlagen funktionieren jetzt end-to-end: gespeicherte Vorlagen erscheinen im Import-Assistenten, und „Verwenden“ in der Vorlagen-Liste öffnet den Assistenten mit vorgewählter Tabelle und wendet die Vorlage nach dem CSV-Upload automatisch an.
PROJ-611: Workflows — Intervall-Trigger nutzbar (alle 15–720 Minuten); die Option war wählbar, wurde beim Speichern aber immer abgelehnt.
PROJ-611: Workflows — Verlaufs-Dialoge zeigen übersprungene Aufträge mit Begründung, 'Jetzt ausführen' verlinkt direkt zu den Details, Dark Mode im gesamten Modul.
PROJ-610: Amazon-Custom Personalisierung beim FBM-Import abholen (Gravur-Text/Font/Farbe je Oberfläche) — Anzeige nur im Kundenauftrag-Detail, opt-in Toggle (Default AUS), FBM-only. Neue Tabelle order_line_item_customizations + privater Bucket, SSRF-sicherer ZIP-Download, Reconcile-Cron gegen URL-TTL.
PROJ-609: Verkäufer-Bestellnummer-Pull läuft jetzt automatisch — huckepack am „Amazon Bestellstatus-Sync“-Cron (self-gedrosselt ~1×/Stunde, gleiches Muster wie der Finanzereignisse-Reconcile). Es ist KEIN eigener Eintrag im externen Scheduler mehr nötig; der Job bleibt in der Cron-Jobs-Übersicht sichtbar und per „Ausführen“ manuell startbar. „An Amazon senden“ (Push) ist davon unberührt.
PROJ-609: Amazon Verkäufer-Bestellnummer (SellerOrderId) — pro Amazon-Integration ein Modus (Aus/Von Amazon holen/An Amazon senden). Pull-Cron liest die von Amazon vergebene Verkäufer-Bestellnummer per getOrder (ohne RDT) in ein neues Auftragsfeld; Push überträgt eine im Auftrag gesetzte Flowkom-Nummer per OrderAcknowledgement-Feed (MerchantOrderID) an Amazon (nur FBM). Neues Feld orders.amazon_seller_order_number (+ Herkunft manuell/amazon) mit Inline-Edit im Auftragsdetail, Verlaufs-Eintrag und RadioGroup in der Integrations-Einstellung. Fehler 18025 (bereits bestätigt) wird still übersprungen, nicht als Fehler gemeldet.
PROJ-605 Kanal-scharfe Kundenbenachrichtigung (Shopify): Ein 'Kundenbenachrichtigung'-Schalter pro Verkaufskanal steuert, ob Shopify die Versand-/Erstattungs-/Retouren-Mail an den Kunden schickt. Marktplaetze (Otto/Kaufland/eBay) sind per Default stumm — behebt die Otto-Anlage-9-Beschwerde (automatische Mails an verschluesselte Relay-Adressen). Webshop-Kunden bekommen weiter ihre Bestaetigungen.
FreeScout→KI Kontext-Provider (/api/freescout/ai-draft): erdet KI-Antwortentwürfe im Helpdesk mit einem PII-minimierten Fakten-Sheet + Brainflow-SOPs über den eigenen LLM-Schlüssel des Mandanten (BYOK). Standard AUS, strikt isoliert — rohe Handelsdaten und der Schlüssel verlassen Flowkom nie.
Dashboard-Widgets zeigen jetzt echte Informationsdichte je Kachelgroesse (Mini/Standard/Breit/XXL) statt nur zu skalieren — jedes Widget rendert pro Groesse den sinnvollen Inhalt (Mini = eine Kennzahl, Breit = Aufschluesselung/Sparkline, XXL = Tabelle/GuV/Verlauf).
Kachelgroesse per bewusstem Dropdown-Picker waehlen (statt Blind-Klick-Wechsel).
Dezente (i)-Info-Einblendung bei erklaerungsbeduerftigen Kacheln.
Neues konfigurierbares Brainflow-Widget: Zuletzt bearbeitet, Suche, Aufgaben aus einer Sammlung und Schnell-Notiz — pro Nutzer im Bearbeiten-Modus einrichtbar.
Dashboard personalisierbar: eigene Abschnitte mit Ueberschriften anlegen, ein-/ausklappen und alles frei sortieren.
Dashboard-Kacheln in vier Groessen (Mini/Standard/Breit/XXL) — unwichtigere Infos kompakt statt fett.
Profitbutler als einzelne KPI-Kacheln (Umsatz/Gewinn/Marge) aufs Dashboard nehmbar, zusaetzlich zur grossen Uebersicht.
Dashboard-'Anpassen' ist jetzt ein dezenter Stift.
Dashboard: 'Gestern'-Zeitraum ueberall (Profitbutler-Cockpit + 'Heute versendet'-Popup).
Dashboard: Profitbutler-Kacheln (Umsatz/Gewinn/Marge) per Klick mit Vorwochen-/Vormonatsvergleich (Umsatz + Bestellungen).
FreeScout-Brainflow-Import: interne Ticket-Notizen optional mitnehmen (Toggle im FreeScout-Modul)
Dashboard-Personalisierung: Widgets ein/aus, Reihenfolge per Drag & Drop, Größe normal/breit, Inline-Bearbeiten-Modus + Widget-Katalog (PROJ-589)
FreeScout-Import: Zielseite wird automatisch zur Brainflow-Sammlung mit konfigurierbaren Ticket-Spalten (Ticket-Link, Nr, Kunde, Postfach, Kanal, Datum)
FreeScout-Brainflow-Import (PROJ-588): E-Mails/Tickets aus FreeScout mit einem Klick als Brainflow-Seite in Flowkom sichern — die Seite gehört dem eingeloggten Nutzer, öffnet sich im neuen Tab; ein-/ausschaltbar und nur nutzbar, wenn Brainflow im Workspace aktiv ist
Dashboard-Detailansichten: Klick auf die Kachel Heute versendet zeigt die Aufschluesselung nach FBM/FBA, Versandart und Lager (mit Zeitraum-Umschalter); Klick auf Offene Auftraege zeigt Alter und Verkaufskanal. Neue Braucht-Aufmerksamkeit-Zeile mit Direktspruengen (Versandfehler, Ueberverkaeufe, unbezahlt seit ueber 3 Tagen, offene Picklisten, ASIN-Konflikte) erscheint nur, wenn es etwas zu tun gibt (PROJ-587)
Dark Mode fuer die gesamte App: umschaltbar zwischen Hell, Dunkel und System (oben rechts neben der Glocke sowie in Einstellungen -> Konto). Standard bleibt Hell; die Wahl gilt pro Nutzer und wird auf allen Geraeten uebernommen. Kuratierte dunkle Optik mit guter Lesbarkeit, alle Flaechen durchgaengig unterstuetzt (PROJ-586)
System-Lagerplätze (Wareneingangsplatz, Nachfüllwagen, Sperrlagerplatz, FBA-POOL) sind jetzt umbenennbar und deaktivierbar: bei mehreren Lagern tragen sie automatisch den Lagernamen als Zusatz (z.B. "Wareneingangsplatz (Westheim)") und lassen sich über das Zeilen-Menü umbenennen; Deaktivieren ist nur bei leerem Platz möglich, hartes Löschen bleibt gesperrt. Barcode und Funktion bleiben dabei stabil — gedruckte Etiketten und die Bestandslogik sind vom Umbenennen nicht betroffen (PROJ-585).
Dashboard: Die Profitbutler-Kacheln (Umsatz/Gewinn/Marge) zeigen jetzt echte Zahlen aus dem Profitbutler-Modul statt einer festen Pauschale — Netto-Umsatz, echter Gewinn nach Wareneinsatz/Gebühren/Werbung/Versand/Fixkosten und eine variable Marge. Neu: Zeitraum-Umschalter (Heute/Diese Woche/Dieser Monat/Vormonat), Trend gegen die Vorperiode, Ist/Schätzung-Kennzeichnung und eine aufklappbare Gewinn-Aufschlüsselung mit Kanal-Split (PROJ-584)
Kundenaufträge: der Überverkäufe-Filter (offene Aufträge, deren Positionen der verfügbare Bestand nicht deckt) ist jetzt auch als Schalter im Filter-Menü verfügbar — nicht mehr nur über die Dashboard-Kachel (PROJ-582)
Lieferantenbestellungen: neuer Schalter „Festgeschriebene ausblenden" (standardmäßig an) blendet abgewickelte Bestellungen aus Liste, Kanban und den Zählern aus, damit die Übersicht schlank bleibt (PROJ-581)
Lieferschein automatisch drucken: neuer Schalter im Picklisten-Profil — beim Versand wird der Billkom-Lieferschein erstellt und am Dokumentendrucker der Workstation mitgedruckt (PROJ-580)
Packflächen-Karte im Dashboard: aktive Stationen, Durchsatz, versandbereite Aufträge und Versandschluss-Countdown je Versandart mit Detail-Dialog (PROJ-580)
Versandschluss (Cutoff-Zeit) pro Versandart konfigurierbar (PROJ-580)
Überverkauf-Filter: Dashboard-Kachel + Filter in den Kundenaufträgen zeigen offene Aufträge, deren Bestand nicht verfügbar ist (PROJ-580)
Neue Hilfe-Seite Einkauf → Lieferantenbestellungen (Statuswege, Kanban, Detail-Tabs, Festschreiben, FAQ) + Hilfe-Button auf der LB-Übersicht (PROJ-574 W8)
Lieferanten-Detailseite: Kennzahlen (offene Bestellungen, Einkaufsvolumen 12 Monate, Ø-Lieferzeit Ist vs. zugesagt), Bestellhistorie mit Deep-Links und vollständige Stammdaten-Karte (PROJ-574 W7)
Lieferanten-Detailseite: Zuordnungen mit Suche + Seiten und neuem Produkt-zuordnen-Dialog (PROJ-574 W7)
Lieferanten-Formular in Tabs (Stammdaten/Kontakt/Adresse/Bank/Sonstiges) mit Nächste-Nummer-Hinweis, Duplikat- und Währungswechsel-Warnung (PROJ-574 W7)
Bestellvorschlag: Reichweite-Spalte (reicht bis TT.MM., rot bei Engpass vor Liefereintreffen) und Lieferzeit des Lieferanten fließt in den Prognose-Horizont ein (PROJ-574 W6)
Bestellvorschlag: Mengen direkt in der Tabelle anpassbar (Inline-Override mit MOQ-Hinweis), Bulk-Add übernimmt die angepassten Mengen (PROJ-574 W6)
Lieferantenbestellung: Wareneingänge-Tab im Detail zeigt alle gebuchten Wareneingänge mit Positionen und Lagerplätzen (PROJ-574 W5)
Versand Multi-Station: „Nächster Auftrag“-Zuteilung (atomar, picklisten-scoped) + „In Arbeit“-Transparenz + Picklisten-Fortschritt (PROJ-568 Welle 2)
Kanban-Sortierung: vordefiniert (Neueste/Titel/SKU) oder eigene Reihenfolge per Drag-and-Drop, pro Benutzer gespeichert; beim ersten Verschieben wechselt die Ansicht automatisch auf „Eigene Reihenfolge“, Varianten-Familien wandern als Block, zurücksetzbar (PROJ-571 W5)
Vollständigkeits-Check pro Artikel: konfigurierbare Pflichtfelder, Badge + Fortschritt zeigen, was noch fehlt (PROJ-571 W4)
Lieferantenbestellungen: Kanban mit Drag & Drop (Status per Ziehen wechseln, erlaubte Ziele werden hervorgehoben) und neuer Überfällig-Tab mit Server-Zähler (PROJ-574 W4)
Betreiber-Zugang auf Kundeninstanzen: eine Server-Allowlist (OPERATOR_EMAILS) schaltet dem Betreiber dort Cron-Jobs, Logs und eine neue Instanz-Überwachung (Cron-Status + offene Fehler über alle Workspaces) frei — Mandanten sehen davon nichts.
PPC-Butler: Kind-Artikel direkt am Elternartikel verwalten — neue Karte im PPC-Butler-Tab pusht manuelle Variablen-Werte pro Kind einzeln oder mit 'Alle setzen' für alle Varianten auf einmal (pro Marktplatz).
Benachrichtigungen: Cron-Fehler-Meldungen erledigen sich automatisch, sobald derselbe Cron wieder erfolgreich durchläuft („Erledigt von System — Lauf wieder erfolgreich“); schlägt er erneut fehl, öffnet sich die Meldung von selbst wieder.
Produktliste: Suche und Filter durchsuchen jetzt den gesamten Katalog direkt in der Datenbank (auch bei zehntausenden Artikeln); Schalter unter Einstellungen → Produkte → Produktliste
Produkt-Aufgaben: Auf jeder Kanban-Karte lassen sich Aufgaben mit optionaler Person festhalten und direkt abhaken (mit Rückgängig); dazu Aufgaben-Filter, Bereich im Produktdetail und optionale Tabellen-Spalte
Karten-Dichte: Schalter Kompakt / Standard / Detailliert fürs Produkt-Kanban (pro Person gespeichert); Detailliert zeigt Tags, Aufgaben und einen Fortschrittsbalken; Artikel lassen sich direkt von der Karte aus einer Person zuweisen
Benachrichtigungen: Glocke mit Vorschau-Popover — offene Fehler und neue Aktionen direkt im Header sehen, ohne die Arbeitsfläche zu verlassen.
Benachrichtigungsseite modernisiert: „Weitere laden“ für ältere Meldungen, sprechende Link-Beschriftungen („Auftrag öffnen“ statt „Log anzeigen“), relative Zeitstempel, Mobile-Layout.
Deutsche Post: Portokatalog aktualisiert sich jetzt live aus der Internetmarke-API (Preise + Verfügbarkeit, täglicher Abgleich) — bei der nächsten Portoerhöhung laufen Briefkäufe weiter statt mit veralteten Preisen zu scheitern; Benachrichtigung bei Preisänderungen und abgeschalteten Produkten inkl. Warnung, wenn eine Versandart betroffen ist (PROJ-560)
Amazon: In Seller Central erstattete Fremdwährungs-Refunds (UK/SE/PL …) werden jetzt automatisch über den Order-Wechselkurs in EUR gebucht (inkl. Gutschrift); ohne verwertbaren Kurs weiterhin Archiv + Benachrichtigung (PROJ-559)
Produktverwaltung: Tags-Massenbearbeitung (PROJ-532) — Tags im „Feld setzen“-Dialog mehrfach hinzufügen/entfernen
Amazon-Integration Härtung (PROJ-558, Phasen A–H): PII-Retention-Cron (30 Tage, Toggle default AUS, Dry-Run-Vorschau), Versandbestätigung ohne Falsch-Bestätigungen (Result-Verifikation, Plausibilitätsgate, nur Outbound-Tracking), FBA-Pull-Guard gegen Bestands-Komplett-Nullung, Refund-Push positionsgenau verteilt mit Doppel-Refund-Schutz (Claim + feed_id-Sofort-Persist), Finance-Events Claim-first (nie Doppel-Buchung) inkl. Promotions in der Erstattungs-Summe, Lease-Lock-Tabelle statt Session-Locks, Credentials nie mehr im Browser, ehrliche Fehler-Notifications (Auth, Dead-Letter, Carrier-Mapping)
Print Agent: Broadcast-Aufweck-Kanal — Server weckt den Agent nach jedem Druckjob sofort per Push (PROJ-549)
Print Agent: Download-Button in den Drucker-Einstellungen lädt den neuesten Installer (PROJ-544)
Print Agent: Ein-Code-Kopplung — Kopplungscode enthält die Server-Adresse, kein URL-Eintippen mehr (PROJ-548)
Pan-EU-FBA (PROJ-554): Warenabgangsland aus dem Amazon-Versandbericht; USt-Auswertung weist Verkäufe aus ausländischen FBA-Lagern an Kunden im selben Land korrekt als 'Lokal im Lagerland' aus (lokale Voranmeldung statt OSS)
Shopify DSGVO-Pflicht-Webhooks (PROJ-543): HMAC-verifizierter Endpoint für customers/data_request, customers/redact und shop/redact mit Admin-Benachrichtigung
Zeilen-basierter Status-Sync-Lock pro Integration
Zeilen-basierter Import-Lock pro Integration (Cron und manueller Import laufen nie mehr parallel)
Profitbutler Live-BWA (PROJ-553): neuer Tab mit monatlicher betriebswirtschaftlicher Auswertung (Netto-Umsatz, Rohertrag, Deckungsbeitrag, Betriebsergebnis je Monat + Jahressumme), laufender Monat tagesaktuell
Billkom Sammel-ZIP für den Steuerberater (PROJ-551): alle Belege eines Zeitraums als ZIP mit MANIFEST, Monats-Picker in der Belegzentrale
Billkom Skonto-Snapshot (PROJ-552): Skonto aus den Einstellungen wird beim Finalisieren GoBD-fest am Beleg gespeichert und erscheint auf der PDF und in den Zahlungsbedingungen der E-Rechnung
Billkom Archiv-Trilogie (PROJ-550): Original-Download aus dem GoBD-Archiv (byte-identisch zum SHA-256), Entwurfs-PDF-Vorschau mit ENTWURF-Wasserzeichen, automatischer Archiv-Backfill aller Bestandsbelege
Profitbutler: Fixkosten-Tab zeigt normalisierte Monatslast (≈ €/Monat) je Eintrag
Profitbutler: Fixkosten-Einträge duplizieren
Profitbutler: Direktlink Fixkosten verwalten aus der GuV-Tabelle
Profitbutler: Einrichtungs-Check warnt bei Fixkosten-Einträgen, die still nicht wirken (verwaister Kanal, fehlender Stichtag-Wochentag, Alt-Pause)
Profitbutler: Betrag ändern ab Datum — Mieterhöhungen & Co. beenden den alten Fixkosten-Eintrag und legen automatisch einen Nachfolger an, vergangene Auswertungen bleiben unverändert
Profitbutler: GuV zeigt Deckungsbeitrag (vor Fixkosten) und Fixkostendeckung in Prozent
Profitbutler: Einmalkosten (z.B. Messe, Anschaffung) — am Stichtag gebucht oder über einen Zeitraum verteilt
Profitbutler: neue Hilfeseite zu Fixkosten (inkl. Hinweis: Beträge netto erfassen)
Profitbutler: Fixkosten fair auf Verkaufskanäle verteilt — kanalspezifische Kosten zu 100% ihrem Kanal, allgemeine anteilig nach Umsatz; Kanal-GuV zeigt neue Zeile Fixkosten (anteilig)
Profitbutler: GuV-Zeile Fixkosten zeigt beim Aufklappen jeden Eintrag einzeln
Profitbutler: Chart-Gewinnlinie enthält jetzt die tagesgenauen Fixkosten (passt zur Heute-Kachel)
Billkom-Belegzentrale: eigene Modul-Seite mit Belegübersicht, Filtern, Suche und Offene-Posten-Liste inkl. KPI-Kacheln (PROJ-545)
Billkom: Reverse-Charge für EU-B2B — USt-IdNr. am Kunden mit VIES-Prüfung, 0 % nur bei frisch validierter ID (PROJ-534)
Produkte: Tags per Massenbearbeitung setzen — im Dialog 'Feld setzen' lassen sich Tags jetzt fuer die gesamte Auswahl hinzufuegen oder entfernen.
Produkte: Bulk-Aktion 'Wiederherstellen' — steht die Filterleiste auf Archiviert, bietet die Massenleiste das Wiederherstellen an.
Produktfilter: Artikeltyp-Filter (Bestandsgefuehrt / Service-Artikel) in die Filterleiste integriert.
PROJ-527: Manuelle Auftragsanlage — Rabatt in Euro (pro Position %/€-Umschalter + Gesamtrabatt proportional verteilt) und Versandkosten-Schnellfeld (als Freiposition).
Mobile-App-Update-Endpoint: die Scanner-App kann neue Versionen über den Flowkom-Server finden und laden (GitHub-Release-Proxy, PROJ-530)
Billkom: Beleg-Archivierung mit SHA-256-Hash beim Finalisieren (GoBD-Nachweis), Storno-PDFs mit Wasserzeichen weiter abrufbar (PROJ-530)
Billkom: §19 Kleinunternehmerregelung als Schalter, OSS-Schwelle prüft jetzt auch das Vorjahr, Territorien (Nordirland/Monaco/Kanaren) korrekt (PROJ-530)
Billkom: Steuersatz-Pflege in den Einstellungen + Einrichtungs-Check-Banner für fehlende Pflichtangaben (PROJ-530)
Billkom: E-Rechnung referenziert bei Gutschriften die Ursprungsrechnung (BT-25); PDF bricht lange Belege sauber um (PROJ-530)
Billkom als Modul schaltbar: Toggle 'Billkom (Rechnungsmodul)' in Einstellungen -> Allgemein (bestehende Workspaces bleiben aktiv, neue starten ohne Billkom)
Picklisten-Profile: Ausschluss-Filter Verkaufskanal + Lieferland ('alles ausser ...') — Auftraege ohne Kanal/Land bleiben drin, eigene 'ohne ...'-Chips in der Profil-Liste
Boxen-Picking: Picklisten-PDF zeigt Box-Ziele (Box-Spalte in Pick-Positionen, Auftraege Box-sortiert, Wagen-Zeile im Kopf)
Boxen-Picking: Wagen-Barcode (WGN-Code) — Barcode-Dialog in den Wagen-Einstellungen zum Aufkleben; Scan im Versand oeffnet die offene Pickliste des Wagens direkt (auch Picklisten-Nummer scannbar)
Boxen-Picking (Boxenkommissionierung): Boxenwagen als Stammdaten (Einstellungen → Boxen-Picking), Picklisten-Profil-Modus 'Boxen-Picking' mit Wagen-Auswahl und Sammelbox-Option
Boxen-Picking: deterministische Box-Vergabe beim Erstellen (aelteste Auftraege zuerst, 1-Artikel-Auftraege gebuendelt in die Sammelbox, Sammelpakete = eine Box)
Boxen-Picking: Versand-Ansicht sortiert nach Box (Sammelbox als 'S'), Box-Spalte im Picklisten-Detail
Picklisten-Profile: Catch-All-Schalter — ein Profil nimmt jeden offenen Auftrag, ohne einzelne Filter zu pflegen (Zahlungsstatus, Lagerbereich und Mengenbegrenzung gelten weiterhin)
Picklisten-Profile: neue Filter Verkaufskanal, Lieferland und Artikel (enthaelt-Semantik)
Picklisten-Profile: 'Warum? Details anzeigen' am Hinweis 'X von Y Auftraegen passen zu keinem Profil' — zeigt pro Auftrag den Grund je Profil, gruppiert nach Ablehnungs-Muster
Profitbutler: Einrichtungs-Check — das Dashboard warnt jetzt, wenn der Gewinn mit unvollständigen Stammdaten gerechnet wird (Lieferländer ohne Versandkosten-Satz, Artikel ohne Standard-Versandart oder ohne Einkaufspreis); der Hinweis zeigt die konkreten Lücken mit Beispiel-Artikeln und verschwindet automatisch, sobald alles gepflegt ist
Profitbutler: Der Schalter „Retouren einrechnen“ funktioniert jetzt auch im Dashboard — KPI-Kacheln und Kanal-Tabelle zeigen auf Wunsch den Gewinn nach Retouren (USt-korrigiert abgezogen), die aufklappbare Kanal-GuV weist den Abzug als eigene Zeile aus; die Einstellung gilt gemeinsam für Dashboard, Artikel- und Regionen-Tab
Picklisten-Profile: Dialog in 3 Tabs (Filter | Kommissionierung | Versand & Druck) - deutlich uebersichtlicher, Scan-Modus semantisch unter Kommissionierung
Picklisten-Profile: Starter-Vorlagen (Alle bezahlten Auftraege / One-Scan Express / Stapeldruck ohne Scan) + Profil duplizieren
Picklisten-Profile: Verhalten-Badges in der Liste (Stapeldruck / Auto-Versand / inkl. unbezahlt / Fehler: weiter)
Stapeldruck: identische Auftraege per Ein-Klick versenden - Picklisten-Profil-Schalter, Versand-Ansicht gruppiert nach Artikel x Menge, Batch-Druck je Gruppe ueber den bestehenden Versandweg (ohne Scan), Packliste je Gruppe
PDF-Ausgabe ohne Drucker: Pseudo-Workstation "PDF-Ausgabe (im Tab oeffnen)" - Labels als Sammel-PDF, Zolldokumente als zweite Datei
Profitbutler: Datenbasis-Badge auf allen Auswertungsflächen — Dashboard, Artikel, Regionen und Produkt-Auswertung zeigen jetzt oben, ob mit echten Amazon-Kosten (Sellerboard) oder kalkulierten Kosten (Soll) gerechnet wird; ein Klick erklärt die Datenbasis, die Abdeckung, die Einkaufspreis-Herkunft und warum Artikel/Regionen bewusst kalkulatorisch bleiben
Bestellvorschlag: Neue Spalte Retouren zeigt die Retourenquote des Analysezeitraums pro Artikel (Vorgänge ÷ Aufträge, farbcodiert ab 10 %/25 %).
Bestellvorschlag: Filter 'Nur mit Vorschlag' und Summenzeile mit der gesamten vorgeschlagenen Menge.
Profitbutler Kanal-Tabelle: jede Zeile (inkl. Amazon-Marktplätze) klappt zur Berechnungs-Aufstellung auf — Umsatz, Stornos, Waren, Versand, Verpackung, Pick&Pack, Amazon-Gebühren, Werbung, USt = Gewinn, jede Kostenzeile mit Herkunfts-Kennzeichnung (Ist aus Sellerboard / Soll-Modell / Mischung mit Tage-Verteilung); Erstattungen als nachrichtliche Zeile mit Hinweis zum Sellerboard-Vergleich
Profitbutler: Echte Amazon-Kosten (Sellerboard) per Schalter — ersetzt Soll-Provision durch echte Amazon-Gebühren (inkl. FBA-Fulfillment) und Soll-Werbung durch echte Ads-Kosten je Tag und Marktplatz; Verpackung/Pick&Pack zählen nur noch für FBM; Badge „Amazon: Ist-Kosten“ zeigt die Abdeckung, Tage ohne Sellerboard-Daten bleiben ehrlich auf Soll; vollständig abschaltbar (automatische Neuberechnung der letzten ~90 Tage beim Umschalten)
Profitbutler: Perioden-Vergleich (vs. Vorperiode / vs. Vorjahr) in Artikel- und Regionen-Tab — Delta-Anzeigen unter Umsatz/Gewinn, Steiger/Faller-Sortierung per „Δ Umsatz“-Spalte
Bestandsbewertung: Ladenhüter-Auswertung — neue Spalten Absatz/Tag (alle Kanäle, Fenster wählbar), Reichweite und Letzter Verkauf; Schalter „Nur Ladenhüter“ mit gebundenem Kapital
Profitbutler: Schalter „Retouren einrechnen“ in Artikel- und Regionen-Tab — Gewinn/Marge wahlweise nach Retouren (USt-korrigierter Netto-Abzug)
Profitbutler: neuer Tab „Versand“ — Sendungen je Versandart (DHL Paket, Kleinpaket, Briefe, FBA, Zusatz-/Retouren-Labels, manuelles Tracking) und je Mitarbeiter (Sendungen, aktive Tage, Ø/Tag), rückwirkend auswertbar
Profitbutler: Retouren-Quote in % — Artikel- und Regionen-Tab zeigen unter dem Retouren-Betrag jetzt die Quote (Retouren ÷ Brutto-Umsatz, z.B. „149× · 2,9 %“)
Profitbutler: Benutzerdefinierter Zeitraum — Zeitraum-Auswahl in Artikel- und Regionen-Tab um „Benutzerdefiniert…“ (Von/Bis-Datum) erweitert; wirkt auch auf Ausklappen/Drilldown
PROJ-499 Kundensuche deutlich schneller — Die Suche in der Kundenverwaltung dauerte bei großem Kundenstamm mehrere Sekunden. Ursache war (wie bei der Auftragssuche) die zeilenweise Rechteprüfung über zehntausende Kunden, nicht die Datenmenge. Neue Datenbank-Funktion (search_customers) übernimmt Suche und alle Filter in einer optimierten Abfrage — erwartete Antwortzeit im Bereich von Millisekunden statt Sekunden. Umschaltbar per Feature-Flag mit automatischem Rückfall auf den bisherigen Pfad.
PROJ-498 Profitbutler Retouren sauber: artikelscharfe Attribution + Retouren-Spalten — Bugfix: eine 30-EUR-Auftrags-Erstattung erschien voll auf einem 12-EUR-Artikel (Produktdetail-Retouren + Retouren-Tab buchten den vollen Auftragsbetrag pro Artikel), und ~90 % der Erstattungen (Amazon-Pull, Teilerstattungen) fehlten in der Artikel-Sicht komplett. Jetzt wird der Erstattungsbetrag anteilig nach Positionswert auf die Artikel verteilt und pro Artikel auf dessen Warenwert gekappt. Neu: sortierbare Spalte 'Retouren' im Artikel-Tab (artikelscharf) und im Regionen-Tab (je Lieferland); Artikel lassen sich aus dem Artikel-Tab direkt in neuem Tab oeffnen (Titel-Link + Breakdown-Link). Teilerstattungen schreiben ab jetzt die betroffenen Artikel + den Verkaufskanal mit; Bestandsdaten wurden per Migration nachgezogen (Kanalfilter der Retourenauswertung erfasst jetzt alle Eintraege).
PROJ-497 Profitbutler: Netto-Umsaetze klar ausweisen (netto primaer) — durchgaengig war unklar, ob eine Umsatzzahl brutto oder netto ist. Jetzt zeigt der Profitbutler in allen Uebersichten (KPI-Kacheln, Artikel-Tab + Ausklappen, Kanal-Aufschluesselung, Regionen, Produktdetail-Auswertung) netto als grosse Primaerzahl mit Label 'netto' und brutto klein darunter (nur wenn USt > 0); Marge wird auf Netto-Basis gerechnet. Ausnahme wie vom Nutzer gewuenscht: die GuV/Preiskalkulations-Aufstellung bleibt brutto (dort wird die USt explizit als eigene Zeile abgezogen), das Umsatz-Chart bleibt brutto (Tooltip/Titel klar mit '(brutto)' gelabelt). Netto ist ueberall aus der bereits vorhandenen USt ableitbar (kein Re-Backfill): KPI = Umsatz minus USt-Kosten; Kanaele/Regionen aus den Tagesaggregaten bzw. echtem Beleg-Netto (subtotal_net) in der Rechnungen-Ansicht; Artikel/Regionen-RPCs um revenue_net erweitert. Adversariale Multi-Agent-Review (2 Runs, 7 bestaetigte Findings alle gefixt: u.a. Rechnungen-Kanaltabelle labelte brutto als netto, Artikel-Spalte sortierte nach brutto, Produktdetail-Regionen blieben brutto). Volle Testsuite gruen, live auf Produktion verifiziert (Regionen-RPCs liefern revenue_net, DE 98.135,92 EUR brutto -> 82.885,45 EUR netto).
PROJ-495: Profitbutler-Tab Artikel - Zeilen ausklappbar mit Aufschluesselung nach Verkaufskanal (Amazon-Marktplaetze gruppiert) und Lieferland je Artikel, plus Link zum Produktdetail
Profitbutler Regionen-Tab: Gewinn + Marge pro Lieferland (neue Regionen-Tagesaggregate, gleiche Kosten-Engine wie Kanal-Tabelle) (PROJ-490)
Profitbutler KPI-Kacheln: Vergleich zur Vorperiode — ▲/▼ x % Umsatz-Delta pro Zeitraum (PROJ-492)
Profitbutler: neuer Tab 'Artikel' — sortierbare Top/Flop-Liste über alle Kanäle (Einheiten, Umsatz, Gewinn, Marge, Anteil) mit Suche + Filtern (PROJ-493)
Brainflow mobil: Seitenbaum, Suche und Papierkorb als einblendbare Navigation (Sheet) auf kleinen Bildschirmen
Brainflow: Seiten im Baum per Drag & Drop verschachteln und umsortieren
Brainflow: Inline-Suche in der Seitenleiste (Titel-Treffer oben, Inhalts-Treffer mit Vorschau darunter, ⌘K) statt Such-Dialog; Seitenleiste einklappbar und in der Breite verstellbar
Produkt-Auswertung (Profitbutler im Artikel): neue Sektion 'Auswertung nach Region' — Einheiten, Umsatz und Gewinn des Artikels pro Lieferland (Flagge, Anteils-Balken, farbcodierte Marge, Zeitraum-Tabs) (PROJ-484)
Produkt-Auswertung: KPI-Kacheln (Umsatz/Gewinn/Marge/Bestellungen je Zeitraum) über dem Chart wie auf der Profitbutler-Hauptseite (PROJ-484)
Brainflow privates Freigabemodell (PROJ-483): Neue Seiten sind privat, Zugriff wird explizit freigegeben — an Personen, „Alle Admins" oder „Alle Mitglieder", mit Lesen/Bearbeiten; neuer Teilen-Dialog zeigt effektive Freigaben inkl. Vererbung
Profitbutler: Umsatz-Chart mit gestapelten Balken nach Verkaufskanal — Top-3-Kanäle farblich (Amazon kumuliert, Otto, eBay) + Sonstige, Legende & Multi-Serien-Tooltip; Wachstum/Stagnation pro Marktplatz auf einen Blick (PROJ-482)
Brainflow PM-Views (PROJ-481): Sammlungen mit benannten Ansichten — Kanban-Board (Drag & Drop nach Status/Auswahl) und Zeitleiste (Balken verschieben/dehnen, Zoom, Heute-Linie, Ungeplant-Liste); Datums-Felder optional mit Start/Ende
Brainflow Berechtigungen pro Seite (PROJ-480): Seiten einschränkbar auf Personen oder „Alle Admins" mit Lesen/Schreiben, Vererbung auf Unterseiten, Teilen-Dialog, Read-only-Modus
Brainflow Sammlungen & Properties (PROJ-479): Seiten als Sammlung markierbar — eigene Felder (Auswahl, Status, Datum, URL, Text, Zahl u.a.) für Unterseiten, filterbare/sortierbare Tabelle mit Inline-Bearbeitung, Property-Panel auf Unterseiten
Brainflow (PROJ-476): Neues Notizen- & Wiki-Modul — Seitenbaum mit Unterseiten, Notion-artiger Block-Editor (Slash-Befehle, Bilder, Autosave), Volltextsuche, Papierkorb; per Workspace-Schalter aktivierbar (Einstellungen → Allgemein)
Profitbutler: Kanal-Aufschluesselung zeigt Amazon kumuliert als aufklappbare Sammelzeile mit den einzelnen Marktplaetzen (PROJ-478)
Profitbutler: Uebersichtlicheres Dashboard - KPI-Kacheln (Heute/Gestern/7T/30T), Kanal-Aufschluesselung als Tabelle mit echten Margen und Anteils-Balken, praezisere Zeitraum-Labels (PROJ-475)
Profitbutler: Neuer Tab Regionen - Umsatz, Bestellungen, Einheiten und Top-Artikel pro Lieferland mit Zeitraum- und Kanal-Filter (PROJ-474)
PPC-Butler Varianten-Familien: Sellerboard-Kennzahlen optional umsatzgewichtet über Varianten-Familien aggregiert (Opt-in-Toggle + Modus 'Alle Sellerboard-Quellen' / 'Pro Mapping wählbar') — behebt Phantom-Margen durch Sellerboards Werbekosten-Attribution auf die beworbene Variante.
Varianten-Familien-Verwaltung in der PPC-Butler-Integration: Auto-Familien aus Eltern/Kind-Artikeln, bearbeiten/auflösen/manuell anlegen, Reset auf Flowkom-Stand (pro Familie + global), 30d-Familien-Marge sichtbar.
PPC-Butler Mapping-Dialog: Datenquellen-Auswahl mit Suchfeld; jede Quelle trägt die Daten-Herkunft im Namen (Flowkom / Sellerboard / kombiniert); aufklappbare Formel-Beispiele mit Erklärung (Sicherheitspuffer, Deckel, Korridor, …); echte Umlaute in allen PPC-Butler-Texten.
Sellerboard-Import robuster: kurzzeitige Abruf-Fehler der Report-Links werden automatisch wiederholt; die Import-Meldung zeigt das Ergebnis je Quelle (EU/USA) ehrlich an.
Sellerboard SKU-Zuordnung: Auto-Zuordnen kann jetzt zusätzlich über die ASIN mappen (nur eindeutige Treffer) — für Konten, deren Sellerboard-SKUs von den Flowkom-SKUs abweichen. Die Karte erklärt jetzt die Match-Reihenfolge.
Sellerboard-Einstellungen: Report-URLs werden maskiert angezeigt (Zugriffs-Tokens nicht mehr im Klartext, Auge-Symbol zum Einblenden); EU- und USA-Quelle in einer Karte — Speichern/Importieren gilt sichtbar für beide.
Sellerboard USA: Der US-Account (eigener Report-Link) lässt sich als zweite Quelle an der bestehenden Sellerboard-Integration hinterlegen (Einstellungen → Sellerboard USA). US-Daten fließen in USD in den Sellerboard-Tab (Amazon.us-Filter zeigt $), in den EK-Vergleich und als PPC-Butler-Datenquelle; eigener „EK-Export USA"-Button schreibt den Flowkom-EK mit ECB-Tageskurs in USD.
Integration hinzufügen: Sellerboard und PPC Butler zeigen „Bereits verbunden" statt eines Fehlers, wenn schon eine Verbindung existiert.
PPC-Butler: „Alle Marktplätze (Gesamt)" als Datenquelle — Sellerboard-Kennzahlen (TACoS, ACoS, Marge, Umsatz, …) über alle Marktplätze aggregiert an jedes Butler-Profil pushen. Neue oberste Option im Datenquelle-Marktplatz-Auswahlfeld des Mapping-Dialogs.
PPC-Butler Multi-Marktplatz: Sellerboard-Datenquelle vom Ziel-Profil entkoppelt — pro Mapping optional wählbar, aus welchem Marktplatz die Sellerboard-Zahlen kommen (z.B. DE-TACoS ins FR-Butler-Profil pushen). Standard = gleiches Land wie das Ziel-Profil (unverändertes Verhalten). Neuer editierbarer „Datenquelle-Marktplatz"-Auswahl im Mapping-Dialog.
PPC-Butler KPI-Voll-Katalog (Teil 2 von 2): 17 neue Mapping-Datenquellen — Bestand-Split (FBA/FBM/je Lager einzeln), kompletter Sellerboard-Katalog je Marktplatz und Zeitfenster (Absatz, Velocity, Umsatz, Organic-Anteil, Conversion-Rate, Sessions, Retouren-Quote, Werbekosten, Amazon-Gebühren, Netto-Gewinn, ROI, Auszahlung) und Lagerreichweite/Days-of-Supply (gesamt + FBA). Gruppiertes Quellen-Dropdown, Lager-Auswahl, Sellerboard-Staleness-Alarm. (PROJ-460)
PPC-Butler Multi-Marktplatz-Steuerung (Teil 1 von 2): eine Butler-Verbindung steuert jetzt N Amazon-Marktplatz-Profile statt nur DE. Auto-Discovery der Butler-Profile, pro Marktplatz ein eigenes/unabhängiges Mapping-Set (mit „Von-Marktplatz-kopieren"-Button), Sync-Loop je Marktplatz an das jeweilige Profil mit der Landes-ASIN, und Marktplatz-Subtabs (DE/FR/…) im Produkt-Detail. Baut auf Sellerboard-Profitdaten (12 Marktplätze). (PROJ-459)
Shopify: Zahlungsstatus-Rückmeldung (mark-as-paid) — wird ein unbezahlt importierter Shopify-Auftrag (Vorkasse/Rechnung/Überweisung) in Flowkom manuell auf „Bezahlt“ gesetzt, meldet Flowkom den Zahlungseingang via orderMarkAsPaid an Shopify zurück. Pro Shopify-Integration ein-/ausschaltbar (Default aus); bereits bezahlte Aufträge werden übersprungen, Fehler erzeugen eine Benachrichtigung, der lokale Bezahlt-Status bleibt immer erhalten. (PROJ-458)
Varianten-Liste im Elternartikel zeigt jetzt das Bild jedes Kind-Artikels (PROJ-443)
PPC Butler: Läuft die Verbindung ab (der Zugang gilt ~30 Tage), gibt es jetzt einen „Erneut anmelden"-Button — einmal das PPC-Butler-Passwort eingeben und die Verbindung ist erneuert. Deine Variablen-Zuordnungen bleiben dabei erhalten (kein Trennen und neu Einrichten mehr nötig).
PPC Butler: Schlägt ein Sync fehl, bekommen Admins jetzt eine Benachrichtigung in der Glocke mit direktem Link zur Integration — vorher blieb ein Ausfall unbemerkt.
PROJ-434: Kundenaufträge lassen sich jetzt über die Sendungsnummer (Tracking-Nr.) finden — neuer Suchbereich „Nur Sendungsnr.“ und zusätzlich in „Überall suchen“ integriert. Volle Nummer einfügen oder scannen findet den zugehörigen Auftrag (deckt Versand-Tracking, Retouren und manuell hinterlegtes Tracking ab).
PROJ-421: Die Lieferantenbestellung-PDF zeigt jetzt die Zolltarifnummer (TARIC/HS-Code) jedes Artikels — direkt neben SKU und EAN (z. B. „SKU: 100071-001 | EAN: 4270003831161 | HS Code: 8714990000"). Die Beschriftung folgt der PDF-Sprache (deutsch „Zolltarifnr.", englisch „HS Code"); bei Artikeln ohne hinterlegte Zolltarifnummer bleibt die Zeile unverändert. Die Nummer wird am Artikel über die bestehende TARIC-Auswahl gepflegt.
Teilerstattung / Retoure: Bei Bestellungen mit mehreren Artikeln lassen sich jetzt einzelne zurückgesendete Artikel positionsgenau erstatten. Der Auftrag bleibt bestehen, und es wird eine Teilgutschrift über genau die gewählten Artikel (inkl. korrektem Steuersatz pro Position) erstellt.
PROJ-426: Beim Sellerboard-EK-Export lässt sich das Datum „Kostenperiode ab“ jetzt frei wählen (Standard: heute) und gilt für alle exportierten Artikel. Nach dem Export zeigt eine Meldung, wie viele Artikel einen Einkaufspreis bekommen haben und wie viele übersprungen wurden; ein separater „Diagnose“-Download nennt pro Artikel den Grund. Die hochzuladende Datei bleibt unverändert ein einzelnes Tabellenblatt.
PROJ-417: Bestellungen zusammenfassen (Sammelpaket) — Mehrere offene Bestellungen desselben Empfängers zu einem Paket bündeln: ein Label, eine Tracking-Nr.; Mitglieder bleiben eigenständig und werden je Kanal (Amazon/eBay/Shopify) mit eindeutiger Tracking-Nr. bestätigt. Hinter Feature-Flag (per Einstellungen schaltbar).
Admins können die Lieferadresse eines bereits abgeschlossenen oder stornierten Auftrags nachträglich korrigieren — als bewusster, protokollierter Override mit Warnhinweis. Die Änderung erscheint in der Auftragshistorie als Admin-Override samt optionalem Grund; normale Mitarbeiter bleiben für abgeschlossene Aufträge weiterhin gesperrt.
PROJ-416: Sellerboard-Profitabilität (TACoS, echter ACoS, Marge, Gewinn/Stück × 7/14/30/60d+Lifetime) als 20 neue PPC-Butler-Produktvariablen — 1:1 aus sellerboard_daily pro Artikel (FBM+FBA summiert), marktplatz-getrennt, über den bestehenden täglichen PPC-Butler-Sync.
Profitbutler → Sellerboard: neuer Button "EK-Export für Sellerboard". Erzeugt eine CSV im Sellerboard-Einkaufspreise-Format aus den Flowkom-FIFO-Einstandspreisen, die direkt in Sellerboard hochladbar ist. Bei FBM-Artikeln werden die Verpackungskosten auf den EK aufgeschlagen, und das passende Sellerboard-Versandprofil wird je nach Flowkom-Versandart des Artikels eingetragen (Zuordnung einmalig in den Sellerboard-Einstellungen pflegbar). Andere Sellerboard-Einstellungen (MwSt., Kategorie etc.) bleiben unberührt.
Profitbutler → Sellerboard: Einkaufspreise aus Sellerboard werden jetzt importiert und je Artikel direkt in der Produktliste angezeigt - daneben der Flowkom-FIFO-Einstandspreis. So sieht man auf einen Blick, ob bei einem Artikel in Sellerboard kein Einkaufspreis hinterlegt ist (rotes "EK fehlt") und ob der Sellerboard-Preis noch aktuell ist (Hinweis bei Abweichung über 15%). Dafür wird in den Einstellungen der Sellerboard-Integration eine zweite Report-URL ("Einkaufspreise") hinterlegt, die der bestehende tägliche Import automatisch mit abholt.
Festgeschriebene Lieferantenbestellungen tragen jetzt einen grünen „Festgeschrieben“-Badge (Schloss-Symbol) auf den Kanban-Karten, in der Listenansicht und in der Bestelltabelle — auf einen Blick erkennbar, welche LBs gegen rückwirkende Einstandskosten-Änderungen gesperrt sind.
Lieferantenbestellung festschreiben: Einstandskosten einer LB lassen sich manuell einfrieren (nur bei abgeschlossenem Wareneingang). Festgeschriebene LBs werden bei späteren Maß-/Verpackungsänderungen nicht mehr rückwirkend neu berechnet — keine FIFO-/Margen-Drift. Kosten-Tab ist dann gesperrt; Entsperren nur durch Admins.
Die Benachrichtigung über neue Shopify-Produkte nennt jetzt direkt die gefundenen Produkte (Name + SKU) statt nur einer Anzahl. "Jetzt importieren" öffnet außerdem den Import-Dialog direkt, statt nur auf die Integrationsseite weiterzuleiten.
Pro Cronjob gibt es jetzt einen Schalter "Bei Fehler benachrichtigen" (Standard: an). Schlägt ein Hintergrund-Job fehl, erscheint automatisch eine Fehler-Benachrichtigung mit Link zu den Cron-Einstellungen — und du kannst einzelne Jobs gezielt stummschalten. Mehrfaches Fehlschlagen erzeugt nur eine Meldung (kein Spam).
Fehler-Benachrichtigungen lassen sich jetzt workspace-weit bestätigen: Setzt ein Admin einen Fehler auf "behoben", sehen alle anderen Admins, wer ihn wann erledigt hat. Der Systemstatus-Tab trennt jetzt klar zwischen "Offen" und "Erledigt".
Fehlgeschlagene Bestandssyncs erzeugen jetzt automatisch eine Fehler-Benachrichtigung (mit Link zur Integration) — vorher war so ein Fehler stumm und nur in den Einstellungen sichtbar. Der Glocken-Zähler bleibt rot, bis ein Admin den Fehler aktiv erledigt hat.
Versandfehler beheben: Das Etikett wird beim "Korrigieren & Erneut versenden" jetzt direkt an die gewählte Versandstation gedruckt — kein Umweg mehr über den Tab "Etiketten".
Versandfehler-Eintrag zeigt jetzt aufklappbar die Auftragspositionen (Bild, Name, SKU, EAN, Menge) — schnelle Prüfung, ohne den Auftrag zu öffnen.
Versandstation-Auswahl ist jetzt in allen Versand-Tabs sichtbar (Versand, Versandhistorie, Etiketten, Versandfehler).
PROJ-345 Zwei-Faktor-Authentifizierung (TOTP) — Optionales 2FA über Authenticator-Apps (Google Authenticator, Authy, 1Password, MS Authenticator). Jeder Nutzer aktiviert/deaktiviert 2FA selbst in den Konto-Einstellungen (Setup-Wizard mit Passwort-Bestätigung, QR-Code und Verifikation). Beim Login wird danach ein 6-stelliger Code abgefragt. Workspace-Admins sehen pro Teammitglied, ob 2FA aktiv ist, und können es bei Geräteverlust zurücksetzen. Ein dezenter Dashboard-Hinweis bewirbt 2FA für Nutzer ohne aktivierten Faktor und lässt sich dauerhaft ausblenden.
PROJ-343 Web-UI — Geräteverwaltung (Einstellungen → Geräte): echte Online/Offline-Spalte (statt nur is_active) via Heartbeat/last_seen_at mit 30s-Live-Refresh, Button „Gerät hinzufügen“ (zeigt den dauerhaften Geräte-Code sofort zum Notieren/Aufkleben), durchgängiges Rebranding „Reconnect-Code“ → „Geräte-Code“, Bestätigungsdialog beim Neu-Generieren. Einmal-Aktivierungscodes komplett aus dem Pairing-Flow entfernt (nur noch ein Code pro Gerät).
PROJ-343 Backend — Mobile-Geräte dauerhafte Kopplung: maschinenlesbare Auth-Codes (SESSION_EXPIRED vs DEVICE_UNPAIRED) auf den 401-Antworten von login/workers/refresh/heartbeat/auth-helper (deutsche error-Strings unverändert, code nur additiv), sodass die App ein abgelaufenes PIN-Login nicht mehr mit einem echten Geräte-Unpair verwechselt. Neuer Admin-Endpoint POST /api/mobile/devices (Gerät mit Namen anlegen → dauerhafter Geräte-Code = bestehender reconnect_code, läuft nie ab). Neuer leichter POST /api/mobile/heartbeat (Device-Token) für echtes Online/Offline via last_seen_at. Migration paired_at (additiv/idempotent), gesetzt in reconnect/activate. 14 neue Vitest-Specs.
PROJ-347 Billkom-Belege im Auftrags-Verlauf — Rechnungen, Gutschriften/Teilgutschriften, Rechnungs-Zahlungen und Stornos erscheinen jetzt im Verlauf eines Auftrags (bisher nur in der Billkom-eigenen Beleg-Historie). 4 neue Verlauf-Eintragstypen, die an den bestehenden Billkom-Stellen mitgeschrieben werden (nur bei order-verknüpften Belegen). Backfill-Migration trägt Rechnungen & Gutschriften für bestehende Aufträge nach. Bewusst minimal (kein Read-Time-Merge, keine Flags). Adversarialer QA-Pass: 0 Bugs, Build clean. PR #355, v1.98.028.
PROJ-344 Dokumente bei Vaterartikeln — Konformitätserklärung & Bedienungsanleitung listen jetzt die aktiven Varianten (EAN, Name, Bild) statt des Parents. Greift in beiden Pfaden „Speichern & PDF“ und beim Download; einfache Produkte bleiben unverändert.
Adressetikett-Versandart meldet an die Verkaufskanäle jetzt Carrier „Deutsche Post" (Amazon zusätzlich Versandart „Brief") statt einer internen Pseudo-Nummer — ohne echte Trackingnummer, da Briefe unverfolgt sind. (PROJ-342)
Neue Versandart "Adressetikett": druckt beim Versenden nur die Empfängeradresse auf ein Briefmarken-Etikett (Deutsche-Post-Adresszonen-Layout, aber ohne Frankierung) mit freiem Feld zum Aufkleben einer echten Briefmarke. Wird lokal als PDF erzeugt — keine Deutsche-Post-API, kein Porto, kein Tracking — und druckt über die bestehende Druck-Pipeline auf dem Brother QL 600 / 62mm-Endlosetikett. (PROJ-342)
PROJ-338 Profitbutler-Sellerboard-Spiegel (v1): neue Sellerboard-Tab unter Profitbutler + Sub-Tab in der Produktdetailansicht, die Sellerboards täglichen 30-Tage-CSV-Report 1:1 spiegelt (kein Nachbau, kein EK-Swap). Eigenes, von Amazon entkoppeltes SKU→Artikel-Mapping mit Auto-Zuordnen. Täglicher Auto-Import + manueller Trigger. Kacheln (Heute/Gestern/7T/30T) geben Zeitraum & Summen vor, Produkttabelle mit FBM/FBA-Trennung und voller GuV per „Mehr“. Strikt isoliert vom bestehenden Profit-Stats-Layer. (PPC-Butler-Push von Profit/TACOS folgt als Schritt 2.)
PROJ-337: FBM-Gewinn nutzt echte Versandkosten je Lieferland (shipping_method_country_costs) + Verpackung statt Sellerboards Pauschal-Versand (Swap, kein Doppelzählen). Nur FBM; fehlt ein Versandsatz, bleibt Sellerboards Versand. Prod-verifiziert.
PROJ-336: Profitbutler Amazon-GuV jetzt Sellerboard-treu (1:1) mit Flowkoms FIFO-Einstandspreisen. Umsatz + Kosten kommen aus derselben Sellerboard-Periode (kein Coverage-Mismatch mehr), EK aus Flowkom-FIFO via EK-Swap auf NetProfit. Behebt überhöhte Gewinne (z.B. 100068-FBA 67,8% → 7,5%). Inkl. 72-Spalten-Parser, amazon_listings-Matching, täglicher Import-Cron, Coverage-Badge (T-1), Kacheln auf Suche skopen. Live für Pixkom.
PROJ-335 Profitbutler — Period-KPI-Kacheln auf echte Amazon-Kosten (schließt QA-Finding LOW-2). Die Kacheln (Heute/Gestern/Aktueller Monat) zeigten Gewinn/Deckungsbeitrag/Werbung auf Soll-Basis, das Grid (PROJ-332/333) aber echte Amazon-Kosten. Lösung: client-seitige Kachel-Korrektur (applyAmazonRealToTile, pure+getestet) + ein additives /stats-Feld (amazonNetRevenue) — kein In-Place-Mutieren, daher Legacy-GuV + PDF-Export byte-identisch. Ersetzt den Amazon-Soll-Anteil (Netto-Basis) durch Ist (provision+fba+amazon_fees_combined). Gate-Fix type IN (amazon,sellerboard) damit Sellerboard-Workspaces das Overlay bekommen. v1-Grenzen dokumentiert (prev_month bleibt Soll wegen 35d-Retention, mit Ist/Soll-Marker). Design + adversariale Review via Multi-Agent-Workflows, berechtigte Findings eingearbeitet. 39 Vitest-Specs grün. PR #325, v1.91.000.
PROJ-333 Profitbutler — Kanal-Aufschlüsselung im Produkt-Ausklappen. Das Ausklappen zeigt zusätzlich zur GuV des Gesamtprodukts eine Aufschlüsselung nach Verkaufskanal: Amazon-FBM, Amazon-FBA, Otto, Kaufland, eBay, Webshop, Flowkom (+ Sammelbuckets). Neuer PLPGSQL-RPC profitbutler_by_product_channel_aggregate; Umsatz/USt/Einheiten exakt pro Kanal, Amazon-Ist-Kosten umsatzanteilig per Largest-Remainder pro Bucket (Σ Kanäle == Produkt-Total Cent-exakt), FBA-Buckets nur auf FBA-Zeile, Nicht-Amazon=Soll. Pro-ratierte Amazon-Zeilen tragen Ist-(anteilig)-Badge. Gemeinsame profitCents()-Funktion. Lazy expand_channels, Default-Pfad byte-identisch. Design + adversariale Review via Multi-Agent-Workflows. 58 Vitest-Specs grün. PR #323, v1.90.000.
PROJ-234 Migration (#298, Squash fbd21cda) — Profitbutler-Auswertungs-Tab im Produkt-Detail auf die PROJ-330 Sellerboard-UI umgestellt. Bisher zeigte der Tab den Legacy ProfitbutlerSellerboard (tabular HEUTE/GESTERN/7T/MONAT/30T). Jetzt rendert er hinter dem workspace-Beta-Flag dieselben klickbaren Period-Tiles + ProductGrid wie die Hauptseite, aber pre-filtered auf den einen productId. Neue Komponente ProfitbutlerProductOverview: 4 Period-Tiles mit lokalem (nicht URL-) Period-State, ProductGrid mit expand_marketplaces=true fuer Drilldown auf Marketplace-Sub-Zeilen, Hinweis-Banner wenn amazonReal.hasData=false (linkt zu Cron-Jobs). Branch-Logik in profitbutler-product-stats.tsx: Beta-aktive Workspaces bekommen die neue UI, alle anderen die Legacy unveraendert.
PROJ-330 Echte Amazon-Kosten pro SKU (Sellerboard-Parität) — Phase A + B + C komplett. Phase A: separate SP-API-Pipeline neben PROJ-189 für ShipmentEvent + ServiceFeeEvent (RefundList + AdjustmentList werden bewusst ignoriert), FBA-Storage-Fees-Cron monatlich, Aggregate-Cron stündlich. Zwei neue Tabellen amazon_sku_cost_events (raw, append-only, Hash-Idempotenz, 21 cost_types) + amazon_sku_costs_daily (rolling 35d). RPC refresh_amazon_sku_costs_daily mit self-healing SKU-Mapping über amazon_listings. Phase B: komplett neue Integration type='amazon_ads' mit separater OAuth pro Workspace (LwA-Credentials werden im Connect-Dialog eingegeben, keine globalen Env-Vars), Reports v3 Lifecycle für spAdvertisedProduct, sync-runner mit Token-Refresh + cursor-driven Backfill. Phase C: additives amazonReal-Feld in /api/profitbutler/stats (Response byte-identisch für Nicht-Opt-In Workspaces), neuer paginierter /api/profitbutler/stats/by-product Endpoint (per-product real-costs aus amazon_sku_costs_daily, kein Pro-Rata), Sellerboard-artige UI mit 4 klickbaren Period-Tiles + Filter-Bar + Product-Grid mit Marketplace-Sub-Zeilen + Checkbox-Selektion + Source-Badges (Ist/Soll/Mix). Beta-UI hinter workspaces.profitbutler_new_ui_enabled-Toggle (default false, Legacy bleibt aktiv). Settings-Toggle cost_events_pull_enabled (default false) hängt am AmazonTogglesBlock. Strikte Isolation der PROJ-189 Refund-Pipeline garantiert (finance-events-pull.ts / finance-events-filter.ts / finance-events-dedup.ts byte-identisch, SHA-256-Baseline in features/PROJ-330-isolation-baseline.md). QA-Audit vor Merge fand 6 Bugs (0 Critical/High, 2 Medium, 4 Low), alle gefixt. 168/168 Vitest grün, TS clean. Default-State nach Deploy: kein SP-API-Polling, keine UI-Änderung, kein Ads-Cron — alles bleibt safe bis User die Toggles aktiviert. Deployed via PR #293 Squash 65a04462.
PROJ-328 PPC-Butler-Sub-Tab im Produktdetail — neuer Sub-Tab unter Profitbutler (nur sichtbar wenn PPC-Butler-Integration im Workspace existiert). Zeigt pro ASIN alle PPC-Butler-Variablen mit Mapping-Status. Gemappte Variablen sind read-only mit 'Auto-Sync'-Badge + Source-Kind + live-berechnetem Wert. Ungemappte Variablen haben Number-Input + Push-Button für manuellen Push pro Produkt. Architektur: neue lokale Tabelle ppc_butler_product_variable_values (UNIQUE integration_id+product_id+variable_name) als Audit-Trail, weil PPC Butler keinen GET-Endpoint hat. sync-runner upsertet alle erfolgreichen Auto-Sync-Pushes in Chunks à 500. Manueller Override gemappter Variablen via API gesperrt (HTTP 409 managed_by_mapping). Tab erscheint via /api/integrations?type=ppc_butler&limit=1-Auto-Detect.
PROJ-328 Automatischer Sync — Phase-2-Item nachgereicht. Neuer Endpoint /api/cron/ppc-butler-sync mit authenticateCron-Auth iteriert über alle PPC-Butler-Integrationen mit settings.auto_sync_enabled=true UND status=active und triggert pro Verbindung Fire-and-Forget runSync(). acquireSyncLock verhindert Doppelläufe bei überlappenden Triggern (Lock-Konflikte werden als 'skipped: Sync already running' geloggt). Toggle 'Automatischer Sync' im PPC-Butler-Detail-Header (PATCH /api/integrations/[id] mit gemergten settings, optimistic UI mit Rollback). Eintrag in /dashboard/settings/cron-jobs mit neuer Kategorie 'PPC Butler' (Target-Icon), Manual-Trigger-Button und Health-Indikator. Trigger-Intervall liegt komplett im externen Scheduler (Coolify/all-inkl), Empfehlung stündlich (0 * * * *). Pattern identisch zu Shopify Order-Import.
PROJ-328 QA — Audit-Report ergänzt 'QA Test Results'-Sektion in der Spec. 18/18 Acceptance Criteria PASS gegen Code verifiziert (Connection-Setup 7/7, Variable Discovery 4/4, Mapping-Konfiguration 3/3, Datenfilter & ASIN-Resolution 6/6, Sync-Ausführung 6/6, Cognito-Token-Lifecycle 3/3, Sicherheit & RLS 3/3, Integration-Registry 3/3). 16/16 Edge Cases PASS (alle im Code-Pfad behandelt, jeweils mit Datei-Referenz). Security-Audit 8/8 PASS — Cognito-Passwort wird NIE persistiert (grep über alle credentials_encrypted-Schreibstellen bestätigt), Refresh-Token AES-verschlüsselt via src/lib/crypto.ts, RLS auf ppc_butler_variable_mappings + ppc_butler_sync_logs aktiv via is_workspace_member() (PROJ-415-Pattern), Workspace-Isolation auf allen 9 API-Routes, Rate-Limits auf allen Endpoints (Werte dokumentiert), Zod .strict() auf allen POST/PATCH-Schemas (Mass-Assignment-Schutz), kein PII in Sync-Logs, Audit-Log für Connect/Sync/Mapping-CRUD. Tests: 54/54 Vitest grün (4 Files: client/cognito-srp/formula-parser/mapping-engine), TypeScript clean (0 Findings für PPC-Butler-Files), ESLint clean (0 Errors, 0 Warnings), Production-Build erfolgreich (8 PPC-Butler-Routen kompiliert). Performance-Check statisch: 10-Slot-Semaphor implementiert, 401-Retry-Once nicht in Endlosschleife (token401Retried-Flag), Polling-Cap 5 Min im Frontend, PostgREST-10k-Cap beachtet. 0 Critical/High/Medium Bugs gefunden. 2 Low-Findings dokumentiert für Folge-Ticket (LOW-1: integrations.last_sync_at wird vom Sync-Runner nicht aktualisiert — UX-Fallback via History-Endpoint deckt das ab; LOW-2: stock_available zählt Sperrlager mit — semantisch unklar, bewusste Phase-2-Entscheidung). Production-Ready: YES.
PROJ-328 Frontend — PPC Butler UI komplett. Dedizierter PpcButlerConnectDialog mit Cognito-Username + Passwort + Profile-ID, ruft direkt POST /connect (Cognito-Login + Profile-Validierung + verschlüsseltes Speichern in einem Schritt) statt des generischen Empty-Insert-Flows — sonst hätte die Partial-Unique-Constraint die zweite Anfrage blockiert. AddIntegrationDialog fängt ppc_butler ab und öffnet diesen Dialog. PpcButlerIntegrationDetail rendert im generischen /dashboard/settings/integrations/[id] (analog Shopify/Amazon/Freescout): Header mit Profile-ID, auth_failed-Badge bei Token-Expiry, 'Verbindung trennen' mit Confirm-Dialog. Variablen-Tabelle mit Live-Discovery (GET /variables), Mapping-Status-Badges (gemappt / nicht gemappt / verwaist), Refresh-Button, per-Zeile Mapping-Bearbeiten + -Entfernen. PpcButlerMappingDialog mit Datenquelle-Dropdown (5 MVP-Quellen), bedingten Tag-Boost-Feldern (Tag-Combobox via /api/tags, Boost-Wert + Default-Wert), Formel-Textarea mit clientseitiger Live-Syntax-Validierung (parseFormula aus @/lib/ppc-butler/formula-parser — kein Server-Roundtrip beim Tippen), Vorschau-Button (POST /preview, 5-Zeilen-Tabelle SKU/ASIN/Rohwert/Endwert mit Formel-Fehler-Badge), Aktiv-Toggle. PpcButlerSyncPanel mit großem 'Jetzt syncen'-Button (disabled während Lauf), Live-Progress-Panel mit Progress-Bar + Zählern + Per-Variable-Liste, Polling alle 2s, Timeout nach 5 Min, picks laufende Syncs nach Page-Reload auf. Sync-Historie mit Drill-Down-Toggle pro Lauf. Shadcn-Komponenten ausschließlich, keine neuen npm-Dependencies. Toasts via sonner für alle CRUD-Aktionen. Icon 'target' + 'headphones' zu integration-card.tsx ICON_MAP hinzugefügt.
PROJ-328 Backend — PPC Butler Integration Phase 1. Neuer Integration-Typ ppc_butler (category=marketplace), 4 DB-Migrationen (CHECK-Constraint-Erweiterung, ppc_butler_variable_mappings, ppc_butler_sync_logs, Partial-Unique-Index für eine Connection pro Workspace). Cognito-SRP-Auth via amazon-cognito-identity-js mit Node-Polyfills, PpcButlerClient-Wrapper mit Token-Refresh + 401-Retry + 404-Skip + Rate-Limiting (max 10 parallel), eigene Mini-Formel-Parser-Implementierung (Recursive-Descent, Whitelist MAX/MIN/ROUND + 4 Operatoren, ~150 LoC TypeScript, kein eval/Function-Constructor, ~120 Vitest-Specs grün), 5 deklarative Datenquellen (stock_total/stock_available/inbound_stock/days_to_restock/tag_boost) via Mapping-Engine. Sync-Runner orchestriert kompletten Lauf mit Per-Variable-Fehler-Isolation, Sync-Lock via Partial-Unique-Index auf (integration_id) WHERE status='running' (race-free DB-Lock, überlebt Pod-Restarts), Zombie-Cleanup (>30min auf failed setzen). 8 API-Routes unter /api/integrations/ppc-butler/ (connect, [id]/variables, [id]/mappings, [id]/mappings/[mappingId], [id]/mappings/[mappingId]/preview, [id]/sync, [id]/sync/[logId], [id]/sync-logs). Refresh-Token AES-verschlüsselt in integrations.credentials_encrypted, Passwort wird sofort nach SRP verworfen. RLS auf allen neuen Tabellen via is_workspace_member().
PROJ-329 Frontend — Source-Badge + Konflikt-Banner im ASIN-Feld des Produkt-Detail-Formulars. Badge 'Auto aus Listing' bzw. 'Import' erscheint direkt unter dem ASIN-Input, sobald products.asin_source IN ('listing_auto','import') — bei 'manual' und NULL bleibt das Feld bewusst rauscharm. Konflikt-Banner (amber Alert mit AlertTriangle + zwei Buttons) wird sichtbar wenn products.asin_conflict_listing_id gesetzt ist. Banner fetched die Listing-ASIN best-effort aus amazon_listings für eine sprechende Meldung ('… abweichende ASIN: B08...'); fällt der Fetch aus (Permissions/Listing fehlt) bleibt der Übernehmen-Button trotzdem nutzbar weil das Backend selbst gegen das Listing resolved. Beide Buttons rufen POST /api/products/[id]/resolve-asin-conflict mit action accept_listing / keep_manual, zeigen Loading-Spinner und Toast-Feedback, triggern danach Product-Refresh. Gelbes Warndreieck mit Tooltip 'ASIN-Konflikt vorhanden' neben dem Produkt-Titel im Kanban und in der Produkt-Tabelle (stopPropagation gegen Card-Click). Optionaler Filter 'Nur ASIN-Konflikt' in der Filterleiste — als Boolean-Toggle direkt im Filter-Popover-Stage-1 implementiert (kein Stage 2), eigener Filter-Chip mit X-Removal, URL-Param ?asin_conflict=1 für Deeplink. ProductFilters-Type und Filter-Pipeline um has_asin_conflict erweitert (filterByAsinConflict, getActiveFilterCount). Product-Interface in src/lib/validations/product.ts um asin_source und asin_conflict_listing_id ergänzt — bestehender select('*') in Detail-Page und Listings-API lädt die Felder automatisch.
PROJ-329 Backend — Auto-ASIN-Pflege auf Produktebene. Neuer PL/pgSQL-Trigger sync_asin_from_listing() (SECURITY DEFINER) auf amazon_listings, fired AFTER INSERT OR UPDATE OF flowkom_product_id, asin. Befüllt products.asin aus dem gemappten Listing wenn das Produkt noch keine ASIN hat (asin_source='listing_auto'), respektiert manuelle ASINs (kein Overwrite — stattdessen Konflikt-Marker products.asin_conflict_listing_id), idempotent bei mehrfacher Trigger-Feuerung, mit Workspace-Konsistenz-Check (RAISE EXCEPTION bei Mismatch). Zwei neue Spalten: asin_source TEXT CHECK ('manual','listing_auto','import') und asin_conflict_listing_id UUID FK ON DELETE SET NULL, plus Partial-Index. Backfill via DO-Block (DISTINCT ON sorted by created_at ASC — erstes Listing gewinnt bei Mehrfach-Marketplace-Mapping, Edge Case 2), reentrant, RAISE NOTICE loggt n_filled/n_conflicts. PATCH /api/products/[id] akzeptiert nun asin (Zod /^[A-Z0-9]{10}$/) und stempelt asin_source='manual' + cleart Konflikt-Marker. POST /api/products macht dasselbe beim manuellen Anlegen. Neuer Endpoint POST /api/products/[id]/resolve-asin-conflict mit Body { action: 'accept_listing'|'keep_manual' } für die Konflikt-Auflösung (Auth + Rate-Limit 60/min). Produkt-Form Edit-Pfad (direkter supabase-Update aus dem Browser) stempelt source='manual' + cleart Marker nur bei tatsächlicher ASIN-Änderung. 32 neue Vitest-Specs (22 Trigger-Semantik + Migration-File-Strukturchecks, 10 API-Route-Branches). Folge: Frontend (ASIN-Badge + Konflikt-Banner) und QA via /frontend bzw. /qa.
PROJ-325: Dashboard-Widget für offene manuelle Picklisten. Neuer fünfter KPI-Tile auf der allgemeinen Dashboard-Übersicht (sichtbar für alle Workspace-Member, nicht admin-only — Picking/Writeoff sind operative Themen). Zeigt Counter aller Picklisten mit `writeoff_reason IS NOT NULL AND written_off_at IS NULL`. Visual Emphasis (border-red-300 / bg-red-50/30 / red-700-Text + AlertTriangle-Icon rot) sobald `count > 0 UND die älteste offene Ausbuchung > 24h alt` ist — verhindert dass vergessene Ausbuchungen tagelang im Backlog liegen. Klick auf die Card navigiert auf `/dashboard/outbound/picklists?pending_writeoff=true` (gefilterte Ansicht aus PROJ-325 Task 7). Bei Count = 0 zeigt die Card 'Keine offenen Ausbuchungen' statt eines Datums. Fetch läuft parallel im bestehenden `Promise.all`-Block der Dashboard-Page (Server Component, kein zusätzlicher Roundtrip).
Manuelle Pickliste — Bestandsausbuchung (PROJ-325). Manuelle Picklisten haben jetzt einen expliziten Ausbuchen-Flow mit Pflicht-Grund (FBA, Muster, Defekt, Sonstiges), Teilmengen-Unterstützung und prominenten Anti-Vergess-Badges in Liste, Detail und Versand-Screen.
PROJ-321 — Parent-Fortschritt: Editierbare Child-Matrix unter dem Aggregat-Block. Zeilen = Child-SKUs (sticky erste Spalte mit SKU + Variant-Attributen), Spalten = Optionen einer Checkbox-Gruppe. Spalten-Header-Klick = Mehrheits-Toggle (alle setzen wenn nicht alle gesetzt; alle entfernen wenn alle gesetzt). Pure Helpers in src/lib/products/checkbox-matrix-helpers.ts (14 Vitest-Tests). Neuer Endpoint POST /api/products/checkbox-bulk-toggle (Auth + Rate-Limit 10/min + Workspace-Scope + Group/Option-Validation) ersetzt N parallele PATCHes durch einen atomaren Server-Loop. Cell-Checkboxes sind während Spalten-Toggle disabled (Race-Schutz Single-Cell ↔ Bulk). QA-Skill fand 3 Low-Findings, alle vor Merge gefixt: BUG-1 (Rate-Limit → dedizierter Bulk-Endpoint), BUG-2 (Race-Condition → cell-disable), BUG-3 (Toast-Wording „Updates" → „Child-Updates" gemäß Spec). Auslöser: Live-Pain-Point auf Parent-SKU 200154 (Pflege musste bisher Child-für-Child erfolgen). PR #272.
PROJ-320 — Manuelles Tracking erzeugt jetzt eine begleitende `shipping_task`, damit Retoure- und Zusatz-Etikett-Buttons im Auftragsdetail sofort verfuegbar sind. Bisher setzte PROJ-209 nur `orders.manual_tracking_number`/`status='shipped'` und legte keine `shipping_tasks`-Zeile an. Die Label-Action-Bar und die `additional-label`/`return-label`-Endpoints sind aber hart an `shipping_tasks.id` als Pivot gekoppelt -> „+ Etikett“ disabled, „Retoure“ gar nicht gerendert. Live-Vorfall Pixkom 2026-05-18 Auftrag 36317 (Dropshipper-Versand mit DHL-Tracking) fuehrte zu Quick-Fix per DB-Insert + dieser strukturellen Loesung. POST/PATCH/DELETE-Handler in `manual-tracking/route.ts` rufen jetzt einen neuen Helper `src/lib/shipping/manual-tracking-task.ts` auf, der eine `shipping_task` mit `label_type='outbound'`, `status='completed'`, `shipping_label_url=null` schreibt/updated/loescht. Idempotent ueber `(order_id, tracking_number)`. Schutz vor Antasten echter DHL/DP-Tasks via `shipping_label_url IS NULL`-Filter in PATCH/DELETE. Plus Backfill-Migration fuer 52 Bestands-Orders auf Pixkom mit `manual_tracking_number` ohne entsprechende Task. 11 Vitest-Specs gruen, TS+Lint clean.
PROJ-319: Picklisten-Tag-Filter Schema-Split — `tag_filters` JSONB aufgeteilt in zwei semantisch klare Konzepte: `must_have` (Einschluss, AND/OR-Toggle) und `must_not_have` (Ausschluss, immer AND). Behebt einen Live-Bug bei Pixkom, wo alle drei Standard-Profile (One-Scan, Multi, DHL Paket) `logic="OR"` mit reinen `HAS_NOT`-Regeln kombiniert hatten — strukturell wirkungslos (`HAS_NOT(A) ∨ HAS_NOT(B)` ist nur false wenn beide Tags). PL-2026-0240/0237/0236 hatten dadurch je 1-2 Aufträge mit Personalisierte-Artikel-Tag obwohl ausgeschlossen. Root Cause war nicht der Helper-Code (boole'sch korrekt), sondern dass das Schema HAS und HAS_NOT als gleichwertige Operatoren mit globalem Logic-Toggle modellierte — die Kombination HAS_NOT+OR ist damit strukturell unmöglich geworden. Migration backfillt deterministisch (4 Profile, kein Mixed-Fall im Bestand), Helper hat Read-Fallback für eine Release-Phase. UI: zwei klar getrennte Sektionen 'Aufträge müssen diese Tags haben' und 'Aufträge dürfen diese Tags NICHT haben'. Sofort-Daten-Hotfix der 3 betroffenen Pixkom-Profile von OR auf AND auf Production am 2026-05-15 vor Implementierung deployed. PR #267, Production-Migration verifiziert (alle 4 Profile sauber im neuen Schema), 23 Vitest-Specs grün, Independent-Code-Review clean.
PROJ-317 Kostenlose Ersatzlieferung sofort als bezahlt anlegen — Neuer Switch „Sofort als bezahlt markieren“ (Default an) im Replacement-Modus des OrderFormDialog; POST /api/orders/[id]/replacement akzeptiert mark_as_paid: boolean und setzt financial_status beim Insert auf 'paid' oder 'pending'. Spart einen manuellen Klick pro Ersatzanlage, Order erscheint direkt auf der Standard-Pickliste (PROJ-210-Filter status='open' AND financial_status='paid'). Nur im Replacement-Modus sichtbar, Edit/Normal-Anlage unverändert. Keine Migration. Deployed via PR #259.
PROJ-315: Drucker-Zuweisung für Etiketten-Typen pro Workstation. Neue Tabelle label_type_printer_assignments (Workstation × label_type → Primär+Fallback-Drucker) symmetrisch zur bestehenden shipping_method_printer_assignments. Workstation-Detail-Drawer bekommt zwei Sektionen 'Versandarten' + 'Etiketten' — der bestehende Form-Component wurde via entityKind-Pattern generalisiert. Print-Label-Dialog macht jetzt einen Lookup auf die neue Tabelle vor print_jobs.insert und schreibt printer_id mit; ohne Zuweisung erscheint ein Toast mit Hinweis auf Settings statt eines hängenden Print-Jobs. Behebt strukturelle Lücke aus PROJ-99/304/306/312/314 (der gesamte 'An Drucker senden'-Pfad im Etikettendruck-Modul hatte zuvor keinen Drucker).
PROJ-306: Etikettenvorlagen — Multi-Field, Marke, Default-Vorlage. Vorlagen können jetzt mehrere Text-Felder gleichzeitig anzeigen (z.B. Name + SKU + Marke), die Marke ist als neue Feld-Option dazugekommen (Lookup gegen `manufacturers.brand_name`), und Vorlagen können als "Standard" für ihre Kategorie markiert werden — im Druck-Dialog automatisch vorausgewählt (Workspace-Default vor System-Default). Plus Bug-Fix: Toast bei Anlege-Fehler reicht jetzt die DB-Fehlermeldung durch (vorher anonym „Fehler beim Erstellen:"). DB-CHECK-Constraints für Whitelist-Werte hinzu, damit ungültige Enum-Werte nicht mehr silent in der DB landen. Migration backfilled bestehende Single-Field-Vorlagen verlustfrei ins neue Multi-Field-Format.
PROJ-303: Amazon Carrier + Versandart Mapping. Behebt strukturell den Live-Bug 2026-05-07 (17+ FBM-Orders dauerhaft mit Amazon-Fehler 25 weil Workspace-Setting `carrier_overrides["DHL Paket"]="Paket"` einen ungültigen CarrierCode-Enum-Wert produzierte — der Hotfix #240 mit Commit-Tag PROJ-301 hatte das Symptom bereits behoben). Neues Mapping-Feld `amazon_method_overrides` parallel zum legacy `carrier_overrides` (Backward-Compat 1 Release), 3-Spalten-Settings-UI: Flowkom Versandart | Amazon Transportdienst (Combobox aus AMAZON_CARRIER_CODES-Whitelist mit ~63 SP-API-XSD-Enum-Werten, ungültige Werte rot mit Save-Block) | Amazon Versandart (Freitext, leer = Element weglassen). Resolver `resolveCarrierAndMethodForOrder` nutzt neue Map zuerst, fällt auf Legacy-Pfad zurück (PROJ-293-Manual-Tracking-Verhalten unverändert). Idempotente Backfill-Migration kopiert bestehende `carrier_overrides`-Daten als `{carrier: <wert>, method: ""}` ins neue Schema, skippt Workspaces ohne Daten. KEIN DEFAULT_SHIPPING_METHOD_MAP (vermeidet stillen Behavior-Change bei live-only-Testing). 13 Vitest-Specs grün (10 resolveCarrierAndMethodForOrder + 3 buildShipmentConfirmationXml), TS+Lint clean, Staging+Production-Migration ohne Fehler durchgelaufen. SP-API-Doku-Recherche bestätigt: CarrierCode = strikter XSD-Enum, ShippingMethod = Freitext. INDEX wurde von PROJ-301 auf PROJ-303 retagged nach Race mit PROJ-301 (LB Flexible Kostenstruktur, #233) und PROJ-302 (LB-Kanban Cost-Pills, #237) — Hotfix-Commit-Tag bleibt PROJ-301 per Memory-Regel.
PROJ-302: LB-Kanban Cost-Presence-Pills. Drei kleine Pills auf den LB-Kanban-Karten (Truck/Landmark/Package für Fracht/Zoll/Sonstige) zeigen auf einen Blick, ob für eine Lieferantenbestellung Kostenpositionen erfasst wurden. Pills nur sichtbar wenn `purchase_order_costs`-Zeilen vom jeweiligen Typ existieren — bei leeren LBs bleibt die Card unverändert kompakt. Tooltip beim Hover zeigt den EUR-aggregierten Betrag pro Typ (FX-konvertiert via `convertCostLineToEur`, de-DE-Format mit Komma-Dezimaltrennung und Euro-Symbol). Visueller Stil parallel zu IncotermBadge/TransportModeBadge (shadcn `Badge variant=outline`, kompaktes 3x3-Icon). Approach: separater Endpoint `GET /api/purchase-orders/cost-summary?ids=...` (cap 200, RLS-isoliert über bestehende Policy auf `purchase_order_costs`) plus dedicated TanStack-Query-Hook, der nur im Kanban-Modus aktiv ist — der bestehende `/api/purchase-orders`-Listen-Endpoint (mit der PROJ-294-Search-RPC) bleibt unangetastet, kein Migrations-/Schema-Risiko. 12 neue Vitest-Specs (7 Endpoint-Boundary inkl. ID-Cap, malformed-UUIDs, FX-Konvertierung + 5 Component-Render mit Umlaute-Check), Lint+Build clean.
PROJ-301: Lieferantenbestellung — Flexible Kostenstruktur mit Multi-Currency. Ablöse der vier festen Kosten-Slots (`freight_cost`/`customs_cost`/`other_costs_eur`/`other_costs_foreign`) auf `purchase_orders` durch zwei neue Tabellen `purchase_order_costs` (N Zeilen pro LB mit Typ Frachtkosten/Zollkosten/Sonstige + Beschreibung + Betrag + Währung + Verteilung) und `purchase_order_fx_rates` (ein Kurs pro genutzter Fremdwährung pro LB, 'Kurs abrufen' gegen EZB/Frankfurter API). Frachtkosten in Fremdwährung sind jetzt erfassbar (vorher nur EUR), jede Position hat eigene Verteilung (Volumen/Warenwert/Menge), Beschreibung Pflicht bei Typ=Sonstige. RPC `calculate_landed_costs` komplett neu geschrieben — iteriert Cost-Lines, FX-konvertiert in EUR, aggregiert pro Allocation-Method UND pro Typ → `goods_receipt_items.{freight,customs,other}_allocation_eur` bleiben für Profitbutler-Reporting befüllt. Auto-Recalc-Trigger auf beiden neuen Tabellen + Advisory-Lock gegen Doppelberechnung sichern rückwirkende Einstandspreis-Synchronität bei jeder Korrektur (auch für Wareneingänge die Wochen zurückliegen). Migration backfillt Bestand atomar inkl. Parity-Check (Toleranz 0,01 €) gegen vorherige `landed_cost_eur` — Drift bricht Migration ab. UI-Tab-Rewrite: shadcn-Table mit Inline-Edit, Empty-State, Live-EUR-Summe + per-Typ-Aufschlüsselung mit FX-Konvertierungs-Hinweis. Deutsche Decimal-Eingabe (Komma) korrekt geparst via defaultValue+onBlur. Details-Sidebar 'Summen' synchronisiert via geteiltem TanStack-Query-Cache — Edits propagieren sofort in beide Views. Branch + Migration tragen Tag PROJ-299 (initial-Race), INDEX wurde nach zweiter Race retagged auf PROJ-301. Alte Spalten erst per Folge-Migration nach 1 Woche stabilem Rollout gedroppt (PROJ-302 geplant).
PROJ-295: Neuer Mobile-Endpoint /api/mobile/storage-locations/[id]/contents — liefert Artikel + Bestand pro Lagerplatz, sortiert nach Menge desc, gefiltert auf nicht-archivierte Artikel im Mapper. FBA-Lagerplätze (warehouses.is_read_only) geben 403 mit klarer deutscher Fehlermeldung. Pure mapper + Route mit Zod-UUID-Validation + workspace-scoped Queries. 5 Vitest-Tests grün. Companion zu PROJ-291. Wird in Mobile-Komponenten ProductLocationsList (jetzt mit onSelect-Erweiterung) und neuer LocationContentsList genutzt — siehe Mobile-Eintrag 1.8.4.
PROJ-291: Neuer Mobile-Endpoint /api/mobile/products/[id]/locations für die Wareneingang-Erweiterung der Mobile-App. Liefert Bestände pro Lagerplatz (Menge desc), filtert FBA-Pool serverseitig via warehouses.is_read_only, Sperrlager bleiben drin (UI-Markierung downstream). Standard authenticateRequest()-Auth, Zod-UUID-Validation, defensiver Null-Join-Filter im Mapper, 5 Vitest-Tests. Branch + Commit-Tag historisch PROJ-290 (ID-Race mit Cost-Breakdown-PR #219), INDEX-Eintrag retagged auf PROJ-291.
PROJ-289: Bestellvorschlag rechnet ab sofort mit Total-Inventory. current_stock umfasst Hauptlager + FBA-Pool, Sperrlager bleibt raus (Discriminator warehouses.is_read_only aus PROJ-177). Behebt drei stille Bugs aus PROJ-251/PROJ-287: reine FBA-Artikel mit leerem Hauptlager bekamen mit Toggle 'Nur Tage mit Bestand' Vorschlag 0 obwohl sie sich verkauften, Backwards-Rekonstruktion startete bei Hauptlager-Stand und zog FBA-Movements mit ab (Drift), und FBA-Demand wurde zwar gezaehlt aber FBA-Bestand nicht abgezogen. Response erweitert um fba_stock fuers UI-Breakdown. Keine DB-Migration. PR #218.
PROJ-288: LB-PDF Produkt-Cell. Produkttitel wrappt zweizeilig statt hartem Ellipsis-Cut bei 28/35 Zeichen, Lieferantenbeschreibung (supplier_products.supplier_product_description) erscheint klein/grau als optionale 3. Zeile unter SKU/EAN. Bestehende Spalte 'Lief.-Art.-Nr.' bleibt rechts. Live-Lookup zur PDF-Zeit, keine DB-Migration. Dynamische rowHeight pro Item, alternierender Hintergrund und Page-Break-Check ziehen die echte Hoehe. PR #217.
PROJ-287: Bestellvorschlag auftragsbasiert. Tagesverbrauch wird aus order_line_items + orders berechnet statt aus stock_movements (PROJ-274 wird abgelöst). Behebt Live-Vorfall SKU 100147 — eine einzelne PROJ-177-Drift-Reset-Zeile (-442 Einheiten am 09.04.) hatte den Vorschlag auf 20,17 Einheiten/Tag aufgeblasen, obwohl real nur 45 Bestellungen in 30 Tagen liefen (~1,5/Tag). Stornos und Voll-Refunds zählen nicht, Bundle-Verkäufe schlagen via Komponenten-Expansion durch, Datum über created_at. Neue SECURITY-INVOKER RPC calculate_supplier_order_consumption mit UNION ALL über direkte und Bundle-Komponenten-Sales. Frontend, Schema und Toggles unverändert. PR #216.
PROJ-283: Einkaufsliste 'Alle löschen'-Button. Toolbar-Button neben 'Produkt hinzufuegen' mit Trash-Icon, leert die komplette Einkaufsliste workspace-weit nach Confirm-Dialog. Neuer DELETE-Endpoint /api/shopping-list/items (rate-limited 10/min, optional ?supplier_id=<uuid> für lieferantenscharfes Leeren) gibt deleted-Count zurück, damit der Toast die exakte Anzahl entfernter Artikel zeigt. Confirm-Dialog ist destructive-styled (rot) und nennt Anzahl Artikel und Lieferanten beim Namen. Button erscheint nur wenn die Liste nicht leer ist.
PROJ-282: Bestellvorschlag berücksichtigt Einkaufslisten-Mengen. Analog zum bestehenden 'Im-Zulauf-Bestand einbeziehen'-Toggle gibt es jetzt einen zweiten Toggle 'Mengen auf Einkaufsliste einbeziehen' (Default an). Mengen, die für diesen Lieferanten bereits auf shopping_list_items stehen, werden aus der Vorgeschl. Menge abgezogen — verhindert doppelten Einkauf wenn man den Vorschlag mehrfach durchläuft oder zwischendurch manuell Artikel auf die Liste setzt. Lieferantenscharf: gleiche SKU für anderen Lieferanten auf der Einkaufsliste zählt NICHT mit. Schema-Erweiterung consider_shopping_list, neue Map onShoppingListByProduct, Subtraktion in der MOQ-Formel: max(forecastedNeed - alreadyOrdered - currentStock - onShoppingList, 0). Response-Item bekommt on_shopping_list-Feld, Tabelle bekommt sortierbare Spalte 'Auf Einkaufsliste' zwischen 'Im Zulauf' und 'Vorgeschl. Menge', Mobile-Card-Detail-Grid bekommt eine Zeile mehr.
PROJ-279: Bestellvorschlag — Lieferanten-Produkt aus Vorschlag ausschließen. Neues Flag supplier_products.exclude_from_purchase_suggestion (BOOLEAN DEFAULT false) ermöglicht es, einzelne Lieferanten-Produkt-Mappings dauerhaft aus dem Bestellvorschlag zu entfernen — z.B. für Auslaufprodukte, manuell bewirtschaftete Artikel, oder einzelne zu teure Lieferanten einer SKU ohne andere Lieferanten der gleichen SKU zu blockieren. Default false = bestehendes Verhalten für alle Live-Daten, kein Bestandsdaten-Eingriff. UI: per-Row EyeOff-Icon im Vorschlag (Desktop) bzw. Aus-Vorschlag-ausschliessen-Button (Mobile) mit optimistic remove und Success-Toast inkl. Reaktivierungs-Hinweis. Reaktivierung via zweiter Checkbox im Lieferanten-Zuordnungs-Dialog (analog is_preferred). API: neuer rate-limited PATCH-Endpoint /api/supplier-products/[id]/exclude-from-suggestion mit Workspace-Ownership-Check. Calculate-Route filtert markierte Mappings raus und gibt supplier_product_id mit zurück. Partial-Index auf (supplier_id) WHERE exclude=false hält den Suggestion-Pfad schnell. Branch trägt Tag PROJ-278 wegen ID-Race mit dem parallel gemergten Allokations-UI-Refactor.
PROJ-278: Allokations-Dropdowns inline in den Kosten-Cards des LB-Detail-Overlays. UX-Folge zu PROJ-271 — statt einer separaten 'Verteilmethode pro Kostenart'-Card mit drei Zeilen ist die Allokations-Auswahl jetzt direkt in den Frachtkosten-, Zollkosten- und Sonstige-Kosten (EUR)-Cards integriert (jeweils als 'Verteilung'-Zeile unter dem Betrag-Input). Hinweis in der Sonstige-Card markiert, dass die Methode für EUR und Fremdwährung gemeinsam gilt (es ist ein einziges Bucket im RPC). Reine UI-Restrukturierung, RPC und Datenmodell unverändert. Branch trägt Tag PROJ-277 wegen ID-Race mit dem Bulk-Add-Final-Fix; INDEX und commit nutzen PROJ-278.
PROJ-276 (TARIC): LB-Detail-Overlay zeigt jetzt den TARIC-Code des Produkts inline neben der SKU in der Positionsliste (Format '<sku> · TARIC <code>'), damit Einkauf und Lager den Zolltarifcode sehen, ohne den Artikel öffnen zu müssen. Wird nur gerendert, wenn das Produkt einen Code hat (PROJ-126), sonst bleibt die Anzeige bei der bisherigen reinen SKU. Technisch: taric_code wurde durch den PO_DETAIL_SELECT-Join, den POLineItem.product-Type und PositionRowData gezogen; itemToRow mappt aus dem Join in das Row-Modell. Reine UI-Erweiterung im Detail-Overlay, keine DB-Migration. Branch + Commit-Tag bleiben auf PROJ-275 wegen ID-Race mit dem Mixed-Allocation-Hotfix in v1.84.017 (PR #201 wurde gemerged während dieses Feature im Review war).
PROJ-274: Bestellvorschlag — FBA-Bedarf einbeziehen + Tabellen-Polish. Bisher zählten nur pick/transfer_out-Movements als Verbrauch; FBA-Verkäufe (gebucht als amazon_fba_sync, siehe PROJ-177) wurden ignoriert, sodass für rein FBA-vertriebene SKUs Bestellvorschlag stets 0 herauskam. Fix: amazon_fba_sync ist jetzt Teil der Consumption-Movement-Types, aber nur negative Quantity-Changes zählen — positive Werte sind Inbound-Versand zu Amazon oder Drift-up-Korrekturen und dürfen nicht als Verkauf gezählt werden. Production-Verifikation: 1000 letzte amazon_fba_sync-Movements zeigten 874 negativ vs 126 positiv. Plus UI-Polish in der Bestellvorschlags-Tabelle: Sticky-Header bleibt beim Scrollen sichtbar (max-h-Container mit overflow-auto), alle Spalten sind klickbar sortierbar mit ArrowUp/ArrowDown-Icon-Indikator, neues Suchfeld filtert live nach Produktname und SKU, Footer zeigt bei aktiver Suche 'X von Y (gefiltert)'. Default-Sort bleibt 'Vorgeschl. Menge' absteigend (heutiges visuelles Verhalten, jetzt explizit). Mobile-Cards respektieren die Suche ebenfalls. Bewusst NICHT in Scope: Lager-Auswahl-Filter — erstmal beobachten, ob FBA-Einbeziehung allein reicht.
PROJ-271: Hybrid-Allokation für Nachlaufkosten (Fracht / Zoll / Sonstige). Bisher wurde eine einzige cost_allocation_method (volume / value / quantity) für Fracht UND Zoll UND Sonstige zugleich genutzt — konzeptuell falsch, weil Zoll im EU-Recht stets ein Prozentsatz auf den Warenwert ist und Fracht physisch nach Volumen abgerechnet wird. Drei neue Spalten auf purchase_orders (freight/customs/other_allocation_method), Default für neue LBs: freight=volume, customs=value, other=value. Bestehende LBs erben rückwärtskompatibel ihre alte Methode in alle drei Felder, kein Verhaltenswandel auf historischen FIFO-Werten. RPC calculate_landed_costs() berechnet drei separate Shares pro Kostenart mit Mixed-Mode-Normalisierung (Items ohne Maße im Volume-Modus → qty-Anteil, Σ shares = 1 garantiert). Neue UI im LB-Detail mit drei Dropdowns. landed-cost-preview.ts spiegelt die DB-Logik exakt. 9 Vitest-Tests, 84 von 84 Tests im purchase-order-Bereich grün. Konkret betraf das LB-10056/SKU 200155: Differenz zwischen volume- und value-allokiertem Zoll war ~0,07 €/Stk (102,75 € vs. 82,77 € auf 300 Einheiten).
PROJ-265: BEFORE-DELETE-Trigger auf orders fängt Order-Hard-Delete atomar in der Transaktion ab — App-Hook-Snapshot ist jetzt redundante Defense-in-Depth statt einzige Verteidigung.
PROJ-265: DB-Trigger auf order_line_items + orders.status UPSERTen Reservierungsänderungen automatisch in inventory_sync_queue — Shopify-Bestandssync ist jetzt resilient gegen App-Layer-Hook-Failures (verhindert Drift wie zuletzt SKU 200266: Shopify zeigte 998 statt 997).
PROJ-262 Produkt-SKU Auto-Vergabe & Nummernkreis: Konfigurierbarer Nummernkreis für Produkt-SKUs analog PROJ-65/120 — vierte Card im Nummernkreise-Tab unter Einstellungen → Allgemein. Auto-Vergabe greift NUR bei manueller Produkt-Anlage und im Variantengenerator; Importe (Shopify, Amazon, CSV) behalten ihre Original-SKU bewusst, weil deren SKU der Lookup-Key fürs Re-Import-Dedupe ist. Atomarer `generate_product_sku()` RPC mit Retry-Loop gegen den bestehenden Unique-Constraint `products_unique_sku_per_workspace` zählt automatisch über Kollisionen mit existierenden SKUs hinweg (z.B. wenn jemand parallel manuell `200270` setzt). POST `/api/products` neu (war vorher nur GET), Frontend-Anlage geht über den neuen Endpoint statt direktem `supabase.from().insert()`. Variantengenerator fällt auf RPC zurück wenn Kind-SKU leer bleibt. PUT `/api/settings/workspace/product-sku-sequence` mit monotonic-guard `>= current` für den Startwert-Setter (anders als die anderen drei Nummernkreise immer verfügbar, weil Bestandskunden mit existierenden SKUs den Counter initial setzen müssen — User-Initial: 200270). QA-Härtung: POST-Schema mit `.strict()` + expliziter Allowlist (~30 Felder) gegen Mass-Assignment, Retry-Loop on 23505 (max 3) für Race gegen parallel manuell vergebene SKU, kein `parentSku || "PROD"`-Fallback mehr im Variantengenerator (sonst inkonsistente Eltern/Kind-SKUs wenn Eltern auto-vergeben wird). 24 neue Vitest-Tests (Helper, POST-Route, Variantengenerator). Doku in flowkom-docs unter einstellungen/allgemein.mdx ergänzt.
PROJ-260: Produkt-Notizen + Dateien-Tab-Restrukturierung. Neuer Main-Tab 'Notizen' im Produktdetail analog Aufträge/LBs (product_notes-Tabelle mit RLS, eigene Notizen editier-/löschbar). Die Main-Tabs 'Dateien' und 'Dokumente' sind zu einem Main-Tab 'Dateien' mit Subtabs Cloud/Dokumente zusammengefasst — Tab-Count im Strip bleibt gleich. Zusätzlich: Shared NoteContent-Renderer macht URLs in Produkt-, Auftrags- und LB-Notizen klickbar (öffnet in neuem Tab, erkennt trailing Punctuation).
Amazon FBM Bearbeitungszeit (lead_time_to_ship_max_days) pro SKU pflegbar — im Produktdetail-Plattformen-Tab und im Integrations-Listings-Manager inkl. Bulk-Action (PROJ-255).
PROJ-254 FBA Bulk-Backfill UI-Modal: Der in v1.81.000 als CLI-only gedachte Admin-Endpoint bekommt doch eine UI — neuer Button „Bulk-Backfill…" im FBA-Bereich der Amazon-Settings-Seite öffnet einen Dialog mit Days/Concurrency-Inputs und Start-Button. Der Dialog verbindet sich direkt per `fetch` + `ReadableStream`-Reader mit dem SSE-Endpoint, rendert Live-Progress mit Badges (processed/total, ok/skipped/failed), Progress-Bar und gescrolltem Log (max 500 Zeilen). Abort-Button bricht den Stream sauber via AbortController ab. Dialog ist nicht schließbar während aktiv (Toast-Hint). Nur bei FBA sichtbar, FBM sieht den Button nicht. Bash-Script Default-Host mit korrigiert (`flowkom.app` → `app.flowkom.de`).
PROJ-254 Amazon FBA Bulk-Backfill (One-Shot Admin): Admin-SSE-Endpoint `POST /api/admin/amazon/backfill-fba` für einmalige großvolumige FBA-Imports (10k+ Orders in einem Rutsch). Zieht **einen einzigen** Shipments-Invoicing-Report statt 40× via Auto-Cron, paginiert `getOrders` mit NextToken und ruft processOne concurrent mit Limit 3 auf (bleibt unter Amazon's 30-getOrder-Burst). Live-Progress als Server-Sent-Events, Bash-Looper `scripts/run-fba-backfill.sh` streamt pro Order eine Terminal-Zeile. Idempotent (bestehender `amazon_order_id`-Upsert überspringt schon importierte Orders — erscheint als `order_skipped`-Event). Admin-only, Workspace-scoped, keine UI — bewusst CLI-only damit keiner den Bulk-Import versehentlich klickt. Realistische Dauer: 1–2 h für 10 000 EU-Orders statt 20h+ via Auto-Cron. Keine DB-Migration.
PROJ-253 Versandfehler-Aufträge im Pickliste-Versand-Scan werden ans Queue-Ende gestellt: Wenn ein Auftrag einen DHL- oder Deutsche-Post-Internetmarken-Fehler geworfen hat (offener `dhl_error_log`-Eintrag), sortiert der Picklist-Orders-Endpoint ihn ans Ende der Liste — der Quick-Scan-Flow überspringt ihn automatisch und greift sich zuerst fehlerfreie Aufträge für den gescannten Artikel. Fehlerhafte Aufträge bleiben in der Tabelle sichtbar mit einem roten „Versandfehler"-Badge, damit klar ist warum der Auftrag nicht drankommt. Korrektur läuft wie gehabt über den Versandfehler-Tab; nach erfolgreichem Retry setzt der Auto-Resolve-Pfad den Auftrag automatisch zurück in die reguläre Chronologie.
PROJ-250 FBA-Tracking sichtbar im Auftragsdetail: Neuer Card-Block „Versand durch Amazon" unter der Versandart zeigt Tracking-Nummer + Carrier-Badge + Copy-Button pro FBA-Sendung. Greift auf `shipping_labels`-Rows mit `shipping_task_id IS NULL` (Amazon versendet selbst, keine Flowkom-Packtask). Multi-Paket-FBA rendert mehrere Cards.
PROJ-251 Bestellvorschlag OOS-Korrektur: Neue Option „Nur Tage mit Bestand berücksichtigen" teilt den Verbrauch durch die Tage, an denen tatsächlich Bestand vorhanden war (rückwärts aus `stock_movements` rekonstruiert), statt stur durch den kompletten Analysezeitraum. Verhindert systematische Unterschätzung des Bedarfs bei Artikeln mit OOS-Phasen. Default aus — bestehendes Verhalten bleibt unverändert.
PROJ-250 Amazon FBA-Tracking-Import & Billing-Konsistenz: Der bestehende Shipments-Invoicing-Report (EU) bzw. -Tax-Report (NA) wird nun zusätzlich auf `carrier`, `tracking-number` und `shipment-date` pro Shipment-Zeile geparst. Für jede FBA-Order landet pro versendetem Paket eine eigene Row in `shipping_labels` (idempotent via `(order_id, tracking_number)`-Precheck und neuem Composite-Index). `orders.shipped_at` wird beim ersten Import auf die früheste Shipment-Date gesetzt — NULL-guarded via PostgREST `.is("shipped_at", null)`, damit manuell eingetragene Werte nie überschrieben werden. Billing-Snapshot wurde empirisch auf Production verifiziert: der bestehende Mapper `buildAmazonOrderAddressFields` füllt bereits alle 14 `billing_*`-Felder korrekt aus Shipping-Daten (Amazon liefert strukturell keine separate Rechnungsadresse — Bill=Ship ist Branchenstandard wie bei JTL/Sellerboard/Linnworks). Migration: `shipping_labels.label_pdf_url` auf nullable (FBA-Rows haben kein eigenes Label-PDF). Helper `upsertFbaShipments` ist try/catch-hardened — Netzwerk-Blips dürfen den Import nicht aufreißen. Multi-Paket-Orders zeigen alle Tracking-Nummern automatisch im bestehenden Versandhistorie-Sheet (PROJ-218). FBM-Pfad komplett unberührt durch `channel === "FBA"`-Guard. Kein neuer SP-API-Call, kein neuer RDT-Scope — nutzt denselben Report wie PROJ-175.
PROJ-249 Amazon Feed-Historie (Audit-Trail): Neue Tabelle amazon_feed_history + privater Storage-Bucket amazon-feeds. Jeder SP-API-Feed-Submit (inventory, zero_out, dry_run) persistiert Metadaten + JSON-Payload. RLS workspace-scoped, signed-URL-Downloads, Retention 90 Tage analog PROJ-47.
PROJ-249 Feed-Vorschau (Dry-Run) unter /dashboard/settings/integrations/[id]/amazon/feed-preview: Zeigt pro Marketplace den nächsten Inventory-Feed, Item-Count, SKU-Liste mit qty, Raw-JSON-Accordion, JSON-Download. Durchläuft denselben Code-Pfad wie der echte Push ohne submitFeed. Jeder Dry-Run wird in der Feed-Historie protokolliert.
PROJ-249 FBA Zero-Out-Admin-Button: Einmalige gelbe Warning-Card auf der Amazon-Integration-Seite, die für alle Listings mit amazon_fba_inventory-Eintrag einen JSON_LISTINGS_FEED mit qty=0 über den FBM-Kanal sendet. Admin-only, AlertDialog-Confirm, idempotent. Neutralisiert historisch fälschlich übertragenen FBM-Bestand für FBA-SKUs bei Amazon, ohne den FBA-Bestand anzufassen.
PROJ-249 FBA-Badge mit Tooltip in der Listings-Management-Tabelle: `FBA • Sync aus` macht explizit, dass für FBA-Listings kein Flowkom-Bestand an Amazon übertragen wird (Amazon verwaltet FBA-Bestand selbst).
PROJ-248 PR-g2: DB-Drop der Legacy-Shipping-Spalten. 7 Spalten auf `orders` (shipping_company, shipping_first_name, shipping_last_name, shipping_recipient_name, shipping_address_line_2, shipping_address_line_3, shipping_address_category) + 3 auf `customers` gedroppt. `customer_addresses` unberührt (Billing nutzt Canonical-Felder weiter). `orders_with_totals`-View wird mit-dropped und neu erstellt (PostgreSQL-Constraint). 16 Dateien Code-Cleanup. Finale Abschluss der PROJ-248-Serie nach 10 PRs.
PROJ-248 Shipping Address DHL-Flat Schema — Lieferadressen folgen jetzt 1:1 dem DHL-Geschäftskundenportal-Schema (name1/name2/name3 + street + post_number + PLZ/Ort/Bundesland/Land/Telefon). UIs in Customer-Dialog, Order-Edit-Dialog, Manual-Create-Dialog und Versandfehler-Cockpit nutzen einheitliches DHL-Portal-Layout mit 4-Adresstyp-Radio (Straße/Packstation/Filiale/Postfach), NAME 1/2/3-Block mit Tauschen-Button für Amazon-B2B-Vertauschungs-Fälle und mode-aware Straße-Block. Shopify- und Amazon-Importer schreiben direkt in die flat-Felder. DHL- und DP-Internetmarke-Ship-Routes lesen flat. Strukturelle Bug-Behebung: Amazon-BuyerName kann nicht mehr ins DHL-/DP-Label als Empfängerzeile rutschen (z.B. „Amazon Business EU SARL"-Fall). Billing-Adressen bleiben bewusst auf Canonical-Schema für Anrede + USt-IdNr. + ZUGFeRD-Export. Shared Helper canonicalNamesToFlat + canonicalRowToShippingAddress fasst vorher 4× duplizierte Mapping-Logik zusammen und fixt nebenbei latenten Whitespace-Bug.
PROJ-246 Profitbutler Bestandsbewertung zeigt jetzt den Zulauf aus bezahlten und genehmigten/verschickten Lieferantenbestellungen als Pseudo-Lager „Im Zulauf" (plus „Gesamt inkl. Zulauf"-Zeile und Sublabel am Lagerwert-Tile). Bewertungsbasis: offene Menge × Stückpreis / Wechselkurs — Nachlaufkosten sind bewusst nicht enthalten, weil sie erst beim Wareneingang final allokiert werden. Teilweise oder vollständig erhaltene LBs fallen automatisch raus, damit nichts doppelt zählt; die erhaltenen Stücke laufen weiter durch FIFO.
PROJ-245 Auftragspositionen im Versandhistorie-Sheet: Im Side-Sheet der Versandhistorie werden jetzt die Auftragspositionen mit Produktbild, Titel, SKU und Menge angezeigt. Badges für Freipositionen, Service-Artikel und archivierte Produkte. Bild-Fallback auf deleted_product_image_url für gelöschte Produkte (PROJ-119). Reine UI-Erweiterung — Daten kommen bereits über useOrder().
PROJ-244 Picklisten-Profile-Badge mit Bestandsprüfung: Die Auftragszahl auf den Profile-Karten zeigt jetzt die tatsächlich picklistbare Anzahl — vorher nur Filter-Match, weichte beim Klick auf 'Pickliste erstellen' häufig ab. Neuer Shared-Helper `computeFulfillableOrders` wird von Badge, Preview-Count und Create gemeinsam genutzt (Drift-Prevention per Konstruktion): Bundle-Expansion (PROJ-184), Service-Artikel-Ausschluss (PROJ-98), Stock-Query mit Lager-/Lagerplatz-Filter, Reservierungs-Abzug (PROJ-195), Greedy-Fulfillment. Info-Icon + Tooltip neben Badge wenn Aufträge wegen fehlendem Bestand rausfallen. Unmatched-Banner bleibt filter-basiert (Konfigurationslücke ≠ Bestandslücke).
Produktfilter: Neue Option 'Ohne Lieferant' im Lieferanten-Filter (analog zu 'Ohne Marke' und 'Keine Versandart'). Findet alle Produkte ohne supplier_products-Zuordnung — ideal, um Artikel zu identifizieren, bei denen der Einkauf noch nachpflegen muss.
PROJ-241 PR-a — Foundation: CanonicalAddress TypeScript-Type + 5 Mapper (orders, customers, customer_addresses, billkom JSONB, workspaces) + 7 UI-Primitives (AddressFields, AddressFormSkeleton, AddressCompanyBlock, AddressPersonBlock, AddressStreetBlock mit Packstation-Detection, AddressLocationBlock mit CountryCombobox, AddressContactBlock) + Zod-Validation-Schemata (shipping/billing/sender) + 64 Tests mit realen Fixture-Daten (Auftrag 02041 Amazon, 02042 Shopify Packstation, synthetisches B2B, US-International, Legacy-Billkom-Snapshot). Rein additiv — keine bestehende Form geändert.
PROJ-240 — Label-Aktionen für abgeschlossene und stornierte Aufträge freigegeben: Die Buttons "Nachdrucken" (Reprint), "Retoure" und "+ Etikett" in der Versand-Sektion des Auftragsdetails sind jetzt auch bei Status completed/cancelled sichtbar. Vorher hat die PROJ-200-Auftragssperre die gesamte Versand-Section auf readonly gesetzt und damit Label-Aktionen versteckt — obwohl die dahinterliegenden APIs (reprint, return-label, additional-label) den Order-Status ohnehin nicht prüfen. Adress- und Tracking-Edits bleiben weiterhin gesperrt (ManualTrackingSection behält readonly).
PROJ-239 Teil 2/4 — Versandfehler-Cockpit: In der Versandfehler-Queue blendet sich bei jedem Fehler-Row eine Collapsible "Original-Daten vom Shop" ein, die alle Import-Notizen (Shopify/Amazon-Rohdaten) als Monospace-Block anzeigt. Mitarbeiter sieht sofort was der Kunde wirklich eingetragen hat. Korrektur-Formular um Adresszeile 2, Adresszeile 3, DHL-Postnummer erweitert; Postnummer wird bei erkanntem Packstation/Postfiliale-Pattern als Pflicht mit rotem Rand markiert. /api/shipping/errors/[id]/correct speichert die neuen Felder, Retry nutzt sie automatisch.
PROJ-239 Teil 1/4 — Adress-Mapping Foundation: Schema-Migration mit neuen Spalten orders.shipping_post_number/billing_post_number, customers.shipping_post_number/billing_post_number + shipping_address_line_2/3 + billing_address_line_2/3, customer_addresses.post_number. Neuer shipping-address-parser mit parsePackstationStreet (matchet Packstation + 3-stellige ID, lockerID 100-999), parsePostfilialeStreet (retailID 401-999), isDhlPostNumber (6-10 Ziffern), routeAddressLine2 (entscheidet ob address2 in address_line_2 oder post_number gehört). Shopify-Importer routet address2 jetzt strukturiert: bei Packstation-Pattern in post_number, sonst in address_line_2. 22 Unit-Tests inkl. Edge Cases wie 'Packstationstraße 5' (matcht nicht). Grundlage für DHL- und DP-Versand-Mapping.
Profitbutler Bestandsbewertung UI-Rework: Volltext-Suche, Filter-Drawer mit Lager/Quelle/Schätzungs-Typ/Bestand-Spanne/Lagerwert-Spanne, aktive Filter-Chips, klickbare Coverage-Badges als Quickfilter + Progress-Bar, Lager-Card mit aufklappbaren Drill-Down-Zeilen (Top-10 Artikel pro Lager) und klickbaren Lager-Namen als Quickfilter, CSV-Export mit pro-Lager-Spalten, Produktdetail-Direktlinks in jeder Zeile, Live-Summen unter aktiven Filtern
PROJ-237: LB Nachlaufkosten UI — Fracht/Zoll/Sonstige EUR/Sonstige Fremdwährung mit Kurs-Abruf-Button (EZB), drei Verteilmethoden (Volumen/Warenwert/Menge), retroaktive FIFO-Korrektur für bereits gebuchte Wareneingänge, Einstandspreis-Preview pro Position. HelpLink zur neuen Nachlaufkosten-Doku im Kosten-Tab.
Profitbutler Bestandsbewertung — Hybrid-Bewertung: FIFO-abgedeckte Stücke aus echten LB-Schichten + Rest-Stücke via manual_landed_cost_eur → supplier_products.purchase_price (preferred) → 0. Neue Response-Felder fifo_qty/fallback_qty/unvalued_qty pro Produkt. UI zeigt Coverage-Badges (FIFO/Lieferanten-EK/Unbewertet) und bei Mischbestand per-Zeile Aufteilung (z.B. '500 FIFO · 1048 LE')
PROJ-236: Kanban Parent/Child-Gruppierung — Eltern-Karten kollabieren zu einer Karte mit Kinder-Zähler, Expand/Collapse pro User persistiert. Cascade-Drag beim Parent-Move bewegt Eltern + alle Kinder mit gleichem Board-Status atomar (neue Supabase-RPC + API-Route). Stray-Kinder in abweichender Spalte erscheinen eigenständig mit ↳-Parent-Hinweis und amber Akzent-Rand. Undo-Toast (6 Sek) nach Cascade-Move. Bundles bleiben Einzelkarten.
PROJ-234: Profitbutler-Auswertung pro Artikel — im Profitbutler-Tab der Produktdetailansicht gibt es jetzt einen neuen Untertab „Auswertung" zwischen „Kalkulation" und „Retouren". Der Tab zeigt genau die Auswertungen der Profitbutler-Hauptseite (Umsatz-/Gewinn-Chart über 7/14/30/90 Tage, Multi-Perioden-Sellerboard mit Umsatz, Stornos, Warenkosten-Gruppen, Gewinn, Marge, Bestellungen, Ø Bestellwert und Erstattungen, sowie aufklappbarer Kanal-Breakdown) — aber eingeschränkt auf den aktuell geöffneten Artikel. Ohne Bestellungen im Zeitraum erscheint ein Empty State. Perioden-Konfiguration bleibt workspace-weit auf der Hauptseite.
PROJ-233: Zahlungen-Tab an Lieferantenbestellungen — jede LB hat jetzt einen eigenen Reiter, in dem Anzahlungen und Teilzahlungen mit Datum, Betrag und optionaler Notiz erfasst werden. Der Zahlungsstatus der Bestellung (Unbezahlt / Anbezahlt / Vollständig bezahlt) wird automatisch aus der Summe aller Zahlungen und dem PO-Total abgeleitet — sowohl beim Erfassen als auch beim Löschen. Die Sidebar-Card „Zahlung" zeigt den gezahlten Betrag und den offenen Restbetrag live in LB-Währung. Beträge werden intern in Cents gespeichert, UI akzeptiert deutsche Dezimalformate (1,23 oder 1.23). Zahlungen sind immutable (nur anlegen + löschen, kein Edit).
PROJ-232: LB-Übersichts-Redesign — analog zur Kundenaufträge-Seite. Neuer View-Toggle zwischen Kanban und konfigurierbarer Listen-Ansicht (14 Spalten, 6 als Default sichtbar, Auswahl pro User persistiert). Pipeline-Tabs zeigen Live-Counts pro Status. Neue Unified Search mit sechs Scopes (Überall / LB-Nummer / Lieferant / Lieferanten-Artikelnummer / Produkt SKU+Name / Notizen) — „Überall" macht eine OR-Union über alle Scopes. Neuer Filter-Drawer rechts mit Multi-Select für Zahlungsstatus, Lieferant, Lager, Incoterm, Transportart plus Datum-Ranges. Aktive Filter erscheinen als Chips mit einzeln-entfernbaren X-Icons plus einem roten „Alle zurücksetzen"-Button. Listenspalten für Incoterm, Transportart, Lager, Positionen, Erhalten %, Erstellt-von und Genehmigt-von neu verfügbar.
PROJ-232: Notizen-Tab an Lieferantenbestellungen — jeder Workspace-Member kann chronologisch Kommentare hinzufügen (Autor + Zeitstempel werden automatisch gesetzt, „bearbeitet"-Hinweis wenn nachträglich geändert). Eigene Notizen lassen sich editieren oder löschen, fremde sind schreibgeschützt (API gibt 403 zurück). Tab-Label zeigt Count-Badge. Cmd+Enter speichert eine neue Notiz direkt.
PROJ-232: Versandinfo-Tags und Notizen sind jetzt volltext-durchsuchbar — die Übersicht findet LBs auch wenn der Suchbegriff nur in einer Notiz oder der Lieferanten-Artikelnummer steht.
PROJ-232: Versandinfo-Tags (Incoterm & Transportart) sind jetzt im LB-Detail-Overlay und auf den Kanban-Karten sichtbar. Im Detail gibt es eine neue Sidebar-Card zwischen Lieferant und Summen — im Bearbeiten-Modus per Dropdown änderbar, im Ansichtsmodus mit Badges. Der Header des Overlays zeigt die gesetzten Tags neben dem Status-Badge, die Kanban-Karte zeigt sie unter dem Gesamtbetrag (nur wenn gesetzt). Jeder Tag lässt sich einzeln auf „Nicht gesetzt" zurücksetzen und verschwindet dann wieder aus allen Ansichten.
PROJ-232: Lieferantenbestellungen können jetzt mit Versandinfo-Tags (Incoterm & Transportart) angereichert werden. Incoterms gemäß ICC 2020 (EXW, FCA, FAS, FOB, CFR, CIF, CPT, CIP, DAP, DPU, DDP), Transportarten Schiff/Luft/Zug/LKW. Backend-Endpoint akzeptiert die neuen Felder, null entfernt einen gesetzten Tag wieder. UI folgt in einem Folgecommit.
PROJ-231: Google Drive als zweiter Cloud-Provider neben OneDrive. Admins können beide Clouds parallel verbinden und pro Use-Case (Produkte / Lieferantenbestellungen) einzeln aktivieren — pro Workspace und Use-Case darf nur eine Cloud aktiv sein (DB-Level-Exklusivität via Partial-Unique-Indexes, UI zeigt bei Kollision disabled-Checkbox mit Hinweis auf den aktuellen Blocker-Provider).
PROJ-231: Neuer „Dokumente"-Tab im LB-Detail-Overlay zeigt Cloud-Ordner-Inhalte direkt in Flowkom. Auto-Match sucht Drive-weit nach der LB-Nummer mit Token-Boundary-Erkennung (LB-10058 matcht nicht LB-10008), Shared-Ordner wie „LB-10058 / LB-10061 / LB-10067" erscheinen als Kandidaten-Picker, leere Treffer bieten „Ordner anlegen" oder manuelle Auswahl. Lazy Mount via Radix Tabs — Drive-API-Quota wird nur belastet wenn der Tab tatsächlich geöffnet wird.
PROJ-231: Tabelle product_cloud_folders wurde zu polymorphem cloud_folder_links (entity_type: product | purchase_order) generalisiert. Bestehende OneDrive-Produkt-Verknüpfungen bleiben unverändert, die alte Tabelle wird für die Rolling-Deploy-Phase als Compat-View weiter bereitgestellt.
PROJ-229: Neuer Import-Typ „JTL Historische Aufträge" im Daten-Hub. Upload-Step lädt den CSV-Export direkt in Supabase Storage; Preview-Step analysiert die ersten 512 KB und zeigt Anzahl der Aufträge, erkannte Verkaufskanäle, Duplikate gegen bestehende Aufträge sowie ggf. Mojibake. Klick auf „Import starten" legt einen Background-Job an — der Worker läuft asynchron (1–3 h bei 150k Aufträgen).
PROJ-230: Lieferantenbestellungen können gelöscht werden (via 3-Punkte-Menü in der Liste und im Detail-Overlay). Guard verhindert das Löschen, wenn bereits Wareneingänge gebucht wurden — der Server antwortet dann mit einer klaren Fehlermeldung.
PROJ-230: LB-Status sind jetzt in beide Richtungen bewegbar — draft ↔ pending_approval ↔ approved ↔ shipped, sowie cancelled → draft und rejected → pending_approval. Partially_received und completed bleiben WE-gesteuerte Einbahnstraßen (werden nur beim Buchen eines Wareneingangs gesetzt). Jede Status-Änderung wird in der History protokolliert.
PROJ-228: Versandart-Filter in der Kundenaufträge-Übersicht. Neuer Multi-Select-Abschnitt im Filter-Drawer mit allen aktiven Versandarten als lila Toggles. Aktive Auswahl erscheint als Chip in der Aktive-Filter-Leiste.
PROJ-228: Copy-Buttons neben der Auftragsnummer und der externen Bestellnummer in der Auftragsliste. Hover-Icon + Klick kopieren den Wert in die Zwischenablage.
PROJ-223: Kundenaufträge-Übersicht aufgeräumt — kompakte Status-Tabs ersetzen die großen Pipeline-Kacheln. Eine Unified Search mit Scope-Dropdown (Überall/Auftrag+Kunde/Artikel/Notizen/Externe Nr.) findet Amazon-Bestellnummern in der externen Bestellnr., eBay-Nummern in Notizen und Artikel per SKU/EAN/ASIN/FNSKU. Neuer Filter-Drawer rechts bündelt Verkaufskanal, Zahlstatus, Kanal-Quelle, Tags, Zeitraum und Freipositionen. Aktive Filter erscheinen als Chipleiste mit auffälligem rotem 'Alle zurücksetzen'-Button.
PROJ-223 Backend: Neuer search_scope-Parameter an GET /api/orders mit OR-Union über orders.order_number, orders.external_order_number, customers.*, order_notes.content und order_line_items (via products.sku/sku2/barcode/fnsku + amazon_listings.seller_sku/asin). Trigram-GIN-Indizes auf allen neuen Suchfeldern für Full-Table-Scan-Vermeidung. notes_search bleibt als Legacy-Alias funktional.
Shopify Bestellstatus-Sync granular pro Integration steuerbar: Master-Toggle plus vier Sub-Toggles (Stornierungen, Versandstatus, Zahlstatus & Erstattungen, Sendungsnummern). Master aus → Cron überspringt die Integration komplett; einzelne Sub-Toggles aus → nur die abgeschalteten Bereiche werden übersprungen. Tracking-Import bleibt an den Versandstatus-Sync gekoppelt. Bestandsintegrationen behalten Standardverhalten (alle Toggles an).
Amazon Bestellstatus-Sync granular steuerbar: Drei neue Sub-Toggles (Stornierungen, Versandstatus, Sendungsnummern). Abgeschaltete Teile werden vom Cron übersprungen, Tracking-Import bleibt vom Versandstatus-Sync abhängig. Bestandsintegrationen behalten Standardverhalten (alle Sub-Toggles an).
Versand-Dialog: Vollständige Lieferadresse (inkl. Land als Klartext) und Versandverpackung mit Preis dezent angezeigt
PROJ-215: Picklisten-Versand-Entkopplung — Versand aus laufenden/pending Picklisten, Bestandsabbuchung beim Versand, Auto-Complete
Volle Mitarbeiter-Rechte: Alle 192 API-Routen + alle RLS-Policies + alle RPCs für Mitarbeiter geöffnet. Nur Einstellungen, Profitbutler und Team-Verwaltung bleiben Admin-exklusiv.
Wareneingang LB-basiert: Lagerplatz-Feld ist jetzt eine durchsuchbare Combobox (Barcode-Scanner + Tastatursuche)
PROJ-209: Manuelle Trackingnummer & Fulfillment-Trigger — Tracking + Carrier im Auftrag hinterlegen, Status auf versendet setzen, Fulfillment an Shopify/Amazon übertragen
PROJ-207: Report-Worker upserted Listing-Daten aus GET_MERCHANT_LISTINGS_ALL_DATA direkt in DB (Status, ASIN, Titel, Preis, Menge, Fulfillment-Channel)
PROJ-207: Auto-Mapping (remapUnmappedListings + propagateCrossMpMapping) läuft nach jedem Report-Cleanup-Lauf
PROJ-207: Vereinfachte Diff-Logik — Reaktivierungs-Block entfernt, da Upsert bereits korrekten Status setzt
PROJ-64: Auftragsreservierungen vom Bestandssync abgezogen (Amazon + Shopify) — verhindert Überverkauf am Wochenende, Safety-Sync pusht jetzt physisch − offene Aufträge
Audit-Logging in alle Admin API Routes eingebaut (user_management, integration, workflow, settings, tags, print, picklist, customers, orders, products)
PROJ-203: Pipeline-Navigation und Alert Strip in Auftragsübersicht integriert (Status-Filter per Klick, Tages-KPIs mit Umsatz/unbezahlt/Adressfehler)
PROJ-203: OrderStatusIndicator circle component — 32x32px Statuskreis pro Auftragszeile mit 7 Prioritätsstufen (Problem, NEU, Wartend, In Bearbeitung, Gepickt, Versendet/Abgeschlossen, Storniert)
PROJ-203: /api/orders/stats Endpoint (Status-Counts + Tages-KPIs: Aufträge, Umsatz, unbezahlt, Adressfehler) + useOrderStats Hook für Pipeline-Navigation und Alert Strip
OrderPipeline Navigation-Komponente: Klickbare Status-Segmente mit farbigen Fortschrittsbalken für Auftragsübersicht (PROJ-203)
Produkt-Plattformen-Tab: Zentrale Übersicht aller Integrations-Verknüpfungen pro Artikel (Multi-SKU, FBA/FBM, Bestandssync-Toggle)
PROJ-203: inventory_sync_enabled auf integration_product_mappings, amazon_sync_inventory migriert und entfernt
PROJ-202: Amazon Listing Stale-Detection & Cleanup — Wöchentlicher Report-basierter Vollabgleich (GET_MERCHANT_LISTINGS_ALL_DATA + CANCELLED), Status deleted mit Löschdatum/Grund, 90-Tage-Archivierung, Order-Mapping Archiv-Fallback, Cron-Endpoint mit Toggle
Bundle-Badge auch bei ausgeklappten Kindartikel in Produktübersicht
Child-Badge in Produktübersicht bei Kindartikel
Bundle-Badge in Varianten-Tabelle bei Elternartikel (is_bundle im API ergänzt)
Bundle-Badge in Varianten-Tabelle bei Elternartikel (neben SKU)
Per-Product Amazon Sync — Checkbox pro Artikel steuert ob FBM-Bestandsabgleich den Lagerbestand an Amazon überträgt (Default: aus)
PROJ-201: Shopify Product Push — Produkte (Einzelartikel + Varianten) per GraphQL Admin API als Draft auf Shopify anlegen, automatische Verknüpfung via integration_product_mappings, Bestandssync greift sofort
PROJ-200: Frontend-Bearbeitungssperre — Action-Buttons gesperrt bei abgeschlossenen/stornierten Aufträgen, Lock-Banner mit Statushinweis, Adressbearbeitung readonly, Versand-Aktionen (Etikett/Retoure/Nachdrucken) ausgeblendet
PROJ-200: Auftrags-Bearbeitungssperre — Abgeschlossene/stornierte Aufträge: PUT/Adressen/Versandart/Status gesperrt, Erstattungen bei stornierten Aufträgen blockiert, Status-Änderungen bei abgeschlossenen Aufträgen nur noch Stornierung erlaubt
Einzelner Versandfehler löschbar per Trash-Button in der Fehler-Zeile
Alle Versandfehler auf einmal löschen mit Bestätigungs-Dialog (AlertDialog)
Versandfehler-Queue & Adresskorrektur — Fehlerliste mit Badge, Inline-Adresskorrektur, Blocking/Non-Blocking pro Picklisten-Profil, zweistufiges Error-Mapping für DHL & Deutsche Post (PROJ-199)
PROJ-199: Ship-API gibt error_log_id zurück (DHL + DP Fehler-Insert mit .select('id').single())
PROJ-199: ShippingErrorCorrectionModal — Blocking-Dialog mit Fehlermapping, editierbaren Adressfeldern (nur bei address-Fehlern) und Retry via PATCH /api/shipping/errors/:id/correct
PROJ-199: ShippingScanningDialog Non-Blocking-Modus — bei shippingErrorBehavior='non_blocking' Toast + Fehlerliste statt Modal
PROJ-199: ShippingPicklist-Typ um shipping_error_behavior erweitert, Prop an ShippingScanningDialog weitergegeben
PROJ-199: Shipping Errors Table — aufklappbare Fehlerliste mit Schweregrad-Farbkodierung, Adresskorrektur-Formular (nur bei address-Fehlern), technischen Details und Carrier-Filter
PROJ-199: Shipping Errors Page unter /dashboard/outbound/shipping/errors mit Carrier-Dropdown und Gesamtanzahl-Anzeige
PROJ-199: TanStack Query hooks useShippingErrors und useShippingErrorCount (30s Auto-Refetch)
PROJ-199: ShippingNav-Badge zeigt offene Versandfehler mit rotem Counter-Badge
PROJ-199: GET /api/shipping/errors — Versandfehler-Liste mit Auftrags-Adress-Join, Count-Only-Modus für Badge, Carrier-Filter und Pagination
PROJ-199: PATCH /api/shipping/errors/[id]/correct — Adresskorrektur mit optionalem Versand-Retry, Auto-Resolve bei bereits versendeten Aufträgen, Retry-Count-Tracking
PROJ-199: Zwei-Stufen Versandfehler-Mapping-Modul — Tier 1 feste Codes (AUTH_FAILED, DP_BALANCE_INSUFFICIENT etc.), Tier 2 Keyword-Parsing von Fehlermeldungen (PLZ, Hausnummer, Straße, Stadt, Land, Gewicht, EKP, Produktcode) mit Schweregrad-Farbgebung für Versandfehler-Queue
Amazon-Import triggert jetzt Workflows (FBM + FBA), neue ignore_fba Checkbox in Workflow-Einstellungen
PROJ-197: Bundle-Scan im Versand — Komponenten einzeln oder Bundle-Barcode scannen, visuelles Bundle-Badge, Server-Validierung für Komponenten-IDs
PROJ-166: Versandbestätigung Vorschau (Trockenlauf) — Preview-Dialog zeigt ausstehende FBM-Bestellungen mit Carrier, Tracking, Versanddatum
PROJ-196: Pickliste Löschen statt Stornieren — delete_picklist() RPC mit Rebook-Option, Smart Delete Dialog, cancelled Status komplett entfernt
Neuer Auftrag direkt aus Kundendetailseite erstellen (Kunde vorausgewählt)
PROJ-195: Picklisten-Bestandsreservierung — Lagerplatzbezogene Reservierung durch offene Picklisten, DB-Level Enforcement (FOR UPDATE Lock), verfügbare Menge in UI/API, Doppel-Reservierungs-Schutz bei Picklisten-Erstellung
PROJ-4: Bulk-Typ-Änderung für Lagerplätze — Checkbox-Auswahl + Dropdown zum Setzen von Pick & Versand / Nachfüll / Gesperrt für mehrere Standorte gleichzeitig
PROJ-192: Zwei-Phasen Status+Tracking Sync — Phase 1 (GENERAL Report) für Status, Phase 2 (restricted SHIPPING Report mit RDT) für Tracking-Nummern und Carrier
PROJ-194: show_alternative_currency Toggles (Amazon, Billkom Kanäle) + Währungs-Info-Banner im Belegdialog
PROJ-194: BMF-Kursverwaltung UI (Billkom Settings Tab "Währungen", Pending-Banner, Bulk-Apply)
PROJ-194: PDF-Generator rendert Alternativwährung pro Position + Kurs-Footer (§16 Abs. 6 UStG)
PROJ-194: Invoice-Creation speichert Währungsfelder aus Order (BMF > ECB Kurs-Priorität)
PROJ-194: BMF-Monatskurs API (GET/PUT/POST apply) für manuelle Kursverwaltung
PROJ-194: Währungs-Formatierung (formatCentsCurrency) und currency-helpers für Kurs-Logik
PROJ-194: DB-Migration — Währungs-Spalten auf billkom_documents, document_items und channel_configs
PROJ-55: Shopify Safety-Sync — vollständiger Bestandsabgleich aller Artikel als Reconciliation-Layer, Intervall konfigurierbar (Standard: 2h)
PROJ-55: Safety-Sync Intervall-Selector in Shopify-Integrationseinstellungen (1h bis 24h)
PROJ-193: Multi-Currency Orders — Amazon-Bestellungen in Originalwährung importieren, ECB-Tageskurs beim Import konvertieren (Dual-Storage), Kurs-Cache-Tabelle, retroaktive Migration für bestehende Nicht-EUR-Bestellungen, Währungs-Badge in Bestellliste, Kurs-Info-Box im Bestelldetail
Cron-Jobs Einstellungsseite komplett redesigned — 20+ Jobs in 5 Kategorien (Shopify, Amazon, Workflows, Profitbutler, Cleanup) gruppiert, kompakte Zeilen mit Health-Dots statt voller Cards, Summary-Bar mit Gesund/Verspätet/Fehler-Zähler, Einrichtungsanleitungen auf 3 Ein-Klick-Kopier-Cards reduziert (vorher 3× die volle 20-Job-Liste)
PROJ-55: Bundle-Artikel Bestandssync — Shopify + Amazon erhalten berechneten Bundle-Bestand (MIN(Komponenten/Menge)), nicht mehr 0
PROJ-55: Dirty-Flag Cascade — Komponenten-Änderung flaggt automatisch Eltern-Bundles für Shopify- und Amazon-Sync
PROJ-193: Freie Wareneingänge aus FIFO-Bewertung ausgeschlossen — nur LB-basierte WEs fließen in den Einstandspreis ein, DB-Migration bereinigt bestehende Daten, 3 API-Routen gefiltert
PROJ-192 Amazon FBM Bestellstatus-Sync — Neuer Cron-Job holt regelmäßig den Bestellstatus und Tracking-Nummern für FBM-Bestellungen von Amazon ab (Reports API: GET_FLAT_FILE_ALL_ORDERS_DATA_BY_LAST_UPDATE_GENERAL). Status-Mapping (Shipped→shipped, Cancelled→cancelled, PartiallyShipped→in_progress), Tracking als shipping_task mit Duplikat-Check, Shipment-Confirmation-Skip (amazon_confirmation_sent_at), Downgrade-Schutz, Audit Trail, Advisory Lock, Cursor-basiert. Toggle 'Automatischer Bestellstatus-Sync' in den Amazon-Einstellungen (default: aus). 22 Unit Tests.
PROJ-191 Amazon JSON_LISTINGS_FEED Migration — FBM-Bestandssync migriert von deprecated POST_INVENTORY_AVAILABILITY_DATA (XML, tot seit Juli 2025) auf JSON_LISTINGS_FEED mit PATCH-Semantik. fulfillment_channel_code DEFAULT für FBM, productType PRODUCT universell, Content-Type application/json; charset=UTF-8. Per-Marketplace-Architektur bleibt bestehen.
PROJ-190: Bestandsbewertung & Einstandspreis-Konsolidierung — Manueller Einstandspreis am Produkt mit FIFO-Kaskade (Toggle → FIFO → Manuell → null), FBA-Bewertung auf Durchschnitts-Einstandspreis umgestellt, neuer Profitbutler Sub-Tab "Bestandsbewertung" mit Lagerwert pro Lager, Artikelliste und Lücken-Warnung, Lagerwert aus Bestandsübersicht entfernt, Datenhub-Import für manuellen Einstandspreis
PROJ-190: Datenhub Schema-Overlay um manual_landed_cost_eur erweitert — Feld erhält deutschen Anzeigenamen 'Manueller Einstandspreis (EUR)', Gruppe 'Einkauf' und Synonyme für CSV-Auto-Mapping
Bestandsbewertung-Link im Profitbutler-Header (navigiert zu /dashboard/profitbutler/inventory-valuation)
Gesamter-Lagerwert-Karte aus Bestandsübersicht entfernt (Lagerwert jetzt im Profitbutler-Modul)
PROJ-190 Bestandsbewertung Profitbutler Sub-Tab — Neue Unterseite /dashboard/profitbutler/inventory-valuation mit Lagerwert-Summary, Warehouse-Breakdown-Tabelle, sortierbarer Artikelbewertungs-Tabelle (FIFO/Manuell/Keine Bewertung Badges), Warnbanner für Artikel ohne Einstandspreis mit Filter-Toggle.
PROJ-189: Amazon Financial Events Pull — Automatischer Import von Erstattungen & Adjustments aus Amazon (Cron mit Cursor + 6h Overlap, Hash-basierte Idempotenz, Auto-Gutschrift bei Voll-/Teil-Refund, Dedup gegen Push-Marker, AdjustmentEvent capture-only)
PROJ-190 FBA-Kostenlookup auf Bewertungskaskade umgestellt — getAmazonFbaValuationCost() in src/lib/amazon/fba-cost-lookup.ts nutzt jetzt resolveValuation() statt supplier_products.purchase_price. Kaskade: prefer_manual_cost + manual_landed_cost_eur > FIFO-Avg aus stock_movements Receipts > manual_landed_cost_eur Fallback > null.
PROJ-190 Bewertungskaskade in cost-breakdown API — GET /api/products/[id]/cost-breakdown liefert jetzt zusaetzlich effective_cost_eur, valuation_source, manual_landed_cost_eur, prefer_manual_cost und fifo_receipt_count. Produktabfrage wurde auf manual_landed_cost_eur und prefer_manual_cost erweitert. resolveValuation() aus src/lib/inventory-valuation.ts loest die Kaskade auf (manuell > FIFO-Avg > null) und gibt die aktive Quelle zurueck.
Amazon Refund & Cancel Push (PROJ-188): Erstattungen und FBM-Stornierungen werden über SP-API Feeds an Amazon gepusht. Job-Queue mit Status-Cron, Dedup-Marker, Badge + Historie-Sheet im Auftragsdetail, Settings-Toggles, Dialog-Checkboxen.
PROJ-186 Verkaufskanal „Flowkom" für manuell angelegte Aufträge — Kundenaufträge, die direkt in Flowkom angelegt werden (source=manual), bekommen jetzt automatisch den Verkaufskanal `flowkom`. Neuer Eintrag in src/lib/channel-config.ts (KNOWN_CHANNELS) mit Flowkom-Blau (#2563EB) und eigenem SVG-Icon (public/channels/flowkom.svg). API-Insert in src/app/api/orders/route.ts setzt sales_channel=flowkom beim Anlegen, Backfill-Migration setzt bestehende Manual-Aufträge ohne Kanal rückwirkend. Badge „Flowkom" erscheint automatisch in Auftragsliste, Filter-Dropdown und Profitbutler-Kanalaufschlüsselung; Workflow-Bedingungen auf sales_channel greifen jetzt auch für manuelle Aufträge.
PROJ-185: Beim manuellen Anlegen einer Rechnungsadresse erscheint jetzt eine optionale Checkbox 'Auch als Lieferadresse übernehmen'. Wenn aktiv, wird die Adresse zusätzlich als Lieferadresse gespeichert — spart den doppelten Eintrag. Einmaliges Kopieren, keine Verknüpfung (spätere Änderungen an der Rechnungsadresse wirken sich nicht auf die Lieferadresse aus). Nur bei Neuanlage, nicht im Bearbeiten-Modus.
PROJ-184: Bundle-Artikel können endlich auf Picklisten landen. Bundles haben selbst keinen Bestand — nur ihre Komponenten (bundle_items). Vorher hat der Stock-Check gegen die leere Bundle-SKU geprüft und jede Bestellung mit Bundle-Artikel als 'nicht genug Bestand' stumm gedroppt. Neuer Expand-Schritt (src/lib/picklist-bundles.ts) löst Bundle-Line-Items in ihre Komponenten auf, bevor der Stock-Check läuft. picklist_item_assignments zeigt weiterhin auf den echten Bestell-Line-Item (Bundle-Parent), der Packer sieht die Bundle-SKU wie bisher, der Picker sieht die physischen Komponenten.
PROJ-184: Safety-Gate gegen Zero-Position-Picklisten — Aufträge, deren Bundle-Expansion leer ist (Bundle-Artikel ohne konfigurierte Komponenten), werden nicht mehr als erfüllbar markiert und erzeugen eine Warning beim Admin, damit die Bundle-Definition nachgezogen werden kann.
PROJ-182: Picklisten Filter-Parity — Shared picklist-filters Modul, Preview und Erstellung teilen sich jetzt eine einzige Filter-Pipeline. tag_filters, max_orders, warehouse_ids und location_filters werden jetzt konsistent von Profil-Karten, Vorschau und Erstellung angewandt (vorher drifteten die drei Implementierungen auseinander und Preview zeigte Aufträge die dann nicht auf der Pickliste landeten). Stock-Hinweis-Pill im Erstell-Dialog wenn Bestand/Lagerfilter gesetzt sind.
PROJ-182: Picklisten-Erstellung max_orders-Cap läuft jetzt NACH dem Stock-Check (nicht davor) — Stock-Drops fressen nicht mehr ins Cap-Budget. Drop-Counter pro Filter-Stage (Auftragstyp, Tag-Filter, Stock, Max-Limit) werden als Toast beim Erstellen angezeigt.
PROJ-182: Versand-Detailseite zeigt jetzt einen echten Fehler-State mit 'Erneut versuchen'-Button wenn die API fehlschlägt, statt stumm 'Alle Aufträge versendet' zu rendern. Schützt zukünftig vor Bugs der Klasse v1.44.011 (gedroppte Spalten).
PROJ-181: Neue Lieferantenbestellung — Supplier-First-Flow (kleines Dialog zur Lieferantenauswahl, dann direkt ins Fullscreen-Bestellformular im Edit-Modus, altes Popup-Formular entfernt)
PROJ-180: Auftragsdetail zeigt magnalister Otto Retoure-Bridge Status (Übertragen/Fehlgeschlagen) wenn Metadaten vorhanden
PROJ-180: Zod-Schema für Integration-PATCH erweitert — bridge_m2e_cloud_enabled und bridge_magnalister_enabled explizit als boolean optional deklariert
PROJ-180: Marktplatz-Bridges UI — M2E Cloud Modus und magnalister Modus als unabhängige Toggles in der Shopify-Integrationsdetailseite
PROJ-179 Bestands-Reiter im Artikeldetail — Neuer Tab "Bestand" in der Artikeldetailseite mit Sub-Tabs Uebersicht, Im Zulauf, Reserviert und Historie. Lazy Loading pro Sub-Tab, keine neuen Tabellen (nutzt bestehende stock/stock_movements/purchase_order_items/order_items). Fuer Bundle-Artikel wird ein Info-Banner statt der Sub-Tabs angezeigt; Service-Artikel (inventory_tracking=false) bekommen den Tab nicht. Die alte FBA-Overlap-Warnung im Header der Artikelseite wurde entfernt und lebt jetzt im Bestand-Uebersicht-Panel.
PROJ-180: pushMagnalisterReturnAttributes GraphQL helper — read-merge-write auf Shopify Order.customAttributes für magnalister Otto Retoure-Felder
PROJ-180 mergeOrderCustomAttributes — Pure Hilfsfunktion in src/lib/shopify/fulfillment.ts, die Shopify-Order customAttributes (bestehende Liste + Updates) sicher zusammenfuehrt: bestehende Keys ohne Update bleiben an ihrer Position, aktualisierte Keys werden ans Ende verschoben. TDD: 4 Tests (neue Keys anhaengen, Idempotenz, leere existing, Reihenfolge-Invarianz). Wird von pushMagnalisterReturnAttributes genutzt, um Shopifys orderUpdate-Semantik (ersetzt die gesamte customAttributes-Liste) zu erfuellen.
PROJ-180 magnalister Otto Retoure-Bridge — Migration setzt bridge_m2e_cloud_enabled = true für alle bestehenden Shopify-Integrationen, damit Bestandsinstallationen ihr bisheriges Verhalten (Retoure als zweites Tracking) behalten. bridge_magnalister_enabled bleibt false und muss manuell aktiviert werden.
PROJ-177 Amazon FBA-Bestand als echtes Flowkom-Lager — FBA-Pull schreibt jetzt stock-Rows im FBA-POOL des FBA-Warehouses (sync_amazon_fba_stock RPC + Reconciliation), Bewertung via supplier_products.purchase_price. Dadurch enthalten Lagerwert (PROJ-74) und Bestellvorschlag (PROJ-22) automatisch den FBA-Bestand. Read-only Warehouse + FBA-POOL Location via neuem create_system_locations Trigger-Branch, Backfill-Hook beim Mapping (Single + Bulk). Interim-Phase bis PROJ-178 mit Doppelzählungs-Warnung auf der Artikel-Detailseite.
PROJ-176 Profitbutler-Integration: Amazon FBA-Bestellungen werden automatisch mit 0 EUR Versand-, Verpackungs- und Pick&Pack-Kosten ausgewiesen, weil Amazon das Fulfillment uebernimmt. Order-Level Versandart hat Vorrang vor Produkt-Default.
PROJ-176 Amazon FBA Auto-Versandart — alle FBA-Bestellungen bekommen automatisch die Versandart "Versand durch Amazon" (Carrier: Amazon). Bestehende FBA-Orders werden rueckwirkend getaggt, neue Workspaces bekommen die Versandart per Seed. Workflow-Regeln und Profitbutler koennen FBA jetzt sauber filtern.
PROJ-175 Amazon FBA Kundendaten-Enrichment — volle Käufer-PII (Name, Straße, PLZ, Stadt) werden jetzt über den Shipments-Invoicing-Report (Reports-API) nachgeladen, wie es auch JTL macht. Ersetzt die von Amazon redigierten Orders-v0-Daten bei EU-FBA.
Picklist-Profil-Karten zeigen die konfigurierten Artikel-Tag-Filter jetzt direkt als Badges mit Tag-Name, Farbe und HAS_NOT-Kennzeichnung an (statt nur 'X Tag-Filter').
PROJ-174: Fehlerzeilen-CSV-Download im Lagerbestand-Initialimport Dry-Run. Neuer Button im Strict-Mode-Banner lädt bei Fehlerzeilen eine CSV mit allen Originalspalten plus zusätzlicher 'Fehler'-Spalte herunter — so kann der Nutzer die problematischen Zeilen gezielt korrigieren und neu hochladen.
PROJ-174: Lagerbestand-Initialimport (CSV) für JTL-Migration. Neuer Import-Target-Typ 'Lagerbestand — Initialbefüllung (JTL-Migration)' im Daten-Hub Import-Wizard. Akzeptiert JTL-Bestands-Export-CSVs mit Pflichtspalten Artikelnummer, Lagerplatz, Einzubuchende Menge (Header case-insensitive + Synonyme, DE-Dezimalkomma). Kein Mapping-Step — Spalten sind fix. Strict-Mode hart erzwungen: bei ≥1 Fehlerzeile (unbekannte SKU, unbekannter Lagerplatz, Bundle/Service-Artikel, ungültige Menge) wird der Import blockiert, User muss CSV korrigieren und neu hochladen. Bei grünem Dry-Run werden die Zeilen nach warehouse_id gruppiert und in Chunks à 200 Items atomar über die bestehende complete_goods_receipt-RPC (PROJ-6/PROJ-73) gebucht — Stock, Stock-Movements, Goods-Receipt-Header, FIFO-Layer und Landed-Cost-Integration bleiben automatisch konsistent. Mengen werden additiv pro Zeile verbucht. Job-Protokollierung in data_jobs, sichtbar im bestehenden Daten-Hub Job-Verlauf.
PROJ-172: Nächtlicher automatischer Amazon Listings Refresh. Neuer Cron-Endpoint /api/cron/amazon-listings-nightly-refresh iteriert seriell über alle aktiven Amazon-Integrationen (Opt-Out pro Integration via metadata.amazon.nightly_refresh_enabled) und treibt den PROJ-169-Listings-Sync-Worker komplett ohne HTTP-Loop zur Completion. Geschedulet extern wie die anderen Amazon-Crons (0 2 * * *, vor dem FBA-Inventory-Pull um 03:15). Time-Budget 20 Minuten pro Integration, per-Marketplace-Fehler-Isolation (ein fehlgeschlagener MP stoppt den Job nicht mehr). Neuer Settings-Toggle 'Nächtlicher Listings-Refresh' + 'Jetzt starten'-Testbutton pro Integration. Neuer Eintrag in der Cron-Jobs-Tab-Übersicht.
PROJ-167: Testing-Button 'Importierte löschen' pro Kanal (FBM und FBA) in den Amazon-Order-Import-Blöcken. Löscht alle importierten Bestellungen des gewählten Kanals inkl. abhängiger Tabellen und der dadurch verwaisten Amazon-Kunden dieser Integration. Nur für die Testphase gedacht, Confirm-Dialog mit 'nicht rückgängig'-Warnung, keine Safety-Checks (die saubere Version folgt über PROJ-173).
PROJ-171: Amazon FBA-Bestand wird in der Listings-Management-UI angezeigt — Spalte 'FBA-Bestand' default-sichtbar, Filter 'Bestand = 0' aktiv. DB-Trigger aggregiert amazon_fba_inventory → amazon_listings.quantity automatisch, stündlicher Cron und manueller Pull-Button bleiben unverändert.
PROJ-170: Amazon-Angebote verwalten — Neue Full-Page unter Integration → Amazon → 'Alle Angebote verwalten'. JTL-artige Multi-Select-Tabelle (shadcn/ui) mit Filterleiste (Marktplatz-Multi-Select, Fulfillment, Status, 'Nur nicht zugeordnet', Volltextsuche via Trigram-Indizes), Filter-Chips, URL-Deep-Links, serverseitiger Pagination (50/Page), sortierbaren Headers auf indizierten Spalten. Bulk-Aktionen: Zuordnen (mit Cross-Marketplace-Propagation), Zuordnung aufheben, Aus Sortiment entfernen (Soft-Delete). 'Alle N gefilterten auswählen'-Modus lädt IDs on-demand. Selektion überlebt Page-Wechsel, Confirm-Dialog bei Filter-Wechsel mit aktiver Auswahl. Konfigurierbare Spalten via ColumnPicker (localStorage pro User, Drag & Drop). CSV-Export der gefilterten Ansicht (Excel-DE, 50k Hard-Cap). Empty-States für leere Filter vs. kein Sync. HelpLink auf neue MDX-Doku. Wiederverwendbarer ProductPickerDialog aus AmazonMappingDialog extrahiert (src/components/products/product-picker-dialog.tsx). AmazonListingsBlock im Integration-Detail auf Kurz-Übersicht (5 jüngste Zeilen + Button) reduziert, alter Einzelzeilen-Dialog entfernt.
PROJ-170: Backend-Fundament für das JTL-Style Amazon Listings-Management — Trigram-Indizes für Volltextsuche (Titel, SKU, ASIN), erweiterter List-Endpoint mit Multi-Marketplace-/Fulfillment-/Status-/Unmapped-/Sort-Filtern, drei Bulk-Endpoints (Zuordnen mit Cross-MP-Vererbung, Zuordnung aufheben, Aus-Sortiment-entfernen als Soft-Delete via status='inactive') und CSV-Export (Excel-DE, BOM, Semikolon) — UI folgt in Session 2
PROJ-169: Amazon Listings-Sync als Background-Job mit Multi-Marketplace-Support, Live-Progress-Bar, JTL-Wawi-Modell (N:1 Mapping, FBA/FBM-Suffix Auto-Match, Cross-MP Mapping-Propagation), server-seitiger withStatus=BUYABLE Filter, inkrementeller Default-Sync, Abbrechen-Funktion
PROJ-168 LB-Detail-Rework — Lieferantenbestellungs-Detail als Fullscreen-Overlay (ersetzt alten Modal-Dialog). Cursor-Bug im EK-Preis-Input behoben (lokaler State + onBlur-Commit + React.memo PositionRow → keine Sibling-Re-Renders mehr). Multi-Select-Artikelpicker mit Live-Suche (Name/SKU/EAN/Lief.-Art.-Nr), Mengen-Eingabe pro Zeile und Footer-Live-Summe ersetzt den One-by-One-Flow. LB-Nummer inline editierbar mit debouncetem Live-Unique-Check (300 ms). Status-Badges klickbar mit Folge-Status-Dropdown. Kontext-Primäraktion (Einreichen / Genehmigen / Wareneingang buchen) und Mehr-Menü (Duplizieren / PDF / E-Mail / Stornieren / Löschen) im Header. 6 Tabs mit Lucide-Icons (Details, Positionen, Zahlungen, Wareneingänge, Dokumente, Verlauf). Sidebar-Cards (Lieferant, Summen, Zahlung) und Meta-Grid (Erstellt/Lieferdatum/Lager/Währung). Status-History-Timeline portiert. Neue stabile-ID API-Endpoints (POST /items, PATCH /items/[itemId], DELETE /items/[itemId], PATCH /[id] mit po_number-Rename) ersetzen den alten delete+reinsert-PUT und bewahren goods_receipt-FKs. 23 neue API-Tests, 343/343 Gesamt grün, 0 Lint-Errors.
PROJ-167 Amazon Bestellungs-Filter & Import-Vorschau — Getrennt konfigurierbare Filter pro Kanal (FBM: Bestellstatus, Zahlungsstatus, Versandstatus, Synchronisierungszeitraum; FBA: ohne Versandstatus), neuer 'Bestellungen laden'-Dialog mit Mehrfachauswahl für selektiven Import, 'Jetzt synchronisieren' respektiert die Filter. Neuer GET /amazon/orders/preview Endpoint mit 250er Cap und already_imported-Lookup. importOrders erweitert um amazonOrderIds + filters. Kaputte FBM/FBA-Import-Buttons aus AmazonManualActionsBlock entfernt (Fix nebenbei).
PROJ-166 Amazon Integration Rebuild — FBM/FBA Order-Import, Listings-Sync mit SKU-Automap und manueller Zuordnung, FBM-Bestandspush via Dirty-Queue + Safety-Sync, FBA-Bestand-Pull, Versandbestätigung mit Carrier-Mapping + Overrides, Multi-Region (EU/NA), Multi-Marketplace. Inklusive neuer Tabellen (amazon_listings, amazon_inventory_dirty_queue, amazon_fba_inventory, amazon_sync_log), LWA-Token-Refresh + RDT, Advisory Locks pro (Integration, Job-Type), komplette Cron-Suite (FBM/FBA-Import, Inventory-Flush, Safety-Sync, FBA-Pull, Shipment-Confirmation), Credentials-Verschluesselung, Problems-API, Lifecycle-Service (Enable/Disable mit Stock-Safety-Check), neue UI-Sektion im Integrationen-Hub (Connection, Marketplaces, Toggles, Listings, Problems, Carrier-Overrides, Manual-Actions) und Burst-Test fuer die Dirty-Queue-Deduplication.
PROJ-165 Amazon Nuke & Pave: Amazon v1-Reste und komplettes v2 wurden restlos entfernt. Drop-Migration entfernt alle Amazon-Tabellen (amazon_carrier_mappings, amazon_shipment_retry_queue, amazon_failed_operations, amazon_v1_failed_operations_deprecated, amazon_v2_circuit_state, fba_inventory, fba_inventory_snapshots), die Spalte orders.amazon_fulfillment_confirmed_at, alle Amazon-Integrationen, FBA-Virtual-Warehouses und Amazon sync_log-Eintraege. integrations.type und integration_sync_logs.sync_type CHECKs werden ohne Amazon-Werte neu gesetzt. BREAKING CHANGE — Produktions-Deployment erfordert Backup und Pruefung offener Eintraege in amazon_v1_failed_operations_deprecated.
PROJ-164: Amazon v2 FBA-Bestand UI & Steuerung — schliesst die UI-Luecke aus PROJ-157 (Backend lief, war aber unsichtbar/unsteuerbar). Neue Card 'FBA-Bestandssync' im Integration-Detail mit Auto-Sync-Toggle, letztem Lauf, Snapshot-Counter, Status-Badge, Jetzt-synchronisieren-Button und Link zur Detail-Seite. Neue GET/POST-Routes unter /api/integrations/[id]/amazon/fba/. Waisenseite fba-inventory/page.tsx an v2-Schema angepasst (reserved_total/unfulfillable_total) inkl. Back-Link und korrektem Empty-State.
PROJ-122: Spreadsheet-Bulk-Edit kann jetzt EK-Preis pro Lieferant und Standard-Lieferant setzen — neue Spalten 'Einkaufspreis (Lieferant)' und 'Standard-Lieferant', Validierung verlangt Lieferanten in Scope, beim Setzen von Standard-Lieferant wird der bisherige automatisch entmarkiert. Vorbefuellung der Zellen ueber neuen Endpoint /api/supplier-products/preferred-batch.
PROJ-163 Commit 2: Amazon-Setup-UI auf Self-Authorize-Card umgestellt. Neue Card mit Region-Select + Refresh-Token-Textarea + 'Speichern & testen'-Button. Inline-Ergebnis: Success-Alert mit Marketplace-Liste oder Error-Alert mit kind, http_status, message und togglable Rohdaten-Viewer des Amazon-Bodys. Gerendert bei isSetup/isInactive/isError sowie via 'Token ersetzen'-Toggle im active-State. Error-Banner 'Neu verbinden' scrollt jetzt zur Self-Authorize-Card. OAuth-Query-Param-Reader + oauthCallbackResult-State + handleConnectViaOAuth entfernt. 3-Schritte-Anleitung verweist auf self-authorize-guide.md.
PROJ-163 Commit 1: Amazon v2 Self-Authorize-Service + POST /api/integrations/amazon-v2/self-authorize. Nimmt einen manuell aus Seller Central kopierten Refresh-Token entgegen, verschluesselt ihn, legt die Integration an (oder updated eine bestehende) und macht einen Soft-Probe-Call gegen getMarketplaceParticipations. Token wird IMMER persistiert (auch bei Probe-Fehler), Probe-Ergebnis landet im probe-Feld der JSON-Response. Reauth-Pfad mit Cross-Workspace-Check. 5 Unit-Tests (Happy Path, missing_seller_role, Reauth, Cross-Workspace, Token-Laenge).
PROJ-162 Commit 2/3: Amazon-Setup-UI auf OAuth-Connect-Card umgestellt. Beim Hinzufuegen einer neuen Amazon-Integration erscheint jetzt eine Region-Auswahl (EU/NA/FE) + Button 'Mit Amazon verbinden', der per Browser-Redirect den OAuth-Flow zu Amazon Seller Central startet. Reauth-Pfade: 'Verbindung erneuern' im Action-Bar bei aktiver Integration, 'Neu verbinden' im Error-Banner bei gestoerter Verbindung. Toast-Handling beim Mount fuer ?amazon_v2_oauth=success|error&kind=...-Redirects. Dead-Code-Abbau: refresh_token-State, marketplace-Dropdown, handleSaveAndTest und die komplette Refresh-Token-Eingabe-Form (postete auf eine in PROJ-161 geloeschte v1-Route) ersatzlos entfernt. -187 / +136 LoC.
PROJ-161 Phase 8 Amazon v1 vollstaendig entfernt — Greenfield-Cutover auf v2 abgeschlossen. 18215 Zeilen v1-Code (lib/amazon, 13 Routen, 9 Cron-Routes, UI-Komponenten) geloescht. Migration: amazon_failed_operations → amazon_v1_failed_operations_deprecated (defensiv umbenannt statt gedroppt). BREAKING: kein Rollback auf v1 mehr moeglich.
PROJ-161 Phase 8 v1-UI-Bloecke hinter v2Active-Flag ausgeblendet (Settings-Tabs, OpenIssues) — v2-Connections sehen nur noch das Status-Dashboard
PROJ-161 Phase 8 Cron-Skip + v1-Routen 410: alle 13 v1-Amazon-Routen liefern 410 Gone, alle 9 v1-Cron-Routes ueberspringen v2-aktivierte Integrationen (geteilter Handler + 2 custom Crons + DLQ-Retry)
PROJ-161 Phase 8 Cutover-Tooling: Admin-Routen /amazon-v2/enable und /amazon-v2/disable plus Cutover-Button im Detail-View (Confirm-Dialog, Reload nach Erfolg)
PROJ-160 Phase 7 Deployed — Amazon v2 Status-Dashboard live (Read-only Dashboard pro v2-Connection mit Letzter Lauf, Circuit-Breaker-Badge, nächster Lauf, Admin-only Trigger-Button)
PROJ-160: Manueller Trigger POST /api/integrations/[id]/amazon-v2/trigger (admin-only, isV2EnabledFor-Gate, Dispatch auf runOrderImport/runInventorySync/runShipmentConfirmation, respektiert Service-Soft-Lock, 3 Wire-In-Tests)
PROJ-160: Amazon v2 Status-Dashboard UI (3 Karten pro Operation mit letztem Lauf, Circuit-Breaker-Badge, nächstem geplanten Lauf; eingehängt in AmazonIntegrationDetail, shadcn Card/Badge/Button/Tooltip/Skeleton)
PROJ-160: Status-Aggregator + GET /api/integrations/[id]/amazon-v2/status (liest sync-logs, circuit-state, schedule-JSON; DI-Storage; 3 Unit-Tests)
PROJ-160 Phase 7 Kickoff — Amazon v2 Status-Dashboard Spec (Read-only Dashboard pro v2-Connection mit Karte je Operation, Circuit-Breaker-Badge, nächster Lauf, Admin-only Trigger-Button)
PROJ-159 Phase 6 Deployed — Amazon v2 Circuit-Breaker & Smart-Intervals (Status auf Deployed gesetzt)
PROJ-159: Circuit-Breaker + Smart-Interval in alle drei v2-Cron-Routes (order-sync, inventory-sync, shipment-confirmation) verdrahtet, schedule-Persistenz in integrations.settings.amazon_v2.schedule, 3 Wire-In-Tests
PROJ-159: CircuitBreaker + Smart-Interval Helper unter src/lib/amazon-v2/reliability/ inkl. 11 Unit-Tests (state-transitions, half-open, isolation, smart-interval-Heuristik)
PROJ-159: Migration amazon_v2_circuit_state (Tabelle, RLS, partieller Index WHERE state=open)
PROJ-159 Phase 6 Spec — Amazon v2 Circuit-Breaker & Smart-Intervals (Planned)
PROJ-158 Phase 5 Deployed — Amazon v2 Shipment Confirmation komplett (Migration, FeedsClient, Carrier-Mapping-v2 DB-Reader, Strategy + Service, v1-Guard, Cron-Route, 5 Unit-Tests, Sandbox-Smoke)
PROJ-158 Phase 5 — Cron-Route /api/cron/amazon-v2-shipment-confirmation (Feature-Flag-Gate, Soft-Lock-respektierend, sequentielle Iteration aller v2-Integrationen)
PROJ-158 — 5 Unit-Tests fuer runShipmentConfirmation (Strategy-DI, Auth-Abort, Per-Order-Fehler-Isolation, Idempotency, Soft-Lock) + Sandbox-Smoke fuer Feeds-API getFeeds
PROJ-158 Commit 3 — ShipmentConfirmationStrategy-Interface, FeedsXmlConfirmShipmentStrategy (Default), ShipmentConfirmationService (DI-Orchestrator: Soft-Lock, Pending-Order-Selektion, Carrier-Mapping-Resolution, Strategy-Aufruf, amazon_fulfillment_confirmed_at-Update, DLQ-Insert pro Order-Fehler), Feature-Flag-Helper listV2ShipmentConfirmationEnabledIntegrations, dlq-Operationtype 'shipment_confirmation' ergänzt. 64/64 Tests grün.
PROJ-158 Commit 2 — FeedsClient (5-Schritt-Pipeline um @sp-api-sdk/feeds-api-2021-06-30), build-fulfillment-feed-xml (POST_ORDER_FULFILLMENT_DATA), parse-feed-result-report, carrier-mapping-v2 (DB-Reader auf bestehende Tabelle amazon_carrier_mappings, kein statischer Port), v1-Guard als Top-of-function-Check in triggerAmazonShipmentConfirmation (einziger Touch in src/lib/amazon/), 3 Unit-Tests (64/64 grün). Spec aktualisiert: Carrier-Mapping als DB-Reader und v1-Guard als ein File-Touch dokumentiert.
PROJ-158 Commit 1 — Migration orders.amazon_fulfillment_confirmed_at TIMESTAMPTZ + partieller Index (workspace_id, shipped_at) WHERE external_source=amazon AND shipped_at NOT NULL AND amazon_fulfillment_confirmed_at NULL. v2-isolierter Shipment-Confirmation-Marker, parallel zu v1.
PROJ-158 Phase 5 kickoff — Spec für Amazon v2 Shipment Confirmation angelegt. Feeds-API-first Architektur (POST_ORDER_FULFILLMENT_DATA via @sp-api-sdk/feeds-api-2021-06-30), weil orders-api-2026-01-01 read-only ist. Neue Spalte orders.amazon_fulfillment_confirmed_at, Carrier-Mapping-v2-Port, 5-Commit-Plan, Test-Plan (5 Unit + 1 Smoke). SDK bereits installiert.
PROJ-157 Phase 4 abgeschlossen — Amazon v2 Inventory Sync Deployed. FBM-Push via Listings PATCH + FBA-Pull via getInventorySummaries laufen kombiniert in einer Cron-Route, v2-isolierte Snapshots-Tabelle, Hybrid-Strategy mit Feeds-API-Stub (PROJ-157.5 Future Work), v1-Cron-Routes per Flag gegated. 55/55 Amazon-v2-Tests gruen, Spec synchron mit der finalen Architektur.
PROJ-157 (Commit 4): Amazon v2 InventorySyncService-Orchestrator — FBM-Push + FBA-Pull sequentiell in einem Lauf, Soft-Lock via integration_sync_logs Sentinel (15min Cutoff), kombinierter sync_type='amazon_v2_inventory_sync', DI-Pattern mit InventorySyncDeps, Strategy-Selection ueber settings.amazon_v2.inventory_push_mode. Neue Cron-Route amazon-v2-inventory-sync mit Cron-Secret-Auth. 5 Unit-Tests (Strategy-DI-Wiring, FBM-Push-Errorhandling inkl. 401-Abort, FBA-Mapper aggregiert/leer/ohne-SKU, FBA-Pagination, FBA-Idempotency) + 1 Sandbox-Smoke (read-only getListingsItem mit Skip-Verhalten).
PROJ-157 (Commit 3): Amazon v2 FBM-Push Strategien (Listings PATCH default, Feeds API stub mit PROJ-157.5 TODO), FBM-Push-Service (Queue-Read, Mapping-Lookup, Stock-Calc, Per-SKU-Push, DLQ, Queue-Cleanup), FBA-Pull-Service mit Pagination + Batch-Upsert + DLQ, fba-inventory-mapper mit aggregiertem reserved_total/unfulfillable_total, v2-Stock-Calc Port (PROJ-55-Semantik isoliert von v1), DLQ um inventory_push und fba_inventory_pull operation_types erweitert.
PROJ-157 (Commit 2): Amazon v2 InventoryClient — kombinierter Wrapper um Listings (patchListingsItem) und FBA Inventory (getInventorySummaries paginiert) SDKs, gemeinsame Auth-Instanz, 100-Pages-Hardcap, AmazonV2AuthError-Mapping. v1-Cron-Routes (amazon-inventory-sync, amazon-fba-inventory-sync) bekommen negativen Filter auf settings.amazon_v2.inventory_sync_enabled. Spec mit den finalen Design-Entscheidungen synchronisiert.
PROJ-157 (Commit 1): Migration fba_inventory_snapshots — neue v2-isolierte Tabelle mit seller_sku Unique, raw_details JSONB, snapshot_run_id Tracking, workspace-scoped RLS. v1 public.fba_inventory bleibt unveraendert.
PROJ-157 (Commit 0): Amazon v2 Inventory-Sync Spec (Phase 4) — FBM-Push via patchListingsItem, FBA-Pull via getInventorySummaries, neue v2-isolierte Tabelle fba_inventory_snapshots, InventoryPushStrategy mit FeedsStrategy-Stub (PROJ-157.5 als Future Work)
PROJ-156 Phase 3 abgeschlossen — Amazon v2 Order Sync Deployed: Spec auf Status 'Deployed' gesetzt, alle Akzeptanzkriterien abgehakt, features/INDEX.md aktualisiert (PROJ-156 Deployed, Next Available ID = PROJ-158). Phase 3 ist das Herzstueck des Greenfield-Rewrites (PROJ-152) und liefert damit den ersten produktiv lauffaehigen End-to-End-Pfad der v2-Integration (OAuth → Connection-Health → Order-Sync mit DLQ), komplett parallel zu v1 und ueber settings.amazon_v2.v2_enabled gegatet.
PROJ-156: OrderImportService + Cron-Route + 4 Unit-Tests + Sandbox-Smoke fuer Amazon v2 — runOrderImport orchestriert FBM+FBA sequentiell gegen dasselbe Rate-Limit-Budget, iteriert per Async-Iterator ueber searchOrdersPaged, holt pro Order einen frischen RDT, ruft getOrder mit BUYER/RECIPIENT/PROCEEDS/FULFILLMENT/PACKAGES-IncludedData, mapped via mapOrderToWmsRow und schreibt via batchUpsertOrders. Fehler-Klassifikation: 401/403 abort, 4xx/5xx pro Order in die DLQ mit version='v2'. Soft-Lock ueber integration_sync_logs Sentinel-Row statt Advisory-Lock (Begruendung in der Migration dokumentiert). Cron-Route /api/cron/amazon-v2-order-sync mit Cron-Secret-Auth iteriert ueber listV2EnabledIntegrations() sequentiell. 4 Unit-Tests (Strategy-Selection, Pagination, Idempotency, DLQ mit PII-Check) alle gruen, plus 1 Sandbox-Smoke der direkt den OrdersApiClient baut. Migration 20260407100001 erlaubt zusaetzlich sync_type='amazon_v2_order_import'. Gesamte Vitest-Suite gruen (15 Files, 42 Tests).
PROJ-156: Order-Mapper + Batch-Upsert + DLQ-Wrapper fuer Amazon v2 — mapOrderToWmsRow ist pure function und mapped @sp-api-sdk/orders-api-2026-01-01 Order auf V2OrderDraft (Status via mapAmazonV2StatusToWms, Betrag aus proceeds.grandTotal in Cents, metadata.amazon_v2.raw_items als sanitized Line-Item-Snapshot OHNE PII, buyer_present/recipient_present nur als Boolean-Flags). batchUpsertOrders macht manuelles Insert/Update-Split via Pre-Query auf idx_orders_unique_external_order, generiert neue order_numbers via generate_wms_order_number-RPC nur fuer echte Inserts und erhaelt bestehende ids bei Updates. DLQ-Wrapper schreibt hart version='v2' mit Exponential-Backoff (5min * 2^(attempt-1), max 4h).
PROJ-156: OrdersClient + RdtHelper fuer Amazon v2 — duenner Wrapper um @sp-api-sdk/orders-api-2026-01-01 und @sp-api-sdk/tokens-api-2021-03-01. searchOrdersPaged ist Async-Iterator mit 50-Pages-Hard-Cap, getOrder forwarded den RDT via x-amz-access-token-Header. RdtHelper baut RDTs pro Order auf Pfad /orders/2026-01-01/orders/{orderId}, mit lowercase Tokens-API dataElements und No-DataElements-Fallback bei fehlenden App-Rollen. Beide nutzen die memoized Auth-Instanz aus auth-instance-cache.ts. Keine DB-Zugriffe, keine PII in Logs.
Retoure-Badge in der Kundenaufträge-Übersicht (Status-Spalte) sobald ein Retourenlabel existiert
PROJ-156: Order-Status-Mapper fuer Amazon v2 (mapAmazonV2StatusToWms) — pure function, mapped die UPPERCASE-Enum-Werte aus @sp-api-sdk/orders-api-2026-01-01 (PENDING/UNSHIPPED/PARTIALLY_SHIPPED/SHIPPED/CANCELLED/UNFULFILLABLE/PENDING_AVAILABILITY) auf WMS-Status (open/in_progress/shipped/cancelled), fail-safe 'open' fuer unbekannte Werte mit Warn-Log ohne PII. Inkl. 4 Unit-Tests (alle gruen).
PROJ-156: DB-Migration 20260407100000_proj156_amazon_failed_operations_version.sql — neue Spalte amazon_failed_operations.version (Default 'v1', CHECK v1/v2) plus Partial-Index (version, status) WHERE status IN ('pending','retrying'). Idempotent (IF NOT EXISTS + DO-Block fuer Constraint). Bereitet die DLQ auf v1/v2-Split fuer das spaetere Cutover (PROJ-161) vor; v1-Code bleibt unangetastet.
PROJ-156: Amazon v2 Order Sync Spec (Phase 3) — OrderImportService mit FBM+FBA Strategy, Orders v2026-01-01 via @sp-api-sdk/orders-api-2026-01-01, RDT-Pipeline pro Order, Batch-Upsert ON CONFLICT, Advisory Lock, DLQ mit version='v2', Cron-Route mit Feature-Flag-Gate, strikte PII-Disziplin.
PROJ-155 Phase 2 abgeschlossen — Amazon v2 Connection & Health Deployed.
PROJ-155: Unit-Tests + Sandbox-Smoke fuer Connection & Health (9 computeOverallStatus-Cases, disconnect-Idempotenz + Revoke-Fehler-Toleranz, testConnection Success + Sellers-Rolle-403, Feature-Flag-Gate auf beiden Routes). 280/280 gruen, Sandbox-Smoke gruen.
PROJ-155: Amazon v2 Connection & Health Services — ConnectionService (testConnection + idempotenter disconnect mit LWA Token-Revoke), HealthService mit aggregiertem Status aus Sync-Logs/DLQ/Token/Connection-Test, neue API-Routes /test-connection + /health mit Feature-Flag-Gate
PROJ-155: Amazon v2 Connection & Health Spec (Phase 2) — ConnectionService (testConnection, disconnect mit LWA-Token-Revoke), HealthService mit aggregiertem Status, v2-Routes /test-connection + /health mit Feature-Flag-Gate
PROJ-154 (g): Sandbox-Smoke-Test — End-to-End-Beweis (LWA-Code-Tausch → encrypt/decrypt → SDK-Auth → getMarketplaceParticipations → Mapper). PROJ-154 Phase 1 abgeschlossen.
PROJ-154 (f): Unit-Tests für OAuth-Flow-Module — crypto-Roundtrip + Tamper, oauth-state Sign/Verify/TTL/Tamper, error-classifier (Sellers-Rolle, 401/403), single-flight auth-instance-cache, marketplace-mapper
PROJ-154 (d): SDK-Auth-Memo-Cache mit Single-Flight pro Integration (auth-instance-cache.ts), Reauth-Invalidation in Callback-Route
PROJ-154: Amazon SP-API OAuth-Callback komplett — LWA-Code-Tausch, Marketplace-Detection, verschlüsselte Refresh-Token-Persistenz und klassifizierte Error-Redirects (Sellers-Rolle, abgelaufener Code, ungültiger Token)
PROJ-154: Authorize-Route für den Amazon SP-API OAuth-Flow — Signed-State-Erzeugung, Region-Validierung und Redirect zur Seller-Central-Consent-Page
PROJ-154: AES-256-GCM Token-Crypto und signed JWT für OAuth-State-Management (CSRF-Schutz) als Foundation für den Amazon SP-API OAuth-Flow
PROJ-154: Amazon v2 OAuth-Flow Spec (Phase 1) — Authorize/Callback Routes, signed-JWT State, AES-256-GCM Token-Crypto, Single-Flight Refresh-Cache, Sellers-Rollen-Hint
PROJ-153: Sandbox-Smoke-Test fuer GET /sellers/v1/marketplaceParticipations (ueber @sp-api-sdk/sellers-api-v1, automatischer Skip ohne Sandbox-Credentials, anonymisiertes Logging ohne Marketplace-/Seller-IDs).
PROJ-153: Sandbox-Env-Plan in .env.local.example und README fuer src/lib/amazon-v2/ mit Mermaid-Architektur, SDK-Begruendung, Sandbox-Setup-Schritten und Troubleshooting.
PROJ-153: feature-flags.ts Helper (isV2EnabledFor / getV2PhasesFor) ueber zentralen Supabase-Admin-Helper, fail-safe Defaults, 6 Unit-Tests fuer alle Verhaltens-Pfade.
PROJ-153: Vitest-Setup fuer v2-Phasen — Default-Lauf excludiert Integration-Tests, separate vitest.sandbox.config.ts mit 30s Timeout und neuer test:sandbox npm-Script.
PROJ-153: Verzeichnis-Struktur src/lib/amazon-v2/ mit Stubs (sdk-client.ts, AmazonV2Error.ts) und Installation der drei Phase-0-SDK-Pakete @sp-api-sdk/auth, @sp-api-sdk/common, @sp-api-sdk/sellers-api-v1.
PROJ-153: Phase-0-Spec für das Amazon-v2-Fundament — SDK-Wahl @sp-api-sdk/* (live auf npm evaluiert, dediziertes orders-api-2026-01-01-Paket), Verzeichnis-Struktur src/lib/amazon-v2/, Vitest-Setup mit pragmatischer Test-Philosophie (4–5 Unit-Tests für kritische Logik + 1 Smoke-Test pro Phase), Sandbox-Env-Plan und Feature-Flag-Helper isV2EnabledFor.
PROJ-152: Master-Spec für den kompletten Amazon-Integration-Neubau — OAuth-only, offizielles SDK, Orders v2026-01-01, Polling-first, Parallel-Build mit Per-Integration-Cutover. Ziel: ~9.500 LoC Alt-Code durch saubere v2-Architektur ersetzen, robust für 10k+ Bestellungen/Tag. Alle DB-Tabellen bleiben erhalten, andere Subsysteme sind nicht betroffen.
Import-Notizen werden direkt in die order_notes-Tabelle geschrieben (PROJ-150): Shopify, Amazon FBA/FBM und manuelle Auftragsanlage nutzen jetzt einen einheitlichen Notiz-Helper mit Idempotenz-Schutz. Die alten orders.notes/import_notes-Spalten wurden entfernt, FreeScout eBay-Username-Lookup und die Notizsuche laufen über order_notes.
Auftragsdetailseite als Full-Page (PROJ-149 Task 7): Header mit Status/Financial-Popovers, Badges, Tags, 6 Tabs, Action-Buttons
PROJ-149: Navigation zu Auftragsdetailseite — Klick auf Auftragszeile öffnet jetzt die neue Full-Page-Ansicht statt den Dialog, Kundendetails-Links ebenfalls umgestellt
Workflow Intervall-Trigger — Workflows können jetzt in festen Intervallen ausgeführt werden (15min, 30min, 1h, 2h, 4h, 6h, 12h) zusätzlich zu täglich/wöchentlich
PROJ-149: Notizen-Tab Komponente (OrderNotesSection mit CRUD, Inline-Edit, Source-Badges)
PROJ-149: OrderNote-Typen, Adress-Update-Schema und Notiz-Validierung hinzugefügt
PROJ-145: Kundendetailseite & Multi-Adressen — Full-Page /dashboard/customers/[id] mit 5 Tabs (Stammdaten, Adressen, Aufträge, Profitbutler, Notizen), customer_addresses Tabelle mit CRUD, Adress-Snapshots auf Orders, Shopify-Import Adressen-Deduplizierung
PROJ-146: Kundensperre — Block/Unblock API (Worker sperren, Admins entsperren), roter Banner + Badge, Versand-Guard (403), Import-Flagging in Order-Metadata
PROJ-147: Erweiterte Kundensuche — Collapsible Filter für PLZ (Prefix), Stadt, Land (CountryCombobox), Erstellungsdatum, letzter Auftrag; DB-Indexes auf customer_addresses, Badge-Pills mit Dismiss
PROJ-148: Kunden-Profitbutler — KPI-Cards (Gesamtumsatz, Aufträge, Ø Bestellwert, Erster/Letzter Auftrag, Erstattungen, Retourenquote), Umsatz-pro-Jahr Balkendiagramm, Top-10-Artikel Tabelle
PROJ-136: Pending-Queue-Count Badge im Billkom Cron-Job — zeigt Anzahl ausstehender Rechnungs-Jobs direkt in der Cron-Job-Übersicht
PROJ-144: Erstattungsblock in Auftragsdetails (Erstattet / Offener Betrag)
PROJ-143: Deutsche Post Retouren — DHL Retoure + Internetmarke (umgedrehte Briefmarke) für DP-Versandarten, Popover-Auswahl, Auto-Return-Rules mit return_method
PROJ-142: Country-Code-Normalisierung in allen API-Write-Paths (Kunden, Lieferanten, Produkte, Workspace) und CSV-Import mit Warnungen
PROJ-141: Bestätigungsdialog bei manueller Änderung von Versandstatus und Zahlstatus
PROJ-142: Alle Freitext-Länderfelder durch CountryCombobox ersetzt (Lieferanten, Produkte, Zolldaten, Workflows)
PROJ-142: MultiCountryCombobox Komponente — Multi-Select mit Chips für Länderauswahl (ISO-Codes)
PROJ-141: Auftragsdetail Action-Bar Redesign — klickbare Status-Badges im Header, farbige Aktions-Buttons, Mehr-Menü mit destruktiven Aktionen
PROJ-140: Lieferanten-Tab bei Bundle-Artikeln ausgeblendet
PROJ-140: Bundle-Artikel aus Bestellvorschlag, Einkaufsliste und Wareneingang ausgeschlossen
PROJ-140: Profitbutler zeigt Bundle-Komponentenkosten (FIFO/Lieferanten-EK, Aufschlüsselungstabelle)
PROJ-140: Profitbutler-Kalkulation verwendet Bundle-Komponentenkosten als Einstandspreisbasis
PROJ-140: Lieferanten-Tab bei Bundle-Artikeln ausgeblendet (watchIsBundle-Konditionierung für TabsTrigger und TabsContent)
PROJ-135: Workflow-Bedingungen für Versandstatus, Zahlstatus und Versanddatum (älter als X Tage)
PROJ-135: Neue Workflow-Aktion 'Versandstatus ändern' mit Vorwärts-Validierung (z.B. shipped → completed)
PROJ-135: Status-Scope um 'Versendet' erweitert für Auto-Abschluss-Workflows
PROJ-136: Workflow-Bedingungen 'Rechnung vorhanden' und 'Lieferschein vorhanden'
PROJ-136: Neue Workflow-Aktionen 'Rechnung erstellen' und 'Lieferschein erstellen' über Billkom Job-Queue
Shopify Bestellstatus-Sync Cron Job — automatischer Abgleich von Status, Zahlungsstatus und Tracking alle 15 Minuten
PROJ-134: Financial Status auf Aufträgen (pending/paid/partially_refunded/refunded)
PROJ-134: Shopify Refund API Integration (Erstattung/Preisnachlass direkt aus Flowkom)
PROJ-134: Erstattungs-Dialog im Auftragsdetail mit Shopify-Notify + Gutschrift-Option
PROJ-134: Shopify-Refund im Storno-Flow integriert
PROJ-134: Financial-Status-Badge in Auftragsübersicht + Auftragsdetail
PROJ-134: refund_enabled Toggle in Shopify-Integrations-Einstellungen
PROJ-134: financial_status Mapping beim Shopify-Import + PROJ-131 Sync
PROJ-132: Varianten-Attribut Inline-Zuweisung — Attributwerte direkt in der Kindartikel-Tabelle per Dropdown zuweisen
PROJ-132: Kombinations-Validierung — Generierung blockiert wenn Kinder unvollständige Attributwerte haben
PROJ-132: PATCH /api/products/[id] akzeptiert jetzt variant_attribute_values (JSONB Record) für Inline-Zuweisung von Varianten-Attributwerten
PROJ-131: Temporärer Shopify Order-Sync (Tracking + Status aus Shopify auf Knopfdruck abrufen)
PROJ-100: Verkaufskanal-Logos (Otto, Kaufland, eBay, Amazon, TikTok, Zalando, Temu) in Auftragsübersicht & Detail-Dialog
PROJ-100: DB-konfigurierte Badge-Farben aus Channel-Rules werden jetzt in der Auftragsübersicht angezeigt
PROJ-130: Separates Notiz-Suchfeld in der Auftragsübersicht (notes + import_notes, Trigram-Index)
PROJ-111: eBay-Username-Lookup für FreeScout Connector (eBay-Proxy-Mails umgehen via Magnalister Import-Notizen)
PROJ-78: Versandart-Filter für Produktübersicht (Ist/Ist-nicht-Modus, Keine Versandart, Multi-Select)
PROJ-78: Hersteller-Filter mit Ist/Ist-nicht-Modus und Ohne-Marke-Option (Negierung + Artikel ohne zugewiesene Marke filtern)
PROJ-129: Dokumenten-Kategorien CRUD — Eigene Kategorien erstellen, alle Kategorien bearbeiten/löschen/kopieren, Richtlinien & Normen inline editieren, Preset-Reset (einzeln oder alle), Zusatztexte in DB persistiert, Konformitätserklärung nutzt DB-Kategorien
PROJ-128: Drag & Drop Sortierung für Varianten-Attribute — Werte-Bubbles und Attribut-Karten per DnD sortierbar, Kindartikel-Tabelle sortiert nach Werte-Reihenfolge
PROJ-2: Unsaved-Changes UX — Sticky Banner mit Speichern/Verwerfen, deaktivierter Save-Button ohne Änderungen, Browser-Leave-Guard, Zurück-Button warnt bei offenen Änderungen
PROJ-15: Parent-Child Checkbox-Kaskadierung — Elternartikel-Checkbox selektiert/deselektiert alle Kindvarianten, Indeterminate-State bei Teilauswahl, 'Alle auswählen' kaskadiert ebenfalls
PROJ-92: Profilkarten zeigen jetzt Max Aufträge, Auftragstypen, Scan-Modus, Auto-Flags, Lagerplatz- und Tag-Filter
PROJ-8: Import-Notizen für Kundenaufträge — Shopify note_attributes (z.B. Magnalister eBay-Metadaten) als eigenes Feld importieren und im Detail-Dialog anzeigen
PROJ-120: Firmenzusatz unter Firmenname in Lieferantenliste anzeigen
PROJ-122: Lieferant Quick-Assign-Button in der Massenbearbeitungs-Toolbar
PROJ-122: Inline-Validierung im Spreadsheet mit roten Fehler-Zellen
PROJ-122: Warnung bei 500+ Artikeln im Spreadsheet
PROJ-124: Eltern-Kind Zuordnung & Lösung — Kindartikel vom Elternartikel lösen und bestehende Produkte als Kind zuordnen
Versandverpackungen sortierbar via Pfeil-Buttons in Einstellungen, Sortierung wird im Produkt-Dropdown übernommen
PROJ-123: Varianten-Tab mit VariantTable, VariantToolbar, InheritanceDialog, ProductSlideOver und SpreadsheetView integriert
PROJ-123: Varianten-API gibt jetzt alle für Tabelle und Slide-Over benötigten Felder explizit zurück
PROJ-123: Vererbungs-Dialog — Felder vom Elternartikel auf ausgewählte Kindartikel übertragen (Gruppenauswahl, Vorschau)
PROJ-123: Produkt-Slide-Over — Schnellbearbeitung von Kindartikeln ohne Seitenwechsel (Sheet-Panel, Formular mit react-hook-form)
PROJ-123: VariantAttributeBuilder — onRename-Callback für editierbare Attributnamen (DB-gesicherte Attribute)
PROJ-123: VariantTable — neue read-only Tabelle mit Checkbox-Selektion, dynamischen Attribut-Spalten und Status-Badges
PROJ-123: VariantToolbar — Varianten-spezifische Toolbar mit 'Werte übertragen'-Button über dem BulkActionToolbar
PROJ-123: PATCH /api/products/[id]/variants/attributes — Umbenennung von Variantenattributen inkl. JSONB-Key-Update in allen Kindvarianten
PROJ-122: Tabellen-Editor (Spreadsheet View) mit AG Grid Community
PROJ-122: Spalten-Picker mit Gruppen, Checkboxen und localStorage-Persistierung
PROJ-122: Custom Dropdown-Zelleditor für Referenzfelder (Hersteller, Versandart, etc.)
PROJ-122: Custom Zahlen-Zelleditor mit deutschem Dezimalformat (Komma-Support)
PROJ-122: Bulk-Action Toolbar — BulkActionToolbar-Komponente mit SetFieldDialog (Feld+Wert in 2 Schritten, gruppiert nach Kategorie) und AdjustPriceDialog (5 Modi: absolut, ±%, ±€), inkl. AlertDialog-Bestätigungen für Archivieren/Löschen
PROJ-122: POST /api/products/bulk-action Endpoint für Toolbar-Aktionen (set_field, clear_field, adjust_price, archive, unarchive, delete — mit filter-basierter Auswahl via all_matching)
PROJ-122: PATCH /api/products/bulk Endpoint für Spreadsheet-Speichern (Bulk-Update einzelner Felder pro Produkt, Auth + Rate-Limit + 207 Multi-Status)
PROJ-122: Bulk-Edit Validierungen — bulkUpdateSchema, bulkActionSchema, BULK_EDITABLE_FIELDS, NON_BULK_EDITABLE_FIELDS, validateBulkFieldValue
PROJ-114: Marken direkt aus Tabellenübersicht duplizieren inkl. Logo & Unterschrift
PROJ-8.5: Shopify-Import holt jetzt Produktbeschreibung (body_html) und Gewicht (kg-Konvertierung) mit
Dev-Tools: Neues Cleanup-Target 'Produkte' — löscht alle Produkte, Bestände, Bestandsbuchungen, Wareneingänge und produktbezogene Daten
PROJ-120: Feld 'Nächster Hafen' bei Lieferanten-Stammdaten hinzugefügt
PROJ-85: Lager-Auswahl und Auto-Barcode beim Lagerplatz-Import — Dropdown für Ziel-Lager im Import-Wizard, Barcode wird automatisch aus Name generiert
PROJ-121: Nachträgliche Sendungsnummern an Shopify — Zusatzlabels und Retourenlabels aus Auftragsdetails optional an Shopify syncen, Toggle pro Integration (Default: aus, Multi-Channel-sicher), Override pro Auftrag im Label-Popover, Kundenbenachrichtigungs-Option, Multi-Channel-Warnung
PROJ-119: Produkte vollständig löschen (Hard Delete) — Admins können Produkte endgültig löschen (einzeln + Bulk), Abhängigkeitsprüfung (Bestand, Picklisten, Varianten, Bundles), Bestellpositionen werden automatisch in Freipositionen entkoppelt, 4-Phasen-Bestätigungsdialog
PROJ-2: UVP-Feld (Unverbindliche Preisempfehlung) im Basis-Tab hinzugefügt, inkl. Daten-Hub Synonym-Mapping
PROJ-2: Produktbeschreibung-Feld (HTML/Fließtext) im Sonstiges-Tab hinzugefügt
PROJ-89: Tags von Sonstiges in den Basis-Tab verschoben
Ausführliche Sync-Logs: Strukturierte Per-Item-Details für jeden Import (importiert/übersprungen/fehlgeschlagen mit Bestellnummer und Fehlergrund) (PROJ-118)
Detail-Sheet: Klickbare Sync-Log-Einträge öffnen Seitenleiste mit Admin-Übersicht und aufklappbaren technischen Details (PROJ-118)
Import-Rollback: Einzelne Imports rückgängig machen mit Bestätigungsdialog, Impact-Vorschau und verwaister-Kunden-Bereinigung (PROJ-118)
PROJ-2: ASIN-Feld (Amazon Standard Identification Number) bei Produkten hinzugefügt
PROJ-117: Amazon FBM-Import erhält jetzt automatisch Versandart via Prioritätsauflösung (war vorher NULL)
PROJ-117: Versandarten-Priorität als Deployed markiert
PROJ-117: Info-Banner in Versandarten-Einstellungen (Prioritäts-Erklärung mit Truck-Icon)
PROJ-117: onReorder-Callback in ShippingMethodTable verdrahtet (Cache-Invalidierung nach Drag-and-Drop)
PROJ-117: Neue Versandarten erhalten automatisch sort_order = MAX + 1, landen damit am Ende der Prioritätsliste
PROJ-117: Drag-and-Drop Priorität für Versandarten-Tabelle – Prio-Spalte mit Griffpunkt, optimistisches UI, persistiert via /api/shipping-methods/reorder
PROJ-117: Reorder-API für Versandarten hinzugefügt (PATCH /api/shipping-methods/reorder)
PROJ-116: Produktdokumente — PDF-Generator & Dokumentenverwaltung
Neuer Tab "Dokumente" in Produktdetailseite (Konformitätserklärung, Bedienungsanleitung, Umkarton-Etikett)
18 vordefinierte EU-Produktkategorien mit aktuellen Richtlinien und EN-Normen (Stand 2026)
EG-Konformitätserklärung mit Kategorie-Vorauswahl, Normen-Wizard und PDF-Generierung
Bedienungsanleitung (DE/EN) mit Sicherheits-/Pflegehinweisen, Symbolen und Markdown-Editor
Umkarton-Etikett im Tool-Stack-Format (A4 Querformat, Barcode, Formularfelder)
Hersteller-Stammdaten erweitert: Logo, Geschäftsführer, USt-ID, Handelsregister, Unterschrift
Hersteller duplizieren und echtes Löschen (inkl. Storage-Cleanup)
Einstellungen: "Marken & Hersteller" → "Produkte" mit Dokumenten-Konfiguration
Varianten-Support: Ein PDF für alle Varianten (Bilder im 3er-Raster, automatischer Seitenumbruch)
Dokumentation: Ausführliche Hilfeseite unter Artikel & Lager → Produktdokumente
PROJ-116: Hard-Delete für Hersteller mit Logo/Signatur-Cleanup
PROJ-116: Produktdokumente — PDF-Generator & Dokumentenverwaltung
Neuer Tab "Dokumente" in Produktdetailseite
EG-Konformitätserklärung mit 18 EU-Produktkategorien und Normen-Wizard
Bedienungsanleitung (DE/EN) mit Sicherheits-/Pflegehinweisen
Umkarton-Etikett (Ein-Klick PDF)
Hersteller erweitert: Logo, Geschäftsführer, USt-ID, Handelsregister, Unterschrift
Einstellungen: Marken & Hersteller → Produkte mit Dokumenten-Konfiguration
PROJ-115: Rekursive SKU-Ordner-Suche beim Auto-Match (bis 3 Ebenen tief in Unterordnern)
PROJ-115: Env-Vars Dokumentation, Feature-Index und Implementation Plan
PROJ-115 Tasks 12-16: Cloud-Speicher Settings-Seite, Folder Picker, Dateien-Tab im Produktformular, File Browser mit Sidebar/Grid/List, Lightbox-Vorschau, Upload-Zone
PROJ-115: Dateien-Tab in Produktdetails + Cloud File Browser (Sidebar, Ordner-Kacheln, Thumbnail-Grid, Dateiliste)
PROJ-115: Cloud Folder Picker Dialog (Breadcrumb-Navigation, Ordner-Auswahl per Klick/Doppelklick)
PROJ-115: Cloud-Speicher Einstellungsseite (OneDrive-Verbindung, Basis-Ordner, Ordner-Vorlagen, Bulk Auto-Match)
PROJ-115: TanStack Query Hooks für Cloud Storage (Connections, Files, Folders, Templates, Product-Folder)
PROJ-115: Bulk Auto-Match API (alle Produkte automatisch per Marke + SKU mit Cloud-Ordnern verknüpfen)
PROJ-115: Ordner-Vorlagen API (CRUD + Drag & Drop Sortierung)
PROJ-115: Product-Cloud-Folder API (Verknüpfung, Auto-Match per Marke/SKU, Ordnerstruktur erstellen)
PROJ-115: Cloud File & Folder API Routes (List, Create, Upload, Download, Rename, Move, Delete, Thumbnail, Preview) + get-provider Helper mit Auto-Token-Refresh
PROJ-115: OAuth2 Flow (CSRF-State, Token-Verschlüsselung) + Connection Management API (CRUD, Root-Folder-Update)
PROJ-115: Zod-Validierungsschemas + DB-Row-Types für Cloud Storage (Folder-Templates, Connections, Product-Folder-Links)
PROJ-115: OneDrive Provider (Microsoft Graph API) + Provider Factory für Cloud-Storage-Modul
PROJ-113: LB-PDF neues Header-Layout — Logo, Absenderzeile, Liefer-/Rechnungsanschrift, Bearbeiter, zentrierter Titel
PROJ-113: Billkom PDF-Generator company_overrides & Logo-Fallback (billkom-logos → workspace-logos)
PROJ-113: Billkom Setup-Wizard — Button 'Firmendaten aus Workspace übernehmen' zum Prefill aller Felder
PROJ-113: Billkom Company-Tab Override-UI — OverridableField-Pattern mit Workspace-Werten als Read-Only, Per-Field Override mit Badges, Logo-Override
PROJ-113: Billkom Override-Logik — companyOverridesSchema, company_overrides in UpdateSettingsSchema, workspace_company im GET-Response
PROJ-113: Workspace-Einstellungen mit Tab-Struktur (Firmendaten + Nummernkreise), Logo-Upload, Firmendetails, Steuerdaten, Bankverbindung
PROJ-113 Task 1: DB-Migration — Workspace-Firmenprofil (company_name, Adresse, Bankdaten, USt-ID, Logo-URL), billkom company_overrides JSONB, Storage Bucket workspace-logos mit RLS
PROJ-24: SKU + EAN als Textzeile unter jedem Produktnamen im Bestell-PDF
PROJ-24: Ziellager-Auswahl auf Bestellungen, Firmendaten (Absender) + Lager-Lieferadresse im PDF nebeneinander
PROJ-24: Bestellungssprache pro Lieferant (DE/EN) für PDF-Export, Produktbilder in jeder Position
PROJ-112: Phase 3 complete — Profitbutler Statistik mit Dashboard, Fixkosten, Kanal-Aufschlüsselung, CSV/PDF-Export
PROJ-112: PDF-Export — Server-side PDF-Generierung mit jsPDF/autotable, API-Route /api/profitbutler/stats/export
PROJ-112: CSV-Export — Client-side CSV-Generierung mit deutschem Zahlenformat, UTF-8 BOM, Exportieren-Dropdown in Filterleiste
PROJ-112: Profitbutler Tagesstatistik Cron-Job-Eintrag in Settings-Seite
PROJ-112: Daily Stats Aggregation — Tagesstatistiken vorberechnen mit Backfill-Support, Aggregate-Shortcut in Stats API für schnellere Ladezeiten
PROJ-112: Konfigurierbare Zeiträume — User Preferences API, Period Config Dialog mit Drag-Reihenfolge, Custom-Zeitraum-Eingabe, max 10 Spalten
PROJ-112: Quartal-, Jahres- und Custom-Zeitraum-Parser mit TDD (quarter, year, custom:YYYY-MM-DD:YYYY-MM-DD)
PROJ-112: Kostenberechnungsmodul extrahiert — Pure Functions für Versand, Verpackung, Pick&Pack, Wareneinsatz, Provision, Werbung, MwSt mit 18 Unit-Tests
PROJ-112: Pick & Pack Kosten in Workspace-Standardwerten und Produkt-Overrides — neuer Standardwerte-Tab in Profitbutler-Settings, EUR-Eingabe pro Stück, produktspezifische Überschreibung mit Workspace-Default als Placeholder
PROJ-112: Revenue/Profit Chart mit Recharts — Umsatz als Balken, Gewinn als Linie, 7T/14T/30T/90T Zeitraumwahl, Orders/Invoices View, Dark-Theme-Tooltip
PROJ-112: Fixkosten Settings Tab — Summary Cards, Add/Edit Dialog mit Zod-Validierung, CRUD-Tabelle mit Pause/Resume/Löschen, Kanalzuweisung, Abschreibungsmodi
PROJ-112: Fixed Costs CRUD API — GET/POST Liste & Erstellen, PATCH/DELETE Einzeleintrag, Pause/Resume Toggle
PROJ-112: Profitbutler KPI-Widgets auf Dashboard (admin-only) — Tagesumsatz, Tagesgewinn, Marge mit Link zu /dashboard/profitbutler
PROJ-112: Artikelsuche mit Autocomplete und Multi-Select — debounced Suche gegen /api/products, Produkt-Badges mit Entfernen, Filter Bar Integration
PROJ-112: Kanal-Aufschlüsselung — Collapsible Section mit Kanal-Cards (Umsatz, Anteil, Gewinn, Marge), responsive Grid
PROJ-112: Sellerboard-Tabelle mit aufklappbaren Kostengruppen (Warenkosten, Logistik, Vertrieb, Steuern, Fixkosten), Gewinn/Marge/Bestellungen, formatCents Helper
PROJ-112: Profitbutler Filter Bar — Kanal-Dropdown (Alle Kanäle + Einzelkanäle), Aufträge/Rechnungen-Toggle mit Tabs
PROJ-112: React Query Hook für Stats API — useProfitbutlerStats mit View/Periods/Channel/ProductIds Params
PROJ-112: Profitbutler Stats Page Shell — Server Component mit Admin-Guard, Client Shell mit View/Channel/Period State
PROJ-112: Profitbutler Sidebar-Navigation — Admin-only Nav Item mit TrendingUp Icon, adminOnly-Flag im NavItem Interface
PROJ-112: Stats API Endpoint — /api/profitbutler/stats mit Revenue, Kosten, Gewinn pro Periode, Kanal-Aufschlüsselung, Orders/Invoices-View
PROJ-112: Profitbutler Stats-Berechnungslogik mit TDD (resolvePeriodToDateRange, calculatePeriodStats, calculateGroupedCosts, calculateMarginPct)
PROJ-112: Fixed-Cost-Berechnung mit TDD — calculateDailyFixedCost (distributed/due_date), calculateFixedCostsForPeriod, 12 Unit-Tests
PROJ-112: Stats-Types & Interfaces für Profitbutler Statistik-Modul (PeriodStats, FixedCost, StatsResponse etc.)
PROJ-98: Versand-/Service-Positionen werden in Auftragsdetails immer als letzte Positionen angezeigt
PROJ-98: Shopify shipping_lines als Versandpositionen importieren — Versandkosten kommen bei Shopify nicht in line_items sondern in shipping_lines, werden jetzt mit Shipping Detection verarbeitet
PROJ-53: Reverse Carrier Matching — Shopify tracking_company wird über shopify_carrier_mappings rückwärts auf WMS-Versandart gemappt, damit Retoure-Button und Carrier-Features bei importierten Bestellungen funktionieren
PROJ-53: Shopify Fulfillment-Daten beim Import übernehmen — Tracking-Nummern und shipped_at für bereits versendete Bestellungen als completed shipping_tasks importieren
PROJ-111: FreeScout-Flowkom Connector — Read-only Lookup-API, API-Key-Authentifizierung, Marketplace-URL-Builder, Integration-Registry (freescout + support-Kategorie), DB-Migration
Auftragsstornierung mit Beleg-Aktionen: Rechnung stornieren oder Gutschrift erstellen bei Auftragsstornierung (PROJ-110)
PROJ-110: Erweiterter Stornierungsdialog in Auftragsübersicht — gleiche Cancel-Preview mit Belegaktionen wie im Detaildialog (Rechnungen stornieren/gutschreiben, weitere Belege, Entwurf-Löschung)
PROJ-110: Erweiterter Stornierungsdialog — Rechnungs-Aktionen (Stornieren/Gutschrift/Nichts), Checkbox für weitere Belege, automatische Entwurf-Löschung, Cancel-Preview-API
PROJ-110: Cancel-Route mit optionalen Document Actions — Belege vor Stornierung löschen/stornieren/gutschreiben (void/credit_note/delete), Validierung aller Aktionen vor Ausführung, Audit-Trail mit document_actions
PROJ-110: createFullCreditNote-Funktion — erzeugt vollständige Gutschrift aus Rechnung ohne Stornierung (für versendete Bestellungen)
PROJ-110: Extract voidDocument function into reusable lib (Billkom Phase 3)
Gutschrift-Dialog erweitert: Dual-Modus (Positionen/Betrag) mit Brutto/Netto-Toggle
Verbleibender Rechnungsbetrag wird im Gutschrift-Dialog angezeigt
Übersteigung-Warnung mit Pflicht-Begründung statt Hard-Block
Belegübersicht in Auftrags-Details zeigt Rechnungen, Gutschriften und effektiven Umsatz
Preisnachlass-Feature komplett entfernt (ersetzt durch erweiterte Gutschrift)
PROJ-109: Belegübersicht im Auftragsdetail-Dialog — Rechnungen mit Gutschriften und effektivem Umsatz (brutto), klickbare Belegnummern öffnen DocumentDetailDialog
PROJ-109: Dual-Mode Gutschriftdialog — Umschaltung Positionen/Betrag, Restrechnungsinfo-Box mit Rechnungsbetrag/Gutschriften/Verbleibend, Betragseingabe (brutto/netto) mit Live-Berechnung, Überschreitungs-AlertDialog mit Pflicht-Begründung (min. 10 Zeichen)
PROJ-109: Amount-mode Gutschriften mit Concurrency-Lock, Betragsberechnung (gross/net), Überschreitungsvalidierung und Audit-Trail (exceeding_reason Event)
PROJ-109: Positions-mode Gutschriften mit related_document_id, Überschreitungsvalidierung und exceeding Event-Logging
PROJ-109: useRemainingInvoiceBalance-Hook hinzugefügt — leitet Restbetrag aus useBillkomDocumentsByOrder via calculateRemainingBalance ab
PROJ-109: CreditNoteAmountSchema (Betragsmodus mit gross/net-Refinement) und CreditNotePositionsSchema (Positionsmodus via CreateDocumentSchema.extend) hinzugefügt
Auftragslöschung mit Belegen: Vollständige Löschung inkl. Billkom-Dokumente & Nummern-Rückgabe (PROJ-108)
PROJ-108: Zweistufiger Lösch-Dialog in Auftragsübersicht — optionale Beleglöschung mit Checkbox, Dokumentenliste, GoBD-Warnung, Bestätigungseingabe; Umlaut-Korrekturen
PROJ-108: Zweistufiger Lösch-Dialog in Auftragsdetails — optionale Beleglöschung, Dokumentenliste mit Zahlungsstatus, Bestätigungseingabe bei Beleglöschung (GoBD-Warnung)
PROJ-108: DELETE /api/orders/:id ruft bei includeDocuments=true die RPC delete_order_with_documents auf (atomische Löschung mit Belegen & Nummernkreis-Rückgabe)
PROJ-108: RPC delete_order_with_documents — atomische Auftragslöschung mit Belegen, Nummernkreis-Rückgabe, Quotation-Reset, FOR UPDATE Locks
Shopify-Import: Rechnungsadresse + Lieferanschrift werden jetzt beide importiert (billing_address + shipping_address)
PROJ-107: Steuerprüfung ist jetzt Pflicht vor Rechnungserstellung — bei fehlgeschlagener Prüfung Toast-Fehler statt Dialog-Öffnung; 'Erstellen & Finalisieren' in DocumentFormDialog gesperrt bis Steuer-Szenario ermittelt, Hinweistext unter dem Button
PROJ-107: Billkom-Belegstatus-Badge im Auftragsdetail-Dialog (Entwurf/Rechnungsnummer/Bezahlt/Teilzahlung), ORDER_DETAIL_SELECT um billkom_documents!order_id erweitert
PROJ-107: SKU wird beim Erstellen von Billkom-Belegen aus Auftragsposition in billkom_document_items übernommen (DocumentItemSchema, document-form-dialog, documents API)
PROJ-107: Auftragsdetail-Dialog auf 8 Spalten erweitert (Art.-Nr., Bezeichnung, Menge, Einheit, E.-Preis, MwSt %, Rabatt %, Gesamt) + Summenblock mit Netto/MwSt-Aufschlüsselung pro Steuersatz
PROJ-107: Auto-MwSt im Auftragsformular basierend auf Kundenland (Tax-Preview-Banner, automatische Steuersatz-Setzung, Read-Only MwSt bei aktivem Szenario)
PROJ-107: GET /api/billkom/tax-preview Endpoint + useTaxPreview Hook (vereinfachte Steuer-Vorschau per customer_id, Standard- & Ermäßigter Satz)
PROJ-107: Länder-Freitext durch Combobox-Dropdown ersetzt (34 Länder, Suche nach Name/Code, Warnung bei unbekannten Werten)
PROJ-107: COUNTRY_LIST für Länder-Dropdown-Combobox exportiert (34 Länder mit deutschen Labels)
PROJ-103: DIN 5008 Form B Layout für PDF-Rechnungen (korrekte Abstände, Falz-/Lochmarken, Logo proportional skaliert in fester Box)
PROJ-103: ZUGFeRD-PDF auf Deutsch (locale de-DE), Logo-Einbindung aus Billkom-Settings, Artikelnummer (SKU) in Positionstabelle
PROJ-106: Billkom Positions-Integration & PDF-Overhaul — Einheitliche Positionskette Angebot→Auftrag→Rechnung
PROJ-106: Pixkom-Style PDF-Layout mit Logo, Artikelnummer, dreispaltiger Fußzeile, Zahlungsstatus
PROJ-106: Logo-Upload in Billkom-Einstellungen (Drag & Drop)
PROJ-106: Freiposition-Support in Kundenaufträgen und Angeboten
PROJ-106: Abweichungswarnungen und Teilrechnungen im Beleg-Dialog
PROJ-106: Shopify/Amazon Import mit Netto-Preisen und erweiterten Positionsfeldern
PROJ-106: Rückwärts-Tracking zwischen Angebot, Auftrag und Rechnung
PROJ-104: Produkt-Suche im Angebots-/Proforma-Formular — Artikel direkt aus Produktstamm hinzufügen mit SKU, Preis (Profitbutler VK), product_id-Verknüpfung für Auftragskonvertierung
PROJ-104: "Neuer Auftrag"-Button im Angebote-Tab ausgeblendet
Billkom Phase 3: Angebote & Proforma-Rechnungen (CRUD, Finalisieren, Auftrag erstellen)
Billkom Phase 3: Mahnwesen mit 3 Stufen (Einzel + Batch, pg_cron Überfälligkeitserkennung)
Billkom Phase 3: GoBD-konforme Korrekturbearbeitung mit Concurrent Locking
Mahnwesen-Settings-Tab (Fristen + Gebühren pro Stufe)
Angebote-Tab auf Auftragsseite (nur bei billkom_enabled)
PROJ-21: Auftragspositionen verschiebbar — Reihenfolge per Hoch/Runter-Buttons, persistiert über position-Spalte in DB
PROJ-103: Konfigurierbares Belegnummernformat — Mit/Ohne Jahreszahl, Kurzjahr, Trennzeichen und Stellenanzahl pro Dokumenttyp einstellbar
PROJ-103: Phase-2-Integration in Belege-Tab — BillkomDownloadButtons (PDF/ZUGFeRD/XRechnung) ersetzt Einzel-Download, canCreateInvoice-Guard mit Tooltip, Tax-Preview vor manueller Rechnungserstellung, Preisnachlass-Button + Discount-Dialog für aktive Rechnungen
PROJ-103: Tax-Info-Komponente (Steuer-Szenario-Badge, Warnungen), Download-Buttons (PDF/ZUGFeRD/XRechnung mit Tooltip), Preisnachlass-Dialog (Live-Berechnung, Validierung, useCreateDiscount)
PROJ-103: Kanäle-Tab in Billkom-Einstellungen mit Channel-Config-Cards (Steuerbehandlung, Absenderland, Zahlungsart, Auto-Rechnung, Auto-Bezahlt pro Kanal)
PROJ-103: Job Queue Processor (processJobQueue) mit Batch-Claim, Workspace-Advisory-Lock, paralleler Workspace-Verarbeitung, Tax-Engine-Integration, Duplikatschutz, Auto-Finalisierung, Auto-Paid-Markierung und Cron API Route (POST /api/billkom/queue/process)
PROJ-103: Discount (Preisnachlass) API-Endpoint mit Row-Locking, Teilgutschrift-Erstellung, Betragsvalidierung, Invoice-Status-Update und useCreateDiscount Hook
PROJ-103: Channel Config GET/PUT API Routes (authenticateRequest/authenticateAdmin, rateLimitAsync, Zod-Validierung) und TanStack Query Hooks (useChannelConfigs, useUpdateChannelConfig)
PROJ-103: Download-Endpoint um ZUGFeRD- und XRechnung-Formate erweitert (format Query-Parameter, Status-Prüfung auf finalisierte Belege, buyer_reference-Validierung für XRechnung, TaxResult aus Snapshot)
PROJ-103: E-Invoice Adapter (EInvoiceGenerator) mit dynamic import für factur-x-kit (ZUGFeRD Comfort PDF/A-3) und xrechnung-generator (XRechnung UBL 2.1 XML), Singleton-Export, 7 Tests
PROJ-103: XRechnung UBL 2.1 Mapper (mapToXRechnungInput) für xrechnung-generator Library, cents→decimal Konvertierung, buyer_reference Pflichtvalidierung, Supplier/Customer/Payment/LineItems Mapping, Reverse-Charge Notes, 57 Tests
PROJ-103: ZUGFeRD ComfortProfile Mapper (mapToZugferdInput) mit TotalsCalculatorInputType-Ziel, cents→decimal Konvertierung, Discount-Allowances, Reverse-Charge taxExemptionReason, SEPA-Bankdaten, 41 Tests + Shared Fixtures
E-Invoice Types, Unit Codes & Tax Category Mappings (PROJ-103): BillkomDocumentForInvoice/ItemForInvoice Interfaces, EInvoiceGenerator Interface, INVOICE_TYPE_CODES (380/381/325), UN/ECE Unit Code Map (11 WMS-Einheiten → CEFACT), Tax Category Map (7 Szenarien → ZUGFeRD-Codes S/AE/G/O)
PROJ-102 Billkom Phase 1 als Deployed markiert
Settings: Steuern-Tab (EU-Steuersätze, OSS-Status)
Settings: Nummernkreise-Tab (Präfix, Nächste-Nummer)
Corrective Edit Dialog (GoBD-Warnung)
Tax Preview (Live-Steuervorschau im Formular)
API: /tax-rates und /sequences Endpoints
Bugfixes: 4 kritische + 6 wichtige Fehler behoben (DB-Spaltennamen, Corrective Edit Beträge, Search-Injection, Tax-Kategorie)
PROJ-102: Billkom-Integrationspoints verdrahtet — konditionaler "Belege"-Tab im Auftragsdetail-Dialog (lazy-loaded, billkom_enabled-Flag), Phase-3-Kommentar in Auftragsübersicht
Billkom Document UI Components (PROJ-102): Belege-Tab für Auftragsdetails, Beleg-Detail-Dialog mit Positionen/Zahlungen/Aktionen, Beleg-Formular-Dialog mit dynamischen Positionen und Live-Summenberechnung, Zahlungsbuchungs-Dialog, Stornierungs-Dialog mit Gutschrift-Hinweis
Billkom Settings-Seiten & Setup-Wizard (PROJ-102): Settings-Navigation-Eintrag, Hauptseite mit Tab-Navigation (Unternehmen, Zahlungen, Vorlagen), 3-Schritt-Setup-Wizard mit Firmen- und Bankdaten, Skonto-Konfiguration, Accordion-Vorlagen-Editor für 6 Belegtypen
src/hooks/use-billkom.ts — TanStack Query hooks für alle Billkom-Endpunkte (Settings, Dokumente, Zahlungen, Tax/VIES)
src/components/billkom/status-badge.tsx — BillkomStatusBadge-Komponente mit 7 Status-Konfigurationen (Entwurf, Finalisiert, Teilbezahlt, Bezahlt, Überfällig, Storniert, Umgewandelt)
pdf-generator.ts — Billkom PDF-Generator mit jsPDF + jspdf-autotable; rendert aus Snapshots (customer_snapshot, sender_snapshot, tax_rate_snapshot)
GET /api/billkom/documents/[id]/download — PDF-Download-Endpoint aktiviert, gibt echtes PDF statt 501 zurück
POST /api/billkom/payments — Zahlung an Beleg buchen, DB-Trigger aktualisiert Status
DELETE /api/billkom/payments/[id] — Zahlung löschen (Admin only)
POST /api/billkom/tax/check — Steuervorschau ohne Belegerststellung
POST /api/billkom/tax/vies-validate — USt-IdNr. via EU VIES API validieren mit Caching
Billkom Document Action APIs (PROJ-102): Finalize (Tax Engine + Snapshot + RPC), Void (Admin-only + Auto-Gutschrift), Corrective Edit (GoBD SET LOCAL bypass), Download (501-Platzhalter für Task 13), billkom_apply_corrective_edit SQL-Funktion
PROJ-102: Billkom Settings API (GET/PUT) mit EU-Steuerrate-Seeding (27 Länder)
PROJ-102: Billkom Documents CRUD API (POST, GET Liste mit Cursor-Pagination)
PROJ-102: Billkom Document Detail & PATCH API (Entwurf bearbeiten)
PROJ-102: Billkom Documents by-Order API (GET nach Order-ID)
Billkom Phase 1 DB-Migration (PROJ-102): Komplettes Datenbankschema — 11 Tabellen, 3 ENUMs, 6 Funktionen (inkl. GoBD-Trigger, gap-free Nummernvergabe, atomische Finalisierung), 13 Indexes, RLS-Policies
Billkom Document Lifecycle Helpers (PROJ-102): Pure-Function-Bibliothek für Zeilenposten-Berechnung, Dokumentsummen, Aufbewahrungsfristen (§147 AO), Zahlungszieldaten, Status-Transitionen und Kunden-/Absender-Snapshots
PROJ-102: VIES-Validierungsmodul (vat-validation.ts) mit Cache-Logik, API-Isolation und Override-Validierung
PROJ-102: lookupTaxRate() in tax-engine.ts für Steuerssatz-Lookup aus billkom_tax_rates
Billkom Foundation (PROJ-102): TypeScript-Typen, EU-Länderliste und Konstanten für das Rechnungsmodul — TaxContext, TaxResult, TaxScenario, DocumentTypeAllowed, TaxEngineError, ALLOWED_TRANSITIONS, DOCUMENT_PREFIXES, RETENTION_YEARS
Profitbutler Settings-Restrukturierung (PROJ-105): USt-Sätze und Wechselkurse unter neuer Profitbutler Tab-Page in den Settings zusammengefasst
Billkom Rechnungsmodul Specs (PROJ-102/103/104): Vollständige Feature-Spezifikationen für 3-phasiges Rechnungsmodul — Tax Engine, GoBD-Compliance, E-Rechnung, Angebote, Mahnwesen
Mehrfachauswahl-Operatoren für Workflow-Bedingungen (PROJ-101): IST EINES VON / IST KEINES VON für Versandart, Verkaufskanal und Lieferland — z.B. 'WENN Kanal = Otto UND Versandart ist eines von [Brief, Kompaktbrief, Großbrief] DANN Versandart = DHL Kleinpaket'
Multi-Select UI mit Checkbox-Popover und Chip-Badges im Workflow-Builder
Verkaufskanal-Erkennung (PROJ-100): Tag-basiertes Channel-Mapping pro Shopify-Integration (Otto, Temu, eBay, Kaufland, TikTok, Zalando etc.)
Channel-Rules UI: Drag & Drop Reihenfolge, Preset-Farben, Tag-Vorschläge, Kanal-Badges in Auftragsliste
Verkaufskanal-Filter: Neue Filterleiste in der Auftragsliste nach Verkaufskanal
Workflow-Condition 'Verkaufskanal': Regeln wie 'WENN Kanal = Otto DANN Versandart DHL' möglich
Workflow-Priorität: sort_order für Workflows, Ausführungsreihenfolge steuerbar, first-match-wins bei Konflikten
Service-Artikel & Versandpositions-Erkennung (PROJ-98): inventory_tracking Flag auf Produktebene, automatische Keyword-Erkennung beim Import (Shopify/Amazon), Service-Badge in Produktliste und Aufträgen, ShippingDetectionSection pro Integration, Systemausschlüsse (Picklisten, Wareneingang, Bestandsübersicht, Bestellvorschlag)
PROJ-99: Etikettendruck-Modul (Formate, Vorlagen, Barcode-Druck für Lagerplätze & Produkte)
PROJ-99: Storage-Cleanup für Etiketten-Labels in print-job-result – temporäre Label-PDFs (storage_label, product_label) werden nach erfolgreichem Druck automatisch aus dem Supabase Storage gelöscht
PROJ-99: PDF-Renderer für Etikettendruck – renderLabelPdf() mit dynamischer Skalierung, EAN-13-Validierung, HRI-Text und optionalem Label-Text
Barcode-Adapter für Etikettendruck-Modul (PROJ-99): EAN-13-Validierung mit Prüfziffer, Code128/Code39-Rendering, dynamische Skalierung auf verfügbare Labelgröße, 300-DPI-Auflösung
PROJ-99: Etikettendruck-Modul — label_formats und label_templates Tabellen mit System-Presets (7 Templates, 2 Formate), RLS, label_type Enum-Erweiterung (storage_label, product_label, return_label)
Shopify Metafeld-Sync: Flexibler Builder zum Befüllen von Shopify-Metafeldern mit WMS-Daten (Auftragsnummer, Tracking, Retour-Tracking, Tags, etc.)
Shopify Versandrückmeldung: Trackingnummer + Carrier automatisch an Shopify senden (Fulfillment API)
Carrier-Mapping: WMS-Versandart → Shopify Carrier konfigurierbar (DHL Express, Deutsche Post, etc.)
Retour-Tracking: Auto-Return Trackingnummer als zusätzliche Trackingnummer an Shopify senden
Fulfillment-Toggle pro Integration, Retry-Queue mit Cron, Status-Badge im Auftragsdetail
Produktverwaltung mit Varianten, Bundles und Tags (PROJ-2, 15, 16, 78, 79, 88, 89)
Lagerverwaltung mit 5-stufiger Hierarchie und Standort-Wizard (PROJ-3, 4, 34-36)
Bestandsführung mit Bewegungshistorie und FIFO-Bewertung (PROJ-5, 14, 73, 74)
Wareneingang frei und gegen Bestellung (PROJ-6)
Kundenauftrags-Verwaltung mit Audit-Trail (PROJ-21, 59, 90)
Sammelkommissionierung mit Picklisten-Profilen (PROJ-9, 10, 92)
Versandprozess mit Label-Generierung und Zollinhaltserklärung (PROJ-11, 70)
Lieferanten- und Einkaufsbestellungen mit Kanban-Board (PROJ-18-24, 75, 76, 81)
Shopify-Integration mit Multi-Shop und SKU-Matching (PROJ-7, 8, 50-55)
Amazon SP-API Integration (FBM + FBA) mit Carrier-Mapping (PROJ-60-64, 67-69, 71, 72)
DHL und Deutsche Post Internetmarke Integration (PROJ-12, 27, 40)
Print Broker mit Workstation-Pairing und Job-Queue (PROJ-25, 37-39, 41)
Nachfüllung / Replenishment mit Profilen und Berichten (PROJ-94)
Daten-Hub mit CSV Import/Export und Templates (PROJ-84-87)
Workflow-Engine mit Trigger, Bedingungen und Aktionen (PROJ-56-58, 93)
Einstandspreis und Profitbutler-Integration (PROJ-73, 74, 82, 83)
Team-Verwaltung mit Rollen und PIN für Mobile (PROJ-32, 33, 80)
Sortiernummer pro Lagerplatz für Picking-Routen (PROJ-91)
Performance: Trigram-Indexe, JWT-Claims, Batch-Operationen (PROJ-40-49)
Datenbereinigung mit TTL-Policies (60d Print-Jobs, 90d Sync-Logs) (PROJ-47)
Neue Architektur-Sektion mit Seite "Bestandssynchronisation" — beschreibt Queue-Modell, DB-Trigger, App-Hook-Defense-in-Depth, Safety-Sync und Drift-Diagnose. Mermaid-Diagramm zeigt den Flow Stock-Change/Order-Lifecycle → Queue → Cron → Shopify/Amazon.
Versandarten-Hilfeseite: Vollständige Anleitung mit Priorität, Drag & Drop, Workflows, Fallback-Logik
Neue Hilfeseite: Produktdokumente (Konformitätserklärung, Bedienungsanleitung, Umkarton-Etikett)
Dokumentation aller 18 EU-Produktkategorien mit Richtlinien und Normen
Anleitung für Hersteller-Stammdaten, Varianten-Support und FAQ
Shopify-Anbindung: komplette Schritt-für-Schritt-Anleitung für Mandanten (eigene Custom App erstellen, Client-ID/Secret hinterlegen, verbinden) inkl. Bestellstatus-Sync, Zahlungsstatus-Rückmeldung, Produkt-Auto-Import und DSGVO-Compliance-Webhooks
PROJ-614–630: Neue Hilfeseite „Bestandsbewertung & Stichtag“ (artikel-und-lager/bestandsbewertung) — FIFO-Bewertung und Coverage, Stichtags-Rekonstruktion inkl. „heutiger Wissensstand“-Semantik, bezahlter Zulauf mit Zahlungsmodus-Verweis, Bestandswert-Verlaufs-Chart, Stichtags-Vergleich, PDF-Inventurliste mit Festschreibungs-Hinweis, Ladenhüter/Reichweite. Im WMS per HelpLink von der Bestandsbewertungsseite verlinkt.
PROJ-237: Neue Hilfeseite 'Nachlaufkosten' (einkauf/nachlaufkosten) — Was sind Nachlaufkosten (Fracht/Zoll/Sonstige EUR+Fremdwährung), Karten im Kosten-Tab, Vergleichstabelle der drei Verteilmethoden (Volumen/Warenwert/Menge) mit Empfehlungen pro Szenario (Container→Volumen, Versicherung→Warenwert, Handling→Menge), Wechselkurs-Semantik (1 EUR = X Fremdwährung, Quelle api/manual), retroaktive FIFO-Korrektur mit Mermaid-Flowchart (DB-Trigger → calculate_landed_costs → goods_receipt_items + stock_movements), typischer Workflow (Container-Import aus China mit CNY+EUR-Kosten) als Mermaid-Sequenz, FAQ (Division bei Kurs, Verteilmethoden-Wechsel, LB-übergreifende Fracht, Rechnungen), aufklappbare Technik-Details (calculate_landed_costs-RPC, Trigger, purchase_orders/goods_receipt_items/stock_movements).
PROJ-232: Neue Hilfeseite 'Versandinfo-Tags' (einkauf/versandinfo-tags) — Vollständige Incoterms-2020-Referenz (alle 11 Codes EXW/FCA/FAS/FOB/CFR/CIF/CPT/CIP/DAP/DPU/DDP mit Kosten/Risikoübergang/Use-Case), Transportart-Tabelle (Schiff/Luft/Zug/LKW mit Laufzeiten aus Asien), Händler-Entscheidungsvergleich FOB vs. CIF vs. DDP, Mermaid-Flowchart für den Tag-Setzen-Workflow beim LB-Anlegen, Gantt-Diagramm für Laufzeitvergleich, aufklappbare technische Details (DB-Spalten `incoterm`/`transport_mode`, Zod-Schemas, Audit Trail), FAQ zu rechtlicher Relevanz und Incoterms-2010-Altbegriffen (DAT→DPU, DDU→DAP). Neuer Top-Level-Bereich 'Einkauf' im Sidebar-Meta.
PROJ-223: Dokuseite 'Bestellungen' überarbeitet — alte Filterleisten-Beschreibung ersetzt durch drei klar getrennte Abschnitte: Unified Search mit Scope-Dropdown-Tabelle (Überall/Auftrag+Kunde/Artikel/Notiz/Externe Nr.) inkl. konkreten Beispielen (Amazon-Nr. findet externe Bestellnr., eBay-Nr. findet Notiz, SKU/EAN/ASIN/FNSKU findet Artikel), kompakte Status-Pipeline-Tabs, Filter-Drawer mit sekundären Filtern und Aktive-Filter-Chipleiste mit prominentem 'Alle zurücksetzen'-Button.
PROJ-177: Neue Dokuseite 'Amazon FBA-Bestand' (integrationen/amazon-fba-bestand) — Mermaid-Flowchart des FBA-Stock-Sync-Pfads (SP-API → pullFbaInventory → sync_amazon_fba_stock RPC → public.stock + stock_movements), Erklärung von FBA-POOL als virtueller Sammel-Location, read-only Warehouse-Semantik, Bewertung/Bestellvorschlag-Effekte, Tabelle der bekannten Einschränkungen (Doppelzählung, Cost-Approximation, Retouren-Semantik, Unmapped SKUs) mit Verweis auf PROJ-178, technische Referenz (RPC-Signaturen, Movement-Type, Code-Pfade).
PROJ-172: Neuer Abschnitt 'Nächtlicher automatischer Refresh' auf der Amazon-Angebote-verwalten-Doku. Enthält Mermaid-Flowchart des Cron-Pfads (Scheduler → Integrations-Loop → advanceListingsJob → per-MP-Isolation → Cross-MP-Propagation → finishLog), Vergleichstabelle der Amazon-Cron-Zeiten (Listings 02:00, FBA-Inventory 03:15), Opt-Out-Erklärung, Anleitung für manuelles Testen (Cron-Jobs-Tab-Trigger + 'Jetzt starten'-Button pro Integration), aufklappbare Technik-Details zu 'Warum kein pg_cron?' und 'Warum kein wöchentlicher Force-Full?'.
Amazon-Angebote verwalten: Neuer Abschnitt 'FBA-Bestand' mit Mermaid-Flow, Ereignis-Tabelle und Technik-Details zum Trigger-basierten Sync (PROJ-171).
PROJ-170: Neue Dokuseite 'Amazon-Angebote verwalten' — Mermaid-Workflow-Flowchart (Filter → Selektion → Bulk-Aktion), FBA/FBM-Vergleichstabelle, Filter-Übersicht, Beispiel-Workflow '50 unzugeordnete FBA-DE-Angebote auf einmal mappen', Spalten-Konfiguration, CSV-Export, aufklappbare Technik-Details (API-Endpoints, Indizes, Selektions-Modell).
Amazon-Integration: Vollständige Dokumentation ersetzt den Stub — Mermaid-Flowchart, FBM/FBA-Vergleichstabelle, Filter-Übersicht, Status-Mapping Amazon → Flowkom, FAQ (PROJ-167)
Shopify-Integration: Vollständige Dokumentation (Verbindung, Import, Fulfillment, Erstattungen, Fehlerbehebung)
Bestellungen: Zahlstatus-Erklärung und Erstattungs-Anleitung ergänzt
FreeScout-Integration Doku überarbeitet: Matching-Logik mit Mermaid-Flowchart, eBay-Username-Lookup, Carrier-Erkennung, Deeplinks, marktplatzspezifische Fehlerbehebung
Cloud-Speicher Dokumentation: Übersichtsseite (Funktionen, unterstützte Anbieter, Ordnerstruktur) + ausführliche OneDrive-Einrichtungsanleitung (Azure App-Registrierung, Berechtigungen, Env-Vars, Fehlerbehebung)
FreeScout-Integration: Ausführliche Einrichtungsanleitung (Flowkom + FreeScout Modul), Sidebar-Funktionen, Fehlerbehebung, Sicherheitsübersicht
Druckvorlagen-Dokumentation (PROJ-99): Etikettenvorlagen, Etikettenformate, Druckflow, Barcode-Typen, Layout-Erklärung, FAQ
Service-Artikel-Dokumentation (PROJ-98): Versandpositions-Erkennung und inventory_tracking Flag
Automatische Versionierung mit Bump-Script
Drucker-Dokumentation (Einrichtung, Fehlerbehebung)
Nachfüllung komplett dokumentiert (5 Seiten: Übersicht, Profile, Bericht, Mobile, Prozess)
Picklisten-Dokumentation erweitert (Profile, Mobile Picking, Prozessdetails)
Sortiernummer-Dokumentation
Flowkom Mobile Dokumentation (5 Seiten: Übersicht, Einrichtung, Bedienung, Einstellungen, Fehlerbehebung)
Erste Schritte Guide (Workspace einrichten, Benutzer anlegen, erste Bestellung)
Artikel und Lager Dokumentation (Produkte, Lagerplätze, Bestände, Systemlagerplätze)
Aufträge und Versand Dokumentation (Bestellungen, Picklisten, Versand, Retouren)
Daten-Hub Dokumentation (CSV Import/Export, Vorlagen, Feldreferenz)
Einstellungen Dokumentation (13 Seiten)
Integrationen Dokumentation (Shopify, Amazon)
Neue Seite 'Bestellvorschlag': Bedienung und Rechenweg verständlich erklärt, inkl. Retourenquote und Mindestbestellmengen.
Neue Seite 'Einstandspreis & FIFO': von der Beispielrechnung beim Wareneingang über Wechselkurse und Frachtverteilung bis FIFO-Bewertung und Festschreiben — komplette Referenz.
Amazon-Custom Personalisierung: neue Hilfeseite (Aktivieren, FBM-only, Anzeige im Auftrag, kein Cron noetig). Amazon Verkaeufer-Bestellnummer: Abschnitt zum Suchen der Nummer ergaenzt.
Shopify-Doku überarbeitet: kopierfertiger Rechte-Block (alle 10 exakten Scopes) für die eigene Shopify-App inkl. Erklärtabelle, neue Sektion „Produkt-Push (Flowkom → Shopify)“ mit Bildergalerie/Varianten-Bildern und „Bilder nachträglich übertragen“, plus Korrekturen (Re-Autorisierungs-Hinweis, kanal-scharfe Kundenbenachrichtigung).