gruene-seele/dev/product management /konzept.md

14 KiB
Raw Blame History

Feedback zum Briefing

A) INCI-Handling

  • Kopierfunktion: Das ist ein klassischer Bug im replicate()-Prozess von Laravel. Wenn die INCIs über eine Pivot-Tabelle verknüpft sind, müssen die Relationen explizit mitkopiert werden.
  • Sortierung: Die Idee, erst zu sortieren und dann "global" zu speichern, schont die Datenbank. Ich empfehle hier SortableJS. Es ist performant und erlaubt flüssiges Drag & Drop.
  • Dropdown-Logik: Technisch muss hier sichergestellt werden, dass die Datenbank die order-Spalte nicht nach Alphabet, sondern nach der timestamp oder index des Klicks speichert. Das ist ein wichtiger Hinweis für die Backend-Logik!

B) & D) Warenwirtschaft & Eingang

  • Datenmodell: Wir brauchen eine klare Trennung zwischen "Bestellung/Pending" und "Eingang/Gebucht".
  • Autosuggest: Bei über 200 Rohstoffen ist eine Bibliothek wie Select2 oder TomSelect sinnvoll, damit Ivonne nicht scrollen muss, sondern tippen kann.
  • Alarm-Funktion: Das Feld für die Mindestmenge (z.B. 5.000g) sollte direkt am Stammdaten-Objekt des Rohstoffs hängen, nicht nur im Wareneingang, damit der Alarm global funktioniert.

C) Rezepturen & Faktoren

  • Der "Verschleiß-Faktor": Das ist ein extrem wichtiger Punkt für die Kalkulation.

  • Berechnungslogik: Wenn die Rezeptur 100g vorsieht und der Faktor 1,1 ist, zieht das System bei der Produktion automatisch 110g aus dem Bestand ab. Das ist sauber gelöst.

  • Dichte-Thematik (Öl/Wasser): Da du sagst, ihr rechnet konsequent in Gramm, ist die Dichte für die reine Bestandsführung im System egal solange ihr beim Wiegen an der Waage bleibt. Das System rechnet einfach: Eingang (g) - Verbrauch (g) * Faktor.

E) Produktion & Chargen-Tracking

  • FIFO-Prinzip: Da Ivonne die letzten 3 Chargen sieht, ist das System perfekt für die Rückverfolgbarkeit (wichtig für Kosmetik-Verordnungen!).
  • Mehrfachauswahl bei Chargen: Das ist klug, falls eine Charge während der Produktion leer geht und die nächste angebrochen wird.

F) Bestand & UI

  • Menü-Badges: Die roten Zahlen im Menü (z.B. "Bestand Rohstoffe (2)") sind ein hervorragender Trigger. Technisch lösen wir das über einen View Composer in Laravel, damit die Zahl auf jeder Seite aktuell bleibt.

G) Ausgang (Ausschuss)

  • Logging: Da du "Wer" (User-ID) und "Warum" abfragst, ist das ein vollwertiges Korrekturjournal. Das ist für Audits Gold wert.


1. Die "Stückliste" (BOM - Bill of Materials)

Du erweiterst das System von einer reinen Rezeptur (INCIs) zu einer vollständigen Stückliste. Das bedeutet, ein "Produkt" besteht in Laravel nun aus zwei Relationen:

  • Rezeptur: (Rohstoffe in Gramm * Faktor)
  • Packaging: (Tiegel, Deckel, Etikett, Umkarton in Stück)

Wichtig für die Logik: Im Gegensatz zu den Rohstoffen brauchen Verpackungen keinen "Schwund-Faktor" von 1,1, sondern werden meist als Ganzzahlen (Stück) abgezogen. Es sei denn, du hast auch hier nennenswerten Ausschuss (z.B. Etiketten, die beim Bekleben kaputtgehen) dann sollte der Faktor auch hier optional zuschaltbar sein.

2. Der Workflow: Erst Definition, dann Zuordnung

Dein Ansatz ist vollkommen richtig:

  1. Stammdaten: Erst legst du unter "Warenwirtschaft > Bestand Verpackungen" den Artikel an (z.B. "Glastiegel 40ml").
  2. Produkt-Konfiguration: Beim Produkt (z.B. Tattoocreme) sagst du nun: "Dieses Produkt verbraucht pro Einheit 1x Glastiegel 40ml".
  3. Produktions-Trigger: Sobald Ivonne 500 Einheiten produziert, zieht das System im Hintergrund automatisch 500 Tiegel vom Bestand ab.

