feat: Werkzeugkatalog nennt tatsächliche Verarbeitungsländer statt EU/USA/gemischt-Eimer, plus DPF-Feld
Die USA sind DSGVO-rechtlich bereits ein Drittland wie jedes andere - der alte verarbeitungsort-Wertebereich (EU/USA/gemischt/on-prem) verschleierte das. Ersetzt durch verarbeitungslaender TEXT[] mit echter Weltländerliste im Formular (Mehrfachauswahl, kein JS nötig). Der harte Filter eu_verarbeitung verlangt jetzt, dass ALLE genannten Länder EU/EWR sind. Neues Feld dpf_zertifiziert macht die EU-US Data Privacy Framework-Zertifizierung strukturiert statt nur Fließtext. Öffnet nebenbei den Weg für Katalogeinträge außerhalb EU/USA (z. B. DeepSeek), die vorher am alten Wertebereich scheiterten. Zusätzlich Typografie-Nachbesserung nach Nutzer-Feedback: Formular- Abschnittsüberschriften (<legend>) saßen zu dicht am Kartenrand, weil <legend> das Padding des umschließenden <fieldset> ignoriert - jetzt mit eigenem Padding und größerer Schrift, h2/h3 einheitlich gesetzt.
This commit is contained in:
60
CLAUDE.md
60
CLAUDE.md
@@ -251,7 +251,7 @@ Sperrungen zentraler Einträge (`werkzeug_sperre`) führen, ohne den
|
||||
zentralen Katalog zu verändern.
|
||||
|
||||
**Pflicht:** `letzte_pruefung` und `quelle` sind NOT NULL — jede
|
||||
Zusicherung im Katalog (AVV verfügbar, Verarbeitungsort, Training-Opt-
|
||||
Zusicherung im Katalog (AVV verfügbar, Verarbeitungsländer, Training-Opt-
|
||||
out, Zertifizierungen) muss belegbar sein, sonst haftet Deklarix für
|
||||
eine Aussage, die nicht nachweisbar ist. Beide Katalogansichten zeigen
|
||||
eine dreistufige Ampel zum Prüfalter (`pruefStatus()` in
|
||||
@@ -295,7 +295,7 @@ scheinbar EU-verarbeitetes Werkzeug die USA doch nicht ausschließt.
|
||||
|
||||
Sowohl der zentrale Katalog (`GET /betreiber/werkzeuge`) als auch die
|
||||
mandantenseitige Sicht (`GET /verwaltung/werkzeuge`) zeigen den Katalog
|
||||
als Tabelle (Name, Anbieter, Verarbeitungsort, AVV, Training aus,
|
||||
als Tabelle (Name, Anbieter, Verarbeitungsländer, DPF, AVV, Training aus,
|
||||
Aufbewahrung, Zertifizierungen, Geeignete Zwecke, Zuletzt geprüft) statt
|
||||
als Liste — vorher waren nur Name/Anbieter/Ort auf einen Blick sichtbar,
|
||||
der Rest war erst nach Klick auf den Detaileintrag zu sehen.
|
||||
@@ -324,16 +324,33 @@ CLAUDE.md-Leitplanken für personenbezogene/vertrauliche Daten nicht
|
||||
geeignet, absichtlich als Negativbeispiel im Katalog, nicht
|
||||
weggelassen)**.
|
||||
|
||||
**Bekannte Schema-Lücke (2026-08-31, noch nicht behoben):** Anbieter
|
||||
mit Verarbeitung außerhalb EU/USA (z. B. DeepSeek, China) lassen sich
|
||||
mit dem aktuellen `verarbeitungsort`-Wertebereich (`EU`/`USA`/
|
||||
`gemischt`/`on-prem`, DB-CHECK-Constraint) nicht korrekt abbilden —
|
||||
"gemischt" würde fälschlich EU-Berührung suggerieren, "USA" wäre
|
||||
schlicht falsch. DeepSeek wurde deshalb bewusst NICHT angelegt statt
|
||||
mit einem falschen Wert erzwungen. Vor dem nächsten Katalogeintrag
|
||||
außerhalb EU/USA/on-prem-Hosting muss der Wertebereich erweitert werden
|
||||
(z. B. um `drittland`) — eigene Migration nötig, Entscheidung noch
|
||||
nicht getroffen.
|
||||
**Schema-Lücke behoben (2026-08-31, Migration 0016):** der grobe
|
||||
`verarbeitungsort`-Eimer (`EU`/`USA`/`gemischt`/`on-prem`) wurde durch
|
||||
`verarbeitungslaender TEXT[]` ersetzt — echte Länder statt Buckets.
|
||||
Grund: "USA" war schon immer ein Drittland im Sinne der DSGVO (Art. 44
|
||||
ff.) wie jedes andere auch, das Wort "Drittland" für einen fünften
|
||||
Bucket-Wert wäre also verwirrend gewesen, nicht erhellend. Das Formular
|
||||
bietet dafür eine echte Weltländerliste (`weltLaenderliste` in
|
||||
`laenderliste.go`, `<select multiple>`, Mehrfachauswahl per Strg/Cmd-
|
||||
Klick — kein JavaScript nötig) plus zwei Pseudo-Einträge ("EU-Region
|
||||
(kein einzelnes Land benannt)" für Anbieter, die nur eine Region statt
|
||||
eines Staates zusichern, z. B. Microsofts EU Data Boundary; "On-Premise
|
||||
(selbst gehostet)"). Der harte Filter `eu_verarbeitung`
|
||||
(`internal/rules/evaluate.go`, `alleLaenderInEUEWR`) verlangt jetzt,
|
||||
dass ALLE genannten Länder EU/EWR-Mitgliedstaaten sind — eine leere
|
||||
Liste gilt als nicht erfüllt, nicht als Freifahrtschein. Zusätzlich neues
|
||||
Feld `dpf_zertifiziert` (Checkbox "EU-US Data Privacy Framework
|
||||
zertifiziert"): DPF ist eine schmalere, gerichtlich schon zweimal
|
||||
gekippte Rechtsgrundlage (Safe Harbor, Privacy Shield) für USA-Transfers,
|
||||
bisher nur als Fließtext in "Einschränkungen" erwähnt, jetzt strukturiert
|
||||
und damit künftig filterbar. Alle 19 Katalogeinträge wurden mit den
|
||||
tatsächlichen, bereits recherchierten Ländern nachgepflegt (z. B.
|
||||
Mistral → Frankreich, DeepL → Deutschland, Synthesia → Irland, Claude
|
||||
for Work → USA) statt der pauschalen alten Buckets.
|
||||
|
||||
Das öffnet jetzt auch DeepSeek (Verarbeitung in China) für einen
|
||||
künftigen Katalogeintrag — die Sperre lag ausschließlich am alten
|
||||
Wertebereich, nicht an einer fachlichen Entscheidung.
|
||||
|
||||
`CurrentKatalogVersion` liefert eine reproduzierbare Kennung des
|
||||
aktuellen Katalogzustands (Anzahl Einträge + letzte Änderung) — wird in
|
||||
@@ -409,7 +426,7 @@ wenn mindestens einer zutrifft: (1) `gueltig_bis` ist erreicht oder
|
||||
liegt innerhalb von 30 Tagen, (2) das zugesagte Werkzeug wurde aus dem
|
||||
Katalog entfernt, (3) `werkzeugDiff` erkennt eine Abweichung zwischen
|
||||
dem eingefrorenen `werkzeug_snapshot` und dem aktuellen Katalogeintrag
|
||||
bei AVV-Verfügbarkeit, Training-Standard oder Verarbeitungsort. Keine
|
||||
bei AVV-Verfügbarkeit, Training-Standard oder Verarbeitungsländern. Keine
|
||||
gefundene Abweichung → die Genehmigung erscheint nicht (kein stiller
|
||||
Blanko-Eintrag für jede Genehmigung). `store.ListAktiveGenehmigungenForAccount`
|
||||
liefert dafür alle `genehmigt`/`genehmigt_mit_auflagen`-Entscheidungen
|
||||
@@ -517,7 +534,7 @@ Karte mit Rahmen/Schatten, Ant-Design-Tokens aus `design/enterprise.css`
|
||||
(thematische Abschnitte mit Titel, per `border-top` getrennt), darin
|
||||
`.form-grid` (2 Spalten ab 640px für kurze Felder wie Name/Anbieter
|
||||
nebeneinander, `.form-full` erzwingt volle Breite für lange Felder).
|
||||
Checkbox-/Radio-Gruppen mit vielen Optionen (Verarbeitungsort, die
|
||||
Checkbox-Gruppen mit überschaubar vielen Optionen (Zusicherungen, die
|
||||
zwölf Zwecke) sind `.chip-group` — abgerundete Pillen statt einer
|
||||
langen Untereinander-Liste, ausgewählte Chips werden über
|
||||
`:has(input:checked)` blau hervorgehoben (kein JavaScript). Ein
|
||||
@@ -534,6 +551,21 @@ genutzt wird — ein Mandant hätte beim Löschen eines eigenen Werkzeugs
|
||||
403 bekommen. Jetzt `{{.ActionBase}}/{{.ID}}/loeschen`, wie die
|
||||
Formular-`action` selbst.
|
||||
|
||||
**Typografie-Nachbesserung (2026-08-31):** Nutzer-Feedback nach dem
|
||||
ersten Formular-Redesign: Überschriften wirkten zu klein und zu dicht
|
||||
am Rand. Ursache für Letzteres: `<legend>` in `<fieldset
|
||||
class="form-section">` positioniert sich per Spec an der Border-Box
|
||||
des Fieldsets, nicht an dessen Padding-Box — ohne eigenes Padding sitzt
|
||||
die Abschnittsüberschrift optisch enger am Kartenrand als der übrige,
|
||||
per `.form-section { padding: 20px }` eingerückte Inhalt. `.form-section
|
||||
> legend` hat jetzt selbst `padding: 0 0 16px 0` und eine größere
|
||||
Schrift (1.0625rem/700 statt 0.9375rem/600). Gleichzeitig `h2`
|
||||
(1.25rem) und `h3` (1.0625rem) erstmals explizit gesetzt (vorher reiner
|
||||
Browser-Default) und `.fragebogen legend` auf dieselbe Gewichtsstufe
|
||||
wie die Formular-Abschnitte angehoben (600/1rem statt 500/0.9375rem) —
|
||||
für eine einheitliche Überschriften-Hierarchie statt Zufallsgrößen je
|
||||
nach UA-Stylesheet.
|
||||
|
||||
**Verifikationsmethode für CSS-Änderungen:** Live-Cookie-Auth per
|
||||
Chromium-Headless/CDP ist im Sandbox-Environment nicht möglich (kein
|
||||
websocket-Python-Modul) — stattdessen: Seite per `curl -b cookies.txt`
|
||||
|
||||
Reference in New Issue
Block a user