Shop P1b: Bestellnummer im Widerruf freiwillig, ohne Nummer Bestelldatum und Artikel in der Erklärung (§ 356a BGB)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
5693f37d5f
commit
172d9f1778
6 files changed
+63
-9
No files matched your search
@@ -10,8 +10,8 @@ import { anHaendler, anKaeufer, haendlerK26 } from './mails.js'
|
||||
/**
|
||||
* Widerrufe von Kaeufern (§ 356a BGB; Spezifikation 2026-10-05-webshop-design.md Abschnitt 5.4; Plan Task E5).
|
||||
*
|
||||
* Der Kaeufer erklaert den Widerruf ueber die oeffentliche Widerrufsseite des Shops (Name, Bestellnummer als Vertragsbezeichnung,
|
||||
* E-Mail als Kontakt, optionale Nachricht). erfasseWiderruf speichert die Erklaerung (shopWiderrufe), haengt sie an die passende
|
||||
* Der Kaeufer erklaert den Widerruf ueber die oeffentliche Widerrufsseite des Shops (Name, E-Mail als Kontakt, Bestellnummer als
|
||||
* freiwillige Vertragsbezeichnung; ohne Nummer ist die Nachricht mit Bestelldatum und Artikel Pflicht). erfasseWiderruf speichert die Erklaerung (shopWiderrufe), haengt sie an die passende
|
||||
* Bestellung (gleiche Nummer und gleiche E-Mail) und bestaetigt den Eingang sofort mit G12 (Datum und Uhrzeit, Berliner Zeit, auf
|
||||
* dem dauerhaften Datentraeger E-Mail). K26 informiert den Haendler. Mailfehler lassen die Anfrage nie scheitern: dann bleibt
|
||||
* bestaetigungAt leer. Die Bestellnummer muss nicht existieren (der Widerruf ist trotzdem wirksam erklaert).
|
||||
@@ -69,11 +69,12 @@ export function normalisiereWiderruf(eingabe) {
|
||||
else if (email.length > 254 || !EMAIL_RE.test(email)) f.email = 'Bitte geben Sie eine gültige E-Mail-Adresse an.'
|
||||
|
||||
const nummer = einzeilig(roh.bestellnummer).toUpperCase()
|
||||
if (nummer === '') f.bestellnummer = 'Bitte geben Sie die Bestellnummer an.'
|
||||
else if (!NUMMER_RE.test(nummer)) f.bestellnummer = 'Die Bestellnummer darf nur aus Buchstaben, Ziffern und Bindestrichen bestehen und höchstens 32 Zeichen lang sein.'
|
||||
// Die Bestellnummer ist freiwillig (§ 356a BGB: der Kaeufer hat sie nicht immer zur Hand); ohne sie muss die Erklaerung den Vertrag benennen
|
||||
if (nummer !== '' && !NUMMER_RE.test(nummer)) f.bestellnummer = 'Die Bestellnummer darf nur aus Buchstaben, Ziffern und Bindestrichen bestehen und höchstens 32 Zeichen lang sein.'
|
||||
|
||||
const nachricht = mehrzeilig(roh.nachricht)
|
||||
if (nachricht.length > 2000) f.nachricht = 'Die Nachricht darf höchstens 2000 Zeichen lang sein.'
|
||||
else if (nummer === '' && nachricht === '') f.nachricht = 'Bitte nennen Sie Bestelldatum und Artikel, damit wir Ihren Vertrag zuordnen können.'
|
||||
|
||||
if (Object.keys(f).length > 0) return { fehler: f }
|
||||
return { widerruf: { name, email, bestellnummer: nummer, nachricht } }
|
||||
@@ -131,7 +132,7 @@ export async function erfasseWiderruf(ctx, eingabe, { now = new Date(), ip } = {
|
||||
if (geprueft.fehler) throw Object.assign(fehler(400, Object.values(geprueft.fehler)[0]), { fehler: geprueft.fehler })
|
||||
const { name, email, bestellnummer, nachricht } = geprueft.widerruf
|
||||
|
||||
const order = await passendeBestellung(shopId, bestellnummer, email)
|
||||
const order = bestellnummer === '' ? null : await passendeBestellung(shopId, bestellnummer, email)
|
||||
|
||||
const doc = await createDocument(col(), {
|
||||
shopId,
|
||||
|
||||
Reference in new issue
Block a user