gruene-seele/resources/docs/hinweise.md
Kevin Adametz 0eed974576 Warenwirtschaft: AP-32-Brückenlösung — DHL-Label aus WooCommerce übernehmen
Bestell-Übertragung (wp/order) akzeptiert wp_label_url + wp_tracking_number:
Label-PDF wird als lokale Kopie im privaten Storage gespeichert (Shop-URL ist
öffentlich erratbar; Kopie überlebt Löschung im Shop), Sendungsnummer landet
in shopping_orders.tracking. Neuer Endpoint wp/label zum Nachreichen
(Connector-Hook pr_save_dhl_label_tracking), wp/status liefert die
Sendungsnummer an den Shop zurück. Abwicklungs-Board + Bestell-Details zeigen
Label-Download (copyreader-Dokumentroute type=label, Fallback Shop-Link) und
Sendungsnummer. Download-Fehler blockieren die Übertragung nie.

Doku: Connector-Update-Anleitung (dev/product management), Hinweise,
Testleitfaden §11, Plan-Protokoll. pint.json schließt dev/ (Fremdcode) aus.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 11:35:40 +00:00

276 lines
18 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.

# Hinweise zur Warenwirtschaft & Produktion
> Diese Seite wird laufend gepflegt und zeigt den aktuellen Entwicklungsstand,
> wichtige Hinweise für die Nutzung sowie festgehaltene Entscheidungen, die
> später noch ausgebaut werden können.
>
> **Stand:** 16.07.2026 — ein geführter Rundgang durch die neuen Funktionen
> steht unter **Einstellungen → Leitfaden**.
---
## 1. Überblick / Entwicklungsstand
### Bereits nutzbar
- **Einstellungen → Allgemein:** Umsatzsteuersätze, Lieferzeit-Vorlagen
(inkl. Tageswert), **Ausschuss-Gründe** sowie die Lagerort-Bausteine
**Räume, Regale und Fächer** pflegbar. Die Ausschuss-Gründe
erscheinen im Ausschuss-Formular (nur aktive, in gepflegter Reihenfolge).
- **Stammdaten:** Lagerorte (Standorte), Rohstoffqualität, Verpackungsmaterial,
Lieferanten-Kategorien.
- **Lieferanten:** Bestellweg (E-Mail / Online-Shop), Bestell-Adresse,
Lieferzeit (Freitext + Tage).
- **INCI / Rohstoffe:** mehrere Lieferanten **je mit eigener Bestell-URL**
(leer = per Mail), **Alternativer Name** (Handelsname), **Lagerort
Raum | Regal | Fach**, Umsatzsteuersatz, eigene Lieferzeit, Häkchen
**„Kein Rohstoffbestand"** und Listen-Filter **„nur aktive"**.
- **Einkauf & Wareneingang:** zweistufig (bestellt → eingegangen), Charge & MHD,
Netto-/Brutto-Automatik mit USt-Snapshot, Einkauf duplizierbar. Beim Buchen
erkennt die Maske **bereits vorhandene Chargen** und belegt MHD/Qualität vor.
- **Produktion:** rechnet ausschließlich auf Basis der **Hersteller-Rezeptur**
(inkl. **Rezeptur-Phasen** mit Notizen). Die Maske zeigt die INCI-Liste mit
Alternativname und Regal; gebucht wird der Produktbestand aus dem
**Produktionsergebnis** (auch mehrere Produkte je Produktion), die geplante
Stückzahl ist nur Planung. Chargen-Nrn. werden aus dem **Produkt-Präfix +
Produktionsdatum** vorbelegt. Fehlt die Hersteller-Rezeptur, erscheint eine
Warnung (kein Rückgriff auf die Produkt-Rezeptur). Eigenprodukte ohne
Rezeptur (z. B. Broschüren, Etiketten) lassen sich über die
Produkt-Option „benötigt keine Rezeptur" ohne Chargen produzieren.
- **Produkt-Klassen:** Einzelprodukt vs. **Set** (Bündel mehrerer Einzelprodukte
mit Menge). Sets werden nicht produziert; optional kann ein Einzelprodukt einem
Hauptprodukt zugeordnet werden.
- **„Nicht vorrätig":** Produkt zeitlich begrenzt (mit **Datum** „Wieder
lieferbar ab" → der Hinweis „In ca. X Tagen wieder da!" zählt täglich
automatisch herunter) oder auf unbestimmte Zeit als nicht vorrätig
markierbar. Es erscheint **überall nur ein Hinweis** – im öffentlichen Shop
**und** in der internen Bestellliste bleibt der Kauf möglich; der
Vertriebspartner entscheidet selbst, ob er die Ware später bekommt.
- **Rohstoffbestand:** Übersicht aller aktiven Rohstoffe mit echtem Restbestand
(Wareneingang abzüglich Produktionsverbrauch), durchschnittlichem Verbrauch
pro Tag, voraussichtlichem „auf Null"-Datum und Hochrechnung für 1/3/6/12
Monate. Umschalter **„Alle" / „Nur aus Herstellerrezepturen"**, Suche und
Filter „nur kritische anzeigen". Kritische Rohstoffe
(Meldebestand unterschritten) sind rot hervorgehoben; ein Badge in der
Navigation zeigt die Anzahl. Die Detailseite zeigt Bestand je Lagerort und
Charge (**je Chargennummer summiert**, Einzel-Einkäufe als Unterzeilen)
sowie die zugeordneten Lieferanten mit Bestell-Link (Shop / Per Mail) und
dem **letzten Einkaufspreis (Netto/kg)** je Lieferant.
**Offene Bestellungen** (bestellt, aber noch nicht eingegangen) werden separat
ausgewiesen (Spalte „Offen bestellt" in der Übersicht, eigener Block in der
Detailansicht). Sie zählen **nicht** zum Bestand; ein kritischer Rohstoff mit
bereits offener Bestellung wird jedoch entschärft („Kritisch · bereits
bestellt") und nicht im Navigations-Badge mitgezählt.
- **Produktbestand:** Übersicht aller Haupt-/Einzelprodukte mit aktuellem
Bestand (Stück). Bestand = Summe aller Eingänge minus aller Ausgänge. Über die
Buttons **`+`/`−`** lassen sich Bewegungen mit Stückzahl, Grund (z. B.
Initialbestand, Korrektur, Inventur, Retoure, Testervergabe) und Hinweis
buchen; der Button **„Produzieren"** öffnet die Produktion mit bereits
ausgewähltem Produkt. Suche und Filter „nur kritische anzeigen"; bei
unterschrittenem kritischem Bestand ist die Zeile rot, beim Meldebestand gelb –
ein Badge in der Navigation zeigt die Anzahl. Schwellwerte werden je Produkt im
Produktformular (Warenwirtschaft) gepflegt. Die Übersicht ist standardmäßig
nach **Dringlichkeit** sortiert (kritische Produkte oben, Klick auf „Status"
dreht die Reihenfolge), alle vier Status-Kacheln oben sind als Filter
anklickbar, und die Spalte **„Verbrauch/Monat"** zeigt den Durchschnitt der
Abgänge der letzten 6 Monate. Produkte ohne Lagerführung (z. B. Abrechnung
Druckkosten, Logo-Etiketten) lassen sich über die Produkt-Option
**„Im Produktbestand anzeigen"** aus der Übersicht ausblenden.
- **Produktbestand-Historie:** Revisionssichere Liste aller Bewegungen
(Eingang/Ausgang, Stückzahl, Datum, Grund, Hinweis, Mitarbeiter), filterbar
nach Produkt, Richtung, Grund und Zeitraum (Monat/Jahr).
- **Ausgang / Ausschuss:** Erfassung von Rohstoff- und Verpackungs-Abgängen
(z. B. Bruch, Verfall/MHD, Qualitätsmangel, Schwund, Testverbrauch). Die
Gründe sind selbst pflegbar unter **Einstellungen → Allgemein →
Ausschuss-Gründe**. Pflichtfeld **Grund**, optionale **Charge** (setzt den Lagerort automatisch), Menge in
Gramm (Rohstoff) bzw. Stück (Verpackung) und Datum. Jeder Ausgang reduziert
sofort den Bestand – beim Rohstoffbestand also auch die „auf Null"-Prognose und
den Kritisch-Status.
- **Shop-Bestandsabzug beim Versand (neu 16.07.2026):** Wird eine Bestellung
auf **„versendet"** oder **„abgeschlossen"** gesetzt, bucht das System je
Bestellposition automatisch einen Abgang im **Produktbestand** (Grund
„Verkauf", mit Verweis auf die Bestellung). **Sets** werden dabei in ihre
Einzelprodukte aufgelöst (auch verschachtelt). Wird der Versandstatus
zurückgesetzt oder die Bestellung **storniert**, führt eine automatische
**Gegenbuchung** den Bestand zurück – auch beim automatischen Storno durch
die Zahlungserinnerung. Doppelte Statuswechsel buchen nie doppelt.
Gilt für **alle Bestellquellen** (WooCommerce-Fulfillment, Whitelabel-Shop,
direkt im Partnercenter angelegte Bestellungen). **Alt-Bestellungen**, die
vor dem 16.07.2026 versendet wurden, sind geschützt: erneutes Speichern
ihres Status zieht nicht rückwirkend vom heutigen Bestand ab.
- **API-Bestellungen (neu 16.07.2026):** Unterpunkt von **Bestellungen** in der
Warenwirtschaft. Jede über die Partnercenter-API eingehende
Bestell-Übertragung (WooCommerce-Fulfillment) wird protokolliert – auch
abgelehnte. Kann eine Position **keinem Produkt zugeordnet** werden
(WP-Nummer/SKU unbekannt), ist der Eintrag **rot markiert**; ein Klick auf
**„Ansehen"** öffnet den Inhalt der Übertragung (SKU, Produkt, Menge, Preis,
Meldung je Position). Zusätzlich warnt die Seite bei **doppelten WP-Nummern**
aktiver Produkte und listet aktive Produkte **ohne WP-Nummer** auf.
- **Bestell-Abwicklung (neu 16.07.2026):** Menü **Bestellungen → Abwicklung** —
kompakte Tagesübersicht für Versand-Mitarbeiter. Vier Kacheln als Filter
(**Heute eingegangen / Zu konfektionieren / Versandfertig / Heute
versendet**), je Bestellung eine Zeile mit aufklappbarer **Packliste** (Sets
mit Einzelkomponenten), Gewicht, Zahlstatus, **Dokumenten** und den Aktionen
**„Konfektioniert"** (→ in Bearbeitung) und **„Versendet"** (→ bucht den
Bestandsabzug). **Versandfertig = bezahlt:** Zahlart Rechnung gilt sofort,
Vorkasse erst nach Zahlungseingang, API-Bestellungen immer.
**Dokumente:** Rechnung + Lieferschein werden per Klick erstellt (ohne
E-Mail-Versand) und als PDF geöffnet — einzeln oder kombiniert zum Druck.
**API-Bestellungen bekommen keine Rechnung im System** – der Link zur
externen Shop-Rechnung wird angezeigt. Das Board erlaubt nur
Vorwärts-Schritte; Storno/Zurücksetzen läuft weiter über **Verkäufe**.
**Sammel-Druck:** Über die Checkboxen mehrere Bestellungen auswählen (Haken
im Tabellenkopf = alle sichtbaren) und mit **„Lieferscheine drucken"** bzw.
**„+ Rechnungen"** ein einziges PDF für den Stapeldruck erzeugen — fehlende
Dokumente werden dabei automatisch miterstellt (ohne E-Mail).
- **DHL-Label aus dem Shop (Brückenlösung, neu 17.07.2026):** Wird das
Versandetikett im WooCommerce-Shop erstellt (Plugin „DHL for WooCommerce")
und die Bestellung danach übertragen, kommen **Label und Sendungsnummer
mit**: Das System lädt eine **eigene Kopie der Label-PDF** herunter (bleibt
verfügbar, auch wenn das Label im Shop gelöscht wird) und zeigt in der
Abwicklung und den Bestell-Details einen **„Label"-Download** plus die
Sendungsnummer. Wird das Label im Shop erst später (neu) erstellt, reicht
der Shop es automatisch nach. Die Sendungsnummer wird über die
Status-Abfrage auch an den Shop zurückgemeldet (Tracking-Link für den
Endkunden). Die vollständige DHL-Anbindung im Partnercenter (Labels direkt
hier erzeugen, AP-32) bleibt geplant.
### In Vorbereitung / geplant
- **Versand im System** (DHL-Etiketten per API, AP-32 — bis dahin gilt die
Brückenlösung „DHL-Label aus dem Shop", s. o.), **Audit-Trail**,
**blockbasierte Rechte**, **2FA für Admins**,
**WaWi-Einstellungsseite** (Schwellwerte/Defaults zentral).
- **Produktentwicklung:** Menüpunkt ist als Platzhalter angelegt – das genaue
Briefing steht noch aus.
---
## 2. Wichtige Hinweise für die Nutzung
- **Produktion benötigt eine Hersteller-Rezeptur.** Ist für ein Produkt keine
gepflegt, lässt es sich nicht produzieren – außer es ist ausdrücklich als
Eigenprodukt ohne Rezeptur markiert.
- **Chargen-Auswahl in der Produktion** zeigt nur Chargen mit Restbestand,
in der Reihenfolge des frühesten Mindesthaltbarkeitsdatums (FEFO).
- **Gleiche Charge wird zusammengeführt (Wareneingang):** Kommt eine bereits
vorhandene Charge (gleiche Chargennummer, gleicher Rohstoff) erneut, weist
die Buchungsmaske darauf hin („Charge bereits im Haus") und belegt MHD und
Qualität aus dem letzten Eingang vor (überschreibbar). Der **Einkaufsvorgang
bleibt trotzdem separat erfasst** (eigener Eintrag mit Preis/Datum) –
zusammengeführt werden nur Anzeige und Restbestand: Rohstoffbestand-Detail
und Chargen-Auswahl der Produktion zeigen die Charge **einmal mit
Summen-Rest** (Einzel-Einkäufe als Unterzeilen bzw. Vermerk „x Einkäufe").
Der Verbrauch einer Produktion wird automatisch **FEFO auf die einzelnen
Einkäufe der Charge verteilt**.
- **Umsatzsteuersätze** werden beim Einkauf als Snapshot gespeichert. Spätere
Änderungen am Steuersatz verändern bereits erfasste Einkäufe nicht.
- **Rohstoffbestand – Verbrauch/Tag** wird aus der Produktionshistorie der
letzten 90 Tage gemittelt. Ein Rohstoff gilt als **kritisch** (rot), wenn der
Restbestand den am Rohstoff gepflegten **Meldebestand** unterschreitet, und als
**„bald nachbestellen"** (gelb), wenn der Bestand voraussichtlich vor Ablauf der
Lieferzeit aufgebraucht ist.
- **Bestand = nur eingegangene Ware.** Ein neuer Einkauf ist zunächst „offen"
(bestellt) und erhöht den Bestand erst, wenn beim Einkauf der **Wareneingang
gebucht** wird (Stufe 2: eingegangen, mit Menge/Charge/MHD). Bis dahin erscheint
die Menge nur unter „Offen bestellt".
- **Produktbestand wächst automatisch durch Produktion — aus dem
Produktionsergebnis.** Die Stückzahl oben in der Produktions-Maske ist **nur
Planung** und bucht nichts. Ganz unten unter **„Produktionsergebnis"** wird
erfasst, was real entstanden ist — auch **mehrere Produkte** je Produktion
(z. B. Plan 50×50 ml → Ergebnis 40×50 ml + 50×5 ml). Jede Ergebniszeile hat
eine **Chargen-Nr.**, die aus Produkt-Präfix + Produktionsdatum (`ttmmjj`)
vorbelegt wird und editierbar bleibt. Eine spätere Korrektur des Ergebnisses
wird je Produkt als Differenz nachgebucht. Manuelle Korrekturen erfolgen
ausschließlich über Gegenbuchungen (`+`/`−`) – Einträge der Historie werden
nicht gelöscht. **Verkaufsabgänge buchen automatisch beim Versand** (siehe
Shop-Bestandsabzug) und zählen in „Verbrauch/Monat" mit.
- **Positionen ohne Produktzuordnung fehlen in Bestellung und Bestandsabzug:**
Überträgt WooCommerce eine SKU, die im Partnercenter keinem Produkt
zugeordnet ist, wird die Position **nicht** übernommen – die Bestellung
entsteht ohne sie. Solche Fälle sind unter **API-Bestellungen** rot markiert
und sollten zeitnah geprüft werden (WP-Nummer am Produkt ergänzen, Position
ggf. manuell nachpflegen).
- **Partner-Eigenversand berührt das Lager nicht:** Bestellungen, die Partner
selbst versenden, übertragen keinen Warenkorb ins Partnercenter und erzeugen
bewusst keinen Bestandsabzug – der Partner versendet aus eigenem Bestand
(Kundenentscheid 16.07.2026: bestätigt).
- **Versand-Mail enthält immer den Lieferschein (Fix 16.07.2026):** Die
Logistik-Mail („Rechnung/Lieferschein an den Versand") hängt jetzt **immer**
Rechnung **und** Lieferschein an — unabhängig davon, ob die Bestellung
White-Label-/Logo-Produkte enthält. Vorher fehlte der Lieferschein bei
Bestellungen ohne eigenes Etikett, was zu Fehlversänden an die
Rechnungsadresse führen konnte. Fehlt eine der beiden PDF-Dateien auf dem
Server (Altdaten), wird sie beim Mailversand automatisch mit der
bestehenden Rechnungsnummer neu erzeugt.
- **Status-Vorrang der Warenwirtschaft (Kundenentscheid 16.07.2026 — wichtig):**
Das Öffnen einer Bestell-Detailseite setzt eine offene Bestellung bislang
automatisch auf „in Bearbeitung". **Sobald der Status einmal über die
Bestell-Abwicklung (Warenwirtschaft) gesetzt wurde, greift dieser
Automatismus für diese Bestellung nicht mehr** – der WaWi-Status hat Vorrang
und wird von den Detailseiten nicht überschrieben. Bewusste manuelle
Statuswechsel über das Verkäufe-Modal (z. B. Storno) bleiben möglich.
- **Produktions-Maske:** zeigt die Hersteller-Rezeptur als **INCI-Liste** mit
Alternativname, Qualität, Anteil %, Gesamt-Gramm und **Regal** (Lagerort);
die Chargen-Zuordnung ist nach **Rezeptur-Phasen** gegliedert (inkl.
Phasen-Notiz), mit Status-Ampel je Rohstoff (grün = Soll erfüllt). Der
**Rohstoffbestand** berechnet sich unverändert aus den je Charge
eingetragenen Ist-Mengen — unabhängig vom Produktionsergebnis.
- **Bestellweg je INCI-Lieferant:** Am Inhaltsstoff wird pro Lieferant eine
Shop-URL gepflegt („+ weiteren Lieferanten anlegen"). Ist die URL **leer**,
gilt für diesen Lieferanten **Bestellung per Mail** – der Rohstoffbestand
zeigt entsprechend „Zum Shop" (mit der hinterlegten URL) oder „Per Mail".
- **Alternativer Name am INCI:** Handelsname der Packung (z. B. LECITHIN →
Phospholipon 80 H), sichtbar in der INCI-Liste und im Rohstoffbestand-Detail,
damit Mitarbeiter den Rohstoff finden.
- **Lagerorte** folgen dem Schema **Raum | Regal | Fach/Buchstabe**. Die
Bausteine werden zentral unter **Einstellungen → Allgemein** gepflegt und am
INCI ausgewählt; Änderungen an einem Baustein wirken übergreifend.
- **INCI-Liste „nur aktive":** Der Filter zeigt nur Inhaltsstoffe, die in der
**Hersteller-Rezeptur mindestens eines aktiven Produkts** vorkommen – nicht zu
verwechseln mit dem Aktiv-Häkchen am INCI selbst.
- **Rohstoffbestand-Filter:** Die Übersicht kennt zwei Modi – **„Alle"** (auch
Rohstoffe ohne Rezeptur-Bezug, z. B. für Neuentwicklungen eingekauft) und
**„Nur aus Herstellerrezepturen"** (aktiver Produkte). INCI mit dem Häkchen
**„Kein Rohstoffbestand"** (z. B. Allergen-Angaben) erscheinen nie im
Rohstoffbestand und zählen nicht im Kritisch-Badge.
- **Rezeptur-Phasen:** Die Hersteller-Rezeptur ist in Phasen gegliedert
(Phase A, B …) — je Phase Rohstoffe mit Anteil %, eine optionale Notiz
(z. B. „auf 70 °C erhitzen") und Drag-&-Drop-Sortierung; Rohstoffe lassen
sich auch zwischen Phasen verschieben. Die **Gesamtsumme über alle Phasen**
muss 100 % ergeben. Bestehende Rezepturen ohne Phasen funktionieren
unverändert weiter; das Kopieren eines Produkts übernimmt die
Phasenstruktur. Für Soll-Mengen der Produktion sind Phasen rein
darstellend — gerechnet wird wie bisher über alle Zeilen.
---
## 3. Festgehaltene Entscheidungen (mit Ausbaupotenzial)
Diese Punkte sind bewusst zunächst einfach umgesetzt und können bei Bedarf
später erweitert werden:
- **„Nicht vorrätig":** Vorerst nur ein **Hinweis** – der Kauf bleibt möglich.
Eine echte **Kauf-Sperre** kann künftig optional ergänzt werden.
- **Bestandsabzug im Shop** erfolgt **beim Versand** (erst mit gebuchtem Versand
gilt die Ware als „aus dem Regal" entnommen). Stornos/Retouren werden als
Gegenbuchung abgebildet. **So umgesetzt (16.07.2026)** – am Versand-Statuswechsel,
Sets werden über ihre Komponenten aufgelöst.
- **Blockbasierte Rechte** gelten zunächst **nur für Warenwirtschaft und
Produktmanagement**. Bei Bedarf können sie später auf weitere Bereiche
ausgebaut werden.
- **Chargen-Nr.-Format (Kundenentscheid 06.07.2026):** Präfix auf Produktebene
(Kategorie-Kürzel + Produkt-Nr., z. B. `TP1`) + Produktionsdatum als
`ttmmjj` – Beispiel `TP1150626` = Charge vom 15.06.2026. Die Chargen-Nr. wird
in der Produktion vorbefüllt, bleibt aber editierbar (alte Etiketten).
So umgesetzt: Präfix im Produktformular (Karte Warenwirtschaft), Vorbelegung
je Ergebniszeile der Produktion.
---
## 4. Offene Briefings
- **Produktentwicklung:** Funktion und Ablauf sind noch nicht final
beschrieben. Sobald ein Briefing vorliegt, wird der Platzhalter durch die
tatsächliche Funktionalität ersetzt.