:toc: macro
:company_name: Mampf
:glossar_ref: Siehe <<glossar, Glossar >>
= Pflichtenheft

[options="header"]
[cols="1, 1, 1, 1, 4"]
|===
|Version | Status      | Bearbeitungsdatum   | Autoren(en) |  Vermerk
|0.1     | In Arbeit   | 10.10.2021          | Autor       | Initiale Version
|0.2     | In Arbeit   | 23.10.2023          | swp23       | Erster Meilenstein
|===

== Inhaltsverzeichnis
toc::[]

== Zusammenfassung

Ziel des Projekts „Cateringservice“ ist es, eine web-basierte Java-Applikation für den Cateringservice „Mampf“ zu entwickeln. Dabei kann ein registrierter Kunde einen Auftrag gestalten, welcher dann von der Software geplant wird. Diese Automatisierung beinhaltet:

- Kundenverwaltung
- Hilfe bei der Personalverwaltung
- Personalzuteilung
- Termin- und Eventplanung inkl. Zubehör, Lebensmittelbedarf
- Vereinfachung der Kostenabrechnung und Arbeitszeitaufstellung

Zudem soll die Software diverse nicht-funktionale Kriterien, wie folgt, erfüllen:

- einfache Bedienbarkeit
- Absturzsicherheit
- einfache Erweiterbarkeit
- nachvollziehbare Strukturierung
- hohe Codequalität

Die Software gilt als fertig entwickelt und auslieferungsbereit, wenn die folgend in diesem Dokument aufgelisteten Akzeptanztest bestanden sind, auf welche sich mit dem Kunden geeinigt wurde.

== Aufgabenstellung

Da unser Auftraggeber Herr Wurst im Laufe der Zeit den großen Cateringservice Mampf aufgebaut hat,
benötigt er nun ein System, das ihm und seinen Kunden die Planung vereinfachen soll.
Mit dem Cateringservice soll er alle Abrechnungs-, Bestell- und Verwaltungsaufgaben einheitlich bearbeiten können.
Bisher nutze Herr Wurst dafür diverse
Programme und ärgerte sich immer wieder über deren Inkompatibilität zueinander und den Mehraufwand durch
getrennte Datenhaltung. Als Basis für die Systementwicklung gab er uns folgende Beschreibung seines kleinen
Unternehmens:

Das Unternehmen gliedert sich in vier Geschäftsfelder. Das Eventcatering übernimmt die Verpflegung bei großen Veranstaltungen,
egal ob in Form eines Buffetts oder als Galadinner. Auf Wunsch gestaltet Mampf auch das komplette Event, d.h. neben
den Speisen und Getränken wird auch Dekoration, Ausrüstung (also Geschirr, Tischtücher usw.) und Personal zur
Verfügung gestellt, wobei der Kunde dann natürlich zusätzlich zum eigentlichen Preis für Lebensmittel und Arbeitszeit
auch Leihgebühren und Personalkosten bezahlen muss. Der Partyservice beliefert private Feierlichkeiten mit kalten
Platten – von Hochzeiten und Beerdigungen über Gartenfeste bis zu Omas 75sten Geburtstag. Hierbei gibt es Festpreise
je nach Angebot und Personenanzahl (z.B. Schinkenplatte für 5 Personen zu 20,- EUR, Käseplatte für 3 Personen zu
12,50 EUR usw.) und Sonderaktionen (z.B. Sushi-Abend für 10 Personen). Eine Besonderheit von Mampf ist Mobile
Breakfast – ein mobiler Frühstücksservice für kleinere Firmen ohne eigene Kantine. Zu festgelegten Zeiten können die
Mitarbeiter sozusagen am Arbeitsplatz eine Auswahl an Frühstücksangeboten (belegte Brötchen, Müsli, Kaffee und Tee
usw.) kaufen. Die Firmen buchen das Angebot monatsweise. Problematisch ist allerdings die Planung dieses Angebotes
– hier wird derzeit noch nach einer kostensparenden Lösung (z.B. in Form einer Vorbestellung) gesucht. Immer beliebter
wird bei den Kunden auch das vierte Angebot von Mampf: Rent-a-Cook. Dabei wird Küchen- und Servicepersonal an
Privathaushalte verliehen, um z.B. den Chef des Gastgebers mit kulinarischen Köstlichkeiten zu beeindrucken. Um die
Lebensmittel müssen sich die Kunden dabei selbst kümmern.

Die wichtigsten Funktionen, die das System beinhalten soll, sind die Kundenverwaltung zu
unterstützen, die Personalverwaltung und -zuteilung übernehmen, die Termine planen, das Zubehör (Dekoration,
Ausrüstung) verwalten, den Lebensmittelbedarf bestimmen (Anzahl Gerichte/Platten/belegte Brötchen, Menge an
Getränken in Liter), die Rechnungsstellung an die Kunden vereinfachen und sämtliche Abrechnungen erleichtern. Die
Lebensmittelbeschaffung muss jedoch nicht betrachtet werden.
Am Ende soll der Cateringservice voll funktionstüchtig sein und alle bereits genannten Funktionen beinhalten. Ziel soll es sein,
durch eine zentralisierte Datenhaltung die Abläufe, insbesondere die Planung im Unternehemen effizienter zu gestalten.
Das System soll einfach erweiterbar sein, um neue Geschäftsfelder erschließen zu können.

Folgende Erklärungen hat der Auftraggeber auf Nachfrage mündlich bekannt gegeben:

Kunden müssen sich selbst registrieren können,
Aufträge buchen können,
und bei Bedarf ihr Konto löschen können.
Letzteres soll auch dem Administrator für beliebige Kunden möglich sein.
Dieser hat auch spezielle Übersichtsseiten zur Verwaltung des Betriebs zur Verfügung.
Aufträge können nur mit Bargeld bezahlt werden.
Die Zuteilung von Ressourcen zu einer Bestellung muss ohne manuelle Intervention geschehen.
Im Rahmen der oben genannten Sonderaktionen sollen bestimmte Angebote einen Aktionspreis besitzen
und besonders gekennzeichnet sein.
Die Buchung für Mobile Breakfast erfolgt monatsweise zu festen Zeitslots.
Dafür stehen mehrere Menüs zur Auswahl.
Unter Rechnung wird eine informelle Aufstellung der Bestellpositionen als PDF und Internetseite verstanden.
Mit Abrechnung ist eine informelle Aufstellung über die monatlich tatsächlich geleistete Arbeitszeit von Mitarbeitenden gemeint.
Technisch sollen Passwörter von Nutzerkonten nach aktuellem Standard gesichert gespeichert werden.

