gruene-seele/dev/product management /entwicklungsplan-aktualisiert-27-04-2026.md

18 KiB

Aktualisierter Entwicklungsplan: Warenwirtschaft, Produktion & Produktbestand

Version: 3.0 - Stand 13.05.2026
Prioritaet: Anpassungsbriefing vom 27.04.2026 zuerst einarbeiten
Referenzen: entwicklungsplan.md, briefing-anpassungen-27-04-2026.md, feedback.md, Screens unter screens/


1. Aktueller Ist-Stand

Laut bestehendem entwicklungsplan.md sind die Phasen 0 bis 5.1 umgesetzt:

  • Phase 0: Bugfixes Produkt/INCI, Sync-Logik, Sortierung, Kopierfehler.
  • Phase 1: INCI-Erweiterung, Rezepturfelder, Haltbarkeit, Produktkopie.
  • Phase 2: Stammdaten-Module fuer Lagerorte, Lieferanten, Verpackung, Qualitaeten.
  • Phase 3: Einkauf & Wareneingang als Zwei-Stufen-Workflow.
  • Phase 4: Verpackung & Material am Produkt.
  • Phase 5: Produktion MVP mit Chargen, Rezeptur-API und Packaging-Snapshot.
  • Phase 5.1: Feedback-Korrekturen zu Menue, Rezeptur, Produktion und Verpackungsartikeln.

Noch offen aus dem alten Plan:

  • Phase 6: Bestandsuebersichten & Alarme.
  • Phase 7: Ausgang / Ausschuss.
  • Phase 8: Rollen, Audit-Trail & Feinschliff.
  • Phase 9: Einstellungen & Konfiguration.
  • Offene Tests aus Phase 5.1, insbesondere Rezeptur/Hersteller-Rezeptur, Produktion kopieren/bearbeiten, aktive Produkte und Menue-Labels.

Das Anpassungsbriefing vom 27.04.2026 erweitert den Scope wesentlich. Deshalb wird vor den alten Phasen 6 bis 9 eine neue priorisierte Phase eingeschoben.


2. Neue Priorisierung

Sofortige Reihenfolge

Prioritaet Phase Titel Status Abhaengigkeit
P0 5.2 Anpassungsbriefing 27.04.2026 neu, sofort Phasen 0-5.1
P1 6 Rohstoffbestand & Produktbestand offen, angepasst Phase 5.2
P2 7 Ausgang, manuelle Bestandsbewegungen & Historie offen, erweitert Phase 6
P3 8 Rechte, 2FA, Audit-Trail offen, erweitert Phase 5.2 + 7
P4 9 Einstellungen & Konfiguration offen, erweitert Phase 5.2

Wichtig: Funktionen aus Phase 6-9 duerfen erst final umgesetzt werden, wenn die neuen Stammdatenfelder, Produkt-Set-Logik und Produktbestandslogik aus Phase 5.2 geklaert und umgesetzt sind.


3. Phase 5.2: Anpassungsbriefing 27.04.2026

Ziel: Alle neuen Anforderungen aus briefing-anpassungen-27-04-2026.md in das bestehende Warenwirtschaftsmodell integrieren, bevor Bestandsuebersichten und Historien final gebaut werden.

5.2.1 Einstellungen: UST-Saetze und Lieferzeiten

Anforderungen

  • Neue konfigurierbare UST-Saetze, z. B. 19 %, 7 %.
  • UST nicht hart im Code, sondern als Stammdatum/Setting verwalten.
  • Lieferzeiten als frei definierbare Textwerte, z. B. 3-5 Tage.

Umsetzung

  • Neues Einstellungsmodul oder Erweiterung der bestehenden Warenwirtschafts-Einstellungen:
    • tax_rates: Name, Prozentwert, aktiv.
    • delivery_times: Textwert, aktiv, Sortierung.
  • UST-Dropdowns in Einkauf und INCI nutzen diese Werte.
  • Lieferzeit-Dropdowns/Textfelder bei Lieferant und INCI anbinden.

