mirror of
https://github.com/s-frick/effigenix.git
synced 2026-03-28 10:19:35 +01:00
refactor: restructure repository with separate backend and frontend directories
- 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/
This commit is contained in:
parent
ec9114aa0a
commit
c2c48a03e8
141 changed files with 734 additions and 9 deletions
192
backend/docs/mvp/ddd/05-qualitaets-kontext.md
Normal file
192
backend/docs/mvp/ddd/05-qualitaets-kontext.md
Normal file
|
|
@ -0,0 +1,192 @@
|
|||
# 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
|
||||
);
|
||||
}
|
||||
```
|
||||
Loading…
Add table
Add a link
Reference in a new issue