== Produktnutzung

Der Cateringservice soll als Website zu Verwaltungs- und Bestellzwecken genutzt werden.

Das System soll über einen Server laufen, damit die Kunden sowie das Personal jederzeit darauf zugreifen können.

Des Weiteren richtet sich das System an den Chef des Unternehmens sowie seine Kunden und soll deshalb von jeder Altersgruppen einfach zu bedienen sein. Außerdem sollte der Cateringservice alle wichtigen Funktionen eines Verwaltungs- und Planungsprogrammes enthalten und somit eine Übersicht bieten, die die Bearbeitung ohne viel Mehraufwand zulässig macht.


== Interessensgruppen (Stakeholders)

Eine Liste aller realen und juristischen Personen(-gruppen),
die Einfluss auf die Anforderungen im Projekt haben.

Die Prioritäten bringen die Interessensgruppen in eine Rangfolge,
wobei eine niedrigere Zahl eine höhere Priorität darstellt.

[options="header", cols="2, ^1, 4, 4"]
|===
|Name
|Priorität
|Beschreibung
|Ziele

|{company_name}
|1
|Der Kunde des Projektes.
a|
- Vereinfachung des Betriebsablaufes
- Steigerung der Effizienz
- Möglichkeit der Expansion

|Hannes Wurst
|3
|Geschäftsführer von {company_name}.
a|
- Zuverlässigkeit
- Vereinheitlichung der Verwaltungsaufgaben
- Überblick über aktuelle Tätigkeit der Firma

|Kunden von {company_name}
|2
|Personen(-gruppen), die mit der Software interagieren.
a|
- Einfache Bedienung
- Hohe Funktionalität
- Zuverlässigkeit

|Entwickler
|4
|Personen, welche die Software umsetzen.
a|
- Einfache Struktur
- Leichte Erweiterbarkeit
- Gute Dokumentation
|===


== Systemgrenze und Top-Level-Architektur

=== Kontextdiagramm

image::models/analysis/systemContextDiagram.svg[]

=== Top-Level-Architektur

image::models/analysis/topLevelArchitecture.svg[]

== Anwendungsfälle

=== Akteure

[cols="1h,2"]
|===
|Unauthentifizierter Nutzer
|{glossar_ref}

|Nutzer
|{glossar_ref}

|Kunde
|{glossar_ref}

|Administrator
|{glossar_ref}
|===

=== Anwendungsfalldiagramm / Use-Case Diagram

image::models/analysis/useCaseDiagram.svg[]

=== Anwendungsfallbeschreibung

===== Kundenverwaltung
[cols="1h,2"]
|===
|ID
|[[UC0101]]<<UC0101>>

|Name
|Kundendaten einsehen

|Beschreibung
|Der Administrator verfügt über die Berechtigung die Daten eines Kunden einzusehen.

|Akteure
|Administrator

|Trigger
|Der Administrator wählt Nutzerdatenbank in der Navigation Bar aus.

|Bedingungen
|Der Administrator hat sich angemeldet.

|Notwendige Schritte a|
1. Der Administrator wählt Nutzerdatenbank in der Navigation Bar aus.
2. Eine Liste aller Kunden erscheint.

|Erweiterungen
| -

|Funkionale Vorraussetzungen
| <<F00013>>
|===

[cols="1h,2"]
|===
|ID
|[[UC0102]]<<UC0102>>

|Name
|Kunden entfernen

|Beschreibung
|Der Administrator verfügt über die Berechtigung einen Kunden aus dem System zu entfernen.

|Akteure
|Administrator

|Trigger
|Der Administrator wählt den Nutzer aus der Nutzerdatenbank und drückt auf „Konto löschen“.

|Bedingungen
|Der Administrator hat sich angemeldet.

|Notwendige Schritte a|
1. Der Administrator wählt Nutzerdatenbank in der Navigation Bar aus.
2. Eine Liste aller Kunden erscheint.
3. Der Administrator wählt den gewünschten Nutzer.
4. Eine Liste von möglichen Änderungen erscheint.
5. Der Administrator wählt „Konto löschen“

|Erweiterungen
| -

|Funkionale Vorraussetzungen
| <<F00014>>
|===

===== Personalverwaltung
[cols="1h,2"]
|===
|ID
|[[UC0201]]<<UC0201>>

|Name
|Personal hinzufügen

|Beschreibung
|Der Administrator verfügt über die Berechtigung einen Angestelten dem System hinzuzufügen.

|Akteure
|Administrator

|Trigger
|Der Administrator wählt hinzufügen im Bereich Personal.

|Bedingungen
|Der Administrator hat sich angemeldet.

|Notwendige Schritte a|
1. Der Administrator wählt Personal in der Navigation Bar aus.
2. Eine Liste aller Mitarbeiter erscheint.
3. Der Administrator wählt hinzufügen.

|Erweiterungen
| -

|Funkionale Vorraussetzungen
| <<F00031>>
|===

[cols="1h,2"]
|===
|ID
|[[UC0202]]<<UC0202>>

|Name
|Personaldaten bearbeiten

|Beschreibung
|Der Administrator verfügt über die Berechtigung die personbezogenen Daten eines Angestelten zu ändern (z.B. die Adresse).

|Akteure
|Administrator

|Trigger
|Der Administrator wählt einen Mitarbeiter im Bereich Personal aus.

|Bedingungen
|Der Administrator ist angemeldet.

|Notwendige Schritte a|
1. Der Administrator wählt Personal in der Navigation Bar aus.
2. Eine Liste aller Mitarbeiter erscheint.
3. Der Administrator wählt den gewünschten Mitarbeiter.
4. Eine Liste von möglichen Änderungen erscheint.

|Erweiterungen
| -

|Funkionale Vorraussetzungen
| <<F00034>>
|===
image::models/analysis/sequenceDiagramPersonaldatenBearbeiten.svg[]

[cols="1h,2"]
|===
|ID
|[[UC0203]]<<UC0203>>

|Name
|Personaldaten einsehen

|Beschreibung
|Der Administrator verfügt über die Berechtigung die personbezogenen Daten eines Angestelten einzusehen.

|Akteure
|Administrator

|Trigger
|Der Administrator wählt Personl in der Navigation Bar.

|Bedingungen
| Der Administrator ist angemeldet

|Notwendige Schritte a|
1. Der Administrator wählt Personal in der Navigation Bar aus.
2. Eine Liste aller Mitarbeiter erscheint.
3. Der Administrator wählt den gewünschten Mitarbeiter.
4. Eine Liste von möglichen Änderungen erscheint (an denen keine Änderungen vorgenommen werden).

