# Effigenix ERP – End-to-End Real-Life Workflows > Reale Tagesabläufe einer Fleischerei, BC-übergreifend. > Alle Diagramme nutzen Mermaid-Syntax. --- ## Inhaltsverzeichnis 1. [Morgenroutine: Wareneingang Frischfleisch](#1-morgenroutine-wareneingang-frischfleisch) 2. [Tagesproduktion: Bratwurst herstellen](#2-tagesproduktion-bratwurst-herstellen) 3. [Wochenplanung & Bedarfsermittlung](#3-wochenplanung--bedarfsermittlung) 4. [Rückruf-Szenario: Salmonellen beim Lieferanten](#4-rückruf-szenario-salmonellen-beim-lieferanten) 5. [Qualitätsproblem in der Produktion](#5-qualitätsproblem-in-der-produktion) 6. [MHD-Management: Ablaufende Ware & Abverkauf](#6-mhd-management-ablaufende-ware--abverkauf) 7. [Inventur: Monatliche Bestandszählung](#7-inventur-monatliche-bestandszählung) 8. [Zentrale Produktion & Filialbelieferung](#8-zentrale-produktion--filialbelieferung) --- ## 1. Morgenroutine: Wareneingang Frischfleisch **Szenario:** Montag, 5:30 Uhr. Der LKW von Lieferant „Müller Fleisch" kommt mit 200 kg Schweineschulter und 80 kg Rindfleisch. Der Wareneingangs-Mitarbeiter muss die Lieferung prüfen, dokumentieren und einbuchen. **Beteiligte BCs:** Procurement, Quality, Inventory, Master Data ```mermaid sequenceDiagram actor Fahrer as LKW-Fahrer (Müller Fleisch) actor WE as Wareneingangs-Mitarbeiter participant MD as Master Data BC participant Proc as Procurement BC
(PurchaseOrder, GoodsReceipt) participant QM as Quality BC
(GoodsReceiptInspection) participant Inv as Inventory BC
(Stock, StockMovement) Note over Fahrer,Inv: 🕠 05:30 – LKW-Anlieferung Fahrer->>WE: Lieferschein übergeben
(200kg Schweineschulter, 80kg Rind,
Charge "MF-2026-0847", MHD 2026-03-03) WE->>Proc: Wareneingang erfassen Note right of Proc: GoodsReceipt anlegen
Referenz: PurchaseOrder #PO-2026-041
Lieferanten-Charge: MF-2026-0847
MHD: 2026-03-03 Note over WE,QM: 🌡️ HACCP-Pflichtprüfung WE->>QM: Qualitätsprüfung starten Note right of QM: GoodsReceiptInspection erstellt WE->>QM: 1. Temperaturmessung Note right of QM: Kerntemperatur Schwein: 2,1°C ✅
Kerntemperatur Rind: 3,4°C ✅
(Grenzwert: ≤ 4°C für Frischfleisch) WE->>QM: 2. Sichtkontrolle Note right of QM: Verpackung: unbeschädigt ✅
Farbe: frisch, keine Verfärbung ✅
Geruch: neutral, arttypisch ✅ WE->>QM: 3. MHD-Prüfung Note right of QM: MHD 2026-03-03 → noch 7 Tage ✅
(Mindest-Restlaufzeit: 3 Tage) WE->>QM: 4. Dokumentenprüfung Note right of QM: Lieferschein: vorhanden ✅
Veterinärbescheinigung: vorhanden ✅
Identitätskennzeichen: DE NW 20145 ✅ QM-->>QM: Alle Prüfungen bestanden QM->>Proc: GoodsReceiptAccepted Note right of Proc: GoodsReceipt Status → ACCEPTED
PurchaseOrder → FULLY_RECEIVED Note over WE,Inv: 📦 Bestand einbuchen Proc->>Inv: Event: GoodsReceiptAccepted Inv->>Inv: Stock.addBatch(Schweineschulter) Note right of Inv: StockBatch: MF-2026-0847
BatchType: PURCHASED
200 kg, MHD 2026-03-03
Lagerort: KÜHLRAUM_1 Inv->>Inv: Stock.addBatch(Rindfleisch) Note right of Inv: StockBatch: MF-2026-0847-R
100 kg, MHD 2026-03-03 Inv->>Inv: StockMovement.record(GOODS_RECEIPT, IN) Note right of Inv: 2× Bewegungen protokolliert
(immutable Audit-Trail) Note over WE,Inv: ✅ 05:45 – Ware eingelagert, System aktuell ``` ### Sonderfall: Prüfung fehlgeschlagen ```mermaid sequenceDiagram actor WE as Wareneingangs-Mitarbeiter actor Fahrer as LKW-Fahrer participant QM as Quality BC participant Proc as Procurement BC Note over WE,Proc: ❌ Temperatur zu hoch WE->>QM: Temperaturmessung: 7,2°C Note right of QM: GRENZWERT ÜBERSCHRITTEN!
Max. erlaubt: 4°C
Gemessen: 7,2°C QM->>QM: TemperatureCriticalLimitExceeded QM->>Proc: GoodsReceiptRejected Note right of Proc: Grund: Kühlkette unterbrochen
GoodsReceipt Status → REJECTED
PurchaseOrder bleibt CONFIRMED WE->>Fahrer: Ware zurückweisen Note right of WE: Ablehnungsprotokoll erstellt
Fotos dokumentiert
Lieferant wird informiert Note over WE,Proc: Kein Bestand eingebucht!
Reklamation beim Lieferant ``` --- ## 2. Tagesproduktion: Bratwurst herstellen **Szenario:** Dienstag, 6:00 Uhr. Der Metzgermeister soll laut Wochenplan 150 kg Nürnberger Bratwurst herstellen. Rezept „R-NB-001" (Ausbeute 85%, Haltbarkeit 5 Tage). Zutaten: Schweineschulter, Speck, Gewürzmischung, Naturdärme. **Beteiligte BCs:** Production, Inventory, (Labeling, Quality) ```mermaid sequenceDiagram actor PL as Produktionsleiter actor MM as Metzgermeister participant PO as Production BC
(ProductionOrder) participant Batch as Production BC
(Batch) participant Recipe as Production BC
(Recipe) participant Stock as Inventory BC
(Stock) participant SM as Inventory BC
(StockMovement) participant Label as Labeling BC
(ProductLabel) Note over PL,Label: 🕕 06:00 – Produktionsauftrag vorbereiten PL->>PO: Produktionsauftrag anlegen Note right of PO: Rezept: R-NB-001 (Nürnberger)
Menge: 150 kg
Datum: 2026-02-24
Priorität: NORMAL
Status → PLANNED PL->>PO: Auftrag freigeben Note right of PO: Prüfung: Rezept R-NB-001 ist ACTIVE ✅
Status → RELEASED PL->>PO: Produktion starten PO->>Batch: Charge automatisch erstellen Note right of Batch: BatchNumber: P-2026-02-24-001
Geplante Menge: 150 kg
Status → IN_PRODUCTION PO-->>PO: Status → IN_PRODUCTION
BatchId verknüpft Note over MM,SM: 🥩 06:15 – Material vorbereiten & reservieren PO->>Recipe: Materialbedarf berechnen Note right of Recipe: Ausbeute 85% → Bedarf = 150/0,85 = 176 kg
Schweineschulter: 60% → 106 kg
Speck: 25% → 44 kg
Gewürzmischung: 10% → 18 kg
Naturdärme: 5% → 9 kg MM->>Stock: Material reservieren (FEFO) Note right of Stock: Schweineschulter: 106 kg reservieren Stock->>Stock: FEFO-Allokation Note right of Stock: Charge MF-2026-0847 (MHD 03.03): 106 kg ✅
(älteste Charge zuerst) Stock-->>MM: Reservierung erstellt MM->>Stock: Speck reservieren Note right of Stock: Charge SP-2026-0812 (MHD 05.03): 44 kg ✅ MM->>Stock: Gewürze + Därme reservieren Note right of Stock: GW-2026-0099 (MHD 15.08): 18 kg ✅
ND-2026-0201 (MHD 20.04): 9 kg ✅ Note over MM,SM: 🔪 06:30 – Produktion & Entnahme MM->>Stock: Reservierungen bestätigen (entnehmen) Stock->>SM: StockMovement(PRODUCTION_CONSUMPTION, OUT) Note right of SM: 4× Entnahme-Bewegungen protokolliert MM->>Batch: Verbrauch dokumentieren Note right of Batch: Consumption 1: MF-2026-0847, 106 kg Schweineschulter
Consumption 2: SP-2026-0812, 44 kg Speck
Consumption 3: GW-2026-0099, 18 kg Gewürze
Consumption 4: ND-2026-0201, 9 kg Därme Note right of Batch: → Chargen-Genealogie aufgebaut!
Rückverfolgbar bis zum Lieferanten Note over MM,Label: ⚖️ 09:30 – Produktion abschließen MM->>Batch: Charge abschließen Note right of Batch: Ist-Menge: 148 kg (gewogen)
Verschnitt: 3,5 kg
Ausbeute real: 148/177 = 83,6%
MHD berechnet: 2026-02-24 + 5 = 2026-03-01
Status → COMPLETED Batch->>Stock: Event: BatchCompleted Stock->>Stock: addBatch(P-2026-02-24-001) Note right of Stock: Neuer StockBatch:
148 kg Nürnberger Bratwurst
BatchType: PRODUCED
MHD: 2026-03-01
Lagerort: KÜHLRAUM_2 Stock->>SM: StockMovement(PRODUCTION_OUTPUT, IN) PL->>PO: Produktionsauftrag abschließen Note right of PO: Prüfung: Charge COMPLETED ✅
Status → COMPLETED Note over MM,Label: 🏷️ Etikett steht bereit Note right of Label: ProductLabel für Nürnberger verfügbar:
Zutaten: Schweinefleisch (60%),
Speck (25%), Gewürze...
Allergene: SELLERIE, SENF (auto)
MHD: 01.03.2026
Nährwerte pro 100g berechnet ``` --- ## 3. Wochenplanung & Bedarfsermittlung **Szenario:** Freitag Nachmittag. Der Produktionsleiter plant die Produktion für nächste Woche. Er prüft Bestände, legt Aufträge an und das System ermittelt automatisch den Materialbedarf und löst Bestellungen aus. **Beteiligte BCs:** Production, Inventory, Procurement, Master Data ```mermaid sequenceDiagram actor PL as Produktionsleiter actor EK as Einkäufer participant PO as Production BC
(ProductionOrder) participant Recipe as Production BC
(Recipe) participant Stock as Inventory BC
(Stock) participant Demand as Procurement BC
(DemandPlan) participant Order as Procurement BC
(PurchaseOrder) participant MD as Master Data BC
(Supplier) Note over PL,MD: 📋 Freitag 14:00 – Wochenplanung PL->>Stock: Aktuelle Bestände prüfen Stock-->>PL: Bestandsübersicht: Note right of Stock: Schweineschulter: 94 kg (MHD 03.03)
Speck: 36 kg (MHD 05.03)
Rindfleisch: 80 kg (MHD 03.03)
Gewürze: 45 kg (MHD 15.08)
⚠️ Schweineschulter unter Mindestbestand (100 kg)! PL->>PO: Aufträge für nächste Woche anlegen Note right of PO: Mo: 200 kg Bratwurst (R-NB-001)
Di: 100 kg Leberwurst (R-LW-003)
Mi: 150 kg Wiener (R-WI-002)
Do: 80 kg Leberkäse (R-LK-005) PL->>PO: Alle Aufträge freigeben PO->>PO: 4× Status → RELEASED Note over PL,MD: 📊 Bedarfsermittlung PO->>Demand: Event: ProductionOrderReleased (4×) Demand->>Recipe: Materialbedarf aus Rezepten berechnen Note right of Recipe: Mo Bratwurst: 235 kg Rohstoffe
Di Leberwurst: 125 kg Rohstoffe
Mi Wiener: 180 kg Rohstoffe
Do Leberkäse: 100 kg Rohstoffe Demand->>Stock: Aktuelle Bestände abfragen Stock-->>Demand: Verfügbare Mengen Demand->>Demand: Bedarfsplan generieren Note right of Demand: Schweineschulter:
Bedarf: 320 kg
Bestand: 94 kg
Fehlmenge: 226 kg
+ Sicherheitsbestand: 50 kg
→ Bestellvorschlag: 276 kg