3. Visualisierung der Datenstruktur

Damit die Datenbank sauber bleibt, empfehle ich folgende Struktur für die Produktanlage:

Ebene Typ Einheit Besonderheit
A (Rohstoffe) INCI / Rohstoff Gramm Inkl. Faktor (1,1) & Chargen-Tracking
B (Primärpackung) Tiegel / Flasche Stück Zwingend für Produktion nötig
C (Sekundärpackung) Karton / Beipackzettel Stück Optional, falls im System geführt

4. Usability-Tipp für die Verpackungsliste

Da die Verpackungen oft für viele Produkte gleich sind (der gleiche Tiegel für 5 verschiedene Cremes), sollte die Auswahl im Backend über eine Suche/Dropdown-Kombination erfolgen, genau wie bei den INCIs.

5. Der "Bestand-Alarm" für Verpackungen

Da Verpackungen oft lange Lieferzeiten haben, solltest du hier die gleiche Alarm-Logik (Mail an Service) wie bei den Rohstoffen implementieren, sobald der "Meldebestand" unterschritten wird.



neues erweitertes Briefing: Erweiterung Web-CRM „Warenwirtschaft & Produktion“

1. Überarbeitung INCI-Management (Produkte)

Ziel ist eine intuitivere Verwaltung der Inhaltsstoffe.

  • Kopierfunktion: Beim Duplizieren eines Produkts müssen alle verknüpften INCIs (Pivot-Daten) mitkopiert werden.
  • Drag & Drop Sortierung: INCIs innerhalb eines Produkts müssen manuell sortierbar sein (z. B. via SortableJS). Speicherung der Reihenfolge erfolgt erst beim Klick auf „Speichern“ (kein Live-DB-Ping pro Verschiebung).
  • Selektions-Logik: Die Mehrfachauswahl im Dropdown muss alphabetisch sortiert sein, die Übernahme in die Produktliste erfolgt jedoch in der Reihenfolge der Auswahl (Klicks).

2. Stammdaten & Menüstruktur „Warenwirtschaft“

Ein neuer Hauptmenüpunkt „Warenwirtschaft“ mit folgenden Unterpunkten wird erstellt:

  1. Eingang: Verwaltung von Bestellungen und Lieferungen (Status: Pending/Grün).
  2. Ausgang: Erfassung von Ausschuss (Schrottliste) mit Grund, User-Log und Datum.
  3. Produktion: Protokollierung der Herstellungsprozesse.
  4. Lieferanten: Verwaltung inkl. Kategorien (Rohstoffe, Tiegel, Verpackung etc.).
  5. Bestand (Getrennte Views):
  • Bestand Rohstoffe
  • Bestand Packaging (Hardware: Tiegel, Deckel)
  • Bestand Etiketten (Produktbezogen)
  • Bestand Versand & Office

3. Rezeptur & Kalkulations-Logik (Backend-Specs)

Um Rundungsfehler zu vermeiden, wird intern mit erhöhter Präzision gerechnet:

  • Datentypen: Preise in Milli-Cent (Integer), Gewichte in Milli-Gramm (Integer oder Decimal 12,4).

  • Verbrauchs-Faktor: Jedes Produkt erhält pro INCI ein Feld für die Grammzahl und einen Schwund-Faktor (Default 1,1).

  • Berechnung: Soll-Menge (g) * Faktor = Tatsächlicher Bestandsabzug.

  • Haltbarkeit: Auswahl pro Produkt via Radio-Button:

  • a) Symbol „12M-Tiegel“ (PAO - Period After Opening).

  • b) Festes MHD (Auswahl: 6, 12, 18, 24, 30, 36 Monate).

4. Workflow: Wareneingang (Zwei-Stufen-System)

  1. Stufe 1 (Einkauf): Erfassung von Lieferant, Inhaltsstoff (Autosuggest), Kaufdatum, Menge (g) und Netto-Preis/kg. Status steht auf „Pending“ (Orange).
  2. Stufe 2 (Ivonne/Eingang): Bei Erhalt der Ware Ergänzung von Eingangsdatum, tatsächlicher Menge (g), Chargen-Nummer und MHD. Status wechselt auf „Eingebucht“ (Grün).
  3. Bestands-Alarm: Pro Artikel (Rohstoff/Verpackung) wird ein Schwellenwert definiert. Bei Unterschreitung erscheint ein roter Badge (Zahl) am Menüpunkt und eine E-Mail geht an den Service.