|Erweiterungen
| -

|Funkionale Vorraussetzungen
| <<F00030>>
|===

[cols="1h,2"]
|===
|ID
|[[UC0204]]<<UC0204>>

|Name
|Personal entfernen

|Beschreibung
|Der Administrator verfügt über die Berechtigung einen Angestelten aus dem System zu entfernen.

|Akteure
|Administrator

|Trigger
|Der Administrator wählt einen Mitarbeiter aus dem Bereich Personl und drückt auf Mitarbeiter entfernen.

|Bedingungen
|Der Administrator ist angemeldet.

|Notwendige Schritte a|
1. Der Administrator wählt Personal in der Navigation Bar aus.
2. Eine Liste aller Mitarbeiter erscheint.
3. Der Administrator wählt den gewünschten Mitarbeiter.
4. Eine Liste von möglichen Änderungen erscheint.
5. Der Administrator wählt „Mitarbeiter löschen“

|Erweiterungen
| -

|Funkionale Vorraussetzungen
| <<F00032>>
|===

[cols="1h,2"]
|===
|ID
|[[UC0205]]<<UC0205>>

|Name
|Arbeitszeitaufstellung einsehen

|Beschreibung
|Der Administrator verfügt über die Berechtigung die Arbeitszeitaufstellungen des Personals einzusehen.

|Akteure
|Administrator

|Trigger
|Der Administrator wählt einen Mitarbeiter im Bereich Arbeitszeitaufstellung

|Bedingungen
|Der Administrator ist angemeldet.

|Notwendige Schritte a|
1. Der Administrator wählt Arbeitszeitaufstellung in der Navigation Bar aus.
2. Eine Liste der Mitarbeiter erscheint.
3. Der Administrator wählt einen Mitarbeiter.
4. Eine Ansicht von Informationen über dessen Arbeit erscheint.

|Erweiterungen
| -

|Funkionale Vorraussetzungen
| <<F00036>>
|===

[cols="1h,2"]
|===
|ID
|[[UC0206]]<<UC0206>>

|Name
|Personaleinteilung einsehen

|Beschreibung
|Der Administrator verfügt über die Berechtigung die Personaleinteilung einzusehen.

|Akteure
|Administrator

|Trigger
|Der Administrator wählt Personaleinteilung in der Navigation Bar.

|Bedingungen
|Der Administrator ist angemeldet.

|Notwendige Schritte a|
1. Der Administrator wählt Personaleinteilung in der Navigation Bar.
2. Ein Ansicht erschint mit den zeitlichen Einteilungen.

|Erweiterungen
| -

|Funkionale Vorraussetzungen
| <<F00035>>
|===

===== Inventarverwaltung
[cols="1h,2"]
|===
|ID
|[[UC0301]]<<UC0301>>

|Name
|Inventar einsehen

|Beschreibung
|Der Administrator verfügt über die Berechtigung das Inventar einzusehen.

|Akteure
|Administrator

|Trigger
|Der Administrator wählt Inventar in der Navigation Bar.

|Bedingungen
|Der Administrator ist angemeldet.

|Notwendige Schritte a|
1. Der Administrator wählt Inventar in der Navigation Bar.
2. Eine Auflistung der Artikel im Inventar erscheint.

|Erweiterungen
|-

|Funkionale Vorraussetzungen
| <<F00040>>
|===

[cols="1h,2"]
|===
|ID
|[[UC0302]]<<UC0302>>

|Name
|Inventar bearbeiten

|Beschreibung
|Der Administrator verfügt über die Berechtigung den Inhalt des Inventars zu bearbeiten.

|Akteure
|Administrator

|Trigger
|Der Administrator wählt einen Artikel im Bereich Inventar aus.

|Bedingungen
|Der Administrator ist angemeldet.

|Notwendige Schritte a|
1. Der Administrator wählt Inventar in der Navigation Bar.
2. Eine Auflistung der Artikel im Inventar erscheint.
3. Der Administrator wählt ein Artikel.
4. Eine Liste möglicher Optionen erscheint.

|Erweiterungen
|-

|Funkionale Vorraussetzungen
| <<F00041>>
|===

[cols="1h,2"]
|===
|ID
|[[UC0303]]<<UC0303>>

|Name
|Artikel zum Inventar hinzuzufügen

|Beschreibung
|Der Administrator verfügt über die Berechtigung einen neuen Artikel dem Inventar hinzuzufügen.

|Akteure
|Administrator

|Trigger
|Der Administrator wählt Hinzufügen im Bereich Inventar.

|Bedingungen
|Der Administrator ist angemeldet.

|Notwendige Schritte a|
1. Der Administrator wählt Inventar in der Navigation Bar.
2. Eine Auflistung der Artikel im Inventar erscheint.
3. Der Administrator wählt „Neuer Artikel“.

|Erweiterungen
|-

|Funkionale Vorraussetzungen
| <<F00042>>
|===
image::models/analysis/sequenceDiagramArtikelZumInventarHinzufuegen.svg[]

[cols="1h,2"]
|===
|ID
|[[UC0304]]<<UC0304>>

|Name
|Artikel vom Inventar enftfernen

|Beschreibung
|Der Administrator verfügt über die Berechtigung einen Artikel aus dem Inventar zu enftfernen.

|Akteure
|Administrator

|Trigger
|Der Administrator drückt auf Enfternen, nach dem ein Artikel im Inventar ausgewählt wurde.

|Bedingungen
|Der Administrator ist angemeldet.

|Notwendige Schritte a|
1. Der Administrator wählt Inventar in der Navigation Bar.
2. Eine Auflistung der Artikel im Inventar erscheint.
3. Der Administrator wählt ein Artikel.
4. Eine Liste möglicher Optionen erscheint.
5. Der Administrator wählt Enfternen.

|Erweiterungen
| -

|Funkionale Vorraussetzungen
| <<F00042>>
|===

===== Berechtigungen eines Nutzers

[cols="1h,2"]
|===
|ID
|[[UC0401]]<<UC0401>>

|Name
|Logout

|Beschreibung
|Der Nutzer verfügt über die Berechtigung sich abzumelden.

|Akteure
|Nutzer

|Trigger
|Der Nutzer wählt Abmelden in der Navigation Bar.

|Bedingungen
|Der Nutzer ist angemeldet.

|Notwendige Schritte a|
1. Der Nutzer wählt Abmelden in der Navigation Bar.

|Erweiterungen
| -

|Funkionale Vorraussetzungen
| <<F00012>>
|===

[cols="1h,2"]
|===
|ID
|[[UC0402]]<<UC0402>>

