gruene-seele/dev/product management /README.md
Kevin Adametz 79bec0ff0b Warenwirtschaft: Aufwandsnachweis um die Nachträge vom 14.09.2026 ergänzt (Dichte, Einheit-Pflichtfeld, Einkaufskorrektur)
Phase 6 um vier Zeilen erweitert (2859b43, 23381a3, be1d8fd, 736cb08): +5 Std.
→ 199 Std. Entwicklung, 242 Std. gesamt. Kennzahlen (396 Tests, 63 Migrationen,
Leitfaden 3.2), Live-Migrationsliste und README nachgezogen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-15 08:10:27 +00:00

13 KiB
Raw Blame History

Warenwirtschaft — Projektübersicht & Entwicklungsplan

Stand: 09.09.2026 Status: Modul ist live und in der Kundentestphase (Dev-Container mit eingespielter Live-Datenbank inkl. Testdaten). Testsuite: 384 Tests grün (1.592 Assertions, 0 Failures).

Dieses Dokument ist der Einstieg in den Ordner. Es skizziert den Gesamtstand, listet die erledigten und die noch offenen Arbeitspakete und verweist auf die Detaildokumente. Die maßgebliche, aktuellste Aufwands-/Leistungssicht ist der Aufwands- und Leistungsnachweis (Stand 15.09.2026: Entwicklung je Teilmodul mit Datum, alle 81 Befunde aus 5 Prüfungen, reale Stunden — 242 Std. gesamt); die Leistungsübersicht 23.07.2026 ist deren Vorgänger und deckt nur März–Juli ab.


Ordnerstruktur

Ordner Inhalt
00-konzept/ Ausgangs-Briefings, Fachkonzept, frühes Feedback (März–April 2026)
01-entwicklungsplaene/ Versionierte Entwicklungspläne — maßgeblich ist die neueste Fassung entwicklungsplan-V7-2026-08-26.md (V7.0); V6.0 = entwicklungsplan-aktualisiert-2026-07-06.md
02-audit/ Qualitäts- & Sicherheits-Audit vom 15.07.2026; Umsetzungsprüfung 08.09.2026 (18 Befunde) Nachprüfung der Behebung (6 Restbefunde) Gegenprüfung 09.09.2026 (2 Randfälle) und Prüfung AP-53 10.09.2026 (4 Fehler + 4 Prüfpunkte) — alle umgesetzt
03-status-und-vorschlaege/ Aufwands- und Leistungsnachweis (maßgeblich, Stand 15.09.2026), Leistungsübersicht 23.07.2026 (Vorgänger), AP-32-Brückenlösung, Vorschlag Deckel-Varianten
screens/ Screenshots / Mockups zu Beständen, Rezeptur-Phasen, Produktion

Hinweis: Der Ordnername product management trägt ein abschließendes Leerzeichen. Das ist fehleranfällig (Shell/Tooling). Empfehlung: bei Gelegenheit in product-management umbenennen — nicht ohne Rücksprache erledigt, da evtl. externe Verweise darauf zeigen.


Was das Modul kann (Ist-Stand, live)

Eine vollständige Warenwirtschaft im Admin-Bereich des Partnercenters:

  • Stammdaten: Lieferanten (Bestellweg, Lieferzeit, Land-Default DE), Rohstoffe/INCI (Mehrfach-Lieferanten inkl. URL, Qualität, Alternativname, Lagerort Raum/Regal/Fach), Verpackungsartikel, Set-Produkte, konfigurierbare Einstellungen (USt-Sätze, Lieferzeit-Vorlagen, Ausschuss-Gründe).
  • Einkauf & Wareneingang: Bestellungen mit Netto/Brutto-Automatik & Duplizieren, Chargen-/MHD-Erfassung, Zusammenführen gleicher Chargen (FEFO).
  • Produktion: Rezeptur auf Hersteller-Basis mit Phasen (Drag & Drop), Chargen-Nr. mit Präfix + Auto-Generierung (TP1 + ttmmjj), neue Produktionsmaske mit Produktionsergebnis-Repeater (mehrere Ergebnis-Produkte je Charge, FEFO-Chargenwahl).
  • Bestände: Rohstoffbestand (Restmengen je Charge, Verbrauchsprognose, Kritisch-Warnungen), Produktbestand (revisionssichere Historie, manuelle Buchungen, Dringlichkeits-Sortierung, Kacheln), Ausschuss-Erfassung.
  • Shop-Anbindung (API): automatischer Bestandsabzug beim Versand inkl. Set-Auflösung und Storno-Rückbuchung, Protokoll-Seite „API-Bestellungen", Stichtags-Schutz für Altbestellungen.
  • Abwicklung: iPad-optimiertes Fulfillment-Board „Bestellungen" mit Versand-Sperre, Sammel-PDF (Lieferscheine/Rechnungen einer Auswahl als ein Dokument).
  • DHL-Versand (Brückenlösung): Label wird im WooCommerce-Shop erzeugt und per Connector 1.5.0 (Base64) ins Partnercenter übernommen; Anzeige von Label-Download + Sendungsnummer. Details: AP-32-Brückenlösung.