5. Workflow: Produktion & Bestandsabzug

Bei einer neuen Produktion (z.B. 500 Einheiten Tattoocreme):

  • Rohstoff-Abzug: Das System listet alle hinterlegten INCIs auf. Ivonne wählt pro INCI aus den letzten 3 Chargen (FIFO-Prinzip) die verwendeten aus.
  • Chargen-Splitting: Es muss möglich sein, zwei Chargen für einen Rohstoff zu wählen, falls eine leer wird.
  • Packaging-Abzug: Automatische Reduktion der verknüpften Hardware (Tiegel/Deckel) und des spezifischen Etiketts um die produzierte Stückzahl.
  • MHD-Check: Warnmeldung, falls ein Rohstoff-MHD kürzer ist als das geplante Produkt-MHD.

6. Etiketten-Sonderlogik

Etiketten werden wie Packaging behandelt, aber:

  • Sie sind fest an eine Produkt-ID gebunden.
  • Wareneingang erfolgt meist manuell nach einem Druckauftrag (z.B. 500 Stück).
  • Der Bestand zeigt den Restbestand nach Produktion an (wichtig für Nachbestellungen).

7. Rollen & Sicherheit

  • Berechtigung: Einführung einer Rolle „Redakteur“ (Ivonne). Diese darf Bestände buchen und Produktionen eintragen, aber keine System-Stammdaten oder sensible Einkaufspreise löschen/ändern (falls konfiguriert).
  • Logging: Jede Bestandsveränderung (Eingang, Produktion, Ausschuss) wird mit der user_id protokolliert.

Das sind hervorragende und extrem praxisnahe Ergänzungen! Besonders die LUCID-Verpackungsregister-Thematik (Abfallwirtschaft) und die Multi-Lager-Logik (Köln & Waldbröl) heben das System von einem einfachen CRM zu einem echten, professionellen ERP-System (Enterprise Resource Planning) auf.

Diese Punkte greifen tief in die Datenbankstruktur ein, lassen sich mit Laravel aber sehr sauber abbilden.

Hier ist das aktualisierte, vollständige Briefing (Version 2.0), das du 1:1 an deinen Entwickler weitergeben kannst. Die neuen Punkte sind nahtlos in die Architektur integriert.


Entwickler-Briefing V2.0: Web-CRM „Warenwirtschaft, Produktion & Bestände“

(Empfohlener Tech-Stack für interaktive Module: Laravel + Livewire + Bootstrap)

1. Überarbeitung INCI-Management (Produkte)

  • Kopierfunktion: Beim Duplizieren (replicate()) eines Produkts müssen alle verknüpften INCIs (Pivot-Daten) zwingend mitkopiert werden.
  • Drag & Drop Sortierung: INCIs innerhalb eines Produkts müssen manuell sortierbar sein (z. B. via SortableJS + Livewire). Speicherung der Reihenfolge erfolgt erst beim Klick auf „Speichern“.
  • Selektions-Logik: Die Mehrfachauswahl im Dropdown ist alphabetisch sortiert. Die Übernahme in die Produktliste erfolgt jedoch exakt in der Reihenfolge der Klicks.

2. Stammdaten & Menüstruktur „Warenwirtschaft“

Das System wird um neue Stammdaten-Tabellen erweitert, die vorab verwaltbar sein müssen. Neues Menü:

  1. Stammdaten (Neu):
  • Lagerorte: Anlage von Standorten (z.B. Köln, Waldbröl).
  • Qualitäten/Sorten: Anlage von Rohstoff-Klassifizierungen (z.B. konventionell, bio kaltgepresst, bio raffiniert, konventionell kaltgepresst, konventionell raffiniert).
  • Verpackungs-Materialien: Anlage von Wertstoffen für die Abfallwirtschaft (z.B. Glas, Holz/Bambus, Pappe/Papier, Kunststoff).
  • Lieferanten Kategorien: (z.B. Rohstoffe, Tiegel, Verpackung).
  • Lieferanten: (inkl. Zuweisung einer Kategorie).
  1. Eingang: Verwaltung von Bestellungen und Lieferungen.
  2. Ausgang: Erfassung von Ausschuss (Schrottliste) mit Grund, User-Log und Datum.
  3. Produktion: Protokollierung der Herstellungsprozesse.
  4. Bestand (Getrennte Views & Multi-Lager fähig):
  • Bestand Rohstoffe
  • Bestand Packaging (Hardware: Tiegel, Deckel)
  • Bestand Etiketten
  • Bestand Versand & Office