|Name
|Auftrag einsehen

|Beschreibung
|Der Nutzer verfügt über die Berechtigung dessen Auftrag einzusehen.

|Akteure
|Nutzer

|Trigger
|Der Nutzer wählt Aufträge in der Navigation Bar.

|Bedingungen
|Der Nutzer ist angemeldet.

|Notwendige Schritte a|
1. Der Nutzer wählt Aufräge in der Navigation Bar.
2. Eine Auflistung aller Aufträge erscheint.

|Erweiterungen
|-

|Funkionale Vorraussetzungen
| <<F00022>>,<<F00023>>
|===

===== Berechtigungen eines Kundens

[cols="1h,2"]
|===
|ID
|[[UC0501]]<<UC0501>>

|Name
|Kostenabrechnung einsehen

|Beschreibung
|Der Nutzer verfügt über die Berechtigung dessen Kostenabrechnung einzusehen.

|Akteure
|Kunde

|Trigger
|Der Kunde wählt Kostenabrechnung in der Navigation Bar.

|Bedingungen
|Der Kunde ist angemeldet.

|Notwendige Schritte a|
1. Der Kunde wählt Kostenabrechnung in der Navigation Bar.
2. Eine Liste aller Kostenabrechnungen erscheint.

|Erweiterungen
|Filtern zwischen Bezahlt und „Nicht Bezahlt“

|Funkionale Vorraussetzungen
| <<F00050>>
|===

[cols="1h,2"]
|===
|ID
|[[UC0502]]<<UC0502>>

|Name
|Auftrag aufgeben

|Beschreibung
|Der Kunde verfügt über die Berechtigung einen Auftrag aufzugeben.

|Akteure
|Kunde

|Trigger
|Der Kunde wählte Angebote in der Navigation Bar.

|Bedingungen
|Der Kunde ist angemeldet.

|Notwendige Schritte a|
1. Der Kunde wählt Angebote in der Navigation Bar.
2. Eine Ansicht mit allen Angeboten erscheint.
3. Der Kunde wählt eins dieser Angebote.
4. Eine Ansicht mit Informationen über dieses Angebot erscheint.
5. Der Kunde wählt „Zum Warenkorb hinzufügen“.
6. Der Kunde wählt Warenkorb in der Navigation Bar.
7. Eine Liste mit allen Artikeln im Warenkorb erscheint.
8. Der Kunde drückt bestellen.

|Erweiterungen
|-

|Funkionale Vorraussetzungen
| <<F00020>>
|===

[cols="1h,2"]
|===
|ID
|[[UC0503]]<<UC0503>>

|Name
|Auftragsdaten bearbeiten

|Beschreibung
|Der Kunde verfügt über die Berechtigung dessen Aufräge zu bearbeiten.

|Akteure
|Kunde

|Trigger
|Der Kunde wählt einen Auftrag im Bereich Aufträge.

|Bedingungen
|Der Kunde ist angemeldet.

|Notwendige Schritte a|
1. Der Kunde wählt Aufträge in der Navigation.
2. Eine Liste aller Aufträge erscheint.
3. Der Kunde wählte einen dieser Aufträge.
4. Eine Ansicht mit Optionen erscheint.

|Erweiterungen
| -

|Funkionale Vorraussetzungen
| <<F00026>>
|===

[cols="1h,2"]
|===
|ID
|[[UC0504]]<<UC0504>>

|Name
|Account löschen

|Beschreibung
|Der Kunde verfügt über die Berechtigung dessen Account zu löschen.

|Akteure
|Kunde

|Trigger
|Der Kunde wählt „Account löschen“ im Bereich Account.

|Bedingungen
|Der Kunde ist angemeldet.

|Notwendige Schritte a|
1. Der Kunde wählt Account.
2. Eine Liste von Optionen wird angezeigt.
3. Der Kunde wählt „Account löschen“.

|Erweiterungen
| -

|Funkionale Vorraussetzungen
| <<F00014>>
|===
image::models/analysis/sequenceDiagramAccountLoeschen.svg[]

===== Ohne Authentifikation
[cols="1h,2"]
|===
|ID
|[[UC0601]]<<UC0601>>

|Name
|Login

|Beschreibung
|Der unauthentifizierte Nutzer verfügt über die Berechtigung sich anzumelden.

|Akteure
|Unauthentifizierte Nutzer

|Trigger
|Der unauthentifizierte Nutzer wählt Anmelden in der Navigation Bar.

|Bedingungen
| -

|Notwendige Schritte a|
1. Der unauthentifizierte Nutzer wählt Anmelden in der Navigation Bar.

|Erweiterungen
| -

|Funkionale Vorraussetzungen
| <<F00012>>
|===

[cols="1h,2"]
|===
|ID
|[[UC0602]]<<UC0602>>

|Name
|Registrieren

|Beschreibung
|Der unauthentifizierte Nutzer verfügt über die Berechtigung sich ein Kundenkonto zu erstellen.

|Akteure
|Unauthentifizierte Nutzer

|Trigger
|Der unauthentifizierte Nutzer wählt Registrieren in der Navigation Bar.

|Bedingungen
| -

|Notwendige Schritte a|
1. Der unauthentifizierte Nutzer wählt Registrieren in der Navigation Bar.

|Erweiterungen
| -

|Funkionale Vorraussetzungen
| <<F00010>>
|===

== Funktionale Anforderungen

Diese Tabelle gibt einen Überblick über die funktionalen Anforderungen des Systems.

Die Tabelle beinhaltet:

- den unique identifier der Anforderung (ID), der für Referenzierungen im Projekt genutzt wird
- die aktuelle Version der Anforderung, da sich die Anforderung im Verlauf des Projekts ändern kann
- Kurznamen der Anforderung
- Beschreibung der Anforderung

[options="header", cols="2h, 1, 3, 12"]
|===
|ID
|Version
|Kurzname
|Beschreibung


|[[F00010]]<<F00010>>
|v0.3
|Kunde registrieren
a|
Das System muss unregistrierten Nutzern und dem Administrator ermöglichen Kunden unter Angabe von

* Benutzername (einzigartig),
* Passwort,
* Rechnungsadresse

des Kunden zu registrieren.
Das System validiert die Registrierung <<F00011>>.
Nach der Registrierung muss das System den angelegten Kunden authentifizieren können <<F00012>>.


|[[F00011]]<<F00011>>
|v0.3
|Registrierung validieren
a|
Das System muss in der Lage sein die angegebenen Daten bei Kundenregistrierung <<F00010>> validieren.
Die Einzigartigkeit des Nutzernamens muss garantiert werden.
Der Nutzer muss bei Verletzung jeglicher Beschränkungen informiert werden.


