mirror of
https://github.com/s-frick/effigenix.git
synced 2026-03-28 10:29:35 +01:00
- Move Java backend to backend/ directory - Create frontend/ directory for TypeScript TUI and future WebUI - Update .gitignore for Node.js and worktrees - Update README.md with new repository structure - Copy documentation to backend/
192 lines
6.3 KiB
Markdown
192 lines
6.3 KiB
Markdown
# 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
|
|
);
|
|
}
|
|
```
|