Speck:
Bedarf: 95 kg
Bestand: 36 kg
→ Bestellvorschlag: 109 kg

Rindfleisch:
Bedarf: 60 kg
Bestand: 80 kg
→ kein Bedarf ✅

Gewürze: → kein Bedarf ✅ Note over EK,MD: 🛒 Bestellungen aufgeben EK->>Demand: Bedarfsplan prüfen & genehmigen Note right of Demand: Status → APPROVED EK->>MD: Lieferantenkonditionen prüfen MD-->>EK: Müller Fleisch: Mindestbestellmenge 50 kg,
Lieferzeit 1 Tag, Preis 5,80€/kg EK->>Order: Bestellung anlegen Note right of Order: PurchaseOrder #PO-2026-048
Lieferant: Müller Fleisch
Pos 1: 280 kg Schweineschulter (≥ MBM)
Pos 2: 110 kg Speck
Lieferdatum: Montag 05:00
Gesamtwert: 2.262,00€
Status → ORDERED EK->>Order: Bestellung an Lieferant senden Note right of Order: Status → CONFIRMED
(Lieferant hat bestätigt) Note over PL,MD: ✅ Planung abgeschlossen
Mo-Lieferung und Produktion gesichert ``` --- ## 4. Rückruf-Szenario: Salmonellen beim Lieferanten **Szenario:** Mittwoch, 10:00 Uhr. Das Veterinäramt informiert, dass bei Lieferant „Müller Fleisch" Salmonellen in der Charge „MF-2026-0847" (Schweineschulter, geliefert am Montag) nachgewiesen wurden. Sofortmaßnahmen sind nötig. **Beteiligte BCs:** Quality, Production (Traceability), Inventory, Filiales ```mermaid sequenceDiagram actor Amt as Veterinäramt actor QM as Qualitätsmanager actor FL as Filialleiter (3 Filialen) participant Trace as Production BC
(TraceabilityService) participant Quality as Quality BC
(QualityHold) participant Stock as Inventory BC
(Stock) participant SM as Inventory BC
(StockMovement) participant Branch as Filiales BC Note over Amt,Branch: ☎️ 10:00 – Veterinäramt meldet Kontamination Amt->>QM: Salmonellen in Charge MF-2026-0847
(Schweineschulter, Müller Fleisch) Note over QM,Branch: 🔍 10:05 – Vorwärts-Tracing starten QM->>Trace: traceForward("MF-2026-0847") Trace->>Trace: Suche: Welche Chargen verwenden MF-2026-0847? Trace-->>QM: Betroffene Chargen ermittelt: Note right of Trace: Stufe 1 – Direkte Verwendung:
P-2026-02-24-001: 148 kg Nürnberger Bratwurst
P-2026-02-24-003: 95 kg Leberwurst

