## 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). 2. **Eingang:** Verwaltung von Bestellungen und Lieferungen. 3. **Ausgang:** Erfassung von Ausschuss (Schrottliste) mit Grund, User-Log und Datum. 4. **Produktion:** Protokollierung der Herstellungsprozesse. 5. **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. ---