3. Architektur: Datenmodell & Kalkulations-Logik

Um Rundungsfehler und ungenaue Meldungen (LUCID/Verpackungsregister) zu vermeiden:

  • Präzision: Preise in Milli-Cent (Integer), Gewichte in Milli-Gramm (Integer oder Decimal 12,4).
  • Rohstoff-Verbrauch (Rezeptur): Jedes Produkt hat Pivot-Felder für Grammzahl und einen Schwund-Faktor (Default 1,1). Berechnung: Soll-Menge (g) * Faktor.
  • MHD-Logik (Produkt): Auswahl via Radio-Button: a) „12M-Tiegel“ (PAO) oder b) Festes MHD (6, 12, 18, 24, 30, 36 Monate).

NEU: Packaging & Abfallwirtschaft (BOM - Bill of Materials)

Wenn ein Produkt angelegt wird und Packaging zugewiesen bekommt (z.B. Glastiegel, Bambusdeckel, Umverpackung), zieht das System seine Daten aus der Packaging-Datenbank.

  • Stammdaten Packaging: Jeder Artikel (z.B. "Glastiegel 50ml") bekommt zwei Pflichtfelder:
  1. Material: (Dropdown aus den zuvor angelegten Verpackungs-Materialien, z.B. Glas).
  2. Gewicht: (Eingabefeld in Gramm).
  • Nutzen: Das System kann so auf Knopfdruck einen Report generieren: "Für 500 produzierte Pechsalben wurden X kg Glas und Y kg Pappe in Verkehr gebracht."

4. Workflow: Wareneingang & Multi-Lager

  1. Stufe 1 (Einkauf / Pending): * Erfassung von: Lieferant, Inhaltsstoff (Autosuggest), Kaufdatum, Menge (g), Netto-Preis/kg, Lagerort (Dropdown: Köln/Waldbröl). Status steht auf „Pending“ (Orange).
  2. Stufe 2 (Eingangsbuchung / Grün): * Bei Erhalt ergänzt der User (z.B. Ivonne): Eingangsdatum, tatsächliche Menge (g), Chargen-Nummer, MHD und Qualität/Sorte (Dropdown: bio kaltgepresst, konventionell etc.). Status wechselt auf „Eingebucht“ (Grün).
  3. Bestands-Ansicht & Alarme: * Bestände müssen nun pro Lagerort sowie als Gesamtsumme darstellbar sein.
  • Unterschreitet der Gesamtbestand den Schwellenwert, erscheint ein roter Badge am Menüpunkt + E-Mail-Alarm.

5. Workflow: Produktion & Bestandsabzug

Bei einer neuen Produktion (z.B. Tattoocreme):

  • Rohstoff-Abzug & Chargen-Splitting: Das System listet die INCIs. Der User wählt aus den letzten 3 Chargen. Es muss möglich sein, Mengen auf zwei Chargen aufzuteilen, wenn eine Charge leer wird.
  • Lager-Logik: Bei der Produktion muss angegeben werden, an welchem Standort (Köln oder Waldbröl) produziert wird, damit das System die Rohstoffe vom richtigen Lager abzieht.
  • Packaging-Abzug: Automatische Reduktion der verknüpften Hardware (Tiegel/Deckel) und Etiketten am jeweiligen Standort.
  • MHD-Check: Warnmeldung, falls ein Rohstoff-MHD kürzer ist als das geplante Produkt-MHD.

6. Rollen & Sicherheit (Activity Logging)

  • Berechtigung („Redakteur“): Darf Bestände buchen und Produktionen eintragen, aber keine System-Stammdaten (Materialien, Qualitäten, Lagerorte) oder Preise bearbeiten/löschen.
  • Audit Trail: Jede Bestandsveränderung (Eingang, Produktion, Ausgang/Schrott) wird zwingend mit user_id, timestamp und Begründung protokolliert.