Terminplaner: Widerrufsfunktion im Satzrahmen des Musters, Belehrung nur mit Anschrift und Telefon

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-03 08:17:43 +00:00
1 parent 459efff10a
commit 0c033ab1d2
3 files changed
+56 -42

No files matched your search

+23 -12
View File
@@ -7,8 +7,8 @@
*
* widerrufsbelehrung: Muster der Anlage 1 und Muster-Widerrufsformular der Anlage 2 zu Art. 246a § 1 Abs. 2 Satz 2 EGBGB
* (docs/rechtliches/quellen/, abgerufen 2026-10-02), Gestaltungshinweise fuer einen Dienstleistungsvertrag angewendet:
* Fristbeginn „des Vertragsabschlusses.“, Betriebsdaten, Hinweis auf die Widerrufsfunktion als „anderer geeigneter
* Hinweis“ (ohne Internetadresse), Wertersatz fuer Dienstleistungen. Alles Uebrige ist der Gesetzestext, unveraendert.
* Fristbeginn „des Vertragsabschlusses.“, Betriebsdaten (Name, Anschrift, Telefon, E-Mail, alle Pflicht), Hinweis auf die
* Widerrufsfunktion als „anderer geeigneter Hinweis“ (ohne Internetadresse) im woertlichen Satzrahmen, Wertersatz fuer Dienstleistungen. Alles Uebrige ist der Gesetzestext, unveraendert.
* Ausgelassen: Textbausteine zu Waren (Besitz, Rueckzahlungsverweigerung, Rueckgabe, Rueckkosten, Wertverlust) und der
* Absatz zum elektronischen Webformular (es gibt nur die Widerrufsfunktion). test/termineRechtstexte.test.js prueft
* den Wortlaut gegen die Quelldateien.
@@ -24,12 +24,21 @@ const ABSATZ = '\n\n'
/** Einzeiliger Text: jeder Leerraum (auch Umbrueche) wird zu einem Leerzeichen, Rand getrimmt; Nicht-Text = ''. */
const einzeilig = (wert) => (typeof wert === 'string' ? wert.replace(/\s+/g, ' ').trim() : '')
/** Betriebsdaten fuer die Texte. Name und E-Mail sind Pflicht (die Einstellung prueft sie), Anschrift und Telefon entfallen, wenn leer. */
function betriebsdaten(betrieb) {
/**
* Betriebsdaten fuer die Texte. Name und E-Mail sind immer Pflicht (die Einstellung prueft sie). Mit vollstaendig: true
* auch Anschrift und Telefonnummer (das Muster der Anlage 1 verlangt alle vier): fehlt eine Angabe oder ist sie leer,
* entsteht ein TypeError, nie ein unvollstaendiger Text.
*/
function betriebsdaten(betrieb, { vollstaendig = false } = {}) {
const name = einzeilig(betrieb?.name)
const email = einzeilig(betrieb?.email)
if (!name || !email) throw new TypeError('Betriebsname und E-Mail-Adresse sind für die Rechtstexte erforderlich.')
return { name, email, adresse: einzeilig(betrieb.adresse), telefon: einzeilig(betrieb.telefon) }
const adresse = einzeilig(betrieb.adresse)
const telefon = einzeilig(betrieb.telefon)
if (vollstaendig && (!adresse || !telefon)) {
throw new TypeError('Anschrift und Telefonnummer des Betriebs sind für die Widerrufsbelehrung erforderlich.')
}
return { name, email, adresse, telefon }
}
const verbinde = (teile) => teile.filter(Boolean).join(', ')
@@ -38,10 +47,11 @@ const verbinde = (teile) => teile.filter(Boolean).join(', ')
const FRIST = 'des Vertragsabschlusses.' // Gestaltungshinweis a): Dienstleistungsvertrag
// Widerrufsfunktion: „anderer geeigneter Hinweis“ statt Internetadresse, danach der Gesetzeswortlaut.
// Widerrufsfunktion: Satzrahmen des Gesetzes wörtlich („Sie können Ihr Widerrufsrecht auch online unter … ausüben.“); in die
// Lücke „… [Internetadresse oder anderen geeigneten Hinweis …]“ kommt ein geeigneter Hinweis statt einer Internetadresse.
const WIDERRUFSFUNKTION =
'Sie können Ihr Widerrufsrecht auch online über die Schaltfläche „Vertrag widerrufen“ ausüben, '
+ 'die Sie im Terminbereich auf unserer Website und über den Link „Termin verwalten“ in Ihrer Bestätigungs-E-Mail finden. '
'Sie können Ihr Widerrufsrecht auch online unter „Vertrag widerrufen“ (Schaltfläche im Terminbereich auf unserer Website '
+ 'sowie Link „Termin verwalten“ in Ihrer Bestätigungs-E-Mail) ausüben. '
+ 'Wenn Sie diese Online-Funktion nutzen, übermitteln wir Ihnen auf einem dauerhaften Datenträger (z. B. durch eine E-Mail) '
+ 'unverzüglich eine Eingangsbestätigung mit Informationen zum Inhalt der Widerrufserklärung sowie dem Datum und der Uhrzeit ihres Eingangs.'
@@ -53,7 +63,7 @@ const WERTERSATZ =
/** Kontaktangaben fuer „Um Ihr Widerrufsrecht auszuüben, müssen Sie uns (…)“: Name, Anschrift, Telefonnummer, E-Mail-Adresse. */
function kontakt({ name, adresse, telefon, email }) {
return verbinde([name, adresse, telefon && `Telefon: ${telefon}`, `E-Mail: ${email}`])
return verbinde([name, adresse, `Telefon: ${telefon}`, `E-Mail: ${email}`])
}
function belehrungsAbsaetze(daten) {
@@ -98,11 +108,12 @@ function formularAbsaetze({ name, adresse, email }) {
/**
* Widerrufsbelehrung und Muster-Widerrufsformular fuer einen Dienstleistungs-Termin, Sie-Form, als Text mit Zeilenumbruechen.
* betrieb: { name, email, adresse?, telefon? } aus der Einstellung. Fehlen Name oder E-Mail: TypeError. Fehlende Anschrift
* oder Telefonnummer entfallen aus dem Text (die Einstellung verlangt sie nicht; das Portal sollte die Anschrift verlangen).
* betrieb: { name, email, adresse, telefon } aus der Einstellung, alle vier Pflicht. Fehlt eine Angabe oder ist sie leer: TypeError
* (eine unvollstaendige gesetzliche Belehrung wird nie stillschweigend erzeugt). Die Einstellungspruefung soll Anschrift und
* Telefon verlangen, sobald Gaeste ein Widerrufsrecht haben koennen (spaeterer Task); bis dahin faengt diese Funktion es ab.
*/
export function widerrufsbelehrung(betrieb) {
const daten = betriebsdaten(betrieb)
const daten = betriebsdaten(betrieb, { vollstaendig: true })
return [...belehrungsAbsaetze(daten), ...formularAbsaetze(daten)].join(ABSATZ)
}