Erledigte Arbeitspakete

Alle folgenden APs sind umgesetzt, committet und durch die Testsuite abgedeckt:

  • AP-00–AP-12, AP-18, AP-19 — V4.0-Basis: Bugfixes, Stammdaten, Einkauf, Produktion, Bestände, Ausschuss, WaWi-UI, integrierte Doku.
  • AP-20 Rohstoffbestand-Filter + „Kein Rohstoffbestand"-Flag (Default „nur Rezeptur").
  • AP-21 INCI-Erweiterungen (Lieferanten-Repeater + URL, Alternativname, Lagerort-CRUDs).
  • AP-22 Produktbestand-Erweiterungen (Sortierung, Kacheln, Verbrauch/Monat).
  • AP-23 Rezeptur-Phasen (Drag & Drop).
  • AP-24 Chargen-Nr.-Präfix mit Auto-Generierung.
  • AP-25 Lieferbestand „Wieder lieferbar ab"-Datum.
  • AP-26 Ausschuss-Gründe konfigurierbar.
  • AP-27 Wareneingang: Charge zusammenführen (FEFO).
  • AP-28 Neue Produktions-Maske + Produktionsergebnis.
  • AP-31 Löschen: Soft-Delete + Abhängigkeitsprüfung (DeletionGuard).
  • AP-13 Shop-Bestandsabzug bei Versand (Sets, Gegenbuchungen, Stichtags-Schutz) + API-Protokoll.
  • AP-33a/b Fulfillment-Board + Sammel-Dokumente.
  • OPT-1–OPT-4 Code-Optimierungen (N+1-Fix, Settings-CRUD-Basisklasse, Pagination, show()-Refactoring).
  • OPT-6–OPT-9 Behebung aller Audit-Befunde (siehe unten).

Audit 15.07.2026 — vollständig abgearbeitet

5 hohe, 10 mittlere, 16 niedrige Befunde; alle behoben oder per Kundenentscheid gelöst. Kern-Fixes: Ausschuss in Chargen-Restmengen (H-1), Härtung gegen Doppel-/Negativbuchungen (H-2/H-3), transaktionssicherer Rezeptur-Neuaufbau inkl. Phasen (H-4/H-5), CSRF-/AuthZ-Härtung (M-2/3/6/7/10). Audit bestätigte: solide Architektur, kein SQLi/XSS, kein falscher Plan-Status. Details: Audit-Bericht.

Review vor Live-Release (20.07.2026) — abgefangene Risiken

  • Stichtags-Schutz auf unveränderliches Flag sale_stock_exempt umgestellt (verhinderte rückwirkenden Abzug bei Storno+Wiederversand von Altbestellungen).
  • Auto-Storno im Mahnwesen über zentralen OrderStatusService::setShipped() geführt (verhinderte zahlbare Provision auf versendete, nie bezahlte Bestellung).
  • AP-32-Brücke auf Base64/Connector 1.5.0 gehärtet (kein 403/SSRF/Timeout mehr).

Testphasen-Feedback 26.08.2026 → Plan V7.0

