# Bounded Contexts (Kontextgrenzen) & Context Map

**Datum:** 2026-02-17

## Context Map (Kontextkarte)

```mermaid
---
config:
  theme: neutral
  look: classic
  layout: elk
  themeVariables:
    background: "#f8fafc"
  class:
    hideEmptyMembersBox: true
---
graph TB
    subgraph CORE["⚡ KERN-DOMÄNE"]
        Produktion["<b>Produktion</b><br/>Rezept, Charge,<br/>Ausbeute, Produktionsauftrag"]
        Qualitaet["<b>Qualität</b><br/>(HACCP/QM)<br/>Temperaturprotokolle,<br/>Reinigung, Schulung,<br/>Wartung"]
        Deklaration["<b>Deklaration</b><br/>Allergene, Nährwerte,<br/>Etiketten, Qualitätssiegel"]
        Bestand["<b>Bestandsführung</b><br/>Lagerbestände, Chargen-Tracking,<br/>Rückverfolgbarkeit, MHD, FEFO,<br/>Lagerorte"]
        Beschaffung["<b>Beschaffung</b><br/>Bedarfsplanung,<br/>Bestellungen,<br/>Wareneingang,<br/>Qualitätsprüfung"]
        Filialen["<b>Filialen</b><br/>Standorte, Interfilial-Transfer,<br/>Zentrale Produktion,<br/>Verteilung"]

        Produktion -->|Rezeptdaten| Deklaration
        Produktion -->|Verbraucht/Produziert| Bestand
        Qualitaet -->|Prüft| Bestand
        Bestand -->|Beliefert| Beschaffung
        Bestand -->|Transfers| Filialen
    end

    subgraph SUPPORTING["🔧 UNTERSTÜTZENDE DOMÄNE"]
        Stammdaten["<b>Stammdaten</b><br/>Artikel, Kunden,<br/>Lieferanten"]
        Verkauf["<b>Verkauf</b><br/>Aufträge, Rechnungen,<br/>Lieferscheine"]
        Waagen["<b>Waagen-Integration</b><br/>Synchronisation,<br/>Bondaten, Etikettendruck"]

        Stammdaten -->|Stellt Artikel bereit| Verkauf
        Waagen -->|Bondaten| Verkauf
    end

    subgraph GENERIC["📊 GENERISCHE SUBDOMÄNEN"]
        Reporting["<b>Reporting</b><br/>Analysen, Statistiken,<br/>Dashboards"]
        Dokumentenarchiv["<b>Dokumentenarchiv</b><br/>(GoBD)<br/>Audit Trail,<br/>Revisionssicher"]
        Benutzerverwaltung["<b>Benutzerverwaltung</b><br/>Rollen, Berechtigungen"]
    end

    Stammdaten -.->|Stellt Artikel bereit| CORE
    Filialen -.->|Koordiniert Mehrfilialen| SUPPORTING
    CORE -.->|Konsumiert Daten| GENERIC
    SUPPORTING -.->|Konsumiert Daten| GENERIC

```

---

## Bounded Context Details (Kontextdetails)

### Kern-Domäne (7 BCs)

#### 1. Produktions-Kontext
- **Verantwortung:** Rezepturverwaltung, Produktionsplanung, Chargen-Erzeugung
- **Aggregate:** Rezept, Charge, Produktionsauftrag
- **Upstream:** Stammdaten (Artikelkatalog)
- **Downstream:** Deklaration (Rezeptdaten), Bestandsführung (Bestandsbewegungen)

#### 2. Qualitäts-Kontext (HACCP/QM)
- **Verantwortung:** HACCP-Compliance, Qualitätsmanagement, Audit-Vorbereitung
- **Aggregate:** Temperaturprotokoll, Reinigungsnachweis, Wareneingangsprüfung, Schulungsnachweis, Wartungsprotokoll
- **Upstream:** Beschaffung (Wareneingangsprüfung), Stammdaten (Lieferanten, Mitarbeiter)
- **Downstream:** Reporting (HACCP-Berichte), Dokumentenarchiv (Audit-Nachweise)

#### 3. Deklarations-Kontext
- **Verantwortung:** Automatische Berechnung von Nährwerten und Allergenen, Etikettengenerierung
- **Aggregate:** Produktetikett, Allergene-Matrix
- **Upstream:** Produktion (Rezeptdaten für Berechnungen)
- **Downstream:** Waagen-Integration (Etikettendruck)

#### 4. Bestandsführungs-Kontext
- **Verantwortung:** Chargen-basierte Bestandsführung, Rückverfolgbarkeit, MHD-Tracking
- **Aggregate:** Bestand, Bestandsbewegung
- **Upstream:** Produktion (Produktionsausstoß), Beschaffung (Wareneingang), Verkauf (verkaufte Artikel)
- **Downstream:** Beschaffung (Lagerbestände für Bedarfsplanung), Reporting (Bestandsberichte)