Stufe 2 – Weiterverarbeitung:
(keine – Endprodukte) QM->>SM: Wo ist die Ware jetzt? SM-->>QM: Bestandsbewegungen: Note right of SM: P-2026-02-24-001 (Bratwurst 148kg):
→ 50 kg Filiale Hauptstraße (verkauft: 12 kg)
→ 40 kg Filiale Marktplatz (verkauft: 8 kg)
→ 58 kg Zentrale (Lager, unverkauft)

P-2026-02-24-003 (Leberwurst 95kg):
→ 95 kg Zentrale (Lager, unverkauft)

Rohstoff-Rest:
→ 0 kg MF-2026-0847 (vollständig verbraucht) Note over QM,Branch: 🚨 10:15 – Sofortige Qualitätssperre QM->>Quality: QualityHold initiieren Note right of Quality: Grund: CONTAMINATION_SUSPECTED
Referenz: Veterinäramt-Meldung #VA-2026-0412 Quality->>Stock: Event: QualityHoldCreated (Bratwurst) Stock->>Stock: blockBatch(P-2026-02-24-001) Note right of Stock: Bratwurst: AVAILABLE → BLOCKED
Kann nicht mehr verkauft/entnommen werden Quality->>Stock: Event: QualityHoldCreated (Leberwurst) Stock->>Stock: blockBatch(P-2026-02-24-003) Note right of Stock: Leberwurst: AVAILABLE → BLOCKED Note over QM,Branch: 📞 10:20 – Filialen informieren QM->>Branch: Betroffene Filialen ermitteln Branch-->>QM: Filiale Hauptstraße, Filiale Marktplatz QM->>FL: SOFORT: Bratwurst Charge P-2026-02-24-001
aus Theke nehmen! Gesperrt wegen
Salmonellen-Verdacht Rohstoff. FL->>Stock: Ware aus Verkauf entfernt Note right of Stock: Physisch separiert & gekennzeichnet Note over QM,Branch: 📋 10:30 – Rückruf-Dokumentation QM->>Quality: Korrekturmaßnahmen dokumentieren Note right of Quality: 1. Alle betroffenen Chargen gesperrt ✅
2. Filialen informiert ✅
3. Ware aus Verkauf entfernt ✅
4. Veterinäramt Rückmeldung: 20 kg verkauft
5. Kundeninformation vorbereitet QM->>Quality: Bereits verkaufte Ware: Note right of Quality: 20 kg verkauft (12+8 kg)
→ Kundenrückruf-Aushang in Filialen
→ Social-Media-Warnung
→ Veterinäramt informiert Note over QM,Branch: 🧪 Nächste Tage – Laborergebnis abwarten alt Laborergebnis: Keine Salmonellen in Endprodukt Note over QM,Branch: ✅ Entwarnung actor Approver as Chef (≠ QM) QM->>Quality: Entwarnung dokumentieren Approver->>Quality: QualityHold freigeben (4-Augen) Note right of Quality: initiatedBy ≠ releasedBy ✅ Quality->>Stock: Event: QualityHoldReleased Stock->>Stock: unblockBatch(P-2026-02-24-001) Stock->>Stock: unblockBatch(P-2026-02-24-003) Note right of Stock: Status: BLOCKED → AVAILABLE
Ware wieder verkaufbar else Laborergebnis: Salmonellen bestätigt Note over QM,Branch: ❌ Vernichtung QM->>Quality: Ablehnung dokumentieren Quality->>Stock: Event: QualityHoldRejected Stock->>Stock: removeBatch(P-2026-02-24-001, FULL) Stock->>Stock: removeBatch(P-2026-02-24-003, FULL) Stock->>SM: StockMovement(WASTE, OUT) Note right of SM: 2× Vernichtungs-Buchungen
Grund: Salmonellen-Kontamination
Referenz: VA-2026-0412 end ``` --- ## 5. Qualitätsproblem in der Produktion **Szenario:** Während der Bratwurstproduktion misst der Metzgermeister bei der Kerntemperaturprüfung nach dem Brühen 65°C statt der geforderten mindestens 72°C. Das CCP (Critical Control Point) ist nicht erreicht. **Beteiligte BCs:** Quality, Production, Inventory ```mermaid sequenceDiagram actor MM as Metzgermeister actor QM as Qualitätsmanager actor Chef as Betriebsleiter participant Batch as Production BC
(Batch) participant QC as Quality BC
(ProcessParameter) participant QH as Quality BC
(QualityHold) participant Stock as Inventory BC Note over MM,Stock: 🌡️ 08:45 – CCP-Messung nach Brühvorgang MM->>QC: Kerntemperatur messen Note right of QC: CCP: CORE_TEMPERATURE
Charge: P-2026-02-24-002 (Wiener)
Gemessen: 65°C
Akzeptabler Bereich: 72–78°C
Status: OUT_OF_SPEC ❌ QC->>QC: DeviationRecorded Note right of QC: Abweichung: -7°C unter Minimum Note over MM,Stock: 🚨 Automatische Eskalation QC->>QH: QualityHold automatisch erstellt Note right of QH: Grund: CCP_DEVIATION
Charge: P-2026-02-24-002
Details: Kerntemp 65°C < 72°C Minimum MM->>QM: Abweichung melden Note over QM,Stock: 🔧 Korrekturmaßnahme QM->>QH: Korrekturmaßnahme festlegen Note right of QH: Maßnahme: Erneutes Brühen
auf 75°C Kerntemperatur
Verantwortlich: Metzgermeister
Frist: sofort MM->>Batch: Erneut brühen (Prozess wiederholen) MM->>QC: Zweite Kerntemperatur-Messung Note right of QC: CCP: CORE_TEMPERATURE
Gemessen: 74°C
Akzeptabler Bereich: 72–78°C
Status: IN_SPEC ✅ QM->>QH: Korrekturmaßnahme dokumentieren Note right of QH: Ergebnis: Erfolgreich nachgebrüht
Zweitmessung: 74°C ✅ Chef->>QH: QualityHold freigeben Note right of QH: 4-Augen: QM initiiert, Chef gibt frei ✅ Note over MM,Stock: ✅ Produktion kann fortgesetzt werden MM->>Batch: Charge abschließen Note right of Batch: Alle CCP-Werte dokumentiert
Korrekturmaßnahme nachvollziehbar
Status → COMPLETED Batch->>Stock: Event: BatchCompleted Note right of Stock: Ware eingebucht
Audit-Trail lückenlos ``` --- ## 6. MHD-Management: Ablaufende Ware & Abverkauf **Szenario:** Der tägliche System-Job (6:00 Uhr) erkennt, dass 25 kg Leberwurst morgen ablaufen und 40 kg Aufschnitt in 2 Tagen. Das Team muss reagieren. **Beteiligte BCs:** Inventory, (Sales, Labeling – noch nicht implementiert, daher vereinfacht) ```mermaid sequenceDiagram participant Cron as Täglicher Scheduler
(06:00 Uhr) participant Stock as Inventory BC
(Stock) actor VK as Verkaufsleiter actor Theke as Theken-Mitarbeiter participant SM as Inventory BC
(StockMovement) Note over Cron,SM: ⏰ 06:00 – Tägliche MHD-Prüfung Cron->>Stock: markExpiredBatches(today = 2026-02-24) Stock->>Stock: Alle Chargen prüfen Note right of Stock: ❌ EXPIRED (MHD überschritten):
LW-Charge P-2026-02-19-004: 3 kg Weißwurst
(MHD war 2026-02-23 → gestern abgelaufen)