Akzeptanzkriterien

  • SuperAdmin kann UST-Saetze und Lieferzeiten pflegen.
  • Einkauf und INCI koennen nur aktive UST-Saetze auswaehlen.
  • Lieferzeiten bleiben bewusst als Text flexibel.

5.2.2 Produkte: Einzelprodukt, Set und Hauptprodukt-Zuordnung

Anforderungen

  • Produkte werden in zwei Klassen unterschieden:
    • Einzelprodukt: hat Rezeptur, Hersteller-Rezeptur, Verpackung & Material, Warenwirtschaft.
    • Set: hat keine eigene Rezeptur/Produktion, sondern besteht aus mehreren Einzelprodukten mit Menge.
  • Im Produktformular wird eine Checkbox/Option eingebaut: Ist Set.
  • Wenn Ist Set aktiv ist:
    • Karten Rezeptur, Verpackung & Material und Warenwirtschaft ausblenden.
    • Neue Karte Set-Bestandteile anzeigen.
    • Modal mit auswaehlbaren Einzelprodukten, keine Sets.
  • Produktbestand darf nur Hauptprodukte anzeigen.
  • Child-/Set-Produkte muessen dem Hauptprodukt zugeordnet werden koennen, z. B. 50 x Bio Tattoocreme 15 ml.

Umsetzung

  • products erweitern:
    • is_set boolean.
    • main_product_id nullable FK auf products.
    • optional main_product_quantity fuer Child-Produkte.
  • Neue Pivot-Tabelle fuer Sets:
    • product_set_items: set_product_id, component_product_id, quantity.
  • Produktformular:
    • Umschaltlogik fuer Einzelprodukt/Set.
    • Set-Bestandteile wie bestehende Rezeptur-/Packaging-Modals aufbauen.
  • Validierung:
    • Set darf keine Sets enthalten.
    • Set braucht mindestens einen Bestandteil.
    • Einzelprodukt darf Rezeptur/Packaging/Warenwirtschaft pflegen.

Akzeptanzkriterien

  • Ein Set kann aus mehreren Einzelprodukten bestehen.
  • Beim Verkauf eines Sets werden die enthaltenen Einzelprodukte im Produktbestand reduziert.
  • Set-Produkte erscheinen nicht als selbst produzierbare Produkte.
  • Produktbestand zeigt nur Haupt-/Einzelprodukte, nicht die Child-/Set-Varianten.

5.2.3 Einkauf & Wareneingang erweitern

Anforderungen

  • Einkauf bekommt UST-Dropdown.
  • Brutto-Preis pro kg und Netto-Preis pro kg: eines der beiden Felder kann eingegeben werden, das andere berechnet sich automatisch.
  • Ausgefuellten Einkauf duplizierbar machen.
  • Aktionsicons Auge/Stift/Muelleimer in Tabellen groesser und mit mehr Abstand, iPad-tauglich.

Umsetzung

  • stock_entries erweitern:
    • tax_rate_id oder gespeicherter Snapshot tax_rate_percent.
    • price_per_kg_net.
    • price_per_kg_gross.
  • Frontend-JS:
    • Netto/Brutto anhand UST gegenseitig berechnen.
    • Rundung einheitlich definieren.
  • Copy-Route fuer Einkauf:
    • Dupliziert Stufe-1-Felder.
    • Laesst Chargennummer, MHD, Eingangsdaten und Status leer bzw. setzt wieder auf pending.
  • Gemeinsame Tabellen-Aktionsklasse einfuehren:
    • groessere Buttons.
    • mehr Abstand.
    • konsequent fuer Einkaufs-, Lieferanten-, Produktions-, Bestands- und Stammdatentabellen.

Akzeptanzkriterien

  • Einkauf kann mit Netto oder Brutto angelegt werden.
  • Beim Wechsel des UST-Satzes wird das Gegenfeld aktualisiert.
  • Ein Einkauf kann fuer mehrere Kanister/Chargen komfortabel dupliziert werden.
  • Tabellenaktionen sind auf dem iPad gut klickbar.

5.2.4 Lieferanten erweitern