#### 5. Beschaffungs-Kontext
- **Verantwortung:** Bedarfsplanung, Bestellwesen, Wareneingangskontrolle, Lieferanten-QM
- **Aggregate:** Bestellung, Wareneingang, Bedarfsplan
- **Upstream:** Bestandsführung (aktueller Bestand), Produktion (Produktionsaufträge), Stammdaten (Lieferanten, Artikel)
- **Downstream:** Qualität (Wareneingangsprüfung), Bestandsführung (Bestandszugang)

#### 6. Filialen-Kontext
- **Verantwortung:** Mehrfilialen-Management, Interfilial-Transfers, zentrale Produktion
- **Aggregate:** Filiale, Interfilial-Transfer, Verteilungsplan
- **Upstream:** Alle Kern-BCs (koordiniert Mehrfilialen-Operationen)
- **Downstream:** Bestandsführung (Interfilial-Bestandsbewegungen), Produktion (filialspezifische Produktion)

---

### Supporting Domain (3 BCs)

#### 8. Master Data BC
- **Verantwortung:** Stammdatenverwaltung für Artikel, Lieferanten, Kunden
- **Aggregates:** Article, Supplier, Customer
- **Downstream:** Alle BCs nutzen Master Data als Referenz

#### 9. Sales BC
- **Verantwortung:** Auftragserfassung, Rechnungsstellung, Lieferscheine
- **Aggregates:** Order, Invoice, DeliveryNote
- **Upstream:** Master Data (customers, articles), Inventory (stock availability)
- **Downstream:** Inventory (sales deduct stock), Reporting (sales statistics)

#### 10. Scale Integration BC
- **Verantwortung:** Waagen/Kassen-Anbindung, Bondaten-Import, Etikettendruck
- **Aggregates:** ScaleSyncJob, BondDataImport
- **Upstream:** Master Data (article sync), Labeling (label templates)
- **Downstream:** Inventory (bond data → stock movements), Sales (sales data)

---

### Generic Subdomains (3 BCs)

#### 11. Reporting BC
- **Verantwortung:** Auswertungen, Statistiken, Dashboards
- **Upstream:** Alle BCs liefern Daten für Reports
- **Keine Aggregates** (Read-only, CQRS Query Side)

#### 12. Document Archive BC (GoBD)
- **Verantwortung:** Revisionssichere Dokumentenarchivierung
- **Aggregates:** Document, AuditLog
- **Upstream:** Quality (HACCP documents), Sales (invoices), Procurement (delivery notes)

#### 13. User Management BC
- **Verantwortung:** Benutzer, Rollen, Permissions
- **Aggregates:** User, Role
- **Downstream:** Alle BCs nutzen User Management für Autorisierung

---

## Context Relationships

### Partnership
- **Production ↔ Inventory:** Enge Zusammenarbeit bei Chargen-Tracking
- **Procurement ↔ Quality:** Wareneingangskontrolle gemeinsam

### Customer-Supplier
- **Production → Labeling:** Production liefert Rezeptdaten
- **Master Data → alle BCs:** Master Data liefert Stammdaten

### Conformist
- **Labeling → Production:** Labeling übernimmt Recipe-Struktur 1:1
- **Reporting → alle BCs:** Reporting passt sich an alle Datenmodelle an

### Anti-Corruption Layer
- **Scale Integration → Inventory:** ACL übersetzt Bondaten in StockMovements
- **FIBU Integration → Sales:** ACL übersetzt zu DATEV-Format

---

## Integration Patterns

### Event-Driven
- **Production.BatchCompleted** → Inventory (stock in)
- **Procurement.GoodsReceived** → Inventory (stock in)
- **Sales.ItemSold** → Inventory (stock out)

### Request-Response
- **Labeling → Production:** GET /recipes/{id} für Nährwertberechnung
- **Procurement → Inventory:** GET /stock/{articleId} für Bedarfsplanung

### Shared Database (Anti-Pattern, vermeiden!)
- ❌ Nicht verwenden - jeder BC hat eigene Datenbank

---

## Deployment Strategy

### Monolith First (MVP)
Alle BCs in einer Anwendung:
```
effigenix-erp/
├── domain/
│   ├── production/
│   ├── quality/
│   ├── labeling/
│   ├── inventory/
│   ├── procurement/
│   └── filiales/
├── application/
└── infrastructure/
```

### Microservices Later (nach MVP)
Extraktion von BCs in Services:
```
production-service
quality-service
inventory-service
procurement-service
filiales-service
master-data-service
sales-service
scale-integration-service
```

**Empfohlene Reihenfolge:**
1. Scale Integration (eigener Prozess wegen Hardware-Anbindung)
2. Reporting (Read-only, CQRS)
3. Inventory (hohe Last)
4. Production (geschäftskritisch, isolieren)
