feat: Leitstand-Fixes, Sicher-Modus, Notfall-Alarm, Audit-Log + Loeschfristen

- Audio-Wiedergabe im Leitstand brach durch Auto-Refresh (setInterval) ab,
  Karten-DOM wurde per innerHTML neu gebaut waehrend ein <audio> lief.
  takt() pausiert jetzt, solange eine Aufnahme abgespielt wird. Zusaetzlich
  HTTP-Range-Unterstuetzung fuer /audio/ nachgeruestet (war vorher immer
  volle Datei statt 206 Partial Content).
- Sicher-Modus: Rufnummern per Klick blurren, fuer Screenshots/Aufnahmen.
- Notfall-Alarm: pulsierender Karten-Rahmen + Banner + minuetlicher Ton,
  solange ein Notfall nicht im letzten Stapel (Erledigt) liegt.
- Favicon.
- Neues unveraenderliches audit.log (append-only, macOS uappnd-Flag) als
  Nachweis fuer den Umgang mit Anrufdaten - protokoll.schreibe() spiegelt
  jetzt jedes Ereignis dorthin, zusaetzlich zum rotierenden verlauf.log.
- pipe.loeschen: loescht erledigte Anrufe nach LOESCHFRIST_TAGE (lokal +
  Nextcloud), unbearbeitete Anrufe (nicht im letzten Stapel) bleiben immer
  unangetastet. Gedacht fuer taeglichen Cron-Lauf.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015vtvcyNkapuDh583643hNs
This commit is contained in:
Jeuner 2026-08-24 19:13:09 +02:00
parent 0f550be66a
commit 989d3ba85b
7 changed files with 324 additions and 6 deletions

View file

@ -31,6 +31,13 @@ NEXTCLOUD_UPLOAD=1
# Nextclouds Standard-Adressbuch heißt "contacts".
NEXTCLOUD_ADRESSBUCH=contacts
# --- Aufbewahrungsfrist (pipe.loeschen, täglich per Cron) ---
# Nach so vielen Tagen wird ein erledigter Anruf (Aufnahme + Transkript)
# gelöscht - lokal und bei Nextcloud. 0 = aus, nichts wird gelöscht. Greift
# nur im letzten Stapel (DECK_STAPEL[-1], Default "Erledigt") - unbearbeitete
# Anrufe bleiben unangetastet, egal wie alt.
LOESCHFRIST_TAGE=0
# --- Telefonie (SIP-Zugang der Praxis, leer lassen = keine Telefonannahme) ---
SIP_USER=
SIP_DOMAIN=sip.plusnet.de