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

171 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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](03-status-und-vorschlaege/aufwandsuebersicht-warenwirtschaft-2026-09-10.md) (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](03-status-und-vorschlaege/leistungsuebersicht-warenwirtschaft-23-07-2026.md)
ist deren Vorgänger und deckt nur März–Juli ab.
---
## Ordnerstruktur
| Ordner | Inhalt |
|---|---|
| [`00-konzept/`](00-konzept/) | Ausgangs-Briefings, Fachkonzept, frühes Feedback (März–April 2026) |
| [`01-entwicklungsplaene/`](01-entwicklungsplaene/) | Versionierte Entwicklungspläne — maßgeblich ist die neueste Fassung [`entwicklungsplan-V7-2026-08-26.md`](01-entwicklungsplaene/entwicklungsplan-V7-2026-08-26.md) (V7.0); V6.0 = `entwicklungsplan-aktualisiert-2026-07-06.md` |
| [`02-audit/`](02-audit/) | Qualitäts- & Sicherheits-Audit vom 15.07.2026; [Umsetzungsprüfung 08.09.2026](02-audit/umsetzungspruefung-2026-09-08.md) (18 Befunde) [Nachprüfung der Behebung](02-audit/nachpruefung-befundbehebung-2026-09-08.md) (6 Restbefunde) [Gegenprüfung 09.09.2026](02-audit/gegenpruefung-restbefunde-2026-09-09.md) (2 Randfälle) und [Prüfung AP-53 10.09.2026](02-audit/pruefung-ap53-mengenpraezision-2026-09-10.md) (4 Fehler + 4 Prüfpunkte) — alle umgesetzt |
| [`03-status-und-vorschlaege/`](03-status-und-vorschlaege/) | [Aufwands- und Leistungsnachweis](03-status-und-vorschlaege/aufwandsuebersicht-warenwirtschaft-2026-09-10.md) (maßgeblich, Stand 15.09.2026), Leistungsübersicht 23.07.2026 (Vorgänger), AP-32-Brückenlösung, Vorschlag Deckel-Varianten |
| [`screens/`](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](03-status-und-vorschlaege/ap-32-brueckenloesung-connector-update.md).
---
## 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](02-audit/audit-bericht-15-07-2026.md).
### 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](01-entwicklungsplaene/entwicklungsplan-V7-2026-08-26.md)**
(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](01-entwicklungsplaene/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](02-audit/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](02-audit/nachpruefung-befundbehebung-2026-09-08.md) 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](03-status-und-vorschlaege/vorschlag-deckel-varianten-produktion-23-07-2026.md).
---
## 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).