Files
beh-rde-brief/src/utils/aufbewahrung.ts
T
JUSNandClaude Fable 5 ad1c2bf76c Datenschutz-Ausbau: Archiv-Verschlüsselung, App-Sperre, Auto-Löschen
- Brief-Archiv jetzt AES-256-GCM-verschlüsselt (expo-crypto, Schlüssel im
  SecureStore); Migration alter Klartext-Bestände beim ersten Laden;
  im Simulator auf der Platte verifiziert (nur Chiffrat, kein Klartext)
- AppSchutz-Komponente: optionale App-Sperre (Face ID / Geräte-Code,
  expo-local-authentication) + Sichtschutz im App-Umschalter
- Auto-Löschen alter Briefe (30/90 Tage, Einstellungen), pure Filter-
  Funktion mit Tests
- UTF-8-Helfer (Umlaute/Arabisch/Emoji-sicher) mit Tests; gesamt 30 Tests
- Einstellungen: neuer Abschnitt "Sicherheit"
- Datenschutzerklärung (Web + Entwurf) um die neuen Maßnahmen ergänzt
- Neu: rechtliches/datenschutz-factsheet.md für Kooperations-Pitches
- EU-Verarbeitung geprüft: inference_geo bietet aktuell nur us/global,
  keine EU-Option (Haiku 4.5 gar nicht) — als Ausbaupfad dokumentiert

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 15:30:19 +02:00

28 lines
956 B
TypeScript

/**
* Auto-Löschen alter Briefe (Datensparsamkeit, DSGVO-Grundsatz).
* Reine Funktion — die Anwendung passiert beim App-Start im Store.
*/
import { BriefEintrag } from '../types';
/**
* Filtert Briefe heraus, die älter als die Aufbewahrungsdauer sind.
*
* @param briefe - das aktuelle Archiv
* @param aufbewahrungTage - 0 = nie löschen (alles behalten)
* @param jetztMs - aktueller Zeitpunkt (injizierbar für Tests)
*/
export function filtereAlteBriefe(
briefe: BriefEintrag[],
aufbewahrungTage: number,
jetztMs: number = Date.now()
): BriefEintrag[] {
if (aufbewahrungTage <= 0) return briefe;
const grenzeMs = jetztMs - aufbewahrungTage * 86400000;
return briefe.filter((brief) => {
const erstellt = new Date(brief.erstelltAm).getTime();
// Unlesbare Datumswerte lieber behalten als versehentlich löschen
if (!Number.isFinite(erstellt)) return true;
return erstellt >= grenzeMs;
});
}