gruene-seele/resources/docs/testleitfaden.md
Kevin Adametz be29be863f Warenwirtschaft: In-App-Doku für Deploy — Hinweise Stand 09.09.2026, Testleitfaden Version 3 (Teil C), Deployment-Checkliste
- resources/docs/hinweise.md: Abschnitt „Neu / geändert 08./09.09.2026“ (alle
  nutzerrelevanten Nachbesserungen + AP-52), Spalte „Lagerort“, Entwurfsregeln,
  Versand nur versandfertig, Köln-Default auch im Ausschuss.
- resources/docs/testleitfaden.md: Version 3 mit Teil C (Abschnitte 19–25).
- README: Deployment-Checkliste (Migrationen 2026_09_08_* auf Dev-DB gelaufen),
  In-App-Doku als maßgebliche Nutzerdoku; docs/testleitfaden V1 als Archiv markiert.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-09 09:17:28 +00:00

410 lines
27 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.

# Testleitfaden Warenwirtschaft — Version 3
> **Stand:** 09.09.2026
> Dieser Leitfaden führt einmal durch die Funktionen der Warenwirtschaft — in der Reihenfolge eines typischen Arbeitsablaufs, sodass jede Stelle direkt im Browser nachgeschaut und getestet werden kann.
> Die fachlichen Erklärungen dazu stehen wie gewohnt in der App unter den **[Hinweisen zur Warenwirtschaft](/admin/inventory/notices)**.
>
> - **Teil A** (Abschnitte 1–11) — die Basis-Funktionen der Warenwirtschaft (Runde 12.06.2026, Stand 16.07.2026). Unverändert gültig.
> - **Teil B** (Abschnitte 12–18) — Runde V7.0 (Testphasen-Rückmeldung 26.–28.08.2026).
> - **Teil C** (Abschnitte 19–25) — **neu: Nachbesserungen aus der Umsetzungsprüfung und Nachtrag AP-52 (08./09.09.2026)**. Wer nur die neuen Punkte prüfen will, springt direkt zu **Teil C**.
---
# Teil A — Basis-Funktionen (Runde 12.06.2026)
## 1. Einstellungen: Lagerort-Bausteine & Ausschuss-Gründe
**Wo:** Menü **[Einstellungen → Allgemein](/admin/inventory/general)**
**Neu:**
- Drei neue Karten **Räume**, **Regale**, **Fächer** — die zentralen Bausteine für Lagerorte nach dem Schema *Raum 1 | Regal 3 | A*.
- Karte **Ausschuss-Gründe** (aus Runde 12.06.): Gründe für Ausgang/Ausschuss selbst anlegen, umbenennen, deaktivieren.
**So testen:**
1. Je einen Raum (z. B. „Raum 1"), ein Regal („Regal 3") und ein Fach („A") anlegen.
2. Einen Eintrag umbenennen → die Änderung wirkt übergeordnet überall, wo der Baustein verwendet wird.
3. Einen Ausschuss-Grund anlegen (z. B. „Verkleckert") — der taucht später in Schritt 8 auf.
---
## 2. INCI-Ebene: Lieferanten mit Bestellweg, Alternativname, Lagerort
**Wo:** Menü **[Produkte → Inhaltsstoffe](/admin/product/ingredients)**, einen INCI öffnen (z. B. ZinClear XP)
**Neu:**
- **Lieferanten-Zeilen mit „+ weiteren Lieferanten anlegen":** je Zeile Lieferant + **URL**. URL eingetragen ⇒ Bestellung im Online-Shop; URL leer ⇒ Bestellung per Mail.
- Feld **Alternativer Name** (Handelsname, z. B. LECITHIN → *Phospholipon 80 H*).
- Drei Dropdowns **Raum / Regal / Fach** (die Bausteine aus Schritt 1).
- Checkbox **„Kein Rohstoffbestand"** (für Allergene u. Ä. — wirkt in Schritt 3).
**So testen:**
1. Beim INCI zwei Lieferanten anlegen: einen **mit** URL (z. B. Dragonspice-Shoplink), einen **ohne**.
2. Alternativnamen und Lagerort (Raum 1 | Regal 3 | A) setzen, speichern.
3. **Filter „nur aktive"** oben in der INCI-Liste anhaken → es bleiben nur INCI übrig, die in der Herstellerrezeptur mindestens eines aktiven Produkts vorkommen.
**Ergebnis prüfen:** In der Rohstoffbestand-Detailansicht (Schritt 3) erscheint je Lieferant der Button **„Zum Shop"** bzw. **„Per Mail"**; Alternativname und Lagerort werden im Kopf angezeigt.
---
## 3. Rohstoffbestand: Filter & Ausblendungen
**Wo:** Menü **[Rohstoffbestand](/admin/inventory/raw-material-stock)**
**Neu:**
- Umschalter **„Alle" / „Nur aus Herstellerrezepturen"** oben in der Übersicht.
- INCI mit Häkchen **„Kein Rohstoffbestand"** erscheinen gar nicht (auch nicht im roten Kritisch-Zähler).
**So testen:**
1. Auf „Nur aus Herstellerrezepturen" klicken → Rohstoffe, die nur für Neuentwicklungen eingekauft wurden, verschwinden; auf „Alle" sind sie wieder da.
2. Bei einem Test-INCI „Kein Rohstoffbestand" anhaken → er verschwindet in beiden Modi.
---
## 4. Produktebene: Rezeptur-Phasen & Chargen-Präfix
**Wo:** Menü **[Produkte → Übersicht](/admin/product/show)**, ein Produkt bearbeiten (z. B. Tattoocreme)
**Neu:**
- **Hersteller-Rezeptur in Phasen** (Phase A, B, …): je Phase eigene Rohstoffe, ein **Notizfeld** (z. B. „auf 70 °C erhitzen"), Umbenennen möglich; Rohstoffe lassen sich per Drag & Drop **innerhalb und zwischen Phasen** verschieben. Die 100-%-Summe gilt weiterhin **über alle Phasen zusammen**.
- Feld **„Chargen-Nr.-Präfix"** in der Warenwirtschaft-Karte (z. B. `TP1` = Tattoopflege + Produkt-Nr. 1).
- **Lieferbestand** (aus Runde 12.06.): Feld „Wieder lieferbar ab" als **Datum**; das Produkt bleibt kaufbar, im Shop erscheint die tagesaktuell berechnete Anzahl Tage.
**So testen:**
1. In der Hersteller-Rezeptur „+ Neue Phase" klicken, Rohstoffe zuordnen, eine Notiz eintragen, einen Rohstoff in eine andere Phase ziehen → Summe unten muss weiter 100 % ergeben.
2. Präfix `TP1` eintragen und speichern → wirkt in Schritt 7 (Produktion).
3. „Wieder lieferbar ab" auf ein Datum in 12 Tagen setzen → Produkt im Shop ansehen: kaufbar, mit Tage-Hinweis.
4. Produkt **kopieren** → Phasenstruktur wird mitkopiert.
---
## 5. Einkauf & Wareneingang: gleiche Charge zusammenführen
**Wo:** Menü **[Einkauf & Wareneingang](/admin/inventory/stock-entries)**
**Neu:**
- Beim **Buchen des Wareneingangs** (Stufe 2) prüft die Maske beim Eintippen der Chargennummer automatisch, ob diese Charge für den Rohstoff **schon im Haus** ist: Hinweis „Charge bereits im Haus" mit Restbestand, Lagerort und MHD — **MHD und Qualität werden vorbelegt** (bleiben überschreibbar).
- Der Einkaufsvorgang bleibt trotzdem **separat erfasst** (eigener Eintrag mit Preis und Datum).
**So testen:**
1. Sonnenblumenöl bestellen und mit Charge `XY-123` als eingegangen buchen.
2. Sonnenblumenöl **erneut** bestellen und beim Buchen wieder `XY-123` eintippen → der blaue Hinweis erscheint, MHD ist vorbelegt.
3. Danach Schritt 6 ansehen: die Charge erscheint dort **einmal mit summiertem Rest**.
---
## 6. Rohstoffbestand-Detail: Chargen summiert
**Wo:** Menü **[Rohstoffbestand](/admin/inventory/raw-material-stock)**, den Rohstoff aus Schritt 5 anklicken
**Neu:** Tabelle **„Verfügbare Chargen"** zeigt je Chargennummer **eine Zeile mit Summen-Rest** und dem Vermerk „2 Einkäufe"; darunter die einzelnen Einkäufe als eingerückte Unterzeilen („Einkauf vom …"). Außerdem: Spalte **„Letzter Einkauf (Netto/kg)"** je Lieferant und die Bestell-Buttons aus Schritt 2.
**So testen:** Restbestand der Charge = Summe beider Einkäufe; beide Einkaufszeilen mit eigenem Datum sichtbar.
---
## 7. Produktion: neue Maske mit Produktionsergebnis
**Wo:** Menü **Produktion → Produktionen → [Neue Produktion](/admin/inventory/productions/create)**
**Neu (Kernstück der Runde):**
- Oben nur noch **Planung**: „Geplante Stückzahl (Planung)" — **bucht keinen Bestand**.
- **INCI-Liste** der Herstellerrezeptur: Name, **Alternativer Name**, Qualität, Anteil %, Gramm gesamt, **Regal** — mit Summenzeile.
- **Chargen-Zuordnung nach Phasen** gegliedert (inkl. Phasen-Notiz) mit **Status-Ampel** je Rohstoff (grün = eingetragene Menge entspricht dem Soll).
- Das **Chargen-Dropdown** zeigt zusammengeführte Chargen mit Summen-Rest (z. B. „… — Rest 8.000 g (2 Einkäufe)"); der Verbrauch wird automatisch nach frühestem MHD auf die Einkäufe verteilt.
- Ganz unten **„Produktionsergebnis"**: Zeilen mit Produkt + produzierte Stückzahl + **Chargen-Nr.** (vorbelegt aus Präfix + Produktionsdatum, z. B. `TP1150626` — editierbar), „+ weitere Ergebniszeile" für **mehrere Output-Produkte**.
**So testen (Beispiel aus der Anforderung):**
1. 50 × „50 ml Deobalm" **planen**, Chargen zuordnen (Ampeln grün).
2. Im Produktionsergebnis eintragen: **40 × 50 ml** und (zweite Zeile) **50 × 5 ml** — Chargen-Nr. wird je Zeile automatisch vorgeschlagen.
3. Speichern → Detailseite zeigt die Karte „Produktionsergebnis".
4. **Produktbestand prüfen** (Schritt 8): 50-ml-Produkt +40, 5-ml-Produkt +50 — **nicht** +50 aus der Planung.
5. Produktion **bearbeiten**, Ergebnis ändern → der Produktbestand korrigiert sich als Differenz-Gegenbuchung (Historie bleibt vollständig).
6. Rohstoffbestand (Schritt 6) prüfen: abgezogen wurden die **je Charge eingetragenen Gramm** — unabhängig vom Ergebnis.
---
## 8. Produktbestand & Ausschuss
**Wo:** Menü **[Produktbestand → Übersicht](/admin/inventory/product-stock)** und **[Ausgang / Ausschuss](/admin/inventory/stock-disposals)** (Historie: **[Produktbestand → Historie](/admin/inventory/product-stock/history)**)
**Neu:**
- Übersicht **standardmäßig nach Dringlichkeit sortiert**; alle **vier Status-Kacheln** oben sind klickbare Filter.
- Spalte **„Verbrauch pro Monat"** (Durchschnitt der letzten 6 Monate).
- Auf Produktebene Häkchen **„Im Produktbestand anzeigen"** — z. B. Logo-Etiketten-Abrechnungen ausblendbar.
- Ausschuss-Erfassung nutzt die **selbst gepflegten Gründe** aus Schritt 1; Chargen-Auswahl setzt den Lagerort automatisch.
**So testen:** Kacheln durchklicken, ein Produkt per Häkchen ausblenden, einen Ausschuss mit eigenem Grund buchen und in der Historie wiederfinden.
---
## 9. Shop-Bestandsabzug beim Versand & API-Bestellungen (neu 16.07.2026)
**Wo:** Menü **[Verkäufe](/admin/sales)** (Statuswechsel) und **[Bestellungen → API-Bestellungen](/admin/inventory/api-orders)** (Warenwirtschaft)
**Neu:**
- Beim Setzen einer Bestellung auf **„versendet"** oder **„abgeschlossen"** bucht das System je Position automatisch einen **Abgang im Produktbestand** (Grund „Verkauf"). **Sets** werden in Einzelprodukte aufgelöst. Zurücksetzen oder **Storno** bucht automatisch zurück.
- Menüpunkt **API-Bestellungen**: Protokoll aller über die Partnercenter-API übertragenen Bestellungen. Einträge mit **nicht zuordenbaren Positionen** (unbekannte WP-Nummer) sind **rot markiert**; **„Ansehen"** öffnet den Inhalt der Übertragung. Oben warnt die Seite bei **doppelten WP-Nummern** und listet aktive Produkte **ohne WP-Nummer**.
**So testen:** Eine Bestellung mit bekanntem Produkt auf „versendet" setzen → im **[Produktbestand → Historie](/admin/inventory/product-stock/history)** erscheint der Abgang „Verkauf"; Status zurück auf „offen" → Gegenbuchung. Danach unter **API-Bestellungen** eine Übertragung mit unbekannter SKU suchen (rot markiert) und per „Ansehen" die Positionen prüfen.
---
## 10. Bestell-Abwicklung (neu 16.07.2026)
**Wo:** Menü **[Bestellungen → Abwicklung](/admin/inventory/orders)**
**Neu:**
- Kompakte Tagesübersicht mit vier klickbaren Kacheln: **Heute eingegangen / Zu konfektionieren / Versandfertig / Heute versendet** — „versandfertig" heißt bezahlt (Zahlart Rechnung sofort, Vorkasse nach Zahlungseingang, API immer).
- Je Bestellung: aufklappbare **Packliste** (Sets mit Komponenten), Gewicht, Zahlstatus, **Dokumente** (Rechnung/Lieferschein einzeln oder kombiniert; per Klick erstellbar, ohne E-Mail; API-Bestellungen verlinken die externe Rechnung) und die Buttons **„Konfektioniert"** und **„Versendet"** (bucht den Bestandsabzug).
- Wurde ein Status über die Abwicklung gesetzt, **überschreibt das Öffnen der Bestell-Details ihn nicht mehr automatisch**.
- **Sammel-Druck:** mehrere Bestellungen per Checkbox auswählen → **„Lieferscheine drucken"** oder **„+ Rechnungen"** → ein PDF mit allen Dokumenten öffnet sich im neuen Tab; fehlende Dokumente werden automatisch miterstellt.
**So testen:** Eine bezahlte offene Bestellung unter „Zu konfektionieren" finden → Packliste aufklappen → „Konfektioniert" → Bestellung wandert zu „Versandfertig" → Dokumente erstellen und drucken → „Versendet" → Kachel „Heute versendet" zählt hoch, Abgang steht in der **[Produktbestand-Historie](/admin/inventory/product-stock/history)**. Danach zwei Bestellungen anhaken und den Sammel-Druck testen.
---
## 11. DHL-Label aus dem Shop (Brückenlösung, neu 17.07.2026)
**Wo:** Menü **[Bestellungen → Abwicklung](/admin/inventory/orders)** und Bestell-Details unter **Verkäufe**
**Neu:**
- Wird das DHL-Etikett **im WooCommerce-Shop** erstellt und die Bestellung danach übertragen, speichert das System eine **eigene Kopie der Label-PDF** und die **Sendungsnummer** an der Bestellung.
- In der Abwicklung erscheint bei der Bestellung ein **„Label"-Download** (neben dem externen Rechnungslink) samt Sendungsnummer; ebenso in den Bestell-Details.
- Wird das Label im Shop erst **nach** der Übertragung erstellt (oder neu erstellt), reicht der Shop es automatisch nach — es taucht dann ohne weiteres Zutun in der Abwicklung auf.
- Voraussetzung: das Update des Verbindungs-Plugins im WooCommerce-Shop auf **Version 1.5.0** ist eingespielt (überträgt die Label-PDF direkt; mit älterem Connector kommt nur die Sendungsnummer an).
**So testen:** Im Shop eine Testbestellung mit DHL-Label versehen → Bestellung ins Partnercenter übertragen → in der **Abwicklung** bei der Bestellung auf **„Label"** klicken (PDF öffnet sich) und die Sendungsnummer prüfen. Danach einmal andersherum: Bestellung zuerst übertragen, Label im Shop erst danach erstellen → Seite neu laden, der Label-Download muss nachträglich erscheinen.
---
---
# Teil B — Neu in Runde V7.0 (26.–28.08.2026)
> Diese Abschnitte prüfen die Punkte aus der Testphasen-Rückmeldung vom 26.08.2026.
> Reihenfolge wieder entlang des Arbeitsablaufs (Stammdaten → Produkt → Rohstoff →
> Wareneingang → Produktion → Versand).
## 12. Stammdaten: getrennte Buchungsgründe, Lieferanten-Filter, Lagerorte
**Wo:** **[Einstellungen → Allgemein](/admin/inventory/general)**, **[Produkte → Inhaltsstoffe](/admin/product/ingredients)**, **[Stammdaten → Lagerorte](/admin/inventory/locations)**
**Neu:**
- **Buchungsgründe getrennt Ein-/Ausgang (AP-48):** Zwei getrennte, selbst pflegbare Listen für **Eingangs-** und **Ausgangs-Gründe** des Produktbestands.
- **Lieferanten-Dropdown gefiltert (AP-49):** Am Inhaltsstoff werden nur noch **Rohstoff-Lieferanten** (Kategorie „Kosmetikrohstoffe") angeboten.
- **Lagerort löschbar + Köln-Default (AP-50):** Ein belegter Lagerort (z. B. „Waldbröl") lässt sich löschen, indem seine Buchungen auf einen **Ziel-Lagerort** übernommen werden.
**So testen:**
1. Unter *Allgemein* je einen neuen **Eingangs-** und **Ausgangs-Grund** anlegen → sie erscheinen später (Schritt 16) je nach Buchungsrichtung getrennt.
2. Einen INCI öffnen → das Lieferanten-Dropdown zeigt nur Rohstoff-Lieferanten.
3. Unter *Lagerorte* bei „Waldbröl" als Ziel **„Köln"** wählen und übernehmen → Waldbröl ist weg, seine Buchungen hängen an Köln.
---
## 13. Produkt: Füllgewicht, „produktionsrelevant", Lagerplatz
**Wo:** **[Produkte → Übersicht](/admin/product/show)**, ein Produkt bearbeiten → Karte **Warenwirtschaft**
**Neu:**
- **Füllgewicht (g) (AP-35):** Grundlage für die Produktions-Soll-Mengen (Anteil % × Füllgewicht). Leer = „Menge = Gramm".
- **„Produktionsrelevant" (AP-47):** Schalter; nur produktionsrelevante Produkte erscheinen im Produktions-Dropdown und in der Rohstoffbestand-Box „Enthalten in".
- **Lagerplatz Raum/Regal/Fach (AP-51):** Dieselbe Zuordnung wie beim Rohstoff, jetzt auch am Produkt.
**So testen:**
1. Bei einem Rezeptur-Produkt (z. B. Deocreme 50 ml) **Füllgewicht = 50** eintragen, Lagerplatz setzen, speichern.
2. Bei einem Handels-/Nebenprodukt **„produktionsrelevant" abwählen** → es verschwindet aus dem Produktions-Dropdown (Schritt 15).
3. Produktbestand (Schritt 8) öffnen → der Lagerplatz erscheint als Zeile unter dem Produktnamen.
---
## 14. Rohstoff & Wareneingang: Dichte und ml-Erfassung
**Wo:** **[Produkte → Inhaltsstoffe](/admin/product/ingredients)** und **[Einkauf & Wareneingang](/admin/inventory/stock-entries)**
**Neu (AP-42):**
- Am Rohstoff optionales Feld **Dichte (g/ml)**.
- Im Einkauf/Wareneingang lässt sich die Einheit **g oder ml** wählen; bei **ml** wird über die Dichte in Gramm umgerechnet und **als Gramm gespeichert**.
**So testen:**
1. Bei einer in ml gekauften Tinktur die **Dichte** hinterlegen (z. B. 0,79).
2. Einen Wareneingang mit Einheit **ml** erfassen (z. B. 100 ml) → gespeichert/gebucht werden 79 g.
3. Ohne hinterlegte Dichte ist die ml-Auswahl gesperrt (Prüfung).
---
## 15. Produktion: Soll auf Füllgewicht, Abwiege-Ampel, Bestand/Differenz
**Wo:** **Produktion → [Neue Produktion](/admin/inventory/productions/create)**
**Neu:**
- **Soll = Anteil % × Füllgewicht × Stückzahl (AP-35)** statt fix 100 g.
- **Abwiege-Ist-Wert + Ampel (AP-39):** orange = nichts eingetragen, grün = ±5 % vom Soll, rot = >5 % Abweichung.
- **INCI-Tabelle: Spalten „Bestand" und „Differenz" (AP-40); Lagerplatz-Spalte heißt „Lagerort" (seit 09.09.).**
- **Verpackungs-Vorschau direkt unter der INCI-Tabelle + Phasen-Gramm hinter dem Namen (AP-41).**
- **INCI-Liste nach Konzentration absteigend sortiert (AP-46).**
- **Verpackung wird aus dem Produktionsergebnis gebucht (AP-45).**
**So testen:**
1. Produkt mit Füllgewicht (Schritt 13) wählen, Stückzahl planen → die Soll-Gramm je Rohstoff entsprechen **Anteil % × Füllgewicht × Stück** (nicht mehr 100 g).
2. Je Charge eine Ist-Menge eintragen: exakt aufs Soll → **grün**; ~10 % daneben → **rot**; leer → **orange**.
3. Spalten **Bestand/Differenz** prüfen (Differenz negativ = rot). Lagerplatz-Kopf heißt **„Lagerort"**.
4. Phasen-Kopf zeigt die **Gesamt-Gramm** in Klammern; die Verpackungs-Vorschau steht direkt unter der INCI-Tabelle.
5. Ergebnis mit zwei Output-Produkten buchen → die **Verpackung** wird je Ergebnisprodukt × Menge gebucht (Detailseite prüfen).
---
## 16. Produktion zwischenspeichern (Entwurf)
**Wo:** **Produktion → Neue Produktion** / eine Produktion **bearbeiten**
**Neu (AP-43):** Neben **„Produktion abschließen"** gibt es **„Zwischenspeichern (Entwurf)"** (seit 09.09. an drei Stellen: oben, vor dem Ergebnis, unten). Die erweiterten Entwurfs-Szenarien stehen in **Teil C, Abschnitt 19**.
**So testen:**
1. Eine neue Produktion nur teilweise ausfüllen (Produkt + Standort + Datum + Menge), **„Zwischenspeichern"** → wird ohne Fehlermeldung gespeichert und in der Liste mit **Badge „Entwurf"** angezeigt.
2. **Produktbestand & Rohstoffbestand prüfen:** der Entwurf hat **nichts gebucht**.
3. Den Entwurf öffnen, vervollständigen, **„Produktion abschließen"** → jetzt wird gebucht, das Badge verschwindet.
4. Optik/iPad (AP-44): Phasenkästen leicht hinterlegt, kein innerer Kasten um die Chargen, auf dem iPad sind die Felder gut mit dem Finger bedienbar.
---
## 17. Verpackung: Lagerplatz
**Wo:** **[Produkte → Verpackung](/admin/inventory/packaging-items?category=packaging)**
**Neu (AP-51):** Verpackungsartikel haben jetzt ebenfalls **Raum / Regal / Fach**; in der Übersicht gibt es die Spalte **„Lagerplatz"**.
**So testen:** Einen Verpackungsartikel öffnen, Lagerplatz setzen, speichern → er erscheint in der Übersicht in der neuen Spalte.
---
## 18. Versand & Shop: Varianten-Zuordnung und Ampel
**Wo:** **[Versand → API-Bestellungen](/admin/inventory/api-orders)** und der WooCommerce-Shop
**Neu:**
- **Varianten-/Duplikat-Zuordnung (AP-34):** Jede verkaufbare Variante bucht ihr eigenes Warenwirtschafts-Produkt über die **eigene Artikelnummer**; **Aktions-Kopien** desselben Produkts (SKU `100500-a`) buchen auf die **Kernnummer** (`100500`).
- **WooCommerce-Ampel (AP-38):** Der Status-Abgleich im Shop läuft wieder (Cron), das Mapping ist vollständig (Wartestellung/Abholung/Storno).
**Voraussetzung:** Das aktualisierte **Connector-Plugin v1.6.0** muss im Shop installiert sein (Rollout-Anleitung: `dev/partnercenter-api/README.md`). Ohne dieses Update greifen AP-34/AP-38 shopseitig noch nicht.
**So testen (nach Connector-Rollout):**
1. Im Shop eine Bestellung mit einer Variante **und** einer Aktions-Kopie auslösen und ins Partnercenter übertragen.
2. Unter **API-Bestellungen** die Übertragung öffnen → jede Position ist dem richtigen Produkt zugeordnet (Variante = eigenes Produkt, Aktions-Kopie = Kernnummer). Nicht zugeordnete Positionen wären hier rot markiert (dann fehlt der Variante die eigene Artikelnummer im Shop).
3. Eine versendete Bestellung im Shop prüfen → die Status-Ampel steht auf **grün**.
---
---
# Teil C — Nachbesserungen & Nachtrag (08./09.09.2026)
> Eine unabhängige Prüfung der V7-Umsetzung hat 18 Befunde ergeben; alle sind behoben,
> dazu der Kundennachtrag **AP-52**. Diese Abschnitte prüfen die spürbaren Änderungen.
## 19. Produktion: Entwurf sichert alles, blockiert nichts
**Wo:** **Produktion → [Neue Produktion](/admin/inventory/productions/create)**
**Geändert:**
- Der Entwurf speichert **jede** Chargenzeile — auch „Menge ohne Charge" und „Charge ohne Menge" — und Ergebniszeilen ohne Stückzahl.
- Eine im Entwurf gewählte, inzwischen nicht mehr verfügbare Charge wird beim Öffnen **rot markiert**.
- Entwürfe **reduzieren keine Chargenverfügbarkeit** (weder für andere Produktionen noch für den Ausschuss).
- **„Zwischenspeichern (Entwurf)"** gibt es dreimal auf der Seite; das **Notizfeld** wächst beim Tippen mit (iPad).
- Nach einer Ablehnung durch „Produktion abschließen" bleiben **alle Chargen und Ist-Mengen** im Formular.
**So testen:**
1. Rezeptur-Produkt wählen, bei einem Rohstoff nur **9,8 g** eintragen, **keine** Charge wählen → Zwischenspeichern → Entwurf öffnen: die 9,8 g stehen noch da, Charge ist leer.
2. Charge ergänzen, bei einem Ergebnisprodukt die Stückzahl leer lassen → Zwischenspeichern → Ergebniszeile bleibt erhalten.
3. Parallel eine **zweite Produktion** anlegen: die im Entwurf gewählte Charge ist dort in **voller** Menge wählbar.
4. Beim Abschließen absichtlich **20 g statt 10 g** eintragen → Fehlermeldung; alle Chargen/Mengen stehen unverändert im Formular.
---
## 20. Produktion: Rohstoff in mehreren Phasen, Ergebnisprodukte
**Wo:** Produkt bearbeiten (Hersteller-Rezeptur) und **Produktion → Neue Produktion**
**Geändert:**
- Ein Rohstoff in **zwei Phasen** (z. B. 6 % in A, 4 % in B) behält beim Wiederöffnen je Phase seine Ist-Menge. Auch Speichern des Artikels (Phase umbenennen, neue Phase voranstellen, umsortieren) ändert das nicht.
- Im **Produktionsergebnis** sind alle aktiven Einzelprodukte wählbar, auch nicht produktionsrelevante (5-ml-Variante).
**So testen:**
1. Rezeptur mit demselben Rohstoff in Phase A (6 %) und Phase B (4 %) anlegen → Produktion mit 6 g / 4 g als Entwurf speichern → öffnen: **6 g in A, 4 g in B** (nicht 10/10).
2. Artikel öffnen, Phase „Vorbereitung" (nur Text) **vor** Phase A einfügen, Phase B umbenennen, speichern → Entwurf erneut öffnen: weiterhin 6 g / 4 g in den richtigen Phasen.
3. 5-ml-Variante auf „nicht produktionsrelevant" stellen → in der Planung oben nicht mehr wählbar, im Ergebnis unten weiterhin.
---
## 21. Verpackungs-Vorschau: Bestand, Differenz, Lagerort (AP-52) + historischer Verbrauch
**Wo:** **Produktion → Neue Produktion** / Produktion bearbeiten
**Neu/geändert:**
- Vorschau-Spalten: **Artikel · Stück gesamt · Lagerort · Bestand · Differenz** (rot/grün wie bei den Rohstoffen). Rechnet aus dem **Produktionsergebnis** und reagiert live auf Produkt-/Mengenänderungen und zusätzliche Ergebniszeilen.
- Bei einer **bereits gebuchten** Produktion zeigt die Vorschau den **gespeicherten** Verbrauch, solange Ergebnisprodukte und Stückzahlen unverändert sind — auch wenn die Stückliste am Produkt inzwischen anders ist (Differenz dann „—"). Ändert man die Stückzahl, wird mit der aktuellen Stückliste neu gerechnet (Hinweis unter der Tabelle).
- **Füllgewicht** akzeptiert Nachkommastellen (39,5).
**So testen:**
1. Verpackungsartikel mit Lagerplatz und Wareneingang anlegen → Neue Produktion: Vorschau zeigt Lagerort, Bestand und Differenz; Stückzahl über den Bestand erhöhen → Differenz wird **rot**.
2. Produktion mit 1 Tiegel je Stück buchen → am Produkt Stückliste auf 2 Tiegel ändern → Produktion bearbeiten: Vorschau zeigt weiter den gespeicherten Verbrauch; nur die Notiz ändern und speichern → Detailseite: Verpackungsverbrauch unverändert. Danach Stückzahl ändern → Neuberechnung.
3. Am Produkt Füllgewicht **39,5** eintragen → Soll-Gramm in der Produktion skalieren mit 39,5 (nicht 39).
---
## 22. Ausschuss ohne Charge & Köln-Default
**Wo:** **[Ausgang / Ausschuss](/admin/inventory/stock-disposals)**
**Geändert:** Ohne gewählte Charge prüft das System gegen den Bestand des **gewählten Lagerorts** und verteilt die Menge nach frühestem MHD auf die Chargen dieses Lagerorts (je Charge eine Buchung). **Köln** ist vorbelegt.
**So testen:**
1. Rohstoff mit zwei Chargen (älteres und jüngeres MHD) am Lagerort Köln; 400 g ohne Charge buchen → in der Ausgangsliste zwei Buchungen (ältere Charge zuerst); Rohstoff-Detail: Chargenrest entsprechend kleiner.
2. Denselben Rohstoff an einem **leeren** zweiten Lagerort ohne Charge buchen → wird abgelehnt („übersteigt den Restbestand am gewählten Lagerort").
---
## 23. Bestell-Abwicklung: Versand nur mit Zahlungsfreigabe
**Wo:** **[Bestellungen → Abwicklung](/admin/inventory/orders)**
**Geändert:** „Versendet" ist nur für **versandfertige** Bestellungen möglich (bezahlt; Rechnung/API sofort). Der Button ist sonst ausgegraut. „Konfektioniert" bleibt vorher möglich.
**So testen:** Eine Vorkasse-Bestellung ohne Zahlungseingang → „Versendet" ist deaktiviert, „Konfektioniert" funktioniert. Zahlung eingegangen → „Versendet" buchbar, Abgang in der Produktbestand-Historie.
---
## 24. Rohstoff-Detail: Preise nur für Admins, „Enthalten in"
**Wo:** **[Rohstoffbestand](/admin/inventory/raw-material-stock)**, Rohstoff öffnen
**Geändert:**
- Spalte **„Letzter Einkauf (Netto/kg)"** nur für Admins (Versand-/Produktionsmitarbeiter sehen keine Preise).
- **„Enthalten in"** zeigt **Anteil (%)** und **Verbrauch (g/Stück)** inkl. Faktor, Phasen summiert.
**So testen:** Als Mitarbeiter (Copyreader) anmelden → keine Preisspalte; als Admin → Preis sichtbar. Produkt mit 50 g Füllgewicht und 20 % Anteil (Faktor 1,1) → „20,00 %" und „11,00 g (netto 10,00 g)".
---
## 25. Einkauf: ml-Kopie, Historie, Verbrauch/Monat
**Wo:** **[Einkauf & Wareneingang](/admin/inventory/stock-entries)**, **[Produktbestand → Historie](/admin/inventory/product-stock/history)**, **[Produktbestand](/admin/inventory/product-stock)**
**Geändert:**
- **Kopieren** einer ml-Bestellung erhält Einheit und Dichte — auch nach Bearbeiten und Wareneingang.
- **Historie** zeigt bei mehr als 500 Treffern die Gesamtzahl und **„Alle anzeigen"**.
- **Verbrauch/Monat** zählt Versand → Storno → Wiederversand nur einmal.
**So testen:**
1. 100-ml-Bestellung (Dichte 0,79) kopieren → Kopie öffnen: 100,00 **ml** → speichern → Wareneingang „100" → gebucht **79 g**.
2. Historie eines Produkts mit vielen Buchungen filtern → Hinweis „… von … Buchungen" und „Alle anzeigen".
3. Bestellung versenden, zurücksetzen, erneut versenden → Verbrauch/Monat steigt nur um die einfache Menge.
---
## Hinweis am Rande
Die Listen **Einkauf & Wareneingang**, **Produktionen** und die **Produktbestand-Historie** zeigen aus Performance-Gründen die neuesten 500 Einträge; darüber erscheint ein Link **„Alle anzeigen"**. Offene Bestellungen sind immer vollständig gelistet.
## Was bewusst noch nicht dabei ist (nachgelagert)
Versand im System (DHL-Etiketten per API), Audit-Trail, 2FA, blockbasierte Rechte und die WaWi-Einstellungsseite folgen in der nächsten Runde.