mirror of
https://github.com/s-frick/effigenix.git
synced 2026-03-28 15:29:34 +01:00
docs(ddd): detaillierte Domain Models für Production, Quality und Inventory BC
- Production BC: Aggregates (Recipe, Batch, ProductionOrder) mit Invarianten, Drafts, Status-Maschinen, Domain Events und Chargen-Genealogie - Quality BC: 9 Aggregates (TemperatureLog, CleaningPlan/Record, GoodsReceiptInspection, SampleRecord, TrainingRecord, MaintenanceRecord, QualityHold, ProcessParameter) mit HACCP-Compliance - Inventory BC: 4 Aggregates (Stock, StockMovement, InventoryCount, StorageLocation) mit FEFO, Reservierungen mit Priorität, Vier-Augen-Prinzip bei Inventur - Ubiquitous Language: Inventory-Sektion von 11 auf 27 Begriffe erweitert - Alte deutsche Datei 05-qualitaets-kontext.md entfernt (ersetzt durch 05-quality-bc.md)
This commit is contained in:
parent
2ace5be394
commit
fb735702cf
6 changed files with 4101 additions and 694 deletions
|
|
@ -11,14 +11,28 @@ Diese Datei definiert die **Ubiquitous Language** für jeden Bounded Context. Di
|
|||
| Begriff (DE) | Begriff (EN) | Typ | Definition |
|
||||
|--------------|--------------|-----|------------|
|
||||
| Rezept | Recipe | Aggregate | Mehrstufige Anleitung zur Herstellung eines Produkts aus Rohstoffen und Zwischenprodukten |
|
||||
| Zutat | Ingredient | Entity | Rohstoff oder Zwischenprodukt, das in einem Rezept verwendet wird |
|
||||
| Ausbeute | Yield | Value Object | Verhältnis zwischen Input (Rohmaterial) und Output (Endprodukt) nach Verarbeitungsverlusten, in Prozent |
|
||||
| Charge | Batch | Aggregate | Eindeutig identifizierte Produktionseinheit mit Datum, Rezept, Menge und verwendeten Rohstoffchargen |
|
||||
| Produktionsauftrag | Production Order | Aggregate | Auftrag zur Herstellung einer bestimmten Menge eines Produkts nach Rezept |
|
||||
| Rückverfolgbarkeit | Traceability | Concept | Lückenlose Dokumentation von Rohstoff-Charge → Produktions-Charge → Verkauf |
|
||||
| Zwischenprodukt | Intermediate Product | Concept | Produkt, das in Rezept A hergestellt wird und als Zutat in Rezept B verwendet wird |
|
||||
| Ausschuss | Waste | Value Object | Menge an Material, die während Produktion verloren geht oder unbrauchbar ist |
|
||||
| Rezeptur-Version | Recipe Version | Value Object | Versionsnummer eines Rezepts, um Änderungen nachvollziehbar zu machen |
|
||||
| Zutat | Ingredient | Entity | Rohstoff oder Zwischenprodukt, das in einem Rezept verwendet wird. Position bestimmt die Reihenfolge |
|
||||
| Produktionsschritt | ProductionStep | Entity | Einzelner Arbeitsschritt in einer Rezeptur mit optionaler Dauer und Temperaturangabe |
|
||||
| Rezepttyp | RecipeType | Value Object | Klassifizierung: RAW_MATERIAL, INTERMEDIATE (Zwischenprodukt) oder FINISHED_PRODUCT (Endprodukt) |
|
||||
| Ausbeute | YieldPercentage | Value Object | Verhältnis Input→Output in % (1-200%). >100% bei Pökel-/Spritzprozessen. Bei 80% Ausbeute braucht man 125kg Input für 100kg Output |
|
||||
| Haltbarkeitsdauer | ShelfLifeDays | Value Object | Anzahl Tage ab Produktionsdatum bis MHD. Definiert im Rezept, angewandt bei Chargen-Erzeugung |
|
||||
| Unter-Rezept | SubRecipe | Concept | Verweis auf ein anderes Rezept (INTERMEDIATE), das als Zutat verwendet wird. Ermöglicht verschachtelte Rezepturen |
|
||||
| Rezeptur-Version | Recipe Version | Value Object | Versionsnummer eines Rezepts. Neue Version = neues Recipe-Objekt, altes wird archiviert |
|
||||
| Charge | Batch | Aggregate | Eindeutig identifizierte Produktionseinheit mit Chargennummer, Datum, Rezept, Mengen und Genealogie |
|
||||
| Chargennummer | BatchNumber | Value Object | Formatierte eindeutige Kennung einer Charge (Format: "P-YYYY-MM-DD-XXX"). Generiert über BatchNumberGenerator |
|
||||
| Verbrauch | Consumption | Entity | Dokumentation, dass eine Input-Charge (Rohstoff/Zwischenprodukt) in einer Produktions-Charge verwendet wurde. Bildet die Chargen-Genealogie |
|
||||
| Chargen-Genealogie | Batch Genealogy | Concept | Gesamtheit aller Consumption-Beziehungen einer Charge. Ermöglicht Vorwärts- und Rückwärts-Tracing |
|
||||
| Vorwärts-Tracing | Forward Tracing | Concept | Ausgehend von einer Rohstoff-Charge: Welche Endprodukt-Chargen sind betroffen? Kritisch für Rückruf-Szenarien |
|
||||
| Rückwärts-Tracing | Backward Tracing | Concept | Ausgehend von einer Endprodukt-Charge: Welche Rohstoff-Chargen wurden verwendet? |
|
||||
| Rückverfolgbarkeit | Traceability | Concept | Lückenlose Dokumentation der Kette: Rohstoff-Charge → Produktions-Charge → Verkauf. HACCP-Pflicht |
|
||||
| Zwischenprodukt | Intermediate Product | Concept | Produkt, das in Rezept A hergestellt wird und als Zutat in Rezept B verwendet wird (z.B. Brät, Gewürzmischung) |
|
||||
| Ausschuss | Waste | Value Object | Menge an Material, die während Produktion verloren geht (Schwund, Knochen, Fett-Trimmen) |
|
||||
| Produktionsauftrag | ProductionOrder | Aggregate | Geplante zukünftige Produktion mit Rezept, Menge, Termin und Priorität. Erzeugt bei Start eine Charge |
|
||||
| Priorität | Priority | Value Object | Dringlichkeit eines Produktionsauftrags: LOW, NORMAL, HIGH, URGENT |
|
||||
| Freigabe | Release | Concept | Übergang eines Produktionsauftrags von PLANNED zu RELEASED. Signalisiert, dass Material verfügbar ist |
|
||||
| Catch-Weight | Dual Quantity | Concept | Doppelte Mengenführung für Artikel, die stückweise UND gewichtsweise erfasst werden (z.B. "10 Stück à 2,3 kg") |
|
||||
| MHD | BestBeforeDate | Value Object | Mindesthaltbarkeitsdatum einer Charge. Berechnet: ProductionDate + Recipe.ShelfLifeDays |
|
||||
| Materialbedarf | Material Requirement | Concept | Aus Rezeptur berechnete Rohstoffmenge unter Berücksichtigung der Ausbeute. Ausgelöst durch ProductionOrderReleased |
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -28,16 +42,33 @@ Diese Datei definiert die **Ubiquitous Language** für jeden Bounded Context. Di
|
|||
|--------------|--------------|-----|------------|
|
||||
| HACCP | HACCP | Concept | Hazard Analysis Critical Control Points - systematische Präventivmaßnahmen für Lebensmittelsicherheit |
|
||||
| Kritischer Kontrollpunkt | Critical Control Point (CCP) | Concept | Stelle im Prozess, an der Kontrolle notwendig ist, um Gefahren zu vermeiden |
|
||||
| Temperaturprotokoll | Temperature Log | Aggregate | Dokumentierte Temperaturmessung an kritischem Punkt (Kühlraum, Theke) mit Grenzwerten |
|
||||
| Reinigungsnachweis | Cleaning Record | Aggregate | Dokumentation einer durchgeführten Reinigung mit Datum, Person, Checkliste |
|
||||
| Reinigungsplan | Cleaning Plan | Aggregate | Vordefinierter Plan mit Intervallen und Checklisten für Reinigungsaufgaben |
|
||||
| Wareneingangskontrolle | Goods Receipt Inspection | Aggregate | Prüfung von Temperatur, MHD, Sichtkontrolle, Dokumenten bei Warenanlieferung |
|
||||
| Schulungsnachweis | Training Record | Aggregate | Zertifikat oder Nachweis einer absolvierten Schulung (HACCP, Hygiene) mit Gültigkeitsdatum |
|
||||
| Wartungsprotokoll | Maintenance Record | Aggregate | Dokumentation von Gerätewartungen (planmäßig oder Störung) mit Befund |
|
||||
| Messwert | Measurement | Value Object | Gemessener Wert mit Einheit (z.B. Temperatur in °C) |
|
||||
| Grenzwert | Critical Limit | Value Object | Minimal-/Maximalwert für CCP (z.B. Kühlraum: 2-7°C) |
|
||||
| Temperaturprotokoll | TemperatureLog | Aggregate | Standortbezogene Temperaturmessung an kritischem Punkt (Kühlraum, Theke) mit Grenzwertüberwachung |
|
||||
| Messpunkt | MeasurementPoint | VO (Enum) | Physischer Ort der Messung: COLD_ROOM, FREEZER, DISPLAY_COUNTER, PRODUCTION_ROOM |
|
||||
| Temperatur | Temperature | Value Object | Temperaturwert in °C mit physikalisch plausiblem Bereich (-50 bis +50) |
|
||||
| Kritischer Grenzwert | CriticalLimit | Value Object | Min-/Max-Paar für einen CCP (z.B. Kühlraum 2-7°C). Mindestens ein Limit muss gesetzt sein |
|
||||
| Reinigungsplan | CleaningPlan | Aggregate | Vorlage für Reinigungsaufgaben mit Bereich, Intervall und Checklisten-Template |
|
||||
| Reinigungsintervall | CleaningInterval | VO (Enum) | Turnus einer Reinigung: DAILY, WEEKLY, MONTHLY |
|
||||
| Reinigungsnachweis | CleaningRecord | Aggregate | Durchgeführte Reinigung gegen einen CleaningPlan mit abgehakter Checkliste |
|
||||
| Checklisten-Eintrag | ChecklistItem | Entity | Einzelner Prüfpunkt in einer Reinigung oder Inspektion |
|
||||
| Wareneingangskontrolle | GoodsReceiptInspection | Aggregate | Mehrteilige Prüfung bei Warenanlieferung (Temperatur, Sicht, MHD, Dokumente) |
|
||||
| Temperaturprüfung | TemperatureCheck | Value Object | Temperaturmessung bei Wareneingang mit Soll-/Ist-Vergleich |
|
||||
| Sichtkontrolle | VisualCheck | Value Object | Prüfung von Verpackung, Farbe, Geruch bei Wareneingang |
|
||||
| MHD-Prüfung | ShelfLifeCheck | Value Object | Prüfung des Mindesthaltbarkeitsdatums gegen Mindest-Restlaufzeit |
|
||||
| Dokumentenprüfung | DocumentCheck | Value Object | Prüfung von Lieferschein, Veterinärbescheinigung, Zertifikaten |
|
||||
| Probenentnahme | SampleRecord | Aggregate | Probenentnahme mit Analyseergebnis, Charge und Prüfmethode |
|
||||
| Probenart | SampleType | VO (Enum) | Klassifizierung: MICROBIOLOGICAL, CHEMICAL, PHYSICAL, SENSORY |
|
||||
| Analyseergebnis | AnalysisResult | Value Object | Messergebnis einer Probe mit Wert, Einheit und Interpretation |
|
||||
| Schulungsnachweis | TrainingRecord | Aggregate | Nachweis einer absolvierten Schulung mit Gültigkeitsdatum und Trainer |
|
||||
| Schulungsart | TrainingType | VO (Enum) | Klassifizierung: HACCP, HYGIENE, FOOD_SAFETY, EQUIPMENT_OPERATION, FIRST_AID |
|
||||
| Wartungsprotokoll | MaintenanceRecord | Aggregate | Dokumentation von Gerätewartungen (planmäßig, Reparatur, Kalibrierung, Inspektion) |
|
||||
| Wartungsart | MaintenanceType | VO (Enum) | SCHEDULED, REPAIR, CALIBRATION, INSPECTION |
|
||||
| Qualitätssperre | QualityHold | Aggregate | Sperre einer Charge bei Qualitätsproblemen. Block/Release-Pattern mit Vier-Augen-Prinzip |
|
||||
| Sperrgrund | HoldReason | VO (Enum) | TEMPERATURE_DEVIATION, SAMPLE_FAILED, CONTAMINATION_SUSPECTED, PROCESS_DEVIATION, CUSTOMER_COMPLAINT, REGULATORY |
|
||||
| Korrekturmaßnahme | CorrectiveAction | Entity | Maßnahme zur Behebung einer Abweichung im Rahmen eines QualityHold |
|
||||
| Prozessparameter | ProcessParameter | Aggregate | Batch-bezogene CCP-Messwerte (Kerntemperatur, pH, aw-Wert, Metalldetektion) |
|
||||
| CCP-Typ | CcpType | VO (Enum) | CORE_TEMPERATURE, PH_VALUE, WATER_ACTIVITY, METAL_DETECTION |
|
||||
| Abweichung | Deviation | Concept | Überschreitung eines Grenzwerts oder Nichteinhaltung eines Verfahrens |
|
||||
| Korrekturmaßnahme | Corrective Action | Entity | Maßnahme zur Behebung einer Abweichung |
|
||||
| HACCP-Report | HaccpReport | Concept | Audit-Report aggregiert aus allen Quality-Aggregates für einen Zeitraum |
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -62,17 +93,29 @@ Diese Datei definiert die **Ubiquitous Language** für jeden Bounded Context. Di
|
|||
|
||||
| Begriff (DE) | Begriff (EN) | Typ | Definition |
|
||||
|--------------|--------------|-----|------------|
|
||||
| Bestand | Stock | Aggregate | Aktueller Bestand eines Artikels in einem Lagerort, chargengenau |
|
||||
| Lagerort | Storage Location | Value Object | Physischer Ort (Kühlraum, Tiefkühler, Trockenlager, Theke) |
|
||||
| Bestandsbewegung | Stock Movement | Aggregate | Veränderung des Bestands (Wareneingang, Produktion, Verkauf, Umbuchung) |
|
||||
| MHD | Best-Before Date | Value Object | Mindesthaltbarkeitsdatum, chargenspezifisch |
|
||||
| FEFO | First-Expired-First-Out | Concept | Verkaufspriorisierung nach MHD (ältestes MHD zuerst) |
|
||||
| Charge | Batch | Concept | Eindeutig identifizierte Menge eines Artikels mit gleicher Herkunft/Produktion |
|
||||
| Chargennummer | Batch Number | Value Object | Eindeutige Identifikation einer Charge (ProductionBatchId oder SupplierBatchId) |
|
||||
| Verfügbarer Bestand | Available Stock | Value Object | Bestand abzüglich Reservierungen |
|
||||
| Reservierung | Reservation | Entity | Vorgemerkter Bestand für Produktionsauftrag oder Kundenauftrag |
|
||||
| Schwund | Shrinkage | Concept | Bestandsverlust durch Verderb, Bruch, Diebstahl |
|
||||
| Inventur | Inventory Count | Aggregate | Physische Zählung des Bestands mit Soll-Ist-Abgleich |
|
||||
| Bestand | Stock | Aggregate | Aktueller Bestand eines Artikels an einem Lagerort, chargengenau mit FEFO und Reservierungen |
|
||||
| Bestandscharge | StockBatch | Entity | Einzelne Charge im Bestand mit Menge, MHD und Status (AVAILABLE, EXPIRING_SOON, BLOCKED, EXPIRED) |
|
||||
| Chargenreferenz | BatchReference | Value Object | Verweis auf Produktions- oder Lieferantencharge mit BatchType (PRODUCED oder PURCHASED) |
|
||||
| Chargentyp | BatchType | VO (Enum) | PRODUCED (Eigenproduktion via Production BC) oder PURCHASED (Zukauf via Procurement BC) |
|
||||
| Chargen-Status | StockBatchStatus | VO (Enum) | AVAILABLE, EXPIRING_SOON, BLOCKED, EXPIRED – steuert Verfügbarkeit |
|
||||
| Mindestbestand | MinimumLevel | Value Object | Mindestmenge, bei Unterschreitung wird StockLevelBelowMinimum Event ausgelöst |
|
||||
| Mindest-Resthaltbarkeit | MinimumShelfLife | Value Object | Konfigurierbare Tage bis MHD, ab der eine Charge als EXPIRING_SOON markiert wird |
|
||||
| FEFO | First-Expired-First-Out | Concept | Entnahme/Reservierung priorisiert nach nächstem MHD (ältestes zuerst) |
|
||||
| Verfügbarer Bestand | AvailableStock | Concept | SUM(AVAILABLE Chargen) minus SUM(Reservierungen). Darf nicht negativ werden |
|
||||
| Reservierung | Reservation | Entity | Reservierte Menge für einen Produktionsauftrag oder Kundenauftrag mit Priorität |
|
||||
| Reservierungspriorität | ReservationPriority | VO (Enum) | URGENT, NORMAL, LOW – bestimmt Zuteilungsreihenfolge bei Knappheit |
|
||||
| Referenztyp | ReferenceType | VO (Enum) | PRODUCTION_ORDER oder SALE_ORDER – wofür reserviert wurde |
|
||||
| Chargen-Zuteilung | StockBatchAllocation | Entity | Zuordnung einer reservierten Menge zu einer konkreten StockBatch (per FEFO ausgewählt) |
|
||||
| Bestandsbewegung | StockMovement | Aggregate | Immutabler Audit-Trail einer Bestandsveränderung mit Chargen-Rückverfolgbarkeit |
|
||||
| Bewegungstyp | MovementType | VO (Enum) | GOODS_RECEIPT, PRODUCTION_OUTPUT, PRODUCTION_CONSUMPTION, SALE, INTER_BRANCH_TRANSFER, WASTE, ADJUSTMENT, RETURN |
|
||||
| Bewegungsrichtung | MovementDirection | VO (Enum) | IN (Zugang) oder OUT (Abgang) – abgeleitet aus MovementType |
|
||||
| Inventur | InventoryCount | Aggregate | Physische Bestandsaufnahme pro Lagerort mit Soll/Ist-Abgleich und automatischer Differenzbuchung |
|
||||
| Zählposition | CountItem | Entity | Einzelne Position in einer Inventur: Artikel, Soll-Menge, Ist-Menge, berechnete Abweichung |
|
||||
| Lagerort | StorageLocation | Aggregate | Konfigurierbarer physischer Lagerort mit Typ und optionalem Temperaturbereich |
|
||||
| Lagertyp | StorageType | VO (Enum) | COLD_ROOM, FREEZER, DRY_STORAGE, DISPLAY_COUNTER, PRODUCTION_AREA |
|
||||
| Temperaturbereich | TemperatureRange | Value Object | Min-/Max-Temperatur eines Lagerorts in °C (-50 bis +80) |
|
||||
| Schwund | Shrinkage | Concept | Bestandsverlust durch Verderb, Bruch, Diebstahl – erfasst als WASTE-StockMovement |
|
||||
| Vier-Augen-Prinzip | Four-Eyes Principle | Concept | Inventur: CompletedBy muss sich von InitiatedBy unterscheiden |
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -181,7 +224,7 @@ com.effigenix.domain.masterdata // Master Data BC
|
|||
Recipe, Batch, ProductionOrder
|
||||
TemperatureLog, CleaningRecord
|
||||
ProductLabel, AllergenMatrix
|
||||
Stock, StockMovement
|
||||
Stock, StockMovement, InventoryCount, StorageLocation
|
||||
PurchaseOrder, GoodsReceipt
|
||||
Branch, InterBranchTransfer
|
||||
|
||||
|
|
@ -189,6 +232,8 @@ Branch, InterBranchTransfer
|
|||
RecipeId, BatchId, YieldPercentage
|
||||
Temperature, CriticalLimit
|
||||
AllergenType, NutritionFacts
|
||||
BatchReference, MinimumLevel, MinimumShelfLife
|
||||
TemperatureRange, StorageLocationName
|
||||
Quantity, Money, Timestamp
|
||||
```
|
||||
|
||||
|
|
@ -197,7 +242,9 @@ Quantity, Money, Timestamp
|
|||
// Domain behavior (verbs)
|
||||
recipe.addIngredient(...)
|
||||
batch.complete(...)
|
||||
stock.withdraw(...)
|
||||
stock.addBatch(...)
|
||||
stock.reserve(...)
|
||||
stock.confirmReservation(...)
|
||||
purchaseOrder.confirm(...)
|
||||
|
||||
// Factory methods
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,192 +0,0 @@
|
|||
# Qualitäts-Kontext (HACCP/QM) - Detailliertes Domain Model
|
||||
|
||||
**Bounded Context:** Qualität
|
||||
**Domain-Typ:** KERN
|
||||
**Verantwortung:** HACCP-Compliance, Qualitätsmanagement, Audit-Vorbereitung
|
||||
|
||||
---
|
||||
|
||||
## Aggregate
|
||||
|
||||
### 1. Temperaturprotokoll (Aggregate Root)
|
||||
|
||||
**Struktur:**
|
||||
```
|
||||
Temperaturprotokoll
|
||||
├── TemperaturprotokollId (Wertobjekt)
|
||||
├── Messpunkt (Wertobjekt: KUEHLRAUM | TIEFKUEHLER | VERKAUFSTHEKE | PRODUKTIONSRAUM)
|
||||
├── GeraetId (Wertobjekt) - Referenz zu Ausstattung
|
||||
├── GemessenAm (Wertobjekt: Zeitstempel)
|
||||
├── Temperatur (Wertobjekt: mit Einheit °C)
|
||||
├── GemessenVon (Wertobjekt: BenutzerId)
|
||||
├── KritischeGrenzwertMin (Wertobjekt)
|
||||
├── KritischeGrenzwertMax (Wertobjekt)
|
||||
└── Status (Wertobjekt: OK | WARNUNG | KRITISCH)
|
||||
|
||||
Invarianten:
|
||||
- Temperatur muss im physikalisch möglichen Bereich liegen (-50°C bis +50°C)
|
||||
- GemessenAm darf nicht in der Zukunft liegen
|
||||
- Status = KRITISCH wenn Temperatur außerhalb kritischer Grenzwerte
|
||||
- Status = WARNUNG wenn Temperatur nahe an Grenzwerten (innerhalb 10%)
|
||||
- KritischeGrenzwertMin < KritischeGrenzwertMax
|
||||
```
|
||||
|
||||
**Domänen-Events:**
|
||||
```java
|
||||
TemperaturKritischeGrenzwerteUeberschritten(TemperaturprotokollId, Messpunkt, Temperatur)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2. Reinigungsnachweis (Aggregate Root)
|
||||
|
||||
**Struktur:**
|
||||
```
|
||||
Reinigungsnachweis
|
||||
├── ReinigungsnachweisId (Wertobjekt)
|
||||
├── Bereich (Wertobjekt: PRODUKTIONSRAUM | KUEHLRAUM | VERKAUFSTHEKE | GERAET)
|
||||
├── ReinigungsplanId (Wertobjekt) - Referenz zu Reinigungsplan
|
||||
├── GeplantesFuer (Wertobjekt: Datum)
|
||||
├── AbgeschlossenAm (Wertobjekt: Zeitstempel)
|
||||
├── AbgeschlossenVon (Wertobjekt: BenutzerId)
|
||||
├── Checklisten-Eintraege[] (Entität)
|
||||
│ ├── Eintrag (Wertobjekt: "Boden gewischt", "Oberflächen desinfiziert")
|
||||
│ ├── Erledigt (Wertobjekt: boolean)
|
||||
│ └── Bemerkungen (Wertobjekt: optional)
|
||||
└── GesamtBemerkungen (Wertobjekt)
|
||||
|
||||
Invarianten:
|
||||
- Alle Checklisten-Einträge müssen erledigt sein zum Abschluss
|
||||
- AbgeschlossenAm muss >= GeplantesFuer sein
|
||||
- Kann nicht abgeschlossen werden ohne AbgeschlossenVon
|
||||
- Kann nach Abschluss nicht mehr geändert werden
|
||||
```
|
||||
|
||||
**Domänen-Events:**
|
||||
```java
|
||||
ReinigungUeberfaellig(ReinigungsplanId, Bereich, LocalDate geplantesFuer)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 3. Wareneingangspruefung (Aggregate Root)
|
||||
|
||||
**Struktur:**
|
||||
```
|
||||
Wareneingangspruefung
|
||||
├── PruefungId (Wertobjekt)
|
||||
├── WareneingangId (Wertobjekt) - Referenz zu Beschaffungs-Kontext
|
||||
├── GeprueftAm (Wertobjekt)
|
||||
├── GeprueftVon (Wertobjekt: BenutzerId)
|
||||
├── Temperaturpruefung (Entität)
|
||||
│ ├── GemesseneTemperatur (Wertobjekt)
|
||||
│ ├── ErwarteterBereich (Wertobjekt)
|
||||
│ └── Status (Wertobjekt: BESTANDEN | DURCHGEFALLEN)
|
||||
├── Sichtpruefung (Entität)
|
||||
│ ├── VerpackungIntakt (Wertobjekt: boolean)
|
||||
│ ├── Farbe (Wertobjekt: NORMAL | ABNORMAL)
|
||||
│ ├── Geruchstest (Wertobjekt: NORMAL | ABNORMAL)
|
||||
│ └── Bemerkungen (Wertobjekt)
|
||||
├── MHD-Pruefung (Entität)
|
||||
│ ├── Verfallsdatum (Wertobjekt)
|
||||
│ ├── TageBeisVerfallsdatum (Wertobjekt)
|
||||
│ ├── MinimalAkzeptableTage (Wertobjekt)
|
||||
│ └── Status (Wertobjekt: BESTANDEN | DURCHGEFALLEN)
|
||||
├── Dokumentenpruefung (Entität)
|
||||
│ ├── LieferscheinErhalten (Wertobjekt: boolean)
|
||||
│ ├── VeterinaerbescheinigungErhalten (Wertobjekt: boolean)
|
||||
│ ├── Qualitaetszertifikate[] (Wertobjekt)
|
||||
│ └── AlleDokumenteVollstaendig (Wertobjekt: boolean)
|
||||
├── LieferantenChargennummer (Wertobjekt) - Für Rückverfolgbarkeit!
|
||||
└── Endergebnis (Wertobjekt: ANGENOMMEN | ABGELEHNT | BEDINGT_ANGENOMMEN)
|
||||
|
||||
Invarianten:
|
||||
- Alle Prüfungen müssen durchgeführt sein, bevor Endergebnis gesetzt werden kann
|
||||
- Bei ABGELEHNT müssen GesamtBemerkungen angegeben werden
|
||||
- Temperatur muss im akzeptablen Bereich liegen für ANGENOMMEN
|
||||
- MHD muss Mindesttage haben für ANGENOMMEN
|
||||
- Veterinärbescheinigung erforderlich für Fleischprodukte
|
||||
```
|
||||
|
||||
**Domänen-Events:**
|
||||
```java
|
||||
WareneingangAbgelehnt(PruefungId, WareneingangId, String grund)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 4. Schulungsnachweis (Aggregate Root)
|
||||
|
||||
**Struktur:**
|
||||
```
|
||||
Schulungsnachweis
|
||||
├── SchulungsnachweisId (Wertobjekt)
|
||||
├── MitarbeiterId (Wertobjekt: BenutzerId)
|
||||
├── SchulungsTyp (Wertobjekt: HACCP | HYGIENE | LEBENSMITTELSICHERHEIT | GERAETEBEDIENUNG)
|
||||
├── Schulungsdatum (Wertobjekt)
|
||||
├── GueltigBis (Wertobjekt) - Auffrischung notwendig
|
||||
├── Schulender (Wertobjekt) - Intern oder extern
|
||||
├── Zertifikatsnummer (Wertobjekt)
|
||||
├── ZertifikatsDokumentUrl (Wertobjekt)
|
||||
└── Status (Wertobjekt: GUELTIG | ABGELAUFEN | WIDERRUFEN)
|
||||
|
||||
Invarianten:
|
||||
- GueltigBis muss nach Schulungsdatum liegen
|
||||
- Status = ABGELAUFEN wenn GueltigBis < HEUTE
|
||||
- Kann nicht widerrufen werden ohne Grund
|
||||
```
|
||||
|
||||
**Domänen-Events:**
|
||||
```java
|
||||
SchulungLaeuftDemnaechstAb(SchulungsnachweisId, BenutzerId, LocalDate ablaufdatum)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 5. Wartungsprotokoll (Aggregate Root)
|
||||
|
||||
**Struktur:**
|
||||
```
|
||||
Wartungsprotokoll
|
||||
├── WartungsprotokollId (Wertobjekt)
|
||||
├── GeraetId (Wertobjekt)
|
||||
├── WartungsTyp (Wertobjekt: GEPLANT | REPARATUR | INSPEKTION)
|
||||
├── GeplantesFuer (Wertobjekt: Datum)
|
||||
├── DurchgefuehrtAm (Wertobjekt: Zeitstempel)
|
||||
├── DurchgefuehrtVon (Wertobjekt) - Internes Personal oder externe Firma
|
||||
├── Befunde (Wertobjekt)
|
||||
├── Massnahmen (Wertobjekt)
|
||||
├── NaechsteWartungFaellig (Wertobjekt: Datum)
|
||||
└── Status (Wertobjekt: ABGESCHLOSSEN | AUSSTEHEND | FEHLGESCHLAGEN)
|
||||
|
||||
Invarianten:
|
||||
- DurchgefuehrtAm muss >= GeplantesFuer sein
|
||||
- Bei FEHLGESCHLAGEN müssen Befunde und Massnahmen dokumentiert sein
|
||||
- NaechsteWartungFaellig muss basierend auf Wartungsintervall berechnet werden
|
||||
```
|
||||
|
||||
**Domänen-Events:**
|
||||
```java
|
||||
WartungUeberfaellig(GeraetId, LocalDate geplantesFuer)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Repository-Schnittstellen
|
||||
|
||||
```java
|
||||
public interface TemperaturprotokollRepository {
|
||||
Result<RepositoryFehler, Void> speichern(Temperaturprotokoll protokoll);
|
||||
Result<RepositoryFehler, List<Temperaturprotokoll>> findeNachZeitraum(
|
||||
LocalDate von, LocalDate bis
|
||||
);
|
||||
Result<RepositoryFehler, List<Temperaturprotokoll>> findeKritische();
|
||||
}
|
||||
|
||||
public interface WareneingangspruefungRepository {
|
||||
Result<RepositoryFehler, Void> speichern(Wareneingangspruefung pruefung);
|
||||
Result<RepositoryFehler, Wareneingangspruefung> findeNachWareneingangId(
|
||||
WareneingangId id
|
||||
);
|
||||
}
|
||||
```
|
||||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue