# Benachrichtigungen ___ ## Benachrichtigungs-Typen (Auslöser) ### 1. Teilnehmer wird zugeordnet Ein Teilnehmer wird über die Anwendung einem Anlauf zugeordnet. Dies ist entweder die Agentur (durch BSMD zugeordnet) oder ein weiterer Teilnehmer außer dem Hafenamt, der durch die Agentur zugeordnet wird. Die Zuordnung des Hafenamts erfolgt automatisch bei Anlage des Anlaufs. ### 2. Morgenrunde ist relevant Ein Teilnehmer ist einem Anlauf zugeordnet. Dieser Anlauf findet in den nächsten 24 Stunden statt und ist daher für die "Morgenrunde" relevant. Der Teilnehmer erhält dazu eine Benachrichtigung. ### 3. Zeitlicher Konflikt ("Ampel") Durch unterschiedliche Zeitangaben der Teilnehmer wird die Ampel ausgelöst und stellt eine entsprechende Fehlermeldung dar. Die Benachrichtigung wird ausgelöst bei folgenden Ampel-Wechseln: * grün -> gelb * grün -> rot * gelb -> rot ### 4. Auflösung zeitl. Konflikt * rot -> gelb * rot -> grün * gelb -> grün ### 5. Abwählen eines Teilnehmer Der Teilnehmer ist nicht mehr länger dem Anlauf zugeordnet. ## API ```yaml NotificationType: type: string description: Type of notification enum: - assignment - next24h - time_conflict - time_conflict_resolved - unassigned ``` ## Entfernen von Benachrichtigungen Unter den folgenden Voraussetzungen werden Benachrichtigungen wieder aus dem System entfernt: * Die Benachrichtigung ist älter als 3 Tage (n.B.: Zeitraum definieren) * Ein Teilnehmer wird wieder abgewählt * Ein zeitlicher Konflikt wird aufgelöst ## Ablauf der Benachrichtigungen Eine Benachrichtung enthält folgende Informationen: * Verweis auf den Anlauf (shipcall) * ein Erstell- und Änderungsdatum * einen Benachrichtigungs-Typ * einen Zustand ("level") Der Zustand steuert den Ablauf, wenn die Prüfungsfunktion die Anläufe durchsucht oder ein Anlauf gespeichert wird. Wird einer der Zustände 1-3 erkannt wird geprüft, ob bereits eine Benachrichtigung vorhanden ist. Ist dies nicht der Fall, wird eine Benachrichtigung neu erstellt im Zustand "0". Die Prüfungsfunktion durchläuft alle Benachrichtigungen. Abhängig vom Zustand (0-2) werden folgende Aktionen ausgeführt: * Ist die Benachrichtigung um Zustand "0" und sind mind. 10 Minuten vergangen, wird die Benachrichtigung in den Zustand "1" versetzt. * Ist die Benachrichtigung im Zustand "1" wird versucht, allen dafür eingetragenenen Benutzern eine E-Mail zu senden. Ist dies erfolgreich, wechselt die Benachrichtigung in den Zustand "2". * Ist die Benachrichtigung im Zustand "2" und sind mind. 3 Tage vergangen wird die Benachrichtigung gelöscht. ```mermaid --- title: Ablauf --- stateDiagram-v2 state "Level 0" as lvl0 state "Level 1" as lvl1 state "Level 2" as lvl2 [*] --> lvl0: Zustand 1-3 erkannt lvl0 --> lvl1: +10 min. lvl1 --> lvl2: E-Mail Versand erfolgt lvl2 --> [*]: +3 Tage ODER Zustand 1-3 nicht mehr relevant lvl0 --> [*]: Zustand 1-3 nicht mehr relevant ``` ## Bemerkungen Für die Zukunft sind ggf. auch Benachrichtigungen via Whatsapp/Signal geplant. Diese verhalten sich analog zu den E-Mail Benachrichtigungen und werden nur einmal versendet. Die Anzahl der Zustände wird dabei erhöht bzw. der Wechsel in den Endzustand ensprechend angepasst. ## Benachrichtigungstext ... TBD