Datenschutz- und Löschkonzept — easySale (AVV-Anlage TOM)
Stand: März 2026
Rechtsgrundlage: DSGVO Art. 17 (Recht auf Löschung), Art. 25 (Privacy by Design),
Art. 28 (Auftragsverarbeitung), Art. 32 (Sicherheit der Verarbeitung)
Dieses Dokument dient als Anlage zum AVV (Technische und Organisatorische Maßnahmen).
1. Verarbeitete personenbezogene Daten
Kategorie
Datenfelder
Speicherort
Aufbewahrungsfrist
Kundenstammdaten
Name, Adresse, E-Mail, Telefon, Ansprechpartner
Firestore customers
Bis Löschung durch Verantwortlichen oder DSGVO-Job
Shop-Benutzer
Name, E-Mail, Kundenzuordnung
Firestore customerUsers + Firebase Auth
Bis Löschung oder DSGVO-Job
ERP-Benutzer
Name, E-Mail, Rolle
Firestore users + Firebase Auth
Bis Löschung durch SuperAdmin
Bestelldaten
Bestellpositionen, Lieferadresse, Rechnungsadresse
Firestore orders
Standard: 365 Tage (konfigurierbar)
Dokumente/Bilder
Rechnungen, Lieferscheine, Artikelbilder
Firebase Storage
Bis Löschung des übergeordneten Objekts
Push-Tokens
FCM Device-Tokens
Firestore devices Subcollection
Bis Geräteabmeldung / Kundenlöschung
Audit-Logs
User-ID, maskierte E-Mail, Aktionen
Firestore auditLogs
90 Tage (automatische Löschung)
2. Automatische DSGVO-Löschjobs
Alle Jobs sind in system_settings/dsgvo_settings konfigurierbar pro Mandant.
Job
Collection
Lösch-Kriterium
Standard-Frist
job_dsgvoDeleteCustomers
customers
Inaktive Kunden ohne Bestellungen
Konfigurierbar
job_dsgvoDeleteUsers
users / Auth
Inaktive User ohne Login
Konfigurierbar
job_dsgvoDeleteOrders
orders
Alter nach Bestelldatum
365 Tage
job_dsgvoDeleteArticles
articles
Ungenutzte Artikel
730 Tage
job_dsgvoDeleteNotifications
notifications
Alter
90 Tage
3. Kaskadierende Löschung (Trigger-basiert)
Bei Löschung eines Kunden (onCustomerDeleted):
✅ Alle Subcollections (devices, deliveryAddresses, customerFeed, etc.)
✅ Zugeordnete customerUsers (Shop-Benutzer)
✅ Referenzen in customerListCustomers
✅ Referenzen in notificationCustomerEntries
✅ Audit-Log-Eintrag der Löschung
✅ Storage-Dateien (customer_documents/{customerId}/, customers/{customerId}/images/, feed_attachments/{customerId}/)
Bei Löschung eines Artikels (onArticleDeleted):
- ✅ Zuordnungen in customerArticles
- ✅ Kategorie-Zähler aktualisiert
- ✅ Storage-Dateien (articleImages/{articleId}/, article_documents/{articleId}/, article_images/{articleId}/)
Bei Löschung einer Bestellung:
- ✅ Alle Subcollections (Positionen, History)
- ✅ Storage-Dateien (order_documents/{orderId}/) — via cleanupOrderStorage
4. TTL-basierte automatische Löschung (Firestore)
Collection
TTL-Feld
Aufbewahrung
stockHistory
deleteAt
~14 Monate
jobExecutions
deleteAt
30 Tage (konfigurierbar)
connectorLogs
deleteAt
30 Tage
triggerLogs
deleteAt
30 Tage
sent_order_reminders
deleteAt
Konfigurierbar
receivedOrders
expiresAt
Konfigurierbar
_rateLimits
expireAt
Automatisch
5. Technische und Organisatorische Maßnahmen (TOMs)
5.1 Verschlüsselung
Maßnahme
Status
Verschlüsselung in Transit (TLS/SSL)
✅ Firebase-Standard
Verschlüsselung at Rest
✅ Firebase/GCP-Standard (AES-256)
Sensitive Daten lokal (FlutterSecureStorage)
✅ iOS Keychain / Android EncryptedSharedPreferences
5.2 Zugriffskontrolle
Maßnahme
Status
Deny-by-default Firestore Security Rules
✅
Deny-by-default Storage Security Rules
✅
Rollenbasiertes Berechtigungssystem (User/Admin/SuperAdmin)
✅
Granulare Permissions pro User
✅
Custom Claims für App-Type-Trennung (ERP/Shop)
✅
Multi-Tenant Datentrennung über Custom Claims
✅
5.3 Logging & Monitoring
Maßnahme
Status
Audit-Logging für sicherheitsrelevante Aktionen
✅
PII-Maskierung in Logs (SecureLogger)
✅
Sentry Error-Tracking ohne PII (sendDefaultPii=false)
✅
GCP Cloud Logging
✅
Rate Limiting für API-Aufrufe
✅
5.4 Datenschutz in Entwicklung
Maßnahme
Status
Automatische Anonymisierung bei Prod→Dev-Sync
✅
Firebase-Configs nicht im Git-Repository
✅
Secrets über Google Cloud Secret Manager
✅
Security Headers (CSP, HSTS, X-Frame-Options, etc.)
✅
6. Backup & Wiederherstellung
Aspekt
Status
Firestore PITR (Point-in-Time Recovery, 7 Tage)
✅ Aktiv (manuell in Firebase Console aktiviert)
RTO (Recovery Time Objective)
4 Stunden
RPO (Recovery Point Objective)
1 Stunde (dank PITR)
Zusätzlicher GCS-Backup-Export
Optional (PITR deckt 7-Tage-Fenster ab)
7. Recht auf Auskunft (Art. 15)
Bei Auskunftsersuchen eines Betroffenen:
Anfrage über den Kunden (Verantwortlicher) → an easySale weitergeleitet
Identifizierung des Betroffenen anhand der Kundennummer
Export der personenbezogenen Daten aus:
customers/{id} + Subcollections
customerUsers (gefiltert nach E-Mail)
orders (gefiltert nach customerId)
Bereitstellung im maschinenlesbaren Format (JSON/CSV)
Frist: 30 Tage nach Anfrage
8. Meldepflicht bei Datenschutzverletzungen (Art. 33/34)
Schritt
Frist
Verantwortlich
Erkennung und interne Meldung
Sofort
Alle Mitarbeiter
Analyse des Vorfalls
< 24 Stunden
Technische Leitung
Meldung an betroffene Kunden (Verantwortliche)
< 48 Stunden
Geschäftsführung
Kunden melden an Aufsichtsbehörde
< 72 Stunden
Verantwortlicher (Kunde)
Änderungshistorie
Datum
Änderung
Autor
März 2026
Erstversion erstellt
Andreas Schmid, Tech Schuppen