|[[F00012]]<<F00012>>
|v0.3
|Nutzer authentifizieren
a|
Das System muss in einen öffentlich und einen privat Zugängliche Bereich pro registrierten Nutzer <<F00010>> getrennt sein.
Das System muss registrierten Nutzern erlauben auf ihren privaten Bereich zuzugreifen, falls dieser Benutzername und Passwort angibt.


|[[F00013]]<<F00013>>
|v0.2
|Kunden auflisten
a|
Der Administrator muss alle Nutzer in Ansicht dargestellt bekommen.


|[[F00014]]<<F00014>>
|v0.3
|Kunden entfernen
a|
Ein Kunde muss seinen eigenen Account löschen können.
Der Administrator muss jeden beliebigen Kundenaccount löschen können.



|[[F00020]]<<F00020>>
|v0.3
|Auftrag erstellen
a|
Das System muss:

1. registrierten Nutzern <<F00010>> ermöglichen einen Auftrag zu erstellen
2. jeden Auftrag validieren <<F00021>>
3. erstellenden Nutzer über jede Beschränkungsverletzungen in Kenntnis setzen
4. einen Eintrag für den gewählten Zeitraum für Bestandteile eines Auftrags mit einem Zeitplan erstellen
5. Auftragsdaten persistent speichern können


|[[F00021]]<<F00021>>
|v0.3
|Auftrag validieren
a|
Das System muss die Verfügbarkeit von Personal <<F00033>> und Zubehör/Leihmaterial des Inventars <<F00070>> für einen Auftrag bzw. dessen zugehörigen Zeitraums prüfen können.


|[[F00022]]<<F00022>>
|v0.3
|Auftrag auflisten
a|
Administrator muss erstellte Aufträge <<F00020>> in Ansicht dargestellt bekommen.
Kunden müssen ihre erstellten Aufträge dargestellt bekommen.


|[[F00023]]<<F00023>>
|v0.3
|Auftragsdetails einsehen
a|
Das System muss:

* erstellendem Kunden und Administrator Kostenaufstellung einsehbar machen
* Administrator Bedarf an Lebensmitteln/Verbrauchsmaterial darstellen.


|[[F00024]]<<F00024>>
|v0.3
|Auftrag filtern
a|
Administrator kann erstellte Aufträge <<F00020>> nach Status (_GEPLANT_,_BEENDET_,_ABGESAGT_) filtern können


|[[F00025]]<<F00025>>
|v0.2
|Auftrag archivieren
a|
Das System muss in der Lage sein einen Auftrag zu archivieren.
Ein Auftrag ist archiviert, wenn sein Status _BEENDET_ ist.


|[[F00026]]<<F00026>>
|v0.3
|Auftrag ändern
a|
Ein Kunde muss seine noch nicht archivierten Aufträge <<F00026>> ändern können.




|[[F00030]]<<F00030>>
|v0.3
|Personal auflisten
a|
Administrator muss Personal in Ansicht dargestellt bekommen.


|[[F00031]]<<F00031>>
|v0.2
|Personal einstellen
a|
Administrator muss Personal zu jeder Gruppe (Küchen- oder Servicepersonal) hinzufügen können.


|[[F00032]]<<F00032>>
|v0.2
|Personal entlassen
a|
Administrator muss Personal jeder Gruppe (Küchen- oder Servicepersonal) entfernen können.


|[[F00033]]<<F00033>>
|v0.3
|Personal auf Verfügbarkeit für Auftrag prüfen
a|
Das System muss Personal für jeden Zeitpunkt auf Anzahl pro Gruppe (Küchen- oder Servicepersonal) prüfen können.


|[[F00034]]<<F00034>>
|v0.3
|Personaldaten ändern
a|
Das Sytem kann dem Administrator das Ändern von Personaldaten ermöglichen.


|[[F00035]]<<F00035>>
|v0.3
|Personaleinteilung
a|
Der Administrator muss eine Ansicht über die zeitliche Einteilung des Personals abrufen können.


|[[F00036]]<<F00036>>
|v0.3
|Arbeitszeitaufstellung
a|
Der Administrator muss eine Darstellung der Arbeitszeit eines jeden Mitarbeiters einsehen können.


|[[F00040]]<<F00040>>
|v0.2
|Inventar auflisten
a|
Administrator muss Inventar in Ansicht dargestellt bekommen.


|[[F00041]]<<F00041>>
|v0.3
|Inventarstückzahl ändern
a|
Das System muss dem Administrator ermöglichen, die Stückzahl von Leihmaterial im Inventar zu erhöhen und zu verringern.


|[[F00042]]<<F00042>>
|v0.3
|Inventargegenstände hinzufügen und entfernen
a|
Der Administrator muss Leihmaterial und Verbrauchsmaterial dem Inventar hinzufügen und aus diesem entfernen können.


|[[F00050]]<<F00050>>
|v0.3
|Kostenabrechnung erstellen
a|
Das System muss die Kosten für jeden erstellten Auftrag <<F00020>> berechnen
sowie dem Administrator und dem betreffenden Kunden darstellen
können.


|[[F00051]]<<F00051>>
|v0.3
|Kostenabrechnung bezahlen
a|
Das System kann dem Administrator ermöglichen den Status einer Rechnung beliebig zwischen BEZAHLT und UNBEZAHLT zu ändern.



|[[F00060]]<<F00060>>
|v0.3
|Lebensmittel/Verbrauchsmaterial bestimmen
a|
Das System muss

* vollautomatisch die Menge an Lebensmitteln/Verbrauchsmaterialien für einen Auftrag bestimmen können,
* dem Administrator in der Detailansicht diese Menge an Lebensmitteln/Verbrauchsmaterialien für einen erstellten Auftrag <<F00020>> anzeigen.



|[[F00070]]<<F00070>>
|v0.3
|Zubehör/Leihmaterial auf Verfügbarkeit für Auftrag prüfen
a|
Das System muss Zubehör/Leihmaterial für jeden Zeitpunkt auf Anzahl im Inventar prüfen können.

|===

== Nicht-Funktionale Anforderungen

=== Qualitätsziele


[options="header"]
[cols="4,1"]
|===
| Qualitätsziel | Priorität (hoch - mittel - gering)
| einfache Bedienbarkeit (für Nicht-Informatiker) | hoch
| Absturzsicherheit | hoch
| einfache Erweiterbarkeit | mittel
| nachvollziehbare Strukturierung | mittel
| hohe Codequalität | mittel
|===

