From aff3020b13f1180bdfce599fad173bfa7fdefab1 Mon Sep 17 00:00:00 2001 From: Lars Date: Sun, 10 May 2026 22:17:51 +0200 Subject: [PATCH] docs(compliance): Dokumentation auf Stand P-01b und P-01c aktualisiert (0.8.74) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - compliance-implementation.md: P-01c um copy-as-draft (0.8.72) und jsPDF + Abschnitts-Sortierung/-Einfuegen (0.8.74) ergaenzt; Testzusammenfassung auf 17 Playwright-Tests aktualisiert; Versionheader 0.8.74 - compliance-roadmap.md: App-Version 0.8.74; P-01-Blocker-Beschreibung vollstaendig (alle technischen Faehigkeiten); P-01c-Erweiterungen in Abschlussliste; Schnellreferenz aktualisiert - compliance-package-register.md: P-01 Letzter Stand auf 0.8.74; Verweise und Hinweise ergaenzt (copy-as-draft, jsPDF, Sortierung); Fortschritt 0.8.74 - compliance-audit.md: Amendment §14.2 und §14.3 mit aktuellem Umsetzungsstand P-01/P-01b/P-01c; historische Befunde unveraendert Co-Authored-By: Claude Sonnet 4.6 --- docs/compliance-audit.md | 24 +++++++------ docs/compliance-implementation.md | 56 +++++++++++++++++++++++++++-- docs/compliance-package-register.md | 10 +++--- docs/compliance-roadmap.md | 26 +++++++++----- 4 files changed, 89 insertions(+), 27 deletions(-) diff --git a/docs/compliance-audit.md b/docs/compliance-audit.md index 85b98f3..006cfef 100644 --- a/docs/compliance-audit.md +++ b/docs/compliance-audit.md @@ -467,19 +467,21 @@ if os.getenv("ALLOW_PUBLIC_MEDIA_STATIC", "").strip().lower() in ("1", "true", " ### 14.2 Fehlende rechtliche Dokumentation -| Dokument | Status | -|----------|--------| -| Impressum | ❌ Keine Seite, kein Inhalt, keine Route | -| Datenschutzerklärung | ❌ | -| Nutzungsbedingungen / AGB | ❌ | -| Medienrichtlinie / Community-Regeln | ❌ | -| Verzeichnis der Verarbeitungstätigkeiten (VVT) | ❌ | -| AV-Verträge mit Auftragsverarbeitern | ❌ | -| Backup-Konzept schriftlich | ❌ | +| Dokument | Status (Audit 2026-05-09) | Stand 2026-05-10 | +|----------|--------------------------|------------------| +| Impressum | ❌ Keine Seite, kein Inhalt, keine Route | ⚠️ Route + Platzhalter vorhanden; Inhalt durch Betreiber/Rechtsanwalt ausstehend | +| Datenschutzerklärung | ❌ | ⚠️ Route + Platzhalter vorhanden; Inhalt ausstehend | +| Nutzungsbedingungen / AGB | ❌ | ⚠️ Route + Platzhalter vorhanden; Inhalt ausstehend | +| Medienrichtlinie / Community-Regeln | ❌ | ⚠️ Route + Platzhalter vorhanden; Inhalt ausstehend | +| Verzeichnis der Verarbeitungstätigkeiten (VVT) | ❌ | ❌ offen (Betreiber-Aufgabe) | +| AV-Verträge mit Auftragsverarbeitern | ❌ | ❌ offen (Betreiber-Aufgabe) | +| Backup-Konzept schriftlich | ❌ | ❌ offen (Betreiber-Aufgabe) | + +> **Amendment 2026-05-10:** Routen und Platzhalterseiten implementiert (P-01, 0.8.69); Mobile/PWA via `/settings/legal` (P-01b, 0.8.70); Admin-konfigurierbare Rechtstexte mit DB-Versionierung, Superadmin-UI, PDF-Download, Abschnitts-Editor (P-01c, 0.8.71–0.8.74). KRIT-01 bleibt offen bis zur Veröffentlichung juristisch geprüfter Inhalte. ### 14.3 Fehlende Frontend-Routen -In `frontend/src/App.jsx` fehlen: +In `frontend/src/App.jsx` fehlen (Stand Audit 2026-05-09): - `/impressum` - `/datenschutz` - `/nutzungsbedingungen` @@ -487,6 +489,8 @@ In `frontend/src/App.jsx` fehlen: Alle müssen **vor der Authentifizierung** erreichbar und in der PWA verfügbar sein. +> **Amendment 2026-05-10 (P-01, Version 0.8.69):** Alle vier Routen sind implementiert und ohne Auth erreichbar. Links in LoginPage-Footer, DesktopSidebar-Footer und `/settings/legal` (P-01b). Migrationsnummer der Datenbank: bis 046 geprüft (Audit-Scope). Migration 047 (legal_documents) wurde außerhalb des Audit-Zeitfensters angelegt — siehe `docs/compliance-implementation.md` §P-01c. + --- ## 15. Testanalyse diff --git a/docs/compliance-implementation.md b/docs/compliance-implementation.md index c1bdfd0..e1ea070 100644 --- a/docs/compliance-implementation.md +++ b/docs/compliance-implementation.md @@ -3,7 +3,7 @@ **Erstellt:** 2026-05-09 **Zuletzt aktualisiert:** 2026-05-10 **Audit-Basis:** `docs/compliance-audit.md` -**App-Version nach Umsetzung:** 0.8.71 +**App-Version nach Umsetzung:** 0.8.74 --- @@ -111,6 +111,49 @@ Tabelle `legal_documents`: versionierte Rechtstexte mit Workflow `draft → publ --- +### P-01c Erweiterung — Als-Entwurf-kopieren ✅ + +**Status:** Umgesetzt (2026-05-10, Version 0.8.72) — Ergänzung zu P-01c + +**Betroffene Dateien:** +- `backend/routers/legal_documents.py` — Neuer Endpoint `POST /api/admin/legal-documents/{id}/copy-as-draft` +- `frontend/src/utils/api.js` — `copyLegalDocumentAsDraft(id)` +- `frontend/src/pages/AdminLegalDocumentsPage.jsx` — „Als Entwurf kopieren"-Button in der Dokumentliste + +**Technische Änderung:** +Neuer Superadmin-Endpoint kopiert `title` und `content_sections` eines bestehenden Dokuments in einen neuen Entwurf. Die Versionsnummer wird dabei automatisch inkrementiert (letztes Dokument dieses Typs + 1). Status ist immer `draft`. Ermöglicht inkrementelle Überarbeitung ohne vollständige Neueingabe. + +**Motivation:** Bei jeder fälligen Textanpassung mussten alle Abschnitte neu erfasst werden. Die Kopierfunktion ermöglicht, den letzten Stand zu übernehmen und nur die geänderten Abschnitte zu bearbeiten. + +--- + +### P-01c Erweiterung — Echter PDF-Download + Abschnitts-Sortierung ✅ + +**Status:** Umgesetzt (2026-05-10, Version 0.8.74) — Ergänzung zu P-01c + +**Betroffene Dateien:** +- `frontend/src/pages/AdminLegalDocumentsPage.jsx` — `generateLegalPdf()` via jsPDF, `SectionEditor` mit Sortierung +- `frontend/src/pages/LegalPage.jsx` — `generateLegalPdf()` via jsPDF, Button „PDF herunterladen" +- `frontend/package.json` — neues npm-Paket `jspdf` + +**Technische Änderung — PDF:** +Ersetzt die bisherige `window.open()` + `window.print()`-Lösung (Browser-Druckdialog) durch `jsPDF`. Die Funktion `generateLegalPdf(doc)` erzeugt ein A4-PDF client-seitig mit: +- Titel (bold, 20 pt), Metazeile (Version + Gültigkeitsdatum), Trennlinie +- Abschnitte mit Heading (bold, 11 pt) und Fließtext (10 pt, `splitTextToSize` für automatischen Zeilenumbruch) +- Automatischer Seitenumbruch bei `y > 277 mm` +- Footer auf jeder Seite: „Shinkan Jinkendo | Exportiert am DD.MM.YYYY Seite X von Y" +- Direkter Dateidownload via `pdf.save('{document_type}_v{version}.pdf')` + +Gilt sowohl für die Admin-Seite (Download aus der Dokumentliste, ruft `getLegalDocument(id)` für Volldokument ab) als auch für `LegalPage.jsx` (öffentlich, nur bei veröffentlichten Dokumenten). + +**Technische Änderung — Abschnitts-Sortierung und Einfügen:** +`SectionEditor` in `AdminLegalDocumentsPage.jsx` erhält: +- ▲/▼-Buttons pro Abschnitt (deaktiviert an den Rändern) — Reihenfolge per Array-Swap +- `InsertButton` zwischen jedem Abschnitt (inkl. vor dem ersten) — fügt leeren Abschnitt an beliebiger Stelle per `splice` ein +- Kein Drag-and-Drop-Framework — reine React-State-Manipulation + +--- + ### P-03 – Papierkorb-Retention-Job aktivieren ✅ **Status:** Umgesetzt @@ -304,7 +347,7 @@ allow_headers=["Content-Type", "X-Auth-Token", "X-Active-Club-Id"], --- -## Test-Zusammenfassung (Stand 0.8.69) +## Test-Zusammenfassung (Stand 0.8.74) ``` tests/test_auth_password_reset_minlength.py 7 passed (neu, P-05b) @@ -317,9 +360,16 @@ Fehlgeschlagener Test: test_list_media_assets_invalid_lifecycle_400 → Pre-existing: benötigt laufenden PostgreSQL-Container (Hostname "postgres") → Bestand bereits vor allen Compliance-Änderungen (verifiziert per git stash) -Playwright E2E (dev-smoke-test.spec.js): 14 passed (inkl. 5 neue P-01-Tests) +Playwright E2E (dev-smoke-test.spec.js): 17 passed (inkl. P-01c-Tests) → P-01: 4× Route ohne Auth + Platzhalterhinweis + Reload, 1× Login-Links +→ P-01b: 3× /settings/legal (Link in Einstellungen, Überschrift, Rechtstext-Links) +→ P-01c: 3× Admin-Rechtstexte (Seitenladung, Route /admin/legal-documents, Admin-Nav) → P-12: sessionStorage-Bereinigung (grün) + +Anmerkung jsPDF (0.8.74): +→ PDF-Download via pdf.save() ist ein Browser-Download, kein Server-Request. +→ Kein Backend-Test möglich; funktional im Browser verifizierbar. +→ Playwright-E2E-Test erfordert laufenden Dev-Server (npx playwright test). ``` --- diff --git a/docs/compliance-package-register.md b/docs/compliance-package-register.md index 7cdfdfd..47d01b7 100644 --- a/docs/compliance-package-register.md +++ b/docs/compliance-package-register.md @@ -3,7 +3,7 @@ **Typ:** Kanonisches Referenzdokument **Erstellt:** 2026-05-10 **Basisdokument:** `docs/compliance-audit.md` (Initial-Audit 2026-05-09, App-Version 0.8.65) -**Letzte Aktualisierung:** 2026-05-10 (App-Version 0.8.71) +**Letzte Aktualisierung:** 2026-05-10 (App-Version 0.8.74) --- @@ -32,9 +32,9 @@ | **Findings** | KRIT-01 | | **Etappe** | 1 | | **Status** | ⚠️ partially implemented | -| **Letzter Stand** | Technischer Teil umgesetzt (2026-05-10, Version 0.8.71, inkl. P-01b + P-01c): Routen `/impressum`, `/datenschutz`, `/nutzungsbedingungen`, `/medienrichtlinie` öffentlich erreichbar ohne Auth. Platzhalterseiten mit strukturierten Pflichtfeldern und sichtbarem Muster-Hinweis. Links in LoginPage, DesktopSidebar und `/settings/legal` (Mobile/PWA, P-01b). Admin-konfigurierbare Rechtstexte mit Versionierung + Publish-Workflow (DB 047, Superadmin-UI `/admin/legal-documents`, P-01c). **Juristisch geprüfte Inhalte fehlen noch — Betreiber + Rechtsanwalt erforderlich. KRIT-01 bleibt offen bis zur Veröffentlichung echter Texte.** | +| **Letzter Stand** | Technischer Teil vollständig umgesetzt (2026-05-10, Version 0.8.74, inkl. P-01b + P-01c + Erweiterungen): Routen `/impressum`, `/datenschutz`, `/nutzungsbedingungen`, `/medienrichtlinie` öffentlich erreichbar ohne Auth. Platzhalterseiten mit strukturierten Pflichtfeldern und sichtbarem Muster-Hinweis. Links in LoginPage, DesktopSidebar und `/settings/legal` (Mobile/PWA, P-01b, 0.8.70). Admin-konfigurierbare Rechtstexte mit Versionierung + Publish/Archive-Workflow (DB 047, Superadmin-UI `/admin/legal-documents`, P-01c, 0.8.71). Als-Entwurf-kopieren: `POST /api/admin/legal-documents/{id}/copy-as-draft` (0.8.72). Echter PDF-Download via jsPDF (direkter Dateidownload, A4, Seitenumbruch, Footer), Abschnitte sortieren (▲/▼) und an beliebiger Stelle einfügen (0.8.74). **Juristisch geprüfte Inhalte fehlen noch — Betreiber + Rechtsanwalt erforderlich. KRIT-01 bleibt offen bis zur Veröffentlichung echter Texte.** | | **Verweise** | `docs/compliance-audit.md` §14.2, §17, §19.1; `docs/compliance-implementation.md` §P-01, §P-01b, §P-01c; `frontend/src/pages/LegalPage.jsx`; `frontend/src/pages/SettingsLegalPage.jsx`; `frontend/src/pages/AdminLegalDocumentsPage.jsx`; `backend/routers/legal_documents.py`; `backend/migrations/047_legal_documents.sql` | -| **Hinweise** | P-01b (Mobile-Erreichbarkeit) und P-01c (Admin-konfigurierbar) als Suffix-Pakete ergänzt und vollständig umgesetzt. Keine Nummerierungsabweichung. Scope Drift ausgeschlossen. | +| **Hinweise** | P-01b (Mobile-Erreichbarkeit, 0.8.70) und P-01c (Admin-konfigurierbar, 0.8.71) als Suffix-Pakete ergänzt und vollständig umgesetzt. Erweiterungen: copy-as-draft (0.8.72), jsPDF + Abschnitts-Sortierung/-Einfügen (0.8.74). Keine Nummerierungsabweichung. | --- @@ -424,9 +424,9 @@ ## Fortschritt **Implementiert (vollständig):** P-03, P-03b, P-04, P-05, P-05b, P-07, P-12, P-23, P-24 — 9 Pakete (inkl. 2 Nacharbeiten) -**Teilweise implementiert:** P-01 (technischer Teil; juristische Inhalte offen) — 1 Paket +**Teilweise implementiert:** P-01 (technischer Teil vollständig inkl. P-01b, P-01c, copy-as-draft, jsPDF; juristische Inhalte offen) — 1 Paket **Offen:** P-02, P-06, P-08, P-09, P-10, P-11, P-13, P-14, P-15, P-16, P-17, P-18, P-19, P-20, P-21, P-22 — 16 Pakete -**App-Version bei letzter Aktualisierung:** 0.8.69 +**App-Version bei letzter Aktualisierung:** 0.8.74 **Letztes Umsetzungsdatum:** 2026-05-10 --- diff --git a/docs/compliance-roadmap.md b/docs/compliance-roadmap.md index db6487b..8cae22f 100644 --- a/docs/compliance-roadmap.md +++ b/docs/compliance-roadmap.md @@ -2,7 +2,7 @@ **Typ:** Lebendes Steuerungsdokument **Erstellt:** 2026-05-10 -**App-Version:** 0.8.71 +**App-Version:** 0.8.74 **Zuletzt aktualisiert:** 2026-05-10 --- @@ -29,13 +29,13 @@ Diese Roadmap ist nach jedem Re-Audit zu aktualisieren. Abweichungen von der bis ## 2. Aktueller Stand (2026-05-10) -### App-Version: 0.8.71 +### App-Version: 0.8.74 ### Teilweise umgesetzte Pakete | ID | Titel | Version | Offen | |----|-------|---------|-------| -| P-01 | Rechtstexte | 0.8.70 | Juristische Inhalte — Betreiber + Rechtsanwalt | +| P-01 | Rechtstexte | 0.8.74 | Juristische Inhalte — Betreiber + Rechtsanwalt | ### Vollständig geschlossene Pakete @@ -52,8 +52,10 @@ Diese Roadmap ist nach jedem Re-Audit zu aktualisieren. Abweichungen von der bis | P-24 | CORS einschränken (Methoden + Header) | 0.8.66 | | P-01b | _Nacharbeit:_ Mobile/PWA-Erreichbarkeit Rechtstexte via `/settings/legal` | 0.8.70 | | P-01c | _Nacharbeit:_ Admin-konfigurierbare Rechtstexte (DB 047, Superadmin-UI, API) | 0.8.71 | +| P-01c+ | _Erweiterung:_ Als-Entwurf-kopieren (`copy-as-draft`) | 0.8.72 | +| P-01c++ | _Erweiterung:_ Echter PDF-Download (jsPDF) + Abschnitts-Sortierung/-Einfügen | 0.8.74 | -**Vollständig abgeschlossen:** 7 Hauptpakete + 4 Nacharbeiten = 11 Umsetzungseinheiten +**Vollständig abgeschlossen:** 7 Hauptpakete + 4 Nacharbeiten + 2 Erweiterungen = 13 Umsetzungseinheiten **Teilweise umgesetzt (technisch):** P-01 ### Offene Pakete (16) @@ -83,9 +85,15 @@ Die folgenden Pakete sind vor der Freigabe für allgemeine öffentliche Registri ### Blocker 1 — P-01: Rechtstexte **Finding:** KRIT-01 (Ordnungswidrigkeit, § 5 DDG) -**Technischer Stand:** ⚠️ Routen und Platzhalterseiten vorhanden (Version 0.8.69); Mobile/PWA-Erreichbarkeit via `/settings/legal` ergänzt (P-01b, Version 0.8.70); Admin-konfigurierbare Rechtstexte mit DB-Versionierung und Superadmin-UI implementiert (P-01c, Version 0.8.71). Juristische Inhalte fehlen noch. -**Warum noch offen:** Impressum, Datenschutzerklärung und AGB ohne geprüfte Inhalte genügen der gesetzlichen Pflicht nicht. Technisch kann der Superadmin jetzt Inhalte über `/admin/legal-documents` einpflegen — sobald juristisch geprüfte Texte vorliegen, werden diese veröffentlicht und die Platzhaltermarkierung verschwindet automatisch. -**Nächster Schritt:** Rechtsanwalt beauftragt werden → Inhalte durch Betreiber über Admin-UI einpflegen → Veröffentlichen → Platzhaltermarkierung verschwindet automatisch. +**Technischer Stand:** ⚠️ Vollständige technische Infrastruktur vorhanden (Version 0.8.74): +- Routen `/impressum`, `/datenschutz`, `/nutzungsbedingungen`, `/medienrichtlinie` öffentlich ohne Auth erreichbar (P-01, 0.8.69) +- Mobile/PWA-Erreichbarkeit via `/settings/legal` (P-01b, 0.8.70) +- Admin-konfigurierbare Rechtstexte: DB-Versionierung, Publish/Archive-Workflow, Superadmin-UI `/admin/legal-documents` (P-01c, 0.8.71) +- Als-Entwurf-kopieren: Bestehendes Dokument als Basis für neue Version übernehmen (0.8.72) +- Echter PDF-Download via jsPDF (direkter Dateidownload, kein Druckdialog), Abschnitte sortieren (▲/▼) und an beliebiger Stelle einfügen (0.8.74) + +**Warum noch offen:** Impressum, Datenschutzerklärung und AGB ohne juristisch geprüfte Inhalte genügen der gesetzlichen Pflicht nicht. Die Superadmin-UI bietet alle Werkzeuge zum Einpflegen, Versionieren und Veröffentlichen von Texten — sobald Inhalte vorliegen, verschwindet der Platzhalter-Banner automatisch. +**Nächster Schritt:** Rechtsanwalt beauftragen → Inhalte über `/admin/legal-documents` einpflegen → Veröffentlichen → Platzhaltermarkierung verschwindet automatisch. ### Blocker 2 — P-06: Upload-Einwilligungsdialog @@ -215,7 +223,7 @@ Erst wenn diese Fragen beantwortet und als Spec dokumentiert sind, wird P-02 in ## 6. Nächste empfohlene Freigabe -**P-01 + P-01b + P-01c technisch umgesetzt (Version 0.8.71).** Rechtstexte über Login, Desktop-Sidebar und Einstellungen → Rechtliches (Mobile/PWA) erreichbar. Superadmin kann jetzt über `/admin/legal-documents` versionierte Rechtstexte anlegen und veröffentlichen — sobald Inhalte eingepflegt sind, verschwindet der Platzhalter-Banner automatisch. Juristische Inhalte bleiben offen. +**P-01 + P-01b + P-01c technisch vollständig umgesetzt (Version 0.8.74).** Rechtstexte über Login, Desktop-Sidebar und Einstellungen → Rechtliches (Mobile/PWA) erreichbar. Superadmin kann über `/admin/legal-documents` versionierte Rechtstexte anlegen, bearbeiten (inkl. Abschnitts-Sortierung und Einfügen an beliebiger Stelle), als Entwurf kopieren, veröffentlichen und als PDF herunterladen — sobald Inhalte eingepflegt sind, verschwindet der Platzhalter-Banner automatisch. Juristische Inhalte bleiben offen (Betreiber + Rechtsanwalt). Die nächste technische Freigabe sollte **Etappe B** umfassen — beginnend mit dem kleinsten Paket: @@ -344,7 +352,7 @@ Diese Punkte liegen außerhalb des Code-Scopes und erfordern organisatorische Ma | ~~P-12 allein~~ | ~~„Freigabe zur Umsetzung P-12: sessionStorage bei Logout bereinigen"~~ | ✅ historisch abgeschlossen (Version 0.8.68) | | ~~P-01 technisch~~ | ~~„Freigabe zur Umsetzung P-01: Rechtstexte technisch anlegen"~~ | ✅ historisch abgeschlossen (Version 0.8.69) | | ~~P-01b~~ | ~~„Freigabe zur Umsetzung P-01b: Mobile/PWA-Zugriff auf Rechtliches"~~ | ✅ historisch abgeschlossen (Version 0.8.70) | -| ~~P-01c~~ | ~~„Freigabe zur Umsetzung P-01c: Admin-konfigurierbare Rechtstexte"~~ | ✅ historisch abgeschlossen (Version 0.8.71) | +| ~~P-01c~~ | ~~„Freigabe zur Umsetzung P-01c: Admin-konfigurierbare Rechtstexte"~~ | ✅ historisch abgeschlossen (Version 0.8.71); Erweiterungen copy-as-draft (0.8.72) + jsPDF/Sortierung (0.8.74) | | **P-06 (empfohlen)** | **„Freigabe zur Umsetzung P-06: Upload-Einwilligungsdialog"** | ⬅ nächste empfohlene Freigabe | | Etappe B komplett | „Freigabe zur Umsetzung Etappe B: P-06, P-11, P-13" | offen | | P-02 Spezifikation | „Freigabe zur Spezifikation P-02: DSGVO-Self-Service-Prozess" | offen |