Aus der laufenden Testphase kam eine neue Feedback-/Bug-Runde. Alle Punkte sind am Code und an der Live-DB verifiziert und in einen Umsetzungsplan überführt: Entwicklungsplan V7.0 (9 bestätigte Bugs + Erweiterungen, ca. 15–26 PT, AP-34…AP-51). Wichtig: die WooCommerce-Ampel ist voraussichtlich kein Partnercenter-Fehler, sondern shopseitig (Status-Cron/Auth). Rohfassung des Feedbacks: entwicklungsplan-aktualisiert-2026-08-26.md. Offene Klärungspunkte (D-1…D-6) im Plan blockieren den Start einzelner Pakete. Stand 09.09.2026: AP-34…AP-51 sind umgesetzt (siehe Umsetzungsstand in V7.0); Kundennachträge AP-52 (Verpackungs-Vorschau in der Produktion mit Bestand, Differenz und „Lagerort", einheitlich mit der INCI-Tabelle) und AP-53 (Gramm-Mengen mit drei Nachkommastellen in Produktion, Wareneingang und Ausschuss; Prüfung 10.09. mit vier Befunden nachgearbeitet) ebenfalls umgesetzt; AP-47-Häkchen in die Karte „Warenwirtschaft" verschoben und ausformuliert („In der Produktion anzeigen").

Umsetzungsprüfung 08.09.2026 → Nacharbeit

Die unabhängige Prüfung der V7-Umsetzung (umsetzungspruefung-2026-09-08.md) fand 18 Befunde (5×P1, 11×P2, 2×P3) — u. a. Entwürfe blockierten Chargen, Entwurfszeilen gingen verloren, Rohstoffe in zwei Phasen wurden beim Wiederöffnen vervielfacht, historische Verpackungs-Snapshots wurden überschrieben, Versand ohne Zahlungsfreigabe und Einkaufspreise für Copyreader. Alle 18 Befunde sind umgesetzt (je ein Commit mit Regressionstest, Abschnitt 9 des Berichts). Eine anschließende Nachprüfung fand sechs Restfehler (N-01…N-06: Entwurfsmenge ohne Charge, Phasenverlust beim Artikelspeichern, Chargensplit vs. Snapshot, Vorschau vs. Snapshot, Alt-Ausschuss ohne Charge, ml-Kopie im Bearbeiten), die ebenfalls behoben sind (Abschnitt 6 dort); die Gegenprüfung vom 09.09.2026 fand zu N-02/N-04 zwei Randfälle (R-01 stabile Phasen-IDs, R-02 leerer Snapshot), ebenfalls behoben. Drei neue Migrationen (2026_09_08_*) sind auf der Dev-DB (Live-Kopie) gelaufen und müssen beim Deploy auf der Live-DB ausgeführt werden. Weiterhin offen: die im Bericht (Abschnitte 4.3/4.4/5) genannten nachgelagerten Pakete, Optimierungen, Connector-Rollout v1.6.0 und die Browser-/iPad-Abnahme.

Offene / nachgelagerte Pakete (nach Kundentestphase)

Kundenentscheid 16.07.2026: erst nach der Testphase. Grober Restaufwand ca. 28–42 PT.

Paket Inhalt Schätzung Abhängigkeit
AP-32 (voll) DHL-Etiketten direkt im System per API erstellen 3–5 PT Braucht Kundenklärung: DHL-Geschäftskundenkonto (EKP), Versandprodukte, Paketmaße/-gewichte, Druck-Setup, Retouren-/Zolllabel (CH als Drittland)
AP-33c Etiketten-Stapeldruck + Automatik-Option 1 PT mit AP-32
AP-14 Audit-Trail (lückenlose Änderungshistorie) 2–3 PT —
AP-16 2-Faktor-Authentifizierung für Admins 2–3 PT sinnvoll vor AP-15
AP-15 Blockbasierte Rechte (sehen/bearbeiten je Bereich) 4–6 PT nach AP-16
AP-17 Zentrale WaWi-Einstellungsseite 1–2 PT —

Entfällt: OPT-5 (Horizont-Filter serverseitig) — clientseitig ausreichend (Kundenentscheid 06.07.).

Neue Anforderung in Klärung — Deckel-Varianten (White Label)

Deocreme & Co.: eine Charge, danach unterschiedliche Deckel-Farben nach Bedarf. Analyse ergab: Chargen-Szenario ist bereits abgedeckt (AP-28). Empfehlung V1 (kein Umbau) — nur zwei kleine optionale Ergänzungen: Deckel als Verpackungsartikel führen (OPT-V1a, 0 Entwicklungstage) und Deckelfarbe in der Packliste des Boards anzeigen (OPT-V1b, ~0,5–1 Tag). Varianten-Bestand je Farbe (V2, 3–5 PT) nur, falls fertig konfektionierte Tiegel je Farbe gezählt werden sollen. Offene Kundenfragen im Dokument. Details: Vorschlag Deckel-Varianten.


Deployment-Checkliste (Stand 09.09.2026, Paket V7.0 + Nachbesserungen + AP-52/AP-53)

  1. Code: master bis Commit der Doku-Aktualisierung 09.09.2026 (siehe git log).
  2. Migrationen: php artisan migrate — vier neue Migrationen 2026_09_08_100000 (batch_key, stock_entry_id nullable), 2026_09_08_110000 (recipe_phase_id), 2026_09_08_120000 (fill_weight decimal), 2026_09_09_100000 (AP-53: Chargenverbrauch, Bestell-/Eingangsmenge, Ausschussmenge → decimal(12,3)). Alle auf der Dev-DB (Live-Kopie, MySQL) am 09.09.2026 erfolgreich ausgeführt; bestehende Zeilen bleiben unverändert (neue Spalten NULL, dritte Nachkommastelle 0). Vor migrate auf Live (Prüfung AP-53, 4.1): decimal(12,3) fasst max. 999.999.999,999 — lesend prüfen, dass kein Wert darüber liegt (Live-Kopie: max. 49.000 g): SELECT MAX(quantity_used) FROM production_ingredients; SELECT MAX(ordered_quantity), MAX(received_quantity) FROM stock_entries; SELECT MAX(quantity) FROM stock_disposals;. Rollback-Hinweis: migrate:rollback dieser Migration rundet neu erfasste Milligramm-Anteile auf zwei Stellen.
  3. In-App-Doku: resources/docs/hinweise.md (Stand 09.09.2026) und resources/docs/testleitfaden.md (Version 3.1, Teil C) sind aktualisiert und werden ohne Build ausgeliefert (Einstellungen → Hinweise / Leitfaden).
  4. Kein Frontend-Build nötig: alle Änderungen liegen in Blade/Inline-JS; Laravel Mix ist nicht betroffen.
  5. Nach dem Deploy (Pflicht): php artisan optimize:clear und anschließend php artisan route:cache / config:cache / view:cache neu aufbauen. Live cached Routen — ein veralteter Route-Cache führte am 09.09.2026 zu einem 500er unter /admin/inventory/general (Route [admin.inventory.stock-movement-reasons.create] not defined, Route aus AP-48 seit 28.08.2026 im Code). Danach Testleitfaden Teil C mit dem Kunden durchgehen (insb. Abschnitte 19–21 auf dem iPad).
  6. Getrennt davon: Connector-Plugin v1.6.0 im WooCommerce-Shop einspielen (AP-34/AP-38), siehe dev/partnercenter-api/README.md.

Die In-App-Doku unter resources/docs/ ist die maßgebliche Nutzerdokumentation; docs/testleitfaden-wawi-2026-07-06.md ist die archivierte Version 1.

Bekannte, bewusst akzeptierte Grenzen

  • Parallelität ist per Pest (SQLite) nicht belastbar testbar; die entscheidenden Übergänge (Board-Status, Wareneingang, Ausschuss, Produktion) prüfen ihre Vorbedingungen seit F-16 innerhalb von lockForUpdate()-Transaktionen. Ein MySQL-Integrationstest mit zwei Verbindungen steht weiterhin aus (geringes Risiko im Ein-Personen-Admin-Betrieb).
  • Self-Shipping durch Partner erzeugt bewusst keinen Bestandsabzug (Partner versendet aus eigenem Lager).
  • Board-gesetzte Versandstatus dürfen nicht von der Detailseiten-Automatik überschrieben werden (Sperr-Flag shipped_status_locked) — in der Hinweise-Doku hinterlegt.
  • Bestellpositionen tragen keine Attribut-/Varianten-Dimension (relevant nur für Deckel-Varianten V2).