mirror of
https://github.com/s-frick/effigenix.git
synced 2026-03-28 17:04:49 +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/
6.3 KiB
6.3 KiB
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:
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:
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:
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:
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:
WartungUeberfaellig(GeraetId, LocalDate geplantesFuer)
Repository-Schnittstellen
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
);
}