⚠️ EXPIRING_SOON (innerhalb MinimumShelfLife):
LW-Charge P-2026-02-20-002: 25 kg Leberwurst
(MHD 2026-02-25 → morgen, MinShelfLife=2d)

AS-Charge P-2026-02-21-001: 40 kg Aufschnitt
(MHD 2026-02-26 → übermorgen) Stock-->>Stock: Events publiziert: Note right of Stock: BatchExpired(Weißwurst, 3kg)
BatchExpiringSoon(Leberwurst, 25kg, 1 Tag)
BatchExpiringSoon(Aufschnitt, 40kg, 2 Tage) Note over VK,SM: 📊 06:30 – Verkaufsleiter prüft Warnungen VK->>Stock: MHD-Warnungen abrufen Stock-->>VK: 3 Positionen mit Handlungsbedarf Note over VK,SM: 🗑️ Abgelaufene Ware entsorgen VK->>Theke: Weißwurst 3 kg entsorgen Theke->>Stock: removeBatch(P-2026-02-19-004, 3kg) Stock->>SM: StockMovement(WASTE, OUT) Note right of SM: Grund: MHD abgelaufen
3 kg Weißwurst vernichtet Note over VK,SM: 💰 Bald ablaufende Ware rabattieren VK->>Theke: Leberwurst 25 kg: 30% Rabatt-Etikett Note right of Theke: Preisreduzierung im Verkauf
"Heute 30% günstiger" VK->>Theke: Aufschnitt 40 kg: Aktionsplatzierung Note right of Theke: Sichtbare Platzierung in Theke
Ggf. morgen rabattieren Note over VK,SM: 🔄 Bei Verkauf normale Entnahme (FEFO) Note right of SM: FEFO stellt automatisch sicher,
dass älteste Chargen zuerst
entnommen werden – auch
im regulären Verkauf ``` --- ## 7. Inventur: Monatliche Bestandszählung **Szenario:** Letzter Freitag im Monat. Inventur im Kühlraum 1 (Rohstoffe). Der Lagermitarbeiter zählt, der Betriebsleiter genehmigt. Abweichungen werden automatisch ausgeglichen. **Beteiligte BCs:** Inventory ```mermaid sequenceDiagram actor Lager as Lagermitarbeiter (Zähler) actor Chef as Betriebsleiter (Prüfer) participant IC as Inventory BC
(InventoryCount) participant Stock as Inventory BC
(Stock) participant SM as Inventory BC
(StockMovement) Note over Lager,SM: 📋 Freitag 16:00 – Inventur starten Lager->>IC: Inventur anlegen für KÜHLRAUM_1 IC->>Stock: Aktuelle Soll-Bestände abrufen Stock-->>IC: Bestände nach Artikel: Note right of IC: Soll-Bestände auto-befüllt:
Schweineschulter: 94,0 kg
Rindfleisch: 80,0 kg
Speck: 36,0 kg
Hackfleisch: 22,5 kg
Status → COUNTING Note over Lager,SM: 📦 16:15 – Physische Zählung Lager->>IC: Schweineschulter: 91,5 kg (Ist) Note right of IC: Soll: 94,0 kg → Differenz: -2,5 kg Lager->>IC: Rindfleisch: 80,0 kg (Ist) Note right of IC: Soll: 80,0 kg → Differenz: 0 kg ✅ Lager->>IC: Speck: 37,2 kg (Ist) Note right of IC: Soll: 36,0 kg → Differenz: +1,2 kg Lager->>IC: Hackfleisch: 20,0 kg (Ist) Note right of IC: Soll: 22,5 kg → Differenz: -2,5 kg Note over Lager,SM: ✍️ 16:45 – Zählung einreichen Lager->>IC: Zählung einreichen (submitForApproval) Note right of IC: Status → SUBMITTED
Zähler: Lagermitarbeiter Note over Chef,SM: 👀 17:00 – 4-Augen-Prüfung Chef->>IC: Abweichungen prüfen Note right of IC: Abweichungen:
Schweineschulter: -2,5 kg (Schwund?)
Speck: +1,2 kg (Wiegefehler?)
Hackfleisch: -2,5 kg (nicht erfasste Entnahme?) Chef->>IC: Inventur genehmigen Note right of IC: Prüfung: Chef ≠ Lagermitarbeiter ✅ (4-Augen)
Status → COMPLETED Note over Chef,SM: ⚖️ Automatische Ausgleichsbuchungen IC->>SM: Ausgleich Schweineschulter Note right of SM: StockMovement(ADJUSTMENT, OUT)
-2,5 kg Schweineschulter
Grund: Inventurdifferenz IC->>SM: Ausgleich Speck Note right of SM: StockMovement(ADJUSTMENT, IN)
+1,2 kg Speck
Grund: Inventurdifferenz IC->>SM: Ausgleich Hackfleisch Note right of SM: StockMovement(ADJUSTMENT, OUT)
-2,5 kg Hackfleisch
Grund: Inventurdifferenz IC->>Stock: Bestände korrigiert Note right of Stock: Schweineschulter: 94,0 → 91,5 kg
Rindfleisch: 80,0 kg (unverändert)
Speck: 36,0 → 37,2 kg
Hackfleisch: 22,5 → 20,0 kg Note over Lager,SM: ✅ 17:10 – Inventur abgeschlossen
Alle Bewegungen im Audit-Trail ``` --- ## 8. Zentrale Produktion & Filialbelieferung **Szenario:** Die Zentrale (Hauptfiliale mit Produktion) stellt morgens 300 kg Bratwurst her und verteilt sie an 3 Filialen. Der Transport muss chargengenau dokumentiert werden für die Rückverfolgbarkeit. **Beteiligte BCs:** Production, Inventory, Filiales ```mermaid sequenceDiagram actor PL as Produktionsleiter (Zentrale) actor FL_A as Filialleiter Hauptstraße actor FL_B as Filialleiter Marktplatz actor Fahrer as Fahrer/Auslieferer participant Batch as Production BC
(Batch) participant DP as Filiales BC
(DistributionPlan) participant IBT as Filiales BC
(InterBranchTransfer) participant Stock_Z as Inventory BC
(Stock – Zentrale) participant Stock_A as Inventory BC
(Stock – Hauptstraße) participant Stock_B as Inventory BC
(Stock – Marktplatz) participant SM as Inventory BC
(StockMovement) Note over PL,SM: 🏭 06:00-09:00 – Zentrale Produktion PL->>Batch: Charge P-2026-02-24-001 abschließen Note right of Batch: 300 kg Bratwurst
MHD: 2026-03-01
Status → COMPLETED Batch->>Stock_Z: Event: BatchCompleted Stock_Z->>Stock_Z: addBatch(P-2026-02-24-001, 300 kg) Note right of Stock_Z: 300 kg im Zentrallager Note over PL,SM: 📦 09:15 – Verteilplan erstellen PL->>DP: Verteilplan anlegen Note right of DP: Charge: P-2026-02-24-001 (300 kg)
Produzierende Filiale: Zentrale

