Vertrag zur Auftragsverarbeitung (AVV)
Fassung entwurf-2026-10-22
Teil A — Vereinbarung
(1) [Pilotfirma] als Verantwortlicher und Emanuel Schmälzlin, Buhler 6, 79348 Freiamt („Betreiber") als Auftragsverarbeiter vereinbaren für die Verarbeitung personenbezogener Daten im Pilotbetrieb nach der Pilotvereinbarung vom [Datum] die Standardvertragsklauseln nach dem Durchführungsbeschluss (EU) 2021/915 in der amtlichen deutschen Fassung (Anlage A) einschließlich der Anhänge I bis IV dieses Dokuments.
(2) Wahl der Optionen in den Klauseln: Klausel 1: Option 1 (Art. 28 Abs. 3 und 4 DSGVO). Klausel 5 (Kopplungsklausel): wird nicht verwendet. Klausel 7.7 Buchstabe a: Option 2 (allgemeine schriftliche Genehmigung für die in Anhang IV genannten Unterauftragsverarbeiter); Frist für die Unterrichtung über Änderungen: [30 Tage] im Voraus. In den Klauseln 8 und 9: jeweils die Option, die auf die DSGVO verweist.
(3) Zusatzregeln (zulässig nach Klausel 2 Buchstabe b, sie gehen den Klauseln nicht vor): a) Weisungen erteilt die Pilotfirma in Textform an [E-Mail des Betreibers]; mündliche Weisungen bestätigt sie unverzüglich in Textform. b) Nach Ende des Pilotbetriebs teilt die Pilotfirma binnen [14 Tagen] in Textform mit, ob Daten zurückgegeben (Export, Format [festlegen]) oder gelöscht werden; der Betreiber erledigt das binnen [30 Tagen] und bescheinigt die Löschung (Klausel 10 Buchstabe d). Kopien in Sicherungen laufen mit der Sicherungsrotation nach Anhang III aus (Ist-Stand: Portal-Sicherung 14 Tage auf dem Server, 30 Tage auf dem NAS) [prüfen: Vereinbarkeit mit Klausel 10 Buchstabe d]. c) Ort der Verarbeitung und der Sicherungskopien: wie in Anhang III und IV beschrieben, Stand bei Unterzeichnung. Ändern sich Ort oder Maßnahmen, werden die Anhänge aktualisiert (Klausel 2 Buchstabe a). d) Für die Auftragsverarbeitung wird keine Vergütung geschuldet. Die Laufzeit folgt der Pilotvereinbarung.
Anhang I — Liste der Parteien
Verantwortlicher: [Name der Pilotfirma], [Anschrift]; Kontaktperson: [Name, Funktion, Kontakt]; Datenschutzbeauftragter: [falls vorhanden]. Unterschrift und Datum: [ ]
Auftragsverarbeiter: Emanuel Schmälzlin, Buhler 6, 79348 Freiamt (E-25); Kontaktperson: Emanuel Schmälzlin, [E-Mail, Telefon]; Datenschutzbeauftragter: [nicht benannt — Pflicht erst ab 20 Personen, § 38 BDSG]. Unterschrift und Datum: [ ]
Anhang II — Beschreibung der Verarbeitung
Kategorien betroffener Personen: Kunden der Pilotfirma und deren Ansprechpartner (Waldbesitzer, Forstbetriebe, Sägewerke); Beschäftigte der Pilotfirma, insbesondere Fahrer; falls das Kundenportal genutzt wird (Pilotvereinbarung Anlage 1): Portal-Nutzer bei den Kunden.
Kategorien personenbezogener Daten: Kontaktdaten (Name, Anschrift, Telefon, E-Mail, USt-IdNr., Kundennummer); Auftrags-, Polter- und Lieferdaten (Holzlisten, Mengen, Standorte der Polter als Koordinaten, Liefer-, Verlade- und Arbeitsscheine mit Fahrername, Stundensatz und Betrag [prüfen: Feld stundenlohn = Stundensatz gegenüber dem Kunden, kein Lohn des Fahrers?], HT src/main/portal-sync/push.ts:122); Rechnungsdaten (Beträge, push.ts:149); Geräte- und Zugangsdaten (Geräte-Kennung, Koppel-Token); Zugangsdaten der Portal-Nutzer (E-Mail, Passwort nur als Hash).
Sensible Daten (Art. 9 DSGVO): keine vorgesehen.
Art der Verarbeitung: Speichern und Abgleichen der Daten zwischen den Geräten der Pilotfirma über den Sync-Knoten; Bereitstellen im Kundenportal (nur falls gewählt); Sicherung und Wiederherstellung; Fehlersuche, auch per Fernwartung, nur nach Pilotvereinbarung § 7 Abs. 3; Rückgabe und Löschung.
Zweck: Bereitstellung der HolzFux-Dienste (Datenabgleich, Portal, Unterstützung) für den Pilotbetrieb der Pilotfirma.
Dauer: Laufzeit der Pilotvereinbarung zuzüglich Rückgabe oder Löschung nach Teil A Abs. 3 b.
Unterauftragsverarbeitung: siehe Anhang IV (Gegenstand, Art und Dauer dort).
Anhang III — Technische und organisatorische Maßnahmen (Ist-Stand 22.10.2026)
Nur belegbare Maßnahmen; „nicht geprüft" heißt: im Repo dokumentiert, am Server nicht nachgesehen. Grundlage: Bestandsaufnahme aus dem Code am 22.10.2026; Fundstellen ungeprüft übernommen, Stichprobe push.ts:122 bestätigt.
A. Systeme des Betreibers (Auftragsverarbeitung)
| Bereich | Ist-Stand | Fundstelle |
|---|---|---|
| Schutz bei der Übermittlung | Portal nur über HTTPS mit automatischem Zertifikat, HSTS und Content-Security-Policy | HW Caddyfile:2, 18, 23 |
| Geräte erreichen den Sync-Knoten über einen verschlüsselten WireGuard-Tunnel; der Knoten-Dienst lauscht standardmäßig nur lokal | HT src/main/sync/tunnel.ts:2-3; src/hub-node/config.ts:63 | |
| Schutz bei der Speicherung | Datenbanken (Portal: Postgres; Knoten: SQLite) ohne eigene Verschlüsselung; Verschlüsselung des Datenträgers beim Hoster nicht bekannt | HW docker-compose.yml:26; HT src/hub-node/db.ts:12 |
| Passwörter der Portal-Nutzer nur als scrypt-Hash, Vergleich in konstanter Zeit | HW src/lib/auth.ts:15-35 | |
Zugangsgeheimnisse des Portals (Datenbank-Passwort, Token) in einer .env außerhalb von Git und Docker-Abbild; Dateirechte 600 [vor Unterzeichnung am Server bestätigen] | HW docker-compose.yml:9-10, 24; .gitignore:34; PLAN.md:129 | |
| Identifizierung und Berechtigung | Portal: Sperre nach 5 Fehlversuchen für 15 Minuten je Konto; Sitzungen 7 Tage, Cookie httpOnly und secure; Passwortwechsel beendet andere Sitzungen | HW src/lib/auth.ts:18-19, 60-65, 104-108, 134-146 |
| Portal-Nutzer sehen nur Daten der eigenen Kunden-Kennung aus der Sitzung; fremde Kennung ergibt „nicht gefunden" | HW src/lib/portal-data.ts; src/app/api/pdf/[typ]/[uuid]/route.ts:40-47 | |
| Sync-Knoten: Geräte erst nach Kopplung mit eigenem Token; zusätzliche Anfrage-Signatur (HMAC-SHA256, Peer-Auth Stufe 2), Standardmodus „beobachten", tatsächlicher Modus nicht belegt | HT src/main/services/pairing.ts:11, 118; src/shared/sync/peerAuth.ts:32; peerAuthKeys.ts:172 | |
| Admin-Zugang des Portals und Daten-Übertragung mit einem gemeinsamen Token; Admin-Anmeldung höchstens 10 Versuche je IP und Stunde | HW src/lib/admin-auth.ts:6-14; src/lib/rueckmeldungen/admin-zugang.ts:20 | |
| Server-Zugang per SSH-Schlüssel, fail2ban, automatische Sicherheitsupdates [vor Unterzeichnung am Server bestätigen] | HW PLAN.md:120, 126 | |
| Systemkonfiguration | Portal-Anwendung läuft im Container nicht als Administrator; Datenbank ohne offenen Port; Knoten-Container ohne eigenen Benutzer; Firewall nur Ports 22, 80, 443 [vor Unterzeichnung am Server bestätigen] | HW Dockerfile:41; docker-compose.yml:18-38; PLAN.md:105; HT src/hub-node/Dockerfile |
| Verfügbarkeit und Wiederherstellung | Portal: tägliche Sicherung (Datenbank 14 Tage, PDF-Archiv 7 Tage, SHA-256-Prüfsummen, unverschlüsselt); Kopie auf ein NAS im Betrieb Schmälzlin, 30 Tage; Wiederherstellungstest von Hand im Wegwerf-Container | HT scripts/ops/portal_backup.sh:8-40; portal_backup_holen.ps1:27-50; portal_restore_test.sh |
| Sync-Knoten: keine Sicherung gefunden | HT scripts/ops/portal_backup.sh:18, 30 | |
| Überprüfung | Tägliche Nachschau prüft das Alter der Portal-Sicherung (höchstens 26 Stunden) | HT scripts/ops/nachschau_taeglich.mjs:3 |
| Protokollierung | Keine Zugriffsprotokolle des Webservers; Portal-Anmeldungen nicht protokolliert; Knoten protokolliert abgelehnte Anmeldungen (gedrosselt, Geräte-Kennungen gekürzt) | HW Caddyfile:1-26; src/lib/auth.ts:113-157; HT src/hub-node/server.ts:80-160 |
| Trennung | Heute eine Firmen-Datenbank je Knoten; getrennte Container und Datenbank für Pilotfirmen (E-16 Nr. 1) noch nicht gebaut | HT src/hub-node/README.md:52-53 |
| Physische Sicherheit | Rechenzentrum des Unterauftragsverarbeiters (Anhang IV); dessen Maßnahmen nicht geprüft | — |
B. Software auf den Geräten der Pilotfirma (zur Information, keine Verarbeitung im Auftrag)
| Bereich | Ist-Stand | Fundstelle |
|---|---|---|
| Geheimnisse | KI-Schlüssel, Mail-Passwörter und Portal-Token per Windows-DPAPI verschlüsselt; ohne verfügbare Verschlüsselung Klartext | HT src/main/services/geheimnisse.ts:8-12, 37-59, 125 |
| Peer-Schlüssel und Tablet-Tokens im Klartext in der lokalen Datenbank | HT src/shared/sync/peerAuthKeys.ts:16-18; Migration 122_sync_paired_devices.ts:41 | |
| Anmeldung | Desktop-Login standardmäßig aus; PIN als scrypt-Hash, mindestens 4 Stellen, kein Fehlversuchszähler; Standard-Administrator mit Pflicht zur PIN-Änderung | HT src/main/services/auth.ts:13-15, 47-65, 151-159; Migration 117_default_admin.ts:14-16, 60 |
| Übermittlung | Abgleich zwischen PCs im Firmennetz unverschlüsselt; Mailversand über den Server der Firma mit TLS und Zertifikatsprüfung | HT src/main/sync/client.ts:81; src/main/services/smtpTls.ts:2-48 |
| Sicherung | Automatische Sicherung nur, wenn ein Pfad eingestellt ist (dann täglich, 30 Tage, unverschlüsselt) | HT src/main/services/backup.ts:56-62, 125 |
Anhang IV — Liste der Unterauftragsverarbeiter
| Unterauftragsverarbeiter | Leistung | Ort | Vertrag |
|---|---|---|---|
| [Anbieter des zweiten VPS — Auswahl läuft, E-24] | Server für Sync-Knoten der Pilotfirmen (und KI-Relais, falls genutzt); Dauer: Laufzeit | [Rechenzentrum] | [Auftragsverarbeitungsvertrag des Anbieters ablegen] |
| Hostinger International Ltd., Zypern — nur falls Pilotdaten auf dem heutigen Server verarbeitet werden (z. B. Kundenportal) | Server (VPS) für Portal; Dauer: Laufzeit | Rechenzentrum [im Kundenkonto bestätigen; laut IP-Geolokalisierung Frankfurt am Main] | Data processing addendum, Fassung 29.09.2026, mit eigener Liste weiterer Unterauftragnehmer ([hostinger.com/legal/dpa](https://www.hostinger.com/legal/dpa)) |
| [IONOS — genaue Gesellschaft und Leistung laut Vertrag eintragen] | tägliche Sicherungskopien der Pilotdaten (E-27); Dauer: Laufzeit plus Rotation | Deutschland [bestätigen] | [Auftragsverarbeitungsvertrag mit IONOS abschließen und ablegen — prüfen] |
| [Anthropic — Vertragspartner laut Commercial Terms prüfen] | KI-Import und Borki mit dem Schlüssel des Betreibers (E-26), auch über das geplante KI-Relais für die Einrichtungshilfe (.claude/plans/PLAN-2026-10-23-borki-einrichtungshelfer.md): PDFs auslesen, Hilfe-Fragen beantworten | Verarbeitung auch außerhalb der EU; Übermittlung nach Standardvertragsklauseln (Durchführungsbeschluss 2021/914) | Data Processing Addendum, gültig ab 24.02.2025 ([anthropic.com](https://www.anthropic.com/legal/data-processing-addendum)) |
Nicht in dieser Liste: Kartenkacheln (OpenStreetMap, Esri, OpenTopoMap, BKG, Mapterhorn) und die Ortsauskunft (OpenStreetMap Nominatim), die Desktop und Tablet der Pilotfirma direkt abrufen (HT src/main/services/tileCache.ts:16-56, src/shared/ortsAuskunft.ts); NavLog (Lizenzgeber, Lizenz je Firma); Mailversand über den Mail-Server der Pilotfirma. Offen: Das Kundenportal bindet Kartenkacheln von OpenStreetMap, Esri und CARTO ein (HW src/components/portal/PortalMapInner.tsx:356-377) — die Browser der Portal-Nutzer übermitteln dabei ihre IP-Adresse an diese Anbieter; Rolle und Nennung in der Datenschutzerklärung des Portals [prüfen].