Shop Review B I-6, I-7: Archiv der bestaetigten Rechtstexte, G09 ohne Link-Ersatz
I-6: Neue Collection shopRechtstexteArchiv (ID r + 35 Hex aus sha256(shopId + hash)); das Bestaetigen legt die Fassung samt Versand-/Zahlungstext und Gewaehrleistungstext ab, G09 zeigt die Fassung zum rechtstexteHash der Bestellung (Rueckfall mit Warnung auf die aktuell bestaetigte), loescheShopDaten loescht das Archiv mit. I-7: Grenzen AGB 20000, Belehrung 12000, Formular 3000 plus Pruefung der maskierten Laenge beim Speichern; G09 ersetzt die AGB nie mehr durch einen Link, sondern scheitert (Marker bleibt offen, wird wiederholt). Test mit Texten in Hoechstlaenge gegen die Grenzen der Warteschlange. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
2f4f360a21
commit
08d837d690
17 files changed
+288
-65
No files matched your search
@@ -14,9 +14,13 @@ import { STANDARD_EINSTELLUNGEN } from './einstellungen.js'
|
||||
export const BESTAETIGUNG_TEXT =
|
||||
'Ich habe die Texte geprüft. Ich bin als Verkäufer für Rechtstexte, Produktangaben und Preise verantwortlich. WEBklar stellt Muster bereit und berät nicht rechtlich.'
|
||||
|
||||
export const MAX_AGB = 30000
|
||||
export const MAX_WIDERRUFSBELEHRUNG = 20000
|
||||
export const MAX_WIDERRUFSFORMULAR = 5000
|
||||
// Grenzen so gewaehlt, dass die Bestaetigungs-E-Mail G09 mit allen drei Texten in die Warteschlange passt (html 100000, text 50000;
|
||||
// die Vorlage braucht rund 12000 Zeichen) und der Volltext nie durch einen Link ersetzt werden muss (§ 312f Abs. 2 BGB).
|
||||
export const MAX_AGB = 20000
|
||||
export const MAX_WIDERRUFSBELEHRUNG = 12000
|
||||
export const MAX_WIDERRUFSFORMULAR = 3000
|
||||
/** So viele Zeichen duerfen die drei Texte zusammen im HTML der Mail belegen (maskierte Zeichen und Zeilenumbrueche zaehlen mehrfach). */
|
||||
export const MAX_MAIL_HTML_TEXTE = 60000
|
||||
const MAX_URL = 500
|
||||
/** Erste Zeile des vorbefuellten Muster-AGB: der Haendler muss sie nach der Pruefung loeschen. */
|
||||
export const MUSTER_KOPFZEILE = 'Muster – bitte prüfen und anpassen'
|
||||
@@ -230,6 +234,20 @@ export function gewaehrleistungsHinweis() {
|
||||
].join('\n\n')
|
||||
}
|
||||
|
||||
/** Laenge eines Textes im HTML der Mail (wie mailTemplates.renderMail: & < > \" ' maskiert, jeder Umbruch wird <br>). */
|
||||
export function maskierteLaenge(wert) {
|
||||
let n = 0
|
||||
for (const z of String(wert)) {
|
||||
if (z === '&') n += 5
|
||||
else if (z === '<' || z === '>') n += 4
|
||||
else if (z === '"') n += 6
|
||||
else if (z === "'") n += 5
|
||||
else if (z === '\n') n += 4
|
||||
else if (z !== '\r') n += 1
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
// --- Normalisierung --------------------------------------------------------------------------------------------------------
|
||||
|
||||
// Steuerzeichen (ausser Zeilenumbruch) und unsichtbare Formatzeichen raus
|
||||
@@ -300,6 +318,10 @@ export function normalisiereRechtstexte(eingabe) {
|
||||
out[key] = ''
|
||||
} else out[key] = r.wert
|
||||
}
|
||||
// Passt die Bestaetigungs-E-Mail mit allen Texten noch in die Warteschlange? (& < > " ' werden mehrfach lang, jeder Umbruch wird <br>)
|
||||
if (Object.keys(fehler).length === 0 && ['agb', 'widerrufsbelehrung', 'widerrufsformular'].reduce((summe, k) => summe + maskierteLaenge(out[k]), 0) > MAX_MAIL_HTML_TEXTE) {
|
||||
fehler.rechtstexte = 'AGB, Widerrufsbelehrung und Widerrufsformular sind zusammen zu lang für die Bestätigungs-E-Mail an deine Kunden (viele Sonderzeichen und Zeilenumbrüche zählen mehrfach). Bitte kürze die Texte.'
|
||||
}
|
||||
if (Object.keys(fehler).length) return { fehler }
|
||||
return {
|
||||
rechtstexte: {
|
||||
|
||||
Reference in new issue
Block a user