Warenwirtschaft: Doku — Kundenentscheide N-1/N-6/N-10 umgesetzt

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-07-15 14:10:33 +00:00
parent 6af6760ffc
commit a14751ed10
2 changed files with 4 additions and 1 deletions

View file

@ -227,7 +227,9 @@ Ein admin ≥ 7 kann `javascript:…` hinterlegen, das beim Klick im Superadmin-
>
> **Update 15.07.2026 abends — Fix-Roadmap umgesetzt:** Alle Hoch- und Mittel-Befunde sind behoben und einzeln committet: **OPT-6** `8445038` (H-1, M-5), **OPT-7** `c69721d` (H-2, H-3, M-1, M-9), **OPT-8** `fa44af0` (H-4, H-5, M-8, N-11/12/14 — N-14 als nicht-destruktiver Erhalt statt Entfernung, der Zweig war durch `ProductPhase0Test` abgedeckt), **OPT-9** `9ed47c0` (M-2, M-3, M-6, M-7, M-10), **Niedrig-Paket** `d34f0a7` (N-2/3/4/5/7/8/9/15). Suite nach Abschluss: **231 Tests grün, 823 Assertions.**
>
> **Bewusst offen (Design-/Kundenentscheid, kein Defekt):** N-1 (Chargen-Gruppierung ohne `supplier_id` — Kundenentscheid einholen), N-6 (`reFormatNumber`-Punktkonvention ist app-weite deutsche Konvention), N-10 (manuelle Bewegung darf ins Minus — Inventur-Korrekturen), N-13 (ungültige `mfg_row_phase`-Indizes fallen still auf „phasenlos"), N-16-Rest (Query-Bündelung `buildRecipePayload`/`computeMhdWarning` — reine Perf-Politur). M-6-Rest: Die drei `image/attribute`-GET-Routen (Product/Category/Sites) bleiben GET, sind aber durch das M-7-Whitelisting entschärft.
> **Update 15.07.2026 — Kundenentscheide umgesetzt:** **N-1 behoben** (`9b6c9de`): Chargennummern kommen von extern und können kollidieren → Lieferant gehört zum Gruppenschlüssel (`b:<supplier>:<lot>`), Batch-Check prüft den Lieferanten mit. **N-6 behoben** (`016e8bb`): Kundenentscheid — ein einzelner Punkt mit 1–2 Nachkommastellen gilt in WaWi-Eingaben als Dezimaltrenner („5.1" = 5,1, „1.500" bleibt Tausender); neuer Helper `reFormatWawiNumber()`, JS-Parser vereinheitlicht (`parseDeNumber` las „1.500" bisher sogar als 1,5); `reFormatNumber()` app-weit unverändert. **N-10 entschärft** (`6af6760`): Bewegungs-Modal zeigt den aktuellen Bestand und fragt bei Ausgängen über Bestand per Bestätigung nach (Inventur-Korrekturen bleiben möglich). Suite: **233 grün, 832 Assertions.**
>
> **Verbleibend offen (bewusstes Design, kein Defekt):** N-13 (ungültige `mfg_row_phase`-Indizes fallen still auf „phasenlos" — rein kosmetisch, per Drag&Drop korrigierbar), N-16-Rest (Query-Bündelung `buildRecipePayload`/`computeMhdWarning` — Perf-Politur, sinnvoll erst mit AP-13). M-6-Rest: Die drei `image/attribute`-GET-Routen (Product/Category/Sites) bleiben GET, sind durch das M-7-Whitelisting entschärft — Umstellung auf POST am besten mit AP-14 (Audit-Trail).
## 6. Empfohlene Fix-Roadmap (Vorschlag: neuer Block AP-30 / OPT-6…OPT-9)

View file

@ -167,6 +167,7 @@ Die fachlichen Detailspezifikationen zu **AP-20, AP-21, AP-23, AP-24, AP-27, AP-
| 15.07.2026 | **OPT-8 (Rezeptur-Robustheit)** | Audit H-4/H-5/M-8/N-11/12/14: Rezeptur-Neuaufbau transaktional + validiert (unbekannte INCI-IDs, Phasenname ≤ 100); Phasen ohne Zeilen bleiben erhalten; Duplikat-Rohstoffe summieren; Set-Umstellung löscht Phasen; Auto-Phasenname AA-Schema; Legacy-Listen-Sync erhält gram/factor. Commit `fa44af0`. | `RecipeRobustnessTest` (6 grün) |
| 15.07.2026 | **OPT-9 (AuthZ/CSRF)** | Audit M-2/M-3/M-6/M-7/M-10: Produktionen erfordern admin ≥ 7 (Request + Controller-Gates + UI); tote Formulare für Stufen 1–6 ausgeblendet; `stock-entries/copy` POST, Produkt-Löschung DELETE-Formulare; `imageAttribute` mit Spalten-Whitelist; URL-Felder `url:http,https`. Commit `9ed47c0`. | +2 Tests, 3 Tests an neue Regeln angepasst |
| 15.07.2026 | **Audit-Niedrigbefunde** | N-2/3/4/5/7/8/9/15 (Preis nur aus Eingängen, exaktes Verbrauchsfenster, einheitliche Kritisch-Zählung, Limit-Hinweis Ausschussliste, konsistentes Zahlenparsing, Kopie ohne Alt-Chargen-Nr., withTrashed-Korrekturen, Markdown-html_input=strip). Bewusst offen: N-1/6/10/13 (Design-/Kundenentscheid). Commit `d34f0a7`. | Volle Suite: **231 grün, 823 Assertions** |
| 15.07.2026 | **N-1/N-6/N-10 (Kundenentscheide)** | **N-1:** Chargen-Gruppierung je Lieferant (`batchGroupKey` = `b:<supplier>:<lot>`, Batch-Check prüft Lieferant) — Kundenentscheid: Lot-Nummern kommen von extern und können kollidieren (`9b6c9de`). **N-6:** WaWi-Eingaben lesen einen einzelnen Punkt mit 1–2 Nachkommastellen als Dezimaltrenner („5.1" = 5,1; „1.500" = 1500) — neuer Helper `reFormatWawiNumber()` + JS-Parser vereinheitlicht (`016e8bb`). **N-10:** Bewegungs-Modal zeigt aktuellen Bestand + Bestätigung bei Minus-Buchung (`6af6760`). | +2 Tests. Volle Suite: **233 grün, 832 Assertions** |
| _offen_ | AP-13 | Shop-Bestandsabzug | – |
| _offen_ | AP-14/15/16/17 | Audit-Trail, Blockrechte, 2FA, WaWi-Einstellungen | – |