> Source: https://worklogx.com/de/tom

# Technische und organisatorische Maßnahmen (TOM) – WorkLogx

**Stand: 29.10.2026 · Version 2026-10-29**

Dieses Dokument beschreibt die technischen und organisatorischen Maßnahmen für WorkLogx gemäß Art. 32 DSGVO und dient als detaillierte Ausgestaltung zu **Anlage 2** des Auftragsverarbeitungsvertrags (AVV).

**Legende**

- **VERIFIED** – im Repository, in der laufenden öffentlichen Infrastruktur oder in geprüfter Anbieterdokumentation nachweisbar
- **OWNER POLICY REQUIRED** – organisatorische Verpflichtung; nicht allein durch Code nachweisbar
- **RECOMMENDED** – vorgeschlagene Betriebsmaßnahme; **nicht** als bereits umgesetzt behauptet

---

## 1. Verantwortliche Stelle / Anbieter

**Monadion GmbH**  
Schönbrunner Straße 181/1  
1120 Wien  
Österreich

Datenschutzkontakt: **office@monadion.com**  
Support: **support@monadion.com**

Soweit Monadion personenbezogene Mandantendaten im Auftrag von Kunden verarbeitet, gilt der WorkLogx-AVV. Die aktuelle Unterauftragsverarbeiterliste: **/subprocessors**.

---

## 2. Infrastruktur

**VERIFIED (Stand Audit 29.10.2026):**

| Komponente | Anbieter / Hinweis | Region / Land |
|---|---|---|
| Application Server (`app.worklogx.com`, `api.worklogx.com`) | Hetzner Cloud | Öffentliche IP gehört zu Hetzner-Netz **CLOUD-FSN1**, Land **DE** (RIPE) |
| PostgreSQL | Auf Monadion-Hetzner-Infrastruktur (Docker/Coolify-Deployments laut Deploy-Templates) | Mit App-Server auf derselben Hetzner-Umgebung betrieben; **keine** separate DB-Region in diesem Repository dokumentiert |
| Object Storage | Hetzner Object Storage | Region **`fsn1`** (Bucket-Namenskonvention / Storage-Konfiguration; z. B. `*-fsn1`) |
| Coolify | Deployment-/Orchestrierungsschicht auf dem Hetzner-Host | Ort = Host FSN1 (DE); Coolify-UI-Backup-Einstellungen in diesem Audit **nicht** aus Coolify ausgelesen (Coolify nicht erreichbar) |
| Cloudflare | DNS für WorkLogx-Hostnamen; Marketing-Website proxied; `app`/`api` derzeit **DNS only** | Keine EU-only-Zusage ohne Regional Services |

**Nicht behauptet:** Verschlüsselung at rest der Volumes/Buckets, solange dies nicht aus aktiver Provider-Konfiguration oder Vertragsextrakt in diesem Repository belegt ist.

---

## 3. Zutritts-/Zugangsschutz

**VERIFIED (anwendungsseitig):**

- Öffentliche API/App nur über HTTPS-Endpunkte erreichbar (Live-Check `https://app.worklogx.com`, `https://api.worklogx.com`).
- Interne Bridge-/Service-Routen sind für öffentliche Hostnamen zu sperren (`deploy/ingress/`); Anwendung prüft Bridge-/Service-Credentials zusätzlich.
- Plattformadministration nur über Operator-Allow-List (`FIELDOPS_OPERATORS`), **nicht** über Mandantenrolle `ADMIN`.

**OWNER POLICY REQUIRED:** physischer Zutritt zum Hosting-Standort liegt beim Infrastrukturanbieter (Hetzner); Monadion-Zugänge zu Coolify/Hetzner-Console auf autorisierte Personen beschränken.

---

## 4. Authentifizierung

**VERIFIED:**

- Firebase Authentication für Benutzeridentitäten (Login, Tokens).
- Office-Second-Factor in Produktionsprofil erzwungen (`security.office-second-factor-enforced: true` in `application-prod.yml`).
- Platform Admin erfordert Operator-Allow-List **und** Second-Factor-Claim (`PlatformAdminGuard`).
- Rollenmodell: `ADMIN`, `OPERATIONS`, `EMPLOYEE` (kein `OWNER`).

---

