Zum Inhalt

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:

  1. Anfrage über den Kunden (Verantwortlicher) → an easySale weitergeleitet
  2. Identifizierung des Betroffenen anhand der Kundennummer
  3. Export der personenbezogenen Daten aus:
  4. customers/{id} + Subcollections
  5. customerUsers (gefiltert nach E-Mail)
  6. orders (gefiltert nach customerId)
  7. Bereitstellung im maschinenlesbaren Format (JSON/CSV)
  8. 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