Verteilung:
→ Hauptstraße: 100 kg
→ Marktplatz: 80 kg
→ Verbleibt Zentrale: 120 kg

Summe: 300 kg ✅ Note over PL,SM: 🚚 09:30 – Transfers anlegen DP->>IBT: Transfer Zentrale → Hauptstraße Note right of IBT: 100 kg Bratwurst
Charge: P-2026-02-24-001
MHD: 2026-03-01
Status → REQUESTED DP->>IBT: Transfer Zentrale → Marktplatz Note right of IBT: 80 kg Bratwurst
Charge: P-2026-02-24-001
MHD: 2026-03-01
Status → REQUESTED FL_A->>IBT: Transfer genehmigen Note right of IBT: Status → APPROVED FL_B->>IBT: Transfer genehmigen Note over Fahrer,SM: 🚚 10:00 – Auslieferung Fahrer->>IBT: Versand bestätigen (beide) IBT->>Stock_Z: Event: TransferShipped Stock_Z->>Stock_Z: removeBatch(P-2026-02-24-001, 100 kg) Stock_Z->>Stock_Z: removeBatch(P-2026-02-24-001, 80 kg) Stock_Z->>SM: 2× StockMovement(INTER_BRANCH_TRANSFER, OUT) Note right of Stock_Z: Zentrale: 300 → 120 kg Note over Fahrer,SM: 📍 10:30 – Ankunft Hauptstraße FL_A->>IBT: Empfang bestätigen (98 kg erhalten) Note right of IBT: Geplant: 100 kg
Empfangen: 98 kg
(2 kg Transportverlust)
Status → RECEIVED IBT->>Stock_A: Event: TransferReceived Stock_A->>Stock_A: addBatch(P-2026-02-24-001, 98 kg) Stock_A->>SM: StockMovement(INTER_BRANCH_TRANSFER, IN) Note right of Stock_A: Hauptstraße: 0 → 98 kg Bratwurst
Gleiche Charge-ID! Rückverfolgbar. Note over Fahrer,SM: 📍 11:00 – Ankunft Marktplatz FL_B->>IBT: Empfang bestätigen (80 kg erhalten) Note right of IBT: Geplant: 80 kg, Empfangen: 80 kg ✅ IBT->>Stock_B: Event: TransferReceived Stock_B->>Stock_B: addBatch(P-2026-02-24-001, 80 kg) Stock_B->>SM: StockMovement(INTER_BRANCH_TRANSFER, IN) Note right of Stock_B: Marktplatz: 0 → 80 kg Bratwurst DP->>DP: Alle Lieferungen abgeschlossen Note right of DP: Status → COMPLETED Note over PL,SM: ✅ Ergebnis: 300 kg verteilt Note right of SM: Zentrale: 120 kg
Hauptstraße: 98 kg (2 kg Schwund)
Marktplatz: 80 kg