Anforderungen

  • Lieferant braucht Auswahl, ob Bestellung per Mail oder Online-Shop erfolgt.
  • Je nach Auswahl soll spaeter in Rohstoffbestand/Bestellhilfe ein Link zum Shop oder ein Mail-Link erscheinen.
  • Lieferant bekommt Lieferzeit als frei pflegbares Textfeld.

Umsetzung

  • suppliers erweitern:
    • order_method enum/string: email, online_shop.
    • order_email nullable, falls abweichend von Kontakt-Mail.
    • order_url nullable, falls abweichend von allgemeiner URL.
    • delivery_time nullable string.
  • Lieferantenformular:
    • Radio/Select fuer Bestellart.
    • passende Felder anzeigen.
  • Spaetere Nutzung in Rohstoffbestand:
    • Button Bestellen erzeugt mailto: oder oeffnet Shop-URL.

Akzeptanzkriterien

  • Pro Lieferant ist erkennbar, wie bestellt wird.
  • Rohstoffbestand kann daraus einen konkreten Bestell-Link ableiten.
  • Lieferzeit des Lieferanten ist sichtbar und editierbar.

5.2.5 INCI erweitern

Anforderungen

  • Pro INCI Mehrfachauswahl der Lieferanten, bei denen es gekauft werden kann.
  • Pro INCI UST-Satz hinterlegen.
  • Pro INCI optional eigene Lieferzeit; diese ueberschreibt die Lieferzeit des Lieferanten.

Umsetzung

  • Neue Pivot-Tabelle:
    • ingredient_supplier: ingredient_id, supplier_id, optional preferred, supplier_sku, url.
  • ingredients erweitern:
    • tax_rate_id oder Snapshot.
    • delivery_time nullable string.
  • INCI-Formular:
    • Lieferanten-Mehrfachauswahl per Select2.
    • UST-Dropdown.
    • Lieferzeit-Textfeld.

Akzeptanzkriterien

  • Ein INCI kann mehrere Lieferanten haben.
  • Rohstoffbestand kann alle moeglichen Lieferanten mit Lieferzeit anzeigen.
  • INCI-Lieferzeit ueberschreibt Lieferanten-Lieferzeit.

5.2.6 Produktion korrigieren

Anforderungen

  • Neue Produktion optisch vereinfachen:
    • weniger Linien.
    • Ueberschriften Charge und Menge bei einzelnen Rohstoffen entfernen.
    • bei Mengenangaben g hinter die Zahl.
  • Chargen-Dropdown zeigt Lieferant, Charge und MHD:
    • Beispiel: Manske GmbH - DE-170722 - 30.09.2028.
    • MHD-Text nicht anzeigen.
    • Nur Chargen anzeigen, von denen noch Bestand vorhanden ist.
  • Basis fuer Produktion ist die Hersteller-Rezeptur.
  • Fehler beim Hinzufuegen einer Charge beheben: Es duerfen nicht automatisch zwei neue Felder erscheinen.
  • Wenn oben z. B. Stueckzahl geaendert wird:
    • bestehende ausgefuellte Chargen/Mengen bleiben erhalten.
    • nur Soll-Angaben in Gramm werden neu berechnet.
  • iPad-Layout: Produktionsdatum und produzierte Stueckzahl duerfen nicht ueberlappen.
  • Neuer Untermenuepunkt Produktentwicklung unter Produktion als Platzhalter.

Umsetzung

  • ProductionController::recipeJson() auf Hersteller-Rezeptur als Basis umstellen.
  • Chargenquery im InventoryService oder ProductionService:
    • nur received Chargen.
    • Restbestand pro Charge > 0.
    • Label mit Lieferant, Chargennummer, Datum d.m.Y.
  • JS fuer Chargen-Splitting korrigieren:
    • genau eine neue Zeile pro Klick.
    • vorhandene Eingaben beim Neuberechnen nicht ueberschreiben.
  • Responsive Bootstrap-Grid fuer Kopfdaten der Produktion ueberarbeiten.
  • Route/View fuer Produktentwicklung als Platzhalterseite:
    • Hinweis: Konzept folgt.
    • noch keine Bestandsbuchung.