## 5. Berechtigungsmanagement

**VERIFIED:**

- Berechtigungen über `WorklogxPermission` / Authorization-Service.
- Deny-by-default: unbekannte/fehlende Berechtigungen werden abgelehnt (`WorklogxAuthorizationService`).
- Feature-Gates an Billing/Entitlements gekoppelt.
- Tenant-fremde Zugriffe werden mit Gründen wie `WRONG_TENANT` abgewiesen.

---

## 6. Mandantentrennung

**VERIFIED:**

- Organisationsbezogene Membership und Permission-Prüfung.
- Storage-Objektpfade mit Präfix `org/{organizationId}/` und Reconciliation gegen dieses Präfix (`StorageReconciliationService`).
- Tenant-Security-Matrix und Isolationstests dokumentiert (`docs/testing/TENANT_SECURITY_MATRIX.md`).
- TEST vs PRODUCTION über `WORKLOGX_ENVIRONMENT` getrennt; Startup-Fail-Safes gegen klare TEST-Ressourcen in PRODUCTION (`docs/environment-separation.md`).

---

## 7. Transportverschlüsselung

**VERIFIED:**

- Öffentliche Endpunkte werden per HTTPS betrieben (Live-Check).
- Session-Cookies in Prod mit `secure: true` konfigurierbar/gesetzt (`application-prod.yml`).
- Stripe-Webhooks und vergleichbare Integrationen mit Signaturprüfung im Anwendungscode.

**Nicht behauptet:** TLS-Terminierungsimplementation im Detail (liegt am Reverse Proxy / Coolify / Edge).

---

## 8. Schutz von Secrets

**VERIFIED:**

- Secrets über Umgebungsvariablen (Coolify/ENV), nicht über Platform-Admin-Business-Config (`docs/platform-admin-env-migration.md`).
- Integrationstoken-Verschlüsselung (AES) über `FORM_API_ENCRYPTION_KEY` / `TokenEncryptionService`; in PRODUCTION Startverweigerung ohne Key.
- Webhook-Secrets verschlüsselt gespeichert (`WebhookSecretCipher`).
- Keine Secrets in Git-Templates (Beispiele ohne Werte).

---

## 9. Logging & Audit

**VERIFIED:**

- Sicherheitsrelevante Audit-Events (`SecurityAuditWriter` / `SecurityAuditEvent`).
- Platform-Admin-Aktionen auditierbar.
- Technische Fehlerprotokollierung; optionales Sentry nur wenn `SENTRY_DSN` gesetzt (Deploy-Template: standardmäßig unset → **nicht** als aktiver Prod-TOM-Dienst geführt).

**RETENTION GAP:** Keine codierte Löschfrist für Security-Audit-Events und Server-/Access-Logs in diesem Repository.

---

## 10. Datensicherung / Wiederherstellung

### CURRENT (Audit)

| Bereich | Status | Evidence |
|---|---|---|
| PostgreSQL-Backup | **UNKNOWN / nicht im Repo dokumentiert** | Keine `pg_dump`-/Coolify-Backup-Policy in `deploy/` oder `docs/`; Coolify-UI in diesem Audit nicht geprüft |
| Server-Snapshots | **UNKNOWN** | Keine Hetzner-Snapshot-Policy im Repository |
| Object-Storage-Backup/Versioning | **UNKNOWN / kein App-Backup** | Soft-Delete + Purge (Retention) ist **kein** Backup; Object-Store-Versioning nicht im Repo konfiguriert |
| RPO / RTO | **nicht definiert** | — |
| Restore-Test | **nicht dokumentiert** | — |

### RECOMMENDED (noch umzusetzen – nicht als Ist-Zustand)

**Datenbank**

- Tägliches PostgreSQL-Backup (Coolify Scheduled Backup oder äquivalent)
- Retention **30 Tage**
- Ziel möglichst getrennt vom Primärvolumen (z. B. separates Backup-Ziel / Object Storage)
- Verschlüsselter Transport zum Backup-Ziel
- Zugriff nur für autorisierte Monadion-Operatoren
- Quartalsweiser Restore-Test (dokumentiert)

**Server**

- Hetzner Snapshots/Backups als **sekundärer** Wiederherstellungsmechanismus
- Kein Ersatz für DB-Backup