Chargen-ID überall identisch!
→ Bei Rückruf: alle 3 Filialen
sofort identifizierbar ``` --- ## Workflow-Zusammenfassung | # | Workflow | Beteiligte BCs | Status | |---|---------|----------------|--------| | 1 | Wareneingang Frischfleisch | Procurement, Quality, Inventory | Quality/Procurement: geplant, Inventory: implementiert | | 2 | Tagesproduktion Bratwurst | Production, Inventory, Labeling | Production: teilw. impl., Inventory: implementiert, Labeling: geplant | | 3 | Wochenplanung & Bedarfsermittlung | Production, Inventory, Procurement | Procurement: geplant | | 4 | Rückruf-Szenario | Quality, Production, Inventory, Filiales | Tracing: offen (#43/#44), Quality: geplant | | 5 | Qualitätsproblem Produktion | Quality, Production | Quality: geplant | | 6 | MHD-Management | Inventory | Implementiert (#10, #11) | | 7 | Inventur | Inventory | Offen (#17–#20) | | 8 | Zentrale Produktion & Filialbelieferung | Production, Inventory, Filiales | Filiales: geplant | ### Legende | Symbol | Bedeutung | |--------|-----------| | `actor` | Menschlicher Akteur mit Rolle | | `participant` | Bounded Context + Aggregate | | `Note` | Fachliche Details, Validierungen, Berechnungen | | `alt/else` | Entscheidungspunkt | | `→ Event:` | Domain Event zwischen BCs | | ✅ | Prüfung bestanden / Aktion erfolgreich | | ❌ | Prüfung fehlgeschlagen / Fehler | | ⚠️ | Warnung / Handlungsbedarf |