Akzeptanzkriterien

  • Produktion basiert auf Hersteller-Rezeptur.
  • Chargenliste zeigt nur verfuegbare Chargen mit Lieferant und Datum.
  • Aenderung der Stueckzahl zerstoert keine manuell eingetragenen Chargen.
  • iPad-Darstellung ist nutzbar.
  • Menuepunkt Produktentwicklung existiert sichtbar.

5.2.7 Rohstoffbestand als neuer Schwerpunkt

Anforderungen

  • Neuer Menuepunkt Rohstoffbestand.
  • Uebersicht zeigt, welche Rohstoffe im Lager sind.
  • Muss Lieferanten, Lieferzeiten und Bestellmoeglichkeiten beruecksichtigen.
  • Grundlage fuer spaetere Nachbestellung/Knappheitsanzeige.

Umsetzung

  • Bestehende alte Phase 6 Bestand Rohstoffe wird inhaltlich auf Rohstoffbestand priorisiert.
  • Spaltenvorschlag:
    • INCI/Rohstoff.
    • Qualitaet.
    • Gesamtbestand.
    • Bestand je Lagerort.
    • reserviert/verbraucht durch Produktionen.
    • Meldebestand oder berechneter Bedarf.
    • Status.
    • Lieferanten.
    • Lieferzeit.
    • Bestellaktion.
  • Lieferzeitlogik:
    • INCI-Lieferzeit vor Lieferanten-Lieferzeit.
  • Bestellaktion:
    • Online-Shop-Link oder Mail-Link je Lieferant.

Akzeptanzkriterien

  • Rohstoffbestand zeigt reale Restbestaende aus Wareneingang minus Produktion/Ausgang.
  • Nur Chargen mit Restbestand fliessen ein.
  • Kritische Rohstoffe sind visuell markiert.
  • Bestellweg ist direkt aus der Uebersicht erreichbar.

5.2.8 Produktbestand & Historie

Anforderungen

  • Neuer Hauptmenuepunkt Produktbestand.
  • Unterpunkt Historie.
  • Produktbestand erlaubt einfache Ein- und Ausgaenge.
  • Historie dokumentiert jeden Ein- und Ausgang revisionssicher, auch Verkauf ueber Shops und manuelle Eingaben.
  • Screens zeigen:
    • Suche.
    • Checkbox nur kritische anzeigen.
    • Bestand je Produkt.
    • rote/gelbe Markierung bei kritischem Bestand.
    • Aktionsbuttons +, -, Produzieren.
  • Produktbestand zeigt nur Hauptprodukte.

Umsetzung

  • Neue Tabellen:
    • product_stock_movements: Produkt, Richtung in/out, Menge, Grund, Quelle, User, Datum, Referenz.
    • optional product_stock_thresholds oder Felder an products: min_product_stock, critical_product_stock.
  • Produktbestand wird berechnet:
    • Summe Produktion/manuelle Eingaenge minus Verkauf/manuelle Ausgaenge/Set-Verbrauch.
  • Manueller Eingang/Ausgang:
    • Menge Pflicht.
    • Grund Pflicht.
    • Richtung Pflicht.
  • Historie:
    • filterbar nach Produkt, Quelle, Zeitraum, User.
    • unveraenderbar bzw. Korrektur nur ueber Gegenbuchung.
  • Shop-Verkaeufe:
    • Produktbestand nach Bestellung reduzieren.
    • Bei Sets Bestand der enthaltenen Einzelprodukte reduzieren.

Akzeptanzkriterien

  • Produktbestand ist schnell pflegbar.
  • Jede Bewegung steht in der Historie.
  • Set-Verkaeufe reduzieren die enthaltenen Einzelprodukte.
  • Kritische Produkte koennen gefiltert werden.

5.2.9 Nicht vorrätig mit Zeitangabe

Anforderungen

  • Produkt bekommt Checkbox Nicht vorrätig.
  • Zahl in Tagen wird hinterlegt.
  • Im Shop erscheint z. B. In ca. 14 Tagen wieder da!.
  • Die Zahl zaehlt automatisch runter und aktualisiert sich in der Bestellansicht.

