April 2026 waren Wirtschaft Feedback

This commit is contained in:
Kevin Adametz 2026-04-10 17:14:38 +02:00
parent 02f2a4c23e
commit 9ce711d6b2
167 changed files with 25278 additions and 8518 deletions

View file

@ -0,0 +1,239 @@
## 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.
---