From 34384c7a394359b87c38764eb0b00e5871c1dc8b Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 5 Oct 2026 03:43:39 +0000 Subject: [PATCH] AVV Terminplaner: Kleinschreibung nach Semikolon (TOM Trennung) Co-Authored-By: Claude Opus 5.5 --- docs/rechtliches/avv-terminplaner.md | 2 +- .../avv-terminplaner-2026-10-05.html | 2 +- .../avv-terminplaner-2026-10-05.pdf | Bin 106874 -> 106872 bytes .../avv-terminplaner-2026-10-05.pdf.sha256 | 2 +- test/termineVertragsunterlagen.test.js | 2 +- 5 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/rechtliches/avv-terminplaner.md b/docs/rechtliches/avv-terminplaner.md index fa7dbb0..c7f00f5 100644 --- a/docs/rechtliches/avv-terminplaner.md +++ b/docs/rechtliches/avv-terminplaner.md @@ -137,7 +137,7 @@ WEBklar stellt dem Kunden alle Informationen zur Verfügung, die zum Nachweis de | Zugriffskontrolle | Das Kundenportal ist nur nach Anmeldung erreichbar; jeder Kunde sieht nur die Daten seiner eigenen Projekte. Die öffentliche Schnittstelle des Widgets liefert nur für einen eingeschalteten Terminplaner Daten und ist über den Website-Schlüssel (Site-Key) adressiert; Buchungen nimmt sie nur von Seiten des Kunden und des Portals an. Der Kalender-Link enthält ein geheimes Token, das mit einem Vergleich in konstanter Zeit geprüft wird. | | Missbrauchsschutz | Ein verstecktes Feld (Honeypot), eine Mindestzeit bis zum Absenden des Formulars mit signiertem Formular-Token und eine Mindestantwortzeit schützen vor automatisierten Buchungen. Grenzen je IP-Adresse, je Website und je E-Mail-Adresse sowie das Mailbudget je Stunde (insgesamt und je Funktion) gelten nur im Arbeitsspeicher; ein Neustart leert sie. | | Datenminimierung | Pflicht sind immer nur Name und E-Mail-Adresse; ob Telefonnummer, Nachricht und Zusatzfelder abgefragt werden, legt der Kunde fest. Mit der Buchung werden keine IP-Adresse und kein Browser-Kennzeichen gespeichert. Der Nachweis der Zustimmungen besteht aus der Fassung der Gästetexte, dem Zeitpunkt, dem Text des Buchungsknopfs, der Anrede und Hashes der übrigen gezeigten Texte, nicht aus diesen Texten. Nach dem Versand einer E-Mail werden Empfängeradresse und Inhalt in der Warteschlange geleert. | -| Trennung | Alle Buchungen, Belegungen und Warteschlangeneinträge tragen die Kennung der Funktion (eines Terminplaners je Website-Projekt); Das Kundenportal und die öffentliche Schnittstelle lesen immer nur die Daten der jeweiligen Funktion. Die Hintergrundläufe (Löschung, Versand der E-Mails, Erinnerungen) gehen die Dokumente aller Funktionen nacheinander durch und schreiben jeweils nur in das Dokument, um das es geht. Die Einstellungen liegen je Funktion in einem eigenen Dokument. | +| Trennung | Alle Buchungen, Belegungen und Warteschlangeneinträge tragen die Kennung der Funktion (eines Terminplaners je Website-Projekt); das Kundenportal und die öffentliche Schnittstelle lesen immer nur die Daten der jeweiligen Funktion. Die Hintergrundläufe (Löschung, Versand der E-Mails, Erinnerungen) gehen die Dokumente aller Funktionen nacheinander durch und schreiben jeweils nur in das Dokument, um das es geht. Die Einstellungen liegen je Funktion in einem eigenen Dokument. | | Löschung | Täglicher Löschlauf für Buchungen, Belegungen, Warteschlange und Entwürfe nach den Fristen der Nummer 9; Termindaten und Einstellungen abgeschalteter Funktionen 30 Tage nach dem Abschalten. Vor der Löschung einer Buchung, einer abgeschalteten Funktion oder eines nicht bestellten Fragebogens wird der Zustand frisch gelesen; bei einem Lesefehler wird nichts gelöscht. | | Protokolle | Die Programmprotokolle des Terminplaners und der Tagesbericht enthalten nur Zählungen und Buchungsnummern, keine Namen, E-Mail-Adressen oder Nachrichten von Gästen. Server-Protokolle des Webservers werden nach 14 Tagen gelöscht (Anlage 2 der Abo-Bedingungen). | | Datensicherung | Tägliche Vollsicherung des Servers durch Hetzner; verfügbar sind die letzten sieben Tagessicherungen (§ 3 Abs. 5 der Abo-Bedingungen). | diff --git a/public/rechtliches/avv-terminplaner-2026-10-05.html b/public/rechtliches/avv-terminplaner-2026-10-05.html index 57d8735..dd80625 100644 --- a/public/rechtliches/avv-terminplaner-2026-10-05.html +++ b/public/rechtliches/avv-terminplaner-2026-10-05.html @@ -184,7 +184,7 @@ ZugriffskontrolleDas Kundenportal ist nur nach Anmeldung erreichbar; jeder Kunde sieht nur die Daten seiner eigenen Projekte. Die öffentliche Schnittstelle des Widgets liefert nur für einen eingeschalteten Terminplaner Daten und ist über den Website-Schlüssel (Site-Key) adressiert; Buchungen nimmt sie nur von Seiten des Kunden und des Portals an. Der Kalender-Link enthält ein geheimes Token, das mit einem Vergleich in konstanter Zeit geprüft wird. MissbrauchsschutzEin verstecktes Feld (Honeypot), eine Mindestzeit bis zum Absenden des Formulars mit signiertem Formular-Token und eine Mindestantwortzeit schützen vor automatisierten Buchungen. Grenzen je IP-Adresse, je Website und je E-Mail-Adresse sowie das Mailbudget je Stunde (insgesamt und je Funktion) gelten nur im Arbeitsspeicher; ein Neustart leert sie. DatenminimierungPflicht sind immer nur Name und E-Mail-Adresse; ob Telefonnummer, Nachricht und Zusatzfelder abgefragt werden, legt der Kunde fest. Mit der Buchung werden keine IP-Adresse und kein Browser-Kennzeichen gespeichert. Der Nachweis der Zustimmungen besteht aus der Fassung der Gästetexte, dem Zeitpunkt, dem Text des Buchungsknopfs, der Anrede und Hashes der übrigen gezeigten Texte, nicht aus diesen Texten. Nach dem Versand einer E-Mail werden Empfängeradresse und Inhalt in der Warteschlange geleert. - TrennungAlle Buchungen, Belegungen und Warteschlangeneinträge tragen die Kennung der Funktion (eines Terminplaners je Website-Projekt); Das Kundenportal und die öffentliche Schnittstelle lesen immer nur die Daten der jeweiligen Funktion. Die Hintergrundläufe (Löschung, Versand der E-Mails, Erinnerungen) gehen die Dokumente aller Funktionen nacheinander durch und schreiben jeweils nur in das Dokument, um das es geht. Die Einstellungen liegen je Funktion in einem eigenen Dokument. + TrennungAlle Buchungen, Belegungen und Warteschlangeneinträge tragen die Kennung der Funktion (eines Terminplaners je Website-Projekt); das Kundenportal und die öffentliche Schnittstelle lesen immer nur die Daten der jeweiligen Funktion. Die Hintergrundläufe (Löschung, Versand der E-Mails, Erinnerungen) gehen die Dokumente aller Funktionen nacheinander durch und schreiben jeweils nur in das Dokument, um das es geht. Die Einstellungen liegen je Funktion in einem eigenen Dokument. LöschungTäglicher Löschlauf für Buchungen, Belegungen, Warteschlange und Entwürfe nach den Fristen der Nummer 9; Termindaten und Einstellungen abgeschalteter Funktionen 30 Tage nach dem Abschalten. Vor der Löschung einer Buchung, einer abgeschalteten Funktion oder eines nicht bestellten Fragebogens wird der Zustand frisch gelesen; bei einem Lesefehler wird nichts gelöscht. ProtokolleDie Programmprotokolle des Terminplaners und der Tagesbericht enthalten nur Zählungen und Buchungsnummern, keine Namen, E-Mail-Adressen oder Nachrichten von Gästen. Server-Protokolle des Webservers werden nach 14 Tagen gelöscht (Anlage 2 der Abo-Bedingungen). DatensicherungTägliche Vollsicherung des Servers durch Hetzner; verfügbar sind die letzten sieben Tagessicherungen (§ 3 Abs. 5 der Abo-Bedingungen). diff --git a/public/rechtliches/avv-terminplaner-2026-10-05.pdf b/public/rechtliches/avv-terminplaner-2026-10-05.pdf index 5b98a55a557246faf49150b6791bc7ba36882a6b..a2c853da01f34fdee7fee85a9583d16fb0b4b821 100644 GIT binary patch delta 5376 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 diff --git a/public/rechtliches/avv-terminplaner-2026-10-05.pdf.sha256 b/public/rechtliches/avv-terminplaner-2026-10-05.pdf.sha256 index 4950ad3..880d406 100644 --- a/public/rechtliches/avv-terminplaner-2026-10-05.pdf.sha256 +++ b/public/rechtliches/avv-terminplaner-2026-10-05.pdf.sha256 @@ -1 +1 @@ -97d6afeb4e4491e7dfb8e139300b5653738b210e97c70a958f46fcfb58ec6479 +93776bde9b84709dbb6b5065cbf6c31c27080744c8096804d5b6508f9e87c14b diff --git a/test/termineVertragsunterlagen.test.js b/test/termineVertragsunterlagen.test.js index 41ff67d..ac33ded 100644 --- a/test/termineVertragsunterlagen.test.js +++ b/test/termineVertragsunterlagen.test.js @@ -782,7 +782,7 @@ test('avv_tom_fundstellen: jede Zeile der Anlage hat ihre Fundstellen im Code, i assert.ok(zeilen['Löschung'].includes('30 Tage nach dem Abschalten')) assert.ok(zeilen['Löschung'].includes('Vor der Löschung einer Buchung, einer abgeschalteten Funktion oder eines nicht bestellten Fragebogens wird der Zustand frisch gelesen')) assert.doesNotMatch(zeilen['Löschung'], /Vor jeder Löschung/) - assert.ok(zeilen['Trennung'].includes('Das Kundenportal und die öffentliche Schnittstelle lesen immer nur die Daten der jeweiligen Funktion.')) + assert.ok(zeilen['Trennung'].includes('das Kundenportal und die öffentliche Schnittstelle lesen immer nur die Daten der jeweiligen Funktion.')) assert.ok(zeilen['Trennung'].includes('Die Hintergrundläufe (Löschung, Versand der E-Mails, Erinnerungen) gehen die Dokumente aller Funktionen nacheinander durch und schreiben jeweils nur in das Dokument, um das es geht.')) assert.doesNotMatch(zeilen['Trennung'], /Abfragen erfolgen nur je Funktion/) assert.ok(zeilen['Datenminimierung'].includes('der Fassung der Gästetexte, dem Zeitpunkt, dem Text des Buchungsknopfs, der Anrede und Hashes der übrigen gezeigten Texte'))