feat(notifications): täglicher Lauf über SMTP und Apprise

- Kanäle SMTP (HTML-Mail mit Logos als CID-Anhang) und Apprise, beide
  blockierenden Bibliotheken laufen in einem Thread
- Vier Anlässe: Fälligkeiten im Vorlauf, Kündigungsfristen in drei Stufen,
  überschrittene Budgets je Monat, Vertragsverlängerungen im Folgemonat
- APScheduler im Anwendungsprozess, täglich 07:00 Europe/Berlin, räumt zugleich
  abgelaufene Sitzungen auf
- Duplikatsschutz über den Zieltag statt den Versandtag; fehlgeschlagener
  Versand wird beim nächsten Lauf erneut versucht
- Endpunkte für Regeln, Protokoll, Testversand und sofortigen Lauf
- Einstellungsseite mit Einrichtungsstand, Regelpflege und Protokoll
- 25 neue Backend-Tests (260 gesamt), 9 neue Frontend-Tests (74 gesamt)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014e7t8UpmoVNMtWivY5LiSH
This commit is contained in:
moneyfy
2026-09-09 17:04:30 +02:00
co-authored by Claude Opus 5
parent 0adf154049
commit 54c59c9f71
17 changed files with 2500 additions and 1 deletions
+16
View File
@@ -83,6 +83,22 @@ vollständige, kommentierte Liste. Die wichtigsten:
| `COOKIE_SECURE` | `true` | Hinter HTTPS `true`, für lokales HTTP `false` |
| `SCHEDULER_ENABLED` | `true` | Täglicher Benachrichtigungslauf um 07:00 |
## Benachrichtigungen
Ein Job läuft täglich um 07:00 Uhr (`Europe/Berlin`) im Anwendungsprozess ohne
Redis, ohne Celery. Er prüft vier Anlässe: bald fällige Posten, Kündigungsfristen
30, 14 und 7 Tage vor dem Termin, überschrittene Budgets und Vertragsverlängerungen
im kommenden Monat.
Der Duplikatsschutz hängt am **Zieltag des Ereignisses**, nicht am Versandtag:
Eine Fälligkeit am 15.03. wird genau einmal gemeldet, unabhängig davon, an
welchem Tag des Vorlaufs der Job läuft. Ein fehlgeschlagener Versand gilt als
offen und wird beim nächsten Lauf erneut versucht.
Als Kanäle stehen SMTP (HTML-Mail mit eingebetteten Firmenlogos) und Apprise zur
Verfügung. Über *Einstellungen → Benachrichtigungen* lassen sich Regeln pflegen,
eine Testnachricht verschicken und das Versandprotokoll einsehen.
## Diagramme
Die Serienfarben stammen aus einer Palette, die gegen die hellen und dunklen