=== Konkrete Nicht-Funktionale Anforderungen

==== Einfache Bedienbarkeit
- Interaktion vollständig über Knöpfe und Textfelder
- fehlerhafte Nutzereingaben werden dem Nutzer direkt mitgeteilt
- intuitives Design z. B. des Menüs

==== Absturzsicherheit
- fehlerhafte Eingaben der Nutzer dürfen nicht zu Abstürzen führen

==== Einfache Erweiterbarkeit
- Software muss so entworfen sein, dass einfach neue Produkte oder Dienstleistungen ergänzt werden können

==== Nachvollziehbare Strukturierung
- das Design der Software muss sich an bekannten und geeigneten Entwurfsmustern orientieren

==== Hohe Codequalität
- verständliche Dokumentation von Objekten und dessen Methoden

== GUI Prototyp

Die folgenden Bilder sollen darstellen, wie die grafische Oberfläche aussehen soll, wobei das Design zweitranging, die Funktionalität priorisiert ist.

[[home_image]]
image::./models/mockups/startseite.svg[Startseite, 100%, 100%, pdfwidth=100%, title="Startseite", align=center]
[small]_Buttons in der Navigationsleiste dienen dem Scrollen auf die unterhalb liegenden Bereiche. Von anderen Unterseiten aus wird die Startseite geöffnet_

[[login_image]]
image::./models/mockups/login.svg[Loginseite, 100%, 100%, pdfwidth=100%, title="Loginseite", align=center]

[[register_image]]
image::./models/mockups/registrierung.svg[Registrierungsseite, 100%, 100%, pdfwidth=100%, title="Registrierungsseite", align=center]

[[produktseite_image]]
image::./models/mockups/produktseite.svg[Produktseite, 100%, 100%, pdfwidth=100%, title="Produktseite", align=center]

[[warenkorb_image]]
image::./models/mockups/warenkorb.svg[Warenkorb, 100%, 100%, pdfwidth=100%, title="Warenkorb", align=center]
[small]_Der Warenkorb ist über das Profil erreichbar._

[[administration_image]]
image::./models/mockups/administration.svg[Administration, 100%, 100%, pdfwidth=100%, title="Administration", align=center]

[[lagerverwaltung_image]]
image::./models/mockups/lagerverwaltung.svg[Lagerverwaltung, 100%, 100%, pdfwidth=100%, title="Lagerverwaltung", align=center]

[[auftraege_image]]
image::./models/mockups/auftraege.svg[Aufträge, 100%, 100%, pdfwidth=100%, title="Aufträge", align=center]

[[auftragskonfiguration_image]]
image::./models/mockups/auftragskonfiguration.svg[Auftragskonfiguration, 100%, 100%, pdfwidth=100%, title="Auftragskonfiguration", align=center]

[[personalverwaltung_image]]
image::./models/mockups/personalverwaltung.svg[Personalverwaltung, 100%, 100%, pdfwidth=100%, title="Personalverwaltung", align=center]

[[personalverwaltung_mitarbeiter_image]]
image::./models/mockups/personalverwaltung_mitarbeiter.svg[Personalverwaltung Mitarbeiter, 100%, 100%, pdfwidth=100%, title="Personalverwaltung Mitarbeiter", align=center]

[[kundenverwaltung_image]]
image::./models/mockups/kundenverwaltung.svg[Kundenverwaltung, 100%, 100%, pdfwidth=100%, title="Kundenverwaltung", align=center]

[[profil_image]]
image::./models/mockups/profil.svg[Profil, 100%, 100%, pdfwidth=100%, title="Profil", align=center]

[[nutzer_auftraege_image]]
image::./models/mockups/nutzer_auftraege.svg[Nutzeraufträge, 100%, 100%, pdfwidth=100%, title="Nutzeraufträge", align=center]

[[terminkalender_image]]
image::./models/mockups/terminkalender.svg[Terminkalender, 100%, 100%, pdfwidth=100%, title="Terminkalender", align=center]

== Datenmodell

=== Überblick: Klassendiagramm

image::models/analysis/domain.svg[]

=== Klassen und Enumerationen
Dieser Abschnitt stellt eine Vereinigung von Glossar und der Beschreibung von Klassen/Enumerationen dar. Jede Klasse und Enumeration wird in Form eines Glossars textuell beschrieben. Zusätzlich werden eventuellen Konsistenz- und Formatierungsregeln aufgeführt.

[options="header", cols="1h,5"]
[[classes_enumerations]]
|===
| Klasse/Enumeration     | Beschreibung
| Catering               | Hauptklasse, die den Cateringservice darstellt.
| Personal               | Sammlung von Beschäftigen von Mampf (ohne Zugriff auf das System), Küchen- und Servicepersonal.
| Mitarbeiter            | Person, die bei {company_name} angestellt ist.
| Arbeitszeitaufstellung | Informelle Aufstellung über die monatlich geleistete Arbeitszeit eines Mitarbeiters.
| Inventar               | Sammlung von Leih- und Verbrauchsmaterial (inkl. Stückzahl).
| Verbrauchsmaterial     | Gegenstände, welche einem Event zugeordnet werden und anschließend verbraucht sind. +
Der Einkaufspreis wird für interne Zwecke gespeichert,
die UVP gibt den Preis an,
für den ein Kunde dieses Verbrauchsmaterial zu einem Auftrag buchen kann.
Ist ein Sonderpreis vorhanden,
wird es für den Kunden besonders gekennzeichnet
und für diesen Preis abgerechnet.
| Leihmaterial           | Gegenstände, welche über einen festen Zeitraum vermietet werden können.
| AuftragsDatenbank      | Sammlung aller Aufträge.
| Auftrag                | Sammlung von Leistungen eines Geschäftsfeldes über einen konkreten Zeitraum inklusive Personal, Leih- und Verbrauchsmaterial (z. B. Buchung von Rent-a-Cook).
| Kostenabrechnung       | Informelle Kostenaufstellung mit Endsumme für einen konkreten Auftrag.
| AuftragsStatus         | Der Status des Auftrages. +
_GEPLANT_: Auftrag wurde gebucht. Dies beinhaltet die komplette Zeit von Buchung bis zum Abschluss des Auftrages. +
_BEENDET_: Auftrag wurde erfolgreich abgeschlossen. +
_ABGESAGT_: Auftrag wurde widerrufen oder gekündigt.
| Eventcatering          | Auftrag über die Übernahme von Verpflegung bei einer großen Veranstaltung.
| VollEventcatering      | Erweiterung von Eventcatering um Dekoration, Ausrüstung und Personal.
| PartyService           | Auftrag über die Belieferung von privaten Feierlichkeiten mit kalten Platten.
| MobileBreakfast        | Auftrag über Beliferung von kleineren Firmen mit Frühstück für die Angestellten.
| RentACook              | Auftrag über Verleihung von Küchen- und Servicepersonal an Privathaushalte.
| NutzerDatenbank        | Sammlung aller (registrierten) Nutzer des Systems.
| Nutzer                 | Abstraktion über Administrator und Kunde
| Kunde                  | Als Kunde angemeldeter Nutzer (ein Kunde von Mampf).
| Administrator          | Als Administrator angemeldeter Nutzer (i. d. R. Hannes Wurst).
|===