Umsetzung

  • products erweitern:
    • out_of_stock_until date nullable oder out_of_stock_days plus Startdatum.
    • Empfehlung: out_of_stock_until, weil daraus Resttage sauber berechnet werden.
  • Produktformular:
    • Checkbox.
    • Tagefeld.
    • beim Speichern now()->addDays($days).
  • Shopanzeige:
    • Wenn Datum in Zukunft: Kaufbutton ersetzen/ergaenzen mit Hinweis.
    • Resttage dynamisch berechnen.
  • Scheduler optional:
    • Status nach Ablauf automatisch deaktivieren oder Anzeige laeuft durch Datumslogik aus.

Akzeptanzkriterien

  • Produkt kann zeitweise als nicht vorrätig markiert werden.
  • Hinweis im Shop zeigt aktuelle Resttage.
  • Nach Ablauf verschwindet der Hinweis automatisch.

5.2.10 Admin-Sicherheit: 2FA und blockbasierte Rechte

Anforderungen

  • 2FA per Google Authenticator fuer Admins.
  • Rechtevergabe pro Block:
    • ansehen.
    • bearbeiten.
    • optional loeschen/freigeben.
  • Mitarbeiter koennen Admins sein, aber nur ausgewaehlte Bereiche sehen/bearbeiten.

Umsetzung

  • 2FA:
    • Pruefen, ob bestehende Auth-Struktur mit App\User und Guard user erweitert wird.
    • TOTP-Secret am User speichern.
    • Setup-Flow fuer Admins.
    • Login-Zwischenschritt fuer 2FA-Code.
  • Rechte:
    • Neues Berechtigungsmodell statt nur numerischem admin-Level fuer Warenwirtschaftsbloecke.
    • Tabellen z. B. admin_permission_blocks, admin_permission_user.
    • Bloecke: Produkte, Einkauf, Rohstoffbestand, Produktbestand, Produktion, Lieferanten, Einstellungen, Historie.
    • Middleware/Gates fuer view und edit.

Akzeptanzkriterien

  • Admin kann ohne 2FA nicht in geschuetzte Bereiche, sobald 2FA aktiviert ist.
  • SuperAdmin kann pro Mitarbeiter Rechte je Block vergeben.
  • Navigation zeigt nur erlaubte Bloecke.
  • Bearbeiten ist getrennt von Einsehen steuerbar.

4. Angepasste offene Phasen nach 5.2

Phase 6: Rohstoffbestand & Produktbestand

Status: offen, erweitert durch Screens und Anpassungsbriefing.

Inhalt

  • InventoryService finalisieren.
  • Rohstoffbestand mit Lieferanten-, Lieferzeit-, UST- und Bestellinformationen.
  • Produktbestand mit Hauptproduktfilter, kritischen Markierungen, manuellen Bewegungen und Produzieren-Shortcut.
  • Bestand pro Lagerort und Gesamtbestand.
  • Kritisch-Filter analog Screen.

Tests

  • Bestandsberechnung Rohstoffe pro Charge und Lagerort.
  • Nur Chargen mit Restbestand werden angezeigt.
  • Produktbestand zeigt nur Hauptprodukte.
  • Set-Verkauf reduziert Einzelproduktbestand.
  • Kritisch-Filter zeigt nur Produkte/Rohstoffe unter Schwellwert.

Phase 7: Ausgang, Bewegungen & Historie

Status: offen, inhaltlich erweitert.

Inhalt

  • Alter Ausgang / Ausschuss bleibt fuer Rohstoffe/Verpackung relevant.
  • Produktbestand bekommt eigene Bewegungslogik.
  • Produktbestand-Historie als Finanzamt-/Audit-Archiv.
  • Jeder manuelle Ein- und Ausgang braucht Grund, User und Datum.

Tests

  • Rohstoff-Ausgang reduziert Rohstoffbestand.
  • Produkt-Ausgang reduziert Produktbestand.
  • Historie dokumentiert alle Quellen: Produktion, Verkauf, manuell, Set.
  • Manuelle Korrektur ohne Grund wird abgelehnt.

Phase 8: Rollen, Audit-Trail, 2FA

