Notification-System konfigurieren
SpeamCore versendet automatisch Benachrichtigungen — bei Compliance-Ablauf, Mahnung, Auftragsabschluss, etc. Diese Anleitung zeigt Ihnen den Admin-Setup.
Compliance-Notification-Settings konfigurieren
Pro Use-Case gibt es zwei Settings im keyGroup: 'complianceNotifications': ein Enabled-Flag und eine LeadDays-Vorlauffrist. Code-verifiziert in complianceNotification.service.ts:
| Use-Case | Enabled-Setting | LeadDays-Setting | Default |
|---|---|---|---|
| Probezeit-Ende | complianceProbationEndNoticeEnabled | complianceProbationEndNoticeLeadDays | aktiv, 30 Tage |
| Jubiläum | complianceJubileeNoticeEnabled | complianceJubileeNoticeLeadDays | aktiv, 90 Tage |
| Vertragsende | complianceContractEndNoticeEnabled | complianceContractEndNoticeLeadDays | aktiv, 60 Tage |
| Urlaubsverfall (BAG) | complianceVacationExpiryNoticeEnabled | complianceVacationExpiryNoticeLeadDays | aktiv, 90 Tage |
| §3 ArbZG-Verstoß | enforceMaxWorkingHours | (kein LeadDays — Live-Hook) | inaktiv (Default false) |
So konfigurieren Sie die Settings
- Sidebar → Settings (Aufrufpfad
/settings). - Tab Compliance-Notifications.
- Pro Use-Case:
- Enabled-Toggle — aktiviert / deaktiviert die Engine für diesen Check
- LeadDays-Wert — wie viele Tage vor dem Trigger-Datum die Notification erscheinen soll
- Speichern.
Wichtig — Settings-Cache: Der Service lädt die Settings beim Engine-Lauf neu (kein langer Cache). Aktivierungen sind ab dem nächsten Engine-Lauf wirksam (max. 24h via Daily-Cron, sofort via manuellem Trigger über POST /api/compliance-checks/run-daily).
Beispiele für sinnvolle LeadDays-Werte
| Use-Case | LeadDays | Begründung |
|---|---|---|
| Probezeit-Ende | 14-30 Tage | genug Zeit für Übernahme-/Kündigungs-Entscheidung |
| Jubiläum | 60-90 Tage | Vorlauf für Geschenk / Feier-Vorbereitung |
| Vertragsende | 60-90 Tage | gesetzliche Kündigungsfrist nicht vergessen |
| Urlaubsverfall (BAG) | 60-120 Tage | BAG-Hinweispflicht-Zeit wahren, MA Zeit zum Verbrauch geben |
| §3 ArbZG | (kein LeadDays) | Live-Hook beim Stempeln, keine Vorab-Warnung |
enforceMaxWorkingHours — Sonderfall §3 ArbZG
Im Gegensatz zu den anderen Use-Cases ist enforceMaxWorkingHours standardmäßig aktiviert (true)? Nein — Default ist false, d. h. ohne Aktivierung läuft die §3-ArbZG-Cap-Logik nicht. Bei Aktivierung:
- Live-Hook in
workTimeBalance.servicetriggert beim Stempel-Speichern - Daily-Cron 02:00 läuft
runDailyComplianceChecksmit ArbZG-Engine - Bei Cap-Überschreitung wird
WorkTimeOvertimeApproval-Eintrag erzeugt +arbzgViolation-ComplianceCheck mit Severityviolation
Mehr Hintergrund: §3 ArbZG-Cap-Konzept.
Manueller Trigger-Endpoint
Für Tests oder Sofort-Sweeps:
POST /api/compliance-checks/run-daily
Erzeugt sofort alle ausstehenden Checks für den heutigen Tag. Idempotent — ein zweiter Aufruf erzeugt keine Duplikate.
POST /api/compliance-checks/simulate
Simulations-Modus für Konfigurations-Tests — was würde die Engine bei aktuellen Settings + Stamm-Daten erzeugen, ohne tatsächlich Checks anzulegen. Ideal um vor Aktivierung im Live-System zu prüfen, wie viele Notifications Mitarbeiter bekommen würden.
Wann mache ich das?
- Initial-Setup des Mandanten.
- Bei neuen Anforderungen — neue Notification-Use-Cases.
- Periodisch — Verteiler-Listen aktualisieren.
Konzept
Notification-System
├─ Channels (wie wird versendet?)
│ ├─ E-Mail (SMTP)
│ ├─ SMS (z.B. Twilio)
│ ├─ Push (z.B. Firebase)
│ └─ In-App (SpeamCore-Notification-Center)
├─ Event-Types (was triggert Notification?)
│ ├─ Compliance läuft ab
│ ├─ Mahnung Stufe X
│ ├─ Auftrag abgeschlossen
│ └─ ...
├─ Templates (was steht drin?)
│ └─ pro Event-Type + Channel ein Template
└─ Subscriptions (wer bekommt was?)
└─ User / Rolle abonniert Event-Types
So richten Sie das System ein
Channels einrichten
In der Sidebar Notification-Channels. Pro Channel-Typ:

- E-Mail-Channel — SMTP-Server, Absender-Adresse.
- SMS-Channel — Provider, API-Key.
- Push-Channel — Firebase-Konfiguration.
Mehrere Channels desselben Typs möglich (z.B. zwei SMTP-Server).

Event-Types definieren
In Notification-Event-Types sehen Sie alle möglichen Ereignisse:
- Compliance läuft ab in 30 Tagen
- Mahnung Stufe 1 erstellt
- Auftrag abgeschlossen mit Unterschrift
- Eingangsrechnung wartet auf Freigabe
- etc.
Standard-Events kommen mit SpeamCore — Custom-Events bei Bedarf entwickeln.
Templates pflegen
In Notification-Templates: pro Event-Type + Channel-Kombination ein Template.

Beispiel: „Compliance läuft ab" + Mail-Channel:
Betreff: Ihre {compliance_type}-Bescheinigung läuft am {expiry_date} ab
Hallo {user_name},
Ihre {compliance_type}-Bescheinigung läuft am {expiry_date} ab —
das ist in {days_until_expiry} Tagen. Bitte organisieren Sie zeitnah
einen Schulungs-Termin oder erneuern Sie die Bescheinigung.
Bei Fragen wenden Sie sich an {hr_contact}.
Mit freundlichen Grüßen,
{firm_name}
Variablen {...} werden zur Laufzeit ersetzt.
Subscriptions zuordnen
In Notification-Subscriptions — wer bekommt was?

- Pro User explizit abonniert.
- Pro Rolle alle Mitglieder.
- Pro Bedingung (z.B. „nur Mitarbeiter der Niederlassung X").
Beispiel:
- Compliance-Reminder → eingeschriebener Mitarbeiter + HR-Leitung.
- Mahnung erstellt → Buchhaltungs-SB + Buchhaltungs-Leitung.
- Auftrag abgeschlossen → Innendienst-Verantwortlicher.
Notification-Logs überwachen
In Notification-Logs sehen Sie versendete Notifications mit Status:

- Versand erfolgreich / fehlgeschlagen.
- Lesebestätigung (sofern aktiviert).
- Bounce-Ursachen.
Bei wiederholten Fehlern: Channel-Konfiguration prüfen, ggf. Provider-Support.
Tipps
- Reduzierte Notifications — zu viele = wirken wie Spam, werden ignoriert. Wirklich wichtige.
- Channel-Mix — Compliance-Reminder per Mail + In-App. SMS nur für Akut-Fälle.
- Test-Versand vor Produktiv — eigenes Postfach als Empfänger.
- Provider-Kosten im Blick — SMS sind teurer als Mails.
Verwandte Tutorials
- Notification-System (Konzept) — technische Details
- Compliance-Checks (HR-Leitung) — nutzt Reminder
Für Entwickler: technische Details
- Module: Notification-Channels, -Event-Types, -Events, -Templates, -Subscriptions, -Logs.
- Channel-Provider: konfigurierbar via
NotificationChannel.providerType. - Template-Engine: Variable-Substitution mit Mustache-ähnlicher Syntax.
- CASL:
view:NotificationChannel,update:NotificationChannel, etc.