Warenwirtschaft: Blockabschluss V6.0 — Status-Doku finalisiert

- Plan §1.1/§1.2: Statustabelle auf Abschluss-Stand (AP-20/21/23/24/27/28 +
  OPT-1..4 fertig mit Commit-Referenzen; AP-13/14/15/16/17 nachgelagert)
- Roadmap §3 + §6-Zeiger: Block abgeschlossen, nachgelagerte Pakete warten
  auf Kundenprüfung weiterer Anforderungen (Wiedereinstieg als V6.1/V7.0)
- docs/Todos.md + docs/nächsten Anforderungen an die WaWi.md als
  vollständig eingearbeitet / Archiv markiert

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-07-06 14:15:12 +00:00
parent 99a6c92e6c
commit f03e19ffc3
2 changed files with 28 additions and 18 deletions

View file

@ -22,7 +22,9 @@ V6.0 basiert auf einer **vollständigen Code-Verifikation vom 06.07.2026** (alle
### 1.1 Testsuite
`php artisan test`: **153 Tests grün, 533 Assertions, Dauer ~2,3 s.** Einziger Fail: `ExampleTest` (erwartet 200 auf `/`, bekommt den Domain-Redirect 302) — kein WaWi-Problem, Test sollte auf `assertRedirect()` angepasst oder entfernt werden (in OPT-1 miterledigt).
### 1.2 AP-Status (per Code verifiziert, nicht nur per Doku)
> **Stand nach Blockabschluss 06.07.2026 abends:** **201 Tests grün, 731 Assertions** — Suite dauerhaft 100 % grün.
### 1.2 AP-Status (per Code verifiziert; Status nach Blockabschluss 06.07.2026 aktualisiert)
| AP | Titel | Status | Evidenz |
|---|---|---|---|
@ -30,17 +32,17 @@ V6.0 basiert auf einer **vollständigen Code-Verifikation vom 06.07.2026** (alle
| AP-22 | Produktbestand-Erweiterungen (Flag, Dringlichkeits-Sortierung, 4 Kacheln, Verbrauch/Monat) | ✅ fertig | `2026_06_12_175615_add_show_in_product_stock_to_products_table`, `ProductStockTest` (13 grün) |
| AP-25 | Lieferbestand: Datum statt Tage, überall kaufbar | ✅ fertig | `out_of_stock_until`-Datepicker in `product/form.blade.php`, `ProductOutOfStockTest` (8 grün) |
| AP-26 | Ausschuss-Gründe konfigurierbar | ✅ fertig | `2026_06_12_170531_create_disposal_reasons_table`, `DisposalReasonController`, `DisposalReasonSettingsTest` (8 grün) |
| AP-21 | INCI-Erweiterungen | ❌ offen | kein `alt_name`, keine Storage-Tabellen, Formular hat nur Multi-Select (Pivot `ingredient_supplier.url` existiert, wird aber nicht bespielt), kein `scopeUsedInActiveRecipes` |
| AP-20 | Rohstoffbestand-Filter + „Kein Rohstoffbestand" | ❌ offen | kein `exclude_from_stock`, `RawMaterialStockController@index` filtert hart `active=true` |
| AP-23 | Rezeptur-Phasen | ❌ offen | keine `recipe_phases`-Tabelle, kein `recipe_phase_id` |
| AP-24 | Chargen-Nr.-Präfix | ❌ offen | kein `batch_prefix`, kein `suggestedBatchNumber()` |
| AP-27 | Wareneingang: Charge zusammenführen | ❌ offen | `StockEntryController::store()` ohne Batch-Check |
| AP-28 | Neue Produktions-Maske + Produktionsergebnis | ❌ offen | keine `production_outputs`, `recordProductionStock()` bucht aus `productions.quantity` |
| AP-13 | Shop-Bestandsabzug bei Versand (inkl. Sets) | ❌ offen (Konzept liegt vor) | nirgends wird `source='sale'` erzeugt; `monthlyConsumptionByProduct()` ist dafür schon vorbereitet |
| AP-14 | Audit-Trail | ❌ offen | kein Package, keine Spur |
| AP-15 | Blockbasierte Rechte | ❌ offen | nur `isAdmin()`-Stufen |
| AP-16 | 2FA (Google Authenticator) | ❌ offen | kein TOTP-Package in composer.json |
| AP-17 | WaWi-Einstellungsseite | ❌ offen | `wawi-ui.blade.php` ist nur das CSS-Partial |
| AP-21 | INCI-Erweiterungen | ✅ fertig 06.07.2026 (`d05df49`) | `alt_name` + 3 Storage-Tabellen (Migrationen `2026_07_06_1207**`), Lieferanten-Repeater mit URL, `scopeUsedInActiveRecipes()`, `StorageSettingsTest`/`IngredientOrderFieldsTest` grün |
| AP-20 | Rohstoffbestand-Filter + „Kein Rohstoffbestand" | ✅ fertig 06.07.2026 (`ea36067`) | `exclude_from_stock` (Migration `2026_07_06_133714`), `?scope=all\|recipe`-Umschalter, Kritisch-Badge respektiert Flag |
| AP-23 | Rezeptur-Phasen | ✅ fertig 06.07.2026 (`97d420c`) | `recipe_phases` + `product_ingredients.recipe_phase_id` (Migration `2026_07_06_134518`), Phasen-Blöcke mit Drag&Drop im Produktformular, `RecipePhaseTest` (6 grün) |
| AP-24 | Chargen-Nr.-Präfix | ✅ fertig 06.07.2026 (`209ea46`) | `products.batch_prefix` (Migration `2026_07_06_140324`), `Product::suggestedBatchNumber()` (`TP1` + `ttmmjj`), `BatchPrefixTest` (6 grün) |
| AP-27 | Wareneingang: Charge zusammenführen | ✅ fertig 06.07.2026 (`7a5b5e0`) | Batch-Check-Endpoint + Vorbelegung, Chargen-Gruppierung Detail/Produktion, FEFO-`expandBatchLines()`, `StockEntryChargeMergeTest` (7 grün) |
| AP-28 | Neue Produktions-Maske + Produktionsergebnis | ✅ fertig 06.07.2026 (`99a6c92`) | `production_outputs` + Backfill (Migration `2026_07_06_153907`), Buchung je Output-Produkt, Phasen-Maske + INCI-Liste + Ergebnis-Repeater, `ProductionOutputTest` (8 grün) |
| AP-13 | Shop-Bestandsabzug bei Versand (inkl. Sets) | ⏸ **nachgelagert** (Kundenentscheid 06.07.2026: weitere Anforderungen werden erst geprüft) | Konzept liegt vor (V4.0); `monthlyConsumptionByProduct()` und `production_outputs`-Buchung sind vorbereitet |
| AP-14 | Audit-Trail | ⏸ nachgelagert | kein Package, keine Spur |
| AP-15 | Blockbasierte Rechte | ⏸ nachgelagert | nur `isAdmin()`-Stufen |
| AP-16 | 2FA (Google Authenticator) | ⏸ nachgelagert | kein TOTP-Package in composer.json |
| AP-17 | WaWi-Einstellungsseite | ⏸ nachgelagert | `wawi-ui.blade.php` ist nur das CSS-Partial |
### 1.3 `docs/Todos.md` (03.06.2026) — Abgleich
Alle Punkte dieser älteren Runde sind in V4.0 eingeflossen und umgesetzt (URL-Felder inkl. Parameter-Validierung, Brutto/Netto-Rechner + UST-Dropdown im Einkauf, Einkauf duplizierbar, Lieferzeiten Lieferant/INCI, INCI-Lieferanten-Mehrfachauswahl, Produktions-Maske-Feinschliff, Produktbestand + Historie, Set-/Child-Produkte). **Offen daraus nur noch:** 2FA (= AP-16) und blockweise Rechtevergabe (= AP-15). Die Datei kann als „historisch/eingearbeitet" markiert werden.
@ -106,11 +108,13 @@ Alle Punkte dieser älteren Runde sind in V4.0 eingeflossen und umgesetzt (URL-F
| 7 | ✅ OPT-3 + OPT-4 | Pagination + show()-Refactoring — **erledigt 06.07.2026** | – | 1,5–2,5 Tage |
| 8 | ✅ AP-27 | Wareneingang: Chargen-Merge — **erledigt 06.07.2026** | OPT-4 | 1–2 Tage |
| 9 | ✅ AP-28 | Neue Produktions-Maske + Produktionsergebnis — **erledigt 06.07.2026** | AP-21, AP-23, AP-24, AP-27 | 5–8 Tage |
| 10 | ➡️ AP-13 | **NÄCHSTER SCHRITT:** Shop-Bestandsabzug bei Versand (inkl. Sets; Konzept aus V4.0) | AP-28 (saubere Buchungslogik) | 3–5 Tage |
| 11 | AP-14 | Audit-Trail | – | 2–3 Tage |
| 12 | AP-16 | 2FA für Admins (Google Authenticator) | – | 2–3 Tage |
| 13 | AP-15 | Blockbasierte Rechte (sehen/bearbeiten je Block) | AP-16 sinnvoll davor | 4–6 Tage |
| 14 | AP-17 | WaWi-Einstellungsseite (Schwellwerte, Fenster, Defaults) | – | 1–2 Tage |
| 10 | ⏸ AP-13 | Shop-Bestandsabzug bei Versand (inkl. Sets; Konzept aus V4.0) — **nachgelagert** | AP-28 (saubere Buchungslogik) ✅ | 3–5 Tage |
| 11 | ⏸ AP-14 | Audit-Trail — nachgelagert | – | 2–3 Tage |
| 12 | ⏸ AP-16 | 2FA für Admins (Google Authenticator) — nachgelagert | – | 2–3 Tage |
| 13 | ⏸ AP-15 | Blockbasierte Rechte (sehen/bearbeiten je Block) — nachgelagert | AP-16 sinnvoll davor | 4–6 Tage |
| 14 | ⏸ AP-17 | WaWi-Einstellungsseite (Schwellwerte, Fenster, Defaults) — nachgelagert | – | 1–2 Tage |
> **Blockabschluss 06.07.2026:** Positionen 1–9 (OPT-1/2/3/4 + AP-21/20/23/24/27/28) sind vollständig umgesetzt und einzeln committet. Die Positionen 10–14 sind auf Kundenwunsch **nachgelagert** — vor der Umsetzung prüft der Kunde weitere Anforderungen, die dort mit einfließen sollen.
**Begründung der Reihenfolge:**
- OPT-1/OPT-2 zuerst: minimales Risiko, sofortiger Nutzen, und AP-21 baut direkt auf OPT-2 auf (drei neue Lagerort-CRUDs Raum/Regal/Fach).
@ -159,4 +163,6 @@ Die fachlichen Detailspezifikationen zu **AP-20, AP-21, AP-23, AP-24, AP-27, AP-
| _offen_ | AP-13 | Shop-Bestandsabzug | – |
| _offen_ | AP-14/15/16/17 | Audit-Trail, Blockrechte, 2FA, WaWi-Einstellungen | – |
> **➡️ HIER GEHT ES WEITER: AP-13 (Shop-Bestandsabzug bei Versand, inkl. Sets)** gemäß Konzept aus V4.0 (`entwicklungsplan-aktualisiert-02-06-2026.md`), mit der V6.0-Änderung: Buchung gegen die **`production_outputs`-basierten Bestände** (AP-28). Kern: beim **gebuchten Versand** je Bestellposition einen Abgang `source='sale'` im Produktbestand erzeugen (Sets in ihre Einzelprodukte auflösen); Stornos/Retouren als Gegenbuchung. `monthlyConsumptionByProduct()` berücksichtigt `source='sale'` bereits automatisch. Danach AP-14 (Audit-Trail) → AP-16 (2FA) → AP-15 (Blockrechte) → AP-17 (WaWi-Einstellungen).
> **✅ BLOCK ABGESCHLOSSEN (06.07.2026).** Alle fachlichen Pakete der Anforderungsrunde vom 12.06.2026 sind umgesetzt (OPT-1 … OPT-4, AP-20/21/23/24/27/28); die Quelldateien `docs/nächsten Anforderungen an die WaWi.md` und `docs/Todos.md` sind vollständig eingearbeitet. Suite: 201 Tests grün, 731 Assertions.
>
> **Nachgelagert (auf Kundenwunsch, neue Anforderungen werden vorher geprüft):** AP-13 (Shop-Bestandsabzug bei Versand, inkl. Sets — Konzept in V4.0, Buchung gegen `production_outputs`-Bestände, Abgang `source='sale'`, Sets auflösen, Stornos/Retouren als Gegenbuchung; `monthlyConsumptionByProduct()` berücksichtigt `source='sale'` bereits automatisch), danach AP-14 (Audit-Trail) → AP-16 (2FA) → AP-15 (Blockrechte) → AP-17 (WaWi-Einstellungen). **Wiedereinstieg:** neue Anforderungen des Kunden mit diesem Plan abgleichen und als V6.1/V7.0 fortschreiben.

View file

@ -1,3 +1,7 @@
> **📁 HISTORISCH / VOLLSTÄNDIG EINGEARBEITET (Stand 06.07.2026):** Alle Punkte dieser Datei sind in den Entwicklungsplänen V4.0–V6.0 umgesetzt. Einzige Ausnahmen: 2FA (= AP-16) und blockweise Rechtevergabe (= AP-15) — beide als nachgelagerte Pakete im Plan V6.0 (§3) geführt. Diese Datei dient nur noch als Archiv.
---
Könntest Du das Feld so anlegen, dass der so eine URL mit Parametern annimmt? Dann könnten man gleich in den Konfigurator springen bei solchen Anbietern (Versandverpackungen):
solceh URLS https://www.kartonsaufmass.de/bestellen?bom_configuration=%7B%2522length%2522:125,%2522width%2522:125,%2522height%2522:30,%2522amount%2522:100%7D