Status: offen, erweitert.

Inhalt

  • Bisheriger Audit-Trail bleibt Pflicht.
  • Blockbasierte Rechte ersetzen fuer neue Module reine Level-Annahmen.
  • 2FA fuer Admins.
  • Bestehende Rollenlevel bleiben als Grundschutz erhalten, werden aber fuer Modulrechte verfeinert.

Tests

  • User mit Leserecht kann sehen, aber nicht speichern.
  • User ohne Blockrecht sieht den Menuepunkt nicht.
  • 2FA-Zwischenschritt greift fuer Admins.
  • Audit-Log wird bei jeder Bestandsbewegung geschrieben.

Phase 9: Einstellungen & Konfiguration

Status: offen, erweitert.

Inhalt

  • UST-Saetze.
  • Lieferzeiten.
  • Bestandsalarm-E-Mail.
  • Standard-Lagerort.
  • Produktbestand-Schwellwerte, falls global sinnvoll.
  • Optional: Standardtexte fuer Nicht vorrätig.

Tests

  • Nur SuperAdmin kann Einstellungen pflegen.
  • UST-Saetze koennen deaktiviert, aber historische Werte weiterhin angezeigt werden.
  • Lieferzeiten stehen in Lieferanten und INCIs zur Auswahl.

5. Offene Klaerungspunkte

  • Soll Nicht vorrätig den Kauf komplett sperren oder nur einen Hinweis anzeigen?
  • Wird Produktbestand beim Status bezahlt, versendet oder direkt bei Bestellung reduziert?
  • Sollen Produktbestandsbewegungen auch Stornos/Retouren automatisch abbilden?
  • Soll die blockbasierte Rechtevergabe nur fuer Warenwirtschaft/Produktmanagement gelten oder fuer alle Admin-Bereiche?
  • Soll Produktentwicklung bereits Bestandsabzug erzeugen oder zunaechst nur ein Platzhalter-Menuepunkt sein?
  • Soll ein Child-Produkt zwingend genau ein Hauptprodukt haben oder koennen mehrere Einzelprodukte in einem Verkaufsprodukt gebuendelt werden? Fuer echte Sets ist die Pivot-Loesung vorgesehen.

6. Empfohlene naechste Umsetzungsschritte

  1. Datenmodell fuer is_set, Set-Bestandteile, Hauptprodukt-Zuordnung und Produktbestand finalisieren.
  2. Einstellungen fuer UST-Saetze und Lieferzeiten umsetzen, weil Einkauf/INCI/Lieferanten davon abhaengen.
  3. Lieferanten und INCIs um Bestellweg, Lieferzeit, UST und Lieferanten-Zuordnung erweitern.
  4. Einkauf um Netto/Brutto/UST, Duplizieren und iPad-taugliche Aktionsbuttons erweitern.
  5. Produktion auf Hersteller-Rezeptur, bessere Chargenlabels und stabile JS-Neuberechnung korrigieren.
  6. Produktbestand mit Historie und manuellen Bewegungen bauen.
  7. Rohstoffbestand mit Lieferanten-/Bestellinformationen bauen.
  8. Danach alte Phasen 7-9 finalisieren: Ausgang, Audit, Rechte, 2FA, Einstellungen.

7. Grobe Aufwandsschaetzung

Block Aufwand
Einstellungen UST/Lieferzeiten 1-2 Tage
Produkt Set-/Hauptproduktmodell 3-5 Tage
Einkaufserweiterungen 2-3 Tage
Lieferanten/INCI-Erweiterungen 2-4 Tage
Produktionskorrekturen 2-4 Tage
Rohstoffbestand 4-6 Tage
Produktbestand + Historie 5-8 Tage
Nicht vorrätig 1-2 Tage
2FA Admins 3-5 Tage
Blockbasierte Rechte 5-8 Tage
Tests & Feinschliff 4-6 Tage

Neue Gesamtannahme fuer offene Arbeit: ca. 6-9 Wochen bei einem Entwickler, abhaengig davon, wie tief Shop-Verkaeufe, Stornos und Rechtevergabe integriert werden sollen.