== Akzeptanztestfälle

IDs die mit ATE anfangen sind die Edge Cases.

[cols="1h, 4"]
[[AT0101]]
|===
|ID            |<<AT0101>>
|Anwendungsfall|<<UC0101>>
|Voraussetzung |Der Administrator ist im System angemeldet.
|Ereignis      |Der Administrator navigiert, um Kundendaten anzusehen.
|Ergebnis      |Die Kundendaten werden dem Nutzer angezeigt.
|===

[cols="1h, 4"]
[[AT0102]]
|===
|ID            |<<AT0102>>
|Anwendungsfall|<<UC0102>>
|Voraussetzung |Der Administrator ist im System angemeldet.
|Ereignis      |Der Administrator wählt einen Kunden aus und entscheidet, den Kunden zu entfernen.
|Ergebnis      |Der Kunde wird aus dem System entfernt und eine Bestätigungsnachricht wird angezeigt.
|===

[cols="1h, 4"]
[[AT0201]]
|===
|ID            |<<AT0201>>
|Anwendungsfall|<<UC0201>>
|Voraussetzung |Der Administrator ist im System angemeldet.
|Ereignis      |Der Administrator entscheidet einen Angestelten dem System hinzuzufügen.
|Ergebnis      |Das Personal wird erfolgreich registriert und eine Bestätigungsnachricht wird angezeigt.
|===

[cols="1h, 4"]
[[AT0202]]
|===
|ID            |<<AT0202>>
|Anwendungsfall|<<UC0202>>
|Voraussetzung |Der Administrator ist im System angemeldet.
|Ereignis      |Der Administrator wählt einen Angestelten und aktualisiert deren Daten.
|Ergebnis      |Die Daten werden erfolgreich aktualisiert und eine Bestätigungsnachricht wird angezeigt.
|===

[cols="1h, 4"]
[[AT0203]]
|===
|ID            |<<AT0203>>
|Anwendungsfall|<<UC0203>>
|Voraussetzung |Der Administrator ist im System angemeldet.
|Ereignis      |Der Administrator navigiert, um Mitarbeiterdaten einzusehen.
|Ergebnis      |Die Mitarbeiterdaten werden dem Administrator angezeigt.
|===

[cols="1h, 4"]
[[AT0204]]
|===
|ID            |<<AT0204>>
|Anwendungsfall|<<UC0204>>
|Voraussetzung |Der Administrator ist im System angemeldet.
|Ereignis      |Der Administrator wählt einen Mitarbeiter aus und entscheidet, diesen zu entfernen.
|Ergebnis      |Der Mitarbeiter wird aus dem System entfernt und eine Bestätigungsnachricht wird angezeigt.
|===

[cols="1h, 4"]
[[AT0205]]
|===
|ID            |<<AT0205>>
|Anwendungsfall|<<UC0205>>
|Voraussetzung |Der Administrator ist im System angemeldet.
|Ereignis      |Der Administrator navigiert, um die Arbeitszeitaufstellungen des Personals einzusehen.
|Ergebnis      |Die Arbeitszeitaufstellungen des Personals werden dem Administrator angezeigt.
|===

[cols="1h, 4"]
[[AT0206]]
|===
|ID            |<<AT0206>>
|Anwendungsfall|<<UC0206>>
|Voraussetzung |Der Administrator ist im System angemeldet.
|Ereignis      |Der Administrator navigiert, um die Personaleinteilung einzusehen.
|Ergebnis      |Die Personaleinteilung werden dem Administrator angezeigt.
|===

[cols="1h, 4"]
[[AT0301]]
|===
|ID            |<<AT0301>>
|Anwendungsfall|<<UC0301>>
|Voraussetzung |Der Administrator ist im System angemeldet.
|Ereignis      |Der Administrator navigiert zum Inventarbereich, um Artikel anzusehen.
|Ergebnis      |Der Inhalt des Inventars wird dem Administrator angezeigt.
|===

[cols="1h, 4"]
[[AT0302]]
|===
|ID            |<<AT0302>>
|Anwendungsfall|<<UC0302>>
|Voraussetzung |Der Administrator ist im System angemeldet.
|Ereignis      |Der Administrator wählt einen Artikel aus und aktualisiert dessen Details.
|Ergebnis      |Die Artikelinformationen werden erfolgreich aktualisiert und eine Bestätigungsnachricht wird angezeigt.
|===

[cols="1h, 4"]
[[AT0303]]
|===
|ID            |<<AT0303>>
|Anwendungsfall|<<UC0303>>
|Voraussetzung |Der Administrator ist im System angemeldet.
|Ereignis      |Der Administrator entscheidet einen neuen Artikel dem Inventar hinzuzufügen.
|Ergebnis      |Der Artikel wird erfolgreich hinzugefügt und eine Bestätigungsnachricht wird angezeigt.
|===

[cols="1h, 4"]
[[AT0304]]
|===
|ID            |<<AT0304>>
|Anwendungsfall|<<UC0304>>
|Voraussetzung |Der Administrator ist im System angemeldet.
|Ereignis      |Der Administrator entscheidet einen Artikel aus dem Inventar zu enftfernen.
|Ergebnis      |Der Artikel wird erfolgreich entfernt und eine Bestätigungsnachricht wird angezeigt.
|===

[cols="1h, 4"]
[[AT0401]]
|===
|ID            |<<AT0401>>
|Anwendungsfall|<<UC0401>>
|Voraussetzung |Der Nutzer ist im System angemeldet.
|Ereignis      |Der Nutzer wählt „Account löschen“ im Bereich Account.
|Ergebnis      |Das Konto wird erfolgreich gelöscht und eine Bestätigungsnachricht wird angezeigt.
|===

[cols="1h, 4"]
[[AT0402]]
|===
|ID            |<<AT0402>>
|Anwendungsfall|<<UC0402>>
|Voraussetzung |Der Nutzer ist im System angemeldet.
|Ereignis      |Der Nutzer wählt Abmelden in der Navigation Bar.
|Ergebnis      |Der Nutzer wird erfolgreich abgemeldet.
|===