**Object Storage**

- Primär: Anbieter-Durability + App-Retention/Purge
- Zusätzliches Cross-Bucket-Backup nur nach Risikoentscheidung; derzeit **nicht** behauptet

Bis zur Umsetzung bleibt AVV §17.7 / Backup-Retention **offen**.

---

## 11. Löschung & Retention

**VERIFIED technische Fristen:**

| Gegenstand | Frist | Quelle |
|---|---|---|
| Gelöschte Speicherobjekte (Purge) | standardmäßig **30 Tage** | `storage.retentionDays` / Platform Settings Default |
| Export-Archive | standardmäßig **7 Tage** | `storage.exportExpiryDays` |
| Smart-Builder temporäre Verarbeitungen | **7 Tage** (`7d`) | `WORKLOGX_AI_FORM_BUILDER_RETENTION` Default |
| Validation-Runs (historisch/stale) | **60 Tage** | `ValidationRunRetentionScheduler.RETENTION_DAYS` |
| Vertragsende Export-Übergangsfrist | **30 Tage** | AVV / AGB / Datenschutz (vertraglich) |

**RETENTION GAPS (keine willkürliche Code-Setzung):**

- Security-Audit-Events
- Server-/Access-/Coolify-Logs
- Billing-/Stripe-Historie (Anbieter + lokale Spiegel)
- Abwesenheitsdaten (fachliche Aufbewahrung)
- Released/frozen Submissions (Immutability; Löschung nur nach Vertragsende/Weisung)
- Backups (sobald eingerichtet)

**OWNER POLICY REQUIRED:** rechtliche Aufbewahrungsentscheidungen für Billing, Abwesenheiten und freigegebene Nachweise festlegen.

---

## 12. Storage Security

**VERIFIED:**

- Organisationsbezogene Quotas und Add-ons (`StorageQuotaService`).
- Soft-Delete mit späterem Purge (`StorageRetentionJob`).
- Reconciliation Ledger ↔ Bucket-Präfix (`StorageReconciliationService`).
- Upload-Limits (Multipart/App-Limits in `application*.yml`, z. B. Foto/Video-Obergrenzen).
- Presigned Download-URLs mit konfigurierbarer TTL.

---

## 13. AI Processing Security

**VERIFIED:**

- KI nur bei Freischaltung/Nutzung der jeweiligen Funktion.
- API-Aufrufe setzen, soweit implementiert, `store: false` (keine Behauptung „kein Training“ allein daraus).
- Keine automatische Übernahme von KI-Ergebnissen als alleinige Personalentscheidung (Produkt-/AGB-Aussage).
- Provider und Rolle: siehe **/subprocessors**.

---

## 14. Incident Management

**CURRENT:** Kein separates Incident-Response-Runbook im Repository gefunden (außer datenschutzrechtlichen AVV-Pflichten zur Meldung).

**RECOMMENDED Minimalprozess (OWNER POLICY REQUIRED):**

1. Vorfall erkennen  
2. Eindämmen  
3. Beweise sichern  
4. Betroffene Organisationen/Daten bewerten  
5. Kunden unverzüglich informieren, soweit erforderlich  
6. Unterstützung zu Art. 33/34 DSGVO  
7. Beheben  
8. Nachbereitung  

Keine garantierten Reaktionszeiten.

---

## 15. TEST/PROD Separation

**VERIFIED:**

- `WORKLOGX_ENVIRONMENT=TEST|PRODUCTION`
- Getrennte Firebase-Projekte, Buckets, Operator-UIDs, Stripe-Umgebungen vorgesehen
- PRODUCTION-Startup schlägt fehl bei klaren TEST-Ressourcen (Bucket/URL/CORS/Stripe-Test)

---

## 16. Subprocessors

Aktuelle Klassifikation und Regionen: **/subprocessors**.

---

## 17. Review of TOMs

Dieses Dokument wird bei wesentlichen Infrastruktur-, Auth-, Retention- oder Anbieteränderungen überprüft.

**Nächste Owner-Aktionen:** Backup-Policy in Coolify/Hetzner aktivieren und dokumentieren; Incident-Runbook freigeben; Retention-Lücken entscheiden.

**Stand: 29.10.2026 · Version 2026-10-29**