QuasselBot Großes Logo

Fahrdienst-Assistenz via Telegram

Sicher verschlüsselte Minutenverwaltung, Fahrdienst-Dokumentation und Schicht-Parsing direkt auf deinem Smartphone.

DSGVO

DSGVO – Datenschutz & Datenlöschung

Stand: 28.05.2026 ---

Übersicht

Das DSGVO-Modul ermöglicht jedem Nutzer:
  • 🔍 Auskunft (Art. 15 DSGVO) – Alle persönlichen Daten einsehen
  • 🚮 Löschung (Art. 17 DSGVO) – Daten schrittweise oder komplett löschen
  • 🔧 Berichtigung (Art. 16 DSGVO) – Daten via /register oder /da aktualisieren
  • Besonderheit: Löschungen sind nicht sofort, sondern folgen einem 24-Stunden-Bedenkfenster mit recover-Option. Sicherheit: Alle personenbezogenen Daten sind AES-256 verschlüsselt. Selbst DB-Admins sehen Klartexte nicht. ---

    Nutzer-Befehle

    /dsgvo – Hauptmenü

    Funktioniert in Gruppen und Privat-Chat (automatische PM-Übergabe). Menüoptionen:
  • 🔍 DSGVO Auskunft – Exportiert alle persönlichen Daten als formatiertes Textdokument
  • 🚮 Meine Daten löschen – Startet Lösch-Flow mit Scope-Auswahl (KK, LF, TB, DP, GW oder Alles)
  • Abbrechen – Menü schließen
  • /dsgvo recover – Löschung abbrechen

    Funktion: Bricht eine geplante Datenlöschung ab (nur noch im 24-Stunden-Fenster möglich). Ablauf: 1. Findet die aktive pending deletion 2. Setzt Status auf recovered 3. Daten werden wiederhergestellt 4. Bestätigung: ✅ Datenlöschung abgebrochen Cooldown: Max. 1× pro 7 Tage ---

    Lösch-Scopes

    Nach "Meine Daten löschen" werden nur Scopes angeboten, in denen der Nutzer Daten hat: Scope | Button-Name | Betroffen -------|-----------|----------- kk | KK-Minuten | KK-Einträge + Report-Logs lf | Lehrfahrerdaten | LF-Einträge + Trainerkollegen + Schulungstage tb | Tagebuchdaten | TB-Einträge dp | Dienstplandaten | DP-Importe (inkl. strukturierter Importdaten) gw | Gewerkschaftsdaten | GW-Rollen + Posten-Zuweisungen + Statushistorie all | Alles | Alle der oben genannten ---

    Datenlösch-Verhalten (24h Grace Period)

    Workflow: Markierung → 24h Bedenkzeit → Automatische Ausführung

    Schritt 1: Nutzer bestätigt Löschung
  • Daten werden MARKIERT (nicht sofort gelöscht)
  • requested_at = NOW()
  • delete_at = NOW() + 24 Stunden
  • Status: pending
  • Schritt 2: Bestätigungs-Nachricht
  • Anzahl betroffener Datensätze
  • Genaue Zeit der automatischen Löschung
  • Hinweis: /dsgvo recover innerhalb 24h möglich
  • Schritt 3: 24-Stunden-Fenster
  • Nutzer kann /dsgvo recover aufrufen
  • Status ändert sich zu recovered
  • Datensätze werden wiederhergestellt
  • Alles läuft automatisch ab
  • Schritt 4: Nach 24 Stunden (stündlicher Background-Job)
  • Bot prüft fällige Löschungen
  • Führt echte DB-Löschung durch
  • Status: deleted
  • Gelöschte Daten pro Scope

    Für KK-Scope (kk):
  • kk_entries (alle Einträge)
  • report_logs (alle Report-Logs)
  • Für LF-Scope (lf):
  • lf_entries (Eintragszeilen)
  • lf_training_periods (Schulungstage)
  • lf_colleague_links (Zuordnungen Kollege ↔ Nutzer)
  • lf_colleagues (Verwaistes, wenn Nutzer einziger Trainer)
  • Für TB-Scope (tb):
  • tb_entries (Tagebuch-Einträge)
  • Für DP-Scope (dp):
  • dp_imports (Dienstplan-Importe inkl. Header-/Detaildaten)
  • Für GW-Scope (gw):
  • gw_permissions (Rollen: userpostenadmin)
  • gw_lokal_posten_assignments (Posten-Zuweisungen)
  • gw_org_status_history (Status-Changehistory)
  • Für all-Scope:
  • Alle der oben genannten + users-Profil (optional)
  • Profil-Verwahrung

    Das users-Profil wird NICHT automatisch gelöscht:
  • Dient als Identifikator für nachfolgende Bot-Nutzung
  • Nutzer kann jederzeit neu mit /register anfangen
  • Bot-Admin kann komplettes Profil löschen (Befehl: /quit)
  • ---

    Floodschutz (Cooldown-System)

    Um Missbrauch zu vermeiden: Aktion | Cooldown | Meldung --------|----------|--------- Lösch-Anfrage | 7 Tage | ⏳ Du kannst Löschung erst in XdYh erneut anfordern. Recovery-Anfrage | 7 Tage | Gleiche Meldung ---

    Datenschutz & Verschlüsselung

    Persönliche Daten

    Feld | Speicherung | Schutz ------|-----------|-------- Telegram-ID | Klartext | Nur intern, nicht exportiert Vorname | Klartext | In Gruppen sichtbar, Export verschlüsselt Username | Klartext | In Gruppen sichtbar, Export verschlüsselt Klarname | AES-256 verschlüsselt | Nur mit Passwort verfügbar Dienstausweisnummer | AES-256 + HMAC-SHA256 Fingerprint | Uniqueness-Check, Klartext unzugänglich

    Verschlüsselung

  • Algorithmus: AES-256 (Fernet-kompatibel, MODE_EAX)
  • Schlüsselableitung: PBKDF2-SHA256, 480.000 Iterationen
  • IV: Zufällig pro Eintrag
  • Sicherheit: Auch DB-Admin sieht Klartexte nicht
  • ---

    Auskunfts-Export

    Format

    Export als TXT-Zeilenformat (eine Zeile pro Datensatz):
    PROFIL  Vorname  <vorname>
    PROFIL  Username  @<username>
    PROFIL  Klarname  <klarname_entschlüsselt>
    PROFIL  Dienstausweisnummer  <da_entschlüsselt>
    
    KK  Datum=DD.MM.YYYY | Soll=HH:MM | Ist=HH:MM | KKMin=N  Dienst=NNNNN
    KK_REPORT  Typ=monthly | Zeit=DD.MM.YYYY  Minuten=NNN
    
    TB_EINTRAG  Datum=DD.MM.YYYY | Zeit=HH:MM | LinieKurs=M5/07 | Wagen=1234  Text=...
    DP_IMPORT  Datum=DD.MM.YYYY | Dienst=1093 | LinieKurs=M5/55 | Beginn=... | Ende=... | Start=... | Ziel=... | Ort=...  Quelle=...
    
    LF_KOLLEGE  Name=Nachname, Vorname  DA=NNNNN
    LF_SCHULUNG  Kollege=... | Kategorie=be|nb|fb | Von=DD.MM.YYYY  Bis=DD.MM.YYYY
    LF_EINTRAG  Kategorie=be|nb|fb | Kollege=... | DA=NNNNN | Datum=DD.MM.YYYY | Zeit=HH:MM | Linie=M5 | Wagen=1234  Text=...
    
    GW_ROLLE  Rolle=user|posten|admin | GW=... | Region=...  OG=...
    GW_POSTEN  LokalNr=123 | Lokal=Haltstelle | GW=... | Region=...  OG=...
    GW_STATUS  LokalNr=123 | Lokal=...  StatusZeit=DD.MM.YYYY HH:MM

    Download

    Export als Inline-Nachricht mit Monospaced-Schrift (Markdown-Code-Block):
  • Nutzer kann kopieren oder speichern
  • Format lesbar und verwertbar
  • ---

    Backup-Handling

    Wichtig für DSGVO-Compliance:
  • Markierte (pending) Daten werden NICHT in neue Backups aufgenommen
  • Alte Backups mit gelöschten Daten werden nach Retention (z.B. 30 Tage) überschrieben
  • Nach 24h Löschung: Keine Wiederherstellung aus Backups möglich ✅
  • Empfehlung:
  • Backup-Rotation: 30 Tage Aufbewahrung
  • Regelmäßig alte Backups löschen
  • Gelöschte Daten sind final
  • ---

    Bot-Admin Befehle

    Nur Privat-Chat, nur für Bot-Admin: Befehl | Funktion --------|---------- /quit [user_id] | Löscht komplettes Profil + alle Daten eines Nutzers /dsgvo | Regulär-Menü (auch für Admins) ---

    FAQ

    F: Kann ich nur KK-Daten löschen und LF behalten? A: Ja, Scope-Auswahl zeigt nur Bereiche mit Daten. F: Sind Dienstplan-Importe in der DSGVO-Auskunft enthalten? A: Ja. DP-Daten werden als DP_IMPORT-Zeilen exportiert und können separat über den Scope Dienstplandaten gelöscht werden. F: Kann ich versehentlich gelöschte Daten wiederherstellen? A: Nein, Löschung ist endgültig. Nur Bot-Admin kann Backups restoren (SQL-Level). F: Werden meine Daten mit anderen Nutzern geteilt? A: Nein, strikte Isolation pro User. F: Was wenn ich /dsgvo in der Gruppe aufrufe? A: Bot leitet automatisch in Privat-Chat weiter (wie /kk del oder /lf). F: Kann ein Admin mein Passwort sehen? A: Nein, PBKDF2-SHA256 mit 480.000 Iterationen. DB-Admin sieht es nicht. F: Was passiert mit Backups, nachdem ich gelöschte Daten habe? A: Nach 24h Löschung: Markierte Daten nicht in neue Backups. Alte Backups werden nach Rotation überschrieben. F: Kann ich mein Profil selber löschen? A: Mit /dsgvoAlles löschen bleibt das users-Profil erhalten. Bot-Admin kann es mit /quit entfernen. ---

    DSGVO-Compliance Checklist

    Recht | Implementierung | Status ------|-----------------|-------- Art. 15 (Auskunft) | /dsgvo → Auskunft | ✅ Art. 16 (Berichtigung) | /register / /da | ✅ Art. 17 (Vergessenwerden) | /dsgvo → Löschen (24h Grace) | ✅ Datenschutzerklärung | Bot-Owner bereitstellen | ⚠️ Extern Backup-Rotation | Max. 30 Tage Aufbewahrung | ✅ Verschlüsselung sensibler Daten | AES-256 PBKDF2 | ✅ ---

    Verwandte Dokumentation

  • Admin-Betrieb: [OPERATIONS.md](OPERATIONS.md)
  • DSGVO-Handler: [handlers_dsgvo.py](handlers_dsgvo.py)
  • Security-Grundlagen: [security.py](security.py)
  • 🔒 Speicher-Verschlüsselung: AES-256 + bcrypt aktiv
    Modul-Umfang: ~39.668 Zeilen Python-Core