[cols="1h, 4"]
[[AT0403]]
|===
|ID            |<<AT0403>>
|Anwendungsfall|<<UC0403>>
|Voraussetzung |Der Nutzer ist im System angemeldet.
|Ereignis      |Der Nutzer wählt Aufträge in der Navigation Bar.
|Ergebnis      |Eine Auflistung aller Aufträge wird dem Nutzer angezeigt.
|===

[cols="1h, 4"]
[[AT0501]]
|===
|ID            |<<AT0501>>
|Anwendungsfall|<<UC0501>>
|Voraussetzung |Der Kunde ist im System angemeldet.
|Ereignis      |Der Kunde wählt Kostenabrechnung in der Navigation Bar.
|Ergebnis      |Eine Liste aller Kostenabrechnungen wird dem Nutzer angezeigt.
|===

[cols="1h, 4"]
[[AT0502]]
|===
|ID            |<<AT0502>>
|Anwendungsfall|<<UC0502>>
|Voraussetzung |Der Kunde ist im System angemeldet.
|Ereignis      |Der Kunde wählte Angebote in der Navigation Bar, wählt eins dieser Angebote und wählt „Zum Warenkorb hinzufügen“.
|Ergebnis      |Eine Liste mit allen Artikeln im Warenkorb erscheint.
|===

[cols="1h, 4"]
[[AT0503]]
|===
|ID            |<<AT0503>>
|Anwendungsfall|<<UC0503>>
|Voraussetzung |Der Kunde ist im System angemeldet.
|Ereignis      |Der Kunde navigiert zum Bereich Aufträge und bearbeitet dessen Aufträge.
|Ergebnis      |Die Aufträge wird bearbeitet und eine Bestätigungsnachricht wird angezeigt.
|===

[cols="1h, 4"]
[[AT0601]]
|===
|ID            |<<AT0601>>
|Anwendungsfall|<<UC0601>>
|Voraussetzung |Der unregistrierte Nutzer geht auf das System.
|Ereignis      |Der unregistrierte Nutzer wählt Anmelden in der Navigation Bar.
|Ergebnis      |Der unregistrierte Nutzer wird im System angemeldet.
|===

[cols="1h, 4"]
[[AT0602]]
|===
|ID            |<<AT0602>>
|Anwendungsfall|<<UC0602>>
|Voraussetzung |Der unregistrierte Nutzer geht auf das System.
|Ereignis      |Der unregistrierte Nutzer wählt Registrieren in der Navigation Bar und erstellt ein Konto.
|Ergebnis      |Der unregistrierte Nutzer wird im System registiriert.
|===

[cols="1h, 4"]
[[ATE0202]]
|===
|ID            |<<ATE0202>>
|Anwendungsfall|<<UC0202>>
|Voraussetzung |Der Administrator ist im System angemeldet.
|Ereignis      |Der Administrator versucht, Kundendaten zu bearbeiten, die im System nicht existieren (z. B. eine ungültige Kunden-ID).
|Ergebnis      |Das System gibt eine Fehlermeldung zurück, die besagt, dass die Kundendaten nicht existieren.
|===

[cols="1h, 4"]
[[ATE0204]]
|===
|ID            |<<ATE0204>>
|Anwendungsfall|<<UC0204>>
|Voraussetzung |Der Administrator ist im System angemeldet und ein Personal ist einer aktiven Aufgabe zugewiesen.
|Ereignis      |Der Administrator versucht, ein Personal zu entfernen, der derzeit einer laufenden Aufgabe oder Bestellung zugewiesen ist.
|Ergebnis      |Das System gibt eine Fehler- oder Warnmeldung zurück, die besagt, dass das Personal derzeit zugewiesen ist und nicht entfernt werden kann, bis er neu zugewiesen ist oder die Aufgabe abgeschlossen ist.
|===

[cols="1h, 4"]
[[ATE0502]]
|===
|ID            |<<ATE0502>>
|Anwendungsfall|<<UC0502>>
|Voraussetzung |Der Kunde ist im System angemeldet.
|Ereignis      |Der Kunde versucht, eine neue Auftrag hinzuzufügen, gibt jedoch unvollständige oder ungültige Daten an.
|Ergebnis      |Das System gibt eine Fehlermeldung zurück, die angibt, welcher Teil der Daten fehlt oder ungültig ist.
|===

[cols="1h, 4"]
[[ATE0601]]
|===
|ID            |<<ATE0601>>
|Anwendungsfall|<<UC0601>>
|Voraussetzung |Der unregistrierte Nutzer geht auf das System,sein Konto wurde jedoch aufgrund mehrerer fehlgeschlagener Anmeldeversuche gesperrt.
|Ereignis      |Der unregistrierte Nutzer versucht sich mit den gesperrten Anmeldeinformationen anzumelden.
|Ergebnis      |Das System gibt eine Fehlermeldung zurück die besagt, dass das Konto gesperrt ist und möglicherweise Anweisungen gibt, wie das Konto entsperrt oder zurückgesetzt werden kann.
|===

== Glossar

:domain_ref: Siehe <<classes_enumerations, Datenmodell>>

[options="header"]
[cols="1h,4"]
[[glossar]]
|===
| Begriff | Beschreibung
| Nutzer | {domain_ref}
| unauthentifizierter Nutzer | Person, die auf das System zugreift, aber nicht angemeldet und/oder registriert ist
| Kunde | {domain_ref}
| unregistrierter Nutzer | Nutzer vor der Registrierung
| Administrator | {domain_ref}
| Cateringservice/System | zu entwickelnde Software für Herrn Wurst
| Zubehör/Leihmaterial | Gegenstände, welche über einen festen Zeitraum vermietet werden können
| Lebensmittel/Verbrauchsmaterial | {domain_ref}
| Auftrag | {domain_ref}
| Personal | {domain_ref}
| Inventar | {domain_ref}
| Kostenabrechnung | {domain_ref}
| Geschäftsfelder | Rent-a-Cook, Eventcatering, Partyservice, Mobile Breakfast
| UVP | Preis eines Produkts für den Kunden
| Einkaufspreis | Preis eines Produkts vor Steuern
| monatlich/Geschäftsmonat | Zeitraum vom 1. bis letzten Tag des Monats
|===

== Offene Punkte
Offene Punkte werden entweder direkt in der Spezifikation notiert. Wenn das Pflichtenheft zum finalen Review vorgelegt wird, sollte es keine offenen Punkte mehr geben.
