Promote develop → main (2026-07-25 23:31 UTC) #53

Zusammengeführt
IntelSight_Admin hat 7 Commits von develop nach main 2026-07-26 01:31:20 +02:00 zusammengeführt

7 Commits

Autor SHA1 Nachricht Datum
444241c7d3 Release-Notes: Abrechnung, Budget-Warnung & Telegram-Verbesserungen 2026-07-26 01:31:17 +02:00
claude-dev
f8499c4e40 feat(abrechnung): Credits-Uebertrag in den Folgemonat entfernt
Produktentscheidung 07/2026: ungenutzte Credits verfallen zum
Periodenende, es gilt der harte Monatsdeckel wie verkauft. Der
Uebertrag (credits_rollover/credits_carried) fliegt komplett raus:
roll_credit_period setzt nur noch Verbrauch + Warnflag zurueck,
check_license rechnet verfuegbar = credits_total, die Migration legt
die beiden Spalten gar nicht erst an (Live hat sie nie bekommen, die
Promote-Warteschlange enthielt sie noch). ABRECHNUNG.md angepasst.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 21:45:15 +00:00
claude-dev
5450fd25ae feat(system): Telefonnummer in der Telegram-Status-Meldung
Ergaenzt phone im telegram_session-Status, damit das Portal die
Telegram-Zeile im Reiter Recherche-Zugaenge vollstaendig fuellen kann.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 19:15:56 +00:00
claude-dev
7dae63ebf9 feat(system): Telegram-Session-Status in system_status melden
Neue Key-Value-Tabelle system_status (idempotente Migration). Der Monitor
prueft die Telethon-Session beim Start und taeglich um 04:30 (eigener
Scheduler-Job) und schreibt ok/account/error unter dem Key
telegram_session. Das Verwaltungsportal zeigt den Eintrag im Reiter
Recherche-Zugaenge an, damit ein Session-Ausfall sichtbar wird statt
nur im Server-Log zu stehen. Fehler beim Pruefen stoeren den Betrieb
nie (try/except, eigene DB-Connection wie beim Health-Nachtjob).

Promote-Reihenfolge wie gehabt: Monitor VOR Verwaltung (Migration).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 19:04:46 +00:00
claude-dev
17b1886f25 fix(abrechnung): Warnschwelle 0 schaltet die Budget-Warnung aus
Bisher fiel eine 0 durch das or-80-Muster still auf die Voreinstellung
zurück, ein Abschalten der Warnung war unmöglich. Jetzt gilt, 0 = aus,
NULL = Voreinstellung 80, alles andere wie gehabt. Das Verwaltungsportal
bietet die 0 in seinen Formularen an.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 15:51:45 +00:00
claude-dev
d367c60b26 feat(statistik): Aktivitäts-Tage je Nutzer erfassen (MAU/DAU-Grundlage)
Neue Tabelle user_activity_days (user_id, day, tenant_id, ein Eintrag je
Nutzer und Kalendertag), angelegt per idempotenter Startup-Migration.
Geschrieben wird sie in get_current_user bei jeder authentifizierten
Nutzung, ein In-Memory-Tagesmerker begrenzt das auf einen INSERT OR
IGNORE je Nutzer und Tag, Fehler werden geschluckt und blockieren nie
eine Anfrage. Gelesen wird die Tabelle nur vom Verwaltungsportal für
die neue MAU/DAU-Statistik. Ein reines Login-Protokoll wäre zu grob,
weil das JWT 24 Stunden hält.

Getestet gegen eine DB-Kopie, Tabelle entsteht, je Nutzer und Tag
genau ein Eintrag trotz Mehrfachaufruf.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 15:01:00 +00:00
claude-dev
027244ada5 feat(abrechnung): pflegbare Preistabelle billing_tariff als Quelle der Sätze
Die Credits-Sätze je Aktion stehen jetzt in der geteilten Tabelle
billing_tariff statt nur in der Konfiguration. Die Migration legt die
Tabelle an und befüllt sie einmalig mit den wirksamen CREDIT_TARIFF-
Werten, danach liest _charge_credits() bei jeder Buchung die Tabelle,
fehlende Schlüssel oder eine fehlende Tabelle fallen auf die
Konfiguration zurück. Damit können Monitor und Verwaltungsportal
dieselben Sätze anzeigen und das Portal kann sie künftig pflegen,
eine Preisänderung braucht keinen Server-Eingriff mehr.

Getestet gegen eine Kopie der Staging-DB. Seed mit 7 Sätzen (45/40/
12/12/1/1/1), Buchung nach Tabelle, Tabellenänderung greift sofort,
Rückfall auf die Konfiguration ohne Tabelle.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 14:28:09 +00:00