From 9eafe984e187153945f96568226b30bcdaf0c732 Mon Sep 17 00:00:00 2001 From: Pepe Ziberi Date: Thu, 23 Jul 2026 12:19:59 +0200 Subject: [PATCH] docs(legal): Abschlussbericht der Compliance-Umsetzung (v1.7.4) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit docs/legal/IMPLEMENTATION-REPORT.md — Zusammenfassung, geänderte Dateien, DB, Konfiguration, manuelle Schritte, offene rechtliche Entscheidungen, Test-/Build-Ergebnisse, Folgeschritte. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/legal/IMPLEMENTATION-REPORT.md | 83 +++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 docs/legal/IMPLEMENTATION-REPORT.md diff --git a/docs/legal/IMPLEMENTATION-REPORT.md b/docs/legal/IMPLEMENTATION-REPORT.md new file mode 100644 index 0000000..8b2c5cf --- /dev/null +++ b/docs/legal/IMPLEMENTATION-REPORT.md @@ -0,0 +1,83 @@ +# Compliance-Umsetzung — Abschlussbericht + +Stand: 2026-07-23 · Versionen 1.7.0 – 1.7.4 · sorgfältiger Entwurf, ersetzt keine juristische Prüfung. + +## A. Zusammenfassung +- **Analyse**: 4 parallele Analysen (Legal/Claims, Dienstleister, Auth/Modelle/Admin, Export/Security/Cookies). +- **Claims**: 20 werbliche/absolute Aussagen korrigiert (24/7, 100 %, DSG/DSGVO-konform, „keine Weitergabe", + „keine Übermittlung ins Ausland", „verschlüsselt"→„gehasht", 100 % der Spende, „Kein Unternehmen"). +- **Transparenz**: zentrale Legal-Config, neue Rechtsseiten, faktenbasierte Datenschutzerklärung mit + echter Subprozessorenliste. +- **Consent**: revisionssichere Zustimmungsprotokollierung (LegalDocument/LegalAcceptance), Registrierung + mit getrennten Zustimmungen, blockierender Re-Consent-Dialog, Organisationsbestätigung (7 Pflicht-Checks), + Admin-Übersicht mit CSV-Export, Konto-Datenschutzseite. +- **Risikoreduktion**: Export-Prüfhinweise (PDF/PNG), Dashboard-Hinweis, Berechnungs-/Geodaten-Hinweis, + private Routen `noindex`/`no-store`. + +## B. Geänderte/neue Dateien (Auszug) +| Datei | Zweck | Änderung | +|---|---|---| +| src/config/legal.ts | Zentrale Rechtskonfiguration | NEU | +| src/components/legal/legal-page.tsx | Shell für Rechtsseiten + Footer-Links | NEU | +| src/app/nutzungsbedingungen/… | Nutzungsbedingungen | NEU | +| src/app/verantwortungsvolle-nutzung/… | Verantwortungsvolle Nutzung | NEU | +| src/app/sicherheit/… | Sicherheit | NEU | +| src/app/unterstuetzen/… | Freiwilliger Unterstützungsbeitrag | NEU | +| src/app/organisationen/datenschutzvereinbarung/… | AVV-Entwurf | NEU | +| src/app/datenschutz/page.tsx | Datenschutzerklärung | NEUAUFBAU | +| src/app/impressum/page.tsx | Impressum | Claims korrigiert | +| src/app/page.tsx, spenden/…, admin/settings-tab | Landing/Spenden/Admin | Claims korrigiert | +| prisma/schema.prisma, prisma/migrate.js | LegalDocument/LegalAcceptance + Seeding | Erweitert | +| src/lib/legal.ts, legal-rules.ts, legal-content.ts | Consent-Logik | NEU | +| src/app/api/legal/*, api/admin/legal/* | Consent-/Admin-APIs | NEU | +| src/components/legal/legal-consent-gate.tsx | Re-Consent/Org-Bestätigung | NEU | +| src/app/konto/datenschutz/… , src/app/admin/legal/… | Konto- & Admin-Ansicht | NEU | +| src/app/register/page.tsx, api/auth/register | Zustimmung bei Registrierung | Erweitert | +| src/hooks/use-map-export.ts | Export-Prüfhinweis | Erweitert | +| src/components/legal/usage-notice-banner.tsx | Dashboard-Hinweis | NEU | +| src/components/map/measure-panel.tsx | Berechnungs-Hinweis | Erweitert | +| src/middleware.ts | noindex/no-store, /konto, /api/share | Erweitert | +| src/app/sitemap.ts | neue Seiten | Erweitert | +| docs/legal/*.md | Audit, Inventar, Subprozessoren, TOM, Retention, Incident, Lizenzen | NEU | +| vitest.config.ts, src/**/__tests__ | Unit-Tests | NEU | + +## C. Datenbank +- **Neue Tabellen**: `legal_documents`, `legal_acceptances` (idempotent in `prisma/migrate.js`). +- **Neue Felder**: keine an bestehenden Tabellen (Consent liegt in eigenen Tabellen; Tenant-Felder + `privacyAccepted` etc. bestanden bereits). +- **Migration**: läuft idempotent beim Container-Start (bestehendes Muster). Dokumente werden geseedet/aktiviert. +- **Auswirkungen auf Bestand**: keine destruktiven Änderungen; bestehende Daten unberührt. + +## D. Konfiguration (neue ENV, optional — Defaults sind sichtbare Platzhalter) +`LEGAL_OPERATOR_NAME`, `LEGAL_OPERATOR_FORM`, `LEGAL_POSTAL_ADDRESS`, `LEGAL_SUPPORT_EMAIL`, +`LEGAL_PRIVACY_EMAIL`, `LEGAL_SITE_DOMAIN`, `LEGAL_APP_DOMAIN`, `LEGAL_JURISDICTION`, +`LEGAL_HOSTING_PROVIDER`, `LEGAL_SERVER_LOCATION`, `LEGAL_BACKUP_RETENTION`. + +## E. Manuelle Schritte nach Deployment +1. `LEGAL_*`-Angaben setzen (oder direkt in `src/config/legal.ts`). +2. `datenschutz@lageplan.ch` als überwachtes Postfach bestätigen. +3. Migration läuft automatisch; prüfen, dass die 5 Dokumente aktiv sind (`/admin/legal`). +4. Bestehende Org-Admins sehen beim nächsten Login die Organisationsbestätigung. +5. Stripe-/SMTP-DPA prüfen; Subprozessoren-Regionen ergänzen. +6. `/admin/legal` ggf. im Admin-Menü verlinken (aktuell direkte URL). + +## F. Offene rechtliche Entscheidungen +Betreiberform/-adresse, Datenschutzkontakt, Serverstandorte (inkl. Backups/Logs), Unterauftragnehmer- +Regionen & DPAs, Aufbewahrungsfristen, Nutzungsrecht FKS/BABS-Symbole, Versicherung, AVV mit Feuerwehren, +juristische Schlussprüfung. + +## G. Tests & Prüfung +- `npm test` (Vitest): **13 Tests grün** (Consent-Regeln, Re-Consent, 7 Org-Bestätigungen, Platzhalter, + keine erfundenen Subprozessoren). +- `tsc --noEmit`: nur vorbestehender `nodemailer`-Typhinweis (unabhängig). +- `next build`: erfolgreich (66 Seiten). +- Manuell zu prüfen (kein E2E-Framework, unverhältnismässig): Registrierung ohne Zustimmung blockiert, + Re-Consent-Dialog erscheint, Checkboxen einzeln/nicht vorausgewählt, Admin-Seiten nicht öffentlich. + +## H. Nicht umgesetzt / bewusst als Folgeschritt +- **Plan-Freigabe-Workflow** (Entwurf/geprüft/freigegeben/archiviert, geprüft-von/-am, Prüf-Erinnerungen): + grosser neuer DB-+UI-Umbau; stattdessen Export-/Dashboard-/Berechnungs-Hinweise umgesetzt. Empfehlung als + eigenes Projekt. +- **MFA für Admins**, CSP verschärfen, Socket.io-CORS einschränken, geteilter Rate-Limit-Store: in + `technical-organizational-measures.md` als empfohlene Massnahmen dokumentiert. +- Cookie-Banner: unverändert (nur technisch notwendige Cookies; in Datenschutz dokumentiert).