Rechtsrunde: Wartung ab wirksamem Wechsel, Wortlaut § 9, Aufbewahrung bis Jahresende
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
f856869747
commit
7e869280f3
6 files changed
+33
-21
No files matched your search
+20
-9
@@ -323,12 +323,12 @@ test('Datenschutz Abschnitt 7: Nachweisdaten je Bestellung, Vertragsereignisse,
|
||||
assert.ok(abos.includes('nur Zeitpunkt und Status, keine IP-Adresse und Browserkennung'))
|
||||
assert.ok(abos.includes('Den Stand Ihrer Bestellungen, etwa laufende Widerrufsfristen und die Einrichtung von Zusatzspeicher, sehen Sie im Kundenportal unter „Verträge“.'))
|
||||
assert.ok(abos.includes('Aufgabenliste, um Änderungen am Zusatzspeicher umzusetzen'))
|
||||
assert.ok(sentence(abos, 'Diese Angaben löschen wir').includes('drei Jahre nach dem Ende Ihres letzten Abos'))
|
||||
assert.ok(sentence(abos, 'Diese Angaben löschen wir').includes('drei Jahre nach Ablauf des Jahres, in dem Ihr letztes Abo endet'))
|
||||
// Öffentliche Kündigungs- und Widerrufsseite (§§ 312k, 356a BGB): Daten, Zweck, Rechtsgrundlage, IP nur zur Begrenzung
|
||||
const formulare = between(abos, 'kuendigen.html', 'Abschnitt 9')
|
||||
for (const s of ['widerrufen.html', 'ohne Anmeldung', 'Namen', 'E-Mail-Adresse', 'Kundennummer', 'Eingang', 'Bestätigung', 'Team',
|
||||
'Art. 6 Abs. 1 lit. c DSGVO', '§§ 312k, 356a BGB', 'lit. b', 'IP-Adresse', 'Arbeitsspeicher', 'zehn',
|
||||
'drei Jahre nach dem Ende Ihres letzten Abos', 'Zahl der Pakete']) assert.ok(formulare.includes(s), `Formulare: ${s}`)
|
||||
'drei Jahre nach Ablauf des Jahres, in dem Ihr letztes Abo endet', 'Zahl der Pakete']) assert.ok(formulare.includes(s), `Formulare: ${s}`)
|
||||
})
|
||||
|
||||
// --- Rechtsrunde 28.09.2026 (Spec § 14: Wechsel erst mit Zahlung, Zusatzspeicher teilweise kündbar, Aufbewahrung) ---
|
||||
@@ -337,12 +337,20 @@ test('Rechtsrunde: Wechsel steht unter der Bedingung der Zahlung (§ 9 Abs. 3,
|
||||
const wechsel = absaetzeVon('wechsel', 'zusatzspeicher')
|
||||
assert.equal(wechsel.length, 5)
|
||||
for (const s of ['Der Wechsel steht unter der Bedingung, dass die Wechselrechnung bezahlt wird.',
|
||||
'Bei Zahlung per Kreditkarte wird er erst mit der erfolgreichen Zahlung wirksam',
|
||||
'Bei Zahlung per Kreditkarte wird er erst mit der erfolgreichen Zahlung wirksam.',
|
||||
'Gelingt die Zahlung nicht, etwa weil der Kunde eine von seiner Bank verlangte Freigabe nicht bestätigt, wird er nicht wirksam; spätestens 23 Stunden nach der Bestellung verfällt die Wechselrechnung.',
|
||||
'Bei SEPA-Lastschrift beginnt das Wartungs-Abo schon mit der Bestellung; wird die Lastschrift nicht eingelöst, gilt der Wechsel als nicht erfolgt.',
|
||||
'läuft das Hosting-Abo mit Preis und Mindestlaufzeit wie vor dem Wechsel weiter; wir informieren den Kunden per E-Mail.',
|
||||
'läuft das Hosting-Abo mit Preis und Mindestlaufzeit wie vor dem Wechsel weiter; bei SEPA-Lastschrift bleibt der Abbuchungstag der Wechseltag; wir informieren den Kunden per E-Mail.',
|
||||
'Das Wartungs-Abo beginnt, sobald der Wechsel wirksam ist',
|
||||
'Wechseltag ist der Tag der Bestellung']) assert.ok(wechsel[2].includes(s), `§ 9 Abs. 3: ${s}`)
|
||||
assert.ok(!v4Section('wechsel', 'zusatzspeicher').includes('beginnt sofort mit dem Wechsel'))
|
||||
// Leistung erst ab dem wirksamen Wechsel; Abbuchungstag und Mindestlaufzeit ab dem Bestelltag
|
||||
'Ab Beginn des Wartungs-Abos gilt Leistungsbeschreibung B. Wechseltag ist der Tag der Bestellung; er ist der neue Abbuchungstag (§ 7 Abs. 4), und mit ihm beginnt eine neue Mindestlaufzeit von zwölf Monaten (§ 8 Abs. 1).',
|
||||
'ab Beginn des Wartungs-Abos kann der Kunde weitere Postfächer beauftragen; wir richten sie ein, sobald die Wechselrechnung bezahlt ist.']) assert.ok(wechsel[2].includes(s), `§ 9 Abs. 3: ${s}`)
|
||||
const p9 = v4Section('wechsel', 'zusatzspeicher')
|
||||
for (const s of ['beginnt sofort mit dem Wechsel', 'Ab dem Wechseltag gilt Leistungsbeschreibung B', 'kommt er nicht zustande']) assert.ok(!p9.includes(s), `noch da: ${s}`)
|
||||
// Wertersatz beim Widerruf des Wechsels erst ab Beginn des Wartungs-Abos, nicht ab der Bestellung
|
||||
const hinweise = v4Section('widerruf-hinweise', 'avv')
|
||||
assert.ok(hinweise.includes('für die Tage vom Beginn des Wartungs-Abos bis zum Widerruf'))
|
||||
assert.ok(!hinweise.includes('vom Wechsel bis zum Widerruf'))
|
||||
assert.ok(wechsel[1].includes('Wird der Wechsel wirksam, endet das Hosting-Abo im gegenseitigen Einvernehmen.'))
|
||||
assert.ok(absaetzeVon('p2', 'p3')[4].includes('beim Wechsel steht er unter der Bedingung des § 9 Abs. 3 (Zahlung der Wechselrechnung)'))
|
||||
assert.ok(absaetzeVon('p7', 'p8')[3].includes('Wird die Wechselrechnung nicht bezahlt, gilt § 9 Abs. 3.'))
|
||||
@@ -356,6 +364,7 @@ test('Rechtsrunde: Zusatzspeicher ganz oder teilweise kündbar, auch über „Ve
|
||||
assert.ok(p8[6].includes('ganz oder teilweise (mit einer geringeren Zahl von Paketen) kündigen'))
|
||||
assert.ok(p8[7].includes('ganz oder mit der Zahl der Pakete, die er kündigt'))
|
||||
assert.ok(p8[7].includes('auch, wenn das Abo schon gekündigt ist'))
|
||||
assert.ok(p8[7].includes('Den Zeitpunkt, zu dem die Kündigung wirkt, bestätigen wir'), 'passt auch zur teilweisen Kündigung des Zusatzspeichers')
|
||||
const abs5 = absaetzeVon('zusatzspeicher', 'p11')[4]
|
||||
assert.ok(abs5.includes('Den Zusatzspeicher ganz oder teilweise kündigen kann er jederzeit über „Verträge hier kündigen“ mit der Auswahl „Nur den E-Mail-Zusatzspeicher“ und der Zahl der Pakete oder in Textform (§ 8 Abs. 8)'))
|
||||
assert.ok(abs5.includes('nach einer Kündigung des Abos kann der Kunde die Zahl der Pakete nur noch über „Verträge hier kündigen“ oder in Textform verringern'))
|
||||
@@ -365,8 +374,10 @@ test('Rechtsrunde: Zusatzspeicher ganz oder teilweise kündbar, auch über „Ve
|
||||
|
||||
test('Rechtsrunde Datenschutz: Aufbewahrung nach dem Ende des letzten Abos, Zahl der Pakete, kurzer UptimeRobot-Eintrag', () => {
|
||||
const html = read(DS), ds = strip(html)
|
||||
assert.equal(ds.split('drei Jahre nach dem Ende Ihres letzten Abos').length - 1, 2, 'Abschnitt 7 und Kündigungs-/Widerrufsseite')
|
||||
assert.ok(!ds.includes('drei Jahre nach Vertragsende'))
|
||||
assert.equal(ds.split('drei Jahre nach Ablauf des Jahres, in dem Ihr letztes Abo endet').length - 1, 2, 'Abschnitt 7 und Kündigungs-/Widerrufsseite')
|
||||
for (const s of ['drei Jahre nach Vertragsende', 'nach dem Ende Ihres letzten Abos']) assert.ok(!ds.includes(s), `noch da: ${s}`)
|
||||
// Abschnitt 6 (Kundenkonto) verweist für Abos und Bestellungen auf die Fristen in Abschnitt 7
|
||||
assert.ok(between(ds, '6. Kundenportal', '7. Abos').includes('Für Ihre Abos und Bestellungen gelten die Fristen in Abschnitt 7.'))
|
||||
// Übernahmegutschrift und Abschnitt 9 behalten ihre eigenen Fristen
|
||||
assert.ok(ds.includes('sechs Monate nach der Entscheidung'))
|
||||
assert.ok(ds.includes('acht Jahre auf (§ 147 AO, § 14b UStG), Handels- und Geschäftsbriefe sechs Jahre'))
|
||||
@@ -374,7 +385,7 @@ test('Rechtsrunde Datenschutz: Aufbewahrung nach dem Ende des letzten Abos, Zahl
|
||||
// Abschnitt 12: der UptimeRobot-Eintrag etwa so lang wie seine Nachbarn, mit Drittland und Rolle
|
||||
const empfaenger = [...html.slice(html.indexOf('12. Empfänger'), html.indexOf('13. Ihre Rechte')).matchAll(/<li>([\s\S]*?)<\/li>/g)].map((m) => strip(m[1]))
|
||||
const robot = empfaenger.find((e) => e.startsWith('UptimeRobot'))
|
||||
assert.ok(robot.includes('(insbesondere USA)') && robot.includes('Auftragsverarbeiter') && robot.includes('Abschnitt 3'), robot)
|
||||
assert.ok(robot.includes('Daten auch außerhalb der EU (insbesondere USA)') && robot.includes('Auftragsverarbeiter') && robot.includes('Abschnitt 3'), robot)
|
||||
assert.ok(robot.length <= 135, `UptimeRobot-Eintrag zu lang: ${robot.length} Zeichen`)
|
||||
})
|
||||
|
||||
|
||||
Reference in new issue
Block a user